i18next представляет собой ядро системы интернационализации, которое позволяет управлять переводами, форматированием и переключением языков в JavaScript-приложениях без привязки к конкретному фреймворку.
Первый рабочий пример начинается с установки базового пакета:
npm install i18next
В типичном браузерном или Node.js-проекте этого достаточно, чтобы получить доступ к основным возможностям библиотеки. Дополнительно могут потребоваться интеграции (например, для React или backend-фреймворков), но базовая логика работает на чистом ядре.
После установки создаётся минимальная конфигурация, которая демонстрирует принцип работы системы переводов.
Основой работы является объект i18n, создаваемый через
функцию init. Он хранит текущий язык, словари и настройки
поведения.
import i18next from 'i18next';
i18next.init({
lng: 'en',
debug: true,
resources: {}
});
Параметр lng определяет текущий язык интерфейса. В
данном случае выбран английский. Параметр resources пока
пустой, так как словари добавляются отдельно.
Включение debug: true активирует логирование внутренних
процессов: загрузку переводов, выбор ключей, fallback-механизмы.
Переводы в i18next организованы в виде структуры ресурсов, где каждый язык содержит набор namespace и ключей.
Минимальный словарь выглядит следующим образом:
i18next.init({
lng: 'en',
debug: true,
resources: {
en: {
translation: {
hello: "Hello world",
welcome: "Welcome to the system"
}
},
ru: {
translation: {
hello: "Привет, мир",
welcome: "Добро пожаловать в систему"
}
}
}
});
Каждый язык (en, ru) содержит namespace
translation, внутри которого располагаются ключи перевода.
Такая структура является базовой и используется по умолчанию.
После инициализации становится доступен метод t,
отвечающий за получение перевода по ключу.
console.log(i18next.t('hello'));
При установленном языке en результат будет:
Hello world
Если изменить язык на русский:
i18next.changeLanguage('ru');
console.log(i18next.t('hello'));
Результат:
Привет, мир
Метод changeLanguage динамически переключает контекст
перевода без необходимости переинициализации библиотеки.
При вызове t('hello') система выполняет последовательный
поиск:
lng)translationПример поведения при отсутствии перевода:
console.log(i18next.t('non_existing_key'));
Результат:
non_existing_key
Это поведение позволяет быстро выявлять пропущенные переводы в процессе разработки.
Хотя базовый пример использует один namespace, архитектура i18next предполагает разделение переводов по областям приложения.
Расширенный вариант структуры:
resources: {
en: {
common: {
hello: "Hello",
},
auth: {
login: "Login",
}
}
}
Вызов с указанием namespace:
i18next.t('login', { ns: 'auth' });
Если namespace не указан, используется defaultNS,
который равен translation, если не переопределён.
Fallback-язык используется в случае отсутствия перевода в текущей локали.
i18next.init({
lng: 'ru',
fallbackLng: 'en',
resources: {
en: {
translation: {
hello: "Hello"
}
},
ru: {
translation: {}
}
}
});
При вызове:
console.log(i18next.t('hello'));
будет возвращено:
Hello
Система автоматически переключается на английский словарь.
В реальных проектах инициализация часто выносится в отдельный модуль:
// i18n.js
import i18next from 'i18next';
i18next.init({
lng: 'en',
fallbackLng: 'en',
resources: {
en: {
translation: {
hello: "Hello"
}
},
ru: {
translation: {
hello: "Привет"
}
}
}
});
export default i18next;
Использование в другом файле:
import i18n from './i18n';
console.log(i18n.t('hello'));
Такой подход обеспечивает единый экземпляр системы переводов во всём приложении.
Хотя базовый пример выглядит синхронным, init может
работать асинхронно при подключении загрузчиков ресурсов.
i18next.init({
lng: 'en'
}, (err, t) => {
console.log(t('hello'));
});
Колбэк гарантирует, что переводы загружены и готовы к использованию.
Смена языка влияет на все последующие вызовы t:
i18next.changeLanguage('en');
console.log(i18next.t('hello'));
i18next.changeLanguage('ru');
console.log(i18next.t('hello'));
Вывод изменяется динамически без пересоздания экземпляра.
Механизм основан на внутреннем состоянии текущей локали и перезаписи контекста словарей.
Типовая схема первого рабочего примера включает:
initresourcest для получения строкchangeLanguageЭта модель является базовым слоем, на который накладываются загрузчики, плагины и интеграции с UI-фреймворками.
Даже в первом примере поддерживаются вложенные структуры:
resources: {
en: {
translation: {
user: {
name: "Name",
profile: "Profile"
}
}
}
}
Доступ:
console.log(i18next.t('user.name'));
Результат:
Name
Разделение по точечной нотации позволяет масштабировать словари без потери читаемости.
Поддерживается подстановка переменных:
resources: {
en: {
translation: {
greet: "Hello, {{name}}"
}
}
}
Вызов:
console.log(i18next.t('greet', { name: 'Alex' }));
Результат:
Hello, Alex
Интерполяция обрабатывается на уровне движка переводов и не требует дополнительной логики в коде приложения.