TacoTranslate
/
დოკუმენტაციაფასები
 
ტუტორიალი
04 მაი

როგორ დავნერგოთ ინტერნაციონალიზაცია Next.js აპლიკაციაში, რომელიც იყენებს App Router

გააკეთეთ თქვენი React აპლიკაცია უფრო ხელმისაწვდომი და მიაღწიეთ ახალ ბაზრებს ინტერნაციონალიზაციით (i18n).

მსოფლიოს გლობალიზაციის ზრდასთან ერთად სულ უფრო მნიშვნელოვანია, რომ ვებ-დეველოპერებმა შექმნან აპლიკაციები, რომლებიც აკმაყოფილებენ სხვადასხვა ქვეყნების და კულტურების მომხმარებელთა მოთხოვნებს.

ერთ-ერთი მთავარი გზა ამისათვის არის ინტერ­na­ციონალიზაცია (i18n), რომელიც საშუალებას გაძლევთ მოარგოთ თქვენი აპლიკაცია სხვადასხვა ენებს, ვალუტებსა და თარიღის ფორმატებს. TL;DR: სრული მაგალითი იხილეთ აქ.

ეს სახელმძღვანელო განკუთვნილია Next.js აპლიკაციებისთვის, რომლებიც იყენებენ App Router.
თუ იყენებთ Pages Router, ამის ნაცვლად იხილეთ ეს სახელმძღვანელო.

ნაბიჯი 1: დააინსტალირეთ i18n ბიბლიოთეკა

ინტერნაციონალიზაციის (i18n) თქვენი Next.js აპლიკაციაში დანერგვისათვის, პირველ რიგში ავირჩევთ i18n ბიბლიოთეკას. არსებობს რამდენიმე პოპულარული ბიბლიოთეკა, მათ შორის next-intl. ამ მაგალითში კი ჩვენ გამოვიყენებთ TacoTranslate.

TacoTranslate თანამედროვე AI-ის გამოყენებით ავტომატურად თარგმნის თქვენს სტრინგებს ნებისმიერ ენაზე და მოგაშორებთ JSON ფაილების მოსაწყენ მართვას.

დავაინსტალიროთ იგი ტერმინალში გამოყენებით npm:

npm install tacotranslate

ნაბიჯი 2: შექმენით უფასო TacoTranslate ანგარიში

ახლა, როდესაც მოდული დაინსტალირებული გაქვთ, დროა შექმნათ თქვენი TacoTranslate ანგარიში, თარგმნის პროექტი და შესაბამისი API გასაღებები. შექმენით ანგარიში აქ. ეს უფასოა და საკრედიტო ბარათის დამატება არ არის საჭირო.

TacoTranslate-ის აპლიკაციის UI-ში შექმენით პროექტი და გადადით მისი API კლავიშების ჩანართზე. შექმენით ერთი read გასაღები და ერთი read/write გასაღები. ჩვენ მათ შევინახავთ გარემოს ცვლადებად. read გასაღები არის ის, რასაც ვუწოდებთ public, ხოლო read/write გასაღები არის secret. მაგალითად, შეგიძლიათ დაამატოთ ისინი თქვენი პროექტის ძირითადი (root) დირექტორიაში არსებულ .env ფაილში.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

დარწმუნდით, რომ საიდუმლო read/write API გასაღები არასოდეს გაჟონოს კლიენტის მხარის წარმოების გარემოებში.

ასევე დავამატებთ კიდევ ორ გარემოს ცვლადს: TACOTRANSLATE_DEFAULT_LOCALE და TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: ნაგულისხმევი რეზერვული (fallback) ლოკალის კოდი. ამ მაგალითში დავაყენებთ მას en-ად, ინგლისურისთვის.
  • TACOTRANSLATE_ORIGIN: „ფოლდერი“, სადაც თქვენი სტრინგები იქნება შენახული, მაგალითად თქვენი ვებსაიტის URL. ორიგინებზე მეტი გაიგეთ აქ.
.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 კომპონენტში დაამატებთ ნებისმიერ სტრიქონს. გაითვალისწინეთ, რომ ახალი სტრიქონების შექმნა თარგმნისთვის შესაძლებელი იქნება მხოლოდ იმ გარემოებებისათვის, რომელთაც API გასაღზე აქვს read/write ნებართვა. გირჩევთ გქონდეთ დახურული და დაცული სტেজინგის გარემო, სადაც შეგიძლიათ შეამოწმოთ თქვენი პროდუქციული აპლიკაცია შესაბამისი 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-დანწარმოებული ნორვეგიაში