2013-12-17 52 views
0

对不起,提前我的英文,它是我的第一篇文章。 我在Resolve中遇到了奇怪的问题,在Silverlight中支持文化。 其主要项目(解决方案资源管理器屏幕:http://i.imgur.com/A4sHWRI.png?1)中的Silverlight应用程序具有1个启动整个Silverlight应用程序,1个主项目(silverlight,sl.Application)和其他用作模块(silverlight)的web(asp.net)项目。 Sl.Application可以调用其他项目和使用他们的意见放在sl.application主视图的一部分Silverlight 5中的资源文化问题

我试图添加不同的文化,所以:

我添加到我的应用程序支持的区域性EN和CS到每个cs.proj。

<SupportedCultures>pl;en;cs;de;ru;cz;sk</SupportedCultures> 

我的中性文化在每个项目的装配信息中设置为PL。

[assembly: NeutralResourcesLanguageAttribute("pl-PL")] 

对不同文化的创建RESX文件,这里FOL PL,EN,CS:http://i.imgur.com/P6woiV2.png

在启动应用程序,你可以选择你想要的文化,通过点击特定的标志。首先让我们从PL开始 - 它的中立文化,所以我不需要改变任何东西。使用

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

var test_en = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

我检查了区域性设置为PL和资源(DriveBook.resx)在PL

下一页返回正确的字符串: 让我们尝试EN,启动应用程序,选择EN标志 - 改变文化为en -GB。

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-GB"); 

使用相同的代码上面,我返回字符串EN所以它还是不错的

最好的开始,当我试图使用CS。 同上,我选择CS标志 - 改变文化CS-CZ 使用SL.Application

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

其回报我的CS-CZ文化,所以我想会有好了,当我打电话

var test_cs = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

它从CS文化返回我字符串,仍然一切正常,那么问题在哪里?

,当我在其他项目(从公共或模块文件夹)试过同样的,这里谈到魔术:)

同上 使用Modules.Auxiliary

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

还OK,我们得到了CS -CZ文化,似乎工作正常,但

var test_cs = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

它返回字符串我从PL文化,而不是从CS

总结: 更改文化对于EN来说工作正常,整个应用程序从resx文件中获得EN字符串,但是当我更改为CS时,只有SL.Application可以解析* .cs.resx文件,其他项目看起来像没有看到* .cs.resx文件。虽然添加恩和CS我完全相同的工作,两者和EN工作正常,但CS不是。它有任何posibily,在cs.proj中有一些属性限制当前项目中最大支持的文化,或者你有什么想法我做错了什么?

回答

0

好吧,我自己解决了这个问题 问题出在我的自定义框架中,它负责差分加载资源。仅通过文件名解析dll,不包括filePath(这里是文件夹cs,en适用于不同的文化)根据词法顺序导致覆盖文件,所以CS.resx首先被加载,但后来我加载EN资源并覆盖cs.resx。这个框架在加载main xap时开始工作。主sl项目工作,因为它是较早加载,例如用于加载屏幕,以便在我的框架无法破坏时加载resource.cs.resx