TacoTranslate
/
مستنداتتعرفه‌ها
 
آموزش
۱۴ ثور

چگونه بین‌المللی‌سازی را در یک برنامهٔ Next.js که از Pages Router استفاده می‌کند، پیاده‌سازی کنیم

با استفاده از بین‌المللی‌سازی (i18n)، برنامهٔ React خود را قابل دسترس‌تر کنید و به بازارهای جدید دست یابید.

با جهانی‌شدن روزافزون، برای توسعه‌دهندگان وب اهمیت فزاینده‌ای یافته است که برنامه‌هایی بسازند که بتوانند نیازهای کاربران از کشورها و فرهنگ‌های مختلف را برآورده کنند. یکی از راه‌های کلیدی برای دستیابی به این هدف، بین‌المللی‌سازی (i18n) است که به شما امکان می‌دهد برنامه‌تان را به زبان‌ها، ارزها و قالب‌های تاریخ مختلف سازگار کنید.

در این آموزش، به بررسی چگونگی افزودن بین‌المللی‌سازی به برنامه React Next.js خود، همراه با رندر سمت سرور، خواهیم پرداخت. TL;DR: نمونهٔ کامل را اینجا ببینید.

این راهنما برای برنامه‌های Next.js است که از Pages Router استفاده می‌کنند.
اگر از App Router استفاده می‌کنید، لطفاً به این راهنما مراجعه کنید.

مرحله 1: یک کتابخانه i18n را نصب کنید

برای پیاده‌سازی بین‌المللی‌سازی (i18n) در برنامه Next.js خود، ابتدا یک کتابخانه i18n را انتخاب خواهیم کرد. چندین کتابخانهٔ محبوب وجود دارند، از جمله next-intl. با این حال، در این مثال ما از TacoTranslate استفاده خواهیم کرد.

TacoTranslate به‌طور خودکار رشته‌های شما را با استفاده از هوش مصنوعی پیشرفته به هر زبان ترجمه می‌کند و شما را از مدیریت خسته‌کنندهٔ فایل‌های JSON رهایی می‌بخشد.

بیایید آن را با استفاده از npm در ترمینال خود نصب کنیم:

npm install tacotranslate

مرحلهٔ ۲: یک حساب رایگان در 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

اطمینان حاصل کنید که هرگز کلید API محرمانه read/write را در محیط‌های تولید سمت کاربر فاش نکنید.

ما همچنین دو متغیر محیطی دیگر اضافه خواهیم کرد: TACOTRANSLATE_DEFAULT_LOCALE و TACOTRANSLATE_ORIGIN.

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

مرحله ۳: راه‌اندازی 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_DEFAULT_LOCALE ?? '',
});

module.exports = tacoTranslate;

ما به‌طور خودکار TACOTRANSLATE_API_KEY را به‌زودی تعریف خواهیم کرد.

ایجاد کلاینت در یک فایل جداگانه استفادهٔ مجدد از آن را در آینده آسان‌تر می‌کند. اکنون، با استفاده از یک /pages/_app.tsx سفارشی، ما ارائه‌دهندهٔ TacoTranslate را اضافه خواهیم کرد.

/pages/_app.tsx
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';

type PageProperties = {
	origin: Origin;
	locale: Locale;
	locales: Locale[];
	localizations: Localizations;
};

export default function App({Component, pageProps}: AppProps<PageProperties>) {
	const {origin, locale, locales, localizations} = pageProps;

	return (
		<TacoTranslate
			client={tacoTranslate}
			origin={origin}
			locale={locale}
			localizations={localizations}
		>
			<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
			<Component {...pageProps} />
		</TacoTranslate>
	);
}

اگر قبلاً pageProps و _app.tsx سفارشی دارید، لطفاً تعریف را با ویژگی‌ها و کدهای بالا گسترش دهید.

مرحله 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 = {};

	return withTacoTranslate(config, {
		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'),
	});
};

بررسی isProduction را مطابق تنظیمات خود تغییر دهید. اگر true, TacoTranslate کلید API عمومی را نمایش خواهد داد. اگر در یک محیط محلی، آزمایشی یا مرحله‌بندی (isProduction is false) باشیم، از کلید API مخفی read/write استفاده خواهیم کرد تا مطمئن شویم رشته‌های جدید برای ترجمه ارسال می‌شوند.

تا کنون، ما تنها برنامهٔ Next.js را با فهرستی از زبان‌های پشتیبانی‌شده تنظیم کرده‌ایم. کار بعدی‌ای که انجام خواهیم داد این است که ترجمه‌ها را برای همهٔ صفحات شما دریافت کنیم. برای انجام این کار، بسته به نیازهای شما، از یکی از getTacoTranslateStaticProps یا getTacoTranslateServerSideProps استفاده خواهید کرد.

این توابع سه آرگومان می‌گیرند: یک شی Next.js Static Props Context, پیکربندی برای TacoTranslate، و خصوصیات اختیاری Next.js. توجه داشته باشید که مقدار revalidate در getTacoTranslateStaticProps به‌طور پیش‌فرض روی 60 تنظیم شده است تا ترجمه‌های شما به‌روز بمانند.

برای استفاده از هر کدام از این توابع در یک صفحه، فرض کنیم که یک فایل صفحه مانند /pages/hello-world.tsx دارید.

/pages/hello-world.tsx
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';

export async function getStaticProps(context) {
	return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}

export default function Page() {
	return <Translate string="Hello, world!"/>;
}

اکنون باید بتوانید از مؤلفه Translate برای ترجمهٔ رشته‌ها در تمام کامپوننت‌های React خود استفاده کنید.

import {Translate} from 'tacotranslate/react';

function Component() {
	return <Translate string="Hello, world!"/>
}

مرحلهٔ پنجم: استقرار دهید و آزمایش کنید!

تمام شد! اکنون اپلیکیشن React شما به‌صورت خودکار ترجمه خواهد شد وقتی هر رشته‌ای را به یک Translate کامپوننت اضافه کنید. توجه داشته باشید که تنها محیط‌هایی که در کلید API دسترسی‌های read/write دارند قادر خواهند بود رشته‌های جدیدی برای ترجمه ایجاد کنند. ما پیشنهاد می‌کنیم یک محیط استیجینگ بسته و امن داشته باشید تا بتوانید اپلیکیشن تولیدی خود را با چنین کلید API آزمایش کنید و پیش از انتشار، رشته‌های جدید را اضافه نمایید. این کار از سرقت کلید API مخفی شما توسط هر کسی جلوگیری می‌کند و همچنین احتمال پرحجم شدن پروژه ترجمه‌تان با اضافه شدن رشته‌های جدید و نامرتبط را کاهش می‌دهد.

حتماً مثال کامل را در پروفایل گیت‌هاب ما بررسی کنید. آن‌جا همچنین یک نمونه خواهید یافت که چگونه این کار را با استفاده از App Router انجام دهید! اگر با هر مشکلی مواجه شدید، راحت باشید و به ما ایمیل بزنید، و با کمال میل کمک خواهیم کرد.

TacoTranslate به‌طور خودکار برنامه‌های React شما را سریعاً به بیش از 75 زبان و بالعکس بومی‌سازی می‌کند. همین امروز شروع کنید!

محصولی از Nattskiftetساخت نروژ