TacoTranslate
/
SkjölVerð
 
Kennsluleiðbeiningar
04. maí

Hvernig á að innleiða alþjóðavæðingu í Next.js-forriti 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 vefhönnuði að byggja forrit sem geta mætt þörfum notenda frá mismunandi löndum og menningarheimum. Eitt af helstu leiðunum til að ná þessu er alþjóðavæðing (i18n), sem gerir þér kleift að laga forritið þitt að mismunandi tungumálum, gjaldmiðlum og dagsetningasniðum.

Í þessari grein munum við skoða hvernig bæta má alþjóðavæðingu við React Next.js-forritið þitt með renderingu á þjónustuhlið. TL;DR: Sjá dæmið í heild hér.

Þessi leiðarvísir er fyrir Next.js-umsóknir sem nota App Router.
Ef þú ert að nota Pages Router, skoðaðu þennan leiðarvísir í staðinn.

Skref 1: Settu upp i18n-bókasafn

Til að innleiða alþjóðavæðingu í Next.js-forritið þitt 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álfvirkt strengina þína yfir á hvaða tungumál sem er með nýjustu gervigreindartækni og losar þig undan leiðinlegri umsjón með JSON-skrám.

Setjum það upp með npm í skipanalínunni þinni:

npm install tacotranslate

Skref 2: Búðu til ókeypis TacoTranslate reikning

Nú þegar þú hefur sett upp pakkann er kominn tími til að búa til TacoTranslate-aðganginn þinn, þýðingarverkefni og tilheyrandi API-lykla. Opnaðu aðgang hér. Það er ókeypis, og þú þarft ekki að skrá kreditkort.

Í notendaviðmóti TacoTranslate 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.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Gakktu úr skugga um að leka aldrei leynda read/write API-lykli í framleiðsluumhverfi á viðskiptavinshlið.

Við munum einnig bæta við tveimur fleiri umhverfisbreytum: TACOTRANSLATE_DEFAULT_LOCALE og TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Sjálfgefinn varakóði fyrir staðsetningu (locale). Í þessu dæmi stillum við hann á en fyrir ensku.
  • TACOTRANSLATE_ORIGIN: „mappa“ þar sem strengirnir þínir verða geymdir, til dæmis vefslóð vefsíðunnar þinnar. Lestu meira um uppruna hér.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Skref 3: Setja upp TacoTranslate

Til að innleiða TacoTranslate í forritið þitt þarftu að búa til client sem notar API-lykla sem áður voru nefndir. Til dæmis, búðu til skrá sem heitir /tacotranslate-client.js.

/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álfvirkt skilgreina TACOTRANSLATE_API_KEY og TACOTRANSLATE_PROJECT_LOCALE bráðlega.

Að búa til viðskiptavin (client) í sérri skrá gerir það auðvelt að nota hann aftur síðar. getLocales er einfaldlega hjálparfall með innbyggða villumeðhöndlun. Búðu nú til skrá sem heitir /app/[locale]/tacotranslate.tsx, þar sem við munum útfæra TacoTranslate veituna.

/app/[locale]/tacotranslate.tsx
'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é client-íhluti.

Nú þegar samhengisveitan er tilbúin, búðu til skrá sem heitir /app/[locale]/layout.tsx, rótarlayoutið í forritinu okkar. Athugaðu að þessi slóð inniheldur möppu sem nýtir sér Dynamic Routes, þar sem [locale] er dýnamíski slóðarbreytan.

/app/[locale]/layout.tsx
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 vert er að taka fram hér er að við notum Dynamic Route breytuna okkar [locale] til að sækja þýðingar fyrir viðkomandi tungumál. Enn fremur sér generateStaticParams um að allir tungumálakóðarnir sem þú hefur virkjað fyrir verkefnið þitt séu renderaðir fyrirfram.

Nú skulum við búa til fyrstu síðu okkar! Búðu til skrá sem heitir /app/[locale]/page.tsx.

/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 breytuna revalidate 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ðarröðunar

TacoTranslate styður þjónustuhliðarrenderun. Þetta bætir notendaupplifun verulega með því að birta þýtt efni strax, í stað þess að notandinn sjái fyrst glampa af óþýddu efni. Að auki getum við sleppt netbeiðnum í vafranum, því við höfum þegar þær þýðingar sem við þurfum fyrir síðuna sem notandinn er að skoða.

Til að setja upp server-side rendering skaltu búa til eða breyta /next.config.js:

/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 leynilegan read/write API-lykilinn til að ganga úr skugga um að nýir strengir séu sendir til þýðingar.

Til að tryggja að routing og endursending virki eins og til er ætlast, þurfum við að búa til skrá sem heitir /middleware.ts. Með Middleware, getum við vísað notendum á síður sem eru sýndar á þeirra valda tungumáli.

/middleware.ts
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öl.

Á viðskiptavinshliðinni getur þú breytt locale vafrakökunni til að breyta hvaða tungumál notandinn kýs. Skoðaðu dæmakóðann fyrir hugmyndir um hvernig á að gera þetta!

Skref 5: Settu í framleiðslu og prófaðu!

Það er búið! React-forritið þitt verður nú þýtt sjálfkrafa þegar þú bætir við textastrengjum í Translate íhlut. Athugaðu að aðeins umhverfi með read/write heimildum fyrir API-lykilinn munu geta búið til nýja textastrengi 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 það fer í loftið. Þetta kemur í veg fyrir að API-lykillinn þinn fari í rangar hendur og að þýðingarverkefnið þitt fyllist af 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!

Vara frá NattskiftetGert í Noregi