Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Локализация приложений Metro

0

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

Создайте простое приложение на основе пустого шаблона, содержащее обычную кнопку.

<Button Width="100" Height="50" Content="Button 1" Margin="5">

Единственным атрибутом, который необходимо локализовать, в  этом примере является атрибут Content. Попробуем сделать так, чтобы кнопка в  английском варианте приложения содержала текст Hello!, а в русском — Привет!.

На первом этапе создадим в   нашем проекте  две  папки  —  en-US и  ru-RU. Основываясь на именах папок (могут быть вложены в другие папки), компилятор формирует ресурсы для того или иного языка.

Добавим в каждую папку файл Resources.resw.

Рис. 3.2.

В данном случае имя файла является существенным. Если задать  другое, то компилятор сам не найдет ресурсы.

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

Рис. 3.3.

Создадим в  каждом из файлов строковое  значение с именем  myTxt.Content. Такой  формат выбран не случайно, поскольку  в  ресурсах Windows 8 ключ строки  несет в   себе информацию  о  свойстве,  которое будет локализовано. Очевидно, что myTxt — это некий идентификатор элемента, который задается с помощью атрибута x:Uid.

<Button Width="100" Height="50" x:Uid="myTxt" Content="Button 1" Margin="5">

</Button>

Теперь, чтобы локализация начала работать, необходимо прописать в манифесте приложения  все  поддерживаемые языки.  Это  нельзя  сделать  в   дизайнере, следовательно выберите файл Package.appmanifest и с помощью контекстного пункта  меню  View   Code  отобразите  его  содержимое.  Раздел  Resources пропишите, как показано ниже.

<Resources>

<Resource Language="en-us"/>

<Resource Language="ru-ru"/>

</Resources>

Теперь можно запускать приложение. Правда, пока не ясно, какой из  языков будет отображаться. Последнее легко определить, перейдя в  окно Language панели управления (Control Panel) Windows 8.

Рис. 3.4.

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

В нашем случае приложение отобразит кнопку с надписью «Привет!».

Если Вы хотите хранить в файле ресурсов строки, отличные от свойств элемента (адреса изображений, параметры и др.), то это можно делать с помощью объекта класса ResourceLoader.

ResourceLoader rl = new ResourceLoader(); string s = rl.GetString(«Test");

Интересен тот факт, что если Вы попробуете получить доступ к имени строки, содержащей точку (интерпретирующейся как имя объекта и имя атрибута этого объекта), то произойдет исключение. А вот строки с обычными именами можно выбирать с легкостью.

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

  • Комментарии