TacoTranslate
/
DokumentasjonPrisar
 
Rettleiing
04. mai

Korleis implementere internasjonalisering i ei Next.js-applikasjon som brukar App Router

Gjer React-applikasjonen din meir tilgjengeleg og nå nye marknader med internasjonalisering (i18n).

Etter kvart som verda blir meir globalisert, blir det stadig viktigare for nettutviklarar å byggje applikasjonar som kan rette seg mot brukarar frå ulike land og kulturar. Ein av dei viktigaste måtane å oppnå dette på er gjennom internasjonalisering (i18n), som gjer at du kan tilpasse applikasjonen din til ulike språk, valutar og datoformat.

I denne artikkelen skal vi vise korleis du kan leggje til internasjonalisering i React Next.js-applikasjonen din, med server-side rendering. TL;DR: Sjå heile dømet her.

Denne guida er for Next.js-applikasjonar som brukar App Router.
Om du brukar Pages Router, sjå denne guida i staden.

Steg 1: Installer eit i18n-bibliotek

For å implementere internasjonalisering i Next.js-applikasjonen din, vel me først eit i18n-bibliotek. Det finst fleire populære bibliotek, inkludert next-intl. I dette dømet vil me derimot bruke TacoTranslate.

TacoTranslate oversett automatisk strengene dine til eit kva som helst språk ved hjelp av banebrytande AI, og frigjer deg frå den tidkrevjande handteringa av JSON-filer.

Lat oss installere det ved å bruke npm i terminalen din:

npm install tacotranslate

Steg 2: Opprett ein gratis TacoTranslate-konto

No som du har installert modulen, er det på tide å opprette ein TacoTranslate-konto, eit omsetjingsprosjekt og tilhøyrande API-nøklar. Opprett ein konto her. Det er gratis, og krev ikkje at du oppgir eit kredittkort.

I brukargrensesnittet til TacoTranslate-applikasjonen, opprett eit prosjekt og gå til fanen for API-nøklar. Opprett ein read nøkkel og ein read/write nøkkel. Vi vil lagre dei som miljøvariablar. read‑nøkkelen er det vi kallar public og read/write‑nøkkelen er secret. Til dømes kan du legge dei til i ei .env‑fil i roten av prosjektet ditt.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Pass på at du aldri lekkar den hemmelege read/write API-nøkkelen i produksjonsmiljøet på klientsida.

Vi legg òg til to fleire miljøvariablar: TACOTRANSLATE_DEFAULT_LOCALE og TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Standard fallback-lokalkode. I dette dømet set vi den til en for engelsk.
  • TACOTRANSLATE_ORIGIN: “mappe” der tekststrengane dine blir lagra, som til dømes URL-en til nettsida di. Les meir om originar her.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Steg 3: Setje opp TacoTranslate

For å integrere TacoTranslate med applikasjonen din, må du opprette ein klient som brukar API-nøklane frå tidlegare. Til dømes opprett ei fil med namnet /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;

Vi vil automatisk definere TACOTRANSLATE_API_KEY og TACOTRANSLATE_PROJECT_LOCALE om kort tid.

Å lage klienten i ei eiga fil gjer det enkelt å bruke den igjen seinare. getLocales er berre ei hjelpefunksjon med noko innebygd feilhandsaming. No, opprett ei fil med namnet /app/[locale]/tacotranslate.tsx, der vi skal implementere TacoTranslate tilbydar.

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

Merk 'use client'; som indikerer at dette er ein klientkomponent.

Når kontekstleverandøren no er klar, opprett ei fil med namnet /app/[locale]/layout.tsx, rotlayouten i applikasjonen vår. Merk at denne stien inneheld ei mappe som nyttar Dynamic Routes, der [locale] er den dynamiske parameteren.

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

Det første å merke seg her er at vi brukar parameteren vår Dynamic Route [locale] for å hente omsetjingar for det aktuelle språket. I tillegg sørgjer generateStaticParams for at alle lokalkodane du har aktivert for prosjektet ditt blir forhåndsgenererte.

No skal vi byggje den fyrste sida vår! Opprett ei fil med namnet /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!" />
	);
}

Merk revalidate variabelen som fortel Next.js å bygge sida på nytt etter 60 sekund, og halde omsetjingane dine oppdaterte.

Steg 4: Implementering av serverside-gjengiving

TacoTranslate støttar server-side rendering. Dette betrar brukaropplevinga mykje ved å vise omsett innhald med ein gong, i staden for at brukaren fyrst ser eit kort blaff av uomsett innhald. I tillegg kan vi unngå nettverkskall på klienten, fordi vi allereie har omsetjingane vi treng for sida brukaren ser.

For å sette opp serversiderendering, opprett eller endre /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};
};

Endre isProduction‑sjekken slik at ho passar oppsettet ditt. Hvis true, vil TacoTranslate synleggjere den offentlege API‑nøkkelen. Hvis vi er i eit lokalt, test‑ eller staging‑miljø (isProduction is false), vil vi bruke den hemmelege read/write API‑nøkkelen for å sikre at nye strengar blir sendt til omsetjing.

For at ruting og omdirigering skal fungere som forventa, må vi opprette ei fil med namnet /middleware.ts. Ved å bruke Middleware, kan vi omdirigere brukarar til sider på deira føretrekte språk.

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

Sørg for å sette opp matcher i samsvar med Next.js Middleware-dokumentasjonen.

På klienten kan du endre locale informasjonskapselen for å endre kva språk brukaren føretrekk. Sjå den komplette eksempelkoden for idéar om korleis du kan gjere dette!

Steg 5: Rull ut og test!

Vi er ferdige! React-applikasjonen din vil no bli omsett automatisk når du legg til tekststrengar i ein Translate komponent. Merk at berre miljø med read/write tillatelser på API-nøkkelen vil kunne opprette nye strengar som skal omsetjast. Vi anbefaler å ha eit lukka og sikra staging-miljø der du kan teste produksjonsapplikasjonen din med ei slik API-nøkkel, og leggje til nye strengar før du går live. Dette vil hindre at nokon nokon steler den hemmelege API-nøkkelen din, og potensielt blåse opp omsetjingsprosjektet ditt ved å leggje til nye, ikkje-relaterte strengar.

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!

Eit produkt frå NattskiftetLaga i Noreg