- Операторы
- Управляющие инструкции
- JS Объекты
- Array
- Boolean
- Date
- Error
- Function
- Global
- JSON
- Math
- Number
- Object
- RegExp
- String
- Unicode
- Symbol
- Итераторы и генераторы
- Map и WeakMap
- Set и WeakSet
- Локализация
- браузер BOM
- HTML DOM
- События
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Модули
- Классы
- Разное
Intl: интернационализация в JavaScript
Внедрение стандарта ES2021 добавило в язык JavaScript встроенные возможности локализации. Intl API включает несколько конструкторов, добавленных в пространство имен:
- Intl.Collator - конструктор для «сортировщиков», которые представляют собой объекты, позволяющие сравнивать строки с учетом языка;
- Intl.DateTimeFormat - конструктор для объектов, которые включают чувствительное к языку форматирование даты и времени;
- Intl.DisplayNames - конструктор обеспечивает согласованный перевод отображаемых имен языка, региона и прочего;
- Intl.ListFormat - конструктор для объектов, которые позволяют форматировать список с учетом языка;
- Intl.NumberFormat - конструктор для объектов, которые позволяют форматировать числа с учетом языка;
- Intl.RelativeTimeFormat - конструктор для объектов, которые включают форматирование относительного времени с учетом языка;
- Intl.Locale - конструктор для объектов, представляющих идентификатор локали в Unicode;
- Intl.PluralRules - конструктор для объектов, которые включают форматирование с учетом множественного числа и языковых правил для множественного числа.
С полным описанием Intl.PluralRules можно познакомиться здесь. - Intl.getCanonicalLocales() - метод позволяет проверить, действительна ли локаль, и возвращает для нее правильное форматирование.
- Методы в Date, String, Number
Аргументы
- locale
- Локаль - первый и самый важный аргумент всех конструкторов, связанных с интернационализацией.
Локаль описывается строкой из трёх компонентов, которые разделяются дефисом:
Код языка - Код способа записи - Код страны
. На практике не всегда указаны три, обычно меньше:ru
– русский язык, без уточнений.en-GB
– английский язык, используемый в Англии (GB
).en-US
– английский язык, используемый в США (US
).zh-Hans-CN
– китайский язык (zh
), записываемый упрощённой иероглифической письменностью (Hans
), используемый в Китае.
Также через суффикс
-u-*
можно указать расширения локалей, например"th-TH-u-nu-thai"
– тайский язык (th
), используемый в Таиланде (TH
), с записью чисел тайскими буквами (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) .Все методы принимают локаль в виде строки или массива, содержащего несколько локалей в порядке предпочтения.
Если локаль не указана или
undefined
– берётся локаль по умолчанию, установленная в окружении (браузере). - localeMatcher
- – вспомогательная настройка, которую тоже можно везде указать, она определяет способ подбора локали, если желаемая недоступна. У него два значения:
"lookup"
– означает простейший порядок поиска путём обрезания суффикса, напримерzh-Hans-CN
→zh-Hans
→zh
→ локаль по умолчанию."best fit"
– использует встроенные алгоритмы и предпочтения браузера (или другого окружения) для выбора подходящей локали.
По умолчанию стоит
"best fit"
.Если локалей несколько, например
["zh-Hans-CN", "ru-RU"]
тоlocaleMatcher
пытается подобрать наиболее подходящую локаль для первой из списка (китайская), если не получается – переходит ко второй (русской) и так далее. Если ни одной не нашёл, например на компьютере не совсем поддерживается ни китайский ни русский, то используется локаль по умолчанию.Как правило,
"best fit"
является здесь наилучшим выбором.
- supportedLocalesOf() - - это встроенный метод в JavaScript, который используется для возврата массива, содержащего те из предоставленных локалей, которые поддерживаются в сопоставлении, без необходимости возвращаться к локали среды выполнения по умолчанию.
- resolvedOptions() - метод возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации Intl=объекта Intl.ListFormat. Например, можно получить часовой пояс клиента из браузера
Alert(new Intl.DateTimeFormat().resolvedOptions().timeZone);
Intl.Collator
Конструктор для «сортировщиков», которые представляют собой объекты, позволяющие сравнивать строки с учетом языка
Синтаксис:
let collator = new Intl.Collator([locales, [options]])
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
- Объект с дополнительными настройками:
localeMatcher
– алгоритм выбора подходящей локали.sensitivity
– чувствительность: какие различия в символах учитывать, а какие – нет, варианты:base
– учитывать только разные символы, без диакритических знаков и регистра, например:а ≠ б
,е = ё
,а = А
.accent
– учитывать символы и диакритические знаки, например:а ≠ б
,е ≠ ё
,а = А
.case
– учитывать символы и регистр, например:а ≠ б
,е = ё
,а ≠ А
.variant
– учитывать всё: символ, диакритические знаки, регистр, например:а ≠ б
,е ≠ ё
,а ≠ А
, используется по умолчанию.
ignorePunctuation
– игнорировать знаки пунктуации:true/false
, по умолчаниюfalse
.sensitivity
– чувствительность: какие различия в символах учитывать, а какие – нет, варианты:base
– учитывать только разные символы, без диакритических знаков и регистра, например:а ≠ б
,е = ё
,а = А
.accent
– учитывать символы и диакритические знаки, например:а ≠ б
,е ≠ ё
,а = А
.case
– учитывать символы и регистр, например:а ≠ б
,е = ё
,а ≠ А
.variant
– учитывать всё: символ, диакритические знаки, регистр, например:а ≠ б
,е ≠ ё
,а ≠ А
, используется по умолчанию.
ignorePunctuation
– игнорировать знаки пунктуации:true/false
, по умолчаниюfalse
.numeric
– использовать ли численное сравнение:true/false
, еслиtrue
, то будет12 > 2
, иначе12 < 2
.caseFirst
– в сортировке должны идти первыми прописные или строчные буквы, варианты:"upper"
(прописные),"lower"
(строчные) или"false"
(стандартное для локали, также является значением по умолчанию). Не поддерживается IE11.
В подавляющем большинстве случаев подходят стандартные параметры, то есть
options
указывать не нужно.
Методы
let collator = new Intl.Collator([locales, [options]]); collator.compare(str1,str2)
Метод compare() возвращает значение1
(больше),0
(равно) или-1
(меньше).Пример
let collator = new Intl.Collator(); let s = ( "ёжик" > "яблоко" ) // true (ёжик больше, что неверно) s += `\n${ collator.compare("ёжик", "яблоко") }`; // -1 (ёжик меньше, верно) let collator1 = new Intl.Collator(); s += `\n${ collator1.compare("ЁжиК", "ёжик") }`; // 1, разные let collator2 = new Intl.Collator(undefined, {sensitivity: "accent"}); s += `\n${ collator2.compare("ЁжиК", "ёжик") }`; // 0, одинаковые Alert(s);
Intl.Collator.supportedLocalesOf(locales[, options])
Метод возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при сравнении строк без отката к локали по умолчанию среды выполнения. Необязательный параметр options может содержать следующее свойство:localeMatcher
Пример
var locales = ['ban', 'id-u-co-pinyin', 'de-ID']; var options = { localeMatcher: 'lookup' }; Alert(Intl.Collator.supportedLocalesOf(locales, options).join(', '));
let collator = new Intl.Collator([locales, [options]]); collator.resolvedOptions()
Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры сортировки , вычисленные во время инициализации объекта Intl.Collator.Пример
var ru = new Intl.Collator('ru', { sensitivity: 'base' }); var usedOptions = ru.resolvedOptions(); let s=""; for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n"; Alert(s);
Intl.DateTimeFormat
Конструктор для объектов, которые включают чувствительное к языку форматирование даты и времени.
Синтаксис:
new Intl.DateTimeFormat([locales, [options]])
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
-
Свойство Описание Возможные значения По умолчанию localeMatcher Алгоритм подбора локали lookup, best fit best fit formatMatcher Алгоритм подбора формата basic, best fit best fit hour12 Включать ли время в 12-часовом формате true -- 12-часовой формат, false -- 24-часовой timeZone Временная зона Временная зона, например Europe/Moscow UTC weekday День недели narrow, short, long era Эра narrow, short, long year Год 2-digit, numeric undefined или numeric month Месяц 2-digit, numeric, narrow, short, long undefined или numeric day День 2-digit, numeric undefined или numeric hour Час 2-digit, numeric minute Минуты 2-digit, numeric second Секунды 2-digit, numeric timeZoneName Название таймзоны (нет в IE11) short, long Все локали обязаны поддерживать следующие наборы настроек:
- weekday, year, month, day, hour, minute, second
- weekday, year, month, day
- year, month, day
- year, month
- month, day
- hour, minute, second
Если указанный формат не поддерживается, то настройка
formatMatcher
задаёт алгоритм подбора наиболее близкого формата:basic
– по стандартным правилам иbest fit
– по умолчанию, на усмотрение окружения (браузера).
Методы
let datetimeformat = new Intl.DateTimeFormat([locales, [options]]) datetimeformat.resolvedOptions()
Метод resolvedOptions() возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта DateTimeFormat.Пример
var ru = new Intl.DateTimeFormat('ru'); var usedOptions = ru.resolvedOptions(); let s=""; for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n"; Alert(s);
let datetimeformat = new Intl.DateTimeFormat([locales, [options]]) datetimeformat.format(date)
Метод format() форматирует дату (date
) согласно локали и параметрам форматирования этого Intl.DateTimeFormat объекта.Пример
// Короткая дата: let now = new Date(); let ru1 = new Intl.DateTimeFormat('ru').format(now); let us = new Intl.DateTimeFormat('en-US').format(now); // Длинная дата: let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; let ru2 = new Intl.DateTimeFormat('ru',options).format(now); let es = new Intl.DateTimeFormat('es-ES',options).format(now); // Только время: let tt = new Intl.DateTimeFormat('ru', {hour:'numeric', minute:'numeric', second:'numeric'}).format(now); Alert ( `${ru1}\n${us}\n\n${ru2}\n${es}\n\n${tt}` );
let datetimeformat = new Intl.DateTimeFormat([locales, [options]]) datetimeformat.formatToParts(date)
Метод formatToParts() возвращает массив объектов, содержащих форматированную дату в виде пар ключ/значение. Структура возврата метода formatToParts() похожа на это:[ { type: 'day', value: '17' }, { type: 'weekday', value: 'Monday' } ]
Пример
let date = Date.UTC(2021, 12, 13, 3, 0, 42); let formatter = new Intl.DateTimeFormat('ru', { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', fractionalSecondDigits: 3, hour12: false, timeZone: 'UTC' }); let s = "[\n"; let a = formatter.formatToParts(date); for (let i=0; i < a.length; i++) { s += ` { type: '${a[i].type}',\t value: '${a[i].value}'\t },\n`; } Alert(s+']');
Intl.DisplayNames
Конструктор DisplayNames используется для форматирования названий языков, диалектов, регионов и валют на другом языке.
Синтаксис:
new Intl.DisplayNames([locales, [options]])
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
-
Параметр options представляет дополнительный набор опций:
localeMatcher: алгоритм поиска соответствий. Может принимать два значения:
"lookup"
и"best fit"
.
Значение по умолчанию -"best fit"
.style: длина форматируемой строки. Возможные значения:
"long"
,"short"
и"narrow"
(например,A, B,C
).
Значение по умолчанию -"long"
type: тип названий, которые будут локализованы. Возможные значения:
"language"
: возвращает название языка"region"
: возвращает название страны/региона"script"
: возвращает название письменного скрипта"currency"
: возвращает название валюты
fallback: задает альтернативнй вариант. Возможные значения:
"code"
и"none"
.
"code"
задает код, который определяет локализуемое название.
Какое именно название будет локализоваться, задается с помощью метода of().
Методы
let displaynames = new Intl.DisplayNames([locales, [options]]) displaynames.resolvedOptions()
Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации объекта Intl.DisplayNames.Пример
var ru = new Intl.DisplayNames('ru',{type:"language"}); var usedOptions = ru.resolvedOptions(); let s=""; for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n"; Alert(s);
let displaynames = new Intl.DisplayNames([locales, [options]]) displaynames.of(code)
Метод of() возвращает локализованное наименование.code
зависит от type:- Если type является
"region"
,code
: код ISO-3166 из двух букв (например, US, RU, DE и т.д.) или трехчисловой код UN M49. - Если type является
"script"
,code
: четырехбуквенный код ISO-15924. - Если type является
"language"
,code
: код языка в формате languageCode[-scriptCode][-regionCode](-variant), где компонент languageCode представляет двухбуквенный код языка в формате ISO 639-1 или трехбуквенный код в формате ISO 639-2. - Если type является
"currency"
,code
:трехбуквенный код ISO 4217.
Пример
let s = ` ${ GermanyInEnglish = new Intl.DisplayNames("en", {type: "region"}).of("DE") } ${ GermanyInRussian = new Intl.DisplayNames("ru", {type: "region"}).of("DE")} ${ GermanyInGerman = new Intl.DisplayNames("de", {type: "region"}).of("DE") } ${ CyrlInEnglish = new Intl.DisplayNames("en", {type: "script"}).of("Cyrl") } ${ CyrlInRussian = new Intl.DisplayNames("ru", {type: "script"}).of("Cyrl") } ${ enRussian = new Intl.DisplayNames("en", {type: "language"}).of("ru") } ${ ruRussian = new Intl.DisplayNames("ru", {type: "language"}).of("ru") } ${ deRussian = new Intl.DisplayNames("de", {type: "language"}).of("ru") } ${ enUS = new Intl.DisplayNames("ru", {type: "language"}).of("en-US") } ${ enGB = new Intl.DisplayNames("ru", {type: "language"}).of("en-GB") } ${ usd = new Intl.DisplayNames("ru", {type: "currency"}).of("USD") } ${ euro = new Intl.DisplayNames("ru", {type: "currency"}).of("EUR") } ${ ruble = new Intl.DisplayNames("ru", {type: "currency"}).of("RUB") } `; Alert(s);
- Если type является
Intl.ListFormat
Конструктор для объединения строк, использующий конъюнкцию и дизъюнкцию, чтобы сформировать понятную фразу.
Синтаксис:
new Intl.ListFormat([locales, [options]])
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
- Параметр options представляет дополнительный набор опций:
- localeMatcher: алгоритм поиска соответствий. Может принимать два значения:
"lookup"
и"best fit"
.
Значение по умолчанию -"best fit"
. - style: длина форматируемой строки.
Возможные значения:"long"
(например,A, B, and C
),"short"
или"narrow"
(например,A, B,C
).
Значение по умолчанию -"long"
- type: формат выходной строки.Возможные значения:
"conjunction"
(предпоследний и последний элементы в списке соединяются союзом "и" ("and") -A, B и C
),"disjunction"
(предпоследний и последний элементы в списке соединяются союзом "или" ("or") -A, B или C
),"unit"
(применяется для списков с числовыми значениями и добавляет к ним единицы измерения).
"conjunction"
- localeMatcher: алгоритм поиска соответствий. Может принимать два значения:
Методы
let listformat = new Intl.ListFormat([locales, [options]]) listformat.resolvedOptions()
Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации объекта Intl.ListFormat.Пример
var ru = new Intl.ListFormat('ru'); var usedOptions = ru.resolvedOptions(); let s=""; for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n"; Alert(s);
let listformat = new Intl.ListFormat([locales, [options]]) listformat.format(list)
Метод format() возвращает отформатированный локализованный список (
list
) в виде строки.Пример
const people = ["Андрей", "Antonio", "Sam"]; let s = ` ${ andList = new Intl.ListFormat("ru" , { style:"long", type: "conjunction" }).format(people) } ${ new Intl.ListFormat("es-ES" , { style:"long", type: "conjunction" }).format(people) } ${ new Intl.ListFormat("en-US" , { style:"long", type: "conjunction" }).format(people) } ${ new Intl.ListFormat("en-US" , { style:"short", type: "conjunction" }).format(people) } ${ unitList = new Intl.ListFormat("ru" , { style:"short", type: "unit" }).format(people) } ${ orList = new Intl.ListFormat("ru" , { style:"long", type: "disjunction" }).format(people) } ${ new Intl.ListFormat("es" , { style:"long", type: "disjunction" }).format(people) } ${ new Intl.ListFormat("en" , { style:"long", type: "disjunction" }).format(people) } ${ new Intl.ListFormat("zh" , { style:"long", type: "disjunction" }).format(people) } `; Alert(s);
Intl.NumberFormat
Конструктор NumberFormat используется для форматирования чисел, валюты, процентов и единиц измерения, таких как длина, температура и др.
Синтаксис:
new Intl.NumberFormat([locales[, options]]);
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
-
Свойство Описание Возможные значения По умолчанию localeMatcher Алгоритм подбора локали lookup, best fit best fit style Стиль форматирования decimal, percent, currency decimal currency Алфавитный код валюты См. Список кодов валюты, например USD currencyDisplay Показывать валюту в виде кода, локализованного символа или локализованного названия code, symbol, name symbol useGrouping Разделять ли цифры на группы true, false true minimumIntegerDigits Минимальное количество цифр целой части от 1 до 21 21 minimumFractionDigits Минимальное количество десятичных цифр от 0 до 20 для чисел и процентов 0, для валюты зависит от кода. maximumFractionDigits Максимальное количество десятичных цифр от minimumFractionDigits до 20. для чисел max(minimumFractionDigits, 3), для процентов 0, для валюты зависит от кода. minimumSignificantDigits Минимальное количество значимых цифр от 1 до 21 1 maximumSignificantDigits Максимальное количество значимых цифр от minimumSignificantDigits до 21 minimumSignificantDigits
Методы
let numberformat = new Intl.NumberFormat([locales, [options]]) numberformat.resolvedOptions()
Метод resolvedOptions() возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта NumberFormat.Пример
var ru = new Intl.NumberFormat('ru'); var usedOptions = ru.resolvedOptions(); let s=""; for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n"; Alert(s);
let numberformat = new Intl.NumberFormat([locales, [options]]) numberformat.format(number)
Для форматирования числа объект Intl.NumberFormat предоставляет метод format(), в который передается форматируемое число (number
) и который возвращает отформатированное число в виде строки.Пример
let number = 1234567890.123; let s = `без опций: ${ new Intl.NumberFormat("en").format(number) } ${ new Intl.NumberFormat("ru").format(number) } ${ new Intl.NumberFormat("de").format(number) } С ограничением значимых цифр (важны только первые 3): ${ new Intl.NumberFormat("ru", { maximumSignificantDigits: 3}).format(number) } `; let value = 0.851; s+=` Проценты: ${ new Intl.NumberFormat("ru", {style: "percent"}).format(value) } ${ new Intl.NumberFormat("en", {style: "percent"}).format(value) } ${ new Intl.NumberFormat("tr", {style: "percent"}).format(value) } Вывод дробной части: ${ new Intl.NumberFormat("en", {style: "percent", minimumFractionDigits: 2}).format(value) } ${ new Intl.NumberFormat("ru", {style: "percent", minimumFractionDigits: 2}).format(value) } `; value = 1234.5; s+=` Форматирование валюты: ${ new Intl.NumberFormat("en", {style: "currency", currency: "USD"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "USD"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "USD", currencyDisplay: "name"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "EUR"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "EUR", currencyDisplay: "name"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "RUB"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "currency", currency: "RUB", currencyDisplay: "name"}).format(value) } `; value = 123; s+=` Форматирование единиц измерения: ${ new Intl.NumberFormat("ru", {style: "unit", unit: "liter", unitDisplay: "long"}).format(value) } ${ new Intl.NumberFormat("ru", {style: "unit", unit: "liter", unitDisplay: "short"}).format(value) } ${ new Intl.NumberFormat("zh", {style: "unit", unit: "liter"}).format(value) } `; Alert(s);
let numberformat = new Intl.NumberFormat([locales, [options]]) numberformat.formatToParts(date)
Метод formatToParts() возвращает массив объектов, представляющих числовую строку в частях, которые могут быть использованы для пользовательского форматирования с учетом текущих данных locales. Структура возвраты метода formatToParts() возвраты метода похожа на это:[ { type: "integer", value: "3" }, { type: "group", value: "." }, { type: "integer", value: "500" } ]
Пример
let number = 3500;; let formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }); let s = "[\n"; let a = formatter.formatToParts(number); for (let i=0; i < a.length; i++) { s += ` { type: '${a[i].type}',\t value: '${a[i].value}'\t },\n`; } Alert(s+']');
Intl.RelativeTimeFormat
Конструктор RelativeTimeFormat используется для локализации относительного времени, например, вчера, завтра, на следующей неделе, в прошлом месяце и т.д.
Синтаксис:
new Intl.RelativeTimeFormat([locales[, options]]);
Параметры:
- locales
-
Локаль, одна или массив в порядке предпочтения.
- options
- Объект с дополнительными настройками:
localeMatcher
– алгоритм выбора подходящей локали.numeric
- формат выходного сообщения. одно из"always"
, т.е. "1 день назад" или"auto"
, т.е. "вчера".
По усолчанию -"always"
style
- формат выходного сообщения:"long"
,"short"
или"narrow"
.
По усолчанию -"long"
Метод
В метод format() передается числовое значение (amount) и единица измерения (unit): "year"
(год), "quarter"
(квартал), "month"
(месяц), "week"
(неделя), "day"
(день), "hour"
(час), "minute"
(минута), или "second"
(секунда):
new Intl.RelativeTimeFormat(locale, options).format(amount, unit)Положительное число в amount означает будущее, отрицательное - прошлое.
Пример
let s = ` ${ new Intl.RelativeTimeFormat("ru").format(-1,"day") } ${ new Intl.RelativeTimeFormat("ru",{numeric:"auto"}).format(1,"day") } ${ new Intl.RelativeTimeFormat("es",{numeric:"auto"}).format(1,"day") } ${ new Intl.RelativeTimeFormat("ru",{numeric:"auto"}).format(1,"month") } `; Alert(s);
Intl.Locale
Конструктор Locale используется для создания экземпляров идентификаторов локали:
new Intl.Locale([locales[, options]]);
Первым обязательным аргументом, передаваемым Locale, является локаль (locales
). Например:
const ru = new Intl.Locale('ru-RU');
Вторым опциональным аргументом Locale является объект с настройками. Например:
const ru = new Intl.Locale( 'ru', { region: 'RU', hourCycle: 'h24', calendar: 'gregory' } );С полным описанием Intl.Locale можно познакомиться здесь.
Intl.getCanonicalLocales
Метод Intl.getCanonicalLocales() позволяет проверить, действительна ли локаль, и возвращает для нее правильное форматирование. Он может принимать строку или массив. Если языковой стандарт неверен выдаётся ошибка, которую можно поймать с помощью блока try/catch.
Пример
let s = ` ${ Intl.getCanonicalLocales("it-it") } ${ Intl.getCanonicalLocales(["en-us", "en-gb"]) } `; try {s+=`${ Intl.getCanonicalLocales("it_it") }` } catch (e) {s+="Error!";} Alert(s);
Методы в Date, String, Number
Методы форматирования также поддерживаются в обычных строках, датах, числах:
String.prototype.localeCompare(that [, locales [, options]])
Сравнивает строку с другой, с учётом локали, например:
let str = "ёжик"; Alert( str.localeCompare("яблоко", "ru") ); // -1
Date.prototype.toLocaleString([locales [, options]])
Форматирует дату в соответствии с локалью, например:
let date = new Date(2021, 12, 13, 12, 23); Alert( date.toLocaleString("ru", { year: 'numeric', month: 'long' }) );
Date.prototype.toLocaleDateString([locales [, options]])
То же, что и выше, но опции по умолчанию включают в себя год, месяц, день
let date = new Date(2021, 12, 13, 12, 23); Alert( date.toLocaleDateString("es"));
Date.prototype.toLocaleTimeString([locales [, options]])
То же, что и выше, но опции по умолчанию включают в себя часы, минуты, секунды
let date = new Date(2021, 12, 13, 12, 23); Alert( date.toLocaleTimeString( "ru",{ weekday: 'long' } ) );
Number.prototype.toLocaleString([locales [, options]])
Форматирует число, используя опции Intl.NumberFormat.
let value = -1234567890.123; Alert( value.toLocaleString("ru"));
Все эти методы при запуске создают соответствующий объект Intl.*
и передают ему опции, можно рассматривать их как укороченные варианты вызова.