Дебаг режим

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

Ключевая особенность debug-подхода в Globalize заключается в том, что библиотека опирается на внешние данные CLDR (Unicode Common Locale Data Repository). Любая ошибка в этих данных или их загрузке приводит не к «тихому падению», а к диагностируемым предупреждениям.


Роль CLDR и причины появления debug-режима

Globalize не содержит встроенных локализационных правил. Вместо этого она использует внешние JSON-структуры CLDR, которые должны быть корректно загружены разработчиком:

  • числа (decimal, percent, currency)
  • даты и времена
  • временные зоны
  • правила плюрализации
  • локализация названий месяцев, дней недели

Debug-режим становится критически важным из-за следующих факторов:

  • неполная загрузка CLDR-файлов
  • несоответствие версии CLDR и версии Globalize
  • отсутствие supplemental-данных
  • конфликт локалей (например, en vs en-GB)
  • попытка форматирования без инициализированной культуры

Диагностика загрузки CLDR данных

Одним из центральных аспектов debug-режима является проверка полноты загрузки CLDR.

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

  • numbers/decimalFormats.json
  • numbers/symbols.json
  • currencies.json
  • timeData.json

При включённой диагностике Globalize фиксирует отсутствие необходимых блоков и генерирует предупреждения.

Поведение debug-режима в таких случаях:

  • явное сообщение о недостающем сегменте данных
  • указание ключа CLDR-ноды, которая не найдена
  • предотвращение «молчаливого fallback» на некорректные значения

Проверка локалей и контекста выполнения

Globalize опирается на текущую локаль, установленную через механизм инициализации:

  • локаль должна быть явно загружена
  • локаль должна соответствовать доступным CLDR-данным

Debug-режим усиливает проверки:

  • попытка использования несуществующей локали вызывает предупреждение
  • использование частично загруженной локали приводит к диагностике отсутствующих сегментов
  • несоответствие формата локали (например, ru_RU вместо ru) фиксируется отдельно

Особое внимание уделяется цепочке fallback-локалей. При отсутствии строгих данных Globalize может попытаться использовать более общий набор (например, fr-CA → fr). В debug-режиме такие переходы логируются.


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

Форматирование чисел — один из наиболее чувствительных участков, где debug-режим проявляет себя активно.

Распространённые проблемы:

  • отсутствие символов группировки (,, .)
  • некорректный decimal separator
  • отсутствие currency symbol
  • несоответствие шаблонов CLDR

Debug-режим фиксирует:

  • использование fallback-шаблонов
  • отсутствие правил округления
  • несовпадение формата с локалью

Особенно важно поведение при currency formatting: если отсутствуют правила валюты, Globalize может вернуть «сырой» числовой формат, но debug-режим явно сообщает о потере контекстной информации.


Ошибки форматирования дат и времени

Работа с датами в Globalize полностью зависит от CLDR dateTime patterns.

Debug-режим отслеживает:

  • отсутствие шаблонов short, medium, long, full
  • некорректные токены форматирования
  • несоответствие временной зоны
  • отсутствие локализованных названий месяцев и дней недели

При обнаружении проблемы система:

  • сообщает о конкретном шаблоне, который не найден
  • указывает локаль, для которой отсутствуют данные
  • фиксирует fallback на дефолтные ISO-представления

Проверка плюрализации и языковых правил

Plural rules — один из наиболее сложных компонентов CLDR. Debug-режим анализирует:

  • наличие правил plural categories (one, few, many, other)
  • корректность mapping чисел на категории
  • поддержку языка в текущей версии CLDR

Ошибки проявляются особенно часто при:

  • частичной загрузке supplemental/plurals.json
  • использовании нестандартных локалей
  • попытке обработки чисел вне диапазона правил

Debug-вывод помогает выявить, какая именно категория не была сопоставлена.


Валидация supplemental-данных

Supplemental-данные CLDR играют ключевую роль в Globalize:

  • likelySubtags
  • week data
  • numbering systems
  • timezone metadata

Debug-режим проверяет наличие этих блоков перед выполнением операций локализации.

Отсутствие supplemental-данных приводит к:

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

Логирование в debug-режиме фиксирует отсутствие конкретного блока и операцию, которая его потребовала.


Инструменты логирования и поведения ошибок

В debug-конфигурации Globalize усиливает прозрачность через консольные уведомления.

Основные типы сообщений:

  • warning о неполных данных
  • error при критическом отсутствии CLDR-сегмента
  • informational сообщения о fallback-цепочках

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

Типовая логика поведения:

  • отсутствие данных → warning + fallback
  • критический компонент → error + остановка операции
  • некорректный формат → warning + попытка исправления

Поведение в development-сборке

Debug-режим чаще всего активируется в окружении разработки:

  • NODE_ENV = “development”
  • включён verbose logging
  • подключены проверки CLDR integrity

В этом режиме Globalize:

  • увеличивает количество проверок
  • не оптимизирует цепочки fallback
  • сохраняет подробные сообщения об ошибках

В production-сборке большая часть этих проверок отключается ради производительности, но сохраняется базовая валидация входных данных.


Типовые сценарии использования debug-режима

Неполная инициализация CLDR

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

Конфликт локалей

При использовании нескольких форматов локалей (en, en-US, en-GB) debug помогает выявить неправильный fallback.

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

Отсутствие currency symbols или decimal rules приводит к диагностике и предупреждениям о деградации форматирования.

Некорректные даты

При отсутствии календарных шаблонов debug-режим фиксирует использование ISO-формата вместо локализованного представления.


Влияние debug-режима на архитектуру приложения

Использование debug-режима требует дисциплины в организации загрузки CLDR:

  • обязательная централизованная инициализация
  • контроль версий CLDR
  • проверка полноты наборов данных до старта приложения
  • разделение dev/prod конфигураций

Debug-режим фактически превращается в слой валидации i18n-данных, выявляющий ошибки ещё до попадания в пользовательский интерфейс.