什么是一个很好的方法来本地化一个基于MVVM的WPF应用程序,可以在运行时改变它的语言?当然,我可以在ViewModel中为每个显示在View中的字符串创建一个字符串属性,但这对我来说似乎相当乏味。对此是否有共同的方法/最佳做法?
5m1hhzi41#
这是一个excellent article about WPF localization。它涉及Microsoft支持的本地化技术和一些替代技术我不推荐本地化的“官方”解决方案。使用起来真的很痛苦,它会修改你的XAML(给每个可以本地化的元素添加x:Uid属性),而且MS没有好的工具来使它成为一个简单的解决方案。很好的旧resx本地化更容易使用,并且只需几个技巧(即标记扩展和/或附加属性)就可以很好地与WPF集成。此外,由于绑定系统,您可以在运行时轻松更改接口语言。
e0bqpujr2#
WPF has a lot of support for localization也许你可以利用这个不幸的是,我认为在运行时更改用户界面语言有些困难,您可能需要提出自己的方案。另外,由于视图模型是与UI无关的,我不认为在视图模型中存储用户界面字符串是一个好的解决方案。这些属于视图。
p5fdfcr13#
您可以将用户界面字符串存储在程序集的资源中,并使用x:Static直接从XAML访问它们,而不是在视图模型中使用用户界面字符串:
x:Static
<TextBlock Text="{x:Static props:Resources.MyLabel}"/>
props命名空间应该引用程序集的Properties命名空间:
props
Properties
xmlns:props="clr-namespace:My.Assembly.Properties"
3pmvbmvn4#
您可以使用自定义标记扩展查找本地化值,并在UI区域性更改时更新这些值。下面是一个示例,说明这可能如何工作:
<Label x:Name="lblResxHelloWorldMarkupExtension1Value" Content="{res:Res Id=HelloWorld,Default=Hello#}" Margin="{res:Res Id=HelloWorldMargin,Default=10}" Width="{res:Res Id=HelloWorldWidth, ResourceSet=WpfClickOnce.MyFormRes, Default=50}" />
此示例摘自Rick Strahl和Michele Leroux Bustamante撰写的优秀WPF本地化指南:http://wpflocalization.codeplex.com/。从这个网站下载指南,其中以文档形式详细描述了这项技术,并提供了一个示例应用程序。这种方法的另一个好处是它可以在设计器中工作。
l5tcr1uw5#
如果你对这个主题感兴趣,你可以看看我在codeplex上开发的库。本地化库:http://localizationlibrary.codeplex.com/
7y4bm7vi6#
这里有几篇文章可能会感兴趣:Localizing WPF Applications using LocbamlWPF Runtime LocalizationSimple WPF Localization
6条答案
按热度按时间5m1hhzi41#
这是一个excellent article about WPF localization。它涉及Microsoft支持的本地化技术和一些替代技术
我不推荐本地化的“官方”解决方案。使用起来真的很痛苦,它会修改你的XAML(给每个可以本地化的元素添加x:Uid属性),而且MS没有好的工具来使它成为一个简单的解决方案。很好的旧resx本地化更容易使用,并且只需几个技巧(即标记扩展和/或附加属性)就可以很好地与WPF集成。此外,由于绑定系统,您可以在运行时轻松更改接口语言。
e0bqpujr2#
WPF has a lot of support for localization也许你可以利用这个不幸的是,我认为在运行时更改用户界面语言有些困难,您可能需要提出自己的方案。
另外,由于视图模型是与UI无关的,我不认为在视图模型中存储用户界面字符串是一个好的解决方案。这些属于视图。
p5fdfcr13#
您可以将用户界面字符串存储在程序集的资源中,并使用
x:Static
直接从XAML访问它们,而不是在视图模型中使用用户界面字符串:props
命名空间应该引用程序集的Properties
命名空间:3pmvbmvn4#
您可以使用自定义标记扩展查找本地化值,并在UI区域性更改时更新这些值。
下面是一个示例,说明这可能如何工作:
此示例摘自Rick Strahl和Michele Leroux Bustamante撰写的优秀WPF本地化指南:http://wpflocalization.codeplex.com/。从这个网站下载指南,其中以文档形式详细描述了这项技术,并提供了一个示例应用程序。
这种方法的另一个好处是它可以在设计器中工作。
l5tcr1uw5#
如果你对这个主题感兴趣,你可以看看我在codeplex上开发的库。
本地化库:http://localizationlibrary.codeplex.com/
7y4bm7vi6#
这里有几篇文章可能会感兴趣:
Localizing WPF Applications using Locbaml
WPF Runtime Localization
Simple WPF Localization