TacoTranslate
/
DocumentațieTarifare
 
Tutorial
04 mai

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

Faceți aplicația React mai accesibilă și atingeți piețe noi cu internaționalizarea (i18n).

Pe măsură ce lumea devine tot mai globalizată, este din ce în ce mai important pentru dezvoltatorii web să creeze aplicații care să răspundă utilizatorilor din diferite țări și culturi. Una dintre metodele esențiale pentru a realiza acest lucru este prin internaționalizare (i18n), care îți permite să îți adaptezi aplicația la diferite limbi, monede și formate de dată.

În acest articol, vom explora cum să adaugi internaționalizare î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, vedeți acest ghid în schimb.

Pasul 1: Instalează o bibliotecă i18n

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

TacoTranslate traduce automat șirurile tale în orice limbă folosind o inteligență artificială de ultimă generație și te scutește de gestionarea obositoare 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 asociate. Creează un cont aici. Este gratuit și nu necesită să adaugi un card de credit.

În interfața aplicației TacoTranslate, creează un proiect și navighează la fila sa de chei 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

Asigurați-vă că nu dezvăluiți niciodată cheia secretă read/write API către mediile de producție de pe partea clientului.

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

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

Pasul 3: Configurarea TacoTranslate

Pentru a integra TacoTranslate cu aplicația ta, va trebui să creezi un client folosind cheile API menționate anterior. De exemplu, creează 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 reutilizat ulterior. getLocales este doar o funcție utilitară cu unele gestionări încorporate ale erorilor. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx, unde vom implementa providerul 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.

Cu context provider-ul acum pregătit, creează un fișier numit /app/[locale]/layout.tsx, layout-ul rădăcină din aplicația noastră. Observă că această cale are un folder 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 locale pe care le-ați activat pentru proiectul dvs. sunt pre-randate.

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

Rețineți variabila revalidate care spune Next.js să reconstruiască pagina după 60 de secunde și să vă mențină traducerile actualizate.

Pasul 4: Implementarea redării pe partea de server

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 moment în care se vede conținutul netradus. În plus, putem sărī peste solicitările 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, creează sau modifică fișierul /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};
};

Modificați verificarea isProduction pentru a se potrivi configurației dvs. Dacă true, TacoTranslate va afișa cheia API publică. Dacă ne aflăm într-un mediu local, de testare sau de pregătire (isProduction is false), vom folosi secretul read/write cheia API 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 prezentate î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);
}

Asigură-te că configurezi matcher în conformitate cu documentația Next.js Middleware.

Pe client, puteți modifica cookie-ul locale pentru a schimba limba preferată a utilizatorului. Vă rugăm să consultați codul complet al exemplului pentru idei despre cum să faceți acest lucru!

Pasul 5: Publică și testează!

Am terminat! Aplicația ta React va fi acum tradusă automat 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 traducere. Recomandăm să ai un mediu de staging închis și securizat în care să poți testa aplicația de producție cu o astfel de cheie API, adăugând șiruri noi înainte de a lansa live. Acest lucru va preveni ca cineva să îți fure cheia API secretă și, posibil, să aglomereze proiectul tău de traducere prin adăugarea de șiruri noi, nelegate de context.

Asigură-te să verifici exemplul complet de pe profilul nostru GitHub. Acolo vei găsi și un exemplu despre cum să faci asta folosind Pages Router! Dacă întâmpini orice problemă, nu ezita să ne contactezi, și vom fi mai mult decât bucuroși să te ajutăm.

TacoTranslate îți permite să localizezi automat aplicațiile React rapid, către și din orice limbă. Începe astăzi!

Un produs de la NattskiftetFabricat în Norvegia