i18next предоставляет центральный механизм локализации через функцию
t(), которая выполняет извлечение перевода по ключу и
обработку дополнительных параметров: интерполяции, множественного числа,
контекстов, пространств имён и fallback-логики. В архитектуре библиотеки
именно t() выступает точкой доступа к языковым ресурсам и
инкапсулирует всю логику разрешения ключей перевода.
Функция t() вызывается через экземпляр i18next и имеет
следующую концептуальную сигнатуру:
t(key, options?, defaultValue?)
key — строка или массив ключей переводаoptions — объект параметров (интерполяция, контекст,
множественное число и др.)defaultValue — значение по умолчанию, если перевод не
найденПри вызове t() происходит последовательный поиск
значения в ресурсах текущего языка. Если ключ не найден, применяется
fallback-язык или defaultValue.
i18next.init({
lng: 'ru',
resources: {
ru: {
translation: {
welcome: 'Добро пожаловать'
}
}
}
});
i18next.t('welcome');
Механизм поиска работает по следующей цепочке:
lng)defaultValue, если указанОдна из ключевых возможностей t() — подстановка
динамических значений через интерполяцию.
i18next.init({
interpolation: {
escapeValue: false
},
resources: {
ru: {
translation: {
greeting: 'Привет, {{name}}'
}
}
}
});
i18next.t('greeting', { name: 'Алексей' });
Интерполяция поддерживает:
interpolation: {
prefix: '{{',
suffix: '}}',
escapeValue: true
}
Параметр escapeValue критически важен при работе с HTML,
так как предотвращает XSS-инъекции при выводе пользовательских
данных.
Функция t() автоматически обрабатывает формы
множественного числа в зависимости от языка.
i18next.init({
lng: 'ru',
resources: {
ru: {
translation: {
item: 'предмет',
item_plural: 'предмета',
item_plural_2: 'предметов'
}
}
}
});
i18next.t('item', { count: 5 });
Передача count активирует механизм выбора формы:
count = 1 → singularcount = 2-4 → fewcount = 5+ → manyВнутренне i18next использует CLDR-правила языка для определения формы.
Контекст позволяет различать переводы одного ключа в зависимости от ситуации.
i18next.init({
lng: 'ru',
resources: {
ru: {
translation: {
friend: 'друг',
friend_female: 'подруга'
}
}
}
});
i18next.t('friend', { context: 'female' });
Алгоритм разрешения:
_contextКонтекст может комбинироваться с множественным числом:
i18next.t('friend', { context: 'female', count: 3 });
t() поддерживает разделение переводов на namespaces:
i18next.init({
lng: 'ru',
ns: ['common', 'dashboard'],
defaultNS: 'common',
resources: {
ru: {
common: {
save: 'Сохранить'
},
dashboard: {
title: 'Панель управления'
}
}
}
});
i18next.t('save'); // common.save
i18next.t('dashboard:title');
Namespaces уменьшают конфликт ключей и повышают модульность словарей.
Если ключ отсутствует, можно задать запасное значение:
i18next.t('missing.key', { defaultValue: 'Значение по умолчанию' });
Поведение:
defaultValuedefaultValue не задан, возвращается ключt() поддерживает вложенные структуры:
resources: {
ru: {
translation: {
user: {
profile: {
title: 'Профиль пользователя'
}
}
}
}
}
Вызов:
i18next.t('user.profile.title');
Разделитель по умолчанию — точка, но может быть изменён:
keySeparator: '.'
t() может возвращать не только строки, но и объекты:
i18next.init({
returnObjects: true,
resources: {
ru: {
translation: {
menu: {
home: 'Главная',
about: 'О нас'
}
}
}
}
});
i18next.t('menu');
Результат:
{
home: 'Главная',
about: 'О нас'
}
Это используется при построении динамических меню и конфигураций интерфейса.
Для сокращения повторяющихся путей используется
keyPrefix:
i18next.t('title', { keyPrefix: 'user.profile' });
Эквивалент:
i18next.t('user.profile.title');
Префикс применяется до поиска ключа и может комбинироваться с namespace.
t() поддерживает вложенные ссылки на другие ключи:
resources: {
ru: {
translation: {
error: 'Ошибка',
error_message: '{{error}}: что-то пошло не так'
}
}
}
i18next.t('error_message');
Результат:
Ошибка: что-то пошло не так
Нестинг работает рекурсивно, но ограничивается глубиной, чтобы избежать циклов.
t() может использовать кастомные форматтеры:
i18next.init({
interpolation: {
format: (value, format) => {
if (format === 'uppercase') return value.toUpperCase();
return value;
}
}
});
i18next.t('key', { value: 'text', format: 'uppercase' });
Форматирование применяется после интерполяции.
В некоторых конфигурациях ключ может быть функцией:
i18next.t(() => 'dynamic.key');
Используется в случаях динамического вычисления ключей в рантайме.
Если ключ отсутствует:
defaultValuei18next.init({
debug: true
});
t() принимает массив ключей для последовательного
поиска:
i18next.t(['missing.key', 'fallback.key', 'default']);
Алгоритм:
t() всегда зависит от текущего языка:
i18next.changeLanguage('en');
i18next.t('welcome');
При смене языка происходит:
t()t() позволяет переопределять язык и namespace
локально:
i18next.t('welcome', { lng: 'en' });
i18next.t('save', { ns: 'dashboard' });
Это полезно для смешанных интерфейсов и админ-панелей.
t() оптимизирована через внутренний кеш разрешённых
ключей:
При большом количестве переводов критично:
t() может одновременно использовать:
Пример комбинированного вызова:
i18next.t('notification', {
context: 'email',
count: 3,
name: 'Ivan'
});
Такая комбинация приводит к выбору ключа по приоритету:
Каждый уровень проверки влияет на итоговую строку, обеспечивая гибкость локализации сложных интерфейсов.