Подготовка приложения Магазина Windows для международного рынка

Вы хотите сделать свое новое приложение доступным для международного рынка и потенциально увеличить число его пользователей? Благодаря Windows 8 написать приложение, настраиваемое для разных языков и стран, стало проще, чем когда-либо прежде. Сейчас я покажу вам, как спроектировать новое приложение для международного рынка без изменения кода или внеся в него лишь небольшие изменения.

Сара Томас (Sara Thomas) описала доступные вам возможности представления приложений на рынке в своей статье о наборе средств для многоязычных приложений. Надеюсь, ее слова о "потенциале для охвата более 4,5 миллиардов людей" и о возможности продавать приложения "более чем на 200 рынках" побудят вас прочитать статью до конца.

Сценарий

Предположим, вы проектируете приложение Магазина Windows, выполняющееся на планшете и используемое в пункте проката автомобилей. Сотрудник и клиент пункта проката используют это приложение для просмотра фотографии арендуемого автомобиля, его описания и места на стоянке пункта проката. Они берут с собой планшет, когда вводят или проверяют данные об автомобиле (например, пробег) и отмечают имеющиеся повреждения. Клиент подписывает согласие с условиями договора об аренде на планшете.

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

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

Существует два тесно связанных между собой процесса, используемых при разработке приложения:

  • Глобализация — процесс проектирования и разработки приложения, которое будет работать в разных географических областях и на разных языках.
  • Локализация — процесс адаптации приложения (как текстовых, так и нетекстовых элементов) к конкретному языку, культурной среде и политическим представлениям определенного локального рынка.

Глобализация

Несколько аспектов, о которых необходимо подумать в процессе глобализации вашего приложения:

  • Проектируйте гибкий макет приложения.

Не используйте при проектировании приложений статические формы. Приложения Магазина Windows поддерживают компоненты макета, позволяющие вашему приложению гибко подстраиваться к разным размерам текста, макетам и ориентациям. Ознакомьтесь с рекомендациями в статье Выбор макета в Центре разработки.

Если по какой-либо причине вам все-таки нужно использовать статические формы, обеспечьте, чтобы текстовые поля и надписи на кнопках были достаточно большими для размещения перевода. При переводе с английского языка текстовые строки могут увеличиться на 40 %. Для языков, имеющих буквы с диакритическими знаками (например, Å или Ņ) или требующих более крупного минимального размера шрифта для обеспечения удобочитаемости, необходимо дополнительное место по вертикали.

  • Создавайте текст и изображения, простые для перевода.

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

О чем следует подумать:

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

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

    • Избегайте использования текста, который необходимо будет перевести, на изображениях.
    • Кроме того, не следует использовать изображения, характерные для конкретной страны (например, изображения почтового ящика) и не подходящие для всего мира. Если избежать этого не удается, предоставьте локализованные изображения (поговорим об этом позднее).
  • Не забывайте о культурных различиях.

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

О чем следует подумать:

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

  • Будьте внимательны при использовании цвета для передачи смысла. Цвета могут иметь неожиданный скрытый смысл в некоторых культурах. Старайтесь передавать информацию с помощью дополнительных средств, таких как размер, форма или надпись, чтобы помочь читателям, испытывающим трудности с различением цветов.

  • Используйте API-интерфейсы глобализации для представления дат, времени, чисел и валют в соответствующих форматах.

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

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

JavaScript:

 var dtf = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter
              ("dayofweek day month year");
var now = new Date();
var el = document.getElementById('todaysDate');
el.TextContent = dtf.format(now);

На C#:

 var dtf = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter
              ("dayofweek day month year");
DateTime now = DateTime.Now;
todaysDate.Text = dtf.Format(now);  // todaysDate is a XAML TextBlock.

Дополнительную информацию можно прочитать в кратком руководстве по использованию форматов для международного рынка. И ознакомьтесь с нашими примерами форматирования:

Локализация

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

Разрабатывая приложение, не рассчитывайте, что локализуете его для другого языка, когда это будет необходимо. Лучший способ сделать приложение локализуемым — представить его первую версию как локализуемую на исходный язык. Для этого с самого начала следуйте советам, приведенным ниже.

Отделите код от ресурсов.

При написании кода не включайте в него жестко заданные строки, элементы отображения или элементы управления. Ни одного заголовка, подписи, текста подписи, изображения или абзаца! Полное отделение кода от строковых ресурсов дает два взаимодополняющих преимущества:

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

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

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

Напишите разметку и код, использующие ресурсы.

HTML и JavaScript

Я опишу несколько основных моментов процесса, который более подробно описан в кратком руководстве по использованию строковых ресурсов (приложения Магазина Windows с использованием JavaScript и HTML). Используйте информацию из этого краткого руководства при написании кода.

В Visual Studio создайте папку для хранения файлов ресурсов. Поместите файл ресурса для каждого языка во вложенную папку с тегом языка BCP-47. Сам файл ресурса обычно называется resources.resjson.

Например, для английского языка (США) создайте следующий файл resources.resjson в папке strings/en-US:

 {
    "greeting"              : "Hello",
    "_greeting.comment"     : "A welcome greeting.",

    "farewell"              : "Goodbye",
    "_farewell.comment"     : "A goodbye."
}

Это строгий синтаксис нотации объектов JavaScript (JSON), в котором после каждой пары имени и значения, кроме последней, нужно вставлять запятую. В этом примере "greeting" и "farewell" определяют отображаемые текстовые строки. Мы также создали "_greeting.comment" и "_farewell.comment" в качестве комментариев, описывающих эти строки. В комментариях вы можете указывать особые инструкции для переводчиков о стилистике или значении строки.

В HTML-разметке ссылайтесь на строковые ресурсы, используя идентификаторы ресурсов:

 <h2><span data-win-res="{textContent: 'greeting'}"></span></h2>
<h2><span data-win-res="{textContent: 'farewell'}"></span></h2>

А в JavaScript можно извлечь строки и задать их в HTML следующим образом:

 var el = document.getElementById('header');
var res = WinJS.Resources.getString('greeting');
el.textContent = res.value;
el.setAttribute('lang', res.lang);

XAML и C#, VB, C++

Вот еще несколько фрагментов из краткого руководства по использованию строковых ресурсов (приложения Магазина Windows с использованием C#, VB, C++ и XAML).

В Visual Studio создайте папку для хранения файлов ресурсов. Поместите файл ресурса для каждого языка во вложенную папку с тегом языка BCP-47. Сам файл ресурса обычно называется Resources.resw.

Например, для английского языка (США) создайте следующий файл Resources.resw в папке Strings/en-US:

Файл ресурсов с именем, значением и комментарием для отображаемых текстовых строк

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

В XAML-разметке ссылайтесь на строковые ресурсы, используя идентификатор ресурса и свойство:

 <TextBlock x:Uid="Greeting" Text="" />

В C# можно получать строки следующим образом:

 var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
var string = loader.GetString('Farewell');

Создайте локализованные изображения.

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

Например, вы можете создать файл эмблемы с разными масштабными коэффициентами, параметрами контрастности и на разных языках. Задайте для них понятные имена, например:

  • Images\en-Us\logo.scale-100.png
  • Images\en-Us\logo.scale-140.png
  • Images\fr-Fr\logo.scale-100.png
  • Images\fr-Fr\logo.scale-140.png

Ваше приложение просто ссылается на файл Images/logo.png и загружает нужное изображение. Прочтите статью Именование ресурсов с помощью квалификаторов.

Требования Магазина Windows.

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

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

Заключение

Как обстоят дела с нашим приложением для аренды автомобилей? Если мы создали его правильно, оно содержит все текстовые строки и изображения в ресурсах. Оно отображает даты, время, числа и валюты в правильном формате для предпочитаемого пользователем языка. А когда мы захотим локализовать его для другого рынка, мы не будем менять код — мы добавим новый файл ресурса (переведенный самостоятельно или сторонним переводчиком), создадим новые файлы изображений (при необходимости) и перестроим приложение.

прокат автомобилей на французском языке

Подробнее об описанных здесь процессах можно прочитать в следующих документах:

-- Рэй Шуман (Ray Shuman), программист и редактор блогов, службы контента Windows

Благодарю Карла Бриджа (Karl Bridge), Райлана Хокинза (Rylan Hawkins), Дэйва Шевица (Dave Shevitz) и Боба Уотсона (Bob Watson) за помощь при создании этой записи.