i18next — ядро системы интернационализации, вокруг которого строится
конфигурация загрузки ресурсов, обработка ключей, работа с
множественными языками и интеграция с фреймворками. i18next
предоставляет единый механизм инициализации через
i18next.init(options), где поведение библиотеки
определяется большим набором параметров.
Инициализация выполняется через конфигурационный объект:
i18next.init({
lng: 'ru',
fallbackLng: 'en',
resources: {}
})
Конфигурация влияет на:
Определяет текущий язык:
lng: 'ru'
Особенности:
changeLanguageОпределяет язык-запасной вариант:
fallbackLng: 'en'
Расширенные формы:
fallbackLng: {
'ru': ['uk', 'en'],
'default': ['en']
}
Поведение:
en-US → en)Ограничивает список допустимых языков:
supportedLngs: ['en', 'ru', 'de']
Особенности:
nonExplicitSupportedLngs: falsenonExplicitSupportedLngs: true
en-US)ns: ['common', 'home']
Определяет набор пространств имён для переводов.
defaultNS: 'common'
Используется при отсутствии явного namespace в ключе.
fallbackNS: 'common'
Применяется при отсутствии ключа в основном namespace.
Inline-ресурсы:
resources: {
en: {
common: {
hello: 'Hello'
}
},
ru: {
common: {
hello: 'Привет'
}
}
}
Использование:
partialBundledLanguages: true
Позволяет частичную загрузку ресурсов для языков.
Конфигурация backend-адаптера:
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
}
Используется с плагинами загрузки.
preload: ['en', 'ru']
Загружает языки заранее при инициализации.
initImmediate: false
true — асинхронная инициализацияfalse — синхронная инициализация (устаревший подход в
новых архитектурах)keySeparator: '.'
Позволяет использовать вложенные ключи:
t('menu.home.title')
Отключение:
keySeparator: false
nsSeparator: ':'
Пример:
t('common:hello')
ignoreJSONStructure: false
Контролирует обработку вложенных JSON-структур.
interpolation: {
escapeValue: false,
prefix: '{{',
suffix: '}}'
}
Основные параметры:
Пример:
t('hello_user', { name: 'Alex' })
Шаблон:
Hello {{name}}
format: (value, format) => {
if (format === 'uppercase') return value.toUpperCase()
return value
}
saveMissing: true
Отправляет отсутствующие ключи в backend.
missingKeyHandler: (lng, ns, key) => {
console.log(key)
}
Позволяет логировать или обрабатывать отсутствующие переводы.
parseMissingKeyHandler: (key) => `??${key}??`
Формирует fallback-значение.
returnNull: false
true — возвращает null при отсутствии
ключаfalse — продолжает fallback-цепочкуreturnEmptyString: false
Контролирует поведение пустых переводов.
returnObjects: true
Позволяет возвращать объекты:
t('user')
Результат:
{ name: "Alex", age: 20 }
debug: true
cleanCode: true
Убирает лишние ключи и оптимизирует структуру.
load: 'languageOnly'
Варианты:
languageOnly → encurrentOnly → en-USall → полная загрузкаreact: {
useSuspense: true
}
Влияет на:
detection: {
order: ['querystring', 'cookie'],
caches: ['cookie']
}
Источники:
compatibilityJSON: 'v4'
Используется для совместимости старых структур переводов.
init: (options, callback) => {}
Позволяет:
postProcess: ['upperCase']
Применяет трансформации после перевода.
joinArrays: false
Управляет объединением массивов переводов.
overloadTranslationOptionHandler: args => args[1]
Позволяет изменять поведение параметров t().
pluralSeparator: '_'
Пример ключей:
apple
apple_plural
contextSeparator: '_'
Используется для контекстных переводов:
button_save_male
button_save_female