TacoTranslate
/
ՓաստաթղթերԳնագոյացում
 
Դասընթաց
04 մյս

Ինչպես իրականացնել միջազգայինացումը Next.js ծրագրում, որը օգտագործում է App Router

Դարձրեք ձեր React ծրագիրը ավելի հասանելի և հասեք նոր շուկաներ միջազգայինացման (i18n) միջոցով:

Երբ աշխարհը դարձել է ավելի գլոբալացված, վեբ ծրագրավորողների համար ավելի կարևոր է ստեղծել հավելվածներ, որոնք կարող են ծառայել տարբեր երկրների և մշակույթների օգտվողներին։ Այդ նպատակին հասնելու մի հիմնական ուղին միջազգայինացում (i18n) է, որը թույլ է տալիս ձեր հավելվածը հարմարվել տարբեր լեզուների, արժույթների և ամսաթվերի ձևաչափերի։

Այս հոդվածում մենք կքննարկենք, թե ինչպես ավելացնել միջազգայինացում ձեր React Next.js հավելվածում՝ օգտագործելով սերվերային հատվածի արտապատկերում: TL;DR: Այստեղ տեսեք լրիվ օրինակները։

Այս ուղեցույցը նախատեսված է Next.js ծրագրերի համար, որոնք օգտագործում են App Router:
Եթե օգտագործում եք Pages Router, դիտեք այս ուղեցույցը։

Քայլ 1: Տեղադրել i18n գրադարան

Ձեր Next.js հավելվածում բազմալեզվայնության իրականացման համար մենք սկզբում կընտրենք i18n գրադարան։ Կան մի քանի հանրաճանաչ գրադարաններ, այդ թվում next-intl, սակայն այս օրինակ میں մենք կօգտագործենք TacoTranslate։

TacoTranslate ավտոմատ կերպով թարգմանում է ձեր տողերը ցանկացած լեզվով՝ օգտագործելով առաջադեմ արհեստական բանականություն, և ազատում է ձեզ JSON ֆայլերի ձանձրալի կառավարման բեռից։

Պատրաստվեք այն տեղադրել npm–ով ձեր տերմինալում։

npm install tacotranslate

Քայլ 2՝ Ստեղծեք անվճար TacoTranslate հաշիվ

Հիմա, երբ մոդուլը տեղադրված է, ժամանակն է ստեղծելու ձեր TacoTranslate հաշիվը, թարգմանության նախագիծը և համապատասխան API բանալիները։ Ստեղծեք հաշիվ այստեղ։ Դա անվճար է և չի պահանջում կրեդիտ քարտի ավելացում։

TacoTranslate հավելվածի UI-ում ստեղծեք նախագիծ և անցեք դրա API բանալիների ներդիրին։ Ստեղծեք մեկ read բանալին և մեկ read/write բանալին։ Մենք դրանք կպահպանենք որպես շրջակա միջավայրի փոփոխականներ։ read բանալին այն է, ինչ մենք կոչում ենք public, իսկ read/write բանալին՝ secret: Օրինակ, դրանք կարող եք ավելացնել Ձեր նախագծի արմատային թղթապանակի .env ֆայլում։

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Համոզվեք, որ երբեք չթողնեք գաղտնի read/write API բանալին հաճախորդի կողմի արտադրական միջավայրերին:

Մենք նաև կավելացնենք երկու լրացուցիչ միջավայրի փոփոխականներ՝ TACOTRANSLATE_DEFAULT_LOCALE և TACOTRANSLATE_ORIGIN:

.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Քայլ 3. TacoTranslate-ի կարգավորում

ՏակոԹռանսլեյթը ինտեգրելու համար ձեր հավելվածի հետ, անհրաժեշտ է ստեղծել հաճախորդ՝ նախորդնոչ API բանալիների միջոցով։ Օրինակ, ստեղծեք ֆայլ՝ անվանված /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;

Մենք շուտով ավտոմատ կերպով սահմանելու ենք TACOTRANSLATE_API_KEY և TACOTRANSLATE_PROJECT_LOCALE:

Հաճախորդի ստեղծումը առանձին ֆայլում հեշտացնում է այն հետագայում կրկին օգտագործելը։ getLocales պարզապես օգտակար ֆունկցիա է, որը պարունակում է որոշ սարքավորված սխալների կառավարման մեխանիզմներ։ Հիմա ստեղծեք ֆայլ, որը կոչվում է /app/[locale]/tacotranslate.tsx, որտեղ մենք կիրականացնենք 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>
	);
}

Նշեք 'use client'; որը ցույց է տալիս, որ սա կլայենտի կոմպոնենտ է։

Հիմա, երբ կոնտեքստի պրովայդերը պատրաստ է, ստեղծեք ֆայլ՝ անվանված /app/[locale]/layout.tsx, որը մեր հավելվածի արմատային լեյաուտն է։ Ի նկատի ունեցեք, որ այս ուղին ունի պանակ, որը օգտագործում է Dynamic Routes, որտեղ [locale] դինամիկ պարամետր է։

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

Առաջին կարևորը այստեղ նշելն այն է, որ մենք օգտագործում ենք մեր Dynamic Route պարամետրը [locale]՝ այդ լեզվի համար թարգմանությունները ներբեռնելու համար։ Մեծապես նաև generateStaticParams ապահովում է, որ ձեր նախագծի համար ակտիվացված բոլոր տիրույթային կոդերը նախնական ձևով ստեղծվեն։

Հիմա ստեղծենք մեր առաջին էջը։ Ստեղծեք ֆայլ անունով /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!" />
	);
}

Ուշադրություն դարձրեք revalidate փոփոխականի վրա, որը հայտնի է Next.js-ին վերաբեռնել էջը 60 վայրկյան անց և պահել ձեր թարգմանումները թարմացված:

Քայլ 4․ Հեղինակային կողմի ռենդերինգի իրականացում

TacoTranslate-ն աջակցում է սերվերային կողմի վերակառուցմանը։ Սա իսքանչելիորեն բարելավում է օգտատերերի փորձը՝ անմիջապես ցուցադրելով թարգմանված բովանդակությունը, առանց նախքան դա անթարգման բովանդակության պատասխանատու մի պահակի։ Բացի այդ, մենք կարող ենք շրջանցել ցանցային հարցումները հաճախորդի կողմում, քանի որ արդեն ունենք օգտատերը դիտող էջի համար անհրաժեշտ թարգմանությունները։

Սերվերի կողմի մատուցումը կարգավորելու համար ստեղծեք կամ փոփոխեք /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};
};

Խմբագրեք isProduction ստուգումը ձեր կարգավորման համաձայն։ Եթե true, TacoTranslate-ը ցույց կտա հանրային API բանալին։ Եթե մենք տեղական, փորձարկման կամ նախշաբաղադրիչ միջավայրում ենք (isProduction is false), մենք կկիրառենք գաղտնի read/write API բանալին` համոզվելու համար, որ նոր տեքստերը ուղարկվում են թարգմանության։

Մասնագետ երթուղղումը և վերստուգումը աշխատելու համար, մեզ անհրաժեշտ կլինի ստեղծել ֆայլ՝ /middleware.ts: Օգտագործելով Middleware, մենք կարող ենք օգտագործողներին ուղարկել իրենց նախընտրած լեզվով ներկայացված էջերին:

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

Համոզվեք, որ matcher կարգավորվի համաձայն Next.js Middleware-ի փաստաթղթի։

Հաճախորդի կողմում դուք կարող եք փոփոխել locale cookie-ն՝ փոխելու համար, թե որն է օգտագործողի նախընտրած լեզուն: Խնդրում ենք դիտել ընդհանուր օրինակային կոդը՝ իմանալու, թե ինչպես դա անել:

Քայլ 5․ Տեղաբաշխեք և փորձարկեք։

Մենք ավարտել ենք: Ձեր React հավելվածը այժմ ավտոմատ կերպով կթարգմանվի, երբ դուք ավելացնեք ցանկացած տեքստ Translate կոմպոնենտում: Գրանցեք, որ միայն այն միջավայրերը, որոնցում read/write իրավունքներ կան API բանալու նկատմամբ, կարող են ստեղծել նոր տեքստեր թարգմանելու համար: Խնդրում ենք ունենալ փակ և ապահովված ստեյջինգ միջավայր, որտեղ կարող եք ստուգել ձեր պրոդուկցիոն հավելվածը նման API բանալիով՝ նախքան հրապարակումը նոր տեքստեր ավելացնելով: Սա կխոչընդոտի, որ որևէ մեկը գողանա ձեր գաղտնի API բանալին և հնարավորինս կխուսափի թարգմանական նախագիծը ավելորդ, փոխկապակցված olmayan տեքստերով ծանրաբեռնելուց:

Դուք կարող եք ստուգել ամբողջական օրինակները մեր GitHub պրոֆիլում։ Այնտեղ դուք կգտնեք նաև օրինակ, թե ինչպես անել սա օգտագործելով Pages Router։ Եթե որեւէ խնդիր ունենաք, ազատորեն հետադարձ կապ հաստատեք, և մենք ձեզ ուրախորեն կօգնենք։

TacoTranslate-ն թույլ է տալիս ձեզ ավտոմատ կերպով լոկալիզացնել ձեր React հավելվածները արագ և ցանկացած լեզվով։ Սկսեք այսօր!

Ապրանք՝ Nattskiftet-իցՊատրաստված Նորվեգիայում