TacoTranslate
/
DocumentatiePrijzen
 
Handleiding
04 mei

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

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

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

In deze tutorial onderzoeken we hoe je internationalisatie toevoegt aan je React Next.js-applicatie, met server side rendering. TL;DR: Bekijk hier het volledige voorbeeld.

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

Stap 1: Installeer een i18n-bibliotheek

Om internationalisatie in uw Next.js-toepassing 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 uw teksten automatisch naar elke taal met behulp van geavanceerde AI en bevrijdt u van het moeizame beheer van JSON-bestanden.

Laten we het installeren met npm in uw 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 je hoeft geen creditcard toe te voegen.

Binnen de TacoTranslate applicatie-UI creëer je een project en navigeer je naar het tabblad API-sleutels. Maak één read sleutel aan en één read/write sleutel. We slaan deze op als omgevingsvariabelen. De read sleutel noemen we public en de read/write sleutel is secret. Bijvoorbeeld, je kunt ze 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 productieomgevingen aan de clientzijde.

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

  • TACOTRANSLATE_DEFAULT_LOCALE: De standaard fallback-locatiecode. In dit voorbeeld stellen we deze in 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 met uw applicatie te integreren, moet u een client aanmaken met behulp van de eerder genoemde API-sleutels. Maak bijvoorbeeld een bestand genaamd /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_DEFAULT_LOCALE ?? '',
});

module.exports = tacoTranslate;

We zullen binnenkort automatisch TACOTRANSLATE_API_KEY definiëren.

Het aanmaken van de client in een apart bestand maakt het later gemakkelijker om deze opnieuw te gebruiken. Nu zullen we, met behulp van een aangepaste /pages/_app.tsx, de TacoTranslate provider toevoegen.

/pages/_app.tsx
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';

type PageProperties = {
	origin: Origin;
	locale: Locale;
	locales: Locale[];
	localizations: Localizations;
};

export default function App({Component, pageProps}: AppProps<PageProperties>) {
	const {origin, locale, locales, localizations} = pageProps;

	return (
		<TacoTranslate
			client={tacoTranslate}
			origin={origin}
			locale={locale}
			localizations={localizations}
		>
			<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
			<Component {...pageProps} />
		</TacoTranslate>
	);
}

Als je al aangepaste pageProps en _app.tsx hebt, breid dan de definitie uit met de eigenschappen en code hierboven.

Stap 4: Implementatie van server side rendering

TacoTranslate maakt server side rendering van je vertalingen mogelijk. Dit verbetert de gebruikerservaring aanzienlijk doordat vertaalde content direct wordt getoond, in plaats van eerst een korte flits van onvertaalde content. Bovendien kunnen we netwerkverzoeken aan de clientkant overslaan, omdat we al alle benodigde vertalingen hebben.

We beginnen met het aanmaken of aanpassen van /next.config.js.

/next.config.js
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');

module.exports = async () => {
	const config = {};

	return withTacoTranslate(config, {
		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'),
	});
};

Pas de isProduction controle aan op basis van jouw setup. Als true is, zal TacoTranslate de publieke API-sleutel tonen. 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 voor vertaling worden verzonden.

Tot nu toe hebben we de Next.js-applicatie alleen ingesteld met een lijst van ondersteunde talen. Het volgende wat we gaan doen is vertalingen ophalen voor al je pagina's. Om dat te doen, gebruik je ofwel getTacoTranslateStaticProps of getTacoTranslateServerSideProps afhankelijk van je behoeften.

Deze functies nemen drie argumenten: een Next.js Static Props Context object, configuratie voor TacoTranslate, en optionele Next.js-eigenschappen. Let op dat revalidate bij getTacoTranslateStaticProps standaard is ingesteld op 60, zodat je vertalingen up-to-date blijven.

Om een van beide functies in een pagina te gebruiken, nemen we aan dat je een paginabestand hebt zoals /pages/hello-world.tsx.

/pages/hello-world.tsx
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';

export async function getStaticProps(context) {
	return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}

export default function Page() {
	return <Translate string="Hello, world!"/>;
}

Je zou nu het Translate component moeten kunnen gebruiken om teksten binnen al je React-componenten te vertalen.

import {Translate} from 'tacotranslate/react';

function Component() {
	return <Translate string="Hello, world!"/>
}

Stap 5: Uitrollen en testen!

We zijn klaar! Je React-applicatie wordt nu automatisch vertaald wanneer je strings toevoegt aan een Translate component. Houd er rekening mee dat alleen omgevingen met read/write rechten op de API-sleutel nieuwe strings kunnen aanmaken om te vertalen. We raden aan om een gesloten en beveiligde staging-omgeving te hebben waar je je productieapplicatie kunt testen met zo'n API-sleutel, en nieuwe strings kunt toevoegen voordat je live gaat. Dit voorkomt dat iemand je geheime API-sleutel steelt en mogelijk je vertaalproject bloat veroorzaakt door het toevoegen van nieuwe, niet-gerelateerde strings.

Zorg ervoor dat je het complete voorbeeld bekijkt op ons GitHub-profiel. Daar vind je ook een voorbeeld van hoe je dit kunt doen met de App Router! Mocht je problemen ondervinden, aarzel dan niet om contact op te nemen, we helpen je graag.

TacoTranslate laat je React-applicaties snel automatisch lokaliseren naar en vanuit elke taal. Begin vandaag nog!

Een product van NattskiftetGemaakt in Noorwegen