首页 文章

Silverlight 5中的资源文化问题

提问于
浏览
0

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

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

我添加到我的应用程序支持的文化EN和CS到每个cs.proj .

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

在每个项目中,我的中性文化设置为PL in assemby info .

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

为不同的文化创建resx文件,这里是PL 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标志 - 在SL.Application中将文化更改为cs-CZ

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

它让我回归cs-CZ文化,所以当我打电话时,我认为会有好的

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

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

当我在其他项目中尝试相同时(来自Common或Modules文件夹),这里来了魔术:)

与上面相同在Modules.Auxiliary中使用

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

还行,我们得到了cs-CZ文化,似乎工作正常,但是

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

它返回PL文化中的字符串,而不是CS

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

1 回答

  • 0

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

相关问题