نحوه پیادهسازی بینالمللیسازی در یک برنامه Next.js که از Pages Router استفاده میکند
اپلیکیشن React خود را با بینالمللیسازی (i18n) قابلدسترسیتر کنید و به بازارهای جدید دست یابید.
با جهانیتر شدن جهان، اهمیت ساخت اپلیکیشنهایی که بتوانند نیازهای کاربران از کشورهای و فرهنگهای مختلف را برآورده کنند برای توسعهدهندگان وب بیش از پیش افزایش مییابد. یکی از راههای کلیدی برای رسیدن به این هدف، بینالمللیسازی (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: «پوشهای» که رشتههای شما در آن ذخیره خواهند شد، مانند آدرس وبسایت شما. برای اطلاعات بیشتر درباره origins اینجا را بخوانید.
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 عمومی را نمایش خواهد داد. اگر در یک محیط محلی، آزمایشی یا 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!"/>
}مرحله ۵: استقرار و آزمایش!
تمام شد! از این به بعد، هرگاه هر رشتهای را به یک کامپوننت Translate اضافه کنید، برنامه React شما بهصورت خودکار ترجمه خواهد شد. توجه داشته باشید که تنها محیطهایی که دسترسی read/write روی کلید API دارند قادر خواهند بود رشتههای جدیدی برای ترجمه ایجاد کنند. توصیه میکنیم یک محیط استیجینگ بسته و امن داشته باشید که بتوانید برنامه تولیدی خود را با چنین کلید API آزمایش کنید و قبل از راهاندازی، رشتههای جدید را اضافه کنید. این از دزدیده شدن کلید API مخفی شما توسط هر کسی هر کسی جلوگیری میکند و همچنین میتواند از پر شدن احتمالی پروژه ترجمهتان با رشتههای جدید و نامرتبط جلوگیری کند.
حتماً در پروفایل GitHub ما نمونهٔ کامل را مشاهده کنید. در آنجا همچنین یک مثال از نحوه انجام این کار با استفاده از App Router خواهید یافت! اگر با مشکلی مواجه شدید، لطفاً با ما تماس بگیرید، و ما با کمال میل کمک خواهیم کرد.
TacoTranslate به شما اجازه میدهد برنامههای React خود را بهصورت خودکار و سریع به بیش از 75 زبان و از آنها بومیسازی کنید. همین امروز شروع کنید!