Объект Intl.DisplayNames позволяет локализовать названия, в частности, названия стран и регионов, языков, некоторых других наименований. Его конструктор может принимать два параметра:
Intl.DisplayNames([locales[, options]])
Параметр locales представляет код языка в формате BCP 47 или набор языковых кодов.
Параметр 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(). В этот метод передается код названия. Метод возвращает локализованное наименование.
Рассмотрим несколько примеров:
const USAInEnglish = new Intl.DisplayNames("en", {type: "region"}).of("US"); const USAInRussian = new Intl.DisplayNames("ru", {type: "region"}).of("US"); console.log(USAInEnglish); // United States console.log(USAInRussian); // Соединенные Штаты
Здесь получаем два названия для одной и той же страны - США. Для константы USAInEnglish применяет код культуры "en", то есть мы будем получать
название на английском. Параметр type: "region"
указывает, что мы хотим получить название страны.региона. Далее у соданного объекта вызываем
метод of(), в который передается значение "US" - это код, который означает, что мы хотим получить название для USA.
В итоге мы получим название USA на английском языке - "United States".
А константа USAInRussian также получает название страны по коду "US", только на русском языке.
Для получения названия региона (это может быть название страны или название географического региона) применяется параметр type: "region"
.
Для получения названия региона в метод of() передается код региона. В качестве кода региона может выступать код
ISO-3166 из двух букв (например, US, RU, DE и т.д.) или
трехчисловой код UN M49.
Например, используем код "DE" для получения названия Германии на разных языках:
const GermanyInEnglish = new Intl.DisplayNames("en", {type: "region"}).of("DE"); const GermanyInRussian = new Intl.DisplayNames("ru", {type: "region"}).of("DE"); const GermanyInGerman = new Intl.DisplayNames("de", {type: "region"}).of("DE"); console.log(GermanyInEnglish); // Germany console.log(GermanyInRussian); // Германия console.log(GermanyInGerman); // Deutschland
Для получения названия письменного скрипта применяется значение type: "script"
.
Для получения названия письменности в метод of() передается четырехбуквенный код ISO-15924.
Например:
const CyrlInEnglish = new Intl.DisplayNames("en", {type: "script"}).of("Cyrl"); const CyrlInRussian = new Intl.DisplayNames("ru", {type: "script"}).of("Cyrl"); console.log(CyrlInEnglish); // Cyrillic console.log(CyrlInRussian); // кириллица
Для получения названия языка применяется значение type: "language"
, а в метод of() передается код языка в формате languageCode[-scriptCode][-regionCode](-variant)
,
где компонент languageCode
представляет двухбуквенный код языка в формате ISO 639-1 или трехбуквенный код в формате ISO 639-2. Необязательные
компоненты scriptCode
и regionCode
- выше рассмотренные коды письменности и региона соответственно.
Например:
const enRussian = new Intl.DisplayNames("en", {type: "language"}).of("ru"); const ruRussian = new Intl.DisplayNames("ru", {type: "language"}).of("ru"); const deRussian = new Intl.DisplayNames("de", {type: "language"}).of("ru"); console.log(enRussian); // Russian console.log(ruRussian); // русский console.log(deRussian); // Russisch
Используем код языка вместе с кодом региона:
const ruLang = new Intl.DisplayNames("ru", {type: "language"}); const enUS = ruLang.of("en-US"); const enGB = ruLang.of("en-GB"); console.log(enUS); // американский английский console.log(enGB); // британский английский
Для получения названия валюты применяется значение type: "currency"
, а в метод of() передается трехбуквенный
код ISO 4217. Например:
const ruLang = new Intl.DisplayNames("ru", {type: "currency"}); const usd = ruLang.of("USD"); const euro = ruLang.of("EUR"); const ruble = ruLang.of("RUB"); console.log(usd); // доллар США console.log(euro); // евро console.log(ruble); // российский рубль