چگونه بینالمللیسازی را در یک برنامه Next.js که از Pages Router استفاده میکند پیادهسازی کنیم
با بینالمللیسازی (i18n) برنامهٔ React خود را قابلدسترستر کنید و به بازارهای جدید دست یابید.
با جهانیتر شدن جهان، برای توسعهدهندگان وب هرچه بیشتر اهمیت دارد که برنامههایی بسازند که بتوانند نیازهای کاربران از کشورهای و فرهنگهای گوناگون را برآورده کنند. یکی از راههای کلیدی برای رسیدن به این هدف بینالمللیسازی (i18n) است، که به شما اجازه میدهد برنامهتان را با زبانها، ارزها و قالبهای تاریخ مختلف سازگار کنید.
در این آموزش، نحوه افزودن بینالمللیسازی به برنامه React Next.js خود را با رندر سمت سرور بررسی خواهیم کرد. TL;DR: نمونه کامل را اینجا مشاهده کنید.
این راهنما برای برنامههای Next.js است که از Pages Router استفاده میکنند.
اگر از App Router استفاده میکنید، لطفاً بهجای آن این راهنما را ببینید.
گام 1: یک کتابخانه 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 در ریشهٔ پروژهتان اضافه کنید.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010اطمینان حاصل کنید که هرگز کلید API مخفی read/write را در محیطهای تولید سمت مشتری فاش نکنید.
ما همچنین دو متغیر محیطی دیگر اضافه خواهیم کرد: TACOTRANSLATE_DEFAULT_LOCALE و TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: کد محلی پیشفرض (fallback). در این مثال، آن را بهenبرای زبان انگلیسی تنظیم میکنیم.TACOTRANSLATE_ORIGIN: «پوشهای» که رشتههای متنی شما در آن ذخیره خواهد شد، مانند نشانی وبسایت شما (URL). برای مطالعهٔ بیشتر در مورد مبداها اینجا کلیک کنید.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comگام 3: راهاندازی TacoTranslate
برای یکپارچهسازی TacoTranslate با برنامهٔ خود، باید یک کلاینت با استفاده از کلیدهای API که قبلاً تهیه کردهاید بسازید. برای مثال، یک فایل به نام /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 را اضافه خواهیم کرد.
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 شروع خواهیم کرد.
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 دارید.
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!"/>
}مرحلهٔ 5: استقرار و آزمایش!
تمام شد! برنامهٔ React شما اکنون بهصورت خودکار زمانی که هر رشتهای را به یک مؤلفه Translate اضافه کنید، ترجمه میشود. توجه داشته باشید که تنها محیطهایی که در کلید API دارای مجوز read/write هستند قادر به ایجاد رشتههای جدید برای ترجمه خواهند بود. ما توصیه میکنیم یک محیط staging بسته و امن داشته باشید تا بتوانید برنامهٔ تولیدیتان را با چنین کلید API آزمایش کنید و قبل از راهاندازی، رشتههای جدید را اضافه کنید. این از سرقت کلید API محرمانهٔ شما جلوگیری میکند و همچنین از بزرگ شدن بیرویهٔ پروژهٔ ترجمهتان با اضافه شدن رشتههای جدید و نامرتبط جلوگیری خواهد کرد.
حتماً نمونهٔ کامل را در پروفایل گیتهاب ما ببینید. آنجا همچنین یک نمونه خواهید یافت که چگونه این کار را با استفاده از App Router انجام دهید! اگر با هر مشکلی مواجه شدید، دریغ نکنید که با ما تماس بگیرید، و ما با کمال میل خوشحال میشویم کمک کنیم.
TacoTranslate به شما امکان میدهد برنامههای React خود را بهطور خودکار و سریع به و از بیش از ۷۵ زبان بومیسازی کنید. همین امروز شروع کنید!