چگونه بینالمللیسازی را در یک برنامهٔ 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 در ریشهٔ پروژهتان اضافه کنید.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010اطمینان حاصل کنید که هرگز کلید API محرمانه read/write را در محیطهای تولید سمت کاربر فاش نکنید.
ما همچنین دو متغیر محیطی دیگر اضافه خواهیم کرد: TACOTRANSLATE_DEFAULT_LOCALE و TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: کد محلی پیشفرض برای بازگشت. در این مثال، آن را رویenبرای زبان انگلیسی تنظیم میکنیم.TACOTRANSLATE_ORIGIN: «پوشهای» که رشتههای شما در آن ذخیره خواهند شد، مانند آدرس وبسایت شما. برای کسب اطلاعات بیشتر درباره مبداها اینجا را بخوانید.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comمرحله ۳: راهاندازی 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 سفارشی دارید، لطفاً تعریف را با ویژگیها و کدهای بالا گسترش دهید.
مرحله ۴: پیادهسازی رندر سمت سرور
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 را نمایش خواهد داد. اگر در یک محیط محلی، آزمایشی یا مرحلهبندی باشیم (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!"/>
}مرحلهٔ پنجم: استقرار دهید و آزمایش کنید!
تمام شد! اکنون اپلیکیشن React شما بهصورت خودکار ترجمه خواهد شد وقتی هر رشتهای را به یک Translate کامپوننت اضافه کنید. توجه داشته باشید که تنها محیطهایی که در کلید API دسترسیهای read/write دارند قادر خواهند بود رشتههای جدیدی برای ترجمه ایجاد کنند. ما پیشنهاد میکنیم یک محیط استیجینگ بسته و امن داشته باشید تا بتوانید اپلیکیشن تولیدی خود را با چنین کلید API آزمایش کنید و پیش از انتشار، رشتههای جدید را اضافه نمایید. این کار از سرقت کلید API مخفی شما توسط هر کسی جلوگیری میکند و همچنین احتمال پرحجم شدن پروژه ترجمهتان با اضافه شدن رشتههای جدید و نامرتبط را کاهش میدهد.
حتماً نمونهٔ کامل را در پروفایل GitHub ما بررسی کنید. در آنجا همچنین یک نمونه از نحوهٔ انجام این کار با استفاده از App Router خواهید یافت! اگر با هر مشکلی مواجه شدید، لطفاً با ما تماس بگیرید، و ما با کمال میل به شما کمک خواهیم کرد.
TacoTranslate به شما امکان میدهد برنامههای React خود را بهطور خودکار و سریع به و از بیش از 75 زبان بومیسازی کنید. امروز شروع کنید!