多语言WPF应用程序的方法

时间:2011-01-31 07:19:15

标签: wpf prism multilingual

似乎有很多方法可以在WPF应用程序中实现多种语言。但是我想了解更多关于我应该使用哪种方法以满足以下要求的信息:

  • 这是一个PRISM应用程序,因此许多独立的模块(程序集)协同工作。我希望每个程序集都有自己的UI元素翻译。
  • 我需要一种简单的方法,不需要工具来生成东西
  • 仍然可以使用blend来设计UI
  • 可选择在不重启应用程序(不是交易破解者)的情况下切换语言

有人可以告诉我如何实现这个目标吗?

谢谢!

2 个答案:

答案 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,即时语言更改,因此对您来说可能是一个不错的选择:

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx

使用上面的示例,您可以定义一个附加属性,该属性标识已翻译项目的键,并使用Translate标记扩展来标识已翻译的属性。

注意:这里不仅仅是正在翻译的文字,通常还需要更改颜色/图形......等等。

答案 1 :(得分:3)

与此同时,我找到了一个非常有效的开源项目:http://wpflocalizeextension.codeplex.com。它只是添加对dll的引用,添加带有翻译的资源,并在XAML中使用它。它在5分钟内完成。我可以为单个模块添加多个资源;它在视觉工作室设计师和混合中工作得很好。并且,可以动态更改区域设置。符合我的要求:)