В библиотеке 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 при массовых операциях.