نحوه پیادهسازی بینالمللیسازی در یک برنامه Next.js که از Pages Router استفاده میکند
با استفاده از بینالمللیسازی (i18n)، برنامهٔ React خود را قابل دسترستر کنید و به بازارهای جدید دست یابید.
با جهانیشدن روزافزون، برای توسعهدهندگان وب اهمیت فزایندهای یافته است که برنامههایی بسازند که بتوانند نیازهای کاربران از کشورها و فرهنگهای مختلف را برآورده کنند. یکی از راههای کلیدی برای دستیابی به این هدف، بینالمللیسازی (i18n) است که به شما امکان میدهد برنامهتان را به زبانها، ارزها و قالبهای تاریخ مختلف سازگار کنید.
در این آموزش، به بررسی چگونگی افزودن بینالمللیسازی به برنامه React Next.js خود، همراه با رندر سمت سرور، خواهیم پرداخت. TL;DR: نمونهٔ کامل را اینجا ببینید.
این راهنما برای برنامههای Next.js است که از Pages Router استفاده میکنند.
اگر از App Router استفاده میکنید، لطفاً به این راهنما مراجعه کنید.
مرحله 1: یک کتابخانهٔ i18n را نصب کنید
برای پیادهسازی بینالمللیسازی (i18n) در برنامهٔ Next.js خود، ابتدا یک کتابخانهٔ i18n را انتخاب خواهیم کرد. چندین کتابخانهٔ محبوب وجود دارند، از جمله next-intl. اما در این مثال، ما از TacoTranslate استفاده خواهیم کرد.
TacoTranslate متون شما را بهطور خودکار با استفاده از هوش مصنوعی پیشرفته به هر زبانی ترجمه میکند و شما را از مدیریت خستهکنندهٔ فایلهای JSON رها میسازد.
بیایید آن را با استفاده از npm در ترمینال خود نصب کنیم:
npm install tacotranslateمرحله 2: یک حساب رایگان 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: کد locale پیشفرض برای بازگشت. در این مثال، آن را روی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 سفارشی دارید، لطفاً تعریف را با ویژگیها و کدهای بالا گسترش دهید.
مرحله 4: پیادهسازی رندر سمت سرور
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 کامپوننت اضافه کنید، ترجمه خواهد شد. توجه داشته باشید که تنها محیطهایی که مجوز read/write روی کلید API دارند قادر خواهند بود رشتههای جدیدی برای ترجمه ایجاد کنند. ما توصیه میکنیم یک محیط staging بسته و امن داشته باشید تا بتوانید برنامهٔ تولیدی خود را با چنین کلید API آزمایش کرده و قبل از انتشار، رشتههای جدید را اضافه کنید. این از دزدیده شدن کلید مخفی API شما توسط هر کسی جلوگیری میکند و همچنین از پُر شدن احتمالی پروژهٔ ترجمهتان با رشتههای جدید و نامرتبط جلوگیری خواهد کرد.
حتماً مثال کامل را در پروفایل گیتهاب ما بررسی کنید. آنجا همچنین یک نمونه خواهید یافت که چگونه این کار را با استفاده از App Router انجام دهید! اگر با هر مشکلی مواجه شدید، راحت باشید و به ما ایمیل بزنید، و با کمال میل کمک خواهیم کرد.
TacoTranslate بهطور خودکار برنامههای React شما را سریعاً به بیش از 75 زبان و بالعکس بومیسازی میکند. همین امروز شروع کنید!