Автоматическое обновление CLDR

Система локализации в Globalize основана на стандартизированном наборе языковых и региональных данных CLDR (Common Locale Data Repository), поддерживаемом Unicode Consortium. CLDR содержит структурированные наборы правил форматирования дат, чисел, валют, списков, единиц измерения, а также локализованные шаблоны для множества языков.

Ключевая особенность работы с CLDR в JavaScript-приложениях заключается в том, что эти данные не являются частью рантайма по умолчанию. Они подключаются и обновляются отдельно, что создаёт необходимость управляемого механизма синхронизации версий и автоматического обновления.


Понятие автоматического обновления CLDR

Автоматическое обновление CLDR — это процесс синхронизации локальных данных приложения с актуальной версией CLDR, включающий:

  • загрузку новых JSON-файлов CLDR;
  • преобразование структуры данных под формат Globalize;
  • пересборку локализационного слоя;
  • обновление зависимостей без ручного вмешательства в код форматирования.

Главная цель такого механизма — устранить рассинхронизацию между версией библиотек форматирования и актуальной лингвистической базой.


Источники CLDR-данных и их структура

CLDR распространяется в виде набора JSON-файлов, разделённых по категориям:

  • numbers — правила форматирования чисел и валют;
  • dates — календари, временные форматы, интервалы;
  • units — единицы измерения и их локализация;
  • plurals — правила множественных форм;
  • lists — форматирование перечислений;
  • delimiters — кавычки, разделители и типографика.

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


Причины необходимости автоматического обновления

CLDR обновляется регулярно, и каждая новая версия может включать:

  • корректировки языковых правил;
  • изменения форматов дат (например, праздники и локальные стандарты);
  • обновления валютных обозначений;
  • добавление новых языков и регионов;
  • исправления ошибок локализации.

Без автоматического обновления возникает риск:

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

Модель обновления CLDR в современных сборках

В приложениях, использующих Globalize, применяется несколько стратегий обновления CLDR.

1. Обновление через npm-зависимости

Наиболее распространённый подход основан на пакетах:

  • cldr-data
  • cldr-data-downloader

Процесс включает:

  • обновление версии пакета cldr-data;
  • пересборку бандла приложения;
  • повторную инициализацию Globalize.

Этот метод интегрируется в CI/CD и обеспечивает предсказуемость версий.


2. Динамическая загрузка CLDR во время сборки

В некоторых архитектурах CLDR не хранится в репозитории, а скачивается на этапе сборки:

  • CI-пайплайн обращается к источнику CLDR;
  • выбирается конкретная версия (например, 44.0, 45.0 и т.д.);
  • данные нормализуются и сериализуются;
  • результат включается в финальный бандл.

Преимущество подхода — контроль версий без ручного обновления зависимостей.


3. Runtime-загрузка CLDR

Менее распространённый, но технически возможный сценарий:

  • приложение загружает CLDR JSON по HTTP;
  • данные передаются в Globalize через Globalize.load();
  • форматирование становится доступным после инициализации.

Основное ограничение — необходимость гарантировать совместимость структуры данных и версии библиотеки.


Механизм загрузки данных в Globalize

Внутри Globalize загрузка CLDR происходит через явное подключение ресурсов:

  • числовые данные;
  • локали;
  • supplemental-данные.

Типичный сценарий включает последовательность:

  1. загрузка базовых данных языка;
  2. подключение региональных правил;
  3. добавление supplemental-слоя CLDR;
  4. инициализация форматтеров.

При изменении версии CLDR структура этих данных может меняться, что требует автоматической адаптации пайплайна загрузки.


Автоматизация обновления через build pipeline

Современные проекты интегрируют CLDR в сборку следующим образом:

Этап 1: определение версии CLDR

Версия фиксируется в конфигурации:

  • package.json;
  • отдельном конфиге локализации;
  • переменных окружения CI.

Этап 2: загрузка и нормализация данных

На этом этапе выполняются операции:

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

Этап 3: генерация локализационного бандла

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

  • минимизация JSON;
  • группировка по языкам;
  • подготовка к tree-shaking;
  • упаковка в единый модуль.

Этап 4: интеграция в приложение

Сформированный пакет подключается как обычная зависимость:

  • импортируется при старте приложения;
  • передаётся в Globalize;
  • используется всеми форматтерами.

Проблемы версионирования CLDR

Автоматическое обновление CLDR связано с рядом технических сложностей:

Несовместимость форматов

CLDR может менять:

  • структуру ключей;
  • расположение данных;
  • правила fallback.

Это требует адаптера между версией CLDR и API Globalize.


Различия между minor-версиями

Даже незначительные обновления CLDR могут:

  • изменять формат дат;
  • корректировать правила pluralization;
  • добавлять новые языковые сегменты.

Автоматизация должна учитывать дифференциальные изменения.


Увеличение размера данных

Обновления CLDR часто увеличивают объём данных:

  • добавляются новые локали;
  • расширяются правила форматирования;
  • растёт количество supplemental-наборов.

Это влияет на размер бандла и требует оптимизации загрузки.


Кеширование и стратегия обновлений

В системах с Globalize применяются стратегии кеширования CLDR:

  • фиксированная версия CLDR в production;
  • отдельный канал обновлений локализации;
  • CDN-кеширование JSON;
  • контроль TTL для локализационных данных.

Это позволяет разделить обновления интерфейса и обновления языковых правил.


Проверка корректности после обновления CLDR

После автоматического обновления выполняются проверки:

  • тесты форматирования дат;
  • проверка валютных символов;
  • валидация plural rules;
  • сравнение эталонных локалей.

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


Интеграция с CI/CD системами

Автоматическое обновление CLDR обычно включается в pipeline:

  • nightly build проверяет новую версию CLDR;
  • создаётся pull request с обновлёнными данными;
  • запускается тестирование локализации;
  • выполняется автоматическое принятие или отклонение обновления.

Такой подход снижает риск ручных ошибок и обеспечивает актуальность языковой базы.


Оптимизация загрузки обновлённых данных

Для снижения стоимости обновлений применяются техники:

  • разбиение CLDR по языкам;
  • lazy-loading локалей;
  • удаление неиспользуемых регионов;
  • агрессивная минификация JSON.

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