Next.js-Apps mit next-intl internationalisieren
Locale-Routing, serverseitig gerenderte Übersetzungen, RTL-Layouts und hreflang-SEO ohne Client-seitiges Flackern.
Internationalisierung ist eine grundlegende Anforderung für Anwendungen, die globale Zielgruppen bedienen. In der Next.js App Router-Ära haben sich Bibliotheken wie next-intl als De-facto-Standard für die Verwaltung von Übersetzungen, Locale-Routing und SEO über mehrere Sprachen etabliert. Dieser Leitfaden führt durch bewährte Muster für den Aufbau mehrsprachiger React-Anwendungen, die gut performen, in Suchmaschinen ranken und kulturelle Konventionen einschließlich Right-to-Left-Layouts respektieren.
Eine i18n-Strategie für Next.js wählen
Der App Router hat verändert, wie Next.js Internationalisierung handhabt. Die eingebaute i18n-Konfiguration aus dem Pages Router gilt nicht mehr, und Teams müssen eine Bibliothek wählen, die mit dem neuen Routing-Modell integriert. next-intl ist die am weitesten verbreitete Option, weil sie typsichere Nachrichtenformatierung, locale-bewusste Navigation und Middleware-basierte Locale-Erkennung out of the box bietet.
Bei der Bewertung Ihres Ansatzes berücksichtigen Sie diese architektonischen Entscheidungen im Voraus:
- URL-Struktur — Präfix-basiert (
/en/about,/de/about) versus domain-basiert (en.example.com,de.example.com). - Standard-Locale-Handling — Ob die Standardsprache in der URL erscheint oder aus Headern abgeleitet wird.
- Übersetzungsspeicherung — JSON-Dateien, CMS-Integration oder eine Translation-Management-Plattform.
- Fallback-Verhalten — Was passiert, wenn ein Übersetzungsschlüssel in einer sekundären Locale fehlt.
Präfix-basiertes Routing ist der empfohlene Standard für die meisten Anwendungen. Es hält das Deployment einfach, funktioniert mit statischem Hosting und gibt Suchmaschinen klare Signale über Sprachvarianten.
Locale-Routing einrichten
next-intl verwendet Next.js-Middleware, um die bevorzugte Locale des Nutzers zu erkennen und Anfragen auf das entsprechende Locale-Segment umzuschreiben. Die Middleware läuft am Edge und fügt vernachlässigbare Latenz hinzu, während sie sicherstellt, dass jede Seite Inhalte in der korrekten Sprache ausliefert.
// middleware.ts
import createMiddleware from "next-intl/middleware";
import { routing } from "./i18n/routing";
export default createMiddleware(routing);
export const config = {
matcher: ["/", "/(de|en|fr|ar)/:path*"],
};
// i18n/routing.ts
import { defineRouting } from "next-intl/routing";
export const routing = defineRouting({
locales: ["en", "de", "fr", "ar"],
defaultLocale: "en",
localePrefix: "always",
});
Ihre App-Verzeichnisstruktur spiegelt die Locale-Konfiguration wider. Jede Locale erhält ein eigenes Segment unter app/[locale]/, und gemeinsame Layouts umwickeln übersetzte Seiten mit konsistenter Navigation und Footer-Inhalten.
Locale-bewusste Navigation
Hardcoden Sie niemals Pfade in Links. Verwenden Sie die von next-intl bereitgestellten Navigations-Helper, um automatisch locale-präfixierte URLs zu generieren. Dies verhindert defekte Links, wenn Sie Locales hinzufügen oder entfernen, und stellt sicher, dass der aktive Locale-Kontext durch clientseitige Navigation propagiert wird.
import { Link } from "@/i18n/navigation";
export function NavBar() {
return (
<nav>
<Link href="/about">About</Link>
<Link href="/pricing">Pricing</Link>
</nav>
);
}
Übersetzungsnachrichten organisieren
Strukturieren Sie Ihre Nachrichtendateien, damit sie mit Ihrer Anwendung skalieren. Eine flache JSON-Datei funktioniert für kleine Projekte, aber verschachtelte Namespaces verhindern Merge-Konflikte und verbessern die Auffindbarkeit, wenn Ihre Übersetzungsanzahl in die Tausende wächst.
- Gruppieren Sie Nachrichten nach Feature oder Seite —
home.json,checkout.json,errors.json. - Verwenden Sie beschreibende Schlüsselnamen —
checkout.payment.submitButtonstattbtn1. - Halten Sie ICU-Nachrichtenformat-Syntax konsistent für Pluralisierung und Interpolation.
- Etablieren Sie einen Review-Workflow mit Muttersprachlern vor dem Deployment von Übersetzungen.
Laden Sie nur die Namespaces, die eine Seite benötigt, um ungenutzte Übersetzungen nicht auszuliefern. next-intl unterstützt Lazy Loading von Nachrichtenmodulen, was initiale Bundle-Größen handhabbar hält, selbst mit Dutzenden von Locales.
Right-to-Left-Layout-Unterstützung
Die Unterstützung von RTL-Sprachen wie Arabisch und Hebräisch erfordert mehr als das Übersetzen von Strings. Layout-Richtung, Textausrichtung, Icon-Spiegelung und Animationsrichtung müssen sich alle anpassen, wenn die Locale auf eine RTL-Sprache wechselt.
Setzen Sie das dir-Attribut auf Ihrem Root-HTML-Element basierend auf der aktiven Locale:
// app/[locale]/layout.tsx
import { getLocale, getMessages } from "next-intl/server";
const rtlLocales = ["ar", "he", "fa"];
export default async function LocaleLayout({ children, params }) {
const locale = await getLocale();
const direction = rtlLocales.includes(locale) ? "rtl" : "ltr";
return (
<html lang={locale} dir={direction}>
<body>{children}</body>
</html>
);
}
Verwenden Sie CSS Logical Properties in Ihrem gesamten Stylesheet. Ersetzen Sie margin-left durch margin-inline-start, padding-right durch padding-inline-end und text-align: left durch text-align: start. Tailwind CSS v4 enthält Logical-Property-Utilities (ms-4, pe-2), die dies automatisch handhaben.
SEO für mehrsprachige Websites
Suchmaschinen benötigen explizite Signale, um Sprachbeziehungen zwischen Seiten zu verstehen. Ohne korrekte hreflang-Tags und kanonische URLs riskieren Sie Duplicate-Content-Strafen und falsche Locale-Indexierung.
Implementieren Sie diese SEO-Grundlagen:
- hreflang-Link-Tags — Deklarieren Sie jede Sprachvariante jeder Seite im Document Head.
- Kanonische URLs — Jede Locale-Seite sollte auf sich selbst kanonisieren, nicht auf die Standard-Locale.
- Übersetzte Metadaten — Title, Description und Open-Graph-Tags müssen lokalisiert sein, nicht von der Standard-Locale kopiert.
- XML-Sitemaps — Generieren Sie pro-Locale-Sitemaps oder eine einheitliche Sitemap mit hreflang-Annotationen.
- Strukturierte Daten — Lokalisieren Sie JSON-LD-Schema-Markup für Rich-Search-Ergebnisse.
next-intl integriert sich mit der Next.js Metadata API und ermöglicht Ihnen, locale-spezifische Titles und Descriptions in der generateMetadata-Funktion jeder Seite zu definieren. Kombinieren Sie dies mit einem Sitemap-Generator, der über Ihre Locales und Routen iteriert, um umfassende Suchmaschinen-Abdeckung zu produzieren.
Testing und Qualitätssicherung
Internationalisierungs-Bugs sind heimtückisch, weil sie oft nur in spezifischen Locale-Kombinationen erscheinen. Ein fehlender Übersetzungsschlüssel könnte in der Produktion als roher Schlüsselstring gerendert werden. Ein RTL-Layout-Bug könnte die Navigation nur auf Arabisch brechen. Bauen Sie automatisierte Checks in Ihre CI-Pipeline ein, um diese Probleme früh zu erkennen.
- Validieren Sie, dass alle Locales dieselbe Menge an Übersetzungsschlüsseln enthalten.
- Führen Sie visuelle Regressionstests gegen RTL-Locales durch, um Layout-Brüche zu erkennen.
- Testen Sie Locale-Erkennung mit verschiedenen Accept-Language-Header-Kombinationen.
- Verifizieren Sie, dass Datums-, Zahlen- und Währungsformatierung Locale-Konventionen respektiert.
- Prüfen Sie die Seitengröße — stellen Sie sicher, dass das Laden aller Locale-Nachrichten Bundles nicht aufbläht.
Internationalisierung ist eine fortlaufende Verpflichtung, keine einmalige Setup-Aufgabe. Wenn Ihre Anwendung wächst, führen neue Features neue Strings ein, und die Aufrechterhaltung von Übersetzungsparität über Locales hinweg erfordert Disziplin und Tooling. Durch die Übernahme von next-intl mit strukturiertem Locale-Routing, RTL-Unterstützung und SEO-Best-Practices von Anfang an bauen Sie ein Fundament, das elegant skaliert, wenn Ihr Publikum sich über Sprachen und Regionen hinweg erweitert.
Hat es dir gefallen?
Hast du ein Projekt oder eine Idee? Ich würde gern davon hören.
Kontakt aufnehmen