使用XAML ResourceDictionary在WPF代码中本地化字符串

时间:2012-03-29 16:22:15

标签: wpf xaml localization resourcedictionary

我正在使用LocBaml方法本地化WPF应用程序。对于.xaml文件中定义的UI,一切都很有用。但是我有几个在代码隐藏中生成的字符串,也必须进行本地化。所以我尝试在this文章中采用Microsoft推荐的方法。我有一个xaml资源字典文件:

<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:system="clr-namespace:System;assembly=mscorlib">

     <!-- String resource that can be localized -->
     <system:String x:Uid="system:String_1" x:Key="localizedMessage">en-US Message</system:String>
</ResourceDictionary>

然后我使用第三方工具生成包含资源字典的西班牙语版本的本地化resources.dll。

然而,当我打电话

string localizedMessage = (string)Application.Current.Resources["localizedMessage"];

localizedMessage始终返回en-US版本的dll中定义的值。我一定是误会了。我该怎么做才能获得返回的字符串的本地化版本?

1 个答案:

答案 0 :(得分:0)

与OP讨论后,问题在于设置语言太晚了(在App的{​​{1}}中)。

实际上,使用线程的当前语言加载本地化资源字典一次。如果线程语言更改太晚,则已加载资源,并且不会触发重新加载。

在这种特殊情况下的解决方案是尽可能早地更改UI线程的语言环境 - 也就是说,在OnStartup的构造函数中。