Intl — встроенное пространство имён JavaScript,
предоставляющее набор объектов для интернационализации приложений.
Библиотека входит в стандарт ECMAScript Internationalization API
Specification и предназначена для корректной работы с локалями,
форматированием данных и языковыми правилами.
Структурно Intl состоит из независимых классов, каждый
из которых отвечает за отдельную задачу:
| Компонент | Назначение |
|---|---|
Intl.Collator |
Сравнение и сортировка строк |
Intl.DateTimeFormat |
Форматирование даты и времени |
Intl.NumberFormat |
Форматирование чисел |
Intl.PluralRules |
Определение формы множественного числа |
Intl.RelativeTimeFormat |
Относительное время |
Intl.ListFormat |
Форматирование списков |
Intl.Locale |
Работа с локалями |
Intl.DisplayNames |
Локализованные названия языков, стран и валют |
Intl.Segmenter |
Разбиение текста на сегменты |
Intl.DurationFormat |
Форматирование длительности |
Intl.supportedValuesOf() |
Получение поддерживаемых значений |
Все инструменты интернационализации находятся внутри глобального
объекта Intl.
console.log(Intl);
Каждый класс работает независимо, но использует общую концепцию:
locale)options)Общая схема работы:
const formatter = new Intl.NumberFormat("ru-RU");
formatter.format(1000);
Локаль определяет язык, регион и дополнительные настройки.
Стандартный формат:
язык-РЕГИОН
Примеры:
"ru-RU"
"en-US"
"de-DE"
"fr-FR"
"kk-KZ"
Расшифровка:
| Часть | Значение |
|---|---|
ru |
русский язык |
RU |
Россия |
en |
английский |
US |
США |
Практически все объекты Intl принимают массив
локалей.
const formatter = new Intl.NumberFormat(
["fr-FR", "en-US"]
);
Механизм выбирает первую поддерживаемую локаль.
console.log(Intl.DateTimeFormat().resolvedOptions());
Результат:
{
locale: "ru-RU",
calendar: "gregory",
numberingSystem: "latn",
timeZone: "Europe/Moscow"
}
Intl.Collator предназначен для:
Обычное сравнение строк в JavaScript не учитывает языковые особенности.
const collator = new Intl.Collator("ru-RU");
const collator = new Intl.Collator("ru-RU");
console.log(
["ёлка", "яблоко", "арбуз"].sort(collator.compare)
);
Параметр sensitivity:
const collator = new Intl.Collator("ru-RU", {
sensitivity: "base"
});
Варианты:
| Значение | Описание |
|---|---|
base |
базовое сравнение |
accent |
учитывать ударения |
case |
учитывать регистр |
variant |
полное сравнение |
const collator = new Intl.Collator("en", {
numeric: true
});
console.log(
["2", "10", "1"].sort(collator.compare)
);
Результат:
["1", "2", "10"]
Intl.DateTimeFormat отвечает за локализованное
представление:
const formatter = new Intl.DateTimeFormat("ru-RU");
console.log(
formatter.format(new Date())
);
const formatter = new Intl.DateTimeFormat("ru-RU", {
year: "numeric",
month: "long",
day: "numeric"
});
Результат:
26 мая 2026 г.
| Параметр | Значения |
|---|---|
year |
numeric, 2-digit |
month |
numeric, long, short |
day |
numeric, 2-digit |
weekday |
long, short |
hour |
numeric, 2-digit |
minute |
numeric, 2-digit |
second |
numeric, 2-digit |
const formatter = new Intl.DateTimeFormat("en-US", {
hour: "numeric",
minute: "numeric",
second: "numeric"
});
const formatter = new Intl.DateTimeFormat("ru-RU", {
timeZone: "Asia/Almaty",
timeStyle: "full"
});
Современный сокращённый формат:
const formatter = new Intl.DateTimeFormat("ru-RU", {
dateStyle: "full",
timeStyle: "short"
});
Поддерживаемые значения:
| Значение | Описание |
|---|---|
full |
полный формат |
long |
длинный |
medium |
средний |
short |
короткий |
const formatter = new Intl.DateTimeFormat("ru-RU");
formatter.formatRange(
new Date("2026-05-01"),
new Date("2026-05-10")
);
Intl.NumberFormat используется для:
const formatter = new Intl.NumberFormat("ru-RU");
console.log(
formatter.format(1234567.89)
);
Результат:
1 234 567,89
const formatter = new Intl.NumberFormat("ru-RU", {
style: "currency",
currency: "RUB"
});
const formatter = new Intl.NumberFormat("ru-RU", {
style: "percent"
});
console.log(
formatter.format(0.25)
);
Результат:
25 %
const formatter = new Intl.NumberFormat("ru-RU", {
style: "unit",
unit: "kilometer"
});
const formatter = new Intl.NumberFormat("ru-RU", {
minimumFractionDigits: 2,
maximumFractionDigits: 4
});
const formatter = new Intl.NumberFormat("ru-RU", {
notation: "compact"
});
Пример результата:
1,2 млн
Intl.PluralRules определяет форму множественного
числа.
Особенно важно для языков со сложной грамматикой.
const rules = new Intl.PluralRules("ru-RU");
console.log(rules.select(1));
console.log(rules.select(2));
console.log(rules.select(5));
Результат:
one
few
many
| Категория | Значение |
|---|---|
zero |
ноль |
one |
один |
two |
два |
few |
несколько |
many |
много |
other |
остальные |
const rules = new Intl.PluralRules("ru-RU");
function getMessage(count) {
const forms = {
one: "товар",
few: "товара",
many: "товаров"
};
return `${count} ${forms[rules.select(count)]}`;
}
Используется для отображения относительного времени:
const rtf = new Intl.RelativeTimeFormat("ru-RU");
rtf.format(-5, "minute");
Результат:
5 минут назад
| Единица | Значение |
|---|---|
second |
секунды |
minute |
минуты |
hour |
часы |
day |
дни |
week |
недели |
month |
месяцы |
year |
годы |
const rtf = new Intl.RelativeTimeFormat("ru-RU", {
style: "short"
});
Форматирует массивы строк в естественный текст.
const formatter = new Intl.ListFormat("ru-RU");
formatter.format([
"JavaScript",
"TypeScript",
"Node.js"
]);
Результат:
JavaScript, TypeScript и Node.js
const formatter = new Intl.ListFormat("ru-RU", {
type: "conjunction"
});
Варианты:
| Значение | Описание |
|---|---|
conjunction |
союз «и» |
disjunction |
союз «или» |
unit |
перечисление единиц |
Intl.Locale предоставляет объектное представление
локали.
const locale = new Intl.Locale("ru-RU");
console.log(locale.language);
console.log(locale.region);
console.log(locale.script);
const locale = new Intl.Locale("ru-RU", {
calendar: "gregory"
});
const locale = new Intl.Locale("ar", {
numberingSystem: "arab"
});
Позволяет получать локализованные названия:
const regionNames = new Intl.DisplayNames(
["ru-RU"],
{ type: "region" }
);
console.log(
regionNames.of("US")
);
Результат:
Соединённые Штаты
const languageNames = new Intl.DisplayNames(
["ru-RU"],
{ type: "language" }
);
console.log(
languageNames.of("de")
);
const currencyNames = new Intl.DisplayNames(
["ru-RU"],
{ type: "currency" }
);
Intl.Segmenter разбивает текст на:
Особенно полезен для языков без явных разделителей.
const segmenter = new Intl.Segmenter("ru-RU", {
granularity: "word"
});
const segments = segmenter.segment(
"JavaScript очень популярен"
);
for (const item of segments) {
console.log(item.segment);
}
| Значение | Описание |
|---|---|
grapheme |
символы |
word |
слова |
sentence |
предложения |
Форматирование длительности времени.
const formatter = new Intl.DurationFormat("ru-RU", {
style: "long"
});
formatter.format({
hours: 5,
minutes: 30
});
Результат:
5 часов 30 минут
Метод возвращает список поддерживаемых значений.
console.log(
Intl.supportedValuesOf("timeZone")
);
| Категория | Описание |
|---|---|
calendar |
календари |
currency |
валюты |
timeZone |
временные зоны |
unit |
единицы измерения |
Большинство объектов Intl имеют одинаковую
структуру:
new Intl.ClassName(locales, options)
Где:
| Аргумент | Назначение |
|---|---|
locales |
локаль или массив локалей |
options |
объект настроек |
JavaScript использует ICU (International Components for Unicode).
ICU содержит:
ICU использует CLDR (Common Locale Data Repository).
CLDR поддерживается Unicode Consortium и включает:
Практически каждый formatter имеет метод:
resolvedOptions()
Он показывает фактически применённые настройки.
const formatter = new Intl.NumberFormat("ru-RU");
console.log(
formatter.resolvedOptions()
);
Локаль может содержать расширения.
Пример:
"ru-RU-u-ca-gregory"
Расшифровка:
| Часть | Значение |
|---|---|
u |
Unicode extension |
ca |
calendar |
gregory |
григорианский календарь |
new Intl.NumberFormat(
"ar-EG-u-nu-arab"
);
console.log(
Intl.NumberFormat.supportedLocalesOf([
"ru-RU",
"fr-FR"
])
);
Все formatter-объекты имеют похожую организацию:
| Элемент | Назначение |
|---|---|
| Конструктор | создание formatter |
format() |
форматирование |
resolvedOptions() |
информация о настройках |
NumberFormatDateTimeFormatDurationFormatPluralRulesSegmenterCollatorDisplayNamesListFormatRelativeTimeFormatLocalesupportedValuesOf()Некоторые возможности появились позже других:
| API | Поддержка |
|---|---|
Collator |
высокая |
NumberFormat |
высокая |
DateTimeFormat |
высокая |
PluralRules |
современная |
Segmenter |
ограниченная |
DurationFormat |
новая |
const formatter = new Intl.NumberFormat(
"ru-RU",
{
style: "currency",
currency: "KZT"
}
);
formatter.format(1000);
formatter.format(2000);
formatter.format(3000);
Создание formatter — сравнительно дорогая операция, поэтому объекты обычно кешируют.
const cache = new Map();
function getFormatter(locale) {
if (!cache.has(locale)) {
cache.set(
locale,
new Intl.NumberFormat(locale)
);
}
return cache.get(locale);
}
Разные части Intl могут использоваться совместно.
const number = new Intl.NumberFormat("ru-RU");
const plural = new Intl.PluralRules("ru-RU");
const count = 5;
const word = {
one: "файл",
few: "файла",
many: "файлов"
}[plural.select(count)];
console.log(
`${number.format(count)} ${word}`
);
Intl используется в:
Каждый объект решает отдельную задачу.
Похожая структура всех formatter-объектов упрощает изучение API.
Многие задачи решаются встроенными средствами JavaScript.
Intl соответствует: