Библиотека Globalize опирается на модель конфигурации, в которой поведение форматирования и парсинга данных определяется сочетанием локали, загруженных CLDR-данных и параметров, передаваемых в фабричные методы форматтеров. Архитектура построена таким образом, что большая часть настроек не является глобальными флагами в привычном смысле, а задаётся либо через контекст локали, либо через аргументы конкретного форматтера.
Основным конфигурационным параметром выступает локаль. Она определяет правила отображения чисел, дат, валют, а также языковые особенности сообщений.
import Globalize from "globalize";
const en = new Globalize("en");
const ru = new Globalize("ru");
Каждый экземпляр Globalize связан с конкретной локалью. Это означает, что конфигурация не изменяет глобальное состояние библиотеки, а создаёт контекст выполнения.
Дополнительно локаль может быть задана глобально:
Globalize.locale("ru");
В таком режиме последующие вызовы, не привязанные к конкретному экземпляру, используют указанную локаль. Однако при наличии нескольких локалей предпочтительнее использовать экземплярный подход, так как он исключает побочные эффекты.
Globalize не содержит локализационных данных внутри себя. Все правила берутся из CLDR (Unicode Common Locale Data Repository). Поэтому ключевой частью конфигурации является явная загрузка необходимых наборов данных.
Минимальный набор включает:
import likelySubtags from "cldr-data/supplemental/likelySubtags.json";
import numbers from "cldr-data/main/ru/numbers.json";
import currencies from "cldr-data/main/ru/currencies.json";
Globalize.load(likelySubtags);
Globalize.load(numbers);
Globalize.load(currencies);
Без предварительной загрузки CLDR библиотека не сможет корректно форматировать данные, даже если локаль указана верно.
Особенность конфигурации заключается в том, что загрузка данных отделена от их использования. Это позволяет:
Числовое форматирование в Globalize настраивается через фабрику
numberFormatter. Параметры передаются при создании
форматтера и определяют поведение вывода.
const formatter = ru.numberFormatter({
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
Ключевые параметры:
Пример влияния параметров:
formatter(12345.6); // "12 345,60" для ru
Важная особенность: разделители и формат отображения не задаются вручную, а берутся из CLDR, что исключает необходимость ручной локализационной логики.
Форматирование валют основано на отдельном наборе параметров, расширяющих числовую конфигурацию.
const formatCurrency = ru.currencyFormatter("RUB", {
minimumFractionDigits: 2,
style: "code"
});
Основные параметры:
currency — код валюты ISO (USD, EUR, RUB)
style:
symbol — символ валютыcode — текстовый кодname — полное названиеminimumFractionDigits / maximumFractionDigits
round
Пример поведения:
formatCurrency(1500); // "1 500,00 RUB"
Конфигурация валюты автоматически учитывает локаль: положение символа, пробелы, разделители и порядок компонентов не задаются вручную.
Форматирование дат в Globalize зависит от пресетов и пользовательских опций.
const dateFormatter = ru.dateFormatter({
skeleton: "yMMMMd"
});
Основные способы конфигурации:
Пример:
const f = ru.dateFormatter({ date: "long" });
f(new Date());
Преимущество skeleton-конфигурации заключается в том, что она адаптируется под локаль автоматически, не фиксируя жёсткий формат.
Парсинг — обратная операция форматированию — также настраивается через опции фабрик.
const numberParser = ru.numberParser({
strict: true
});
Основные параметры:
Пример:
numberParser("12 345,67"); // 12345.67
В строгом режиме ввод, не соответствующий локали, будет отклонён.
Если для указанной локали отсутствуют данные CLDR, Globalize использует fallback-цепочку. Это поведение не всегда явно конфигурируется пользователем, но определяется структурой загруженных данных.
Пример сценария:
ruru-CyrlruЭто позволяет минимизировать дублирование данных при поддержке региональных вариантов языка.
Globalize поддерживает сообщения с параметризацией, где конфигурация определяется шаблонами и загруженными строками.
Globalize.loadMessages({
ru: {
greeting: "Привет, {name}"
}
});
Использование:
const msg = ru.messageFormatter("greeting");
msg({ name: "Иван" });
Параметры конфигурации здесь косвенные:
Инициализация Globalize требует последовательного подключения компонентов CLDR. Порядок загрузки является частью конфигурационной модели.
Типичный порядок:
Ошибка порядка приводит к невозможности построения форматтеров.
Каждый форматтер, созданный через фабрики, кэшируется внутри экземпляра локали. Это влияет на конфигурационную модель:
const f1 = ru.numberFormatter({ minimumFractionDigits: 2 });
const f2 = ru.numberFormatter({ minimumFractionDigits: 2 });
f1 === f2; // true (в большинстве реализаций)
Некоторые параметры не задаются напрямую, но влияют через CLDR:
Эти параметры не передаются вручную, но могут быть активированы через выбор локали или расширенные CLDR-наборы.
Конфигурация Globalize строится как комбинация трёх уровней:
Такой подход исключает необходимость глобальных флагов и позволяет изолировать разные сценарии форматирования в рамках одного приложения без конфликтов состояний.