نحوه پیادهسازی بینالمللیسازی در یک برنامه 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: کد زبان پیشفرض بازگشتی. در این مثال، آن را روی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 بسته و ایمن داشته باشید که در آن بتوانید برنامه تولیدیتان را با چنین کلید API آزمایش کنید و قبل از انتشار رشتههای جدید را اضافه کنید. این کار از سرقت کلید مخفی API شما جلوگیری میکند و همچنین از پُر شدن احتمالی پروژه ترجمهتان با رشتههای جدید و نامرتبط جلوگیری مینماید.
حتماً در پروفایل گیتهاب ما نمونهٔ کامل را بررسی کنید. در آنجا همچنین یک نمونهٔ دیگر از نحوهٔ انجام این کار با استفاده از App Router نیز خواهید یافت! اگر با هر مشکلی مواجه شدید، لطفاً با ما تماس بگیرید، و با کمال میل خوشحال میشویم که کمک کنیم.
TacoTranslate به شما امکان میدهد برنامههای React خود را بهطور خودکار و سریع بین بیش از 75 زبان بومیسازی کنید. همین امروز شروع کنید!