Cum să implementezi internaționalizarea într-o aplicație Next.js care folosește App Router
Faceți aplicația React mai accesibilă și ajungeți 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 internaționalizarea (i18n), care îți permite să adaptezi aplicația la diferite limbi, valute și formate de dată.
În acest articol, vom explora cum să adăugăm internaționalizare aplicației tale React Next.js, cu redare pe server. TL;DR: Vezi exemplul complet aici.
Acest ghid este pentru aplicații Next.js care utilizează App Router.
Dacă utilizați Pages Router, consultați în schimb 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.
Să o instalăm folosind npm în terminalul tău:
npm install tacotranslatePasul 2: Creați un cont gratuit TacoTranslate
Acum că ți-ai instalat modulul, e timpul să-ți creezi contul TacoTranslate, un proiect de traducere și cheile API asociate. Creează-ți 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 cheilor 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.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Asigurați-vă că nu divulgați niciodată cheia API secretă read/write în mediile de producție de pe partea clientului.
Vom adăuga, de asemenea, două variabile de mediu: TACOTRANSLATE_DEFAULT_LOCALE și TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: Codul implicit al locale-ului de rezervă. În acest exemplu, îl vom seta laenpentru engleză.TACOTRANSLATE_ORIGIN: „folderul” în care vor fi stocate șirurile dvs., cum ar fi URL-ul site-ului dvs. Citiți mai multe despre origini aici.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comPasul 3: Configurarea TacoTranslate
Pentru a integra TacoTranslate cu aplicația dumneavoastră, va trebui să creați un client folosind cheile API menționate mai sus. 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 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 câteva mecanisme încorporate de tratare a erorilor. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx, unde vom implementa providerul 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'; care indică că aceasta este o componentă client.
Cu providerul de context acum gata de utilizare, creați un fișier numit /app/[locale]/layout.tsx, layout-ul principal al aplicației noastre. Rețineți că această cale conține un folder care utilizează 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 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, hai 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!" />
);
}Rețineți variabila revalidate, care spune Next.js să reconstruiască pagina după 60 de secunde și să mențină traducerile la zi.
Pasul 4: Implementarea redării pe server
TacoTranslate suportă redarea pe server. Aceasta îmbunătățește considerabil experiența utilizatorului, afișând imediat conținutul tradus, în loc să apară mai întâi un scurt moment cu conținut netradus. În plus, putem evita cererile de rețea din partea clientului, deoarece avem deja traducerile necesare pentru pagina pe care utilizatorul o vizualizează.
Pentru a configura renderizarea pe server, creați sau modificați /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 staging (isProduction is false), vom folosi cheia secretă read/write pentru a ne asigura că noile șiruri sunt trimise pentru traducere.
Pentru a ne 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 afișate î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);
}Asigurați-vă că configurați matcher în conformitate cu documentația Next.js privind Middleware.
Pe client, puteți modifica cookie-ul locale pentru a schimba limba preferată a utilizatorului. Vă rugăm să consultați codul complet de exemplu pentru idei despre cum să faceți acest lucru!
Pasul 5: Publicați și testați!
Am terminat! Aplicația ta React va fi acum tradusă automat atunci când adaugi orice stringuri într-o componentă Translate. Reține că doar mediile care au permisiuni read/write pe cheia API vor putea crea stringuri noi care să fie traduse. Recomandăm să ai un mediu de staging închis și securizat în care să poți testa aplicația de producție folosind o astfel de cheie API, adăugând stringuri noi înainte de a o lansa. Astfel vei împiedica pe oricine să îți fure cheia API secretă și, potențial, să umfle proiectul de traduceri prin adăugarea de stringuri 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!