Буддийский календарь

Буддийский календарь представляет собой календарную систему, используемую в ряде стран Юго-Восточной Азии, прежде всего в Таиланде, Лаосе, Камбодже и Мьянме. В программной локализации он рассматривается как отдельный календарный режим поверх григорианской системы с фиксированным сдвигом летоисчисления.

В JavaScript-экосистеме работа с таким календарём реализуется через стандарты Unicode CLDR (Common Locale Data Repository) и библиотеку Globalize, которая опирается на эти данные для форматирования дат, чисел и единиц измерения в соответствии с культурными нормами.


Архитектура поддержки календарей в Globalize

Globalize не реализует календарные алгоритмы самостоятельно. Он выступает как слой доступа к данным CLDR, где описаны:

  • локали;
  • правила форматирования дат и времени;
  • системы летоисчисления;
  • преобразования календарей;
  • локализованные названия месяцев и дней недели.

Библиотека опирается на ICU-совместимую модель, где календарь является частью контекста локали.

Ключевой момент: календарь не выбирается напрямую в Globalize как отдельный объект, он задаётся через модификатор локали.


CLDR и буддийская календарная система

В CLDR буддийский календарь реализован как вариант григорианского календаря с фиксированным сдвигом:

  • Эра отсчёта основана на предполагаемой дате паринирваны Будды;
  • Разница с григорианским летоисчислением составляет +543 года;
  • Все вычисления дат сохраняют структуру григорианского календаря (месяцы, дни недели не меняются).

Таким образом:

BE (Buddhist Era) = CE (Common Era) + 543

Пример:

  • 2026 год (григорианский) → 2569 год (буддийский)

Локали и активация буддийского календаря

В Globalize буддийский календарь активируется через расширенную локаль ICU:

th-TH-u-ca-buddhist

Разбор:

  • th — язык (тайский);
  • TH — регион (Таиланд);
  • u-ca-buddhist — Unicode extension, указывающая календарную систему.

Эта запись не меняет язык интерфейса, но влияет на:

  • форматирование дат;
  • отображение года;
  • интерпретацию календарных значений.

Загрузка данных CLDR для работы с календарём

Globalize требует предварительной загрузки CLDR-данных. Для поддержки буддийского календаря необходимы:

  • базовые данные локали (например, th);
  • календарные данные (ca-buddhist);
  • числа и форматирование дат.

Пример структуры подключения:

  • cldr-core (общие данные)
  • cldr-dates-full (форматы дат)
  • cldr-cal-buddhist (если используется расширенный набор данных)

Без этих данных библиотека не сможет корректно интерпретировать календарную систему.


Форматирование дат в буддийском календаре

После инициализации Globalize с соответствующей локалью, форматирование даты учитывает сдвиг эры.

Принцип работы:

  1. Входная дата остаётся в стандартном формате JavaScript Date;
  2. Globalize применяет CLDR-правила локали;
  3. Год преобразуется в буддийскую систему;
  4. Форматируется строка вывода.

Пример логики:

  • Вход: 2026-05-27
  • Локаль: th-TH-u-ca-buddhist
  • Выходной год: 2569

Календарные форматы и шаблоны

CLDR определяет несколько уровней представления дат:

  • short — краткий формат;
  • medium — стандартный формат;
  • long — расширенный формат;
  • full — полный формат с днём недели.

В буддийском календаре отличие проявляется прежде всего в числовом представлении года.

Пример различий:

  • Григорианский: 27/05/2026
  • Буддийский: 27/05/2569

Форматирование зависит не от логики приложения, а от шаблонов CLDR.


Механизм преобразования года

Внутри CLDR используется правило смещения:

year_buddhist = year_gregorian + 543

Однако важно учитывать, что:

  • смещение применяется только на уровне отображения;
  • внутренние вычисления дат остаются григорианскими;
  • переходы между локалями не изменяют сам объект Date.

Это позволяет избежать проблем с:

  • сортировкой дат;
  • временными зонами;
  • вычислениями интервалов.

Работа с локалями в Globalize

Globalize не хранит состояние календаря глобально. Каждая операция форматирования выполняется в контексте выбранной локали.

Типичный сценарий:

  1. Создание экземпляра Globalize с локалью;
  2. Загрузка CLDR-данных;
  3. Форматирование даты с учётом календаря.

Особенность:

  • смена локали = смена календарной интерпретации;
  • один и тот же объект Date может отображаться по-разному.

Интернационализация и совместимость

Буддийский календарь в Globalize совместим с:

  • ECMAScript Internationalization API (Intl);
  • ICU MessageFormat;
  • CLDR стандартами Unicode.

Во многих средах Globalize используется как полифил или расширение для Intl, особенно когда требуется:

  • детальный контроль над форматами;
  • поддержка нестандартных локалей;
  • единообразие поведения между окружениями.

Особенности отображения в интерфейсах

При использовании буддийского календаря важно учитывать:

  • пользователь ожидает локализованный год, а не технический;
  • сортировка и сравнение дат должны использовать исходные значения;
  • отображение даты должно быть отделено от бизнес-логики.

Globalize обеспечивает разделение этих слоёв:

  • дата как объект;
  • формат как локализационный слой;
  • календарь как правило отображения.

Ограничения модели

Поддержка буддийского календаря в Globalize и CLDR имеет ряд ограничений:

  • отсутствует изменение структуры месяцев и дней;
  • нет поддержки исторических вариаций буддийских систем;
  • используется фиксированное смещение без астрономических поправок;
  • календарь не влияет на вычисление временных интервалов.

Это делает модель предсказуемой, но упрощённой.


Практическая роль в локализации

Буддийский календарь в Globalize применяется в задачах:

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

Основная цель — соответствие культурной норме отображения времени без изменения внутренней логики приложения.