本地化基于MVVM的WPF应用程序

bit*_*onk 8 wpf localization mvvm

什么是一个很好的方法来本地化基于MVVM的WPF显示,可以在运行时更改其语言?当然,我可以在ViewModel中为View中某处显示的每个字符串创建一个字符串属性,但这对我来说似乎相当繁琐.对此有共同的方法/最佳实践吗?

Mar*_*age 9

WPF对本地化有很多支持.也许你可以利用它?不幸的是,我认为在运行时更改用户界面语言有点困难,您可能需要提出自己的方案.

此外,由于视图模型是UI不可知的,我不认为在视图模型中存储用户界面字符串是一个很好的解决方案.这些都属于观点.

  • 我不同意皮特戴维斯.本地化属于视图,而不属于视图模型.视图模型不应该担心视图如何呈现自己.而且,本地化只是视图可以用替代语言呈现的一种方式. (5认同)
  • 考虑到View-Model是View的模型,我个人认为这是放置本地化的最佳位置.这也将允许来自相同视图模型的本地化Silverlight和WPF UI. (3认同)

Tho*_*que 9

这是一篇关于WPF本地化优秀文章.它涉及Microsoft支持的本地化技术,以及一些替代技术

我不推荐本地化的"官方"解决方案...这真的很难用,它会修改你的XAML(将x:Uid属性添加到每个可以本地化的元素),并且没有好的工具从MS到使它成为一个简单的解决方 良好的旧resx本地化更容易使用,并且与WPF集成很好,只有一些技巧(即标记扩展和/或附加属性).此外,由于绑定系统,您可以在运行时轻松更改界面语言.


Boj*_*nik 6

您可以将它们存储在程序集的资源中,而不是在视图模型中使用用户界面字符串,并使用以下命令直接从XAML访问它们x:Static:

<TextBlock Text="{x:Static props:Resources.MyLabel}"/>
Run Code Online (Sandbox Code Playgroud)

props命名空间应该是指你的程序集的Properties命名空间:

xmlns:props="clr-namespace:My.Assembly.Properties"
Run Code Online (Sandbox Code Playgroud)