Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren
Versionshistorie
- Erste Versionv7.0.61.11.2025
Der Inhalt dieser Seite wurde mit einer KI übersetzt.
Den englischen Originaltext ansehenWenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.
GitHub-Link zur DokumentationMarkdown des Dokuments in die Zwischenablage kopieren
Wie Sie Ihre Next.js-Anwendung mit next-i18next im Jahr 2025 internationalisieren
Inhaltsverzeichnis
Was ist next-i18next?
next-i18next ist eine beliebte Internationalisierungslösung (i18n) für Next.js-Anwendungen. Während das ursprüngliche next-i18next-Paket für den Pages Router entwickelt wurde, zeigt Ihnen diese Anleitung, wie Sie i18next mit dem modernen App Router direkt mit i18next und react-i18next implementieren.
Mit diesem Ansatz können Sie:
- Übersetzungen organisieren durch die Verwendung von Namespaces (z. B.
common.json,about.json) für eine bessere Inhaltsverwaltung. - Übersetzungen effizient laden, indem nur die für jede Seite benötigten Namespaces geladen werden, was die Bundle-Größe reduziert.
- Sowohl Server- als auch Client-Komponenten unterstützen mit korrektem SSR- und Hydrations-Handling.
- TypeScript-Unterstützung sicherstellen mit typsicherer Konfiguration der Locale und der Übersetzungsschlüssel.
- Für SEO optimieren mit korrekten Metadaten, Sitemap und Internationalisierung von robots.txt.
Als Alternative können Sie auch die next-intl Anleitung oder direkt Intlayer verwenden.
Siehe den Vergleich in next-i18next vs next-intl vs Intlayer.
Praktiken, die Sie befolgen sollten
Bevor wir in die Implementierung einsteigen, hier einige Praktiken, die Sie befolgen sollten:
- HTML-Attribute
langunddirsetzen - Setzen Sie die HTML-Attribute
langunddirBerechnen Sie in Ihrem LayoutdirmitgetLocaleDirection(locale)und setzen Sie<html lang={locale} dir={dir}>für eine korrekte Barrierefreiheit und SEO. - Nach Namespace Nachrichten aufteilen
Organisieren Sie JSON-Dateien pro Locale und Namespace (z. B.
common.json,about.json), um nur das zu laden, was Sie benötigen. - Client-Payload minimieren
Senden Sie auf Seiten nur die benötigten Namespaces an
NextIntlClientProvider(z. B.pick(messages, ['common', 'about'])). - Bevorzugen Sie statische Seiten Verwenden Sie statische Seiten so oft wie möglich für bessere Leistung und SEO.
- I18n in Server-Komponenten
Server-Komponenten, wie Seiten oder alle Komponenten, die nicht als
clientmarkiert sind, sind statisch und können zur Build-Zeit vorgerendert werden. Daher müssen wir die Übersetzungsfunktionen als Props an sie übergeben. - TypeScript-Typen einrichten
- TypeScript-Typen einrichten
Für Ihre Locales, um Typensicherheit in Ihrer gesamten Anwendung zu gewährleisten. - Proxy für Weiterleitungen
Verwenden Sie einen Proxy, um die Locale-Erkennung und das Routing zu handhaben und den Benutzer zur entsprechenden URL mit Locale-Präfix weiterzuleiten. - Internationalisierung Ihrer Metadaten, Sitemap, robots.txt
Internationalisieren Sie Ihre Metadaten, Sitemap und robots.txt mit der von Next.js bereitgestellten FunktiongenerateMetadata, um eine bessere Auffindbarkeit durch Suchmaschinen in allen Locales sicherzustellen. - Links lokalisieren
Lokalisieren Sie Links mit derLink-Komponente, um den Benutzer zur entsprechenden URL mit Locale-Präfix weiterzuleiten. Dies ist wichtig, um die Auffindbarkeit Ihrer Seiten in allen Locales zu gewährleisten. - Automatisieren Sie Tests und Übersetzungen
Automatisierte Tests und Übersetzungen helfen, Zeit bei der Pflege Ihrer mehrsprachigen Anwendung zu sparen.
Siehe unsere Dokumentation, die alles auflistet, was Sie über Internationalisierung und SEO wissen müssen: Internationalisierung (i18n) mit next-intl.
Schritt-für-Schritt-Anleitung zur Einrichtung von i18next in einer Next.js-Anwendung
Siehe Application Template auf GitHub.
Hier ist die Projektstruktur, die wir erstellen werden:
Kopieren Sie den Code in die Zwischenablage
Abhängigkeiten installieren
Installieren Sie die notwendigen Pakete mit npm:
bashCode kopierenKopieren Sie den Code in die Zwischenablage
- i18next: Das zentrale Internationalisierungs-Framework, das das Laden und Verwalten von Übersetzungen übernimmt.
- react-i18next: React-Bindings für i18next, die Hooks wie
useTranslationfür Client-Komponenten bereitstellen. - i18next-resources-to-backend: Ein Plugin, das das dynamische Laden von Übersetzungsdateien ermöglicht, sodass Sie nur die benötigten Namespaces laden können.
Konfigurieren Sie Ihr Projekt
Erstellen Sie eine Konfigurationsdatei, um Ihre unterstützten Sprachen, die Standardsprache und Hilfsfunktionen für die URL-Lokalisierung zu definieren. Diese Datei dient als einzige Quelle der Wahrheit für Ihre i18n-Einrichtung und gewährleistet Typensicherheit in Ihrer gesamten Anwendung.
Die Zentralisierung Ihrer Sprachkonfiguration verhindert Inkonsistenzen und erleichtert das Hinzufügen oder Entfernen von Sprachen in der Zukunft. Die Hilfsfunktionen sorgen für eine konsistente URL-Generierung für SEO und Routing.
i18n.config.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Übersetzungs-Namespaces zentralisieren
Erstellen Sie eine einzige Quelle der Wahrheit für jeden Namespace, den Ihre Anwendung bereitstellt. Die Wiederverwendung dieser Liste hält Server-, Client- und Tooling-Code synchron und ermöglicht eine starke Typisierung für Übersetzungshilfen.
src/i18n.namespaces.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Starke Typisierung der Übersetzungsschlüssel mit TypeScript
Erweitern Sie
i18next, um auf Ihre kanonischen Sprachdateien (normalerweise Englisch) zu verweisen. TypeScript leitet dann gültige Schlüssel pro Namespace ab, sodass Aufrufe vont()durchgängig überprüft werden.src/types/i18next.d.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Tipp: Speichere diese Deklaration unter
src/types(erstelle den Ordner, falls er nicht existiert). Next.js inkludiertsrcbereits in dertsconfig.json, sodass die Erweiterung automatisch erkannt wird. Falls nicht, füge Folgendes zu deinertsconfig.jsonDatei hinzu:tsconfig.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
Damit kannst du dich auf Autovervollständigung und Kompilierzeitprüfungen verlassen:
tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Serverseitige i18n-Initialisierung einrichten
Erstellen Sie eine serverseitige Initialisierungsfunktion, die Übersetzungen für Server-Komponenten lädt. Diese Funktion erstellt eine separate i18next-Instanz für das serverseitige Rendering und stellt sicher, dass die Übersetzungen vor dem Rendern geladen werden.
Server-Komponenten benötigen ihre eigene i18next-Instanz, da sie in einem anderen Kontext als Client-Komponenten ausgeführt werden. Das Vorladen von Übersetzungen auf dem Server verhindert das Aufblitzen nicht übersetzter Inhalte und verbessert die SEO, indem sichergestellt wird, dass Suchmaschinen übersetzte Inhalte sehen.
src/app/i18n/server.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Erstellen des Client-seitigen i18n Providers
Erstellen Sie einen Client-Komponenten-Provider, der Ihre Anwendung mit dem i18next-Kontext umschließt. Dieser Provider erhält vorab geladene Übersetzungen vom Server, um ein Aufblitzen nicht übersetzter Inhalte (FOUC) zu verhindern und doppelte Abrufe zu vermeiden.
Client-Komponenten benötigen ihre eigene i18next-Instanz, die im Browser läuft. Durch die Annahme vorab geladener Ressourcen vom Server gewährleisten wir eine nahtlose Hydrierung und verhindern das Aufblitzen von Inhalten. Der Provider verwaltet außerdem dynamisch Sprachwechsel und das Laden von Namespaces.
src/components/I18nProvider.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Definieren dynamischer Locale-Routen
Richte dynamisches Routing für Locales ein, indem du im App-Ordner ein Verzeichnis
[locale]erstellst. Dadurch kann Next.js locale-basiertes Routing handhaben, bei dem jede Locale ein URL-Segment wird (z. B./en/about,/fr/about).Die Verwendung dynamischer Routen ermöglicht es Next.js, statische Seiten für alle Locales zur Build-Zeit zu generieren, was die Leistung und SEO verbessert. Die Layout-Komponente setzt die HTML-Attribute
langunddirbasierend auf der Locale, was für Barrierefreiheit und Suchmaschinenverständnis entscheidend ist.src/app/[locale]/layout.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Erstellen Sie Ihre Übersetzungsdateien
Erstellen Sie JSON-Dateien für jede Locale und jeden Namespace. Diese Struktur ermöglicht es Ihnen, Übersetzungen logisch zu organisieren und nur das zu laden, was Sie für jede Seite benötigen.
Die Organisation der Übersetzungen nach Namespace (z. B.
common.json,about.json) ermöglicht Code-Splitting und reduziert die Bundle-Größe. So werden nur die Übersetzungen geladen, die für jede Seite benötigt werden, was die Performance verbessert.src/locales/en/common.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/fr/common.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/en/home.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
Organisieren von Übersetzungen nach Namespace (z. B.
common.json,about.json) ermöglicht Code-Splitting und reduziert die Bundle-Größe. Sie laden nur die Übersetzungen, die für jede Seite benötigt werden, was die Leistung verbessert.src/locales/en/common.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/de/common.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/en/home.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/de/home.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/en/about.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
src/locales/de/about.jsonCode kopierenKopieren Sie den Code in die Zwischenablage
Übersetzungen in Ihren Seiten verwenden
Erstellen Sie eine Seitenkomponente, die i18next auf dem Server initialisiert und Übersetzungen sowohl an Server- als auch an Client-Komponenten übergibt. Dies stellt sicher, dass Übersetzungen vor dem Rendern geladen werden und verhindert das Aufblitzen von Inhalten.
Die serverseitige Initialisierung lädt Übersetzungen, bevor die Seite gerendert wird, verbessert SEO und verhindert FOUC (Flash of Unstyled Content). Durch das Übergeben der vorab geladenen Ressourcen an den Client-Provider vermeiden wir doppelte Abfragen und gewährleisten eine reibungslose Hydrierung.
src/app/[locale]/about/index.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Übersetzungen in Client-Komponenten verwenden
Client-Komponenten können den
useTranslationHook verwenden, um auf Übersetzungen zuzugreifen. Dieser Hook bietet Zugriff auf die Übersetzungsfunktion und die i18n-Instanz, wodurch Sie Inhalte übersetzen und auf Locale-Informationen zugreifen können.Client-Komponenten benötigen React-Hooks, um Übersetzungen zu nutzen. Der
useTranslationHook integriert sich nahtlos mit i18next und bietet reaktive Updates, wenn sich die Locale ändert.Stellen Sie sicher, dass die Seite/der Provider nur die benötigten Namespaces enthält (z. B.
about).
Wenn Sie React < 19 verwenden, memoizieren Sie schwere Formatter wieIntl.NumberFormat.src/components/ClientComponent.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Übersetzungen in Server-Komponenten verwenden
Server-Komponenten können keine React-Hooks verwenden, daher erhalten sie Übersetzungen über Props von ihren übergeordneten Komponenten. Dieser Ansatz hält Server-Komponenten synchron und ermöglicht es, sie innerhalb von Client-Komponenten zu verschachteln.
Server-Komponenten, die möglicherweise unter Client-Grenzen verschachtelt sind, müssen synchron sein. Durch das Übergeben von übersetzten Strings und Locale-Informationen als Props vermeiden wir asynchrone Operationen und gewährleisten eine korrekte Darstellung.
src/components/ServerComponent.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Ändern Sie die Sprache Ihres Inhalts
OptionalUm die Sprache Ihres Inhalts in Next.js zu ändern, wird empfohlen, URLs mit Sprachpräfix und Next.js-Links zu verwenden. Das folgende Beispiel liest die aktuelle Sprache aus der Route aus, entfernt sie aus dem Pfadnamen und rendert einen Link pro verfügbarer Sprache.
src/components/LocaleSwitcher.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Erstellen einer lokalisierten Link-Komponente
OptionalDie Wiederverwendung lokalisierter URLs in Ihrer App sorgt für eine konsistente Navigation und ist SEO-freundlich. Verpacken Sie
next/linkin einem kleinen Helfer, der interne Routen mit der aktiven Locale voranstellt, während externe URLs unverändert bleiben.src/components/LocalizedLink.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
Tipp: Da
LocalizedLinkein Drop-in-Ersatz ist, migrieren Sie schrittweise, indem Sie Importe austauschen und die Komponente die sprachspezifischen URLs verwalten lassen.Zugriff auf die aktive Locale innerhalb von Server Actions
OptionalServer Actions benötigen oft die aktuelle Locale für E-Mails, Protokollierung oder Integrationen von Drittanbietern. Kombinieren Sie das von Ihrem Proxy gesetzte Locale-Cookie mit dem
Accept-Language-Header als Fallback.src/app/actions/get-current-locale.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Da der Helfer auf Next.js-Cookies und -Headern basiert, funktioniert er in Route Handlers, Server Actions und anderen serverseitigen Kontexten.
Internationalisieren Sie Ihre Metadaten
OptionalDie Übersetzung von Inhalten ist wichtig, aber das Hauptziel der Internationalisierung ist es, Ihre Website für die Welt sichtbarer zu machen. I18n ist ein unglaublicher Hebel, um die Sichtbarkeit Ihrer Website durch richtiges SEO zu verbessern.
Richtig internationalisierte Metadaten helfen Suchmaschinen zu verstehen, welche Sprachen auf Ihren Seiten verfügbar sind. Dazu gehört das Setzen von hreflang-Meta-Tags, das Übersetzen von Titeln und Beschreibungen sowie die korrekte Festlegung von kanonischen URLs für jede Locale.
Hier ist eine Liste bewährter Praktiken im Hinblick auf mehrsprachiges SEO:
- Setzen Sie hreflang-Meta-Tags im
<head>-Tag, um Suchmaschinen zu helfen, die verfügbaren Sprachen auf der Seite zu verstehen. - Listen Sie alle Seitenübersetzungen in der sitemap.xml unter Verwendung des
http://www.w3.org/1999/xhtmlXML-Schemas auf. - Vergessen Sie nicht, vorangestellte Seiten in der robots.txt auszuschließen (z. B.
/dashboard,/fr/dashboard,/es/dashboard). - Verwenden Sie eine benutzerdefinierte Link-Komponente, um auf die am besten lokalisierte Seite weiterzuleiten (z. B. auf Französisch
<a href="/fr/about">À propos</a>).
Entwickler vergessen oft, ihre Seiten über verschiedene Sprachen hinweg korrekt zu referenzieren. Lassen Sie uns das beheben:
src/app/[locale]/about/layout.tsxCode kopierenKopieren Sie den Code in die Zwischenablage
- Setzen Sie hreflang-Meta-Tags im
Internationalisieren Sie Ihre Sitemap
OptionalErstellen Sie eine Sitemap, die alle Lokalisierungsversionen Ihrer Seiten enthält. Dies hilft Suchmaschinen, alle Sprachversionen Ihrer Inhalte zu entdecken und zu indexieren.
Eine korrekt internationalisierte Sitemap stellt sicher, dass Suchmaschinen alle Sprachversionen Ihrer Seiten finden und indexieren können. Dies verbessert die Sichtbarkeit in internationalen Suchergebnissen.
src/app/sitemap.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Internationalisieren Sie Ihre robots.txt
OptionalErstellen Sie eine robots.txt-Datei, die alle Sprachversionen Ihrer geschützten Routen korrekt behandelt. Dies stellt sicher, dass Suchmaschinen keine Admin- oder Dashboard-Seiten in irgendeiner Sprache indexieren.
Die korrekte Konfiguration der robots.txt für alle Sprachen verhindert, dass Suchmaschinen sensible Seiten in irgendeiner Sprache indexieren. Dies ist entscheidend für Sicherheit und Datenschutz.
src/app/robots.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Middleware für Locale Routing einrichten
OptionalErstellen Sie einen Proxy, der automatisch die bevorzugte Sprache des Benutzers erkennt und ihn zur entsprechenden URL mit Sprachpräfix weiterleitet. Dies verbessert die Benutzererfahrung, indem Inhalte in der bevorzugten Sprache angezeigt werden.
Die Middleware sorgt dafür, dass Benutzer beim Besuch Ihrer Seite automatisch auf ihre bevorzugte Sprache weitergeleitet werden. Außerdem wird die Präferenz des Benutzers in einem Cookie für zukünftige Besuche gespeichert.
src/proxy.tsCode kopierenKopieren Sie den Code in die Zwischenablage
Automatisieren Sie Ihre Übersetzungen mit Intlayer
OptionalIntlayer ist eine kostenlose und Open-Source-Bibliothek, die den Lokalisierungsprozess in Ihrer Anwendung unterstützt. Während i18next das Laden und Verwalten von Übersetzungen übernimmt, hilft Intlayer dabei, den Übersetzungsworkflow zu automatisieren.
Die manuelle Verwaltung von Übersetzungen kann zeitaufwändig und fehleranfällig sein. Intlayer automatisiert das Testen, Erstellen und Verwalten von Übersetzungen, spart Ihnen Zeit und sorgt für Konsistenz in Ihrer gesamten Anwendung.
Intlayer ermöglicht Ihnen:
Deklarieren Sie Ihre Inhalte dort, wo Sie möchten, in Ihrem Codebase Intlayer erlaubt es, Ihre Inhalte dort zu deklarieren, wo Sie möchten, in Ihrer Codebase unter Verwendung von
.content.{ts|js|json}-Dateien. Dies ermöglicht eine bessere Organisation Ihrer Inhalte und sorgt für eine bessere Lesbarkeit und Wartbarkeit Ihrer Codebase.Testen fehlender Übersetzungen Intlayer stellt Testfunktionen bereit, die in Ihre CI/CD-Pipeline oder in Ihre Unit-Tests integriert werden können. Erfahren Sie mehr über das Testen Ihrer Übersetzungen.
Automatisieren Sie Ihre Übersetzungen
Intlayer bietet eine CLI und eine VSCode-Erweiterung, um Ihre Übersetzungen zu automatisieren. Diese können in Ihre CI/CD-Pipeline integriert werden. Erfahren Sie mehr über das Automatisieren Ihrer Übersetzungen.
Sie können Ihren eigenen API-Schlüssel und den KI-Anbieter Ihrer Wahl verwenden. Es werden auch kontextbewusste Übersetzungen bereitgestellt, siehe Inhalt automatisch ausfüllen.- Externe Inhalte verbinden
Automatisieren Sie Ihre Übersetzungen
Intlayer bietet eine CLI und eine VSCode-Erweiterung, um Ihre Übersetzungen zu automatisieren. Diese können in Ihre CI/CD-Pipeline integriert werden. Erfahren Sie mehr über das Automatisieren Ihrer Übersetzungen.
Sie können Ihren eigenen API-Schlüssel und den AI-Anbieter Ihrer Wahl verwenden. Es werden auch kontextbewusste Übersetzungen angeboten, siehe Inhalt automatisch ausfüllen.Externe Inhalte anbinden
Intlayer ermöglicht es Ihnen, Ihre Inhalte mit einem externen Content-Management-System (CMS) zu verbinden. Um diese auf optimierte Weise abzurufen und in Ihre JSON-Ressourcen einzufügen. Erfahren Sie mehr über das Abrufen externer Inhalte.Visueller Editor
Intlayer bietet einen kostenlosen visuellen Editor, um Ihre Inhalte visuell zu bearbeiten. Erfahren Sie mehr über das visuelle Bearbeiten Ihrer Übersetzungen.
Und mehr. Um alle von Intlayer bereitgestellten Funktionen zu entdecken, lesen Sie bitte die Interessen der Intlayer-Dokumentation.
Kommentare
Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.