TacoTranslate
/
مستنداتتعرفه‌ها
 
مقاله
۱۴ اردیبهشت

بهترین راه‌حل برای بین‌المللی‌سازی (i18n) در برنامه‌های Next.js

آیا به دنبال گسترش اپلیکیشن Next.js خود به بازارهای جدید هستید؟ TacoTranslate بومی‌سازی پروژه Next.js را بسیار ساده می‌کند و به شما امکان می‌دهد بدون دردسر به مخاطبان جهانی دست یابید.

چرا TacoTranslate را برای Next.js انتخاب کنید؟

  • ادغام یکپارچه: TacoTranslate که به‌صورت اختصاصی برای برنامه‌های Next.js طراحی شده، به‌سادگی در گردش‌کار فعلی شما ادغام می‌شود.
  • جمع‌آوری خودکار رشته‌ها: دیگر نیازی به مدیریت دستی فایل‌های JSON نیست. TacoTranslate به‌طور خودکار رشته‌ها را از کدِ شما جمع‌آوری می‌کند.
  • ترجمه‌های مبتنی بر هوش مصنوعی: از توان هوش مصنوعی استفاده کنید تا ترجمه‌هایی دقیق و متناسب با زمینه و لحن برنامه‌تان ارائه شود.
  • پشتیبانی فوری از زبان‌ها: با تنها یک کلیک پشتیبانی از زبان‌های جدید را اضافه کنید و برنامه‌تان را برای مخاطبان جهانی در دسترس قرار دهید.

نحوه کار

با جهانی‌شدنِ روزافزون، برای توسعه‌دهندگان وب اهمیت فزاینده‌ای دارد که برنامه‌هایی بسازند که بتوانند نیازهای کاربران از کشورهای و فرهنگ‌های مختلف را برآورده کنند. یکی از راه‌های کلیدی برای دستیابی به این هدف، بین‌المللی‌سازی (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

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

همچنین دو متغیر محیطی دیگر اضافه خواهیم کرد: 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 عمومی را نمایش خواهد داد. اگر در یک محیط محلی، آزمایشی یا staging باشیم (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!"/>
}

مرحله ۵: استقرار و آزمایش!

تمام شد! از این پس برنامه Next.js شما به‌طور خودکار هر زمان که هر رشته‌ای را به یک کامپوننت Translate اضافه کنید، ترجمه خواهد شد. توجه داشته باشید که تنها محیط‌هایی که روی کلید API مجوز read/write دارند قادر به ایجاد رشته‌های جدید برای ترجمه خواهند بود. توصیه می‌کنیم یک محیط staging بسته و ایمن داشته باشید تا بتوانید برنامه تولیدی‌تان را با چنین کلید 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 App 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ساخت نروژ