Hvernig á að innleiða alþjóðavæðingu í Next.js-forrit sem notar App Router
Gerðu React-forritið þitt aðgengilegra og náðu til nýrra markaða með alþjóðavæðingu (i18n).
Þegar heimurinn verður sífellt hnattvæðari er það æ mikilvægara fyrir vefþróunarfólk að byggja forrit sem geta mætt þörfum notenda frá ólíkum löndum og menningum. Ein af lykilleiðunum til að ná þessu er alþjóðavæðing (i18n), sem gerir þér kleift að aðlaga forritið að mismunandi tungumálum, gjaldmiðlum og dagsetningasniðum.
Í þessari grein munum við skoða hvernig á að bæta alþjóðavæðingu við React Next.js-forritið þitt, með framsetningu á þjónustuhlið (server side rendering). TL;DR: Sjáðu fulla dæmið hér.
Þessi leiðarvísir er fyrir Next.js-forrit sem nota App Router.
Ef þú ert að nota Pages Router, sjáðu þessa leiðbeiningu í staðinn.
Skref 1: Settu upp i18n-bókasafn
Til að innleiða alþjóðavæðingu í Next.js-forritinu þínu skulum við fyrst velja i18n-bókasafn. Það eru nokkur vinsæl bókasöfn, þar á meðal next-intl. Í þessu dæmi munum við hins vegar nota TacoTranslate.
TacoTranslate þýðir sjálfkrafa strengina þína yfir á hvaða tungumál sem er með háþróaðri gervigreind og losar þig frá leiðinlegri meðhöndlun JSON-skráa.
Setjum það upp með npm í skipanalínunni þinni:
npm install tacotranslate
Skref 2: Stofnaðu ókeypis TacoTranslate reikning
Nú þegar þú hefur sett pakkann upp er kominn tími til að búa til TacoTranslate-reikninginn þinn, þýðingarverkefni og tilheyrandi API-lykla. Búðu til reikning hér. Það er ókeypis og krefst ekki þess að þú gefir upp kreditkort.
Í notendaviðmóti TacoTranslate-forritsins skaltu búa til verkefni og fara á flipann fyrir API-lykla. Búðu til einn read
lykil og einn read/write
lykil. Við munum vista þá sem umhverfisbreytur. read
lykillinn er það sem við köllum public
og read/write
lykillinn er secret
. Til dæmis gætirðu bætt þeim í .env
skrá í rót verkefnisins.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Gakktu úr skugga um að leka aldrei leynilega read/write
API-lykli út í framleiðsluumhverfi viðskiptavinasíðunnar.
Við munum einnig bæta við tveimur öðrum umhverfisbreytum: TACOTRANSLATE_DEFAULT_LOCALE
og TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Sjálfgefið varatungumálakóði. Í þessu dæmi setjum við hann áen
fyrir ensku.TACOTRANSLATE_ORIGIN
: “mappa” þar sem strengirnir þínir verða geymdir, til dæmis slóð vefsíðunnar þinnar. Lestu meira um uppruna hér.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Skref 3: Að setja upp TacoTranslate
Til að samþætta TacoTranslate við forritið þitt þarftu að búa til client sem notar API-lyklana sem þú bjóst til áðan. Til dæmis skaltu búa til skrá sem heitir /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;
Við munum sjálfkrafa skilgreina TACOTRANSLATE_API_KEY
og TACOTRANSLATE_PROJECT_LOCALE
fljótlega.
Að búa til client-inn í sérstöku skrá gerir það auðvelt að nota hann aftur síðar. getLocales
er einfaldlega hjálparfall með innbyggða villumeðhöndlun. Nú skaltu búa til skrá sem heitir /app/[locale]/tacotranslate.tsx
, þar sem við munum útfæra TacoTranslate
provider-inn.
'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>
);
}
Athugaðu 'use client';
sem gefur til kynna að þetta sé viðskiptavinshluti.
Með samhengi-veitunni nú tilbúnni, búðu til skrá sem heitir /app/[locale]/layout.tsx
, rótarlayoutið í forritinu okkar. Athugaðu að þessi slóð inniheldur möppu sem notar Dynamic Routes, þar sem [locale]
er dýnamísk breyta.
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>
);
}
Það fyrsta sem þarf að hafa í huga hér er að við notum Dynamic Route
breytuna [locale]
til að sækja þýðingar fyrir það tungumál. Auk þess sér generateStaticParams
til þess að allir tungumálakóðar sem þú hefur virkjað fyrir verkefnið þitt séu renderaðir fyrirfram.
Nú skulum við byggja fyrstu síðuna okkar! Búðu til skrá sem heitir /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!" />
);
}
Athugaðu revalidate
breytuna sem segir Next.js að endurbyggja síðuna eftir 60 sekúndur og halda þýðingunum þínum uppfærðum.
Skref 4: Innleiðing þjónustuhliðarrenderingar
TacoTranslate styður renderingu á þjónsíðunni. Þetta bætir notendaupplifunina verulega þar sem þýtt efni er sýnt strax, í stað þess að birta fyrst glimt af óþýddu efni. Auk þess getum við sleppt netbeiðnum á viðskiptavinshliðinni, því við höfum þegar þýðingarnar sem við þurfum fyrir síðuna sem notandinn er að skoða.
Til að setja upp server-side rendering, búðu til eða breyttu /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};
};
Breyttu isProduction
athuguninni svo hún passi við uppsetninguna þína. Ef true
, mun TacoTranslate birta opinbera API-lykilinn. Ef við erum í staðbundnu, prófunar- eða staging-umhverfi (isProduction
is false
), munum við nota leynilega read/write
API-lykilinn til að tryggja að nýir strengir séu sendir til þýðingar.
Til að tryggja að leiðakerfi og endurvísanir virki eins og búist er við, þurfum við að búa til skrá sem heitir /middleware.ts
. Með því að nota Middleware, getum við vísað notendum á síður sem eru birtar á þeirra valda tungumáli.
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);
}
Gakktu úr skugga um að stilla matcher
í samræmi við Next.js Middleware-skjölin.
Á klientsíðunni geturðu breytt locale
smákökunni til að breyta hvaða tungumál notandinn kýs. Skoðaðu heildar dæmakóðann fyrir hugmyndir um hvernig þetta er gert!
Skref 5: Setja í framleiðslu og prófa!
Það er búið! React-forritið þitt verður nú sjálfkrafa þýtt þegar þú bætir við textastrengjum í Translate
íhlut. Athugaðu að aðeins umhverfi sem hafa read/write
heimildir fyrir API-lykilinn geta búið til nýja strengi til þýðingar. Við mælum með að hafa lokað og öruggt staging-umhverfi þar sem þú getur prófað framleiðsluforritið þitt með slíkan API-lykil og bætt við nýjum strengjum áður en farið er í framleiðslu. Þetta kemur í veg fyrir að einhver einhver steli leynilegum API-lykli þínum, og mögulega fylli þýðingarverkefnið þitt með nýjum, ótengdum strengjum.
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!