MvvmCross本地化:在运行时切换

Alp*_*age 5 xamarin.ios windows-phone-7 xamarin.android mvvmcross xamarin

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

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

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

在此先感谢您的帮助.

Stu*_*art 2

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

是的,调用builder.LoadResources(whichLanguage)您的MvxTextProviderBuilder.cs

例如:点击按钮时能够切换

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

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

或者在启动应用程序时,获取用户语言并进行切换。

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

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

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

SWK 语言选择

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

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

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


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

  • 如果您对文本使用数据绑定,您可能可以做一些简单的事情...例如,如果使用像 `local:MvxBind="{'Text':{'Path':'TextSource','Converter':'Language 这样的绑定','ConverterParameter':'SQLBitsXApp'}}"` 来自 https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Resources/Layout/Page_About .axml 那么你可以在所有现有的 ViewModel 上 RaisePropertyChanged(() => TextSource) ...这将需要一些管道... (2认同)