是否有关于使用.Net Standard的MvvmCross.Forms和本地化的教程

时间:2019-04-23 18:39:52

标签: c# xamarin.forms uwp localization mvvmcross

我正在尝试学习如何使用MvvmCross.Forms在Xamarin Forms应用程序中实现和测试本地化。使用Visual Studio 2017或2019 Community Edition。

到目前为止,我已经尝试按照这些教程进行操作。

https://www.mvvmcross.com/documentation/plugins/resxlocalization

https://mobileprogrammerblog.wordpress.com/2017/12/30/mvvm-cross-with-xamarin-platform-resx-localization/

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/localization/

但是这些都没有显示如何为Visual Studio解决方案具有以下设置的.Net Standard类实现解决方案。

  • Application.Core-用于ViewModels和服务(带有MvvmCross NuGet的.Net Standard 2.0库)
  • Application.UI-这是共享的视图和视图逻辑(具有Xamarin.Forms MvvmCross MvvmCross.Forms NuGets的.Net Standard 2.0库)
  • Application.UWP-特定于应用程序的演示者(Xamarin.Forms MvvmCross MvvmCross.Forms NuGets)
  • Application.Android-特定于应用程序的演示者(Xamarin.Forms MvvmCross MvvmCross.Forms NuGets)
  • Application.iOS-特定于应用程序的演示者(Xamarin.Forms MvvmCross MvvmCross.Forms NuGets)

NuGet版本

  • Xamarin.Forms-v3.6
  • MvvmCross-v6.2.3
  • MvvmCross.Forms-v6.2.3

我想了解如何以尽可能少的代码进入特定于应用程序的表示层来实现本地化。

谁能指出我有关如何使用Xamarin.Forms实现MvvmCross.Forms的教程?

我很高兴使用JSon,RESX或任何其他存储特定语言的方法,但我也希望能够支持从右到左的语言和布局。

1 个答案:

答案 0 :(得分:3)

如果您使用的是Xamarin Forms,则可以在Core项目中创建resx文件,例如AppResources.resx和AppResources.es.resx,并在其中放置一个简单的文本,例如:

在AppResources.resx

<data name="Hello" xml:space="preserve">
    <value>Hello</value> 
</data>

和在AppResources.es.resx

<data name="Hello" xml:space="preserve">
    <value>Hola</value> 
</data>

然后您创建一个名为BaseViewModel之类的类,该类从MvxViewModel扩展而来,在那里您引用了本地化字符串的索引:

public class BaseViewModel : MvxViewModel
{
    public BaseViewModel()
    {
    }

    public string this[string index] => AppResources.ResourceManager.GetString(index);
}

现在,从该BaseViewModel扩展所有视图模型。 然后,在xamarin表单的xaml文件中,创建内容页面时将其设置为MvxContentPage,然后可以通过x:TypeArguments将视图模型附加到该页面上,那么您可以引用AppResources索引,因此如果要使用来自本地化的resx的字符串,只需使用常规的xamarin形式绑定并将字符串名称作为索引传递,就像这样:

<Label
    FontSize="Medium"
    TextColor="Black"
    Text="{Binding [Hello]}" />

或使用mvx绑定系统

<Label
    FontSize="Medium"
    TextColor="Black"
    mvx:Bi.nd="Text [Hello]" />

您可以检查Star Wars Sample project看看有多少东西(例如本地化字符串)有用;)