Silverlight 5中的资源文化问题

时间:2013-12-17 17:03:50

标签: c# resources silverlight-5.0 culture

抱歉,我的英语提前,这是我的第一篇文章。 我在RESX中遇到了奇怪的问题,在Silverlight中支持文化。 它的silverlight应用程序包含1个web(asp.net)项目,它启动了整个silverlight应用程序,1个主项目(silverlight,sl.Application)以及其他在主项目中用作模块(silverlight)的程序(解决方案资源管理器屏幕:{{3} })。 Sl.Application可以调用其他项目并使用他们的视图作为sl.application中放置的主视图的一部分

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

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

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

我的中立文化在每个项目的组合信息中设置为PL。

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

为不同的文化创建resx文件,此处为PL PL,EN,CS:http://i.imgur.com/A4sHWRI.png?1

在启动应用程序时,您可以通过单击特定标志来选择所需的文化。 首先让我们从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文化返回我的字符串,仍然一切正常,所以问题在哪里?

当我在其他项目中尝试相同时(来自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 :(得分:0)

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