TacoTranslate
/
DokumentācijaCenu noteikšana
 
Apmācība
04. maijs

Kā ieviest internacionalizāciju Next.js lietotnē, kas izmanto App Router

Padari savu React lietotni pieejamāku un sasniedz jaunus tirgus ar internacionalizāciju (i18n).

Pasaule kļūst arvien globalizētāka, tāpēc tīmekļa izstrādātājiem kļūst arvien svarīgāk veidot lietojumprogrammas, kas spēj apkalpot lietotājus 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 lietojumprogrammu 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 lietojumprogrammai, izmantojot servera puses renderēšanu. TL;DR: Pilnu piemēru skatiet šeit.

Šis ceļvedis ir paredzēts Next.js lietojumprogrammām, kas izmanto App Router.
Ja izmantojat Pages Router, skatiet šeit šo ceļvedi.

1. solis: Instalējiet i18n bibliotēku

Lai ieviestu lokalizāciju savā Next.js lietotnē, vispirms izvēlēsimies i18n bibliotēku. Ir vairākas populāras bibliotēkas, tostarp next-intl. Šajā piemērā tomēr izmantosim TacoTranslate.

TacoTranslate automātiski tulko jūsu virknes jebkurā valodā, izmantojot modernu mākslīgo intelektu, un atbrīvo jūs no laikietilpīgas JSON failu pārvaldības.

Uzstādīsim to, izmantojot npm jūsu terminālī:

npm install tacotranslate

2. solis: Izveidojiet bezmaksas TacoTranslate kontu

Tagad, kad moduļis ir instalēts, ir laiks izveidot savu TacoTranslate kontu, tulkošanas projektu un saistītās API atslēgas. Izveido kontu šeit. Tas ir bez maksas, un nepieprasa kredītkaršu pievienošanu.

TacoTranslate lietotnes lietotāja saskarnē izveidojiet projektu un dodieties uz tā API atslēgu cilni. Izveidojiet vienu read atslēgu un vienu read/write atslēgu. Mēs tās saglabāsim kā vides mainīgos. read atslēgu saucam par public, bet read/write atslēgu par secret. Piemēram, jūs tās varat pievienot .env failam sava projekta saknes direktorijā.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Pārliecinieties, ka nekad nenopludināt slepeno read/write API atslēgu klienta puses ražošanas vidēm.

Mēs arī pievienosim vēl divas vides mainīgās: TACOTRANSLATE_DEFAULT_LOCALE un TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Noklusējuma rezerves valodas kods. Šajā piemērā to iestatīsim uz en angļu valodai.
  • TACOTRANSLATE_ORIGIN: “Mape”, kurā tiks saglabāti jūsu tekstu virknes, piemēram, jūsu vietnes URL. Lasiet vairāk par origināļiem šeit.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

3. solis: TacoTranslate iestatīšana

Lai integrētu TacoTranslate ar savu lietotni, jums būs jāizveido klients, izmantojot iepriekš iegūtās API atslēgas. Piemēram, izveidojiet failu ar nosaukumu /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;

Mēs drīzumā automātiski definēsim TACOTRANSLATE_API_KEY un TACOTRANSLATE_PROJECT_LOCALE.

Klienta izveide atsevišķā failā padara to viegli lietojamu vēlāk. getLocales ir tikai palīgfunkcija ar ievietotu kļūdu apstrādi. Tagad izveido failu ar nosaukumu /app/[locale]/tacotranslate.tsx, kurā ieviersim TacoTranslate nodrošinātāju.

/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>
	);
}

Ņemiet vērā 'use client';, kas norāda, ka šī ir klienta komponente.

Tagad, kad konteksta nodrošinātājs ir gatavs lietošanai, 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 dinamiskais parametrs.

/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>
	);
}

Pirmā lieta, ko šeit jāņem vērā, ir tā, ka mēs izmantojam mūsu Dynamic Route parametru [locale] lai izgūtu tulkojumus attiecīgajai valodai. Turklāt generateStaticParams nodrošina, ka visi valodu kodi, kurus esat aktivizējis savam projektam, tiek iepriekš atveidoti.

Tagad izveidosim mūsu pirmo lapu! Izveidojiet failu ar nosaukumu /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!" />
	);
}

Pievērsiet uzmanību revalidate mainīgajam, kas norāda Next.js pārbūvēt lapu pēc 60 sekundēm un uzturēt jūsu tulkojumus aktuālus.

4. solis: Servera puses renderēšanas īstenošana

TacoTranslate atbalsta servera puses renderēšanu. Tas ievērojami uzlabo lietotāja pieredzi, nekavējoties rādot tulkotu saturu, nevis vispirms rādot netulkotu satura mirkli. Turklāt mēs varam izlaist tīkla pieprasījumus klientā, jo mums jau ir nepieciešamie tulkojumi lapai, kuru lietotājs skatās.

Lai iestatītu servera puses renderēšanu, izveidojiet vai modificējiet /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};
};

Pielāgojiet isProduction pārbaudi atbilstoši jūsu konfigurācijai. Ja true, TacoTranslate izmantos publisko API atslēgu. Ja atrodamies vietējā, testēšanas vai staging vidē (isProduction is false), tiks izmantota slepenā read/write API atslēga, lai nodrošinātu jaunu tekstu nosūtīšanu tulkošanai.

Lai nodrošinātu, ka pāradresācija un maršrutēš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 attēlotas viņu vēlamajā valodā.

/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);
}

Pārliecinieties, ka esat iestatījis matcher saskaņā ar Next.js Middleware dokumentāciju.

Klientā jūs varat mainīt locale sīkfailu, lai mainītu lietotāja vēlamo valodu. Lūdzu, skatiet pilnu piemēra kodu, lai iegūtu idejas, kā to izdarīt!

5. solis: Izvietojiet un testējiet!

Esam pabeiguši! Jūsu React lietotne tagad tiks automātiski tulkota, kad pievienosiet jebkādas virknes Translate komponentam. Ņemiet vērā, ka tikai vidēm ar read/write atļaujām uz API atslēgas būs iespēja izveidot jaunas virknes tulkošanai. Mēs iesakām izveidot slēgtu un drošu pārbaudes vidi, kurā varat testēt savu ražošanas lietotni, izmantojot tādu API atslēgu, pievienojot jaunas virknes pirms tiešraides. Tas novērsīs jebkādu jūsu slepenās API atslēgas zādzību un potenciāli nepieļaus tulkošanas projekta piepildīšanu ar jaunām, nesaistītām virknēm.

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!

Produkts no NattskiftetRažots Norvēģijā