Globalize строится вокруг модульного набора API, которые отражают основные задачи интернационализации: форматирование, парсинг, локализация сообщений и работа с культурными данными. В отличие от монолитных решений, библиотека разделяет функциональность на независимые блоки, каждый из которых опирается на данные CLDR (Unicode Common Locale Data Repository).
Базовая модель API ориентирована не на «готовые глобальные функции», а на явное создание экземпляра локали и последующее использование специализированных методов:
Каждый блок API проектировался так, чтобы быть предсказуемым, расширяемым и независимым от окружения.
Основной точкой входа является создание экземпляра Globalize с указанием локали:
const globalize = new Globalize("ru");
Этот объект становится контейнером для всех последующих операций. Внутри него не хранится логика форматирования — только привязка к данным CLDR и набору методов.
Важная особенность API: локаль не является «глобальной переменной состояния». Можно создавать несколько независимых экземпляров:
const ru = new Globalize("ru");
const en = new Globalize("en");
Это позволяет изолировать форматирование в многокультурных приложениях.
Модуль чисел является одним из ключевых в Globalize и включает несколько уровней API:
Метод formatNumber реализует локализованное
преобразование числа в строку:
globalize.formatNumber(1234567.89);
Результат зависит от локали:
ru: 1 234 567,89en: 1,234,567.89Под капотом используются данные CLDR:
API поддерживает паттерны:
globalize.formatNumber(1234.5, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
или через формат-строку:
globalize.formatNumber(1234.5, "0.000");
Форматирование выполняется на основе ICU-подобных правил, что обеспечивает переносимость между локалями.
Обратное преобразование выполняется через
parseNumber:
globalize.parseNumber("1 234,56");
API учитывает:
Работа с валютами расширяет числовой модуль и использует CLDR currency data.
globalize.formatCurrency(1000, "USD");
Результат:
en: $1,000.00ru: 1 000,00 $API автоматически применяет:
globalize.formatCurrency(99.9, "EUR", {
minimumFractionDigits: 0,
maximumFractionDigits: 0
});
Позволяет управлять отображением без вмешательства в локаль.
Модуль дат в Globalize опирается на CLDR calendar data и предоставляет несколько уровней форматирования.
globalize.formatDate(new Date());
По умолчанию используется локальный формат.
globalize.formatDate(new Date(), {
datetime: "medium"
});
Поддерживаемые уровни:
shortmediumlongfullКаждый уровень соответствует данным CLDR для конкретной локали.
globalize.formatTime(new Date());
Часто используется совместно с датами, но может применяться отдельно для UI-элементов.
globalize.parseDate("28.05.2026");
Парсинг зависит от локали и требует наличия соответствующих CLDR-данных календаря.
Модуль relative time используется для выражений типа «через 5 минут» или «2 дня назад».
globalize.formatRelativeTime(-5, "minute");
Результаты:
ru: «5 минут назад»en: «5 minutes ago»Поддерживаемые единицы:
API автоматически выбирает форму на основе правил множественного числа.
Модуль pluralization использует правила CLDR plural rules.
globalize.plural(5);
Возвращает категорию:
onefewmanyotherВ зависимости от локали набор категорий может отличаться.
Пример использования в логике приложения:
const category = globalize.plural(3);
Этот API часто используется как базовый слой для сообщений.
Система сообщений обеспечивает интерполяцию строк и выбор форм в зависимости от локали.
globalize.messageFormatter("greeting")();
Данные хранятся отдельно и загружаются через CLDR message bundles.
const greet = globalize.messageFormatter("welcome");
greet({ name: "Ivan" });
Шаблон:
"welcome": "Привет, {name}"
const msg = globalize.messageFormatter("items");
msg({ count: 3 });
Шаблон:
{
"items": {
"one": "{count} элемент",
"few": "{count} элемента",
"many": "{count} элементов",
"other": "{count} элемента"
}
}
API автоматически выбирает форму через plural rules.
Globalize не включает локализационные данные по умолчанию. Работа API зависит от явной загрузки CLDR.
Globalize.load(
require("cldr-data/main/ru/numbers"),
require("cldr-data/main/ru/ca-gregorian"),
require("cldr-data/supplemental/likelySubtags")
);
CLDR данные разделяются на:
API требует корректного набора данных для каждой используемой функции.
Globalize поддерживает предварительную компиляцию форматтеров для повышения производительности.
const numberFormatter = globalize.numberFormatter();
numberFormatter(12345);
const numberParser = globalize.numberParser();
numberParser("12 345");
Компилированные функции уменьшают накладные расходы при частом использовании.
Каждый экземпляр Globalize связан с конкретной локалью, но может использовать fallback-механизм:
ru-KZ → ru → rooten-GB → enAPI автоматически использует цепочку наследования CLDR данных.
Globalize предоставляет слой интеграции, позволяющий использовать собственные данные поверх CLDR:
Расширение не ломает базовую модель, а добавляет новые наборы данных в существующие API-вызовы.
Хотя сама библиотека работает синхронно, архитектура загрузки данных подразумевает асинхронный этап подготовки:
После этого все API вызовы становятся синхронными и предсказуемыми.
Каждый метод Globalize можно рассматривать как цепочку:
Например, форматирование числа:
formatNumber → CLDR numbers → locale rules → string output
Такой подход делает API детерминированным и независимым от окружения выполнения JavaScript.