В Globalize ключевым источником констант и перечислений выступают идентификаторы локалей, соответствующие стандарту BCP 47. Они формируют строго определённые строки вида:
enen-USruru-KZzh-Hansfr-CAКаждая локаль определяет набор правил форматирования чисел, дат, валют, единиц измерения и правил множественного числа. Внутри библиотеки локаль рассматривается как неизменяемая сущность, а выбор локали задаёт контекст всех последующих операций.
Важная особенность: локали не интерпретируются динамически. Для каждой используемой локали должны быть загружены данные CLDR (Unicode Common Locale Data Repository), иначе форматирование невозможно.
Globalize опирается на структурированные данные CLDR, которые содержат множество заранее определённых наборов значений:
Эти данные не являются произвольными — они представляют собой стандартизированные перечисления, одинаковые для всех приложений, использующих CLDR.
Форматирование чисел в Globalize строится на фиксированном наборе режимов, аналогичных ICU-подходу:
decimalpercentcurrencyКаждый стиль задаёт поведение форматирования:
decimal — обычное число с локализованными
разделителямиpercent — преобразование в проценты с
масштабированиемcurrency — форматирование с валютным символом или
кодомПример использования:
Globalize("ru").numberFormatter({ style: "decimal" })(12345.67);
Globalize("ru").numberFormatter({ style: "percent" })(0.25);
Globalize("ru").numberFormatter({ style: "currency", currency: "KZT" })(12345.67);
Значения style представляют собой строго ограниченное
перечисление, расширение которого невозможно без изменения спецификации
CLDR.
Валюты в Globalize задаются через ISO 4217 коды. Это не произвольные строки, а стандартизированное перечисление:
USDEURKZTJPYGBPКаждый код определяет:
Пример:
Globalize("ru").formatCurrency(1000, "KZT");
Валютный код является ключевым идентификатором, связывающим локализованные данные CLDR с конкретной денежной единицей.
Одним из наиболее строго формализованных перечислений являются категории plural rules:
zeroonetwofewmanyotherКаждая локаль содержит функцию выбора формы слова на основе числа.
Например, в русской локали активно используются one,
few, many, тогда как английская локаль
ограничивается one и other.
Пример получения категории:
Globalize("ru").plural(5); // "many"
Эти категории являются неизменяемым перечислением, определённым Unicode CLDR.
Globalize использует фиксированный набор стилей для дат и времени:
shortmediumlongfullКаждый стиль соответствует определённому уровню детализации:
short — минимальный формат (например, 28.05.26)medium — средний формат с текстовыми элементамиlong — расширенное представление с названием
месяцаfull — полное представление с днём неделиПример:
Globalize("ru").formatDate(new Date(), { date: "full" });
Globalize("ru").formatDate(new Date(), { time: "short" });
Эти значения являются строго фиксированными и не допускают произвольного расширения.
Помимо стандартных стилей, CLDR определяет skeletons — декларативные шаблоны форматирования. Они представляют собой наборы признаков:
y — годM — месяцd — деньH — 24-часовой форматh — 12-часовой форматm — минутыs — секундыSkeleton-строки выступают как формализованное перечисление компонентов даты:
Globalize("ru").dateFormatter({ skeleton: "yMd" })(new Date());
Globalize("ru").dateFormatter({ skeleton: "Hm" })(new Date());
Каждый символ в skeleton имеет фиксированное значение и не интерпретируется произвольно.
В CLDR определены различные системы записи чисел:
latn — латинская (0–9)arab — арабская-индийскаяthai — тайскаяdeva — деванагариGlobalize использует эти идентификаторы для переключения отображения чисел:
Globalize("ar").numberFormatter({ numberingSystem: "arab" })(12345);
Каждая система нумерации представляет собой закрытое множество символов, не подлежащее изменению на уровне приложения.
Форматирование единиц измерения основано на стандартизированных перечислениях:
length-meterlength-kilometermass-kilogramduration-secondduration-minuteКаждая единица имеет строго определённый идентификатор, используемый в API:
Globalize("ru").unitFormatter({ unit: "length-kilometer" })(5);
Дополнительно применяются стили отображения:
shortlongnarrowЭти значения задают формат вывода, например:
5 km5 kilometers5kmЧисловые операции используют набор фиксированных параметров, которые фактически выступают как перечисления:
roundfloorceiltruncateХотя в Globalize они не всегда представлены явно как отдельные enum-значения, поведение формируется через конфигурационные поля:
Globalize("ru").numberFormatter({
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
Дополнительно используются стандартные диапазоны значений, ограничивающие поведение форматирования.
CLDR определяет календарные компоненты, которые в Globalize используются как фиксированные идентификаторы:
gregory — григорианский календарьislamic — исламский календарьbuddhist — буддийский календарьКаждый календарь содержит собственные правила вычисления дат и представления времени.
Globalize("ru").formatDate(new Date(), { calendar: "gregory" });
Все перечисления Globalize можно классифицировать по источнику и области применения:
Каждая группа представляет собой строго ограниченное множество значений, определяемое внешним стандартом CLDR, а не внутренней логикой приложения.