Globalize опирается на модель работы, в которой прикладные функции форматирования и парсинга отделены от данных локализации. Утилиты библиотеки обеспечивают загрузку CLDR-данных, управление локалью, доступ к механизмам разрешения правил и единый контекст выполнения для форматирования чисел, дат, сообщений и единиц измерения.
Базовый механизм работы строится вокруг глобального и локального контекста. Утилиты позволяют задавать текущую локаль и управлять её изменением без пересоздания экземпляров форматтеров.
Globalize.locale("ru");
const locale = Globalize.locale();
Локаль влияет на все последующие операции форматирования и парсинга: числовые разделители, правила множественности, порядок элементов даты и словари сообщений.
Globalize не содержит локализационных данных по умолчанию. Утилиты загрузки отвечают за подключение CLDR JSON-файлов, без которых невозможны операции форматирования.
Основные категории данных:
Globalize.load(
require("cldr-data").entireSupplemental(),
require("cldr-data").entireMainFor("ru")
);
Загрузка выполняется один раз, после чего данные кэшируются внутри runtime.
После загрузки CLDR доступ к данным осуществляется через вспомогательные функции:
Globalize.cldr.attributes
Globalize.cldr.get("supplemental/likelySubtags")
Эти механизмы используются внутри библиотечных функций, но также позволяют строить собственные утилиты поверх CLDR.
Форматирование чисел реализуется через цепочку утилит:
const formatNumber = Globalize("ru").numberFormatter();
formatNumber(12345.67);
const parseNumber = Globalize("ru").numberParser();
parseNumber("12 345,67");
Парсинг учитывает локальные разделители и может работать с различными форматами представления чисел.
Функции даты строятся поверх CLDR календарей и локализованных паттернов.
const formatDate = Globalize("ru").dateFormatter({ datetime: "medium" });
formatDate(new Date());
const parseDate = Globalize("ru").dateParser({ datetime: "medium" });
parseDate("28.05.2026, 14:30");
Утилиты учитывают:
Система сообщений является отдельным слоем утилит, обеспечивающим интерполяцию строк и поддержку множественных форм.
const messageFormatter = Globalize("ru").messageFormatter(
"У пользователя {count} {count, plural, one {сообщение} few {сообщения} many {сообщений} other {сообщения}}"
);
messageFormatter({ count: 5 });
Утилиты сообщений включают:
Механизм plural rules является отдельным утилитарным компонентом, используемым в сообщениях и форматировании.
const plural = Globalize("ru").pluralGenerator();
plural(1);
plural(2);
plural(5);
Результатом является категория:
onefewmanyotherЭти категории определяются CLDR-правилами для каждой локали.
Модуль единиц измерения использует CLDR unit patterns и предоставляет функции форматирования.
const formatUnit = Globalize("ru").unitFormatter("kilometer");
formatUnit(10);
Поддерживаются категории:
Утилита автоматически выбирает правильную форму слова в зависимости от локали и числа.
Skeleton API служит утилитой декларативного описания формата без жесткой привязки к конкретному паттерну.
const formatNumber = Globalize("ru").numberFormatter({
skeleton: "currency"
});
Skeleton преобразуется в конкретный формат на основе CLDR данных.
Основные утилитарные преимущества:
Внутренние механизмы Globalize используют функции нормализации:
Пример логики:
ru-KZ → ru → root
Эта цепочка используется всеми форматтерами.
Создание форматтеров является дорогой операцией, поэтому используется кэширование.
const g = Globalize("ru");
const f1 = g.numberFormatter();
const f2 = g.numberFormatter();
Повторное создание с теми же параметрами возвращает переиспользуемый экземпляр.
Кэшируются:
Перед форматированием данные проходят нормализацию:
Пример поведения:
const formatNumber = Globalize("ru").numberFormatter();
formatNumber("12345"); // корректная обработка строки
Globalize использует утилиты выбора паттернов:
Пример:
Globalize("ru").dateFormatter({ date: "short" });
Globalize("ru").dateFormatter({ date: "long" });
При отсутствии данных CLDR применяются стратегии:
Это позволяет избежать ошибок форматирования при неполной загрузке данных.
Globalize предоставляет утилитарный слой для подключения внешних источников CLDR:
Пример структуры подключения:
import Globalize from "globalize";
import likelySubtags from "cldr-data/supplemental/likelySubtags.json";
import numbers from "cldr-data/main/ru/numbers.json";
Globalize.load(likelySubtags, numbers);
Внутренние механизмы позволяют анализировать поведение локализации:
Эти инструменты используются для контроля корректности локализационной конфигурации и выявления отсутствующих данных.