繁体   English   中英

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

[英]How should I Implement Localization on Wpf Application using MVVM pattern?

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

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

在这个应用程序中我设置网格行Vlidation错误,并从视图模型弹出一些MessageBoxes但LocBaml看起来没有帮助转换这些错误消息和消息框消息在其他语言。 我怎么能做到这一点?

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

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

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

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

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”)

您可以查看我编写的一些软件来执行此操作:

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM