Интернационализация (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), укажите их
Также в библиотеке
Геолокация и карты в Kotlin: обзор библиотек и инструментов
Redis (ioredis) для JavaScript (Node.js): полное руководство с примерами
OAuth клиент для Swift (iOS/macOS): библиотека OAuthSwift
Работа с Kafka в PHP: библиотеки, установка и примеры кода
Машинное обучение на PHP: обзор библиотек для интеграции ML