الحل الأفضل للتدويل (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، فالرجاء الاطلاع على هذا الدليل بدلاً من ذلك.
الخطوة 1: تثبيت مكتبة 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: رمز اللغة الافتراضي الاحتياطي. في هذا المثال، سنضبطه علىenللغة الإنجليزية.TACOTRANSLATE_ORIGIN: “المجلد” حيث ستُخزّن سلاسل النص الخاصة بك، مثل عنوان URL لموقعك. اقرأ المزيد عن الأصول هنا.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comالخطوة 3: إعداد 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!"/>
}الخطوة الخامسة: انشر واختبر!
لقد انتهينا! سيُترجم تطبيق 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!