Hoe om internasionaalheidsfunksionaliteit te implementeer in ’n Next.js-toepassing wat die App Router gebruik
Maak jou React-toepassing meer toeganklik en bereik nuwe markte met internasionale toepassing (i18n).
Soos die wêreld meer geglobaliseer raak, word dit al hoe belangriker vir webontwikkelaars om toepassings te bou wat aan gebruikers van verskillende lande en kulture kan voorsien. Een van die belangrikste maniere om dit te bereik is deur internasionale gebruikersvriendelikheid (i18n), wat jou toelaat om jou toepassing aan te pas by verskillende tale, geldeenhede en datumformate.
In hierdie artikel gaan ons ondersoek hoe om internasionale gebruikersvriendelikheid by jou React Next.js-toepassing in te sluit, met bediener-side rendering. TL;DR: Sien die volledige voorbeeld hier.
Hierdie gids is vir Next.js-toepassings wat die App Router gebruik.
As jy die Pages Router gebruik, sien eerder hierdie gids.
Stap 1: Installeer ’n i18n biblioteek
Om internasionale ondersteuning in jou Next.js-toepassing te implementeer, sal ons eers 'n i18n-biblioteek kies. Daar is verskeie gewilde biblioteke, insluitend next-intl. In hierdie voorbeeld gaan ons egter TacoTranslate gebruik.
TacoTranslate vertaal jou stringe outomaties na enige taal met behulp van gevorderde KI, en bevry jou van die vermoeiende bestuur van JSON-lêers.
Kom ons installeer dit met behulp van npm in jou terminal:
npm install tacotranslate
Stap 2: Skep 'n gratis TacoTranslate rekening
Nou dat jy die module geïnstalleer het, is dit tyd om jou TacoTranslate-rekening, ’n vertaalprojek, en geassosieerde API-sleutels te skep. Skep hier ’n rekening. Dit is gratis, en vereis nie dat jy ’n kredietkaart byvoeg nie.
Binne die TacoTranslate toepassingskoppelvlak, skep 'n projek, en navigeer na die API-sleutels-oortjie daarvan. Skep een read
sleutel, en een read/write
sleutel. Ons sal dit as omgewingveranderlikes stoor. Die read
sleutel is wat ons public
noem en die read/write
sleutel is secret
. Byvoorbeeld, jy kan dit byvoeg in 'n .env
lêer in die wortel van jou projek.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Maak seker dat jy nooit die geheime read/write
API-sleutel na kliëntkant-produksieomgewings uitlek nie.
Ons voeg ook nog twee omgewingveranderlikes by: TACOTRANSLATE_DEFAULT_LOCALE
en TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Die standaard terugval-lokale kode. In hierdie voorbeeld gaan ons dit open
vir Engels stel.TACOTRANSLATE_ORIGIN
: Die “lêergids” waar jou stringe gestoor sal word, soos die URL van jou webwerf. Lees meer oor oorspronge hier.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Stap 3: TacoTranslate opstel
Om TacoTranslate met jou toepassing te integreer, sal jy ʼn kliënt moet skep met die API-sleutels van vroeër. Skep byvoorbeeld ʼn lêer met die naam /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;
Ons sal binnekort outomaties TACOTRANSLATE_API_KEY
en TACOTRANSLATE_PROJECT_LOCALE
definieer.
Om die kliënt in 'n aparte lêer te skep maak dit maklik om dit later weer te gebruik. getLocales
is net 'n hulpmiddel funksie met ingeboude fout hantering. Skep nou 'n lêer met die naam /app/[locale]/tacotranslate.tsx
, waar ons die TacoTranslate
verskaffer sal implementeer.
'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>
);
}
Let op die 'use client';
wat aandui dat dit ’n klient-komponent is.
Met die konteksverskaffer nou gereed, skep ʼn lêer genaamd /app/[locale]/layout.tsx
, die wortel-uitleg in ons toepassing. Neem kennis dat hierdie pad ʼn gids het wat gebruik maak van Dynamic Routes, waar [locale]
die dinamiese parameter is.
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>
);
}
Die eerste ding om hier op te let is dat ons ons Dynamic Route
parameter [locale]
gebruik om vertalings vir daardie taal te haal. Daarbenewens sorg generateStaticParams
dat al die taalversies wat jy vir jou projek geaktiveer het, vooraf gegenereer word.
Kom ons bou nou ons eerste bladsy! Skep ʼn lêer met die naam /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!" />
);
}
Let wel die revalidate
veranderlike wat vir Next.js sê om die bladsy na 60 sekondes weer te bou, en jou vertalings op datum te hou.
Stap 4: Implementering van bediener-kante rendering
TacoTranslate ondersteun bediener-kant rendering. Dit verbeter die gebruikerservaring aansienlik deur vertaalde inhoud dadelik te wys, in plaas van eers 'n flits van onvertaalde inhoud. Boonop kan ons netwerkversoeke aan die kliëntkant oorslaan, omdat ons reeds die vertalings het wat ons benodig vir die bladsy wat die gebruiker besigtig.
Om bediener-kant rendering op te stel, skep of wysig /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};
};
Pas die isProduction
kontrole aan by jou opstelling. As dit true
is, sal TacoTranslate die publieke API-sleutel openbaar maak. As ons in ’n plaaslike, toets- of staging-omgewing is (isProduction
is false
), sal ons die geheime read/write
API-sleutel gebruik om seker te maak nuwe stringe word vir vertaling gestuur.
Om te verseker dat routing en herleiding soos verwag werk, sal ons ʼn lêer met die naam /middleware.ts
moet skep. Deur gebruik te maak van Middleware, kan ons gebruikers herlei na bladsye wat in hul voorkeurtaal aangebied word.
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);
}
Maak seker dat jy die matcher
opstel in ooreenstemming met die Next.js Middleware dokumentasie.
Aan die kliënt kan jy die locale
koekie verander om te wys wat die gebruiker se voorkeurtaal is. Sien asseblief die volledige voorbeeldkode vir idees oor hoe om dit te doen!
Stap 5: Ontplooi en toets!
Ons is klaar! Jou React-toepassing sal nou outomaties vertaal word wanneer jy enige stringe by 'n Translate
komponent voeg. Let daarop dat slegs omgewings met read/write
toestemmings op die API-sleutel nuwe stringe sal kan skep om vertaal te word. Ons beveel aan om 'n geslote en beveiligde staging-omgewing te hê waar jy jou produksietoepassing met so 'n API-sleutel kan toets, en nuwe stringe kan voeg voordat dit regstreeks gaan. Dit sal voorkom dat enigiemand jou geheime API-sleutel steel, en moontlik jou vertaalprojek te veel laat groei deur nuwe, nie-verwante stringe by te voeg.
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!