Kuidas rakendada rahvusvahelistamist Next.js rakenduses, mis kasutab App Router
Muuda oma Reacti rakendus kättesaadavamaks ja jõua uute turgudeni rahvusvahelistamise (i18n) abil.
Maailm muutub üha globaliseeritumaks, mistõttu on veebiarendajatel üha olulisem luua rakendusi, mis suudavad teenindada kasutajaid erinevatest riikidest ja kultuuridest. Üks peamisi viise selle saavutamiseks on rahvusvahelistumine (i18n), mis võimaldab kohandada oma rakendust erinevatele keeltele, valuutadele ja kuupäevavormingutele.
Selles artiklis uurime, kuidas lisada rahvusvahelistumist (i18n) oma React Next.js rakendusse serveripoolse renderdamise abil. TL;DR: Vaata kogu näidet siit.
See juhend on mõeldud Next.js rakendustele, mis kasutavad App Router.
Kui kasutate Pages Router, vaadake selle asemel seda juhendit.
Samm 1: Paigaldage i18n-teek
Rahvusvahelistuse (i18n) lisamiseks oma Next.js rakendusse valime esmalt i18n-teegi. On mitu populaarset teeki, sealhulgas next-intl. Kuid selles näites kasutame TacoTranslate.
TacoTranslate tõlgib teie stringid automaatselt mis tahes keelde tänu tipptasemel tehisintellektile ning vabastab teid JSON‑failide tüütust haldamisest.
Paigaldame selle terminalis, kasutades npm:
npm install tacotranslate
Samm 2: Loo tasuta TacoTranslate'i konto
Nüüd, kui olete mooduli installinud, on aeg luua oma TacoTranslate konto, tõlkeprojekt ja sellega seotud API-võtmed. Loo konto siit. See on tasuta ja ei nõua krediitkaardi lisamist.
TacoTranslate rakenduse kasutajaliideses loo projekt ja liigu selle API-võtmete vahekaardile. Loo üks read
võti ja üks read/write
võti. Salvestame need keskkonnamuutujatena. read
võtit kutsume public
ja read/write
võtit secret
. Näiteks võid need lisada projekti juurkausta asuvasse .env
faili.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Veenduge, et salajane read/write
API-võti ei lekiks kunagi kliendipoolsetesse tootmiskeskkondadesse.
Lisame ka kaks täiendavat keskkonnamuutujat: TACOTRANSLATE_DEFAULT_LOCALE
ja TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Vaikimisi tagavara lokaali kood. Selles näites seadistame selle väärtuseksen
(inglise keele jaoks).TACOTRANSLATE_ORIGIN
: „kaust”, kuhu teie stringid salvestatakse, näiteks teie veebisaidi URL. Loe originitest lähemalt siit.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
3. samm: TacoTranslate'i seadistamine
Selleks, et integreerida TacoTranslate oma rakendusega, peate looma kliendi, kasutades eelnevaid API-võtmeid. Näiteks looge fail nimega /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;
Me määrame TACOTRANSLATE_API_KEY
ja TACOTRANSLATE_PROJECT_LOCALE
varsti automaatselt.
Kliendi loomine eraldi failis teeb selle hiljem uuesti kasutamise lihtsaks. getLocales
on lihtsalt abifunktsioon sisseehitatud veakäsitlusega. Nüüd loo fail nimega /app/[locale]/tacotranslate.tsx
, kuhu me rakendame TacoTranslate
pakkujat.
'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>
);
}
Pange tähele 'use client';
, mis näitab, et tegemist on kliendikomponendiga.
Nüüd, kui konteksti pakkuja on valmis, loo fail nimega /app/[locale]/layout.tsx
, mis on meie rakenduse juurpaigutus. Pane tähele, et see tee sisaldab kausta, mis kasutab Dynamic Routes, kus [locale]
on dünaamiline parameeter.
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>
);
}
Esimene asi, mida siin tähele panna, on see, et me kasutame oma Dynamic Route
parameetrit [locale]
selle keele tõlgete pärimiseks. Lisaks tagab generateStaticParams
selle, et kõik teie projektis aktiveeritud lokaalikoodid eelrenderdatakse.
Nüüd loome oma esimese lehe! Loo fail nimega /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!" />
);
}
Pange tähele revalidate
muutujat, mis ütleb Next.js-ile, et ta ehitaks lehe uuesti 60 sekundi pärast ja hoiaks teie tõlked ajakohasena.
Samm 4: Serveripoolse renderdamise rakendamine
TacoTranslate toetab serveripoolset renderdamist. See parandab kasutajakogemust märkimisväärselt, kuna tõlgitud sisu kuvatakse kohe, selle asemel et enne näidata lühikest hetke tõlkimata sisu. Lisaks saame kliendipoolseid võrgu päringuid vahele jätta, sest meil on juba olemas tõlked, mida kasutaja vaataval lehel vaja on.
Serveripoolse renderdamise seadistamiseks loo või muuda /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};
};
Muuda isProduction
kontroll vastavalt oma seadistusele. Kui true
, kuvab TacoTranslate avaliku API-võtme. Kui oleme lokaalses, test- või staging-keskkonnas (isProduction
is false
), kasutame salajast read/write
API-võtit, et tagada uute stringide saatmine tõlkimiseks.
Et tagada, et marsruutimine ja ümber suunamine toimivad ootuspäraselt, peame looma faili nimega /middleware.ts
. Kasutades Middleware, saame kasutajaid suunata lehtedele, mis on kuvatud nende eelistatud keeles.
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);
}
Veendu, et matcher
oleks seadistatud vastavalt Next.js Middleware dokumentatsioonile.
Kliendipoolsel küljel saate muuta locale
küpsist, et määrata kasutaja eelistatud keel. Palun vaadake ideede saamiseks täielikku näidiskoodi!
5. samm: Juuruta ja testi!
Oleme valmis! Teie React-rakendus tõlgitakse nüüd automaatselt, kui lisate mis tahes stringe Translate
komponendile. Pange tähele, et ainult keskkonnad, millel on API‑võtmel read/write
õigused, saavad luua uusi tõlkimiseks mõeldud stringe. Soovitame hoida suletud ja turvalist staging‑keskkonda, kus saate testida oma tootmisrakendust sellise API‑võtmega ning lisada uusi stringe enne avalikuks minekut. See hoiab ära, et keegi keegi varastaks teie salajast API‑võtit ning potentsiaalselt paisutaks teie tõlkeprojekti, lisades uusi, mitteseotud stringe.
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!