Работа с Globalize опирается на внешние данные стандарта Unicode CLDR, которые определяют правила форматирования дат, чисел, валют, склонений и сообщений. Основная сложность заключается не в форматировании как таковом, а в выборе стратегии получения, хранения и обработки этих данных в приложении.
Стратегия полной загрузки предполагает импорт всех необходимых JSON-файлов CLDR для поддерживаемых локалей на этапе инициализации приложения.
Особенности подхода:
Данный подход применяется в приложениях, где:
Недостатком выступает неэффективное использование памяти при наличии множества языков, особенно если часть из них используется редко.
Ленивая стратегия предполагает загрузку CLDR-данных только для активной локали.
Ключевые характеристики:
Типичная схема:
Основная сложность заключается в синхронизации состояния: форматирование невозможно до завершения загрузки всех зависимостей локали.
Гибридный подход сочетает предзагруженный набор базовых локалей и динамическую загрузку второстепенных.
Принцип:
Такой подход характерен для международных приложений с распределённой аудиторией.
Globalize требует явной загрузки данных перед использованием форматтеров. Стратегия заключается в централизованной точке инициализации.
Основные этапы:
Globalize.load(...);Преимущество — строгий контроль над порядком инициализации, что снижает риск неконсистентного состояния.
Форматтеры чисел, дат и сообщений создаются только при первом использовании.
Характеристики:
Применяется в интерфейсах с большим количеством динамических компонентов, где не все локализационные функции используются одновременно.
Контекст локали и форматтеров сохраняется в кэше для повторного использования.
Содержимое кэша:
Данная стратегия снижает количество повторных вычислений, особенно при частых перерендерах интерфейса.
При смене языка система полностью пересоздаёт состояние Globalize.
Особенности:
Используется в приложениях, где смена языка происходит редко и допустима кратковременная задержка.
В рамках инкрементальной стратегии обновляются только зависимые компоненты локали:
Основной контекст приложения сохраняется, обновляется только слой интернационализации.
Преимущество — минимизация перерасчёта UI.
Локаль может различаться по зонам интерфейса:
Globalize используется как слой форматирования, а не глобальное состояние.
Такой подход требует строгого разделения контекстов и предотвращает глобальные побочные эффекты.
Форматирование выполняется на основе заранее известных значений.
Примеры:
Характеристики:
Значения форматируются в момент отображения.
Используется при:
Недостаток — повторные вычисления при каждом изменении состояния.
Данные обрабатываются массивами, а не по одному элементу.
Преимущества:
Сообщения интернационализации компилируются в функции заранее.
Этапы:
Результат — быстрый runtime без анализа строки сообщений.
Сообщения разбираются при каждом обращении.
Характеристики:
Используется в системах, где тексты часто обновляются извне.
Rules pluralization вычисляются один раз на локаль и сохраняются.
Стратегия снижает стоимость операций:
Импортируются только используемые части:
Неиспользуемые модули исключаются сборщиком.
Каждая локаль выносится в отдельный чанк.
Преимущества:
Форматтеры чисел и дат создаются один раз и переиспользуются.
Ключевые параметры кэширования:
При отсутствии данных активируется резервная локаль.
Сценарии:
Обычно используется цепочка: основная локаль → региональная → базовая (en).
При невозможности полной локализации выполняется упрощённое форматирование:
Такой подход сохраняет функциональность интерфейса.
Ошибки обработки локалей фиксируются для последующего анализа:
Данные используются для корректировки сборки и конфигурации локалей.
Globalize используется как отдельный сервисный слой.
Структура:
Такое разделение снижает связанность компонентов.
Создаётся абстракция над Globalize:
Это упрощает миграцию и тестирование.
Локаль рассматривается как потоковое состояние.
Изменение локали автоматически:
Подход особенно эффективен в SPA-архитектурах с реактивными фреймворками.