Kā ieviest internacionalizāciju Next.js lietotnē, kas izmanto App Router
Padariet savu React lietotni pieejamāku un sasniedziet jaunus tirgus ar internacionalizāciju (i18n).
Tā kā pasaule kļūst arvien globalizētāka, tīmekļa izstrādātājiem kļūst arvien svarīgāk izstrādāt lietotnes, kas pielāgojas lietotājiem no dažādām valstīm un kultūrām. Viens no galvenajiem veidiem, kā to panākt, ir internacionalizācija (i18n), kas ļauj pielāgot jūsu lietotni dažādām valodām, valūtām un datumu formātiem.
Šajā rakstā mēs izpētīsim, kā pievienot internacionalizāciju jūsu React Next.js lietotnei, izmantojot servera puses renderēšanu. TL;DR: Skatiet pilno piemēru šeit.
Šis ceļvedis ir paredzēts Next.js lietojumprogrammām, kas izmanto App Router.
Ja izmantojat Pages Router, skatiet šo ceļvedi.
1. solis: Instalējiet i18n bibliotēku
Lai īstenotu internacionalizāciju jūsu Next.js lietotnē, vispirms izvēlēsimies i18n bibliotēku. Ir vairākas populāras bibliotēkas, tostarp next-intl. Tomēr šajā piemērā mēs izmantosim TacoTranslate.
TacoTranslate automātiski pārtulko jūsu virknes jebkurā valodā, izmantojot modernās mākslīgā intelekta tehnoloģijas, un atbrīvo jūs no nogurdinošas JSON failu pārvaldīšanas.
Instalēsim to, izmantojot npm jūsu terminālī:
npm install tacotranslate
2. solis: Izveidojiet bezmaksas TacoTranslate kontu
Tagad, kad modulis ir instalēts, ir laiks izveidot TacoTranslate kontu, tulkošanas projektu un ar to saistītās API atslēgas. Izveidojiet kontu šeit. Tas ir bez maksas, un nepieprasa pievienot kredītkarti.
TacoTranslate lietotnes saskarnē izveidojiet projektu un atveriet tā API atslēgu cilni. Izveidojiet vienu read
atslēgu un vienu read/write
atslēgu. Mēs saglabāsim tās kā vides mainīgos. read
atslēga ir tā, ko mēs saucam par public
, bet read/write
atslēga ir secret
. Piemēram, jūs tās varat pievienot failam .env
jūsu projekta saknē.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Rūpīgi pārliecinieties, ka slepenā read/write
API atslēga nekad netiek nopludināta klienta puses ražošanas vidē.
Mēs arī pievienosim vēl divus vides mainīgos: TACOTRANSLATE_DEFAULT_LOCALE
un TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Noklusējuma rezerves lokalizācijas kods. Šajā piemērā to iestatīsim uzen
, kas apzīmē angļu valodu.TACOTRANSLATE_ORIGIN
: “mape”, kur tiks glabāti jūsu teksti, piemēram, jūsu vietnes URL. Lasiet vairāk par origin šeit.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
3. solis: TacoTranslate iestatīšana
Lai integrētu TacoTranslate savā lietotnē, jums būs jāizveido klients, izmantojot iepriekš norādītās API atslēgas. Piemēram, izveidojiet failu ar nosaukumu /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;
Drīzumā mēs automātiski definēsim TACOTRANSLATE_API_KEY
un TACOTRANSLATE_PROJECT_LOCALE
.
Klienta izveide atsevišķā failā padara to vieglāku lietošanai vēlāk. getLocales
ir tikai palīgfunkcija ar iebūvētu kļūdu apstrādi. Tagad izveidojiet failu ar nosaukumu /app/[locale]/tacotranslate.tsx
, kurā mēs ieviesīsim TacoTranslate
nodrošinātāju.
'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>
);
}
Pievērsiet uzmanību 'use client';
, kas norāda, ka šis ir klienta komponents.
Tagad, kad konteksta nodrošinātājs ir gatavs, izveidojiet failu ar nosaukumu /app/[locale]/layout.tsx
, kas ir mūsu lietotnes saknes izkārtojums. Ņemiet vērā, ka šajā ceļā ir mape, kas izmanto Dynamic Routes, kur [locale]
ir dinamisks parametrs.
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>
);
}
Pirmkārt, jāņem vērā, ka mēs izmantojam mūsu Dynamic Route
parametru [locale]
lai izgūtu tulkojumus šai valodai. Papildus tam, generateStaticParams
nodrošina, ka visi lokāļu kodi, kurus esat aktivizējis savā projektā, tiek iepriekš atveidoti.
Tagad izveidosim mūsu pirmo lapu! Izveidojiet failu ar nosaukumu /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!" />
);
}
Ņemiet vērā mainīgo revalidate
, kas liek Next.js pārbūvēt lapu pēc 60 sekundēm un uzturēt jūsu tulkojumus aktuālus.
4. solis: Serverpuses renderēšanas īstenošana
TacoTranslate atbalsta servera puses renderēšanu. Tas ievērojami uzlabo lietotāja pieredzi, jo tulkots saturs tiek rādīts uzreiz, nevis sākotnēji uz brīdi parādot netulkotu saturu. Turklāt mēs varam izlaist tīkla pieprasījumus klienta pusē, jo mums jau ir nepieciešamie tulkojumi lapai, ko lietotājs skatās.
Lai iestatītu servera puses renderēšanu, izveidojiet vai modificējiet /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};
};
Pielāgojiet isProduction
pārbaudi atbilstoši jūsu konfigurācijai. Ja true
, TacoTranslate izmantos publisko API atslēgu. Ja mēs atrodamies lokālā, testa vai staging vidē (isProduction
is false
), mēs izmantosim slepeno read/write
API atslēgu, lai nodrošinātu, ka jaunas virknes tiek nosūtītas tulkošanai.
Lai nodrošinātu, ka maršrutēšana un pāradresēšana darbojas kā paredzēts, mums būs jāizveido fails ar nosaukumu /middleware.ts
. Izmantojot Middleware, mēs varam pāradresēt lietotājus uz lapām, kas tiek rādītas viņu vēlamajā valodā.
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);
}
Pārliecinieties, ka matcher
ir iestatīts saskaņā ar Next.js Middleware dokumentāciju.
Klientā jūs varat mainīt locale
sīkfailu, lai norādītu lietotāja vēlamo valodu. Lūdzu, apskatiet pilnu piemēra kodu, lai iegūtu idejas, kā to izdarīt!
5. solis: Izvietot un pārbaudīt!
Viss ir gatavs! Jūsu React lietotne tagad tiks automātiski tulkota, kad pievienosiet jebkādus tekstus Translate
komponentā. Ņemiet vērā, ka tikai vidēs, kurām API atslēgā ir read/write
atļaujas, būs iespējams izveidot jaunas virknes tulkošanai. Mēs iesakām izveidot slēgtu un drošu testēšanas vidi, kurā varat pārbaudīt savu ražošanas lietotni, izmantojot šādu API atslēgu, pievienojot jaunas virknes pirms palaišanas. Tas novērsīs, ka kāds nozog jūsu slepeno API atslēgu un potenciāli piepilda jūsu tulkojumu projektu ar jauniem, nesaistītiem ierakstiem.
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!