.net – Silverlight本地化漏洞?

我有一个非常奇怪的问题,看起来它可能是一个Silverlight错误.我在一个简单的应用程序中重现了这个,该应用程序是从VS2010,Silverlight Application项目默认模板创建的.

在应用程序中,我有两个.resx文件,“Strings.resx”和“Strings.de.resx”.它们每个都有一个键“SomeString”,如下所示:

Strings.resx – SomeString – “一些测试字符串”

Strings.de.resx – SomeString – “一些DE测试字符串”

在单个应用程序MainPage.xaml上,我刚刚在MainPage的类构造函数中打了一个TextBlock,我在代码中使用它:

   Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
   txt.Text = Strings.SomeString;

   Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
   txt.Text = Strings.SomeString;

使用调试器逐步执行此操作会先将txt.Text显示为“某个DE测试字符串”,然后再显示“某个测试字符串”.所以一切都按预期运作.

但是,我在我的机器上安装了德语语言包.现在,如果我在机器的区域设置中将系统语言更改为“Deutsch”并注销/登录以使更改生效,则相同的代码将以不同的方式工作:从资源中检索SAME字符串“some DE test string”两次.基本上,当前文化/ uiculture的第二个设置为“en-US”没有做任何事情,德国字符串仍然被检索.

所以实际上,如果我想要一个用户可以独立于系统语言改变显示语言的应用程序,我不能这样做,因为检索到不正确的资源.

同样,在Windows操作系统语言设置为英语的情况下,一切正常,我可以更改文化,它可以工作,加载正确的字符串资源.当Windows操作系统语言设置为Deutsch(尚未检查其他人)时,我无法加载英文字符串资源.

这个问题在Vista和Windows 7机器上都有体现,还没有在其他机器上测试过.

ps:将csproj文件更改为< SupportedCultures> en,en-US,de,de-DE< / SupportedCultures>

知道我做错了什么吗?

最佳答案 我认为您的问题来自Silverlight程序集的默认文化:在将Windows文化从en更改为de后,您是否重新编译了应用程序?

尝试检查装配中性文化,并手动设置:

[assembly: NeutralResourcesLanguage("en")]

在assemblyInfo.cs文件中

点赞