TacoTranslate
/
DokumentationPreise
 
Anleitung
04. Mai

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 wichtiger, Anwendungen zu entwickeln, die Nutzer aus verschiedenen Ländern und Kulturen ansprechen können. Eine der wichtigsten Methoden, 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 Ihrer React Next.js-Anwendung Internationalisierung hinzufügen, inklusive serverseitigem Rendering. TL;DR: Siehe das vollständige Beispiel hier.

Diese Anleitung richtet sich an 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 Internationalisierung in Ihrer Next.js-Anwendung zu implementieren, wählen wir zunächst eine i18n-Bibliothek. Es gibt mehrere beliebte Bibliotheken, darunter next-intl. In diesem Beispiel werden wir jedoch TacoTranslate.

TacoTranslate übersetzt Ihre Strings automatisch mit modernster KI in jede Sprache und erspart Ihnen die mühsame Verwaltung von JSON-Dateien.

Installieren wir es mit npm in Ihrem Terminal:

npm install tacotranslate

Schritt 2: Erstellen Sie ein kostenloses TacoTranslate-Konto

Jetzt, wo Sie das Modul installiert haben, ist es an der Zeit, Ihr TacoTranslate-Konto, ein Übersetzungsprojekt und die zugehörigen API-Schlüssel zu erstellen. Erstellen Sie hier ein Konto. Es ist kostenlos und Sie müssen keine Kreditkarte angeben.

Erstellen Sie in der TacoTranslate-Benutzeroberfläche ein Projekt und navigieren Sie zur Registerkarte „API-Schlüssel“. Erstellen Sie 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. Sie könnten sie zum Beispiel in eine .env Datei im Stammverzeichnis Ihres Projekts hinzufügen.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Stelle sicher, dass der geheime read/write API‑Schlüssel niemals an clientseitige Produktionsumgebungen weitergegeben wird.

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 auf en für Englisch.
  • TACOTRANSLATE_ORIGIN: Der „Ordner“, in dem Ihre Strings gespeichert werden, z. B. die URL Ihrer Website. Hier erfahren Sie mehr über Origins.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Schritt 3: TacoTranslate einrichten

Um TacoTranslate in Ihre Anwendung zu integrieren, müssen Sie einen Client mit den zuvor genannten API-Schlüsseln erstellen. Erstellen Sie beispielsweise eine Datei namens /tacotranslate-client.js.

/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. Erstelle nun eine Datei namens /app/[locale]/tacotranslate.tsx, in der wir den TacoTranslate Provider implementieren.

/app/[locale]/tacotranslate.tsx
'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 'use client';, das darauf hinweist, dass es sich um eine Client-Komponente handelt.

Da der Context-Provider jetzt einsatzbereit ist, erstellen Sie eine Datei namens /app/[locale]/layout.tsx, das Root-Layout unserer Anwendung. Beachten Sie, dass dieser Pfad einen Ordner verwendet, der Dynamic Routes nutzt, wobei [locale] der dynamische Parameter ist.

/app/[locale]/layout.tsx
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 Wichtigste hier 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.

Jetzt erstellen wir unsere erste Seite! Erstellen Sie eine Datei namens /app/[locale]/page.tsx.

/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 die Nutzererfahrung erheblich, indem übersetzte Inhalte sofort angezeigt werden, statt zunächst einen kurzen Moment nicht übersetzter Inhalte anzuzeigen. Außerdem können wir clientseitige Netzwerkanfragen vermeiden, da uns bereits die Übersetzungen vorliegen, die wir für die gerade vom Nutzer betrachtete Seite benötigen.

Um serverseitiges Rendering einzurichten, erstellen oder ändern Sie /next.config.js:

/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};
};

Passe die Prüfung isProduction an deine Konfiguration an. Wenn true, zeigt TacoTranslate den öffentlichen API-Schlüssel an. Wenn wir uns in einer lokalen, Test- oder Staging-Umgebung befinden (isProduction is false), verwenden wir den geheimen read/write API-Schlüssel, um sicherzustellen, dass neue Strings zur Übersetzung gesendet werden.

Um sicherzustellen, dass Routing und Weiterleitungen wie erwartet funktionieren, müssen wir eine Datei namens /middleware.ts erstellen. Mit Middleware können wir Benutzer zu Seiten weiterleiten, die in ihrer bevorzugten Sprache angezeigt werden.

/middleware.ts
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 der Client-Seite können Sie das locale Cookie ändern, um die bevorzugte Sprache des Nutzers zu ändern. Bitte sehen Sie sich den vollständigen Beispielcode an, um Ideen zu erhalten, wie Sie das umsetzen können!

Schritt 5: Bereitstellen und testen!

Fertig! Ihre React-Anwendung wird nun automatisch übersetzt, wenn Sie beliebige Strings zu einer Translate Komponente hinzufü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, ein geschlossenes und gesichertes Staging-Umfeld einzurichten, in dem Sie Ihre Produktionsanwendung mit einem solchen API-Schlüssel testen und vor dem Livegang neue Strings hinzufügen können. Dadurch wird verhindert, dass jemand Ihren geheimen API-Schlüssel stiehlt und dadurch möglicherweise Ihr Übersetzungsprojekt durch das Hinzufügen neuer, nicht zusammenhängender Strings aufbläht.

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!

Ein Produkt von NattskiftetHergestellt in Norwegen