Cum să implementezi internaționalizarea într-o aplicație Next.js care folosește App Router
Faceți aplicația React mai accesibilă și pătrundeț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 pot răspunde utilizatorilor din diferite țări și culturi. Unul dintre principalele moduri de a realiza acest lucru este prin internaționalizare (i18n), care îți permite să adaptezi aplicația la diferite limbi, valute și formate de dată.
În acest articol, vom explora cum să adaugi internaționalizare aplicației tale React Next.js, cu redare pe server. TL;DR: Vezi exemplul complet aici.
Acest ghid este pentru aplicațiile Next.js care folosesc App Router.
Dacă utilizaț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, 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 îți traduce automat șirurile de caractere î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 terminalul tău:
npm install tacotranslate
Pasul 2: Creează un cont gratuit la TacoTranslate
Acum că ați instalat modulul, e timpul să vă creați contul TacoTranslate, un proiect de traducere și cheile API asociate. Creaț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 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
și 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=789010
Asigură-te că nu divulgi 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 localizării de rezervă. În acest exemplu, îl vom seta laen
pentru engleză.TACOTRANSLATE_ORIGIN
: „folderul” în care vor fi stocate șirurile tale, cum ar fi URL-ul site-ului tău. Află mai multe despre origini aici.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Pasul 3: Configurarea TacoTranslate
Pentru a integra TacoTranslate cu aplicația dvs., va trebui să creați un client folosind cheile API menționate mai devreme. 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;
În scurt timp vom defini automat TACOTRANSLATE_API_KEY
și TACOTRANSLATE_PROJECT_LOCALE
.
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 tratare integrată a erorilor. Acum, creează un fișier numit /app/[locale]/tacotranslate.tsx
, în care 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>
);
}
Observați 'use client';
care indică că aceasta este o componentă client.
Acum că furnizorul de context este gata de utilizare, creează un fișier numit /app/[locale]/layout.tsx
, layout-ul rădăcină al aplicației noastre. Reține 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 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, 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 randării pe server
TacoTranslate acceptă randarea pe server. Aceasta îmbunătățește considerabil experiența utilizatorului, afișând conținutul tradus imediat, în loc de un scurt moment în care se afișează mai întâi conținut netradus. În plus, putem evita cererile de rețea din partea clientului, deoarece dispunem deja de traducerile necesare pentru pagina pe care utilizatorul o vizualizează.
Pentru a configura redarea 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 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ă.
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 privind Middleware.
La nivelul 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ă faceți asta!
Pasul 5: Lansați și testați!
Am terminat! Aplicația dvs. React va fi acum tradusă automat atunci când adăugați orice șiruri într-o componentă Translate
. Rețineți că doar mediile cu permisiuni read/write
asupra cheii API vor putea crea șiruri noi care să fie traduse. Vă recomandăm să aveți un mediu de staging închis și securizat în care să vă testați aplicația de producție cu o astfel de cheie API, adăugând șiruri noi înainte de lansare. Acest lucru va împiedica pe oricine oricine să vă fure cheia API secretă și, potențial, să umfle proiectul de traduceri prin adăugarea de ș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!