TacoTranslate
/
DokumentacionÇmimet
 
Mësim
04 maj

Si të implementoni internacionalizimin në një aplikacion Next.js që përdor App Router

Bëni aplikacionin tuaj React më të aksesueshëm dhe arrini tregje të reja me ndërkombëtarizimin (i18n).

Ndërsa bota bëhet gjithnjë e më globalizuar, është gjithnjë e më e rëndësishme për zhvilluesit e uebit të ndërtojnë aplikacione që mund t'u përgjigjen përdoruesve nga vende dhe kultura të ndryshme. Një nga mënyrat kryesore për ta arritur këtë është përmes internacionalizimit (i18n), i cili ju lejon të përshtatni aplikacionin tuaj me gjuhë, valuta dhe formate datash të ndryshme.

Në këtë artikull, do të eksplorojmë se si të shtojmë internacionalizimin në aplikacionin tuaj React Next.js, me renderim në anën e serverit. TL;DR: Shihni shembullin e plotë këtu.

Ky udhëzues është për aplikacionet Next.js që përdorin App Router.
Nëse po përdorni Pages Router, shikoni këtë udhëzues në vend të kësaj.

Hapi 1: Instaloni një bibliotekë i18n

Për të zbatuar ndërkombëtarizimin në aplikacionin tuaj Next.js, së pari do të zgjedhim një bibliotekë i18n. Ka disa biblioteka të njohura, duke përfshirë next-intl. Në këtë shembull, megjithatë, do të përdorim TacoTranslate.

TacoTranslate përkthen automatikisht vargjet tuaja në çdo gjuhë duke përdorur AI më të avancuar, dhe ju lirëson nga menaxhimi i lodhshëm i skedarëve JSON.

Le ta instalojmë duke përdorur npm në terminalin tuaj:

npm install tacotranslate

Hapi 2: Krijo një llogari falas në TacoTranslate

Tani që e keni instaluar modulën, është koha të krijoni llogarinë tuaj TacoTranslate, një projekt përkthimi, dhe çelësa API të lidhur. Krijoni një llogari këtu. Është falas, dhe nuk kërkon të shtoni një kartë krediti.

Brenda ndërfaqes së aplikacionit TacoTranslate, krijo një projekt dhe navigo te skeda e çelësave API. Krijo një çelës read dhe një çelës read/write. Ne do t’i ruajmë si variabla mjedisi. Çelësi read quhet public dhe çelësi read/write quhet secret. Për shembull, mund t’i shtosh në një skedar .env në rrënjën e projektit tënd.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Sigurohuni që kurrë të mos rrjedhni çelësin sekret read/write të API-së në ambientet e prodhimit në anën e klientit.

Ne gjithashtu do të shtojmë edhe dy variabla mjedisi: TACOTRANSLATE_DEFAULT_LOCALE dhe TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Kodi i parazgjedhur i lokalitetit të rezervës. Në këtë shembull, do ta vendosim në en për anglishten.
  • TACOTRANSLATE_ORIGIN: “Dosja” ku do të ruhen vargjet tuaja, si për shembull URL-ja e faqes suaj të internetit. Lexoni më shumë rreth origjinave këtu.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Hapi 3: Konfigurimi i TacoTranslate

Për të integruar TacoTranslate me aplikacionin tuaj, do t’ju duhet të krijoni një klient duke përdorur çelësat e API-së nga më parë. Për shembull, krijoni një skedar të quajtur /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;

Ne do të përcaktojmë automatikisht TACOTRANSLATE_API_KEY dhe TACOTRANSLATE_PROJECT_LOCALE së shpejti.

Krijimi i klientit në një skedar të veçantë e bën më të lehtë përdorimin e tij më vonë. getLocales është thjesht një funksion ndihmës me menaxhim të gabimeve të integruar. Tani, krijo një skedar të quajtur /app/[locale]/tacotranslate.tsx, ku do të implementojmë ofruesin 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>
	);
}

Vini re 'use client'; që tregon se kjo është një komponent klienti.

Me ofruesin e kontekstit tashmë gati për përdorim, krijo një skedar të quajtur /app/[locale]/layout.tsx, layout-in rrënjor në aplikacionin tonë. Vini re se kjo rrugë ka një dosje që përdor Dynamic Routes, ku [locale] është parametri dinamik.

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

Gjëja e parë për t'u theksuar këtu është se po përdorim parametrin tonë Dynamic Route [locale] për të marrë përkthimet për atë gjuhë. Për më tepër, generateStaticParams sigurohet që të gjitha kodet e lokalitetit që keni aktivizuar për projektin tuaj të jenë të parapërgatitura.

Tani, le të ndërtojmë faqen tonë të parë! Krijoni një skedar me emrin /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!" />
	);
}

Vini re variablën revalidate që i tregon Next.js të rindërtojë faqen pas 60 sekondash, dhe të mbajë përkthimet tuaja të përditësuara.

Hapi 4: Zbatimi i renderimit në anën e serverit

TacoTranslate mbështet renderimin në anën e serverit. Kjo përmirëson ndjeshëm përvojën e përdoruesit duke treguar menjëherë përmbajtjen e përkthyer, në vend të një shkëlqimi fillestar me përmbajtje të papërkthyer. Për më tepër, mund të anashkalojmë kërkesat e rrjetit në klient, sepse tashmë kemi përkthimet që na duhen për faqen që përdoruesi po shikon.

Për të vendosur server side rendering, krijoni ose modifikoni /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};
};

Ndryshoni kontrollin isProduction për t'iu përshtatur konfigurimit tuaj. Nëse është true, TacoTranslate do të shfaqë çelësin publik të API-së. Nëse jemi në një mjedis lokal, testimi, ose staging (isProduction is false), do të përdorim çelësin sekret read/write të API-së për t'u siguruar që fjalitë e reja të dërgohen për përkthim.

Për të siguruar që rotacioni dhe ridrejtimi funksionojnë siç pritet, do të duhet të krijojmë një skedar me emrin /middleware.ts. Duke përdorur Middleware, ne mund të ridrejtojmë përdoruesit në faqe të paraqitura në gjuhën e tyre të preferuar.

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

Sigurohuni që të konfiguroni matcher në përputhje me dokumentacionin e Next.js Middleware.

Në klient, ju mund të ndryshoni cookie-n locale për të ndryshuar gjuhën e preferuar të përdoruesit. Ju lutemi shikoni kodin e plotë shembull për ide se si ta bëni këtë!

Hapi 5: Bëj deploy dhe testo!

Kemi përfunduar! Aplikacioni juaj React tani do të përkthehet automatikisht kur të shtoni ndonjë varg tek komponenti Translate. Kini parasysh se vetëm mjediset me leje read/write për çelësin API do të mund të krijojnë vargje të reja për përkthim. Ne rekomandojmë të keni një mjedis staging të mbyllur dhe të sigurt ku mund të testoni aplikacionin tuaj në prodhim me një çelës API të tillë, duke shtuar vargje të reja para se të bëhet live. Kjo do të parandalojë që dikush të vjedhë çelësin tuaj sekret API, dhe potencialisht të fryjë projektin tuaj të përkthimit duke shtuar vargje të reja, të pa lidhura.

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!

Një produkt nga NattskiftetBërë në Norvegji