TacoTranslate
/
DokumentáciaCenník
 
Návod
04. 5.

Ako implementovať internacionalizáciu v aplikácii Next.js, ktorá používa App Router

Urobte svoju React aplikáciu prístupnejšou a oslovte nové trhy pomocou internacionalizácie (i18n).

Ako sa svet stáva viac globalizovaným, je pre webových vývojárov čoraz dôležitejšie vytvárať aplikácie, ktoré dokážu vyhovieť používateľom z rôznych krajín a kultúr. Jedným z kľúčových spôsobov, ako toho dosiahnuť, je internacionalizácia (i18n), ktorá vám umožňuje prispôsobiť vašu aplikáciu rôznym jazykom, menám a formátom dátumov.

V tomto článku si ukážeme, ako pridať internacionalizáciu do vašej React Next.js aplikácie s renderovaním na strane servera. TL;DR: Pozrite si celý príklad tu.

Tento sprievodca je určený pre Next.js aplikácie, ktoré používajú App Router.
Ak používate Pages Router, pozrite si namiesto toho tento návod.

Krok 1: Nainštalujte knižnicu i18n

Na implementáciu internacionalizácie vo vašej Next.js aplikácii si najprv vyberieme i18n knižnicu. Existuje niekoľko populárnych knižníc, vrátane next-intl. V tomto príklade však budeme používať TacoTranslate.

TacoTranslate automaticky prekladá vaše reťazce do ľubovoľného jazyka pomocou najmodernejšej AI a zbavuje vás zdĺhavého spravovania JSON súborov.

Nainštalujme ho pomocou npm vo vašom termináli:

npm install tacotranslate

Krok 2: Vytvorte si bezplatný účet TacoTranslate

Keď už máte modul nainštalovaný, je čas vytvoriť si účet TacoTranslate, prekladový projekt a príslušné API kľúče. Zaregistrujte sa tu. Je to zadarmo a nevyžaduje zadanie platobnej karty.

V používateľskom rozhraní aplikácie TacoTranslate vytvorte projekt a prejdite na kartu API kľúčov. Vytvorte jeden read kľúč a jeden read/write kľúč. Uložíme ich ako premenné prostredia. read kľúč je to, čo nazývame public a read/write kľúč je secret. Napríklad ich môžete pridať do súboru .env v koreňovom adresári vášho projektu.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Uistite sa, že nikdy neprezradíte tajný read/write API kľúč v produkčnom prostredí na strane klienta.

Pridáme tiež ďalšie dve premenné prostredia: TACOTRANSLATE_DEFAULT_LOCALE a TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Predvolený kód náhradnej lokality. V tomto príklade ho nastavíme na en pre angličtinu.
  • TACOTRANSLATE_ORIGIN: „zložka“, kde budú uložené vaše reťazce, napríklad URL vašej webovej stránky. Prečítajte si viac o originách tu.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Krok 3: Nastavenie TacoTranslate

Aby ste integrovali TacoTranslate do svojej aplikácie, budete potrebovať vytvoriť klienta pomocou API kľúčov uvedených vyššie. Napríklad vytvorte súbor s názvom /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;

Čoskoro automaticky definujeme TACOTRANSLATE_API_KEY a TACOTRANSLATE_PROJECT_LOCALE.

Vytvorenie klienta v samostatnom súbore zjednodušuje jeho opätovné použitie neskôr. getLocales je len pomocná funkcia s integrovaným spracovaním chýb. Teraz vytvorte súbor s názvom /app/[locale]/tacotranslate.tsx, kde implementujeme poskytovateľa TacoTranslate.

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

Všimnite si 'use client';, čo naznačuje, že ide o klientskú komponentu.

Keď je poskytovateľ kontextu pripravený, vytvorte súbor s názvom /app/[locale]/layout.tsx, ktorý slúži ako koreňové rozloženie v našej aplikácii. Všimnite si, že táto cesta obsahuje priečinok využívajúci Dynamic Routes, kde [locale] je dynamický parameter.

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

Prvá vec, ktorú treba poznamenať, je, že používame náš parameter Dynamic Route [locale] na načítanie prekladov pre daný jazyk. Okrem toho generateStaticParams zabezpečuje, že všetky kódy lokalizácií, ktoré máte vo svojom projekte aktivované, sú pred-renderované.

Poďme vytvoriť našu prvú stránku! Vytvorte súbor s názvom /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!" />
	);
}

Všimnite si premennú revalidate, ktorá spôsobí, že Next.js stránku po 60 sekundách znovu zostaví a udrží vaše preklady aktuálne.

Krok 4: Implementácia renderovania na strane servera

TacoTranslate podporuje renderovanie na strane servera. To výrazne zlepšuje používateľský zážitok tým, že ihneď zobrazuje preložený obsah, namiesto krátkeho zobrazenia nepreloženého obsahu. Okrem toho môžeme na strane klienta vynechať sieťové požiadavky, pretože už máme preklady potrebné pre stránku, ktorú používateľ práve prezerá.

Ak chcete nastaviť vykresľovanie na strane servera, vytvorte alebo upravte /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};
};

Upravte kontrolu isProduction podľa vášho nastavenia. Ak je true, TacoTranslate zobrazí verejný API kľúč. Ak sa nachádzame v lokálnom, testovacom alebo staging prostredí (isProduction is false), použijeme tajný read/write API kľúč, aby sa zabezpečilo, že nové reťazce budú odoslané na preklad.

Aby fungovalo smerovanie a presmerovanie podľa očakávaní, budeme musieť vytvoriť súbor s názvom /middleware.ts. Pomocou Middleware, môžeme presmerovať používateľov na stránky zobrazované v ich preferovanom jazyku.

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

Uistite sa, že matcher nastavíte v súlade s dokumentáciou Next.js o middleware.

Na klientskej strane môžete upraviť cookie locale, aby ste zmenili preferovaný jazyk používateľa. Pozrite si kompletný ukážkový kód pre nápady, ako to urobiť!

Krok 5: Nasadiť a otestovať!

Hotovo! Vaša React aplikácia bude teraz automaticky preložená, keď pridáte akékoľvek reťazce do komponentu Translate. Vezmite na vedomie, že iba prostredia, ktoré majú na API kľúči povolenia read/write, budú môcť vytvárať nové reťazce na preklad. Odporúčame mať uzavreté a zabezpečené stagingové prostredie, kde môžete otestovať vašu produkčnú aplikáciu s takýmto API kľúčom a pridávať nové reťazce pred nasadením do produkcie. Týmto zabránite tomu, aby nikto neukradol váš tajný API kľúč a potenciálne nafúkal váš prekladový projekt pridaním nových, nesúvisiacich reťazcov.

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!

Produkt od NattskiftetVyrobené v Nórsku