Globalize опирается на модель расширяемых типов данных, где форматирование и парсинг значений строятся вокруг подключаемых модулей и данных CLDR. Регистрация новых типов в контексте библиотеки означает расширение набора сущностей, с которыми работает API: числовые форматы, валюты, единицы измерения, даты, сообщения и пользовательские форматы, интегрируемые через единый механизм локализации.
В основе системы лежит разделение между:
Тип данных в Globalize не является жёстко зафиксированной сущностью. Он определяется набором загруженных правил и структур, которые активируются в зависимости от локали и контекста выполнения.
Ключевой принцип: тип считается зарегистрированным, если для него загружены соответствующие CLDR-фрагменты и подключены форматирующие/разбирающие функции.
Базовый числовой тип в Globalize расширяется через подключение правил форматирования:
Регистрация нового числового представления происходит через загрузку CLDR-веток и последующее использование фабрик форматирования.
Пример структуры загрузки:
После загрузки данных создаются специализированные форматтеры:
numberFormattercurrencyFormatterpercentFormatterРасширение типов чисел сводится к добавлению новых схем форматирования поверх базового числового ядра.
Валютный тип в Globalize является производным от числового, но требует дополнительного слоя метаданных:
Регистрация валютного типа включает:
После этого появляется возможность формировать специализированные экземпляры:
Внутренне валютный тип рассматривается как расширение числового типа с контекстным маркером currency.
Поддержка единиц измерения (unit formatting) строится поверх универсального механизма plural rules и number formatting.
Тип единицы измерения включает:
Регистрация выполняется через загрузку CLDR раздела
units.
После загрузки становится доступна фабрика:
unitFormatterКаждая единица измерения регистрируется как комбинация:
Пример логики внутреннего представления:
10 + "meter" → форматируется как локализованная
строкаТаким образом, новый unit-тип — это связка числового значения и семантического идентификатора единицы.
Типы даты и времени являются наиболее сложными и многоуровневыми.
Система включает:
Регистрация нового поведения даты включает:
datestimeZoneNamesПосле этого доступны фабрики:
dateFormatterdateParserrelativeTimeFormatterРасширение типов дат возможно через добавление:
Дата в Globalize рассматривается как структура, зависящая от локали, а не фиксированный timestamp-формат.
Тип сообщений основан на ICU MessageFormat и поддерживает:
Регистрация нового message-типа происходит через:
После регистрации появляется возможность создавать:
messageFormattermessageParserСообщение становится самостоятельным типом данных, содержащим:
Globalize не предоставляет жёсткого API для объявления произвольных типов как в статически типизированных системах. Вместо этого используется композиция:
Пользовательский тип формируется как:
Пример логической структуры:
Таким образом, регистрация нового типа превращается в создание слоя адаптации над существующими механизмами.
Модель регистрации опирается на три ключевых механизма:
Без данных тип не существует в рантайме. Загрузка определяет доступные локализационные правила.
Фабрики создают замкнутые функции форматирования, привязанные к локали:
Каждый зарегистрированный тип получает:
Это обеспечивает повторное использование без пересборки структуры.
Механизм расширения допускает подключение дополнительных модулей:
Каждый модуль регистрирует:
Тип считается добавленным, когда он становится доступен через стандартные API Globalize.
Типы в системе не изолированы:
Регистрация нового типа часто требует:
Таким образом, типовая система Globalize представляет собой граф зависимостей локализационных сущностей, а не набор независимых классов.
Регистрация новых типов в Globalize сводится к трем уровням:
Любой новый тип формируется как комбинация этих слоёв, а не как самостоятельная изолированная сущность.