MvvmCross本地化:在运行时切换

时间:2012-11-19 14:17:28

标签: windows-phone-7 xamarin.ios xamarin.android xamarin mvvmcross

有没有办法在运行时将当前语言更改为另一种语言?

例如:能够在单击按钮或启动应用程序时切换,获取用户语言并切换。

如何告诉插件在启动时检查用户语言?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

有没有办法在运行时将当前语言更改为另一种语言?

是的,请致电MvxTextProviderBuilder.cs

上的builder.LoadResources(whichLanguage)
  

例如:单击按钮时可以切换

UI框架并未真正设置为执行切换。当您在语言之间切换时,新的JSON资源文件将全部加载好 - 但现有的显示文本将不会更新。这有点像大多数移动操作系统 - 如果你想切换语言,你经常需要重启!

如果你想添加动态切换,那么你必须找到一种方法告诉用户界面完全刷新所有文本 - 我怀疑这不难做到,但可能需要在每个页面上进行一些手动编码/查看已创建和显示的内容:/

  

或启动应用时,获取用户语言并切换。

这是一个更直接的方式来做i18n。这通常没问题,因为MvvmCross主要针对手机 - 而手机通常是单用户设备,不会经常切换语言。

  • 例如,您可以使用一些变量(例如System.Globalization.CultureInfo.CurrentUICulture)来计算出要展示的最佳语言。

  • 或者您在加载时检测到用户是否已选择语言 - 如果有,则显示HomeViewModel - 如果他们还没有显示LanguagePickerViewModel - 这就是我们的意思在StarWarsKinect中做过 - StartNavigationObject是这种逻辑的完美之处!

SWK Language Pick

  

如何告诉插件在启动时检查用户语言?

目前,您必须将此逻辑编码为应用启动的一部分。

我绝对愿意为此提供一个改进的插件 - 也许是一个演示!


如果你正在考虑i18n,那么另一个可以考虑的替代实现是Vernacular - Rdio团队为Mono和MS平台提供了非常好的产品 - https://github.com/rdio/vernacular