Локализация

Последнее обновление: 16.11.2023

Локализация списков и Intl.ListFormat

Объект Intl.ListFormat позволяет форматировать списки в соответствии с некоторыми локализационными настройками. Его конструктор может принимать два параметра:

Intl.ListFormat([locales[, options]])

Параметр locales представляет код языка в формате BCP 47 или набор языковых кодов.

Параметр 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"

Для форматирования списка данный объект предоставляет метод format(), в который передается форматируемый список. Метод возвращает отформатированный локализованный список в виде строки.

Рассмотрим несколько примеров. Добавим союз "И":

const people = ["Tom", "Bob", "Sam"];
const andList = new Intl.ListFormat("ru").format(people); // , { style:"long", type: "conjunction" }
console.log(andList);	// Tom, Bob и Sam

В данном случае используется локализация с учетом русскоязычной культуры и для этого в качестве параметра locales в конструктор Intl.ListFormat передаем код языка ru. В итоге из массива ["Tom", "Bob", "Sam"] строку Tom, Bob и Sam. В данном случае для второго параметра - options использовались настройки по умолчанию. Однако мы можем их задать и явным образом:

const people = ["Tom", "Bob", "Sam"];
const andList = new Intl.ListFormat("ru" , { style:"long", type: "conjunction" }).format(people);
console.log(andList);	// Tom, Bob и Sam

В этом случае мы получим тот же самый результат, так как опция type: "conjunction" предполагает использование союза "и".

Теперь используем союз "или":

const people = ["Tom", "Bob", "Sam"];
const orList = new Intl.ListFormat("ru", { style:"short", type: "disjunction" }).format(people);
console.log(orList);// Tom, Bob или Sam

При этом мы не ограничены одной языковой культурой. Так, локализуем список в ряд других языков:

const people = ["Tom", "Bob", "Sam"];

// английский язык
const enList = new Intl.ListFormat("en" , { style:"long", type: "conjunction" }).format(people);
console.log(enList);	// Tom, Bob, and Sam

// немецкий язык
const deList = new Intl.ListFormat("de" , { style:"long", type: "conjunction" }).format(people);
console.log(deList);	// Tom, Bob und Sam

// французский язык
const frList = new Intl.ListFormat("fr" , { style:"long", type: "conjunction" }).format(people);
console.log(frList);	// Tom, Bob et Sam

// китайский язык
const zhList = new Intl.ListFormat("zh" , { style:"long", type: "conjunction" }).format(people);
console.log(zhList);	// Tom、Bob和Sam
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850