В библиотеке i18next механизм отладки является центральным инструментом при анализе проблем интернационализации. Основной источник информации — логирование внутренних процессов загрузки ресурсов, поиска ключей, выбора fallback-языков и применения интерполяции.
Активация режима выполняется через параметр конфигурации:
i18next.init({
debug: true,
lng: 'ru',
fallbackLng: 'en',
resources: {
ru: {
translation: {
greeting: "Привет"
}
}
}
});
При включённом режиме система выводит подробные сообщения о каждом этапе обработки ключей перевода: загрузка namespace, выбор языка, отсутствие ключей, использование fallback-цепочек.
Ключевой аспект режима отладки — прозрачность цепочки разрешения перевода. При запросе строки сначала определяется активный язык, затем проверяется наличие ключа в соответствующем namespace. В случае отсутствия выполняется переход к fallback-языкам.
Одной из наиболее частых проблем является отсутствие переводов. i18next фиксирует такие случаи и выводит предупреждения в консоль.
Типичный сценарий:
i18next.t('button.submit');
При отсутствии ключа в текущем языке лог содержит информацию вида:
i18next::translator: missingKey en translation button.submit button.submit
В сообщении присутствуют:
Отсутствие ключа не всегда означает ошибку конфигурации. Возможны следующие причины:
Архитектура i18next основана на разделении переводов на namespaces. При неверной конфигурации загрузки ресурсов ключи оказываются недоступными, несмотря на их фактическое наличие.
Пример структуры:
i18next.init({
ns: ['common', 'auth'],
defaultNS: 'common',
resources: {
en: {
common: {
ok: "OK"
},
auth: {
login: "Login"
}
}
}
});
Типичная проблема возникает при обращении без указания namespace:
i18next.t('login');
Поиск выполняется в common, где ключ отсутствует, что
приводит к fallback или missingKey.
Логирование помогает определить, в каком namespace выполнялся поиск и на каком этапе произошёл сбой разрешения ключа.
При использовании backend-плагинов (например, HTTP или файлового загрузчика) ошибки часто связаны не с переводами, а с процессом их получения.
Пример конфигурации с backend:
import Backend from 'i18next-http-backend';
i18next
.use(Backend)
.init({
debug: true,
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
}
});
В режиме отладки фиксируются следующие этапы:
Типичные проблемы:
loadPathПри ошибке загрузки библиотека переключается на fallback-язык, что также отражается в логах.
i18next поддерживает интерполяцию значений:
i18next.t('welcome_user', { name: 'Alex' });
Перевод:
{
"welcome_user": "Добро пожаловать, {{name}}"
}
В режиме отладки фиксируются ситуации:
Пример ошибки:
i18next.t('welcome_user');
Логически отсутствует name, что приводит к выводу:
Добро пожаловать, {{name}}
При включённом debug дополнительно фиксируются
предупреждения о непереданных интерполяционных значениях.
Механизм множественных форм является одной из наиболее сложных частей системы перевода.
Пример конфигурации:
{
"apple_one": "яблоко",
"apple_other": "яблок"
}
Использование:
i18next.t('apple', { count: 5 });
В debug-режиме фиксируются:
one, few,
many, other)Типовые ошибки:
count в параметрахПри отсутствии корректной формы происходит fallback к
other, что также отображается в логах.
Fallback-языки формируют цепочку поиска ключей:
i18next.init({
lng: 'ru',
fallbackLng: ['uk', 'en']
});
Алгоритм поиска:
В debug-режиме фиксируется переход между языками:
i18next::translator: key "submit" not found in ru
i18next::translator: key "submit" not found in uk
i18next::translator: using fallback en
Основные причины частых переходов:
Стандартный механизм логирования может быть расширен через
logger.
i18next
.init({
debug: true,
logger: {
type: 'logger',
log: (args) => console.log(args),
warn: (args) => console.warn(args),
error: (args) => console.error(args)
}
});
Дополнительно возможно подключение перехвата отсутствующих ключей:
i18next.on('missingKey', (lngs, namespace, key) => {
console.log(lngs, namespace, key);
});
Такая обработка используется для:
Механизм saveMissing позволяет фиксировать и отправлять
отсутствующие переводы на сервер:
i18next.init({
saveMissing: true,
missingKeyHandler: (lng, ns, key) => {
// отправка на backend
}
});
В debug-режиме фиксируется:
Основные сценарии использования:
Переключение языка является частым источником несоответствий между UI и логикой переводов.
i18next.changeLanguage('en');
Возможные проблемы:
Debug-лог фиксирует этапы:
i18next активно использует кеширование ресурсов. При разработке это может скрывать изменения в JSON-файлах переводов.
Типичные признаки:
В debug-режиме можно наблюдать:
i18next::backendConnector: loaded namespace translation for en
i18next::cache: key already exists, skipping load
Проблемные зоны:
При использовании вложенных структур возможны конфликты:
{
"button": {
"submit": "Отправить"
},
"button.submit": "Отправить"
}
Поведение зависит от конфигурации keySeparator.
i18next.init({
keySeparator: '.'
});
В debug-режиме фиксируются:
i18next поддерживает постобработчики:
i18next.t('price', { postProcess: 'currency' });
Ошибки возникают при:
Debug вывод отражает цепочку обработки:
postProcessor: currency applied
или сообщение об отсутствии обработчика.
Совокупность debug-инструментов i18next формирует многоуровневую систему анализа:
Каждый этап фиксируется в логах и позволяет локализовать проблему на конкретной стадии конвейера интернационализации.