Wie man Internationalisierung in einer Next.js-Anwendung implementiert, die den App Router verwendet
Machen Sie Ihre React-Anwendung zugänglicher und erschließen Sie neue Märkte mit Internationalisierung (i18n).
Da die Welt immer stärker globalisiert wird, ist es für Webentwickler zunehmend wichtig, Anwendungen zu erstellen, die Nutzer aus verschiedenen Ländern und Kulturen ansprechen können. Eine der wichtigsten Möglichkeiten, dies zu erreichen, ist die Internationalisierung (i18n), die es Ihnen ermöglicht, Ihre Anwendung an verschiedene Sprachen, Währungen und Datumsformate anzupassen.
In diesem Artikel zeigen wir, wie Sie Internationalisierung in Ihre React Next.js-Anwendung integrieren — inklusive serverseitigem Rendering. TL;DR: Sehen Sie hier das vollständige Beispiel.
Diese Anleitung gilt für Next.js-Anwendungen, die den App Router verwenden.
Wenn Sie den Pages Router verwenden, lesen Sie stattdessen diese Anleitung.
Schritt 1: Installieren Sie eine i18n-Bibliothek
Um die Internationalisierung Ihrer Next.js-Anwendung zu implementieren, wählen wir zuerst eine i18n-Bibliothek. Es gibt mehrere beliebte Bibliotheken, darunter next-intl. In diesem Beispiel werden wir jedoch TacoTranslate verwenden.
TacoTranslate übersetzt Ihre Strings automatisch in jede Sprache mithilfe modernster KI und befreit Sie von der mühsamen Verwaltung von JSON-Dateien.
Installieren wir es mit npm in Ihrem Terminal:
npm install tacotranslateSchritt 2: Erstellen Sie ein kostenloses TacoTranslate-Konto
Jetzt, wo Sie das Modul installiert haben, ist es Zeit, Ihr TacoTranslate-Konto, ein Übersetzungsprojekt und die zugehörigen API-Schlüssel zu erstellen. Erstellen Sie hier ein Konto. Es ist kostenlos und erfordert keine Angabe einer Kreditkarte.
Erstelle innerhalb der TacoTranslate-Anwendungsoberfläche ein Projekt und navigiere zur Registerkarte "API-Schlüssel". Erstelle einen read Schlüssel und einen read/write Schlüssel. Wir speichern sie als Umgebungsvariablen. Der read Schlüssel ist das, was wir public nennen, und der read/write Schlüssel ist secret. Zum Beispiel könntest du sie in eine .env Datei im Stammverzeichnis deines Projekts einfügen.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Stellen Sie sicher, dass der geheime read/write API‑Schlüssel niemals in clientseitige Produktionsumgebungen gelangt.
Wir fügen außerdem zwei weitere Umgebungsvariablen hinzu: TACOTRANSLATE_DEFAULT_LOCALE und TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: Der standardmäßige Fallback‑Locale‑Code. In diesem Beispiel setzen wir ihn aufenfür Englisch.TACOTRANSLATE_ORIGIN: Der „Ordner“, in dem Ihre Strings gespeichert werden, z. B. die URL Ihrer Website. Erfahren Sie hier mehr über Origins.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comSchritt 3: TacoTranslate einrichten
Um TacoTranslate in Ihre Anwendung zu integrieren, müssen Sie einen Client erstellen, der die zuvor erstellten API‑Schlüssel verwendet. Erstellen Sie beispielsweise eine Datei namens /tacotranslate-client.js.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY,
projectLocale:
process.env.TACOTRANSLATE_IS_PRODUCTION === 'true'
? process.env.TACOTRANSLATE_PROJECT_LOCALE
: undefined,
});
module.exports = tacoTranslate;Wir werden in Kürze automatisch TACOTRANSLATE_API_KEY und TACOTRANSLATE_PROJECT_LOCALE definieren.
Das Erstellen des Clients in einer separaten Datei macht es einfach, ihn später wiederzuverwenden. getLocales ist nur eine Hilfsfunktion mit eingebauter Fehlerbehandlung. Erstellen Sie nun eine Datei namens /app/[locale]/tacotranslate.tsx, in der wir den TacoTranslate Provider implementieren werden.
'use client';
import React, {type ReactNode} from 'react';
import {
type TranslationContextProperties,
TacoTranslate as ImportedTacoTranslate,
} from 'tacotranslate/react';
import tacoTranslateClient from '@/tacotranslate-client';
export default function TacoTranslate({
locale,
origin,
localizations,
children,
}: TranslationContextProperties & {
readonly children: ReactNode;
}) {
return (
<ImportedTacoTranslate
client={tacoTranslateClient}
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</ImportedTacoTranslate>
);
}Beachte das 'use client';, das darauf hinweist, dass dies eine Client-Komponente ist.
Da der Context-Provider nun einsatzbereit ist, erstellen Sie eine Datei namens /app/[locale]/layout.tsx, das Root-Layout in unserer Anwendung. Beachten Sie, dass sich in diesem Pfad ein Ordner befindet, der Dynamic Routes nutzt, wobei [locale] der dynamische Parameter ist.
import React, {type ReactNode} from 'react';
import {type Locale, isRightToLeftLocaleCode} from 'tacotranslate';
import './global.css';
import tacoTranslateClient from '@/tacotranslate-client';
import TacoTranslate from './tacotranslate';
export async function generateStaticParams() {
const locales = await tacoTranslateClient.getLocales();
return locales.map((locale) => ({locale}));
}
type RootLayoutParameters = {
readonly params: Promise<{locale: Locale}>;
readonly children: ReactNode;
};
export default async function RootLayout({params, children}: RootLayoutParameters) {
const {locale} = await params;
const origin = process.env.TACOTRANSLATE_ORIGIN;
const localizations = await tacoTranslateClient.getLocalizations({
locale,
origins: [origin /* , other origins to fetch */],
});
return (
<html lang={locale} dir={isRightToLeftLocaleCode(locale) ? 'rtl' : 'ltr'}>
<body>
<TacoTranslate
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</TacoTranslate>
</body>
</html>
);
}Das Erste, das hier zu beachten ist, ist, dass wir unseren Dynamic Route Parameter [locale] verwenden, um Übersetzungen für diese Sprache abzurufen. Zusätzlich sorgt generateStaticParams dafür, dass alle Sprachcodes, die Sie für Ihr Projekt aktiviert haben, vorgerendert werden.
Lass uns jetzt unsere erste Seite erstellen! Erstelle eine Datei namens /app/[locale]/page.tsx.
import React from 'react';
import {Translate} from 'tacotranslate/react';
export const revalidate = 60;
export default async function Page() {
return (
<Translate string="Hello, world!" />
);
}Beachte die revalidate Variable, die Next.js anweist, die Seite nach 60 Sekunden neu zu erstellen und deine Übersetzungen auf dem neuesten Stand zu halten.
Schritt 4: Serverseitiges Rendering implementieren
TacoTranslate unterstützt serverseitiges Rendering. Das verbessert das Nutzererlebnis erheblich, indem übersetzte Inhalte sofort angezeigt werden, statt zuerst einen kurzen Moment unübersetzter Inhalte zu zeigen. Zusätzlich können wir Netzwerkaufrufe auf der Client-Seite überspringen, weil wir bereits die Übersetzungen für die Seite haben, die der Nutzer gerade ansieht.
Um serverseitiges Rendering einzurichten, erstellen oder ändern Sie /next.config.js:
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = await withTacoTranslate(
{},
{
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
}
);
// NOTE: Remove i18n from config when using the app router
return {...config, i18n: undefined};
};Passen Sie die Prüfung isProduction an Ihre Konfiguration an. Wenn true, zeigt TacoTranslate den öffentlichen API-Schlüssel an. Befinden wir uns in einer lokalen, Test- oder Staging-Umgebung (isProduction is false), verwenden wir den geheimen read/write API-Schlüssel, um sicherzustellen, dass neue Strings zur Übersetzung gesendet werden.
Um sicherzustellen, dass das Routing und die Weiterleitungen wie erwartet funktionieren, müssen wir eine Datei namens /middleware.ts erstellen. Mithilfe von Middleware können wir Benutzer auf Seiten in ihrer bevorzugten Sprache umleiten.
import {type NextRequest} from 'next/server';
import {middleware as tacoTranslateMiddleware} from 'tacotranslate/next';
import tacoTranslate from '@/tacotranslate-client';
export const config = {
matcher: ['/((?!api|_next|favicon.ico).*)'],
};
export async function middleware(request: NextRequest) {
return tacoTranslateMiddleware(tacoTranslate, request);
}Stellen Sie sicher, dass Sie den matcher gemäß der Next.js Middleware-Dokumentation einrichten.
Auf dem Client können Sie das locale Cookie ändern, um die vom Benutzer bevorzugte Sprache festzulegen. Bitte sehen Sie sich den vollständigen Beispielcode an, um Anregungen zu erhalten, wie das funktioniert!
Schritt 5: Bereitstellen und testen!
Fertig! Ihre React-Anwendung wird nun automatisch übersetzt, sobald Sie beliebige Strings in eine Translate Komponente einfügen. Beachten Sie, dass nur Umgebungen mit read/write Berechtigungen für den API-Schlüssel neue Strings erstellen können, die übersetzt werden sollen. Wir empfehlen, eine geschlossene und gesicherte Staging-Umgebung einzurichten, in der Sie Ihre Produktionsanwendung mit einem solchen API-Schlüssel testen und vor dem Livegang neue Strings hinzufügen. Dadurch verhindern Sie, dass jemand Ihren geheimen API-Schlüssel stiehlt und möglicherweise Ihr Übersetzungsprojekt aufbläht, indem neue, nicht verwandte Strings hinzugefügt werden.
Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the Pages Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.
TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!