似乎有很多方法可以在WPF应用程序中实现多种语言。但是我想了解更多关于我应该使用哪种方法以满足以下要求的信息:
有人可以告诉我如何实现这个目标吗?
谢谢!
答案 0 :(得分:4)
一种常见的方法是将textblocks / labels等的text属性绑定到静态定义的本地化资源上的某个属性:
<Label Content="{Binding Source={x:Static loc:LanguageContext.Instance},
Path=Dictionary, Mode=OneWay,
Converter={StaticResource languageConverter},
ConverterParameter=TextId}" />
即。 LanguageContext.Instance通过属性Dictionary公开字典,Converter使用给定的ConverterParameter查找通过TextId识别的文本。
这是一种繁琐的方法,无法满足您的所有要求。
更好的方法是定义自己的标记扩展来执行此类逻辑。我在网上看到了几个解决方案,这个高评价的代码项目文章:
http://www.codeproject.com/KB/WPF/realtime_multilingual.aspx
这里提供类似的解决方案,提供Blend,即时语言更改,因此对您来说可能是一个不错的选择:
使用上面的示例,您可以定义一个附加属性,该属性标识已翻译项目的键,并使用Translate标记扩展来标识已翻译的属性。
注意:这里不仅仅是正在翻译的文字,通常还需要更改颜色/图形......等等。
答案 1 :(得分:3)
与此同时,我找到了一个非常有效的开源项目:http://wpflocalizeextension.codeplex.com。它只是添加对dll的引用,添加带有翻译的资源,并在XAML中使用它。它在5分钟内完成。我可以为单个模块添加多个资源;它在视觉工作室设计师和混合中工作得很好。并且,可以动态更改区域设置。符合我的要求:)