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