首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM光和运行时本地化更改

MVVM光和运行时本地化更改
EN

Stack Overflow用户
提问于 2016-04-13 10:29:20
回答 1查看 870关注 0票数 2

在MVVM Light应用程序中实现运行时本地化更改的正确方法是什么?我使用的是基于资源的本地化(.resx文件),我希望几乎在任何时候都可以更改地区。

我最初认为在App.xaml.cs中使用每个视图中连接的LocalizationChanged事件来执行全局属性,但这至少违反了MVVM的两条规则:代码隐藏类和耦合视图类中不包含代码,因为它们将依赖于App (将更难对它们进行单元测试)

另一个想法是创建全局接口ILocalizableModel,它将由LocalizableModel类(通过mvvm魔术在运行时注入)实现,然后提供注册LocalizationChanged事件的接口和设置新本地化的方法(以及其他一些功能,比如枚举可用的本地化)。该事件将在ViewModel类中触发,并请求它们更新所有属性。这还有另一个问题:如果不重新创建某些视图数据(如列表),则无法更新它们。在ViewModel中处理特定于视图的强代码似乎也有点扭曲。

另一个想法是使用在模型中连接的观察者模式或自动属性。

但是,什么是“正确”,MVVM的方式来这样做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 13:30:19

我花了很多周的时间研究这个问题,并得出了这样的结论:对于WPF/MVVM来说,resx文件不是最好的解决方案。我发现的最佳解决方案是使用自定义标记扩展,它允许您像这样声明XAML:

代码语言:javascript
复制
<TextBlock Text="{Translate 'Hello World!'}" />

这提供了一些好处:

  1. 您仍然可以用母语编写XAML,原始字符串形成用于索引本地化表的键。
  2. 您可以编写一个简单的实用程序来解析所有XAML并将键字符串提取到一个表中,然后您可以将该表提供给您的翻译器(另外,在等待适当的翻译时,很容易将其粘贴到Google翻译中)。
  3. 您可以立即更改当前语言,所有绑定都将立即更新.
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36595646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档