Типы ошибок в Globalize

В библиотеке Globalize ошибки возникают на нескольких уровнях: от некорректной конфигурации CLDR-данных до ошибок форматирования чисел, дат, валют и сообщений. Понимание структуры этих ошибок критично для построения устойчивых i18n-систем, особенно в средах с динамической подгрузкой локалей.


Ошибки отсутствия или некорректной загрузки CLDR-данных

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

Типичные сценарии:

  • не загружен базовый набор CLDR (likelySubtags, plurals, numbers);
  • загружена неполная локаль;
  • конфликт версий CLDR;
  • загрузка данных выполнена после инициализации Globalize.

Проявления:

  • Error: E_MISSING_CLDR (условный тип ошибки уровня приложения);
  • некорректные форматы чисел (например, отсутствие разделителей);
  • падение методов formatDate, formatNumber.

Особенность: Globalize не всегда явно сообщает о причине сбоя, что приводит к каскадным ошибкам на уровне UI.


Ошибки инициализации и конфигурации

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

Основные причины:

  • использование неподдерживаемого locale string (en_US вместо en);
  • отсутствие регистрации CLDR для используемой локали;
  • вызов API до загрузки данных;
  • некорректная настройка fallback-локали.

Типовые проявления:

  • Globalize.locale is not a function;
  • возврат пустых строк вместо форматированных значений;
  • fallback на системную локаль браузера.

Структурная проблема: Ошибки конфигурации часто маскируются под ошибки форматирования, что усложняет диагностику.


Ошибки форматирования чисел

Модуль number является одним из наиболее чувствительных к данным CLDR.

Типовые ошибки:

  • передача строки вместо числа;
  • использование NaN или undefined;
  • отсутствие decimal pattern в CLDR;
  • некорректная локаль для группировки разрядов.

Примеры поведения:

  • возврат NaN вместо форматированного числа;
  • игнорирование настроек precision;
  • потеря разделителей тысяч.

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


Ошибки форматирования валют

Модуль валют использует расширенные правила CLDR, включая позиции символов и правила округления.

Источники ошибок:

  • отсутствие currency data в CLDR;
  • некорректный currency code (например, RUBB вместо RUB);
  • несоответствие locale и валютного формата;
  • конфликт roundingMode.

Проявления:

  • неправильное размещение символа валюты;
  • потеря дробной части;
  • fallback к базовому числовому формату без валюты.

Особенность поведения: Ошибки валют часто выглядят как UI-дефекты, а не как системные сбои.


Ошибки работы с датами и временем

Модуль date зависит от множества компонентов CLDR: календарей, временных зон, форматов.

Типовые проблемы:

  • отсутствие data для конкретного календаря;
  • некорректный input (строка вместо Date);
  • несоответствие формата skeleton данным CLDR;
  • отсутствие timezone-данных.

Проявления:

  • Invalid Date при форматировании;
  • возврат исходного значения без преобразования;
  • ошибки при парсинге дат.

Сложность диагностики: Ошибки часто возникают только для определённых локалей, что делает их трудно воспроизводимыми.


Ошибки парсинга

Парсинг в Globalize менее строгий, чем форматирование, что создаёт дополнительный класс ошибок.

Причины:

  • неоднозначные строки (например, 01/02/03);
  • несоответствие локали входного формата;
  • отсутствие правил parse в CLDR;
  • некорректный token pattern.

Проявления:

  • частично распознанные значения;
  • смещение даты;
  • возврат null вместо объекта Date.

Ошибки сообщений (messages module)

Модуль сообщений отвечает за интернационализацию строк и шаблонов.

Основные причины ошибок:

  • отсутствующий ключ сообщения;
  • некорректный path в namespace;
  • несовпадение параметров интерполяции;
  • повреждённый JSON ресурсов.

Типовые проявления:

  • возврат ключа вместо строки;
  • незамещённые плейсхолдеры ({name});
  • падение при обращении к вложенным объектам.

Особенность: Ошибки сообщений часто не бросают исключение, а возвращают fallback-значение.


Ошибки динамической загрузки данных

В современных архитектурах CLDR часто загружается асинхронно.

Источники проблем:

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

Проявления:

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

Ошибки совместимости и окружения

Globalize может использовать разные источники Intl API и CLDR, что приводит к конфликтам.

Типовые ситуации:

  • различия между Node.js и браузером;
  • использование polyfill без корректной конфигурации;
  • конфликт с встроенным Intl API;
  • несовпадение версий зависимостей.

Проявления:

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

Ошибки fallback-механизмов

Fallback-логика часто скрывает реальные проблемы.

Причины:

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

Поведение:

  • автоматический переход на en;
  • потеря локализации части интерфейса;
  • смешение языков в одном UI.

Ошибки типов данных и строгой типизации

Несмотря на JavaScript-динамичность, Globalize ожидает определённые типы данных.

Основные нарушения:

  • строки вместо чисел;
  • JSON-строки вместо объектов;
  • null вместо Date;
  • смешанные типы в массивах параметров.

Результат:

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

Ошибки локалей и идентификаторов

Работа с locale identifiers требует строгого соответствия стандарту BCP 47.

Типовые ошибки:

  • использование устаревших идентификаторов (en_US вместо en-US);
  • неправильный порядок региональных тегов;
  • отсутствие fallback цепочки;
  • несовпадение с доступными CLDR пакетами.

Проявления:

  • отсутствие локализации;
  • откат к дефолтной локали;
  • частичная потеря форматирования.

Ошибки производительности как косвенный тип сбоев

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

Причины:

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

Симптомы:

  • задержки рендеринга;
  • фризы при форматировании списков;
  • деградация UX при массовых операциях.