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 кітапханасын таңдаймыз. Бірнеше танымал кітапханалар бар, соның ішінде 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.

  • TACOTRANSLATE_DEFAULT_LOCALE: Әдепкі қайту локалінің коды. Бұл мысалда оны ағылшын тілі үшін en деп белгілейміз.
  • TACOTRANSLATE_ORIGIN: Сіздің мәтіндеріңіз сақталатын “қалтасы”, мысалы, веб-сайтыңыздың URL-адресі. Осы жерде origins туралы толығырақ оқыңыз.
.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!" />
	);
}

Ескеріңіз 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 кілтіңізді ұрланудан қорғайды және аударма жобасының көлемін қажетсіз, байланыссыз мәтіндермен көбейіп кетуінен сақтайды.

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 компаниясының өніміНорвегиялық өндіріс