Локаль в JavaScript задаётся строкой в формате BCP 47, описывающей
язык, регион, письменность и дополнительные параметры форматирования.
Примеры: ru, ru-RU, en-US,
zh-Hans-CN.
BCP 47 теги состоят из компонентов:
ru, en,
fr)Hans,
Hant, Latn)RU, US,
CN)u-nu-latn)Среда выполнения предоставляет базовую информацию о предпочтениях
пользователя через объект navigator.
Основной язык интерфейса пользователя:
navigator.language
Возвращает строку, например:
ru-RUen-USОсобенности:
Список предпочтительных языков в порядке приоритета:
navigator.languages
Пример результата:
["ru-RU", "ru", "en-US", "en"]
Ключевые свойства:
Строки локалей могут иметь разные формы записи. Для приведения к каноническому виду используется:
Intl.getCanonicalLocales("ru-ru")
Результат:
["ru-RU"]
Назначение:
Каноническая локаль представляет собой нормализованную BCP 47 строку, где:
ru-RU, а не
ru-ru)Intl.Locale предоставляет структурированный доступ к
компонентам локали.
const locale = new Intl.Locale("ru-RU");
Базовый язык:
locale.language
// "ru"
Регион:
locale.region
// "RU"
Письменность (если указана):
const l = new Intl.Locale("zh-Hans-CN");
l.script
// "Hans"
Базовая часть без расширений:
const l = new Intl.Locale("en-US-u-ca-buddhist");
l.baseName
// "en-US"
Система чисел:
const l = new Intl.Locale("ar-EG-u-nu-arab");
l.numberingSystem
// "arab"
Календарная система:
const l = new Intl.Locale("ja-JP-u-ca-japanese");
l.calendar
// "japanese"
Формат времени:
const l = new Intl.Locale("en-US-u-hc-h23");
l.hourCycle
// "h23"
Поддержка числовой сортировки:
const l = new Intl.Locale("de-DE-u-kn-true");
l.numeric
// true
Приоритет регистра при сортировке:
const l = new Intl.Locale("en-US-u-kf-upper");
l.caseFirst
// "upper"
Многие форматтеры возвращают не только результат форматирования, но и фактически выбранную локаль.
const dtf = new Intl.DateTimeFormat(["fr-FR", "en-US"]);
dtf.resolvedOptions().locale
Результат:
"fr-FR"
Смысл:
const nf = new Intl.NumberFormat(["de-DE", "en-US"]);
nf.resolvedOptions().locale
const collator = new Intl.Collator(["ja-JP", "en-US"]);
collator.resolvedOptions().locale
При передаче массива локалей Intl API выполняет сопоставление:
ru-RU)ru)en-US или системной
локали)Позволяет определить, какие локали поддерживаются движком:
Intl.supportedLocalesOf(["ru-RU", "xx-YY", "en-US"])
Результат может быть:
["ru-RU", "en-US"]
Назначение:
Локали могут включать расширения u-, влияющие на
форматирование.
Примеры:
en-US-u-ca-buddhist
de-DE-u-nu-latn
ja-JP-u-hc-h12
Категории расширений:
ca — календарьnu — система чиселhc — цикл часовkf — сортировка по региструkn — числовая сортировкаСозданный объект позволяет разложить строку локали на компоненты без ручного парсинга:
const locale = new Intl.Locale("sr-Cyrl-RS-u-nu-latn");
locale.language; // "sr"
locale.script; // "Cyrl"
locale.region; // "RS"
locale.numberingSystem; // "latn"
Пользовательские строки локали могут быть:
ru-ru)ru)en_us, EN-us)Канонизация приводит их к единому виду:
Intl.getCanonicalLocales("EN-us")
Результат:
["en-US"]
При отсутствии точного совпадения локали происходит последовательное упрощение:
fr-CA-u-ca-buddhistfr-CAfrЛокаль определяет:
Каждый форматтер фиксирует выбранную локаль через
resolvedOptions(), что позволяет анализировать реальное
поведение движка.
Локали считаются совместимыми, если совпадает базовая часть:
| Локаль A | Локаль B | Совместимость |
|---|---|---|
| ru-RU | ru | да |
| en-US | en-GB | частично |
| zh-Hans | zh | да |
Если явная локаль не передана, используется системная:
new Intl.DateTimeFormat().resolvedOptions().locale
Она зависит от: