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

Guy*_*Guy 0 c# localization mvvmcross xamarin.forms uwp

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

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

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/

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

  • Application.Core - 这是用于 ViewModels 和服务(.Net Standard 2.0 Library with MvvmCross NuGet)
  • Application.UI - 这是共享视图和视图逻辑(.Net Standard 2.0 Library with Xamarin.Forms MvvmCross MvvmCross.Forms NuGets)
  • 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 或任何其他方法来存储特定语言,但我也希望能够支持从右到左的语言和布局。

Fab*_*ani 5

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

在 AppResources.resx 中

<data name="Hello" xml:space="preserve">
    <value>Hello</value> 
</data>
Run Code Online (Sandbox Code Playgroud)

并在 AppResources.es.resx 中

<data name="Hello" xml:space="preserve">
    <value>Hola</value> 
</data>
Run Code Online (Sandbox Code Playgroud)

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

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

    public string this[string index] => AppResources.ResourceManager.GetString(index);
}
Run Code Online (Sandbox Code Playgroud)

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

<Label
    FontSize="Medium"
    TextColor="Black"
    Text="{Binding [Hello]}" />
Run Code Online (Sandbox Code Playgroud)

或者使用 mvx 绑定系统

<Label
    FontSize="Medium"
    TextColor="Black"
    mvx:Bi.nd="Text [Hello]" />
Run Code Online (Sandbox Code Playgroud)

您可以检查Star Wars Sample 项目以了解有多少东西(如本地化字符串)有效;)