TacoTranslate
/
DocumentatiePrijzen
 
Handleiding
04 mei

Hoe internationalisatie te implementeren in een Next.js-applicatie die gebruikmaakt van de App Router

Maak uw React-applicatie toegankelijker en bereik nieuwe markten met internationalisatie (i18n).

Naarmate de wereld meer geglobaliseerd raakt, wordt het steeds belangrijker voor webontwikkelaars om applicaties te bouwen die kunnen inspelen op gebruikers uit verschillende landen en culturen. Een van de belangrijkste manieren om dit te bereiken is via internationalisatie (i18n), waarmee je jouw applicatie kunt aanpassen aan verschillende talen, valuta en datumnotaties.

In dit artikel bekijken we hoe je internationalisatie kunt toevoegen aan je React Next.js applicatie, inclusief server-side rendering. TL;DR: Zie hier het volledige voorbeeld.

Deze gids is voor Next.js-applicaties die gebruikmaken van de App Router.
Als je de Pages Router gebruikt, bekijk dan in plaats daarvan deze gids.

Stap 1: Installeer een i18n-bibliotheek

Om internationalisatie in je Next.js-applicatie te implementeren, kiezen we eerst een i18n-bibliotheek. Er zijn verschillende populaire bibliotheken, waaronder next-intl. In dit voorbeeld gebruiken we echter TacoTranslate.

TacoTranslate vertaalt je teksten automatisch naar elke taal met behulp van geavanceerde AI, en bevrijdt je van het langdurige beheer van JSON-bestanden.

Laten we het installeren met npm in je terminal:

npm install tacotranslate

Stap 2: Maak een gratis TacoTranslate-account aan

Nu je de module hebt geïnstalleerd, is het tijd om je TacoTranslate-account, een vertaalproject en bijbehorende API-sleutels aan te maken. Maak hier een account aan. Het is gratis en vereist geen creditcard.

Binnen de TacoTranslate applicatie-UI, maak een project aan en navigeer naar het tabblad met API-sleutels. Maak één read sleutel aan en één read/write sleutel. We slaan ze op als omgevingsvariabelen. De read sleutel noemen we public en de read/write sleutel is secret. Je kunt ze bijvoorbeeld toevoegen aan een .env bestand in de root van je project.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Zorg ervoor dat je de geheime read/write API-sleutel nooit lekt naar client-side productieomgevingen.

We voegen ook nog twee omgevingsvariabelen toe: TACOTRANSLATE_DEFAULT_LOCALE en TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: De standaard terugval-locale code. In dit voorbeeld zetten we deze op en voor Engels.
  • TACOTRANSLATE_ORIGIN: De “map” waar je strings worden opgeslagen, zoals de URL van je website. Lees hier meer over origins.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Stap 3: TacoTranslate instellen

Om TacoTranslate in je applicatie te integreren, moet je een client aanmaken met behulp van de eerder genoemde API-sleutels. Maak bijvoorbeeld een bestand met de naam /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;

We zullen binnenkort automatisch TACOTRANSLATE_API_KEY en TACOTRANSLATE_PROJECT_LOCALE definiëren.

Het aanmaken van de client in een apart bestand maakt het gemakkelijk om deze later opnieuw te gebruiken. getLocales is slechts een hulpfunctie met ingebouwde foutafhandeling. Maak nu een bestand aan met de naam /app/[locale]/tacotranslate.tsx, waarin we de TacoTranslate provider zullen implementeren.

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

Let op 'use client'; wat aangeeft dat dit een clientcomponent is.

Met de context provider nu klaar voor gebruik, maak een bestand aan met de naam /app/[locale]/layout.tsx, de root layout in onze applicatie. Let op dat dit pad een map bevat die gebruikmaakt van Dynamic Routes, waarbij [locale] de dynamische parameter is.

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

Het eerste wat hier opvalt is dat we onze Dynamic Route parameter [locale] gebruiken om vertalingen voor die taal op te halen. Daarnaast zorgt generateStaticParams ervoor dat alle locaal codes die je voor je project hebt geactiveerd, vooraf worden gerenderd.

Laten we nu onze eerste pagina maken! Maak een bestand aan met de naam /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!" />
	);
}

Let op de revalidate variabele die Next.js vertelt om de pagina na 60 seconden opnieuw op te bouwen en je vertalingen up-to-date te houden.

Stap 4: Implementatie van server side rendering

TacoTranslate ondersteunt server-side rendering. Dit verbetert de gebruikerservaring aanzienlijk door direct vertaalde inhoud te tonen, in plaats van eerst een korte flits van niet-vertaalde inhoud. Bovendien kunnen we netwerkverzoeken aan de clientzijde overslaan, omdat we al de vertalingen hebben die we nodig hebben voor de pagina die de gebruiker bekijkt.

Om server-side rendering in te stellen, maak je /next.config.js aan of wijzig je deze:

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

Wijzig de isProduction controle zodat deze past bij jouw setup. Als true is, toont TacoTranslate de openbare API-sleutel. Als we ons in een lokale, test- of stagingomgeving bevinden (isProduction is false), gebruiken we de geheime read/write API-sleutel om ervoor te zorgen dat nieuwe strings worden verzonden voor vertaling.

Om ervoor te zorgen dat routing en doorverwijzing werken zoals verwacht, moeten we een bestand maken genaamd /middleware.ts. Met behulp van Middleware kunnen we gebruikers doorverwijzen naar pagina's die in hun voorkeurstaal worden weergegeven.

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

Zorg ervoor dat je de matcher instelt in overeenstemming met de Next.js Middleware documentatie.

Aan de client-kant kun je de locale cookie aanpassen om de voorkeurs­taal van de gebruiker te wijzigen. Zie de volledige voorbeeldcode voor ideeën over hoe je dit kunt doen!

Stap 5: Implementeren en testen!

We zijn klaar! Je React-applicatie wordt nu automatisch vertaald wanneer je tekst toevoegt aan een Translate component. Let op dat alleen omgevingen met read/write toestemming op de API-sleutel nieuwe teksten kunnen aanmaken om te vertalen. We raden aan een afgesloten en beveiligde staging-omgeving te hebben waar je je productieapplicatie kunt testen met zo’n API-sleutel, zodat je nieuwe teksten kunt toevoegen voordat je live gaat. Dit voorkomt dat iemand je geheime API-sleutel kan stelen en voorkomt dat je vertaalproject onnodig wordt opgeblazen door nieuwe, niet-gerelateerde teksten toe te voegen.

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!

Een product van NattskiftetGemaakt in Noorwegen