Cum să implementezi internaționalizarea într-o aplicație Next.js care folosește App Router
Faceți aplicația dumneavoastră React mai accesibilă și ajungeți pe piețe noi cu internaționalizarea (i18n).
Pe măsură ce lumea devine din ce în ce mai globalizată, este tot mai important pentru dezvoltatorii web să construiască aplicații care să se adreseze utilizatorilor din diferite țări și culturi. Una dintre modalitățile 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 aplicației dvs. 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ă folosești Pages Router, vezi acest ghid în schimb.
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, totuși, vom folosi TacoTranslate.
TacoTranslate traduce automat șirurile tale în orice limbă folosind AI de ultimă generație și te scutește 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 contul 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, ai putea să le adaugi într-un fișier .env
în rădăcina proiectului tău.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Asigurați-vă că nu dezvăluiți niciodată cheia API secretă read/write
în mediile de producție pe partea client.
De asemenea, vom adăuga două variabile de mediu suplimentare: TACOTRANSLATE_DEFAULT_LOCALE
și TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Codul implicit de limbă de rezervă. În acest exemplu, îl vom seta laen
pentru engleză.TACOTRANSLATE_ORIGIN
: „Folderul” unde vor fi stocate șirurile tale, cum ar fi URL-ul site-ului tău. Citește mai multe despre origini aici.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Pasul 3: Configurarea TacoTranslate
Pentru a integra TacoTranslate în 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
.
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 mai târziu. getLocales
este doar o funcție utilitară cu unele mecanisme integrate de gestionare a erorilor. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx
, unde vom implementa provider-ul TacoTranslate
.
'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>
);
}
Rețineți 'use client';
indicând că acesta este un component de 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ă. Reține că această cale conține un folder care folosește Dynamic Routes, unde [locale]
este parametrul dinamic.
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 de Dynamic Route
[locale]
pentru a prelua traducerile pentru acea limbă. În plus, generateStaticParams
se asigură că toate codurile de localizare 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
.
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ă 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 conținutul netradus este afișat întîi. Î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 server, creează sau modifică /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 că rutarea și redirecționarea funcționează conform așteptărilor, 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ă.
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, 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 acest lucru!
Pasul 5: Lancează și testează!
Am terminat! Aplicația ta React va fi tradusă automat de fiecare dată când adaugi orice șiruri de caractere într-un component Translate
. Ține cont că doar mediile cu permisiuni read/write
pe cheia API vor putea crea șiruri noi pentru a fi traduse. Recomandăm să ai un mediu de testare închis și securizat unde să poți testa aplicația de producție cu o astfel de cheie API, adăugând șiruri noi înainte de lansarea live. Astfel vei preveni ca oricine să îți fure cheia ta API secretă și, eventual, să îți umfle proiectul de traduceri adăugând șiruri noi, nerelevante.
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!