Интернационализация (i18n) в JavaScript (Node.js): библиотека i18next

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Интернационализация (i18n) в JavaScript (Node.js): библиотека i18next

Интернационализация (сокращённо i18n — от англ. "internationalization", где 18 — количество букв между первой "i" и последней "n") — это процесс проектирования и разработки программного обеспечения, позволяющий адаптировать его под различные языки и региональные особенности без изменения исходного кода. В современном веб-разработке на Node.js создание многоязычных приложений — необходимость для выхода на глобальный рынок.

Одной из самых популярных и мощных библиотек для реализации i18n в экосистеме JavaScript (включая Node.js) является i18next. Она предлагает гибкую архитектуру, поддержку множества форматов файлов перевода, интерполяцию, плюрализацию и контекстные переводы. В этой статье мы подробно разберём установку, настройку и использование i18next на серверной стороне.

Установка и подключение

Для начала работы с i18next в проекте Node.js установите библиотеку через npm:

npm install i18next

Также рекомендуется установить пакет i18next-fs-backend для загрузки файлов переводов из файловой системы:

npm install i18next-fs-backend

После установки создайте файл инициализации, например i18n.js:

const i18next = require('i18next');
const Backend = require('i18next-fs-backend');

i18next.use(Backend).init({
  lng: 'ru', // язык по умолчанию
  fallbackLng: 'en', // резервный язык
  backend: {
    loadPath: './locales/{{lng}}/{{ns}}.json' // путь к файлам переводов
  },
  interpolation: {
    escapeValue: false // не экранировать HTML (для Node.js)
  }
});

module.exports = i18next;

Структура файлов переводов

Создайте папку locales в корне проекта. Внутри неё для каждого языка создайте подпапку (например, en, ru, de). В каждой подпапке разместите JSON-файлы с переводами. Обычно используется один файл translation.json на язык, но можно разделять на пространства имён (namespaces) для модульности.

Пример файла locales/ru/translation.json:

{
  "welcome": "Добро пожаловать на наш сайт!",
  "greeting": "Привет, {{name}}!",
  "items": "{{count}} элемент",
  "items_plural": "{{count}} элементов",
  "menu": {
    "home": "Главная",
    "about": "О нас",
    "contact": "Контакты"
  }
}

Пример файла locales/en/translation.json:

{
  "welcome": "Welcome to our website!",
  "greeting": "Hello, {{name}}!",
  "items": "{{count}} item",
  "items_plural": "{{count}} items",
  "menu": {
    "home": "Home",
    "about": "About",
    "contact": "Contact"
  }
}

Основные возможности i18next

Простой перевод

Для получения перевода используйте функцию t() (от "translate"):

const i18next = require('./i18n');

// Асинхронная инициализация (в реальном проекте дождитесь готовности)
i18next.t('welcome'); // "Добро пожаловать на наш сайт!" (если lng: 'ru')

Интерполяция переменных

Вставляйте динамические значения в строки с помощью двойных фигурных скобок:

i18next.t('greeting', { name: 'Алексей' });
// Результат: "Привет, Алексей!"

Плюрализация

Библиотека автоматически выбирает правильную форму множественного числа на основе правила языка. Для этого добавьте ключи с суффиксом _plural:

i18next.t('items', { count: 1 }); // "1 элемент"
i18next.t('items', { count: 5 }); // "5 элементов"

Для английского языка правило проще (один элемент — item, много — items). Для русского i18next использует встроенные правила плюрализации, которые учитывают числа 1, 2-4, 5-20 и т.д.

Вложенные ключи и пространства имён

Доступ к вложенным объектам осуществляется через точку:

i18next.t('menu.home'); // "Главная"

Если вы используете пространства имён (например, common и errors), укажите их

Рекомендаций