استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- النسخة الأوليةv7.0.6١/١١/٢٠٢٥
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
كيفية تعريب تطبيق Next.js الخاص بك باستخدام next-i18next في عام 2026
جدول المحتويات
ما هو next-i18next؟
next-i18next هو حل شائع للتعريب (i18n) لتطبيقات Next.js. بينما تم تصميم حزمة next-i18next الأصلية لتعمل مع Pages Router، يوضح لك هذا الدليل كيفية تنفيذ i18next مع App Router الحديث باستخدام i18next و react-i18next مباشرة.
مع هذا النهج، يمكنك:
- تنظيم الترجمات باستخدام مساحات الأسماء (مثل
common.json،about.json) لإدارة محتوى أفضل. - تحميل الترجمات بكفاءة عن طريق تحميل مساحات الأسماء المطلوبة فقط لكل صفحة، مما يقلل من حجم الحزمة.
- دعم مكونات الخادم والعميل مع التعامل الصحيح مع SSR وhydration.
- ضمان دعم TypeScript مع تكوين locale آمن من حيث النوع ومفاتيح الترجمة.
- تحسين SEO باستخدام بيانات وصفية مناسبة، وخريطة الموقع، وتعريب ملف robots.txt.
كبديل، يمكنك أيضًا الرجوع إلى دليل next-intl، أو استخدام Intlayer مباشرة.
اطلع على المقارنة في next-i18next مقابل next-intl مقابل Intlayer.
الممارسات التي يجب اتباعها
قبل أن نبدأ في التنفيذ، إليك بعض الممارسات التي يجب اتباعها:
- تعيين خصائص HTML
langوdirفي تخطيطك، احسبdirباستخدامgetLocaleDirection(locale)وقم بتعيين<html lang={locale} dir={dir}>لضمان سهولة الوصول وتحسين محركات البحث. - قسّم الرسائل حسب النطاق
نظم ملفات JSON حسب اللغة والنطاق (مثل
common.json،about.json) لتحميل ما تحتاجه فقط. - قلل من حجم البيانات المرسلة إلى العميل
في الصفحات، أرسل فقط النطاقات المطلوبة إلى
NextIntlClientProvider(مثلpick(messages, ['common', 'about'])). - فضل الصفحات الثابتة استخدم الصفحات الثابتة قدر الإمكان لأداء أفضل وتحسين محركات البحث.
- الدولية في مكونات الخادم
مكونات الخادم، مثل الصفحات أو جميع المكونات غير المعلمة كـ
clientهي ثابتة ويمكن تقديمها مسبقًا أثناء وقت البناء. لذلك، سيتعين علينا تمرير دوال الترجمة إليها كخصائص. - إعداد أنواع TypeScript للغاتك لضمان سلامة الأنواع في جميع أنحاء تطبيقك.
- وكيل لإعادة التوجيه استخدم وكيلًا للتعامل مع اكتشاف اللغة والتوجيه وإعادة توجيه المستخدم إلى عنوان URL المناسب مع بادئة اللغة.
- تعريب بيانات التعريف، خريطة الموقع، robots.txt
قم بتعريب بيانات التعريف، خريطة الموقع، robots.txt باستخدام دالة
generateMetadataالمقدمة من Next.js لضمان اكتشاف أفضل من قبل محركات البحث في جميع اللغات. - تعريب الروابط
عرّب الروابط باستخدام مكون
Linkلإعادة توجيه المستخدم إلى عنوان URL المناسب مع بادئة اللغة. من المهم ضمان اكتشاف صفحاتك في جميع اللغات. - أتمتة الاختبارات والترجمات تساعد أتمتة الاختبارات والترجمات في توفير الوقت لصيانة تطبيقك متعدد اللغات.
راجع وثيقتنا التي تسرد كل ما تحتاج لمعرفته حول التدويل وتحسين محركات البحث: التدويل (i18n) مع next-intl.
دليل خطوة بخطوة لإعداد i18next في تطبيق Next.js
راجع قالب التطبيق على GitHub.
إليك هيكل المشروع الذي سنقوم بإنشائه:
نسخ الكود إلى الحافظة
تثبيت التبعيات
قم بتثبيت الحزم اللازمة باستخدام npm:
bashنسخ الكودنسخ الكود إلى الحافظة
- i18next: إطار العمل الأساسي للتدويل الذي يتولى تحميل الترجمات وإدارتها.
- react-i18next: روابط React لـ i18next التي توفر هوكات مثل
useTranslationلمكونات العميل. - i18next-resources-to-backend: إضافة تتيح التحميل الديناميكي لملفات الترجمة، مما يسمح لك بتحميل مساحات الأسماء التي تحتاجها فقط.
تكوين مشروعك
قم بإنشاء ملف تكوين لتعريف اللغات المدعومة، اللغة الافتراضية، ودوال المساعدة لتوطين عناوين URL. يعمل هذا الملف كمصدر وحيد للحقيقة لإعداد i18n الخاص بك ويضمن سلامة الأنواع في جميع أنحاء تطبيقك.
يساعد مركزية تكوين اللغة على منع التناقضات ويسهل إضافة أو إزالة اللغات في المستقبل. تضمن دوال المساعدة توليد عناوين URL متسقة لتحسين محركات البحث والتوجيه.
i18n.config.tsنسخ الكودنسخ الكود إلى الحافظة
مركزية مساحات أسماء الترجمة
قم بإنشاء مصدر واحد للحقيقة لكل مساحة أسماء (namespace) تعرضها تطبيقك. إعادة استخدام هذه القائمة يحافظ على تزامن كود الخادم والعميل وأدوات التطوير ويفتح إمكانية التحقق القوي من نوع المفاتيح الخاصة بالمترجمين.
src/i18n.namespaces.tsنسخ الكودنسخ الكود إلى الحافظة
تعيين نوع قوي لمفاتيح الترجمة باستخدام TypeScript
قم بتعزيز
i18nextللإشارة إلى ملفات اللغة الرسمية الخاصة بك (عادةً الإنجليزية). يقوم TypeScript بعد ذلك باستنتاج المفاتيح الصحيحة لكل مساحة أسماء، بحيث يتم التحقق من استدعاءاتt()بشكل كامل.src/types/i18next.d.tsنسخ الكودنسخ الكود إلى الحافظة
نصيحة: خزّن هذا التعريف تحت مجلد
src/types(قم بإنشاء المجلد إذا لم يكن موجودًا). يتضمن Next.js بالفعل مجلدsrcفي ملفtsconfig.json، لذا يتم التقاط هذا التوسيع تلقائيًا. إذا لم يكن كذلك، أضف التالي إلى ملفtsconfig.jsonالخاص بك:tsconfig.jsonنسخ الكودنسخ الكود إلى الحافظة
مع هذا الإعداد يمكنك الاعتماد على الإكمال التلقائي وفحوصات وقت الترجمة:
tsxنسخ الكودنسخ الكود إلى الحافظة
إعداد تهيئة i18n على جانب الخادم
قم بإنشاء دالة تهيئة على جانب الخادم تقوم بتحميل الترجمات لمكونات الخادم. تنشئ هذه الدالة نسخة منفصلة من i18next للعرض على جانب الخادم، مما يضمن تحميل الترجمات قبل العرض.
تحتاج مكونات الخادم إلى نسخة خاصة بها من i18next لأنها تعمل في سياق مختلف عن مكونات العميل. يمنع تحميل الترجمات مسبقًا على الخادم ظهور محتوى غير مترجم مؤقتًا ويحسن تحسين محركات البحث (SEO) من خلال ضمان رؤية محركات البحث للمحتوى المترجم.
src/app/i18n/server.tsنسخ الكودنسخ الكود إلى الحافظة
إنشاء مزود i18n على جانب العميل
قم بإنشاء مزود مكون للعميل يلف تطبيقك بسياق i18next. يستقبل هذا المزود الترجمات المحملة مسبقًا من الخادم لمنع وميض المحتوى غير المترجم (FOUC) وتجنب جلب البيانات المكرر.
تحتاج مكونات العميل إلى نسخة i18next خاصة بها تعمل في المتصفح. من خلال قبول الموارد المحملة مسبقًا من الخادم، نضمن تهيئة سلسة ونمنع وميض المحتوى. كما يدير المزود تغييرات اللغة وتحميل المساحات الاسمية بشكل ديناميكي.
src/components/I18nProvider.tsxنسخ الكودنسخ الكود إلى الحافظة
تعريف مسارات اللغات الديناميكية
قم بإعداد التوجيه الديناميكي للغات عن طريق إنشاء مجلد
[locale]في مجلد التطبيق الخاص بك. هذا يسمح لـ Next.js بالتعامل مع التوجيه بناءً على اللغة حيث تصبح كل لغة جزءًا من عنوان URL (مثل/en/about،/fr/about).استخدام المسارات الديناميكية يمكّن Next.js من إنشاء صفحات ثابتة لجميع اللغات أثناء وقت البناء، مما يحسن الأداء وتحسين محركات البحث (SEO). يقوم مكون التخطيط بتعيين سمات HTML
langوdirبناءً على اللغة، وهو أمر حيوي للوصولية وفهم محركات البحث.src/app/[locale]/layout.tsxنسخ الكودنسخ الكود إلى الحافظة
إنشاء ملفات الترجمة الخاصة بك
قم بإنشاء ملفات JSON لكل لغة ومساحة أسماء. تتيح لك هذه البنية تنظيم الترجمات بشكل منطقي وتحميل ما تحتاجه فقط لكل صفحة.
تنظيم الترجمات حسب مساحة الاسم (مثل
common.json،about.json) يتيح تقسيم الكود ويقلل من حجم الحزمة. تقوم بتحميل الترجمات اللازمة فقط لكل صفحة، مما يحسن الأداء.src/locales/en/common.jsonنسخ الكودنسخ الكود إلى الحافظة
src/locales/fr/common.jsonنسخ الكودنسخ الكود إلى الحافظة
src/locales/en/home.jsonنسخ الكودنسخ الكود إلى الحافظة
src/locales/ar/home.jsonنسخ الكودنسخ الكود إلى الحافظة
src/locales/ar/about.jsonنسخ الكودنسخ الكود إلى الحافظة
استخدام الترجمات في صفحاتك
قم بإنشاء مكون صفحة يقوم بتهيئة i18next على الخادم ويمرر الترجمات إلى مكونات الخادم والعميل على حد سواء. هذا يضمن تحميل الترجمات قبل العرض ويمنع وميض المحتوى.
تهيئة جانب الخادم تقوم بتحميل الترجمات قبل عرض الصفحة، مما يحسن SEO ويمنع ظهور محتوى غير منسق (FOUC). من خلال تمرير الموارد المحملة مسبقًا إلى مزود العميل، نتجنب جلب البيانات المكرر ونضمن تهيئة سلسة.
src/app/[locale]/about/index.tsxنسخ الكودنسخ الكود إلى الحافظة
استخدام الترجمات في مكونات العميل
يمكن لمكونات العميل استخدام الخطاف
useTranslationللوصول إلى الترجمات. يوفر هذا الخطاف الوصول إلى دالة الترجمة ومثيل i18n، مما يتيح لك ترجمة المحتوى والوصول إلى معلومات اللغة.تحتاج مكونات العميل إلى خطافات React للوصول إلى الترجمات. يتكامل الخطاف
useTranslationبسلاسة مع i18next ويوفر تحديثات تفاعلية عند تغيير اللغة.تأكد من أن الصفحة/المزود تتضمن فقط المساحات الاسمية التي تحتاجها (مثل
about).
إذا كنت تستخدم React أقل من الإصدار 19، قم بتخزين مؤقت للمهيئات الثقيلة مثلIntl.NumberFormat.src/components/ClientComponent.tsxنسخ الكودنسخ الكود إلى الحافظة
استخدام الترجمات في مكونات الخادم
لا يمكن لمكونات الخادم استخدام React hooks، لذلك تستقبل الترجمات عبر props من مكونات الوالد الخاصة بها. هذه الطريقة تحافظ على تزامن مكونات الخادم وتسمح بتضمينها داخل مكونات العميل.
يجب أن تكون مكونات الخادم التي قد تكون متداخلة تحت حدود العميل متزامنة. من خلال تمرير السلاسل المترجمة ومعلومات اللغة كلProps، نتجنب العمليات غير المتزامنة ونضمن العرض الصحيح.
src/components/ServerComponent.tsxنسخ الكودنسخ الكود إلى الحافظة
تغيير لغة المحتوى الخاص بك
اختياريلتغيير لغة المحتوى الخاص بك في Next.js، الطريقة الموصى بها هي استخدام عناوين URL التي تحتوي على بادئة locale وروابط Next.js. المثال أدناه يقرأ locale الحالي من المسار، ويزيله من اسم المسار، ويعرض رابطًا واحدًا لكل locale متاح.
src/components/LocaleSwitcher.tsxنسخ الكودنسخ الكود إلى الحافظة
بناء مكون رابط محلي
اختياريإعادة استخدام عناوين URL المحلية عبر تطبيقك يحافظ على اتساق التنقل وصديق لمحركات البحث (SEO). قم بتغليف
next/linkفي مساعد صغير يضيف بادئة للمسارات الداخلية باستخدام اللغة النشطة مع ترك عناوين URL الخارجية بدون تغيير.src/components/LocalizedLink.tsxنسخ الكودنسخ الكود إلى الحافظة
نصيحة: نظرًا لأن
LocalizedLinkهو بديل جاهز، قم بالترحيل تدريجيًا عن طريق تبديل الاستيرادات وترك المكون يتعامل مع عناوين URL الخاصة باللغات.الوصول إلى اللغة النشطة داخل Server Actions
اختياريغالبًا ما تحتاج Server Actions إلى اللغة الحالية للبريد الإلكتروني أو التسجيل أو التكامل مع أطراف ثالثة. قم بدمج ملف تعريف الارتباط الخاص باللغة الذي يحدده البروكسي الخاص بك مع رأس
Accept-Languageكخيار احتياطي.src/app/actions/get-current-locale.tsنسخ الكودنسخ الكود إلى الحافظة
نظرًا لأن المساعد يعتمد على ملفات تعريف الارتباط (cookies) ورؤوس (headers) Next.js، فإنه يعمل في معالجات المسارات (Route Handlers)، والإجراءات الخادمة (Server Actions)، وسياقات الخادم فقط الأخرى.
تدويل بيانات التعريف الخاصة بك
اختياريترجمة المحتوى أمر مهم، لكن الهدف الرئيسي من التدويل هو جعل موقعك الإلكتروني أكثر ظهورًا للعالم. التدويل (I18n) هو رافعة مذهلة لتحسين ظهور موقعك الإلكتروني من خلال تحسين محركات البحث (SEO) بشكل صحيح.
تساعد بيانات التعريف الدولية بشكل صحيح محركات البحث على فهم اللغات المتاحة في صفحاتك. وهذا يشمل تعيين علامات hreflang في بيانات التعريف، وترجمة العناوين والوصفات، وضمان تعيين عناوين URL القانونية (canonical URLs) بشكل صحيح لكل لغة.
إليك قائمة بالممارسات الجيدة المتعلقة بتحسين محركات البحث متعددة اللغات:
- تعيين علامات hreflang في وسم
<head>لمساعدة محركات البحث على فهم اللغات المتاحة في الصفحة - سرد جميع ترجمات الصفحة في ملف sitemap.xml باستخدام مخطط XML الخاص بـ
http://www.w3.org/1999/xhtml - لا تنسَ استبعاد الصفحات ذات البادئات من ملف robots.txt (مثلًا:
/dashboard،/fr/dashboard،/es/dashboard) - استخدم مكون Link مخصص لإعادة التوجيه إلى الصفحة الأكثر تخصيصًا للغة (مثلًا، بالفرنسية
<a href="/fr/about">À propos</a>)
غالبًا ما ينسى المطورون الإشارة بشكل صحيح إلى صفحاتهم عبر اللغات المختلفة. دعونا نصحح ذلك:
src/app/[locale]/about/layout.tsxنسخ الكودنسخ الكود إلى الحافظة
- تعيين علامات hreflang في وسم
تعريب خريطة الموقع الخاصة بك
اختياريقم بإنشاء خريطة موقع تتضمن جميع إصدارات اللغات لصفحاتك. هذا يساعد محركات البحث على اكتشاف وفهرسة جميع إصدارات اللغات لمحتواك.
تضمن خريطة الموقع المعربة بشكل صحيح أن محركات البحث يمكنها العثور على جميع إصدارات اللغات لصفحاتك وفهرستها. هذا يحسن من ظهورك في نتائج البحث الدولية.
src/app/sitemap.tsنسخ الكودنسخ الكود إلى الحافظة
تعريب ملف robots.txt الخاص بك
اختياريقم بإنشاء ملف robots.txt يتعامل بشكل صحيح مع جميع إصدارات اللغات لمساراتك المحمية. هذا يضمن أن محركات البحث لا تقوم بفهرسة صفحات المسؤول أو لوحة التحكم بأي لغة.
تكوين ملف robots.txt بشكل صحيح لجميع اللغات يمنع محركات البحث من فهرسة الصفحات الحساسة بأي لغة. هذا أمر بالغ الأهمية للأمان والخصوصية.
src/app/robots.tsنسخ الكودنسخ الكود إلى الحافظة
إعداد Middleware لتوجيه اللغة
اختياريقم بإنشاء وكيل (proxy) لاكتشاف اللغة المفضلة للمستخدم تلقائيًا وإعادة توجيهه إلى عنوان URL مع بادئة اللغة المناسبة. هذا يحسن تجربة المستخدم من خلال عرض المحتوى بلغته المفضلة.
يضمن الـ Middleware إعادة توجيه المستخدمين تلقائيًا إلى لغتهم المفضلة عند زيارة موقعك. كما يحفظ تفضيل المستخدم في ملف تعريف ارتباط (cookie) للزيارات المستقبلية.
src/proxy.tsنسخ الكودنسخ الكود إلى الحافظة
أتمتة ترجماتك باستخدام Intlayer
اختياريIntlayer هي مكتبة مجانية ومفتوحة المصدر مصممة لمساعدتك في عملية التوطين في تطبيقك. بينما يتولى i18next تحميل الترجمات وإدارتها، يساعد Intlayer في أتمتة سير عمل الترجمة.
إدارة الترجمات يدويًا يمكن أن تكون مستهلكة للوقت وعرضة للأخطاء. يقوم Intlayer بأتمتة اختبار الترجمات، وإنشائها، وإدارتها، مما يوفر عليك الوقت ويضمن الاتساق عبر تطبيقك.
يسمح لك Intlayer بـ:
إعلان المحتوى الخاص بك في أي مكان تريده في قاعدة الكود الخاصة بك يتيح Intlayer إعلان المحتوى الخاص بك في أي مكان تريده في قاعدة الكود باستخدام ملفات
.content.{ts|js|json}. هذا سيسمح بتنظيم أفضل لمحتواك، مما يضمن قابلية قراءة وصيانة أفضل لقاعدة الكود الخاصة بك.اختبار الترجمات المفقودة يوفر Intlayer دوال اختبار يمكن دمجها في خط أنابيب CI/CD الخاص بك، أو في اختبارات الوحدة الخاصة بك. تعرّف على المزيد حول اختبار الترجمات الخاصة بك.
أتمتة ترجماتك،
يوفر Intlayer واجهة سطر أوامر (CLI) وامتداد VSCode لأتمتة ترجماتك. يمكن دمجه في خط أنابيب CI/CD الخاص بك. تعرّف على المزيد حول أتمتة ترجماتك.
يمكنك استخدام مفتاح API الخاص بك، ومزود الذكاء الاصطناعي الذي تختاره. كما يوفر ترجمات واعية للسياق، راجع ملء المحتوى.- ربط المحتوى الخارجي
قم بأتمتة ترجماتك،
يوفر Intlayer أداة CLI وامتداد VSCode لأتمتة ترجماتك. يمكن دمجه في خط أنابيب CI/CD الخاص بك. تعرّف على المزيد حول أتمتة ترجماتك.
يمكنك استخدام مفتاح API الخاص بك، ومزود الذكاء الاصطناعي الذي تختاره. كما يوفر ترجمات واعية للسياق، راجع ملء المحتوى.ربط المحتوى الخارجي
يتيح لك Intlayer ربط محتواك بنظام إدارة محتوى خارجي (CMS). لجلبه بطريقة محسّنة وإدراجه في موارد JSON الخاصة بك. تعرّف على المزيد حول جلب المحتوى الخارجي.المحرر المرئي
يقدم Intlayer محررًا مرئيًا مجانيًا لتحرير محتواك باستخدام محرر مرئي. تعرّف على المزيد حول التحرير المرئي لترجماتك.
والمزيد. لاكتشاف جميع الميزات التي يوفرها Intlayer، يرجى الرجوع إلى أهمية توثيق Intlayer.
التعليقات
لا توجد تعليقات بعد. كن أول من يشارك أفكاره.