Internationalisierung (i18n) in JavaScript (Node.js): Die Bibliothek i18next
\n\nInternationalisierung (abgekürzt i18n – von englisch "internationalization", wobei 18 die Anzahl der Buchstaben zwischen dem ersten "i" und dem letzten "n" ist) ist der Prozess des Entwurfs und der Entwicklung von Software, der es ermöglicht, sie an verschiedene Sprachen und regionale Besonderheiten anzupassen, ohne den Quellcode zu ändern. In der modernen Webentwicklung mit Node.js ist die Erstellung mehrsprachiger Anwendungen eine Notwendigkeit, um auf dem globalen Markt Fuß zu fassen.
\n\nEine der beliebtesten und leistungsstärksten Bibliotheken zur Implementierung von i18n im JavaScript-Ökosystem (einschließlich Node.js) ist i18next. Sie bietet eine flexible Architektur, Unterstützung für viele Übersetzungsdateiformate, Interpolation, Pluralbildung und kontextbezogene Übersetzungen. In diesem Artikel werden wir die Installation, Konfiguration und Verwendung von i18next auf der Serverseite im Detail besprechen.
\n\nInstallation und Einbindung
\n\nUm mit i18next in einem Node.js-Projekt zu beginnen, installieren Sie die Bibliothek über npm:
\n\nnpm install i18next\n\nEs wird auch empfohlen, das Paket i18next-fs-backend zu installieren, um Übersetzungsdateien aus dem Dateisystem zu laden:
npm install i18next-fs-backend\n\nErstellen Sie nach der Installation eine Initialisierungsdatei, z. B. i18n.js:
const i18next = require('i18next');\nconst Backend = require('i18next-fs-backend');\n\ni18next.use(Backend).init({\n lng: 'ru', // Standardsprache\n fallbackLng: 'en', // Ausweichsprache\n backend: {\n loadPath: './locales/{{lng}}/{{ns}}.json' // Pfad zu den Übersetzungsdateien\n },\n interpolation: {\n escapeValue: false // HTML nicht escapen (für Node.js)\n }\n});\n\nmodule.exports = i18next;\n\nStruktur der Übersetzungsdateien
\n\nErstellen Sie im Stammverzeichnis des Projekts einen Ordner locales. Erstellen Sie darin für jede Sprache einen Unterordner (z. B. en, ru, de). Platzieren Sie in jedem Unterordner JSON-Dateien mit den Übersetzungen. Üblicherweise wird pro Sprache eine Datei translation.json verwendet, aber Sie können sie zur Modularität auch in Namensräume (namespaces) aufteilen.
Beispiel für die Datei locales/ru/translation.json:
{\n "welcome": "Willkommen auf unserer Website!",\n "greeting": "Hallo, {{name}}!",\n "items": "{{count}} Element",\n "items_plural": "{{count}} Elemente",\n "menu": {\n "home": "Startseite",\n "about": "Über uns",\n "contact": "Kontakt"\n }\n}\n\nBeispiel für die Datei 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\nHauptfunktionen von i18next
\n\nEinfache Übersetzung
\n\nVerwenden Sie die Funktion t() (von "translate"), um eine Übersetzung zu erhalten:
const i18next = require('./i18n');\n\n// Asynchrone Initialisierung (warten Sie in einem echten Projekt auf die Bereitschaft)\ni18next.t('welcome'); // "Willkommen auf unserer Website!" (wenn lng: 'ru')\n\nInterpolation von Variablen
\n\nFügen Sie dynamische Werte mit doppelten geschweiften Klammern in Zeichenfolgen ein:
\n\ni18next.t('greeting', { name: 'Alex' });\n// Ergebnis: "Hallo, Alex!"\n\nPluralbildung
\n\nDie Bibliothek wählt automatisch die richtige Pluralform basierend auf der Sprachregel aus. Fügen Sie dazu Schlüssel mit dem Suffix _plural hinzu:
i18next.t('items', { count: 1 }); // "1 Element"\ni18next.t('items', { count: 5 }); // "5 Elemente"\n\nFür die englische Sprache ist die Regel einfacher (ein Element – item, viele – items). Für Russisch verwendet i18next integrierte Pluralisierungsregeln, die die Zahlen 1, 2-4, 5-20 usw. berücksichtigen.
\n\nVerschachtelte Schlüssel und
Auch in der Bibliothek
Arbeiten mit CSV in Kotlin: Bibliotheken, Parsing und Datenschreiben
Aufgabenwarteschlangen in Rust: Überblick über Bibliotheken für asynchrone Verarbeitung
validator — Datenvalidierung in Rust
E-Mail-Versand mit TypeScript: Bibliotheken und Codebeispiele
Conan C++: Komplette Anleitung mit Beispielen