Cum să implementezi internaționalizarea într-o aplicație Next.js care folosește App Router
Fă-ți aplicația React mai accesibilă și accesează piețe noi cu internaționalizarea (i18n).
Pe măsură ce lumea devine tot mai globalizată, devine din ce în ce mai important pentru dezvoltatorii web să creeze aplicații care să răspundă nevoilor 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ăugăm internaționalizare în aplicația dumneavoastră 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, consultă 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 inteligența artificială de ultimă generație și te eliberează de gestionarea plictisitoare a fișierelor JSON.
Haideți să îl instalăm folosind npm în terminal:
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 cu 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
, 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=789010
Asigurați-vă că nu scăpați niciodată cheia API secretă read/write
în mediile de producție pe partea de client.
De asemenea, vom adăuga două variabile de mediu suplimentare: TACOTRANSLATE_DEFAULT_LOCALE
și TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Codul implicit al limbii 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 web. Citește mai multe despre origini aici.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Pasul 3: Configurarea TacoTranslate
To integrate TacoTranslate with your application, you’ll need to create a client using the API keys from earlier. For example, create a file named /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 face ca reutilizarea acestuia să fie ușoară mai târziu. getLocales
este doar o funcție utilitară cu o gestionare încorporată 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';
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.
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 de localizare pe care le-ai activat pentru proiectul tău 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!" />
);
}
Rețineți variabila revalidate
care spune Next.js să refacă pagina după 60 de secunde și să mențină traducerile dumneavoastră actualizate.
Pasul 4: Implementarea redării pe server
TacoTranslate suportă redarea pe server. Acest lucru îmbunătățește semnificativ experiența utilizatorului prin afișarea imediată a conținutului tradus, în loc de o scurtă apariție a conținutului netradus la început. În plus, putem sări peste cererile de rețea pe client, deoarece avem deja traducerile de care avem nevoie pentru pagina pe care utilizatorul o vizualizează.
Pentru a configura redarea pe partea de 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 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ă.
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 partea de client, poți modifica cookie-ul locale
pentru a schimba limba preferată a utilizatorului. Te rugăm să consulți codul complet de exemplu pentru idei despre cum să faci acest lucru!
Pasul 5: Deploy și testează!
Am terminat! Aplicația ta React va fi acum tradusă automat atunci când adaugi orice șiruri de caractere în componenta Translate
. Reține că doar mediile cu permisiuni read/write
asupra cheii API vor putea crea șiruri noi pentru a fi traduse. Recomandăm să ai un mediu de testare închis și securizat unde poți testa aplicația ta de producție cu o astfel de cheie API, adăugând șiruri noi înainte de a o lansa. Acest lucru va împiedica pe oricine să îți fure cheia API secretă și, potențial, să îți aglomereze proiectul de traduceri prin adăugarea de șiruri noi, nelegate.
Asigură-te că verifici exemplul complet pe profilul nostru GitHub. Acolo vei găsi, de asemenea, 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 fericiți să te ajutăm.
TacoTranslate îți permite să localizezi automat aplicațiile React rapid către și din orice limbă. Începe astăzi!