Статьи

Локализация приложения для Windows Phone 8

Последние тенденции в магазинах показывают, что предложение вашего приложения на английском языке охватит только около 25% покупателей Windows Phone. Добавление испанского, французского, китайского, русского и немецкого языков может увеличить охват более чем 75% клиентов Windows Phone.

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

Примите во внимание следующие рекомендации по созданию приложения, которое можно легко локализовать:

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

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

Числа, валюты, дата и время по-разному форматируются в разных культурах. Каждая поддерживаемая культура указана в классе CultureInfo . Класс CultureInfo предоставляет свойства для доступа к данным формата региона для конкретной культуры. Вы также можете использовать класс CultureInfo с кодом культуры, чтобы получить доступ к встроенным правилам форматирования и сортировки для этой культуры.

Язык отображения определяет шрифт интерфейса пользователя по умолчанию. Пользовательский интерфейс Windows Phone 8.1 локализован на 50 языках, но ваше приложение может отображать гораздо больший выбор языков. Когда вы добавляете поддержку в свое приложение для дополнительных языков, Visual Studio создает файл .resx для каждого языка.

Функция InitializeLanguage в файле App.xaml.cs устанавливает RootFrame.Language приложения на основе значения ресурса AppResources.ResourceLanguage .

Новые проекты и шаблоны для приложений Windows Phone 8 XAML предоставляют несколько полезных новых функций:

  • Файл ресурсов нейтрального языка AppResources.resx по умолчанию добавляется в каждый новый проект.
  • Вспомогательный класс LocalizedStrings уже настроен для обеспечения легкого доступа к ресурсам, которые соответствуют текущей культуре приложения.
  • При добавлении поддерживаемой культуры из свойств проекта в Visual Studio создается новый файл ресурсов с определенными параметрами локализации для имени и параметров языка приложения.

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

Сначала мы связываем текстовые элементы XAML со строковыми ресурсами.

Скопируйте каждую жестко запрограммированную строку в XAML приложения, которую необходимо локализовать, в новую строку в таблице строк вашего файла AppResources.resx .

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

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

1
2
3
<TextBlock x:Name=»AppTitleTextBlock»
   Text=»{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}»
   Style=»{StaticResource PhoneTextNormalStyle}»/>

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

1
ApplicationBarMenuItem about_appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarAboutMenuItem);

Добавить языки в проект Windows Phone 8 в Visual Studio очень просто. Перейдите на страницу свойств проекта и выберите языки, которые вы хотите поддерживать, из списка поддерживаемых культур .

В примере проекта я добавил китайский (упрощенный) и испанский (Испания) , чьи коды локали — zh-Hans и es-ES соответственно. Выберите языки, которые ваше приложение должно поддерживать в окне « Поддерживаемые культуры» на странице свойств проекта.

Выберите целевые языки в поле «Поддерживаемые культуры»

При сохранении проекта Visual Studio создает файл AppResources.resx для каждой локали. Вновь созданный файл ресурсов предварительно заполняется существующими ресурсами из основного файла AppResources.resx .

Ресурсные файлы

Каждый файл ресурсов включает в себя два специальных ресурса с именами ResourceLanguage и ResourceFlowDirection . Эти два ресурса используются, когда метод InitializeLanguage вызывается из конструктора App.xaml.cs. Их значения проверяются автоматически, чтобы убедиться, что они соответствуют культуре файла ресурсов, загруженного во время выполнения.

Значение ResourceLanguage инициализируется именем локали файла ресурсов и используется для установки значения RootFrame.Language . Значение ResourceFlowDirection устанавливается на традиционное направление этого языка ресурсов.

Обратите внимание, что ResourceLanguage и ResourceFlowDirection можно изменить, чтобы они соответствовали стилю дизайна вашего приложения.

Многоязычный набор инструментов (MAT), который интегрирован в Visual Studio, обеспечивает поддержку перевода, управление файлами перевода и инструменты локализации для создания приложений Windows Phone и Windows Store. Вот несколько преимуществ использования многоязычного инструментария приложений:

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

Чтобы начать использовать Multilingual App Toolkit для своего проекта Windows Phone, загрузите и установите расширение Visual Studio из MSDN . С установленным инструментарием выберите проект и выберите « Включить многоязычный инструментарий приложения» в меню « Инструменты», как показано ниже.

Включить многоязычный набор инструментов приложения в меню «Инструменты»

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

После включения Multilingual App Toolkit Visual Studio добавит файлы в папку Resource вашего проекта, один из которых будет иметь новый тип и имя, AppResources.qps.ploc.xlf . Расширение .xlf относится к стандартному формату файлов XLIFF, о котором я упоминал ранее.

Сгенерированные xlf файлы при включении MAT

Дополнительные языки могут быть добавлены через многоязычный набор инструментов приложения. Это приводит к добавлению новой поддерживаемой культуры в ваш проект. Это также вызывает добавление поддерживаемого языка в WMAppManifest.xml проекта.

Чтобы перевести ресурсы на китайский (упрощенный) и испанский (Испания) , щелкните правой кнопкой мыши файл .xlf и выберите « Создать машинные переводы» в контекстном меню. Примените переводы и перестройте проект, чтобы увидеть, как изменения отражаются в файлах .resx для двух дополнительных языков.

Вы можете добавить панель приложения на страницу своего приложения, либо на странице XAML, либо используя C # в коде страницы. ApplicationBar не является DependencyObject и не поддерживает привязки. Это означает, что если вам нужно его локализовать, то создайте ApplicationBar из кода C #.

При создании нового проекта Windows Phone 8 или Windows Phone 8.1 Silverlight некоторый закомментированный код для локализации панели приложения по умолчанию добавляется в MainPage.xaml.cs . BuildLocalizedApplicationBar метод BuildLocalizedApplicationBar и добавьте кнопки, элементы меню и связанные ресурсы, которые вы хотели бы использовать в своем приложении.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private void BuildLocalizedApplicationBar()
{
    // Set the page’s ApplicationBar to a new instance of ApplicationBar.
    ApplicationBar = new ApplicationBar();
 
    // Create a new button and set the text value to the localized string from AppResources.
    ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri(«/Assets/Check.png», UriKind.Relative));
    appBarButton.Text = AppResources.AppBarButtonText;
    appBarButton.Click += appBarButton_Click;
    ApplicationBar.Buttons.Add(appBarButton);
 
    // Create a new menu item with the localized string from AppResources.
    ApplicationBarMenuItem zh_appBarMenuItem = new ApplicationBarMenuItem(«中文»);
    ApplicationBar.MenuItems.Add(zh_appBarMenuItem);
    zh_appBarMenuItem.Click += new EventHandler(zh_appBarMenuItem_Click);
 
    ApplicationBarMenuItem en_appBarMenuItem = new ApplicationBarMenuItem(«english»);
    ApplicationBar.MenuItems.Add(en_appBarMenuItem);
    en_appBarMenuItem.Click += new EventHandler(en_appBarMenuItem_Click);
 
    ApplicationBarMenuItem es_appBarMenuItem = new ApplicationBarMenuItem(«español»);
    ApplicationBar.MenuItems.Add(es_appBarMenuItem);
    es_appBarMenuItem.Click += new EventHandler(es_appBarMenuItem_Click);
}

Метод BuildLocalizedApplicationBar создает новый экземпляр ApplicationBar . К нему добавляются кнопки и пункты меню, а текстовое значение устанавливается на локализованную строку из AppResources . Кнопка на панели приложения имеет привязку к AppBarButtonText , который определен в файле AppResouces.resx . Вызовите метод BuildLocalizedApplicationBar из конструктора страницы, чтобы загрузить ApplicationBar .

В примере приложения пользователи могут выбирать язык отображения через меню ApplicationBar . Как показано на скриншоте ниже, пункты меню остаются неизменными на разных языках отображения, пока кнопка панели приложения локализована.

Меню App Bar

Когда пользователь SetUILanguage языка отображения в меню ApplicationBar , SetUILanguage метод SetUILanguage . Метод SetUILanguage с именем целевого языка, передаваемого в качестве параметра, используется для установки языка отображения.

01
02
03
04
05
06
07
08
09
10
11
private void SetUILanguage(String locale)
{
    CultureInfo newCulture = new CultureInfo(locale);
    Thread.CurrentThread.CurrentCulture = newCulture;
    Thread.CurrentThread.CurrentUICulture = newCulture;
    FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection),AppResources.ResourceFlowDirection);
    App.RootFrame.FlowDirection = flow;
 
    // Set the Language of the RootFrame to match the new culture.
    App.RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
}

Метод SetUILanguage сначала сбрасывает CurrentUICulture приложения в локаль, указанную в вызове. Любой связанный с ресурсами текст, представленный приложением, будет использовать ресурсы указанного языкового стандарта после этого вызова.

Затем установите FlowDirection и Language для RootFrame , чтобы пользовательский интерфейс, отображаемый приложением, следовал новым настройкам.

Метод BuildLocalizedApplicationBar вызывается из конструктора страницы после вызова InitializeComponent для локализации ApplicationBar .

1
2
3
4
5
6
public MainPage()
{
    InitializeComponent();
    // code to localize the ApplicationBar
    BuildLocalizedApplicationBar();
}

Эмулятор Windows Phone можно использовать для тестирования локализованного приложения. Измените язык отображения на язык, на который ориентировано приложение, чтобы убедиться, что содержимое отображается правильно.

  • Нажмите « Начать отладку» в меню « Отладка» .
  • Перейдите к региону и языку из настроек в списке приложений.
  • Нажмите Показать язык и выберите один из языков. Используйте таблицу в разделе « Отображение названий культур для отображения языков », чтобы определить, какую строку языка отображения выбрать.
  • Примите изменения и перезапустите эмулятор.
  • Запустите приложение, вернувшись к списку приложений, и убедитесь, что язык каждой локализованной строки соответствует настройке языка отображения, выбранной ранее.

Вот как меняется текст при смене языка отображения. Обратите внимание, что пункты меню остаются неизменными, даже если язык дисплея изменяется.

Скриншоты приложения

Чтобы динамически изменить язык, вызовите метод SetUILanguage с именем целевого языка, переданного в качестве параметра.

В примере приложения каждый элемент пользовательского интерфейса файла MainPage.xaml уже отрисован, поэтому отображаемые в данный момент элементы необходимо обновить после изменения языка. Метод updateUI обновляет элементы пользовательского интерфейса MainPage.xaml .

1
2
3
4
5
6
7
8
private void updateUI()
{
    apptitle.Text = AppResources.ApplicationTitle;
    pagetitle.Text = AppResources.mainpagetitle;
    usermessage.Text = AppResources.displayMessage;
    checkbutton.Content = AppResources.checkEligibility;
    enterage.Text = AppResources.userMessage;
}

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

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

Каждое жестко запрограммированное значение заменяется предложением связывания в XAML или ссылкой на ресурс в коде с использованием ключа для соответствующего строкового ресурса.

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