Форматирование сокращённых записей — одна из ключевых задач локализации интерфейсов. Пользовательские интерфейсы постоянно работают с компактными представлениями чисел, единиц измерения, валют, временных интервалов и названий языков. В разных странах правила сокращений различаются: где-то используются точки, где-то пробелы, где-то меняется порядок слов или система обозначений.
Библиотека Intl предоставляет встроенные механизмы для
корректного формирования сокращений с учётом локали.
Для компактного отображения больших чисел используется
Intl.NumberFormat с параметром
notation: "compact".
const formatter = new Intl.NumberFormat("ru", {
notation: "compact"
});
console.log(formatter.format(1200));
console.log(formatter.format(1500000));
Результат:
1,2 тыс.
1,5 млн
Параметр compactDisplay определяет стиль сокращения.
Короткая форма:
const formatter = new Intl.NumberFormat("ru", {
notation: "compact",
compactDisplay: "short"
});
console.log(formatter.format(2500000));
Результат:
2,5 млн
Полная словесная форма:
const formatter = new Intl.NumberFormat("ru", {
notation: "compact",
compactDisplay: "long"
});
console.log(formatter.format(2500000));
Результат:
2,5 миллиона
Разные языки используют разные сокращения.
const number = 3200000;
console.log(
new Intl.NumberFormat("ru", {
notation: "compact"
}).format(number)
);
console.log(
new Intl.NumberFormat("en", {
notation: "compact"
}).format(number)
);
console.log(
new Intl.NumberFormat("fr", {
notation: "compact"
}).format(number)
);
Результат:
3,2 млн
3.2M
3,2 M
Сокращённые значения часто требуют ограничения дробной части.
const formatter = new Intl.NumberFormat("ru", {
notation: "compact",
maximumFractionDigits: 1
});
console.log(formatter.format(9876543));
Результат:
9,9 млн
Intl.NumberFormat умеет сокращать валютные значения.
const formatter = new Intl.NumberFormat("ru", {
style: "currency",
currency: "RUB",
notation: "compact"
});
console.log(formatter.format(1200000));
Результат:
1,2 млн ₽
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
notation: "compact"
});
console.log(formatter.format(5600000));
Результат:
$5.6M
Для единиц измерения используется параметр
style: "unit".
const formatter = new Intl.NumberFormat("ru", {
style: "unit",
unit: "kilometer",
unitDisplay: "short"
});
console.log(formatter.format(15));
Результат:
15 км
Полное название:
const formatter = new Intl.NumberFormat("ru", {
style: "unit",
unit: "liter",
unitDisplay: "long"
});
console.log(formatter.format(3));
Результат:
3 литра
Сокращённое название:
const formatter = new Intl.NumberFormat("ru", {
style: "unit",
unit: "liter",
unitDisplay: "short"
});
console.log(formatter.format(3));
Результат:
3 л
Максимально компактная запись:
const formatter = new Intl.NumberFormat("ru", {
style: "unit",
unit: "liter",
unitDisplay: "narrow"
});
console.log(formatter.format(3));
Результат:
3л
new Intl.NumberFormat("ru", {
style: "unit",
unit: "meter"
});
Поддерживаемые единицы:
meterkilometercentimetermillimetermileyardfootinchnew Intl.NumberFormat("ru", {
style: "unit",
unit: "kilogram"
});
Поддерживаются:
gramkilogramouncepoundnew Intl.NumberFormat("ru", {
style: "unit",
unit: "hour"
});
Поддерживаются:
secondminutehourdayweekmonthyearМожно формировать сложные сокращения через -per-.
const formatter = new Intl.NumberFormat("ru", {
style: "unit",
unit: "kilometer-per-hour",
unitDisplay: "short"
});
console.log(formatter.format(90));
Результат:
90 км/ч
const value = 120;
console.log(
new Intl.NumberFormat("ru", {
style: "unit",
unit: "kilometer",
unitDisplay: "short"
}).format(value)
);
console.log(
new Intl.NumberFormat("en", {
style: "unit",
unit: "kilometer",
unitDisplay: "short"
}).format(value)
);
Результат:
120 км
120 km
Для дат используется Intl.DateTimeFormat.
const formatter = new Intl.DateTimeFormat("ru", {
day: "numeric",
month: "short",
year: "numeric"
});
console.log(formatter.format(new Date()));
Результат:
12 июн. 2026 г.
const formatter = new Intl.DateTimeFormat("ru", {
month: "short"
});
console.log(formatter.format(new Date()));
Результат:
июн.
const formatter = new Intl.DateTimeFormat("ru", {
month: "narrow"
});
console.log(formatter.format(new Date()));
Результат:
И
const formatter = new Intl.DateTimeFormat("ru", {
weekday: "short"
});
console.log(formatter.format(new Date()));
Результат:
пт
const formatter = new Intl.DateTimeFormat("ru", {
weekday: "narrow"
});
console.log(formatter.format(new Date()));
Результат:
П
Для интервалов используется Intl.RelativeTimeFormat.
const formatter = new Intl.RelativeTimeFormat("ru", {
style: "short"
});
console.log(formatter.format(-5, "minute"));
Результат:
5 мин. назад
const formatter = new Intl.RelativeTimeFormat("ru", {
style: "narrow"
});
console.log(formatter.format(3, "day"));
Результат:
через 3 дн.
const value = -2;
console.log(
new Intl.RelativeTimeFormat("ru", {
style: "short"
}).format(value, "hour")
);
console.log(
new Intl.RelativeTimeFormat("en", {
style: "short"
}).format(value, "hour")
);
Результат:
2 ч назад
2 hr. ago
Intl.DisplayNames позволяет получать локализованные
названия языков и регионов.
const languages = new Intl.DisplayNames(["ru"], {
type: "language"
});
console.log(languages.of("en"));
console.log(languages.of("fr"));
Результат:
английский
французский
const regions = new Intl.DisplayNames(["ru"], {
type: "region"
});
console.log(regions.of("US"));
console.log(regions.of("DE"));
Результат:
США
Германия
currencyDisplay управляет отображением валюты.
const formatter = new Intl.NumberFormat("ru", {
style: "currency",
currency: "USD",
currencyDisplay: "symbol"
});
console.log(formatter.format(50));
Результат:
50 $
const formatter = new Intl.NumberFormat("ru", {
style: "currency",
currency: "USD",
currencyDisplay: "code"
});
console.log(formatter.format(50));
Результат:
50 USD
const formatter = new Intl.NumberFormat("ru", {
style: "currency",
currency: "USD",
currencyDisplay: "name"
});
console.log(formatter.format(50));
Результат:
50 долларов США
Настройки форматирования можно объединять.
const formatter = new Intl.NumberFormat("ru", {
style: "currency",
currency: "EUR",
notation: "compact",
maximumFractionDigits: 2
});
console.log(formatter.format(14500000));
Результат:
14,5 млн €
Метод resolvedOptions() показывает итоговые параметры
форматтера.
const formatter = new Intl.NumberFormat("ru", {
notation: "compact"
});
console.log(formatter.resolvedOptions());
Пример результата:
{
locale: "ru",
notation: "compact",
compactDisplay: "short",
...
}
console.log(
Intl.NumberFormat.supportedLocalesOf([
"ru",
"fr",
"de"
])
);
Результат:
["ru", "fr", "de"]
const views = new Intl.NumberFormat("ru", {
notation: "compact"
});
console.log(views.format(15600));
Результат:
15,6 тыс.
const speed = new Intl.NumberFormat("ru", {
style: "unit",
unit: "kilometer-per-hour",
unitDisplay: "narrow"
});
console.log(speed.format(120));
Результат:
120км/ч
const time = new Intl.RelativeTimeFormat("ru", {
style: "narrow"
});
console.log(time.format(-1, "minute"));
Результат:
1 мин. назад
Некоторые языки используют:
Пример:
const number = 1500000;
console.log(
new Intl.NumberFormat("ja", {
notation: "compact"
}).format(number)
);
console.log(
new Intl.NumberFormat("zh", {
notation: "compact"
}).format(number)
);
Результат:
150万
150万
Не все сокращения поддерживаются встроенно:
Большинство возможностей поддерживаются:
Наиболее современные функции:
Intl.DisplayNamesIntl.RelativeTimeFormatмогут отсутствовать в старых версиях браузеров.