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