CLDR (Common Locale Data Repository) представляет собой структурированное хранилище локализационных данных, на основе которого строится работа Globalize. Данные CLDR разбиты на категории, каждая из которых описывает отдельный аспект локализации: числа, валюты, даты, единицы измерения, правила множественных форм и множество вспомогательных метаданных, необходимых для корректного форматирования информации в зависимости от локали.
Категория чисел в CLDR охватывает весь спектр правил отображения числовых значений в разных локалях.
Пример логики использования в Globalize:
Globalize.formatNumber(12345.67);
// "12 345,67" для ru-RU
CLDR определяет набор символов, зависящих от локали:
Эти значения напрямую влияют на визуальное представление чисел и не вычисляются, а извлекаются из данных CLDR.
CLDR поддерживает альтернативные системы записи чисел:
Globalize может переключать систему отображения без изменения числового значения.
CLDR содержит правила выбора формы слова в зависимости от числа. Это одна из ключевых частей локализации.
Каждая локаль определяет категории:
Пример логики:
CLDR задаёт не слова, а правила выбора категории:
Globalize.plural(1); // "one"
Globalize.plural(2); // "other" (для en)
Эти правила описываются через выражения на основе диапазонов и остатков деления, а не фиксированные таблицы.
Категория валют в CLDR включает:
CLDR задаёт несколько шаблонов:
Пример:
Globalize.formatCurrency(1234.5, "RUB");
// "1 234,50 ₽"
Некоторые локали используют:
Одна из самых сложных категорий CLDR. Она включает несколько подуровней.
CLDR поддерживает различные календарные системы:
Globalize опирается на CLDR для выбора календаря и форматов отображения.
CLDR задаёт шаблоны:
Каждый шаблон состоит из компонентов:
Пример:
Globalize.formatDate(new Date(), { datetime: "short" });
Категория relativeTime включает выражения:
CLDR хранит формы для каждого интервала и направления (future/past).
CLDR содержит правила для отображения физических величин:
Каждая единица имеет:
Пример:
Globalize.formatUnit(5, "kilometer");
// "5 kilometers"
CLDR определяет не только название единицы, но и правила согласования с числами.
CLDR определяет правила соединения элементов списка:
Категории:
Каждый тип списка имеет:
Эти правила позволяют корректно строить перечисления без ручной конкатенации строк.
CLDR включает локализованные названия:
Эти данные используются для:
Supplemental категория CLDR содержит вспомогательную информацию, которая не относится к конкретной локали напрямую.
Механизм расширения неполных локалей:
Используется для нормализации входных данных.
CLDR объединяет часовые пояса в логические группы:
Это упрощает отображение временных зон пользователю.
Globalize не реализует локализацию самостоятельно, а выступает слоем над CLDR JSON.
Архитектура взаимодействия:
Категории CLDR загружаются выборочно:
Пример загрузки:
Globalize.load(
require("cldr-data/supplemental/likelySubtags"),
require("cldr-data/main/ru/numbers"),
require("cldr-data/main/ru/currencies"),
require("cldr-data/main/ru/dates"),
require("cldr-data/main/ru/units")
);
const ru = new Globalize("ru");
Каждая категория CLDR решает строго определённый класс задач:
Такое разделение позволяет Globalize оставаться независимым от конкретных языков и регионов, используя унифицированную модель данных CLDR.