我应该如何使用MVVM模式在Wpf应用程序上实现本地化?

时间:2011-09-27 06:19:35

标签: c# wpf mvvm

我正在使用Devexpress工具和跟随MVVM模式的wpf应用程序..

我已经使用Locbaml工具在其上应用了本地化,它工作得非常好,但仅适用于View。

在这个应用程序中,我正在设置Grid Row Vlidation错误,并且还从View Model中弹出一些MessageBox,但LocBaml对于转换这些错误消息和消息框消息在其他语言中看起来没什么帮助。我怎么能做到这一点?

5 个答案:

答案 0 :(得分:1)

LocBaml仅从baml中提取内容,baml是xaml文件的编译形式。 xaml中未定义的任何内容(例如,代码隐藏中定义的字符串)将永远不会被它看到。我知道的唯一解决方法是定义您可能希望在xaml中本地化为字符串资源的所有字符串。这些可以很容易地从代码隐藏中引用,因此它没有声音那么糟糕。完全动态生成的字符串不可本地化,但通过一些工作,您可以从xaml资源中定义的片段构建它们。

答案 1 :(得分:0)

直接从ViewModel获取消息框是错误的。相反,您应该引发事件并让视图执行UI。否则你无法对ViewModel进行单元测试,这是MVVM模式的主要目标之一。

答案 2 :(得分:0)

如果您使用.resx文件来管理翻译,您只需让它们生成代码(在.resx屏幕的组合框中使用Access Modifier:Public),然后让VM直接将消息发送到视图

这样,代码生成的资源文件的基础功能将返回所需文本的翻译版本。

答案 3 :(得分:0)

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx检查一下。您可以通过从代码中调用translate方法从VM发送本地化文本。例如

LanguageDictionary.Current.Translate(“resourceKey”,“value Name”)

答案 4 :(得分:0)

你可以看一下我写的一些软件来做这件事:

http://tap-source.com/?p=232

希望这有帮助。