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

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

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

Начать курс

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

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

Зачем нужна интернационализация?

Современные веб-приложения и серверные сервисы часто работают с пользователями из разных стран. Поддержка нескольких языков повышает удобство использования (UX) и расширяет аудиторию. Без i18n разработчикам пришлось бы жёстко зашивать строки на одном языке, что делает поддержку многоязычности крайне трудоёмкой и чреватой ошибками.

Основные задачи, решаемые библиотеками i18n в Node.js:

  • Поддержка файлов с переводами (обычно JSON или YAML).
  • Плюрализация (правильное склонение слов в зависимости от числа: «1 кофе», «2 кофе», «5 кофе»).
  • Интерполяция переменных в строки (например, «Привет, {{name}}!»).
  • Поддержка вложенных ключей для организации структуры переводов.
  • Автоматическое определение языка пользователя (через заголовки HTTP, cookie, поддомены).

Библиотека i18next

i18next — это, пожалуй, самая популярная и функциональная библиотека для интернационализации в мире JavaScript. Она работает как в браузере, так и на сервере Node.js. i18next предлагает богатую экосистему плагинов, включая интеграцию с React, Vue, Express и другими фреймворками.

Установка и базовая настройка

// Установка через npm
npm install i18next

Создадим файлы с переводами. Обычно их хранят в папке locales:

locales/ru/translation.json

{
  "greeting": "Привет, {{name}}!",
  "coffee": "Вы выпили {{count}} чашку кофе",
  "coffee_plural": "Вы выпили {{count}} чашек кофе",
  "menu": {
    "home": "Главная",
    "about": "О нас"
  }
}

locales/en/translation.json

{
  "greeting": "Hello, {{name}}!",
  "coffee": "You drank {{count}} cup of coffee",
  "coffee_plural": "You drank {{count}} cups of coffee",
  "menu": {
    "home": "Home",
    "about": "About us"
  }
}

Теперь инициализируем i18next в приложении:

const i18next = require('i18next');
const fs = require('fs');
const path = require('path');

// Загружаем переводы из файлов
function loadTranslation(lng) {
  const filePath = path.join(__dirname, 'locales', lng, 'translation.json');
  return JSON.parse(fs.readFileSync(filePath, 'utf8'));
}

i18next.init({
  lng: 'ru', // язык по умолчанию
  fallbackLng: 'en', // резервный язык
  resources: {
    ru: { translation: loadTranslation('ru') },
    en: { translation: loadTranslation('en') }
  },
  interpolation: {
    escapeValue: false // для Node.js не нужно экранировать HTML
  }
});

// Использование
console.log(i18next.t('greeting', { name: 'Алексей' }));
// Вывод: Привет, Алексей!

console.log(i18next.t('coffee', { count: 1 }));
// Вывод: Вы выпили 1 чашку кофе

console.log(i18next.t('coffee', { count: 5 }));
// Вывод: Вы выпили 5 чашек кофе

console.log(i18next.t('menu.home'));
// Вывод: Главная

Смена языка на лету

i18next.changeLanguage('en');
console.log(i18next.t('greeting', { name: 'Alex' }));
// Вывод: Hello, Alex!

Библиотека node-polyglot

node-polyglot — это лёгкая и простая альтернатива i18next. Она идеально подходит для небольших проектов или когда не требуется вся мощь i18next. Polyglot не поддерживает вложенные ключи и сложную плюрализацию «из коробки», но для базовых сценариев её более чем достаточно.

Установка и использование

npm install node-polyglot

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