بهترین راهحل برای بینالمللیسازی (i18n) در اپلیکیشنهای Next.js
آیا میخواهید اپلیکیشن Next.js خود را به بازارهای جدید گسترش دهید؟ TacoTranslate بومیسازی پروژهٔ Next.js شما را بسیار ساده میکند و به شما امکان میدهد بدون زحمت به مخاطبان جهانی دسترسی پیدا کنید.
چرا باید TacoTranslate را برای Next.js انتخاب کنید؟
- یکپارچهسازی بینقص: که بهصورت خاص برای برنامههای Next.js طراحی شده است، TacoTranslate بهسادگی در جریان کاری فعلی شما ادغام میشود.
- جمعآوری خودکار رشتهها: دیگر نیازی به مدیریت دستی فایلهای JSON نیست. TacoTranslate بهطور خودکار رشتهها را از کدبیس شما جمعآوری میکند.
- ترجمههای مبتنی بر هوش مصنوعی: از قدرت هوش مصنوعی استفاده کنید تا ترجمههایی از نظر زمینهای دقیق و متناسب با لحن برنامهتان ارائه شود.
- پشتیبانی فوری از زبانها: با تنها یک کلیک پشتیبانی از زبانهای جدید را اضافه کنید و برنامهتان را در دسترس کاربران سراسر جهان قرار دهید.
نحوه کار
با جهانیشدن، برای توسعهدهندگان وب هر چه بیشتر اهمیت دارد که برنامههایی بسازند که بتوانند پاسخگوی کاربران از کشورهای و فرهنگهای مختلف باشند. یکی از راههای کلیدی برای دستیابی به این هدف، بینالمللیسازی (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مطمئن شوید که هرگز کلید 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 عمومی را آشکار میکند. اگر در یک محیط محلی، تست یا استیجینگ باشیم (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!"/>
}مرحلهٔ ۵: راهاندازی و آزمایش کنید!
تمام شد! برنامهی Next.js شما اکنون بهصورت خودکار ترجمه خواهد شد هرگاه هر رشتهای را به یک Translate کامپوننت اضافه کنید. توجه داشته باشید که تنها محیطهایی که مجوز read/write را روی کلید API دارند قادر خواهند بود رشتههای جدیدی برای ترجمه ایجاد کنند. پیشنهاد میکنیم یک محیط staging بسته و امن داشته باشید تا بتوانید برنامهی تولیدی خود را با چنین کلید API تست کرده و پیش از انتشار، رشتههای جدید را اضافه کنید. این کار از سرقت کلید API مخفی شما توسط دیگران جلوگیری میکند و همچنین مانع از افزایش بیرویه حجم پروژهی ترجمهتان با اضافه شدن رشتههای جدید و نامرتبط میشود.
Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the App Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.
TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!