TacoTranslate
/
HujjatlarNarxlar
 
Qo'llanma
04-may

Next.js ilovasida App Router dan foydalangan holda xalqarolashtirishni (i18n) qanday amalga oshirish

React ilovangizni yanada qulayroq qiling va xalqaro moslashtirish (i18n) orqali yangi bozorlarga yetib boring.

Dunyo tobora globalizatsiyalashayotgani sababli, veb-ishlab chiquvchilar uchun turli mamlakatlar va madaniyatlardan bo‘lgan foydalanuvchilarga moslashadigan ilovalar yaratish tobora muhimlashmoqda. Buni amalga oshirishning asosiy yo‘llaridan biri — xalqarolashtirish (i18n), u ilovangizni turli tillar, valyutalar va sana formatlariga moslashtirish imkonini beradi.

Ushbu maqolada biz React Next.js ilovangizga server tomonida renderlash bilan birga xalqarolashtirishni qanday qo‘shishni o‘rganamiz. TL;DR: To‘liq misolni bu yerdan ko‘ring.

Ushbu qo'llanma App Router dan foydalanadigan Next.js ilovalari uchun.
Agar siz Pages Router dan foydalanayotgan bo'lsangiz, uning o'rniga ushbu qo'llanmani ko'ring.

1-qadam: i18n kutubxonasini o'rnating

Next.js ilovangizda xalqaro qo'llab-quvvatlashni amalga oshirish uchun avvalo i18n kutubxonasini tanlaymiz. Bir nechta mashhur kutubxonalar mavjud, jumladan next-intl. Biroq, ushbu misolda biz TacoTranslate.

TacoTranslate eng ilg'or sun'iy intellekt yordamida satrlaringizni istalgan tilga avtomatik tarjima qiladi va JSON fayllarni zerikarli boshqarishdan xalos etadi.

Keling, terminalingizda npm orqali o'rnatamiz:

npm install tacotranslate

2-qadam: Bepul TacoTranslate hisobini yarating

Modulni o‘rnatgach, TacoTranslate hisobingizni, tarjima loyihangizni va unga tegishli API kalitlarini yaratish vaqti keldi. Bu yerda hisob yarating. Bu bepul va kredit karta qo‘shishingiz shart emas.

TacoTranslate ilovasining foydalanuvchi interfeysida loyiha yarating va uning API kalitlari bo‘limiga o‘ting. Bitta read kalit va bitta read/write kalit yarating. Ularni muhit o‘zgaruvchilari sifatida saqlaymiz. read kalitni biz public deb ataymiz va read/write kalit esa secret. Masalan, ularni loyihangiz ildizidagi .env fayliga qo‘shishingiz mumkin.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Sirli read/write API kalitini hech qachon klient tomonidagi ishlab chiqarish muhitlariga oshkor qilmang.

Shuningdek, yana ikkita muhit o'zgaruvchisini qo'shamiz: TACOTRANSLATE_DEFAULT_LOCALE va TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Standart zaxira lokal kodi. Ushbu misolda biz uni ingliz tili uchun en ga o‘rnatamiz.
  • TACOTRANSLATE_ORIGIN: Matnlaringiz saqlanadigan “papka”, masalan, veb-saytingizning URL manzili. Manbalar (origins) haqida bu yerda ko‘proq o‘qing.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

3-qadam: TacoTranslate-ni sozlash

TacoTranslate-ni ilovangizga integratsiya qilish uchun avvalgi API kalitlaridan foydalangan holda klient yaratishingiz kerak bo‘ladi. Masalan, /tacotranslate-client.js nomli fayl yarating.

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

Tez orada biz avtomatik ravishda TACOTRANSLATE_API_KEY va TACOTRANSLATE_PROJECT_LOCALEni belgilaymiz.

Klientni alohida faylga yaratish uni keyinroq qayta ishlatishni oson qiladi. getLocales — bu faqat ba'zi ichki xatoliklarni boshqarish imkoniga ega yordamchi funktsiyadir. Endi /app/[locale]/tacotranslate.tsx nomli fayl yarating, unda biz TacoTranslate provayderini amalga oshiramiz.

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

E'tibor bering: 'use client'; bu klient komponent ekanligini bildiradi.

Kontekst provayderi tayyor bo'lgach, ilovamizdagi asosiy layout sifatida /app/[locale]/layout.tsx nomli fayl yarating. E'tibor bering, bu yo'l Dynamic Routes ishlatiladigan papkani o'z ichiga oladi, bunda [locale] dinamik parametrdir.

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

Bu yerda birinchi eʼtiborga molik jihat shundaki, biz o‘sha til uchun tarjimalarni olish uchun Dynamic Route parametrimiz [locale]dan foydalanmoqdamiz. Bundan tashqari, generateStaticParams loyihangizda faollashtirgan barcha locale kodlari oldindan render qilinishini taʼminlaydi.

Endi birinchi sahifamizni yarataylik! /app/[locale]/page.tsx nomli fayl yarating.

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

Next.js'ga sahifani 60 soniyadan so'ng qayta qurishini va tarjimalaringizni dolzarb holda saqlashini aytuvchi revalidate o'zgaruvchisiga e'tibor bering.

4-qadam: Server tomonida render qilishni amalga oshirish

TacoTranslate server tomonida renderlashni qo‘llab‑quvvatlaydi. Bu foydalanuvchi tajribasini juda yaxshilaydi, chunki avvaliga tarjima qilinmagan mazmunning bir lahzalik ko‘rinishi o‘rniga tarjima qilingan mazmun darhol ko‘rsatiladi. Bundan tashqari, mijoz tomonida tarmoq so‘rovlarini o‘tkazishimiz shart emas, chunki foydalanuvchi ko‘rayotgan sahifa uchun kerakli tarjimalarimiz allaqachon mavjud.

Server tomonida renderlashni sozlash uchun, /next.config.js faylini yarating yoki o'zgartiring:

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

Sozlamalaringizga mos ravishda isProduction tekshiruvini o'zgartiring. Agar true bo'lsa, TacoTranslate ommaviy API kalitini ko'rsatadi. Agar biz mahalliy, test yoki staging muhitida bo'lsak (isProduction is false), yangi matnlar tarjimaga yuborilishini ta'minlash uchun maxfiy read/write API kalitidan foydalanamiz.

Marshrutlash va yo'naltirish kutilganidek ishlashini ta'minlash uchun /middleware.ts nomli fayl yaratishimiz kerak bo'ladi. Middlewaredan foydalanib, foydalanuvchilarni ularning afzal ko'rgan tilida taqdim etilgan sahifalarga yo'naltirishimiz mumkin.

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

Iltimos, matcher ni Next.js Middleware hujjatlariga muvofiq sozlaganingizga ishonch hosil qiling.

Klient tomonida, foydalanuvchining afzal tilini o'zgartirish uchun locale cookie'ni o'zgartirishingiz mumkin. Buni qanday qilish bo'yicha g'oyalar uchun to'liq misol kodiga qarang!

5-qadam: Joylashtiring va sinab ko'ring!

Hammasi tayyor! Endi Translate komponentiga har qanday matn qo‘shganingizda, sizning React ilovangiz avtomatik ravishda tarjima qilinadi. E’tibor bering, faqat API kalitida read/write ruxsatiga ega muhitlar yangi tarjima qilinadigan matnlarni yaratishi mumkin. Shunday API kaliti bilan ishlab chiqarish ilovangizni sinab ko‘rishingiz va jonli ishga tushirishdan oldin yangi matnlarni qo‘shishingiz uchun yopiq va xavfsiz staging muhitiga ega bo‘lishingizni tavsiya qilamiz. Bu sizning maxfiy API kalitingiz o‘g‘irlanishini va tarjima loyihangizning yangi, bog‘lanmagan matnlar bilan ortiqcha to‘ldirilishini oldini oladi.

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!

Nattskiftetning mahsulotiNorvegiyada ishlab chiqarilgan