نحوه پیادهسازی بینالمللیسازی در یک برنامه 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
در ریشهٔ پروژهتان قرار دهید.
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
: «پوشهای» که رشتههای شما در آن ذخیره میشوند، مانند آدرس وبسایت شما. برای اطلاعات بیشتر دربارهٔ مبداها اینجا را بخوانید.
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 مخفی شما توسط هرکسی هرکسی جلوگیری میکند و همچنین ممکن است با اضافه شدن رشتههای جدید و نامرتبط باعث افزایش بیرویه حجم پروژه ترجمهتان شود.
حتماً مثال کامل را در پروفایل گیتهاب ما بررسی کنید. در آنجا همچنین یک مثال از نحوهٔ انجام این کار با استفاده از App Router پیدا خواهید کرد! اگر با مشکلی مواجه شدید، دریغ نکنید و با ما تماس بگیرید؛ ما با کمال میل خوشحال میشویم که کمک کنیم.
TacoTranslate بهطور خودکار به شما امکان میدهد برنامههای React خود را سریعاً به بیش از ۷۵ زبان و از آنها بومیسازی کنید. همین امروز شروع کنید!