Поделиться через


UCRT: сведения о строках имени языкового стандарта, языка, а также страны или региона

Аргумент можно задать для locale setlocale,_wsetlocale_create_locale и _wcreate_locale функций несколькими способами. Языковой стандарт можно задать с помощью имен языков, языков, кодов стран или регионов и кодовых страниц, поддерживаемых API NLS Windows. Аргумент locale принимает одну из следующих форм:

locale :: "locale-name"
 | "language[_country-region[[.кодовая страница]"
 | ".кодовая страница"
 | "C"
 | ""
 | NULL

Параметр locale-name представлен в формате короткой строки стандарта IETF, например en-US для английского языка (США) или bs-Cyrl-BA для боснийского (кириллица, Босния и Герцеговина). Такой формат является предпочтительным. Список поддерживаемых имен языковых стандартов для версий операционной системы Windows см. в столбце Тег языка таблицы, которая приведена в приложении A (поведение продукта) справочника по коду языка Windows. Этот список ресурсов включает в себя поддерживаемый язык, скрипт и региональные части имен языковых стандартов. Сведения о поддерживаемых именах языков, у которых нет заказов сортировки по умолчанию, см . в столбце имени языкового стандарта в идентификаторах порядка сортировки. В версии Windows 10 или более поздней допускаются имена языкового стандарта, соответствующие допустимым тегам языка BCP-47. Например, jp-US является допустимым тегом BCP-47, но он фактически предназначен только US для функциональных возможностей языкового стандарта.

Язык[_country-region[[.форма code-page]] хранится в параметре языкового стандарта для категории, если для создания языкового стандарта используется строка языка или строка языка и страна или строка региона. Набор поддерживаемых строк языка описывается в строках языка, а список поддерживаемых строк стран и регионов указан в строках страны или региона. Если указанный язык не связан с указанной страной или регионом, язык по умолчанию для указанной страны или региона хранится в параметре языкового стандарта. Мы не рекомендуем эту форму для строк языкового стандарта, внедренных в код или сериализованных в хранилище: эти строки, скорее всего, будут изменены обновлением операционной системы, чем форма имени языкового стандарта.

Кодовой страницей (code-page) является кодовая страница ANSI/OEM, связанная с этим языковым стандартом. Кодовая страница определяется автоматически при указании языкового стандарта с помощью языка или с помощью языка и страны или региона по отдельности. Особое значение .ACP определяет кодовую страницу ANSI для страны или региона. Особое значение .OCP определяет кодовую страницу OEM для страны или региона. Например, если в "Greek_Greece.ACP" качестве языкового стандарта указывается языковой стандарт, языковой стандарт хранится как Greek_Greece.1253 (кодовая страница ANSI для греческого языка), а если указан "Greek_Greece.OCP" в качестве языкового стандарта, он хранится как Greek_Greece.737 (кодовая страница OEM для греческого языка). Дополнительные сведения о кодовой странице см. в разделе "Кодовая страница". Список поддерживаемых кодовых страниц в Windows см. в разделе "Кодовые идентификаторы".

Если используется только кодовая страница для указания языкового стандарта, используется язык пользователя по умолчанию и страна или регион, как сообщается GetUserDefaultLocaleName . Например, если указать ".1254" (ANSI — турецкий) как языковой стандарт пользователя, который настроен на использование английского (США), сохранится языковой стандарт English_United States.1254. Мы не рекомендуем эту форму, так как это может привести к несогласованности поведения.

Значение locale аргумента C указывает минимальную среду соответствия ANSI для перевода C. Языковой стандарт C предполагает, что все типы данных char соответствуют 1 байту, а их значение всегда меньше 256. Если locale указывает на пустую строку, языковой стандарт соответствует исходной среде, определенной реализацией.

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

LC-ALL-specifier :: locale
 | [LC_COLLATE=locale][;LC_CTYPE=locale;LC_MONETARY=locale][][;LC_NUMERIC=locale] [];LC_TIME=locale

Можно задать несколько типов категорий с разделением точкой с запятой. Типы категорий, которые не указаны, используют текущий параметр языкового стандарта. Например, этот фрагмент кода задает текущий языковой стандарт для всех категорий de-DE, а затем задает категории LC_MONETARY для en-GB и LC_TIME для es-ES:

_wsetlocale(LC_ALL, L"de-DE");
_wsetlocale(LC_ALL, L"LC_MONETARY=en-GB;LC_TIME=es-ES");

Поддержка UTF-8

Поддержка UTF-8 может быть включена с помощью кодовой страницы UTF-8 в строке языкового стандарта. Дополнительные сведения см. в разделе setlocaleподдержки UTF-8.

См. также

Справочник по библиотеке времени выполнения C
_get_current_locale
setlocale, _wsetlocale
_create_locale, _wcreate_locale
Языковые строки
Строки страны и региона