Internationalisation (i18n) en JavaScript (Node.js) : la bibliothèque i18next
\n\nL'internationalisation (abrégée i18n — de l'anglais "internationalization", où 18 représente le nombre de lettres entre le premier "i" et le dernier "n") est le processus de conception et de développement de logiciels permettant de les adapter à différentes langues et particularités régionales sans modifier le code source. Dans le développement web moderne avec Node.js, créer des applications multilingues est une nécessité pour accéder au marché mondial.
\n\nL'une des bibliothèques les plus populaires et les plus puissantes pour implémenter l'i18n dans l'écosystème JavaScript (y compris Node.js) est i18next. Elle offre une architecture flexible, la prise en charge de multiples formats de fichiers de traduction, l'interpolation, la pluralisation et les traductions contextuelles. Dans cet article, nous allons détailler l'installation, la configuration et l'utilisation d'i18next côté serveur.
\n\nInstallation et configuration
\n\nPour commencer à utiliser i18next dans un projet Node.js, installez la bibliothèque via npm :
\n\nnpm install i18next\n\nIl est également recommandé d'installer le paquet i18next-fs-backend pour charger les fichiers de traduction depuis le système de fichiers :
npm install i18next-fs-backend\n\nAprès l'installation, créez un fichier d'initialisation, par exemple i18n.js :
const i18next = require('i18next');\nconst Backend = require('i18next-fs-backend');\n\ni18next.use(Backend).init({\n lng: 'ru', // langue par défaut\n fallbackLng: 'en', // langue de secours\n backend: {\n loadPath: './locales/{{lng}}/{{ns}}.json' // chemin vers les fichiers de traduction\n },\n interpolation: {\n escapeValue: false // ne pas échapper le HTML (pour Node.js)\n }\n});\n\nmodule.exports = i18next;\n\nStructure des fichiers de traduction
\n\nCréez un dossier locales à la racine du projet. À l'intérieur, pour chaque langue, créez un sous-dossier (par exemple, en, ru, de). Dans chaque sous-dossier, placez des fichiers JSON contenant les traductions. On utilise généralement un seul fichier translation.json par langue, mais il est possible de les diviser en espaces de noms (namespaces) pour plus de modularité.
Exemple de fichier locales/ru/translation.json :
{\n "welcome": "Добро пожаловать на наш сайт!",\n "greeting": "Привет, {{name}}!",\n "items": "{{count}} элемент",\n "items_plural": "{{count}} элементов",\n "menu": {\n "home": "Главная",\n "about": "О нас",\n "contact": "Контакты"\n }\n}\n\nExemple de fichier locales/en/translation.json :
{\n "welcome": "Welcome to our website!",\n "greeting": "Hello, {{name}}!",\n "items": "{{count}} item",\n "items_plural": "{{count}} items",\n "menu": {\n "home": "Home",\n "about": "About",\n "contact": "Contact"\n }\n}\n\nFonctionnalités principales d'i18next
\n\nTraduction simple
\n\nPour obtenir une traduction, utilisez la fonction t() (de "translate") :
const i18next = require('./i18n');\n\n// Initialisation asynchrone (dans un projet réel, attendez que ce soit prêt)\ni18next.t('welcome'); // "Добро пожаловать на наш сайт!" (si lng: 'ru')\n\nInterpolation de variables
\n\nInsérez des valeurs dynamiques dans les chaînes à l'aide de doubles accolades :
\n\ni18next.t('greeting', { name: 'Алексей' });\n// Résultat : "Привет, Алексей!"\n\nPluralisation
\n\nLa bibliothèque sélectionne automatiquement la forme plurielle correcte en fonction des règles de la langue. Pour cela, ajoutez des clés avec le suffixe _plural :
i18next.t('items', { count: 1 }); // "1 элемент"\ni18next.t('items', { count: 5 }); // "5 элементов"\n\nPour l'anglais, la règle est plus simple (un élément — item, plusieurs — items). Pour le russe, i18next utilise des règles de pluralisation intégrées qui prennent en compte les nombres 1, 2-4, 5-20, etc.
\n\nClés imbriquées et es
Aussi dans la bibliothèque
Mise en cache en C++ : Redis, Memcached et solutions intégrées
ORM pour TypeScript : comparaison de TypeORM, Prisma et MikroORM
PHP-DI pour PHP : guide complet avec exemples
Bibliothèque standard Kotlin : aperçu complet et exemples
Traitement des images en PHP : redimensionnement, recadrage et optimisation avec GD et Imagick