TacoTranslate
/
ҚұжаттамаБағалар
 
Нұсқаулық
04 мам.

Next.js қосымшасында, App Router пайдаланатын жағдайда, халықаралықтандыруды қалай жүзеге асыруға болады

React қолданбаңызды қолжетімдірек етіп, интернационализация (i18n) арқылы жаңа нарықтарға жетіңіз.

Әлем жаһанданған сайын, веб-әзірлеушілер үшін әр түрлі елдер мен мәдениеттерден келетін пайдаланушыларға бағытталған қолданбалар жасау барған сайын маңызды болуда. Бұған қол жеткізудің негізгі тәсілдерінің бірі — халықаралықтандыру (i18n), ол сізге қолданбаңызды әр түрлі тілдерге, валюталарға және күн пішімдеріне бейімдеуге мүмкіндік береді.

Осы мақалада біз React Next.js қосымшаңызға сервер жағындағы рендерлеуді қосу арқылы халықаралықтандыруды қалай енгізуге болатынын талқылаймыз. TL;DR: Толық мысалды мына жерден қараңыз.

Бұл нұсқаулық App Router қолданатын Next.js қосымшаларына арналған.
Егер сіз Pages Router қолдансаңыз, оның орнына осы нұсқаулықты қараңыз.

1-қадам: i18n кітапханасын орнату

Next.js қолданбаңызда халықаралықтандыруды (i18n) енгізу үшін алдымен i18n кітапханасын таңдаймыз. Бірнеше танымал кітапхана бар, соның ішінде next-intl. Алайда осы мысалда біз TacoTranslate қолданатын боламыз.

TacoTranslate озық жасанды интеллект арқылы мәтіндеріңізді кез келген тілге автоматты түрде аударады және JSON файлдарын жалықтыратын басқарудан босатады.

Оны терминалда npm арқылы орнатайық:

npm install tacotranslate

2-қадам: TacoTranslate үшін тегін тіркелгі жасаңыз

Модульді орнатқаннан кейін, енді TacoTranslate есептік жазбаңызды, аудару жобасын және оған байланысты API кілттерін жасау уақыты келді. Мұнда есептік жазба жасаңыз. Бұл тегін, және несие картасын көрсету қажет емес.

TacoTranslate қолданбасының интерфейсінде жоба жасап, оның 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-ты баптау

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

60 секундтан кейін бетті қайта құрауға және аудармаларыңызды өзекті ұстауға жауапты revalidate айнымалысына назар аударыңыз.

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 кілтін көрсетеді. Егер біз жергілікті, тестілік немесе staging ортада болсақ (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-қадам: Жариялау және тексеру!

Біз аяқтадық! Енді сіз Translate компонентіне кез келген мәтінді қосқан кезде сіздің React қолданбаңыз автоматты түрде аударылатын болады. Ескеріңіз: API кілтіндегі read/write рұқсаты бар орта ғана аударылатын жаңа мәтіндерді жасай алады. Біз өндірістік қолданбаңызды тіріге шығармай тұрып жаңа мәтіндер қосып тестілеу үшін жабық және қорғалған staging ортасын пайдалануды ұсынамыз. Бұл сіздің құпия API кілтіңізді ешкімнің ұрлауынан сақтап, сондай-ақ басқа, қатысы жоқ мәтіндерді қосып аударма жобасын қажетсіз үлкейтіп жіберуден қорғайды.

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!

Nattskiftet компаниясының өніміНорвегияда жасалған