Локализация приложений

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

Учитывая легкость распространения мобильных приложений на Windows Phone 8.1, нельзя не сказать о локализации. Локализация представляет собой адаптацию приложения под определенную языковую культуру. Согласно разным статистическим данных, ни одна из языковых групп пользователей Windows Phone не является подавляющей. Наибольшее количество пользователей представляют китайская и англоязычные культуры, но кроме них огромное количество пользователей приходится на португалоязычную, русскоязычную, испаноязычную и ряд других культур. Можно создать приложение под наиболее нейтральный английский язык, но его опять же не все в должной степени понимают. Поэтому задача локализации играет важную роль, так как за ней кроется степень распространения приложения, и в конечном итоге денежные средства, которые можно на этом заработать.

На настоящий момент Windows Phone 8.1 поддерживает локализацию на 54 культуры. Полный список поддерживаемых культур можно найти на сайте msdn.

Для простенького примера локализации создадим проект по шаблону Blank App. На странице MainPage.xaml определим несколько элементов, например:

<Grid>
    <StackPanel>
        <TextBlock x:Name="textBlock1" FontSize="26" />
        <Button x:Name="button1" />
    </StackPanel>
</Grid>

Наща задача - локализовать надписи на этих элементах.

Затем в проект добавим папку Strings - она будет содержать все ресурсы для различных культур.

В этой папке Strings мы можем определить различные культуры, на которые мы хотим локализовать наше приложение. Например, я хочу добавить локализацию на немецкий (культура de-DE), английский (en-US) и русский (ru-RU) языки. Соответственно им я создаю в папке Strings подкаталоги с названием культур:

Localization in Windows Phone 8.1

Все используемые строки и прочие значения будут храниться в ресурсах. Добавим в папку en-US новый файл ресурсов:

Localization Resources in Windows Phone 8.1

Файлы ресурсов позволяют в табличном виде определить ресурс и его значение. Определим следующие ресурсы:

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

Можно задать как простые ресурсы, как на рисунке выше ресурс "somestring", так и более сложные, например, "clickButton.Content" и "clickButton.Height". Они подразумевают, что у некоторого элемента "clickButton" есть свойства "Content" и "Height", для которых устанавливаются значения.

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

Опционально в таблице ресурсов мы можем задать комментарий, который прояснит использование данного ресурса.

И теперь свяжем эти ресурсы с элементами в xaml. Для этого изменим MainPage.xaml следующим образом:

<Grid>
    <StackPanel>
        <TextBlock x:Name="textBlock1" x:Uid="headerBlock" FontSize="26" />
        <Button x:Name="button1" x:Uid="clickButton" Click="button1_Click" />
    </StackPanel>
</Grid>

С помощью атрибута x:Uid мы можем связать конкретный элемент с определенным ресурсом. Кроме того, здесь мы определили обработчик нажатия. И в файле кода MainPage.xaml.cs динамически получим ресурс "somestring" и установим его значение нажатой кнопке:

private void button1_Click(object sender, RoutedEventArgs e)
{
    var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
    button1.Content = loader.GetString("somestring");
}

С помощью метода Windows.ApplicationModel.Resources.ResourceLoader() можно получить объект ресурсов, а через метод GetString() получить определенный ресурс.

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