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

Я расскажу про процесс локализации Windows 8.1 приложений на примере игры Судоку для английского и русского языков.

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

Для начала необходимо в проекте создать структуру для локализации. Создаем папку Strings. В ней создаем папки для каждого языка отдельно. Strings/ru-RU и Strings/en-US. Создаем в каждой папке языка файл ресурсов Resources.resw.

Localizating windows 8.1

Суть локализации Windows 8.1 приложений заключается в том, что в этих ресурсах находится информация об объектах. Для каждого поддерживаемого языка информация об объектах биндится к самим объектам по некому идентификатору. Важно понять, что информация может быть как текстовой (заголовки и текст), числовой (ширина и высота) и другой.

Локализация Windows 8.1

Локализация названия и описания

В файле ресурсов хранится информация для каждого контрола. А также название и описание приложения. Начнем локализацию с названия и описания. В файле package.appxmanifest необходимо заменить название на ms-resource:appDisplayName, а описание на ms-resource:appDescription. На скриншоте выше эти поля выделены.

Локализация названия Windows 8.1

Далее напишем класс LocalizedNamesLibrary, который будет помогать нам локализовывать приложение из кода (например Flyout).

Локализация из кода

  public static class LocalizedNamesLibrary
    {
        private static ResourceLoader resourceLoader = null;

    public static string GetString(string resourceName)
    {
        return GetResourceValue(resourceName);
    }

    private static string GetResourceValue(string resourceName)
    {
        if (resourceLoader == null)
        {
            resourceLoader = ResourceLoader.GetForCurrentView("Resources");
        }
        return resourceLoader.GetString(resourceName);
    }

}</pre>

Для того, изменить язык при создании Pane (Flyout) из кода поможет следующий метод

 string name = LocalizedNamesLibrary.GetString(“Panes_AboutPane”);

Во всех остальных местах динамической генерации текста я использую аналогичные вызовы. Что касается локализации в xaml - приступаем.

Локализация Xaml

Вся суть заключается в том, чтобы в необходимых элементах управления определить атрибут x:Uid. Рассмотрим пример TextBlock и HyperlinkButton

<HyperlinkButton Content=“oxozle.com” HorizontalAlignment=“Stretch” VerticalAlignment=“Stretch” Margin=“0,0,0,20” Click=“ButtonBase_OnClick” PointerPressed=“ButtonBase_OnClick”/>
                <TextBlock Style=“{StaticResource BodyTextBlockStyle}” TextWrapping=“Wrap” FontSize=“26.667” x:Uid=“AboutFlyout_ContactUs”>
                    <TextBlock.Text>Связаться с нами</TextBlock.Text>
                </TextBlock>

Для ссылки будет использоваться свойствао Content из словаря языка. Для текстового блока свойство Text. После проведенных описанных процедур приложение будет 100% локализовано. Только не нужно забывать про изображения и скриншоты.

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

В проекте разделим изображения на локализированные и нет. Локализированные переместим в соответствующие папки, при этом ссылку на изображение изменять не будет. Windows 8.1 сама правильно скомпонует путь до изображения и подставить правильный вариант. Об этом подробнее Иконки и графика Windows 8.1.

Тестирование

Есть еще одна хитрость - тестирование. MSDN пишет о том, что нужно изменить язык системы и приложение будет запущено с языком системы. Это верно, но не удобно. Для простого тестирования языка достаточно в App.xaml.cs вставить следующие строки:

#if DEBUG
            var culture = new CultureInfo(“en-US”);
            Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
            CultureInfo.DefaultThreadCurrentCulture = culture;
            CultureInfo.DefaultThreadCurrentUICulture = culture;
#endif

Источники

Комментарии

comments powered by Disqus