چگونه میتوان بینالمللیسازی را در یک برنامه Next.js که از Pages Router استفاده میکند، پیادهسازی کرد
اپلیکیشن React خود را بیشتر قابل دسترس کنید و با بکارگیری بینالمللیسازی (i18n) به بازارهای جدید دست پیدا کنید.
همزمان با جهانیتر شدن دنیا، برای توسعهدهندگان وب اهمیت بیشتری پیدا میکند که برنامههایی بسازند که بتوانند نیازهای کاربران از کشورهای مختلف و فرهنگهای گوناگون را برآورده کنند. یکی از راههای کلیدی برای رسیدن به این هدف، بینالمللیسازی (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
حتماً هرگز read/write
کلید API مخفی را به محیطهای تولید سمت کلاینت نشت ندهید.
ما همچنین دو متغیر محیطی دیگر اضافه خواهیم کرد: TACOTRANSLATE_DEFAULT_LOCALE
و TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: کد منطقهٔ پیشفرض برای بازگشت. در این مثال، آن را رویen
برای انگلیسی تنظیم خواهیم کرد.TACOTRANSLATE_ORIGIN
: «پوشه»ای که رشتههای شما در آن ذخیره خواهند شد، مانند URL وبسایت شما. بیشتر درباره منشاها اینجا بخوانید.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
گام ۳: راهاندازی TacoTranslate
To integrate TacoTranslate with your application, you’ll need to create a client using the API keys from earlier. For example, create a file named /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
) باشیم، از کلید مخفی read/write
API استفاده خواهیم کرد تا اطمینان حاصل شود که رشتههای جدید برای ترجمه ارسال میشوند.
تا به حال، ما فقط برنامه 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 هستند، قادر خواهند بود رشتههای جدیدی برای ترجمه ایجاد کنند. ما توصیه میکنیم یک محیط staging بسته و امن داشته باشید که بتوانید برنامه تولیدی خود را با چنین کلید API آزمایش کنید، و قبل از راهاندازی رشتههای جدید اضافه کنید. این کار از دزدیده شدن کلید API مخفی شما توسط هر کسی جلوگیری خواهد کرد و همچنین احتمال پر شدن غیرضروری پروژه ترجمه شما با رشتههای نامرتبط را کاهش میدهد.
حتماً نمونهی کامل را در پروفایل گیتهاب ما بررسی کنید. آنجا همچنین یک نمونه از نحوه انجام این کار با استفاده از App Router خواهید یافت! اگر با مشکلی مواجه شدید، لطفاً با ما تماس بگیرید، و ما با خوشحالی آماده کمک به شما هستیم.
TacoTranslate به شما امکان میدهد تا برنامههای React خود را سریعاً و بهصورت خودکار به هر زبانی محلیسازی کنید و از آن زبانها بازگردید. امروز شروع کنید!