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

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

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

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

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

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

گام ۱: نصب یک کتابخانه 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 سفارشی دارید، لطفاً تعریف را با ویژگی‌ها و کدهای بالا گسترش دهید.

مرحلهٔ ۴: پیاده‌سازی رندر سمت سرور

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 خود را سریعاً به بیش از ۷۵ زبان و از آن‌ها بومی‌سازی کنید. همین امروز شروع کنید!

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