Библиотека Globalize строится вокруг стандарта CLDR (Unicode Common Locale Data Repository), что делает её мощным инструментом для локализации чисел, дат, валют, сообщений и единиц измерения. В Node.js окружении ключевым отличием становится отсутствие встроенных браузерных API для международализации в полном объёме и необходимость явной загрузки локализационных данных.
В отличие от браузерного сценария, где часть данных может поставляться через сборку, в Node.js разработчик полностью контролирует загрузку CLDR и модулей Globalize.
Библиотека разделена на несколько слоёв:
Node.js не предоставляет CLDR, поэтому данные подключаются вручную:
cldr-dataglobalizecldrjs (иногда используется косвенно через
зависимости)Для Node.js проекта требуется установка базовых пакетов:
npm install globalize cldr-data
Дополнительно может потребоваться загрузка отдельных пакетов CLDR, если используется кастомная сборка:
npm install cldr-data-number cldr-data-numbers-full
В большинстве случаев используется пакет cldr-data,
содержащий готовую структуру каталогов.
Globalize не работает без предварительной загрузки данных CLDR. Процесс включает несколько этапов: загрузка JSON, подключение к Globalize, определение локали.
const Globalize = require("globalize");
const cldrData = require("cldr-data");
// Загрузка базовых данных
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("ru")
);
Ключевой момент — разделение данных:
ru,
en, de)После загрузки данных необходимо зафиксировать локаль:
const globalize = new Globalize("ru");
Экземпляр Globalize теперь работает в контексте русской локали.
Node.js часто используется в backend-сервисах, где требуется унифицированное отображение чисел для API или логов.
const formatNumber = globalize.numberFormatter();
console.log(formatNumber(1234567.89));
// 1 234 567,89
Для процентов:
const formatPercent = globalize.numberFormatter({ style: "percent" });
console.log(formatPercent(0.25));
// 25%
Для компактного представления:
const formatCompact = globalize.numberFormatter({
notation: "compact"
});
console.log(formatCompact(1500000));
// 1 млн
Globalize поддерживает обратную операцию — разбор строки в число:
const parseNumber = globalize.numberParser();
console.log(parseNumber("1 234 567,89"));
// 1234567.89
Парсинг зависит от локали и учитывает:
Форматирование денежных значений требует загрузки дополнительного CLDR-модуля валют.
const formatCurrency = globalize.currencyFormatter("KZT");
console.log(formatCurrency(12345.67));
// 12 345,67 ₸
В Node.js важно учитывать, что валютные символы и правила округления берутся из CLDR.
Для дат требуется загрузка календарных данных:
const formatDate = globalize.dateFormatter({
datetime: "medium"
});
console.log(formatDate(new Date()));
Пример вывода зависит от локали:
const parseDate = globalize.dateParser({ skeleton: "yMd" });
console.log(parseDate("28.05.2026"));
Парсинг дат в Node.js особенно полезен при обработке пользовательского ввода в API.
Globalize поддерживает ICU MessageFormat, что позволяет создавать локализованные строки с условиями и множественными формами.
Globalize.loadMessages({
ru: {
items: "У вас {count, plural, one {# элемент} few {# элемента} many {# элементов} other {# элемента}}"
}
});
const messageFormatter = globalize.messageFormatter("items");
console.log(messageFormatter({ count: 5 }));
// У вас 5 элементов
Node.js серверы часто используют это для генерации текстов API-ответов.
CLDR содержит данные для форматирования единиц:
const formatUnit = globalize.unitFormatter("kilometer-per-hour");
console.log(formatUnit(90));
// 90 км/ч
Поддерживаются:
Производительность напрямую зависит от способа загрузки данных:
Пример оптимизированного подхода:
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("ru"),
cldrData.entireMainFor("en")
);
При необходимости масштабирования рекомендуется ограничивать набор локалей.
В Node.js проектах Globalize часто интегрируется в сервисный слой:
class LocalizationService {
constructor(locale) {
this.globalize = new Globalize(locale);
}
formatPrice(value) {
const formatter = this.globalize.currencyFormatter("KZT");
return formatter(value);
}
formatDate(date) {
const formatter = this.globalize.dateFormatter({ datetime: "short" });
return formatter(date);
}
}
Такой подход позволяет:
В API-слоях Node.js Globalize используется для подготовки ответов:
app.get("/invoice", (req, res) => {
const g = new Globalize(req.headers["accept-language"] || "ru");
const format = g.currencyFormatter("KZT");
res.json({
total: format(25000)
});
});
Globalize.load() перед использованиемmain без supplementalconst g = new Globalize("ru");
const formatNumber = g.numberFormatter();
const formatDate = g.dateFormatter();
При использовании worker_threads или cluster:
Globalize корректно работает с современными версиями Node.js, однако:
Это делает библиотеку более предсказуемой в кросс-платформенных системах, где важно единообразие вывода независимо от окружения.