Internationalisierung (i18n) in JavaScript (Node.js)
Internationalisierung (abgekürzt i18n – vom englischen „internationalization“, wobei 18 die Anzahl der Buchstaben zwischen dem ersten „i“ und dem letzten „n“ angibt) ist der Prozess des Entwerfens und Entwickelns von Software, sodass sie leicht an verschiedene Sprachen und Regionen angepasst werden kann, ohne Änderungen am Code vorzunehmen. Im Node.js-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, die diese Aufgabe erheblich vereinfachen. In diesem Artikel betrachten wir die beiden beliebtesten: i18next und node-polyglot.
Warum ist Internationalisierung wichtig?
Moderne Webanwendungen und Serverdienste arbeiten oft mit Benutzern aus verschiedenen Ländern. Die Unterstützung mehrerer Sprachen verbessert die Benutzerfreundlichkeit (UX) und erweitert die Zielgruppe. Ohne i18n müssten Entwickler Zeichenfolgen fest in einer Sprache codieren, was die Unterstützung von Mehrsprachigkeit äußerst aufwendig und fehleranfällig macht.
Die Hauptaufgaben, die von i18n-Bibliotheken in Node.js gelöst werden:
- Unterstützung von Übersetzungsdateien (normalerweise JSON oder YAML).
- Pluralisierung (korrekte Deklination von Wörtern je nach Anzahl: „1 Tasse Kaffee“, „2 Tassen Kaffee“, „5 Tassen Kaffee“).
- Interpolation von Variablen in Zeichenfolgen (z. B. „Hallo, {{name}}!“).
- Unterstützung von verschachtelten Schlüsseln zur Strukturierung von Übersetzungen.
- Automatische Erkennung der Benutzersprache (über HTTP-Header, Cookies, Subdomains).
Die Bibliothek i18next
i18next ist wohl die beliebteste und funktionsreichste Bibliothek für Internationalisierung in der JavaScript-Welt. Sie funktioniert sowohl im Browser als auch auf dem Node.js-Server. i18next bietet ein reichhaltiges Ökosystem an Plugins, einschließlich Integration mit React, Vue, Express und anderen Frameworks.
Installation und grundlegende Einrichtung
// Installation über npmnpm install i18nextErstellen wir Übersetzungsdateien. Üblicherweise werden sie im Ordner locales gespeichert:
locales/ru/translation.json
{ "greeting": "Hallo, {{name}}!", "coffee": "Sie haben {{count}} Tasse Kaffee getrunken", "coffee_plural": "Sie haben {{count}} Tassen Kaffee getrunken", "menu": { "home": "Startseite", "about": "Über uns" }}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" }}Jetzt initialisieren wir i18next in der Anwendung:
const i18next = require('i18next');const fs = require('fs');const path = require('path');
// Übersetzungen aus Dateien ladenfunction loadTranslation(lng) { const filePath = path.join(__dirname, 'locales', lng, 'translation.json'); return JSON.parse(fs.readFileSync(filePath, 'utf8'));}
i18next.init({ lng: 'ru', // Standardsprache fallbackLng: 'en', // Ersatzsprache resources: { ru: { translation: loadTranslation('ru') }, en: { translation: loadTranslation('en') } }, interpolation: { escapeValue: false // Für Node.js kein HTML-Escaping erforderlich }});
// Verwendungconsole.log(i18next.t('greeting', { name: 'Alexei' }));// Ausgabe: Hallo, Alexei!
console.log(i18next.t('coffee', { count: 1 }));// Ausgabe: Sie haben 1 Tasse Kaffee getrunken
console.log(i18next.t('coffee', { count: 5 }));// Ausgabe: Sie haben 5 Tassen Kaffee getrunken
console.log(i18next.t('menu.home'));// Ausgabe: StartseiteSprachwechsel im laufenden Betrieb
i18next.changeLanguage('en');console.log(i18next.t('greeting', { name: 'Alex' }));// Ausgabe: Hello, Alex!Die Bibliothek node-polyglot
node-polyglot ist eine leichte und einfache Alternative zu i18next. Sie eignet sich ideal für kleinere Projekte oder wenn nicht
Auch in der Bibliothek
OAuth-Client für TypeScript: Integration der Autorisierung in Webanwendungen
Arbeiten mit Daten in Kotlin: Bibliotheken und Werkzeuge für die Entwicklung
Node.js-Überwachung: Tools und Bibliotheken für Observability
E-Mail-Versand in C++: Bibliotheken und Codebeispiele