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

Я давно разрабатываю на платформе Microsoft. Net под Windows и C#, а недавно заинтересовался разработкой под мобильную ОС Windows Phone 8. Т. к. благодаря Windows Marketplace мобильное приложение может быть установлено у многих пользователей из разных стран, то довольно важным является вопрос глобализации и, в частности, локализации приложения. О том, как это сделать я и расскажу в этом и следующем постах.

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

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

Исходным файлом для локализуемых строк является AppResources.resx, находящийся в папке Resources в проекте приложения. Он служит для хранения строковых значений для нейтрального языка приложения, которое задаётся в свойствах приложения (обычно это английский язык, но может быть и любым другим).

Для каждого языка (культуры), который поддерживает ваше приложение, создаётся отдельный ресурсный файл, ключи строк которого совпадают с нейтральным AppResources.resx, но их значения переведены на соответствующий язык. Эти файлы создаются когда вы добавляете поддерживаемую культуру в свойствах приложения и именуются с использованием кода этой культуры, например AppResources.ru-RU.resx.

Итак, шаги по локализации приложения:

  1. В файле AppResources.resx создаём строки, которые необходимо отделить от кода и локализовать. Например, заголовки страниц, надписи на кнопках.
  2. Заменяем в XAML коде эти строки на выражения связывания вида
    {Binding Path=LocalizedResources.ApplicationTitle, 
    	Source={StaticResource LocalizedStrings}}
    Здесь ApplicationTitle — это ключ строкового ресурса, отвечающего за заголовок приложения.
  3. Заменяем в коде приложения локализуемые строки на выражения вида
    AppResources.NoTorchFound
    (где NoTorchFound — ключ строкового ресурса).
  4. Билдим приложение, запускаем в эмуляторе или на реальном устройстве, проверяем, что все надписи отображаются корректно.
  5. Добавляем новые поддерживаемые языки. Для этого открываем страницу свойств приложения (Properties) и в списке поддерживаемых культур (Supported Culture) отмечаем галочками необходимые языки и культуры.
  6. Сохраняем проект. При этом Visual Studio сама создаёт необходимые файлы ресурсов для выбранных культур.
  7. В каждом локализованном файле ресурсов переводим значения строк на соответствующий язык.
  8. Билдим приложения, тестируем на эмуляторе или реальном устройстве.

Для локализации панели приложений (Application Bar) необходимо создавать его из кода, поскольку XAML описание элементов ApplicationBarIconButton и ApplicationBarMenuItem не поддерживает динамического связывания для текста надписей. Пример из MSDN отлично это демонстрирует:


// Build a localized ApplicationBar
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/AppBar/appbar.add.rest.png", UriKind.Relative));
        appBarButton.Text = AppResources.AppBarButtonText;
    ApplicationBar.Buttons.Add(appBarButton);

    // Create a new menu item with the localized string from AppResources.
    ApplicationBarMenuItem appBarMenuItem = 
        new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
    ApplicationBar.MenuItems.Add(appBarMenuItem);
}

Sun, 20.01.2013

Теги: руководство, Windows Phone 8