Библиотека Globalize опирается на стандартизированную систему локалей, построенную вокруг CLDR (Common Locale Data Repository). Локаль представляет собой идентификатор, который описывает язык и регион в формате BCP 47, например:
en — английский язык без привязки к регионуen-US — английский (США)en-GB — английский (Великобритания)ru — русский языкru-RU — русский (Россия)fr-CA — французский (Канада)Региональная часть локали (после дефиса) влияет на десятки аспектов форматирования: числа, даты, валюты, правила округления, отображение текста и даже структуру сообщений.
Globalize не «угадывает» региональные правила — он строго использует данные CLDR, что делает поведение предсказуемым и расширяемым.
Структура локали в Globalize имеет важное значение:
Пример различий:
en-US: $1,234.56en-GB: £1,234.56de-DE: 1.234,56 €Даже при одинаковом языке (например, английском) регион полностью меняет формат чисел и валют.
Globalize использует CLDR-данные для определения:
Пример:
Globalize.load(cldrData);
const enUS = new Globalize("en-US");
const deDE = new Globalize("de-DE");
enUS.numberFormatter()(1234567.89); // "1,234,567.89"
deDE.numberFormatter()(1234567.89); // "1.234.567,89"
Различия не ограничиваются символами:
Форматирование валют в Globalize полностью зависит от локали:
const us = new Globalize("en-US");
const jp = new Globalize("ja-JP");
us.currencyFormatter("USD")(1000);
// "$1,000.00"
jp.currencyFormatter("JPY")(1000);
// "¥1,000"
CLDR содержит отдельные наборы правил для каждого региона. Globalize использует их для построения форматтеров:
const us = new Globalize("en-US");
const fr = new Globalize("fr-FR");
us.dateFormatter({ datetime: "short" })(new Date());
// "5/27/26, 3:45 PM"
fr.dateFormatter({ datetime: "short" })(new Date());
// "27/05/2026 15:45"
Региональные различия затрагивают и грамматику числительных.
Globalize использует plural rules из CLDR:
const ru = new Globalize("ru-RU");
const plural = ru.pluralGenerator();
plural(1); // "one"
plural(2); // "few"
plural(5); // "many"
Даже внутри одного языка правила могут меняться:
pt-PT и pt-BR имеют различия в
грамматикеar-EG и ar-SA различаются в некоторых
числовых формахGlobalize поддерживает форматирование сообщений с учетом локали:
const en = new Globalize("en-US");
en.messageFormatter({
one: "{count} item",
other: "{count} items"
});
formatter({ count: 1 }); // "1 item"
formatter({ count: 5 }); // "5 items"
Регион может влиять на:
Globalize использует механизм fallback:
en-USenЕсли региональные данные отсутствуют, библиотека постепенно понижает уровень детализации.
Пример:
fr-CAfrЭто позволяет минимизировать разрыв при неполной локализации.
Даже при одинаковом языке регион может полностью менять поведение системы.
en-US: MM/DD/YYYY, $1,234.56en-GB: DD/MM/YYYY, £1,234.56en-IN: 1,23,456.78 (индийская группировка)fr-FR: 1 234,56 €fr-CA: 1 234,56 $ CA (другой символ валюты и
порядок)BCP 47 допускает расширения:
en-US-u-ca-gregory — календарь Григорианскийar-EG-u-nu-arab — арабская система чиселth-TH-u-nu-thai — тайские цифрыGlobalize может учитывать такие расширения при наличии CLDR-данных.
При обработке локалей важно учитывать:
Globalize нормализует локаль перед использованием, но корректность данных критична при загрузке CLDR.
Все региональные правила в Globalize происходят из CLDR:
Отсутствие нужных CLDR-данных напрямую ограничивает региональные возможности библиотеки.
Выбор локали влияет не только на внешний вид данных, но и на:
Неверный регион может привести к: