Internationalisation (i18n) en JavaScript (Node.js)
L'internationalisation (en abrégé 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 de manière à pouvoir les adapter facilement à différentes langues et régions sans modifier le code. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes qui simplifient considérablement cette tâche. Dans cet article, nous examinerons les deux plus populaires : i18next et node-polyglot.
Pourquoi l'internationalisation est-elle nécessaire ?
Les applications web modernes et les services serveur travaillent souvent avec des utilisateurs de différents pays. La prise en charge de plusieurs langues améliore l'expérience utilisateur (UX) et élargit l'audience. Sans i18n, les développeurs devraient coder en dur les chaînes dans une seule langue, ce qui rend la gestion du multilinguisme extrêmement laborieuse et sujette aux erreurs.
Les principales tâches résolues par les bibliothèques i18n dans Node.js :
- Prise en charge des fichiers de traduction (généralement JSON ou YAML).
- Pluralisation (déclinaison correcte des mots en fonction du nombre : « 1 café », « 2 cafés », « 5 cafés »).
- Interpolation de variables dans les chaînes (par exemple, « Bonjour, {{name}} ! »).
- Prise en charge des clés imbriquées pour organiser la structure des traductions.
- Détection automatique de la langue de l'utilisateur (via les en-têtes HTTP, les cookies, les sous-domaines).
Bibliothèque i18next
i18next est sans doute la bibliothèque d'internationalisation la plus populaire et la plus fonctionnelle dans le monde JavaScript. Elle fonctionne à la fois dans le navigateur et sur le serveur Node.js. i18next offre un riche écosystème de plugins, y compris l'intégration avec React, Vue, Express et d'autres frameworks.
Installation et configuration de base
// Installation via npmnpm install i18nextCréons les fichiers de traduction. Ils sont généralement stockés dans le dossier locales :
locales/fr/translation.json
{ "greeting": "Bonjour, {{name}} !", "coffee": "Vous avez bu {{count}} tasse de café", "coffee_plural": "Vous avez bu {{count}} tasses de café", "menu": { "home": "Accueil", "about": "À propos" }}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" }}Maintenant, initialisons i18next dans l'application :
const i18next = require('i18next');const fs = require('fs');const path = require('path');
// Chargement des traductions depuis les fichiersfunction loadTranslation(lng) { const filePath = path.join(__dirname, 'locales', lng, 'translation.json'); return JSON.parse(fs.readFileSync(filePath, 'utf8'));}
i18next.init({ lng: 'fr', // langue par défaut fallbackLng: 'en', // langue de secours resources: { fr: { translation: loadTranslation('fr') }, en: { translation: loadTranslation('en') } }, interpolation: { escapeValue: false // pour Node.js, pas besoin d'échapper le HTML }});
// Utilisationconsole.log(i18next.t('greeting', { name: 'Alexandre' }));// Affichage : Bonjour, Alexandre !
console.log(i18next.t('coffee', { count: 1 }));// Affichage : Vous avez bu 1 tasse de café
console.log(i18next.t('coffee', { count: 5 }));// Affichage : Vous avez bu 5 tasses de café
console.log(i18next.t('menu.home'));// Affichage : AccueilChangement de langue à la volée
i18next.changeLanguage('en');console.log(i18next.t('greeting', { name: 'Alex' }));// Affichage : Hello, Alex!Bibliothèque node-polyglot
node-polyglot est une alternative légère et simple à i18next. Elle est idéale pour les petits projets ou lorsque