Библиотека Globalize опирается на данные CLDR (Unicode Common Locale Data Repository), что позволяет корректно работать с локализованными форматами дат, чисел и единиц измерения. Японский календарь в контексте Globalize реализуется через механизм эр (era-based calendar), где ключевым элементом даты становится эпоха правления императора.
Японская система летоисчисления отличается от григорианской тем, что год определяется не только числовым значением, но и названием эры. Например:
Формат даты может включать одновременно название эры и год внутри неё, что требует поддержки соответствующих шаблонов форматирования.
Globalize не содержит локализационных данных по умолчанию. Работа с японским календарём невозможна без загрузки соответствующих пакетов CLDR.
Минимальный набор данных включает:
jaТиповая загрузка данных выглядит концептуально следующим образом:
Ключевым моментом является подключение именно календарных данных, содержащих информацию об эрах.
После загрузки CLDR-данных устанавливается локаль:
Globalize.locale("ja")Это определяет, что все операции форматирования и парсинга будут использовать японские правила, включая порядок компонентов даты и отображение эр.
Японский календарь в CLDR представлен через поле era.
Каждая дата содержит дополнительное измерение:
Globalize использует эти данные при форматировании дат, если задан соответствующий шаблон.
На уровне CLDR это выражается через паттерны типа:
G — сокращённое название эрыGGGG — полное название эрыy — год внутри эрыДля работы с датами используется dateFormatter.
Поддержка японского календаря активируется через специальные
skeleton-шаблоны.
Используется комбинация символов:
GyMMMGyMMMdGGGGy年M月d日Пример логики форматирования:
Globalize применяет skeleton-based форматирование, где вместо фиксированных строк используются абстрактные шаблоны.
const formatter = Globalize.dateFormatter({
skeleton: "GyMMMd"
});
Данный skeleton включает:
G — эраy — год в пределах эрыMMM — сокращённое название месяцаd — день месяцаРезультат зависит от конкретной даты и текущей эры.
При работе с датой внутри эры Reiwa:
const date = new Date(2024, 4, 1);
const formatter = Globalize.dateFormatter({ skeleton: "GyMMMd" });
formatter(date);
Логика преобразования:
Для более формализованного вывода используются расширенные шаблоны:
GGGGy年MM月dd日Такие форматы применяются в официальных документах и интерфейсах государственных систем.
Globalize поддерживает обратное преобразование строк в объекты Date
через dateParser.
Особенность японского календаря заключается в необходимости распознавания:
年)const parser = Globalize.dateParser({
skeleton: "GyMMMd"
});
Парсер интерпретирует строку с учётом текущей локали ja
и CLDR-правил.
В японском календаре одна и та же числовая дата может принадлежать разным системам летоисчисления в зависимости от эпохи.
Globalize решает эту задачу через CLDR mapping:
Японская локализация накладывает дополнительные требования:
年)На практике используются несколько групп skeleton:
yMd — числовой формат без эрыGyMd — с эрой, сокращённыйGyMMMd — расширенный форматGGGGyMMMMd — максимальная локализацияGGGGy年M月d日 — каноническая японская формаГод в японском календаре не является абсолютным значением. Внутри Globalize он вычисляется динамически:
Это позволяет поддерживать корректность даже для исторических дат.
Хотя японский календарь в первую очередь влияет на дату, Globalize сохраняет согласованность с временной частью:
jaGyMMMdHmДля дат до начала текущей эры система автоматически переключается на предыдущие эпохи.
Примеры поведения:
Globalize не требует ручного выбора эры, она выводится автоматически на основе CLDR.
Поддержка японского календаря в Globalize зависит от нескольких факторов:
cldr-dates-fullПри отсутствии данных об эрах форматирование может деградировать до григорианского календаря.
В интерфейсах, ориентированных на японскую локаль, календарь с эрами применяется в:
Globalize обеспечивает унифицированный способ генерации таких форматов без ручной обработки календарных правил.