Silverlight本地化错误?

时间:2010-12-08 13:22:48

标签: .net silverlight localization

我有一个非常奇怪的问题,看起来它可能是一个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>

知道我做错了吗?

2 个答案:

答案 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')。