Kako implementirati internacionalizacijo v Next.js aplikaciji, ki uporablja App Router
Naredite svojo React aplikacijo bolj dostopno in dosežite nove trge z internacionalizacijo (i18n).
Ker se svet vse bolj globalizira, je za spletne razvijalce vse pomembneje ustvarjati aplikacije, ki lahko zadostijo potrebam uporabnikov iz različnih držav in kultur. Eden ključnih načinov za to je internacionalizacija (i18n), ki vam omogoča prilagoditi aplikacijo različnim jezikom, valutam in formatom datumov.
V tem članku bomo raziskali, kako dodati internacionalizacijo v vašo React Next.js aplikacijo s upodabljanjem na strežniku. TL;DR: Oglejte si celoten primer tukaj.
Ta vodič je za Next.js aplikacije, ki uporabljajo App Router.
Če uporabljate Pages Router, namesto tega oglejte ta vodič.
Korak 1: Namestite knjižnico za i18n
Za implementacijo internacionalizacije v vaši Next.js aplikaciji bomo najprej izbrali i18n knjižnico. Obstaja več priljubljenih knjižnic, vključno z next-intl. V tem primeru pa bomo uporabili TacoTranslate.
TacoTranslate samodejno prevede vaše nize v katerikoli jezik z uporabo najsodobnejše umetne inteligence in vas osvobodi zamudnega upravljanja JSON datotek.
Namestimo ga z uporabo npm v terminalu:
npm install tacotranslateKorak 2: Ustvarite brezplačen račun za TacoTranslate
Zdaj, ko imate modul nameščen, je čas, da ustvarite svoj TacoTranslate račun, prevajalski projekt in pripadajoče API ključe. Ustvarite račun tukaj. Je brezplačno in ne zahteva, da dodate kreditno kartico.
V uporabniškem vmesniku aplikacije TacoTranslate ustvarite projekt in pojdite na zavihek API ključev. Ustvarite en read ključ in en read/write ključ. Shranili jih bomo kot spremenljivke okolja. read ključ je tisti, ki mu pravimo public in read/write ključ je secret. Na primer, lahko jih dodate v datoteko .env v korenu vašega projekta.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Poskrbite, da skrivnega API ključa read/write nikoli ne razkrijete v produkcijskih odjemalskih okoljih.
Dodali bomo še dve okoljski spremenljivki: TACOTRANSLATE_DEFAULT_LOCALE in TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: Privzeta koda jezika, ki se uporabi, če druge niso na voljo. V tem primeru jo bomo nastavili naenza angleščino.TACOTRANSLATE_ORIGIN: "mapa", kjer bodo shranjeni vaši nizi, na primer URL vašega spletnega mesta. Preberite več o originah tukaj.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comKorak 3: Nastavitev TacoTranslate
Za integracijo TacoTranslate v vašo aplikacijo boste morali ustvariti odjemalca z uporabo API ključev, ki ste jih ustvarili prej. Na primer, ustvarite datoteko z imenom /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;Kmalu bomo samodejno definirali TACOTRANSLATE_API_KEY in TACOTRANSLATE_PROJECT_LOCALE.
Ustvarjanje odjemalca v ločeni datoteki omogoča, da ga pozneje enostavno znova uporabite. getLocales je le pripomočna funkcija z nekaj vgrajenimi mehanizmi za obravnavo napak. Zdaj ustvarite datoteko z imenom /app/[locale]/tacotranslate.tsx, kjer bomo implementirali ponudnika 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>
);
}Upoštevajte 'use client';, kar označuje, da gre za odjemalsko komponento.
Zdaj, ko je kontekstni provider pripravljen, ustvarite datoteko z imenom /app/[locale]/layout.tsx, glavni layout v naši aplikaciji. Upoštevajte, da ta pot vsebuje mapo, ki uporablja Dynamic Routes, kjer je [locale] dinamični parameter.
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>
);
}Prva stvar, ki jo je treba poudariti, je, da za pridobivanje prevodov za ta jezik uporabljamo naš parameter Dynamic Route [locale]. Poleg tega generateStaticParams poskrbi, da so vnaprej upodobljene vse kode lokal, ki ste jih aktivirali v projektu.
Zdaj pa ustvarimo našo prvo stran! Ustvarite datoteko z imenom /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!" />
);
}Upoštevajte spremenljivko revalidate, ki Next.jsu pove, naj stran znova zgradi po 60 sekundah in poskrbi, da bodo vaši prevodi ažurni.
Korak 4: Implementacija renderiranja na strežniku
TacoTranslate podpira upodabljanje na strežniku. To močno izboljša uporabniško izkušnjo, saj prikaže prevedeno vsebino takoj, namesto kratkega prikaza neprevedene vsebine. Poleg tega lahko na odjemalcu preskočimo omrežne zahteve, ker že imamo prevode, potrebne za stran, ki jo uporabnik gleda.
Če želite omogočiti strežniško upodabljanje, ustvarite ali spremenite /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};
};Prilagodite preverjanje isProduction glede na vašo nastavitev. Če je true, bo TacoTranslate prikazal javni API ključ. Če smo v lokalnem, testnem ali predprodukcijskem (staging) okolju (isProduction is false), bomo uporabili skrivni read/write API ključ, da zagotovimo, da se novi nizi pošljejo v prevod.
Da zagotovimo, da usmerjanje in preusmerjanje delujeta kot pričakovano, moramo ustvariti datoteko z imenom /middleware.ts. Z uporabo Middleware, lahko uporabnike preusmerimo na strani, prikazane v njihovem želenem jeziku.
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);
}Poskrbite, da boste matcher nastavili v skladu z dokumentacijo Next.js Middleware.
Na odjemalcu lahko spremenite piškotek locale, s čimer spremenite uporabnikovo prednostno jezikovno nastavitev. Za ideje, kako to storiti, si oglejte celoten primer kode!
Korak 5: Razmestite in preizkusite!
Končali smo! Vaša React aplikacija bo zdaj samodejno prevedena, ko v komponento Translate dodate kakršnekoli nize. Upoštevajte, da bodo samo okolja z dovoljenji read/write na API ključu lahko ustvarjala nove nize za prevod. Priporočamo, da imate zaprto in zavarovano testno okolje, kjer lahko s takšnim API ključem preizkusite svojo produkcijsko aplikacijo in dodate nove nize pred objavo. To bo preprečilo, da bi kdorkoli kdorkoli ukradel vaš skrivni API ključ in potencialno napihnil vaš prevajalski projekt z dodajanjem novih, nepovezanih nizov.
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!