В библиотеке Globalize форматирование чисел, дат и единиц измерения строится на данных CLDR (Unicode Common Locale Data Repository). Поверх этих данных реализован слой абстракций, который позволяет использовать готовые шаблоны форматирования, называемые предопределёнными стилями. Эти стили обеспечивают единообразное представление данных в зависимости от локали без необходимости вручную конструировать шаблоны.
Предопределённые стили представляют собой именованные конфигурации форматирования, которые соответствуют стандартам интернационализации. Вместо описания формата вручную используются идентификаторы, например:
shortmediumlongfulldecimalcurrencypercentscientificshort, long (в контексте единиц
измерения)Каждый стиль связан с конкретной записью в CLDR, которая различается для каждой локали.
Ключевой принцип: один и тот же стиль может давать разные результаты в разных языках и регионах.
Форматирование даты и времени в Globalize основано на четырёх базовых стилях, соответствующих CLDR datetime skeletons.
Минимально подробное представление даты и времени.
const Globalize = require("globalize");
const dateFormatter = Globalize("ru").dateFormatter({ datetime: "short" });
dateFormatter(new Date());
Характерные особенности:
Примеры:
27.05.26, 14:30Баланс между краткостью и читаемостью.
Globalize("ru").dateFormatter({ datetime: "medium" });
Особенности:
shortПример:
27 мая 2026 г., 14:30:00Полностью текстовое представление даты с расширенной информацией.
Globalize("ru").dateFormatter({ datetime: "long" });
Особенности:
Пример:
27 мая 2026 года в 14:30:00 UTC+6Максимально подробный формат.
Globalize("ru").dateFormatter({ datetime: "full" });
Особенности:
Пример:
среда, 27 мая 2026 года в 14:30:00 по времени UTC+6Форматирование чисел в Globalize делится на несколько категорий: десятичные числа, проценты, валюты и специализированные представления.
Базовое форматирование чисел без дополнительных символов.
const numberFormatter = Globalize("ru").numberFormatter({ style: "decimal" });
numberFormatter(1234567.89);
Характеристики:
Пример:
1 234 567,89Форматирование числа как процента с автоматическим масштабированием.
Globalize("ru").numberFormatter({ style: "percent" })(0.25);
Особенности:
%Пример:
25 %Форматирование с учётом локальных правил отображения валют.
Globalize("ru").numberFormatter({
style: "currency",
currency: "KZT"
})(1234.56);
Особенности:
Пример:
1 234,56 ₸Представление чисел в экспоненциальной форме.
Globalize("ru").numberFormatter({ style: "scientific" })(12345);
Пример:
1,2345E4Используется в научных и технических вычислениях, где важен порядок величины.
Компактные стили используются для сокращённого отображения больших чисел.
Globalize("ru").numberFormatter({
style: "decimal",
notation: "compact"
})(1200000);
Особенности:
Примеры:
1,2 млн1,2 млрдКомпактные стили зависят от локали сильнее, чем базовые числовые форматы.
Форматирование физических величин использует стили short
и long.
Globalize("ru").unitFormatter({
unit: "kilometer-per-hour",
style: "short"
})(120);
Компактное обозначение единицы.
Пример:
120 км/чПолное текстовое представление.
Globalize("ru").unitFormatter({
unit: "kilometer-per-hour",
style: "long"
})(120);
Пример:
120 километров в часКаждый предопределённый стиль напрямую связан с набором данных CLDR:
Globalize не содержит жёстко заданных форматов. Все стили извлекаются из локализованных ресурсов, что обеспечивает согласованность с международными стандартами.
Использование стилей происходит через фабрики форматтеров:
Globalize(locale).dateFormatter({ datetime: "short" });
Globalize(locale).numberFormatter({ style: "currency", currency: "USD" });
Globalize(locale).unitFormatter({ unit: "liter", style: "long" });
Общий принцип:
Одинаковый стиль может давать разные результаты:
| Локаль | short date |
|---|---|
| ru | 27.05.26 |
| en | 5/27/26 |
| de | 27.05.26 |
| Локаль | currency (USD 100) |
|---|---|
| en | $100.00 |
| ru | 100,00 $ |
Причина различий:
short — таблицы, интерфейсы, спискиmedium — документы, формыlong — отчёты, письмаfull — юридические и официальные текстыdecimal — общие вычисления и отображение значенийpercent — статистика, прогрессcurrency — финансовые данныеscientific — инженерные и научные расчётыcompact — интерфейсы с ограниченным пространствомshort — интерфейсы и панелиlong — текстовые описания и отчётыФорматтеры в Globalize являются дорогостоящими объектами при создании, поэтому используется подход повторного использования:
Пример:
const formatCurrency = Globalize("ru").numberFormatter({
style: "currency",
currency: "KZT"
});
formatCurrency(1000);
formatCurrency(2500);
Предопределённые стили требуют полного набора CLDR данных:
Отсутствие данных приводит к деградации форматирования или ошибкам инициализации.
Стиль не является универсальным алгоритмом, а представляет собой ссылку на локализованное описание формата, определённое в CLDR.