我正在使用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中定义的值。我一定是误会了。我该怎么做才能获得返回的字符串的本地化版本?
答案 0 :(得分:0)
与OP讨论后,问题在于设置语言太晚了(在App
的{{1}}中)。
实际上,使用线程的当前语言加载本地化资源字典一次。如果线程语言更改太晚,则已加载资源,并且不会触发重新加载。
在这种特殊情况下的解决方案是尽可能早地更改UI线程的语言环境 - 也就是说,在OnStartup
的构造函数中。