我有一个非常奇怪的问题,看起来它可能是一个Silverlight错误。我在一个简单的应用程序中重现了这一点,该应用程序是从VS2010,Silverlight应用程序项目默认模板创建的。
在应用程序中,我有两个.resx文件,“Strings.resx”和“Strings.de.resx”。它们每个都有一个键“SomeString”,如下所示:
Strings.resx - SomeString - “some test string”
Strings.de.resx - SomeString - “some DE test string”
在单个应用程序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首先是“some DE test string”然后是“some test string”。所以一切都按预期工作。
但是,我在我的机器上安装了德语语言包。现在,如果我在机器的区域设置中将系统语言更改为“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>
知道我做错了吗?
答案 0 :(得分:2)
我认为您的问题来自Silverlight程序集的默认文化:在将Windows文化从en更改为de后,您是否重新编译了应用程序?
尝试检查装配中性文化,并手动设置:
[assembly: NeutralResourcesLanguage("en")]
assemblyInfo.cs文件中的
答案 1 :(得分:0)
我遇到了同样的问题。为我修复的是,我不依赖Silverlight猜测正确的中性语言。我的应用程序转换为en,de,fr和它。所以我做了(在每个项目中我都有可本地化的字符串):
GuiStrings.resx
GuiStrings.en.resx
GuiStrings.de.resx
GuiStrings.fr.resx
GuiStrings.it.resx
这解决了一个奇怪的问题,即Silverlight忽略了德语机器上的中性语言('en')。