Как управлять параметрами языка и региона (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. В случае разработки приложений для Windows 10 см. раздел последняя документация]

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

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

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

Пользователь Windows может указать свое местоположение — любой регион мира. Кроме того, пользователь может указать любой язык и любое местоположение. Местоположение и язык не зависят друг от друга. Тот факт, что пользователь говорит по-французски, не означает, что он находится во Франции, а если пользователь находится во Франции, это не говорит о том, что он предпочитает говорить на французском языке.

Пользователь может выполнять приложения, язык которых отличается от языка Windows. Например, приложение выполняется на испанском языке, в то время как Windows — на английском.

В случае приложений Магазина Windows язык представлен языковым тегом BCP-47. Большинство API в среде выполнения Windows, HTML и XAML могут возвращать или принимать строковые представления языковых тегов BCP-47. См. также Список языков IANA.

Список тегов языков, специально поддерживаемых Магазином Windows, см. в разделе Выбор языков.

Инструкции

Этап 1: Задайте настройки языка пользователя.

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

Примечание  Только приложения Магазина Windows. Этот список пользователь задает, выбрав Панель управления > Часы, язык и регион > Язык.

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

Список настроек языка пользователя может включать несколько языков и регионов или других специальных вариантов. Например, пользователь может предпочитать язык fr-CA, но также понимать en-GB.

Этап 2: Укажите поддерживаемые языки в манифесте программы.

Разработчик приложения определяет список поддерживаемых языков в элементе Resources в файле манифеста приложения (обычно Package.appxmanifest), или Visual Studio автоматически создает список языков в файле манифеста на основе найденных в проекте языков. В манифесте поддерживаемые языки должны точно описываться с соответствующим уровнем детализации. Языки, перечисленные в манифесте, отображаются для пользователей в Магазине Windows.

Этап 3: Определите язык по умолчанию.

Приложение использует язык по умолчанию, если не поддерживает языки, выбранные пользователем. MSBuild и MakePRI.exe используют язык по умолчанию при добавлении метаданных в ресурсы для этого языка. Это позволяет выбирать соответствующие ресурсы в среде выполнения.

Чтобы с помощью Visual Studio задать язык по умолчанию в приложении Магазина Windows на JavaScript:

  • Откройте package.appxmanifest в Visual Studio, перейдите на вкладку Приложение и задайте в качестве языка по умолчанию язык, на котором создано приложение.

Кроме того, чтобы правильно установить язык программы (см. ниже шаг "Создайте список языков приложения"), свойство языка по умолчанию должно соответствовать первому языку в манифесте. Ресурсы языка по умолчанию все равно должны иметь квалификатор языка (например, en-US/logo.png). Язык по умолчанию не указывает неявный язык неопределенных ресурсов. Подробнее см. Именование ресурсов с использованием квалификаторов.

Этап 4: Задайте квалификаторы языка для ресурсов.

Тщательно изучите свою аудиторию, а также язык и местоположение пользователей, для которых вы разрабатываете программу. Часто люди, живущие в каком-либо регионе, предпочитают не основной язык этого региона, а какой-либо другой. Например, в миллионах семей в Соединенных Штатах основным языком является испанский.

Чтобы задать квалификатор языка для ресурсов:

  • Включите сценарий, в котором для языка не определено значение сценария подавления. Сведения о языковых тегах см. в реестре подтегов языков IANA. Например, используйте zh-Hant, zh-Hant-TW или zh-Hans, но не zh-CN или zh-TW.
  • Пометьте все лингвистическое содержание определенными языковыми тегами. Свойство языка по умолчанию в проекте не определяет язык для непомеченных ресурсов (то есть нейтральный язык). Оно указывает, какой помеченный языковой ресурс необходимо выбирать при отсутствии другого ресурса, соответствующего предпочтениям пользователя.

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

  • Windows выполняет сложный анализ, включающий региональные варианты (например, en-US и en-GB), поэтому приложения могут сами помечать ресурсы точным представлением содержимого для соответствующего пользователя, и оставить Windows задачу сопоставления для каждого пользователя.
  • Магазин Windows показывает содержимое манифеста пользователям, просматривающим программу.
  • Имейте в виду, что некоторые инструменты и другие компоненты, такие как средства машинного перевода, могут находить специальные языковые теги, например информацию о региональном диалекте, необходимую для понимания данных.
  • Не забудьте пометить ресурсы, предоставив всю информацию, особенно при наличии нескольких вариантов. Например, пометьте ресурс как en-US и en-GB, если оба языка характерны для этого региона.
  • Для языков, имеющих единый стандартный диалект, регион добавлять не требуется. В некоторых ситуациях, таких как отметка ресурсов языковым тегом ja вместо ja-JP, можно использовать общие теги.

Иногда возникают ситуации, когда необходимо локализовать не все ресурсы.

  • Пометьте такие ресурсы, как строки пользовательского интерфейса, предоставляющиеся на всех языках, соответствующим языковым тегом и обязательно предоставьте все эти ресурсы для языка по умолчанию. Нейтральный ресурс указывать не нужно (он не помечается языковым тегом).
  • Для ресурсов, которые предоставляются не для всего набора языков приложения (частичная локализация), определите набор языков и обязательно предоставьте все эти ресурсы для языка по умолчанию. Windows подбирает наиболее подходящий язык для пользователя, учитывая все языки, на которых он говорит, в порядке их предпочтения. Например, не все пользовательские интерфейсы приложения могут быть переведены на каталанский, если приложение содержит полный набор ресурсов на испанском языке. Для пользователей, которые говорят на каталанском и на испанском языке, но предпочитают каталанский, недоступные на каталанском языке ресурсы отображаются на испанском.
  • Ресурсы, которые отличаются по языку от всех остальных, сопоставляются с общим ресурсом; ресурс, используемый для всех языков, должен отмечаться тегом неопределенного языка "und". Windows преобразует тег языка "und" в символ, подобный "*", который соответствует основному языку приложения, после сопоставления с остальными подходящими языками. Например, если несколько ресурсов (например, ширина элемента) для финского языка отличаются, а остальные ресурсы одинаковы для всех языков, финский ресурс необходимо отметить языковым тегом финского языка, а остальные — тегом "und".
  • Для ресурсов, которые основываются не на языке, а на сценарии языка, таких как шрифт или высота текста, используйте неопределенный языковой тег с указанным сценарием: "und-<сценарий>". Например, для латинских шрифтов используйте und-Latn\fonts.css, а для кириллических — und-Cryl\fonts.css.

Этап 5: Создайте список языков приложения.

Во время выполнения система определяет настройки языка пользователя, о поддержке которых программа объявляет в своем манифесте, и создает список языков приложения. С его помощью система определяет язык, используемый программой. Этот список определяет языки, которые используются для ресурсов приложения и системы, дат, времени, чисел и других компонентов. Например, система управления ресурсами (Windows.ApplicationModel.Resources, Windows.ApplicationModel.Resources.Core и пространство имен WinJS.Resources) загружает ресурсы пользовательского интерфейса в соответствии с языком программы. Кроме того, Windows.Globalization выбирает форматы на основе списка языков приложения. Доступ к этому списку обеспечивается с помощью Windows.Globalization.ApplicationLanguages.languages.

Сопоставлять языки с ресурсами сложно. Рекомендуется, чтобы сопоставление осуществляла ОС Windows, потому что в языковом теге существует много необязательных компонентов, которые влияют на приоритет сопоставления, и с ними можно столкнуться на практике.

Примеры необязательных компонентов в языковом теге:

  • Сценарий для языков со сценариями подавления. Например, en-Latn-US соответствует en-US.
  • Регион. Например, en-US соответствует en.
  • Варианты Например, de-DE-1996 соответствует de-DE.
  • -x и другие расширения. Например, en-US-x-Pirate соответствует en-US.

Кроме того, в языковом теге есть множество компонентов, вид которых отличается от xx и xx-yy, и не все из них соответствуют друг другу.

  • zh-Hant не соответствует zh-Hans.

Windows расставляет приоритеты при сопоставлении стандартным и хорошо известным способом. Например, en-US соответствует en-US, en, en-GB и т. д. (в порядке приоритета).

  • Windows может выполнять межрегиональное сопоставление. Например, en-US соответствует en-US, затем en, а затем en-*.
  • В Windows есть дополнительные данные для сопоставления по сходным признакам в регионе, например основной регион для языка. Например, fr-FR лучше, чем fr-CA, подходит к fr-BE.
  • Все последующие улучшения в языковом сопоставлении в Windows будут предоставляться бесплатно при использовании Windows API.

Сопоставление с первым языком в списке выполняется до сопоставления со вторым языком даже для других региональных вариантов. Например, ресурс для en-GB выбирается прежде, чем ресурс для fr-CA, если язык приложения en-US. Ресурс для fr-CA выбирается, только если нет ресурсов для формы en.

Список языков программы задается в соответствии с региональным вариантом пользователя, даже если этот вариант отличается от регионального варианта приложения. Например, если пользователь говорит на языке en-GB, а программа поддерживает en-US, в список языков приложения будет входить en-GB. Это гарантирует, что формат дат, времени и чисел будет лучше соответствовать предпочтениям пользователя (en-GB), но все равно будут загружаться ресурсы пользовательского интерфейса на языке, поддерживаемом программой (en-US).

Список языков приложения состоит из следующих элементов:

  1. (Дополнительно.) Переопределение основного языка.PrimaryLanguageOverride — это простой параметр переопределения для приложений, которые предоставляют пользователям независимый выбор языка или имеют серьезную причину переопределять языки, выбранные по умолчанию. Подробнее см. в примере Application resources and localization.
  2. Языки пользователя, поддерживаемые приложением. Это список пользовательских настроек языка для выбора языка. Этот список фильтруется в соответствии со списком поддерживаемых языков в манифесте приложения. Фильтрация языков пользователя по языкам, поддерживаемым приложением, обеспечивает согласованность между пакетами средств разработки программного обеспечения (SDK), библиотеками классов, зависимыми пакетами платформ и приложением.
  3. Если элементы 1 и 2 пусты, то язык по умолчанию или первый язык, поддерживаемый приложением. Если пользователь не говорит ни на одном языке из тех, которые поддерживает приложение, выбирается первый язык, поддерживаемый приложением.

См. примеры ниже в разделе "Примечания".

Этап 6: Установите заголовок, определяющий допустимый язык для HTTP.

При создании HTTP-запросов в приложениях Магазина Windows и классических приложениях (обычные веб-запросы и запросы XMLHttpRequest (XHR)) используется стандартный заголовок HTTP Accept-Language. По умолчанию этот заголовок HTTP задается в соответствии с пользовательскими настройками языка. Применяется предпочтительный для пользователя порядок, указанный в разделе Панель управления > Часы, язык и регион > Язык. Каждый язык в списке дополнительно раскрывается, отображая язык, который не зависит от региона, и весовой коэффициент (q). Например, список языков пользователя fr-FR и en-US в заголовке, определяющем допустимый язык для HTTP (HTTP Accept-Language), раскрывается соответственно: fr-FR, fr; en-US, en ("fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3").

Этап 7: Используйте API в пространстве имен Windows.Globalization.

Обычно для определения языка элементы API в пространстве имен Windows.Globalization используют список языков приложения. Если ни один из языков не имеет совпадающего формата, используются региональные параметры пользователя. Это тот же самый язык, который применяется в системных часах. Региональные параметры пользователя доступны в разделе Панель управления > Часы, язык и регион > Регион: изменить формат даты, времени или чисел. Кроме того, API Windows.Globalization позволяют переопределить список языков приложения.

Также Windows.Globalization содержит объект Language, который предоставляется как вспомогательный объект. Это дает возможность приложениям получать такие подробные сведения о языке, как сценарий языка, отображаемое и исходное имя.

Этап 8: Используйте географический регион, когда это необходимо.

Чтобы выбрать содержимое для показа на экране, вместо языка необходимо использовать параметр домашнего географического региона пользователя. Например, в новостной программе можно по умолчанию отображать содержимое для домашнего местоположения пользователя, которое задается при установке Windows и доступно на панели управления региона. Вы можете получить текущее значение домашнего региона пользователя с помощью Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion.

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

Примечания

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

Языки, поддерживаемые приложением (определяются в манифесте) Настройки языка пользователя (устанавливается на панели управления) Переопределение основного языка приложения (необязательно) Языки приложения Что пользователь видит в приложении
Английский (Соединенное Королевство) (по умолчанию) Немецкий (Германия) Английский (Соединенное Королевство) нет Английский (Соединенное Королевство) Пользовательский интерфейс: английский (Соединенное Королевство) Дата/время/числа: Английский (Соединенное Королевство)
Немецкий (Германия) (по умолчанию) Французский (Франция) Итальянский (Италия) Французский (Австрия) нет Французский (Австрия) Пользовательский интерфейс: французский (Франция) (альтернатива французскому языку (Австрия)) Дата/время/числа: Французский (Австрия)
Английский (США) (по умолчанию) Французский (Франция) Английский (Великобритания) Английский (Канада) Французский (Канада) нет Английский (Канада) Французский (Канада) Пользовательский интерфейс: английский (США) (резервирование от языка английский (Канада)) Дата/время/числа: Английский (Канада)
Испанский (Испания) (по умолчанию) Испанский (Мексика) Испанский (Латинская Америка) Португальский (Бразилия) Английский (США) нет Испанский (Испания) Пользовательский интерфейс: испанский (Испания) (использует по умолчанию, так как резервирование не доступно для английского языка) Дата/время/числа: Испанский (Испания)
Каталанский (по умолчанию) Испанский (Испания) Французский (Франция) Каталанский Французский (Франция) нет Каталанский Французский (Франция) Пользовательский интерфейс: в основном каталанский, местами французский (Франция), так как не все строки представлены на каталанском языке Дата/время/числа: Каталанский
Английский (Великобритания) (по умолчанию) Французский (Франция) Немецкий (Германия) Немецкий (Германия) Английский (Великобритания) Английский (Великобритания) (выбранный пользователем в пользовательском интерфейсе программы) Английский (Великобритания) Немецкий (Германия) Пользовательский интерфейс: английский (Великобритания) (переопределение языка) Дата/время/числа Английский (Великобритания)