TacoTranslate
/
DocumentațiePrețuri
 
Ghid
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 pătrunde pe piețe noi prin internaționalizare (i18n).

Pe măsură ce lumea devine tot mai globalizată, devine din ce în ce mai important ca dezvoltatorii web să construiască aplicații care să răspundă utilizatorilor din diferite țări și culturi. Unul dintre modurile cheie de a realiza acest lucru este prin internaționalizare (i18n), care vă permite să adaptați aplicația la diferite limbi, valute și formate de dată.

În acest articol, vom explora cum să adăugați internaționalizare în aplicația dvs. React Next.js, folosind redare pe server. TL;DR: Vedeți exemplul complet aici.

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

Pasul 1: Instalați 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, totuși, vom folosi TacoTranslate.

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

Să-l instalăm folosind npm în terminal:

npm install tacotranslate

Pasul 2: Creează un cont TacoTranslate gratuit

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

În interfața aplicației TacoTranslate, creați un proiect și navigați la fila 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 puteți adăuga într-un fișier .env în rădăcina proiectului dumneavoastră.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Asigură-te că nu dezvălui niciodată cheia API secretă read/write în mediile de producție de pe partea clientului.

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

  • TACOTRANSLATE_DEFAULT_LOCALE: Codul implicit de locală de rezervă. În acest exemplu, îl vom seta la en pentru engleză.
  • TACOTRANSLATE_ORIGIN: „folderul” în care vor fi stocate șirurile tale, de exemplu URL-ul site-ului tău. Află mai multe despre origini aici.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Pasul 3: Configurarea TacoTranslate

Pentru a integra TacoTranslate în aplicația dvs., 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 TACOTRANSLATE_API_KEY și TACOTRANSLATE_PROJECT_LOCALE în curând.

Crearea clientului într-un fișier separat îl face ușor de folosit din nou mai târziu. getLocales este doar o funcție utilitară cu gestionare a erorilor încorporată. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx, în care 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ă că aceasta este o componentă client.

Acum că providerul de context este gata, creează un fișier numit /app/[locale]/layout.tsx, layout-ul rădăcină al aplicației noastre. Observă că această cale conține 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 reținut 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-renderizate.

Acum, haideți să construim prima noastră pagină! Creați 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ă refacă pagina după 60 de secunde și să mențină traducerile actualizate.

Pasul 4: Implementarea redării pe server

TacoTranslate acceptă redarea pe server. Aceasta îmbunătățește considerabil experiența utilizatorului, afișând imediat conținutul tradus, în locul unui scurt moment în care apare mai întâi conținutul netradus. În plus, putem omite cererile de rețea pe client, deoarece avem deja traducerile necesare pentru pagina pe care o vizualizează utilizatorul.

Pentru a configura redarea pe server, creează sau modifică /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};
};

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

Pentru a ne asigura că rutarea și redirecționarea funcționează așa cum trebuie, 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);
}

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

În partea clientului, poți modifica cookie-ul locale pentru a schimba limba preferată a utilizatorului. Consultați exemplul complet de cod pentru idei despre cum să procedați!

Pasul 5: Lansează și testează!

Am terminat! Aplicația ta React va fi acum tradusă automat când adaugi orice șiruri într-un component Translate. Rețineți că doar mediile cu permisiuni read/write asupra cheii API vor putea crea noi șiruri care să fie traduse. Recomandăm să aveți un mediu de staging închis și securizat în care să puteți testa aplicația de producție cu o astfel de cheie API, adăugând noi șiruri înainte de lansare. Acest lucru va împiedica pe oricine să vă fure cheia API secretă și, potențial, să umfle proiectul de traducere prin adăugarea de șiruri noi, nelegate.

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 NattskiftetProdus în Norvegia