Выбор необходимых модулей

Библиотека Globalize построена как модульная система, в которой функциональность не поставляется единым монолитным пакетом. Такой подход позволяет подключать только те компоненты, которые действительно требуются приложению, уменьшая размер бандла и ускоряя загрузку. Выбор модулей становится ключевым этапом проектирования интернационализации, поскольку от него напрямую зависят производительность, поддерживаемые локали и доступные API.

Архитектура Globalize разделяет функциональность на независимые блоки:

  • работа с числами
  • форматирование и парсинг дат
  • обработка валют
  • plural rules (правила множественного числа)
  • message formatting (сообщения и шаблоны)
  • загрузка и использование CLDR-данных

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

Ключевой принцип: нет глобальной автоматической инициализации — всё подключается явно.

Базовые зависимости: CLDR как фундамент

Перед выбором функциональных модулей необходимо учитывать обязательный слой данных — Unicode CLDR.

Минимальный набор:

  • cldr-core
  • cldr-localenames-* (если используются названия языков и регионов)
  • cldr-numbers-* (если форматируются числа)
  • cldr-dates-* (если используются даты)

Без этих данных модули Globalize остаются технически подключёнными, но не способны выполнять локализационные операции.

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

Модуль работы с числами

Числовой модуль подключается, если требуется:

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

Типовой модуль:

  • globalize/number

Дополнительно требуется:

  • cldr-numbers-full

Если приложение работает только с одной локалью и использует фиксированный формат (например, только отображение цен), можно ограничить набор CLDR-данных, исключив лишние регионы.

Работа с валютой

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

Подключается:

  • globalize/currency

Он добавляет:

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

Зависимости:

  • number module
  • CLDR currency data

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

Даты и время

Работа с датами — один из самых тяжёлых по зависимостям модулей.

Используется:

  • globalize/date

Он обеспечивает:

  • форматирование даты и времени
  • парсинг локализованных строк
  • поддержку различных форматов (short, medium, long, full)

Требуемые CLDR данные:

  • cldr-dates-full

Дополнительно могут потребоваться:

  • cldr-cal-buddhist
  • cldr-cal-gregorian (обычно включён по умолчанию)
  • данные по часовым поясам

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

Плюрализация и правила множественного числа

Модуль:

  • globalize/plural

Используется для:

  • выбора правильной формы слова
  • построения языковых правил в интерфейсах
  • интеграции с message formatting

Зависимости:

  • CLDR plural rules

Плюрализация редко используется отдельно. Обычно она является частью системы сообщений.

Сообщения и шаблоны

Один из наиболее функционально насыщенных модулей:

  • globalize/message

Он обеспечивает:

  • интерполяцию строк
  • выбор форм в зависимости от числа
  • вложенные шаблоны
  • локализованные сообщения UI

Требует:

  • plural module
  • CLDR message data

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

Минимальные и расширенные конфигурации

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

Минимальная конфигурация

Подходит для интерфейсов с ограниченной локализацией:

  • number module
  • cldr-numbers-core
  • одна локаль

Используется в:

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

Стандартная конфигурация

Типичный набор:

  • number
  • currency
  • date
  • plural
  • message
  • cldr-core
  • cldr-numbers
  • cldr-dates

Подходит для:

  • коммерческих приложений
  • публичных интерфейсов
  • e-commerce систем

Расширенная конфигурация

Включает полный набор CLDR-данных и все модули Globalize:

  • полный набор локалей
  • все форматы дат
  • все правила множественного числа
  • расширенные сообщения

Используется, когда:

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

Tree-shaking и ESM-сборка

При использовании ES Modules важно учитывать, что:

  • не все сборщики корректно удаляют неиспользуемые локали
  • CLDR-данные часто импортируются целиком
  • модульная структура Globalize не всегда идеально оптимизируется

Практическое правило:

выбор модулей важнее, чем попытка оптимизации на уровне сборщика

Ошибки при выборе модулей

Наиболее частые проблемы:

Подключение функционала без CLDR

Модуль загружен, но данные отсутствуют → API работает частично или падает.

Избыточные локали

Подключение десятков языков без необходимости приводит к росту бандла в разы.

Неправильный порядок загрузки

Globalize требует, чтобы:

  1. сначала были загружены CLDR-данные
  2. затем подключены модули
  3. затем инициализация локали

Нарушение порядка приводит к ошибкам формата и отсутствию локализации.

Использование модулей “на всякий случай”

Подключение date/currency/message одновременно без фактической необходимости увеличивает:

  • размер приложения
  • время инициализации
  • нагрузку на память

Практика проектирования набора модулей

При выборе модулей целесообразно отталкиваться не от библиотеки, а от функциональности продукта:

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

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

Зависимость модулей друг от друга

Структура зависимостей в Globalize не линейная:

  • number → base for currency
  • plural → base for message
  • date → depends on CLDR calendars
  • message → depends on plural

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

Стратегия оптимального выбора

Эффективная схема выбора модулей строится по принципу:

  1. определить минимальный набор пользовательских сценариев
  2. выделить необходимые типы данных (числа, даты, текст)
  3. добавить только соответствующие модули Globalize
  4. ограничить CLDR по локалям
  5. проверить зависимости между модулями

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