В основе календарной поддержки Globalize лежит модель данных CLDR (Unicode Common Locale Data Repository). Календарные системы в этой модели рассматриваются как набор правил:
Globalize не реализует календарные алгоритмы самостоятельно. Он выступает как слой форматирования и парсинга, полностью опирающийся на структурированные данные CLDR.
Ключевая особенность подхода заключается в разделении:
Globalize работает исключительно с представлением.
На практике основой большинства локалей является григорианский календарь. Он используется как стандартный календарь в большинстве языков и регионов.
CLDR описывает его через:
Globalize использует эти данные при форматировании:
const Globalize = require("globalize");
const en = new Globalize("en");
const formatter = en.dateFormatter({ date: "medium" });
formatter(new Date(2026, 0, 24));
Результат зависит от локали, но структура формата определяется CLDR.
CLDR определяет четыре базовых уровня форматирования:
Globalize использует эти уровни как стандартные шаблоны:
const formatterShort = en.dateFormatter({ date: "short" });
const formatterFull = en.dateFormatter({ date: "full" });
Разница между уровнями заключается не только в длине строки, но и в семантической насыщенности. Например, в некоторых локалях full-формат может включать день недели.
CLDR поддерживает несколько систем летоисчисления, где ключевым элементом выступает эра. Это особенно важно для языков и регионов, использующих альтернативные календарные системы:
Каждая система описывает:
Пример концептуального представления:
const ja = new Globalize("ja-JP");
const formatter = ja.dateFormatter({
date: "long",
calendar: "japanese"
});
В японской системе дата может включать название эры вместо привычного года:
Эта трансформация полностью определяется данными CLDR.
CLDR поддерживает несколько календарей параллельно. Основные из них:
Каждый календарь имеет собственные правила вычисления года и структуры месяцев.
Globalize получает эти данные через CLDR и использует их при форматировании дат, если календарь указан или если локаль подразумевает альтернативную систему.
Выбор календарной системы определяется комбинацией факторов:
В некоторых локалях календарь неявно отличается от григорианского. Например:
Globalize не вычисляет предпочтения, а следует данным локали.
CLDR описывает календарь через несколько ключевых блоков:
Эти данные представлены в виде JSON-структур и загружаются в Globalize перед использованием.
Форматирование даты в Globalize происходит через фабрику форматтеров:
const formatter = en.dateFormatter({
date: "long"
});
formatter(new Date());
Внутренне происходит:
Помимо форматирования, Globalize поддерживает обратную операцию — парсинг строк в даты.
Парсинг зависит от календарной системы:
const parser = en.dateParser({ date: "short" });
parser("01/24/26");
При этом корректность интерпретации зависит от совпадения формата строки и локали.
CLDR включает данные для относительных временных выражений:
Globalize использует эти данные для генерации локализованных строк:
const relative = en.relativeTimeFormatter("day");
relative(-1); // yesterday
relative(1); // tomorrow
Хотя это не календарная система в строгом смысле, логически она является частью календарного представления времени.
Японский календарь представляет особый случай, так как объединяет григорианскую систему с эрой императора.
Особенности:
CLDR хранит таблицу переходов между эрами, что позволяет корректно отображать даты.
Globalize применяет эти данные при форматировании, не изменяя исходный timestamp.
Некоторые системы, такие как китайский календарь, используют комбинацию солнечного и лунного циклов.
CLDR описывает:
Globalize не выполняет вычисление этих циклов, а использует предрасчитанные соответствия CLDR для отображения.
Календарная система влияет на:
Даже при одинаковом timestamp разные локали могут давать принципиально разные визуальные представления.
При работе с Globalize и CLDR календарь может определяться через параметры форматирования:
date: "short" | "medium" | "long" | "full"time: "short" | "medium" | "long" | "full"calendar: "gregory" | "japanese" | "buddhist" | "islamic" | "hebrew"Эти параметры влияют только на слой представления, не затрагивая внутренний формат хранения даты.
Календарная модель Globalize имеет ограничения:
Эта архитектура обеспечивает предсказуемость, но требует точной подготовки данных CLDR перед использованием.