Есть ли учебник по MvvmCross.Forms и локализации с использованием .Net Standard - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь узнать, как реализовать и протестировать локализацию в приложении Xamarin Forms с помощью MvvmCross.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/

Но ни один из них не показывает, как реализовать решение для класса .Net Standard, в котором решение Visual Studio имеет следующую настройку.

  • Application.Core - это для ViewModels и сервисов (библиотека .Net Standard 2.0 с MvvmCross NuGet)
  • Application.UI - это общие представления и логика представлений (библиотека .Net Standard 2.0 с 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

Я хотел бы понять, как реализовать локализацию с использованием как можно меньшего количества кода, входящего в уровни представления приложений.

Может кто-нибудь указать мне на учебник о том, как MvvmCross.Forms должны быть реализованы с Xamarin.Forms?

Я рад использовать JSon, RESX или любой другой способ хранения определенных языков, но я хочу иметь возможность поддерживать языки и макеты справа налево.

1 Ответ

3 голосов
/ 26 апреля 2019

Если вы используете формы Xamarin, вы можете создать файлы resx в своем проекте Core, например 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.Затем в ваших файлах xaml из форм xamarin, когда вы создаете страницу содержимого, сделайте ее 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 , чтобы увидеть, сколько вещей (например, строк локализации) работает;)

...