Обзор языков профиля пользователя и языков манифеста приложения

Пользователь Windows может использовать Параметры> Time и>языковой регион и язык для настройки упорядоченного списка предпочтительных языков отображения или просто одного предпочтительного языка отображения. Язык может иметь региональный вариант. Например, вы можете выбрать испанский, как говорят в Испании, испанский, как говорят в Мексике, испанский, как говорят в США, среди других.

Кроме того, в Параметры> Time и>языковой регион и язык, но отдельно от языка пользователь может указать свое расположение (известное как регион) в мире. Обратите внимание, что параметр языка отображения (и региональный вариант) не является определяющим параметром региона, и наоборот. Например, пользователь в настоящее время живет во Франции, но выбирает предпочтительный язык интерфейса Windows Español (México).

Для приложений Windows язык представлен как тег языка BCP-47. Например, тег языка BCP-47 "en-US" соответствует английскому (США) в Параметры. Соответствующие среда выполнения Windows API принимают и возвращают строковые представления тегов языка BCP-47.

Также см . реестр подтег языка IANA.

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

Список языков профиля пользователя

Список языков профиля пользователя — это имя списка, настроенного пользователем в Параметры> Time и>языках языков.> В коде можно использовать свойство GlobalizationPreferences.Language для доступа к списку языков профиля пользователя в виде списка строк, доступных только для чтения, где каждая строка является одним тегом языка BCP-47, таким как en-US или ja-JP.

    IReadOnlyList<string> userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

Список языков манифеста приложения

Список языков манифеста приложения — это список языков, для которых приложение объявляет (или объявляет) поддержку. Этот список растет по мере выполнения приложения через жизненный цикл разработки до локализации.

Список определяется во время компиляции, но у вас есть два варианта для точного управления тем, как это происходит. Один из вариантов — разрешить Visual Studio определить список из файлов в проекте. Для этого сначала задайте язык по умолчанию приложения на вкладке "Приложение" в исходном файле манифеста пакета приложения (Package.appxmanifest). Затем убедитесь, что тот же файл содержит эту конфигурацию (которая выполняется по умолчанию).

  <Resources>
    <Resource Language="x-generate" />
  </Resources>

Каждый раз, когда Visual Studio создает созданный файл манифеста пакета приложения (), он расширяет один Resource элемент в исходном файле в объединение всех квалификаторов языка, которые он находит в проекте (AppxManifest.xmlсм. раздел "Настройка ресурсов для языка, масштабирования, высокой контрастности и других квалификаторов"). Например, если вы начали локализацию, а у вас есть строки, изображения и/или файловые ресурсы, имена папок или файлов которых включают en-US, ja-JP и fr-FR, то созданный AppxManifest.xml файл будет содержать следующую (первая запись в списке — язык по умолчанию).

  <Resources>
    <Resource Language="EN-US" />
    <Resource Language="JA-JP" />
    <Resource Language="FR-FR" />
  </Resources>

Другой вариант заключается в замене одного элемента x-generate <Resource> в исходном файле манифеста пакета приложения () на развернутый список элементов (Package.appxmanifestсначала внимательно вывести список <Resource> языков по умолчанию). Этот вариант включает в себя большую работу по обслуживанию, но это может быть подходящим вариантом, если вы используете пользовательскую систему сборки.

Для начала список языков манифеста приложения будет содержать только один язык. Возможно, это en-US. Но в конечном итоге, когда вы вручную настраиваете манифест или добавляете переведенные ресурсы в проект, этот список будет расти.

Когда приложение находится в Microsoft Store, языки в списке языков манифеста приложения — это те, которые отображаются клиентам. Список тегов языка BCP-47, поддерживаемых в Microsoft Store, см. на поддерживаемых языках.

В коде можно использовать свойство ApplicationLanguages.ManifestLanguages для доступа к списку языков манифеста приложения в виде списка строк, доступных только для чтения, где каждая строка является одним тегом языка BCP-47.

    IReadOnlyList<string> userLanguages = Windows.Globalization.ApplicationLanguages.ManifestLanguages;

Список языков среды выполнения приложений

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

В частности, список языков среды выполнения приложений состоит из этих элементов.

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

В коде можно использовать свойство ResourceContext.QualifierValues для доступа к списку языков среды выполнения приложения в виде строки, содержащей список тегов языка BCP-47 с запятой.

    string runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues["Language"];

Вы также можете получить доступ к нему как список строк только для чтения, каждый из которых содержит один тег языка BCP-47. Для этого можно использовать свойство ResourceContext.Languages или свойство ApplicationLanguages.Languages.

    IReadOnlyList<string> runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Languages;

    runtimeLanguages = Windows.Globalization.ApplicationLanguages.Languages;

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

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

Определение файлов ресурсов с помощью языка

Назовите файлы ресурсов или папки с квалификаторами языковых ресурсов. Дополнительные сведения о квалификаторов ресурсов см. в статье "Настройка ресурсов для языка, масштабирования, высокой контрастности и других квалификаторов". Файл ресурсов может быть изображением (или другим ресурсом) или файлом контейнера ресурсов, например resw , который содержит текстовые строки.

Обратите внимание, что даже ресурсы на языке по умолчанию приложения должны указывать квалификатор языка. Например, если язык вашего приложения по умолчанию — английский (США), то квалифицируйте ресурсы как \Assets\Images\en-US\logo.png.

  • Windows выполняет сложное сопоставление, включая региональные варианты, такие как en-US и en-GB. Поэтому включите вложенный тег региона в соответствии с соответствующими параметрами. Узнайте, как система управления ресурсами соответствует языковым тегам.
  • Укажите вложенный тег скрипта языка в квалификаторе, если для языка не задано значение Suppress-Script. Например, вместо zh-CN или zh-TW используйте zh-Hant, zh-Hant-TW или zh-Hans (дополнительные сведения см. в реестре подтегов языка IANA).
  • Для языков с одним стандартным диалектом нет необходимости включать квалификатор региона. Например, используйте ja вместо ja-JP.
  • Некоторые инструменты и другие компоненты, такие как машинные переводчики, могут найти определенные языковые теги, такие как региональные сведения о диалекте, полезные для понимания данных.

Не все ресурсы должны быть локализованы

Локализация может не потребоваться для всех ресурсов.

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

Установка заголовка запроса HTTP Accept-Language

Рассмотрите, имеют ли вызываемые веб-службы ту же степень локализации, что и ваше приложение. HTTP-запросы из приложений Windows в типичных веб-запросах и XMLHttpRequest (XHR) используют стандартный заголовок ЗАПРОСА HTTP Accept-Language. По умолчанию заголовок HTTP устанавливается в список языков профиля пользователя. Каждый язык в списке расширяется, чтобы включить нейтральные значения языка и весового значения (q). Например, список языков пользователя fr-FR и en-US приводит к выполнению http-запроса Accept-Language fr-FR, fr, en ("fr-FR,fr; q=0.8,en-US; q=0.5,en; q=0.3"). Но если ваше приложение погоды (например, отображает пользовательский интерфейс на французском языке (Франция), но лучший язык пользователя в списке предпочтений является немецким, то вам потребуется явно запросить французский (Франция) от службы, чтобы оставаться согласованным в приложении.

API в пространстве имен Windows.Globalization

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

С помощью класса Language можно проверить сведения о конкретном языке, например скрипте языка, отображаемом имени и собственном имени.

Используйте географический регион при необходимости

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

В коде этот параметр можно получить с помощью свойства GlobalizationPreferences.HomeGeographicRegion.

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

Примеры

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

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

Примечание.

Список стандартных кодов страны или региона, используемых корпорацией Майкрософт, см. в официальном списке стран и регионов.

Важные API

Примеры