Internationalisierung (i18n) in TypeScript mit der Bibliothek i18next
\n\nInternationalisierung (i18n) ist der Prozess der Entwicklung einer Anwendung, die sich an verschiedene Sprachen und regionale Standards anpassen kann, ohne den Quellcode zu ändern. Für TypeScript-Anwendungen ist i18next eine der leistungsstärksten und beliebtesten Bibliotheken. Sie unterstützt alle modernen Frameworks (React, Vue, Angular) und bietet erstklassige TypeScript-Unterstützung, was typsichere Übersetzungen ermöglicht.
\n\nInstallation und grundlegende Konfiguration
\n\nInstallieren Sie zunächst die Pakete i18next und die erforderlichen Backends. Im folgenden Beispiel wird ein Datei-Backend zum Laden von JSON-Übersetzungsdateien verwendet:
\n\nnpm install i18next i18next-fs-backend\n# Für React zusätzlich:\nnpm install react-i18next\n\nErstellen Sie eine Konfigurationsdatei i18n.ts:
import i18n from 'i18next';\nimport Backend from 'i18next-fs-backend';\nimport { initReactI18next } from 'react-i18next';\n\ni18n\n .use(Backend)\n .use(initReactI18next)\n .init({\n fallbackLng: 'ru',\n debug: process.env.NODE_ENV === 'development',\n interpolation: {\n escapeValue: false,\n },\n backend: {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n },\n });\n\nexport default i18n;\n\nStruktur der Übersetzungsdateien
\n\nErstellen Sie einen Ordner public/locales mit Unterordnern für jede Sprache. Zum Beispiel:
- \n
public/locales/ru/translation.json\n public/locales/en/translation.json\n
Beispielinhalt der Datei ru/translation.json:
{\n "greeting": "Привет, {{name}}!",\n "items": "У вас {{count}} сообщение",\n "items_plural": "У вас {{count}} сообщений",\n "nested": {\n "title": "Заголовок",\n "description": "Описание"\n }\n}\n\nEnglische Version en/translation.json:
{\n "greeting": "Hello, {{name}}!",\n "items": "You have {{count}} message",\n "items_plural": "You have {{count}} messages",\n "nested": {\n "title": "Title",\n "description": "Description"\n }\n}\n\nTypisierung von Übersetzungen in TypeScript
\n\nEiner der Hauptvorteile von i18next ist die strenge Typisierung. Erstellen Sie eine Datei types/i18n.d.ts:
import 'i18next';\n\ndeclare module 'i18next' {\n interface CustomTypeOptions {\n defaultNS: 'translation';\n resources: {\n translation: {\n greeting: string;\n items: string;\n items_plural: string;\n nested: {\n title: string;\n description: string;\n };\n };\n };\n }\n}\n\nJetzt überprüft TypeScript die Übersetzungsschlüssel zur Kompilierzeit. Wenn Sie versuchen, einen nicht vorhandenen Schlüssel zu verwenden, erhalten Sie einen Fehler.
\n\nVerwendung in React-Komponenten
\n\nDie Bibliothek react-i18next bietet den Hook useTranslation und die Komponente Trans:
import { useTranslation } from 'react-i18next';\n\nfunction Welcome() {\n const { t, i18n } = useTranslation();\n\n const changeLanguage = (lng: string) => {\n i18n.changeLanguage(lng);\n };\n\n return (\n <div>\n <h2>{t('greeting', { name: 'Иван' })}</h2>\n <button onClick={() => changeLanguage('en')}>English</button>\n <button onClick={() => changeLanguage('ru')}>Русский</button>\n </div>\n );\n}\n\nPluralisierung und Interpolation
\n\ni18next unterstützt komplexe Pluralregeln. Im Russischen gibt es drei Formen (1, 2-4, 5+), im Englischen zwei. Die Bibliothek wählt automatisch die richtige Form basierend auf der Anzahl:
\n\n// In der Übersetzungsdatei (ru):\n{\n "apple": "{{count}} яблоко",\n "apple_plural": "{{count}} яблока",\n "apple_plural_2": "{{count}} яблок"\n}\n\n// Verwendung:\nconst