Глобализация и локализация

Добавление локализации

Последнее обновление: 14.01.2021

Хотя можно создать приложение на одном языке, однако чем больше языков оно будет поддерживать, тем больше оно будет распространено, и в итоге тем больше будет прибыль от приложения. Рассмотрим, как создать в Xamarin Forms многоязычное приложение.

Допустим, у нас определена в приложении страница с простеньким интерфейсом:

<StackLayout>
  <Label x:Name="myLabel" FontSize="Large" />
  <Entry x:Name="myEntry" />
  <Button x:Name="myButton" FontSize="Large" />
</StackLayout>

Рассмотрим, как можно локализовать эту форму на несколько языков.

Чтобы определить в приложении локализацию, нам надо использовать файлы ресурсов. Основной файл ресурсов (RESX) будет содержать все строковые значения для языка по умолчанию. Добавим в проект файл ресурсов. Для этого нажмем на проект правой кнопкой мыши и выберем Add -> New Item.... В окне добавления нового элемента выберем тип Resources Files. Назовем его просто Resource.resx:

Resources in Xamarin

После добавления в Visual Studio новый файл автоматически откроется в дизайнере ресурсов, который представляет собой таблицу. Таблица имеет несколько столбцов. В столбце Name указывается название ресурса, а в столбце Value - его значение. Опционально можно в третьем столбце указать комментарий по поводу использования данного ресурса. Допустим, у нас будет простейшая форма ввода на странице с меткой, текстовым полем и кнопкой. То есть мы можем создать три ресурса для текстовых значений этих элементов. Добавим эти элементы в таблицу:

Resource Editor in Xamarin

Пусть это будет англоязычная культура по умолчанию, хотя это может быть любая другая культура.

Чтобы добавить поддержку нескольких языков, нам надо создать файлы ресурсов для соответствующих языков. Согласно соглашениям по именованию названия этих ресурсов должны иметь одно и то же имя, после которого через точку идет код языка. Например, если для языка по умолчанию файл ресурсов называется Resource.resx, то для немецкого языка, код которого - de, название файла будет Resource.de.resx, для русского, например, - Resource.ru.resx, для испанского - Resource.es.resx и т.д.

Некоторые языковые культуры имеют разные ответвления, например, португальский в Португалии будет отличаться от португальского в Бразилии. Чтобы более точно таргетировать файл ресурсов на определенную языковую культуру, мы можем использовать полное название локали. Например, для бразильского португальского: Resource.pt-BR.resx

Скопируем файл ресурсов и вставим его в проект. Переименуем новый файл в Resource.ru.resx. Изменим в нем определения ресурсов:

Попутно можно определить файлы ресурсов и для других языков. Добавление ресуросов происходит только в главный проект, остальные проекты мы вообще не трогаем. В итоге в главном проекте будет примерно следующая структура:

Localization in Xamarin.Forms

Теперь для того, чтобы локализовать элементы интерфейса в коде, мы можем присвоить их тексту определенный ресурс из файла ресурсов. Например, в конструкторе класса страницы в файле кода с# можно прописать следующее:

using Xamarin.Forms;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            myLabel.Text = Resource.Header;
            myEntry.Placeholder = Resource.LoginText;
            myButton.Text = Resource.SaveButton;
        }
    }
}

То есть название класса ресурса, которое совпадает с именем файла ресурса - "Resource", после которого идет конкретный ресурс. Причем значения для ресурсов будут браться из того файла, который соответствует языковой культуре мобильного устройства. Например:

Localization in Xamarin
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850