TacoTranslate
/
DocumentațiePrețuri
 
Tutorial
04 mai

Cum să implementezi internaționalizarea într-o aplicație Next.js care folosește App Router

Fă aplicația ta React mai accesibilă și ajunge la piețe noi cu internaționalizarea (i18n).

Pe măsură ce lumea devine tot mai globalizată, este din ce în ce mai important ca dezvoltatorii web să creeze aplicații care să poată satisface utilizatori din diferite țări și culturi. Unul dintre modurile cheie de a realiza acest lucru este prin internaționalizare (i18n), care îți permite să adaptezi aplicația la diferite limbi, monede și formate de date.

În acest articol, vom explora cum să adaugi internaționalizarea în aplicația ta React Next.js, cu redare pe partea de server. TL;DR: Vezi exemplul complet aici.

Acest ghid este pentru aplicațiile Next.js care folosesc App Router.
Dacă folosiți Pages Router, consultați acest ghid.

Pasul 1: Instalează o bibliotecă i18n

Pentru a implementa internaționalizarea în aplicația ta Next.js, mai întâi vom alege o bibliotecă i18n. Există mai multe biblioteci populare, inclusiv next-intl. În acest exemplu, însă, vom folosi TacoTranslate.

TacoTranslate traduce automat șirurile tale în orice limbă folosind inteligență artificială de ultimă generație și te scapă de gestionarea plictisitoare a fișierelor JSON.

Hai să îl instalăm folosind npm în terminalul tău:

npm install tacotranslate

Pasul 2: Creează un cont gratuit TacoTranslate

Acum că ai instalat modulul, este timpul să îți creezi un cont TacoTranslate, un proiect de traducere și cheile API aferente. Creează un cont aici. Este gratuit și nu necesită adăugarea unui card de credit.

În interfața aplicației TacoTranslate, creează un proiect și navighează la fila pentru cheile API. Creează o cheie read și o cheie read/write. Le vom salva ca variabile de mediu. Cheia read este ceea ce numim public, iar cheia read/write este secret. De exemplu, le-ai putea adăuga într-un fișier .env în rădăcina proiectului tău.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Asigură-te că nu divulgii niciodată cheia API secretă read/write către mediile de producție pe partea clientului.

Vom adăuga, de asemenea, două variabile de mediu suplimentare: TACOTRANSLATE_DEFAULT_LOCALE și TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Codul locale implicit de rezervă. În acest exemplu, îl vom seta la en pentru limba engleză.
  • TACOTRANSLATE_ORIGIN: „Folderul” unde vor fi stocate șirurile tale, cum ar fi URL-ul site-ului tău. Citește mai multe despre origin aici.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Pasul 3: Configurarea TacoTranslate

Pentru a integra TacoTranslate cu aplicația dumneavoastră, va trebui să creați un client folosind cheile API menționate anterior. De exemplu, creați un fișier numit /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;

Vom defini automat în curând TACOTRANSLATE_API_KEY și TACOTRANSLATE_PROJECT_LOCALE.

Crearea clientului într-un fișier separat îl face ușor de utilizat din nou ulterior. getLocales este doar o funcție utilitară cu unele gestionări de erori integrate. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx, unde vom implementa provider-ul 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>
	);
}

Observați 'use client'; care indică faptul că acesta este un component client.

Acum că provider-ul de context este pregătit, creează un fișier numit /app/[locale]/layout.tsx, layout-ul rădăcină în aplicația noastră. Observă că acest traseu are un dosar care utilizează Dynamic Routes, unde [locale] este parametrul dinamic.

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

Primul lucru de remarcat aici este că folosim parametrul nostru Dynamic Route [locale] pentru a prelua traducerile pentru acea limbă. În plus, generateStaticParams se asigură că toate codurile de localizare pe care le-ai activat pentru proiectul tău sunt pre-redate.

Acum, să construim prima noastră pagină! Creează un fișier numit /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!" />
	);
}

Observați variabila revalidate care îi spune Next.js să reconstuiască pagina după 60 de secunde și să mențină traducerile actualizate.

Pasul 4: Implementarea redării pe partea serverului

TacoTranslate suportă redarea pe partea de server. Acest lucru îmbunătățește considerabil experiența utilizatorului prin afișarea imediată a conținutului tradus, în loc de un scurt flash de conținut netradus. În plus, putem sărim peste cererile de rețea pe client, deoarece deja avem traducerile necesare pentru pagina pe care utilizatorul o vizualizează.

Pentru a configura redarea pe partea de server, creați sau modificați /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};
};

Modifică verificarea isProduction pentru a se potrivi configurației tale. Dacă este true, TacoTranslate va afișa cheia API publică. Dacă suntem într-un mediu local, de testare sau staging (isProduction is false), vom folosi cheia API secretă read/write pentru a ne asigura că noile șiruri sunt trimise pentru traducere.

Pentru a asigura funcționarea corectă a rutării și redirecționării, va trebui să creăm un fișier numit /middleware.ts. Folosind Middleware, putem redirecționa utilizatorii către pagini afișate în limba lor preferată.

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

Asigurați-vă că configurați matcher în conformitate cu documentația Next.js Middleware.

Pe client, poți modifica cookie-ul locale pentru a schimba limba preferată a utilizatorului. Te rugăm să consulți codul complet al exemplului pentru idei despre cum să faci asta!

Pasul 5: Lansează și testează!

Am terminat! Aplicația ta React va fi acum tradusă automat atunci când adaugi orice șiruri de caractere într-un component Translate. Reține că doar mediile cu permisiuni read/write asupra cheii API vor putea crea șiruri noi pentru a fi traduse. Recomandăm să ai un mediu de testare închis și securizat unde poți testa aplicația ta de producție cu o astfel de cheie API, adăugând șiruri noi înainte de lansare. Acest lucru va preveni ca oricine să îți fure cheia API secretă și, în același timp, să nu afecteze proiectul tău de traducere prin adăugarea de șiruri noi, care nu au legătură.

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!

Un produs de la NattskiftetFabricat în Norvegia