Сокращения и аббревиатуры

Форматирование сокращённых записей — одна из ключевых задач локализации интерфейсов. Пользовательские интерфейсы постоянно работают с компактными представлениями чисел, единиц измерения, валют, временных интервалов и названий языков. В разных странах правила сокращений различаются: где-то используются точки, где-то пробелы, где-то меняется порядок слов или система обозначений.

Библиотека 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 млн

Режимы compact-нотации

Параметр compactDisplay определяет стиль сокращения.

short

Короткая форма:

const formatter = new Intl.NumberFormat("ru", {
  notation: "compact",
  compactDisplay: "short"
});

console.log(formatter.format(2500000));

Результат:

2,5 млн

long

Полная словесная форма:

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 км

Варианты отображения единиц

long

Полное название:

const formatter = new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "liter",
  unitDisplay: "long"
});

console.log(formatter.format(3));

Результат:

3 литра

short

Сокращённое название:

const formatter = new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "liter",
  unitDisplay: "short"
});

console.log(formatter.format(3));

Результат:

3 л

narrow

Максимально компактная запись:

const formatter = new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "liter",
  unitDisplay: "narrow"
});

console.log(formatter.format(3));

Результат:


Популярные единицы измерения

Длина

new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "meter"
});

Поддерживаемые единицы:

  • meter
  • kilometer
  • centimeter
  • millimeter
  • mile
  • yard
  • foot
  • inch

Масса

new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "kilogram"
});

Поддерживаются:

  • gram
  • kilogram
  • ounce
  • pound

Время

new Intl.NumberFormat("ru", {
  style: "unit",
  unit: "hour"
});

Поддерживаются:

  • second
  • minute
  • hour
  • day
  • week
  • month
  • year

Составные единицы

Можно формировать сложные сокращения через -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 и анализ настроек

Метод 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 API

Не все сокращения поддерживаются встроенно:

  • пользовательские аббревиатуры нельзя добавлять напрямую;
  • отсутствует механизм собственных словарей сокращений;
  • набор единиц измерения ограничен стандартом Unicode CLDR;
  • некоторые браузеры могут по-разному реализовывать редкие локали.

Совместимость

Большинство возможностей поддерживаются:

  • Chrome
  • Firefox
  • Safari
  • Edge
  • Node.js

Наиболее современные функции:

  • Intl.DisplayNames
  • Intl.RelativeTimeFormat
  • compact notation

могут отсутствовать в старых версиях браузеров.