Система локализации в Globalize основана на стандартизированном наборе языковых и региональных данных CLDR (Common Locale Data Repository), поддерживаемом Unicode Consortium. CLDR содержит структурированные наборы правил форматирования дат, чисел, валют, списков, единиц измерения, а также локализованные шаблоны для множества языков.
Ключевая особенность работы с CLDR в JavaScript-приложениях заключается в том, что эти данные не являются частью рантайма по умолчанию. Они подключаются и обновляются отдельно, что создаёт необходимость управляемого механизма синхронизации версий и автоматического обновления.
Автоматическое обновление CLDR — это процесс синхронизации локальных данных приложения с актуальной версией CLDR, включающий:
Главная цель такого механизма — устранить рассинхронизацию между версией библиотек форматирования и актуальной лингвистической базой.
CLDR распространяется в виде набора JSON-файлов, разделённых по категориям:
numbers — правила форматирования чисел и валют;dates — календари, временные форматы, интервалы;units — единицы измерения и их локализация;plurals — правила множественных форм;lists — форматирование перечислений;delimiters — кавычки, разделители и типографика.В экосистеме Globalize эти данные обычно преобразуются в оптимизированные структуры, пригодные для быстрого доступа в рантайме.
CLDR обновляется регулярно, и каждая новая версия может включать:
Без автоматического обновления возникает риск:
В приложениях, использующих Globalize, применяется несколько стратегий обновления CLDR.
Наиболее распространённый подход основан на пакетах:
cldr-datacldr-data-downloaderПроцесс включает:
cldr-data;Этот метод интегрируется в CI/CD и обеспечивает предсказуемость версий.
В некоторых архитектурах CLDR не хранится в репозитории, а скачивается на этапе сборки:
Преимущество подхода — контроль версий без ручного обновления зависимостей.
Менее распространённый, но технически возможный сценарий:
Globalize.load();Основное ограничение — необходимость гарантировать совместимость структуры данных и версии библиотеки.
Внутри Globalize загрузка CLDR происходит через явное подключение ресурсов:
Типичный сценарий включает последовательность:
При изменении версии CLDR структура этих данных может меняться, что требует автоматической адаптации пайплайна загрузки.
Современные проекты интегрируют CLDR в сборку следующим образом:
Версия фиксируется в конфигурации:
На этом этапе выполняются операции:
Из отфильтрованных данных создаётся оптимизированный пакет:
Сформированный пакет подключается как обычная зависимость:
Автоматическое обновление CLDR связано с рядом технических сложностей:
CLDR может менять:
Это требует адаптера между версией CLDR и API Globalize.
Даже незначительные обновления CLDR могут:
Автоматизация должна учитывать дифференциальные изменения.
Обновления CLDR часто увеличивают объём данных:
Это влияет на размер бандла и требует оптимизации загрузки.
В системах с Globalize применяются стратегии кеширования CLDR:
Это позволяет разделить обновления интерфейса и обновления языковых правил.
После автоматического обновления выполняются проверки:
Особое внимание уделяется языкам с высокой сложностью морфологии, где изменения CLDR могут существенно повлиять на результат работы Globalize.
Автоматическое обновление CLDR обычно включается в pipeline:
Такой подход снижает риск ручных ошибок и обеспечивает актуальность языковой базы.
Для снижения стоимости обновлений применяются техники:
Globalize при этом остаётся абстракцией над данными, а не хранилищем, что позволяет гибко управлять объёмом загружаемой информации.