Японский календарь

Библиотека Globalize опирается на данные CLDR (Unicode Common Locale Data Repository), что позволяет корректно работать с локализованными форматами дат, чисел и единиц измерения. Японский календарь в контексте Globalize реализуется через механизм эр (era-based calendar), где ключевым элементом даты становится эпоха правления императора.

Японская система летоисчисления отличается от григорианской тем, что год определяется не только числовым значением, но и названием эры. Например:

  • Reiwa (令和) — текущая эра
  • Heisei (平成) — предыдущая
  • Showa (昭和) — более ранняя историческая эра

Формат даты может включать одновременно название эры и год внутри неё, что требует поддержки соответствующих шаблонов форматирования.


Подключение CLDR-данных для японской локали

Globalize не содержит локализационных данных по умолчанию. Работа с японским календарём невозможна без загрузки соответствующих пакетов CLDR.

Минимальный набор данных включает:

  • core CLDR data
  • numbers
  • time zone (при необходимости)
  • date fields
  • locales: ja

Типовая загрузка данных выглядит концептуально следующим образом:

  • загрузка базовых данных CLDR
  • загрузка числовых форматов
  • загрузка календарных данных для японского языка

Ключевым моментом является подключение именно календарных данных, содержащих информацию об эрах.


Инициализация локали японского языка

После загрузки CLDR-данных устанавливается локаль:

  • Globalize.locale("ja")

Это определяет, что все операции форматирования и парсинга будут использовать японские правила, включая порядок компонентов даты и отображение эр.


Механизм эр в CLDR и Globalize

Японский календарь в CLDR представлен через поле era. Каждая дата содержит дополнительное измерение:

  • идентификатор эры
  • локализованное имя эры
  • числовое значение года внутри эры

Globalize использует эти данные при форматировании дат, если задан соответствующий шаблон.

На уровне CLDR это выражается через паттерны типа:

  • G — сокращённое название эры
  • GGGG — полное название эры
  • y — год внутри эры

Форматирование дат в японском календаре

Для работы с датами используется dateFormatter. Поддержка японского календаря активируется через специальные skeleton-шаблоны.

Базовый формат с эрой

Используется комбинация символов:

  • GyMMM
  • GyMMMd
  • GGGGy年M月d日

Пример логики форматирования:

  • год отображается относительно эры
  • перед годом выводится название эры
  • месяц и день следуют локальным правилам японского формата

Использование skeleton-шаблонов

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);

Логика преобразования:

  • определяется соответствующая эра (Reiwa)
  • вычисляется год внутри эры
  • применяется локализованное имя месяца
  • собирается итоговая строка

Полные форматы с указанием эры

Для более формализованного вывода используются расширенные шаблоны:

  • GGGGy年MM月dd日

Такие форматы применяются в официальных документах и интерфейсах государственных систем.


Парсинг дат японского календаря

Globalize поддерживает обратное преобразование строк в объекты Date через dateParser.

Особенность японского календаря заключается в необходимости распознавания:

  • имени эры
  • года внутри эры
  • локальных разделителей (например, символ )

Пример парсера

const parser = Globalize.dateParser({
  skeleton: "GyMMMd"
});

Парсер интерпретирует строку с учётом текущей локали ja и CLDR-правил.


Работа с несколькими эрами

В японском календаре одна и та же числовая дата может принадлежать разным системам летоисчисления в зависимости от эпохи.

Globalize решает эту задачу через CLDR mapping:

  • каждая эра имеет диапазон дат
  • при форматировании выбирается активная эра
  • при парсинге учитывается принадлежность даты к диапазону

Особенности локализации японского календаря

Японская локализация накладывает дополнительные требования:

  • использование иероглифов для обозначения года ()
  • использование традиционного порядка даты: год → месяц → день
  • сокращённые и полные формы названия эр
  • строгая зависимость от CLDR-версии

Скелеты и вариации отображения дат

На практике используются несколько групп skeleton:

Базовые

  • yMd — числовой формат без эры
  • GyMd — с эрой, сокращённый
  • GyMMMd — расширенный формат

Полные

  • GGGGyMMMMd — максимальная локализация
  • GGGGy年M月d日 — каноническая японская форма

Взаимодействие с числовым форматом года

Год в японском календаре не является абсолютным значением. Внутри Globalize он вычисляется динамически:

  • берётся григорианская дата
  • определяется соответствующая эра
  • вычисляется offset от начала эры

Это позволяет поддерживать корректность даже для исторических дат.


Форматирование времени в связке с календарём

Хотя японский календарь в первую очередь влияет на дату, Globalize сохраняет согласованность с временной частью:

  • часы и минуты не зависят от эры
  • форматирование времени определяется локалью ja
  • дата и время объединяются в единый формат через skeleton GyMMMdHm

Работа с историческими датами

Для дат до начала текущей эры система автоматически переключается на предыдущие эпохи.

Примеры поведения:

  • дата 1980 года → Heisei
  • дата 1950 года → Showa

Globalize не требует ручного выбора эры, она выводится автоматически на основе CLDR.


Ограничения и зависимости реализации

Поддержка японского календаря в Globalize зависит от нескольких факторов:

  • полнота CLDR-данных
  • корректная версия пакетов cldr-dates-full
  • использование skeleton-based API
  • наличие данных об эрах в загруженном наборе

При отсутствии данных об эрах форматирование может деградировать до григорианского календаря.


Использование в прикладных интерфейсах

В интерфейсах, ориентированных на японскую локаль, календарь с эрами применяется в:

  • государственных системах
  • банковских документах
  • официальных формах
  • архивных данных

Globalize обеспечивает унифицированный способ генерации таких форматов без ручной обработки календарных правил.