چگونه بینالمللیسازی را در یک برنامه 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 استفاده خواهیم کرد.
تاکوترنسلیت به طور خودکار رشتههای شما را با استفاده از هوش مصنوعی پیشرفته به هر زبانی ترجمه میکند و شما را از مدیریت خستهکننده فایلهای 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
: «پوشه»ای که رشتههای شما در آن ذخیره میشوند، مانند آدرس وبسایت شما. اینجا درباره منشاءها بیشتر بخوانید.
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 عمومی را نمایش خواهد داد. اگر ما در محیط محلی، آزمایشی، یا مرحله آزمایش (isProduction
is false
) باشیم، از کلید API مخفی read/write
استفاده خواهیم کرد تا مطمئن شویم رشتههای جدید برای ترجمه ارسال میشوند.
تا کنون، ما فقط برنامه Next.js را با فهرستی از زبانهای پشتیبانی شده تنظیم کردهایم. قدم بعدی این است که ترجمهها را برای تمام صفحات شما واکشی کنیم. برای این کار، شما بسته به نیازهای خود، از getTacoTranslateStaticProps
یا getTacoTranslateServerSideProps
استفاده خواهید کرد.
این توابع سه آرگومان میگیرند: یک شئ Next.js Static Props Context, پیکربندی برای TacoTranslate، و ویژگیهای اختیاری Next.js. توجه داشته باشید که مقدار revalidate
در getTacoTranslateStaticProps
به طور پیشفرض روی ۶۰ تنظیم شده است، تا ترجمههای شما بهروز بمانند.
برای استفاده از هر یک از این توابع در یک صفحه، فرض بگیریم که شما یک فایل صفحه مثل /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 خود را بهصورت خودکار به بیش از ۷۵ زبان به سرعت محلیسازی کنید. امروز شروع کنید!