TacoTranslate
/
DokimantasyonPri
 
Leson patikilye
May 04

Kijan pou aplike entènasyonalizasyon nan yon aplikasyon Next.js ki itilize App Router

Fè aplikasyon React ou plis aksesib epi rive nan nouvo mache avèk entènasyonalizasyon (i18n).

Kòm mond lan ap vin pi globalize, li vin pi enpòtan pou devlopè entènèt yo konstwi aplikasyon ki kapab satisfè itilizatè ki sòti nan diferan peyi ak kilti. Youn nan fason kle pou reyalize sa se atravè entènasyonalizasyon (i18n), ki pèmèt ou adapte aplikasyon ou a diferan lang, lajan, ak fòma dat.

Nan atik sa a, n ap eksplore kijan pou ajoute entènasyonalizasyon nan aplikasyon React Next.js ou a, ak rannman bò sèvè. TL;DR: Gade egzanp konplè a isit la.

Gid sa a se pou aplikasyon Next.js ki itilize App Router.
Si w ap itilize Pages Router, gade gid sa a olye.

Etap 1: Enstale yon bibliyotèk i18n

Pou aplike entènasyonalizasyon nan aplikasyon Next.js ou a, nou pral premye chwazi yon bibliyotèk i18n. Gen plizyè bibliyotèk popilè, tankou next-intl. Nan egzanp sa a, sepandan, n ap itilize TacoTranslate.

TacoTranslate otomatikman tradui chenn ou yo nan nenpòt lang lè l sèvi avèk AI avanse, epi li libere ou anba jesyon fatigan dosye JSON yo.

An n enstale li itilize npm nan tèminal ou:

npm install tacotranslate

Etap 2: Kreye yon kont TacoTranslate gratis

Kounye a ke ou enstale modil la, li lè pou kreye kont TacoTranslate ou, yon pwojè tradiksyon, ak kle API ki asosye yo. Kreye yon kont isit la. Li gratis, epi li pa mande ou ajoute yon kat kredi.

Nan UI aplikasyon TacoTranslate la, kreye yon pwojè, epi ale nan tab kle API li yo. Kreye yon kle read, ak yon kle read/write. Nou pral sove yo kòm varyab anviwònman. Kle read la se sa nou rele public, epi kle read/write la se secret. Pa egzanp, ou ta ka ajoute yo nan yon fichye .env nan rasin pwojè ou.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Asire w pou pa janm fè kòd sekrè read/write API a sòti nan anviwònman pwodiksyon bò kliyan an.

N ap ajoute tou de lòt varyab anviwònman: TACOTRANSLATE_DEFAULT_LOCALE ak TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Kòd lang default pou ranplasman. Nan egzanp sa a, n ap mete li sou en pou lang angle.
  • TACOTRANSLATE_ORIGIN: “Katab” kote chèn ou yo ap estoke, tankou URL sit entènèt ou a. Li plis sou orijin yo isit la.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Etap 3: Konfigirasyon TacoTranslate

Pou entegre TacoTranslate nan aplikasyon ou, ou pral bezwen kreye yon kliyan ki sèvi ak kle API yo ke ou te kreye pi bonè. Pa egzanp, kreye yon fichye ki rele /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;

N ap otomatikman defini TACOTRANSLATE_API_KEY ak TACOTRANSLATE_PROJECT_LOCALE byento.

Kreye kliyan an nan yon dosye separe fè li fasil pou w itilize li ankò pita. getLocales se jis yon fonksyon itilite ki gen kèk jesyon erè entegre. Kounye a, kreye yon dosye ki rele /app/[locale]/tacotranslate.tsx, kote n ap enplemante founisè TacoTranslate.

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

Remake 'use client'; ki endike ke sa a se yon konpozan kliyan.

Ak founisè kontèks la pare kounye a pou itilize, kreye yon fichye ki rele /app/[locale]/layout.tsx, layout rasin nan nan aplikasyon nou an. Remake chemen sa a gen yon dosye kap itilize Dynamic Routes, kote [locale] se paramèt dinamik la.

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

Premye bagay pou sonje isit la se ke nou ap itilize paramèt Dynamic Route nou an [locale] pou pran tradiksyon pou lang sa a. Anplis de sa, generateStaticParams ap asire ke tout kòd lokal ou aktive pou pwojè ou a yo pre-rann.

Kounye a, ann bati premye paj nou an! Kreye yon fichye ki rele /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!" />
	);
}

Remake revalidate varyab ki di Next.js pou l rekonstri paj la apre 60 segonn, epi kenbe tradiksyon ou yo ajou.

Etap 4: Aplike rannman bò sèvè

TacoTranslate sipòte rannaj sou bò sèvè a. Sa amelyore eksperyans itilizatè a anpil pa montre kontni tradui touswit, olye pou premye montre yon eklere nan kontni ki pa tradui. Anplis, nou ka evite demann rezo sou kliyan an, paske nou deja genyen tradiksyon nou bezwen pou paj itilizatè a ap gade a.

Pou mete an plas rann sou bò sèvè a, kreye oswa modifye /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};
};

Modifye tès isProduction lan pou l matche ak anviwònman ou. Si true, TacoTranslate ap itilize kle API piblik la. Si nou nan yon anviwònman lokal, tès, oswa staging (isProduction is false), n ap itilize kle API sekrè read/write la pou asire nouvo fisèl yo voye pou tradiksyon.

Pou asire w ke routaj ak redireksyon ap mache jan li espere a, n ap bezwen kreye yon fichye ki rele /middleware.ts. Lè w itilize Middleware, nou ka redireksyon itilizatè yo nan paj ki montre nan lang yo prefere a.

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

Asire w mete kanpe matcher selon Dokimantasyon Middleware Next.js.

Sou kliyan an, ou ka chanje biskwit locale pou modifye ki lang itilizatè a prefere. Tanpri gade egzanp konplè kòd la pou jwenn ide sou kijan pou w fè sa!

Etap 5: Pibliye epi teste!

Nou fini! Aplikasyon React ou a pral kounye a tradui otomatikman lè ou ajoute nenpòt kòd nan yon konpozan Translate. Remake byen ke se sèlman anviwònman ki gen pèmisyon read/write sou kle API a ki pral kapab kreye nouvo kòd pou tradui. Nou rekòmande pou gen yon anviwònman staging fèmen ak sekirize kote ou ka teste aplikasyon pwodiksyon ou a ak yon kle API konsa, ajoute nouvo kòd anvan ou ale live. Sa ap anpeche nenpòt moun vòlè kle API sekrè ou a, epi potansyèlman anfle pwojè tradiksyon ou pa ajoute nouvo kòd ki pa gen rapò.

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!

Yon pwodwi ki soti nan NattskiftetFè nan Nòvèj