استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- بدء السجلv9.0.0٥/٦/٢٠٢٦
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
الترحيل من next-intl إلى Intlayer
لماذا الترحيل من next-intl إلى Intlayer؟
بدلاً من تحميل ملفات JSON ضخمة في صفحاتك، قم بتحميل المحتوى الضروري فقط. يساعدك Intlayer على تقليل حجم bundle والصفحات بنسبة تصل إلى 50%.
تقسيم محتوى التطبيق الخاص بك يسهل الصيانة للتطبيقات الكبيرة. يمكنك نسخ أو حذف مجلد ميزة واحد دون العبء الذهني لمراجعة قاعدة الكود كاملة. بالإضافة إلى ذلك، Intlayer مكتوب بالكامل لضمان دقة المحتوى الخاص بك.
Intlayer هو أيضًا الحل الذي يتمتع بـ أنشط تطور في نظام i18n البيئي - يتم إصلاح المشاكل بسرعة، وتصل محولات frameworks جديدة بانتظام، ويتم تحسين API الأساسي بشكل مستمر بناءً على ملاحظات الإنتاج الواقعية.
يقلل Co-locating المحتوى من السياق المطلوب بواسطة النماذج اللغوية الكبيرة (LLMs). يأتي Intlayer أيضًا مع مجموعة من الأدوات، مثل CLI لاختبار الترجمات المفقودة، LSP، MCP، و مهارات الوكيل، لجعل تجربة المطور (DX) أكثر سلاسة حتى بالنسبة لوكلاء AI.
استخدم الأتمتة للترجمة في خط أنابيب CI/CD الخاص بك باستخدام LLM من اختيارك بتكلفة موفر AI الخاص بك. يوفر Intlayer أيضًا مترجم لأتمتة استخراج المحتوى، وكذلك منصة ويب لمساعدتك في الترجمة في الخلفية.
ربط ملفات JSON ضخمة بمكونات قد يؤدي إلى مشاكل الأداء والتفاعل. يحسّن Intlayer تحميل المحتوى الخاص بك في وقت البناء.
أكثر من مجرد حل i18n، يوفر Intlayer محرر بصري مستضاف على الخادم الخاص بك و CMS كامل لمساعدتك في إدارة محتوى متعدد اللغات في الوقت الفعلي، مما يجعل التعاون مع المترجمين والمحررين وأعضاء الفريق الآخرين سلساً. يمكن تخزين المحتوى محليًا و/أو عن بعد.
استراتيجية الترحيل
الأسلوب الموصى به للتطبيقات الموجودة هو محول التوافق: قم بتثبيت @intlayer/next-intl، الذي يعرض نفس API تماماً كـ next-intl لكن يوكل جميع أعمال الترجمة إلى Intlayer تحت الغطاء.
تحتفظ باستدعاءات useTranslations و getTranslations و NextIntlClientProvider الموجودة - التغيير الوحيد هو مسار الاستيراد. لا يلزم إعادة بناء توقيعات الاستدعاء أو أشكال props أو بنية المكون.
بمرور الوقت، يمكنك بشكل اختياري ترحيل ملفات فردية إلى صيغة Intlayer الأكثر ثراءً .content.ts لفتح محرر بصري و CMS والنطاق المحتوى لكل مكون - لكن هذه الخطوة اختيارية تماماً ويمكن القيام بها بشكل تدريجي.
جدول المحتويات
الترحيل السريع
الخطوات التالية هي الحد الأدنى المطلوب للحصول على تطبيق next-intl الموجود يعمل على Intlayer دون تغييرات الكود.
تثبيت التبعيات
قم بتثبيت حزم Intlayer الأساسية ومحول التوافق
@intlayer/next-intl:bashنسخ الكودنسخ الكود إلى الحافظة
npx intlayer-cli init --interactiveالعلم
--interactiveاختياري. استخدمintlayer-cli initإذا كنت وكيلاً من AI.سيكتشف هذا الأمر بيئتك ويثبت الحزم المطلوبة. على سبيل المثال:
bashنسخ الكودنسخ الكود إلى الحافظة
npm install intlayer next-intlayer @intlayer/next-intl @intlayer/sync-json-pluginاحتفظ بـ
next-intlمثبتاً - لا يزال مطلوباً للتوجيه عبر URL (createNavigation،createMiddleware،Link،redirect،usePathname،useRouter). محول التوافق لا يستبدل طبقة التوجيه.تكوين Intlayer
ينشئ أمر
intlayer initملفintlayer.config.tsالبداية. قم بتحديثه ليطابق المناطق الموجودة لديك وأشر مكونsyncJSONإلى ملفات الرسائل الخاصة بك:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // أضف جميع المناطق الموجودة لديك هنا ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // يطابق بناء جملة العنصر النائب من next-intl: {name}, {count, plural, ...} format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], }; export default config;sourceيعيّن منطقة إلى مسار ملفها JSON.locationيخبر المراقب Intlayer أي مجلد يجب مراقبته للتغييرات. يضمن الخيارformat: 'icu'أن العناصر النائبة ICU مثل{name}و{count, plural, one {# item} other {# items}}يتم تحليلها بشكل صحيح.للحصول على قائمة كاملة بخيارات التكوين، راجع وثائق التكوين.
إضافة مكون Intlayer إلى Next.js
لف إعداد Next.js الموجود لديك مع
createNextIntlPluginمن@intlayer/next-intl/plugin. يقوم هذا الغلاف بدمجwithIntlayerو تسجيل بدائلnext-intl→@intlayer/next-intlلك:next.config.tsنسخ الكودنسخ الكود إلى الحافظة
import type { NextConfig } from "next"; import { createNextIntlPlugin } from "@intlayer/next-intl/plugin"; const withIntlayer = createNextIntlPlugin(); const nextConfig: NextConfig = { /* خيارات التكوين الموجودة */ }; export default withIntlayer(nextConfig);createNextIntlPlugin()يلتفwithIntlayer، ويكتشف تلقائياً Webpack أو Turbopack، ويربط مراقبة المحتوى وترجمة القاموس، و - بشكل حاسم - يحقن بدائل module بحيث تتم إعادة توجيه استدعاءاتimport … from 'next-intl'الموجودة بشفافية إلى@intlayer/next-intlفي وقت البناء. إدخال التوجيهnext-intl/routingيترك يشير إلى الحزمة الحقيقية. لا توجد حاجة لتغييرات ملفات المصدر.تفضل
withIntlayerالبسيط منnext-intlayer/server؟ سيجمّع قواامسك، لكنه لا يضيف بدائلnext-intl- ستضطر بعد ذلك إلى إعادة تسمية الاستيرادات إلى@intlayer/next-intlيدويًا (انظر الخطوة 4).لا تحتاج أكثر إلى
getRequestConfigأوloadMessages. معnext-intl، كان عليك كتابة ملفsrc/i18n.tsيحمل حزم رسائل JSON على كل طلب عبرgetRequestConfig. يجمّع Intlayer جميع القواامس في وقت البناء، لذا لا توجد خطوة تحميل وقت التشغيل. يمكنك حذف هذا الملف بالكامل (أو الاحتفاظ بأجزاء التوجيه فقط إذا كنت تستخدمcreateNavigation).
هذا كل ما هو مطلوب للترحيل السريع. تطبيقك يعمل الآن على Intlayer مع الحفاظ على كل استيراد واجهة برمجية من next-intl.
مفاتيح ترجمة مكتوبة - تلقائي. بمجرد أن يجمّع Intlayer القواامس، يتم كتابة
useTranslationsوgetTranslationsمقابل المحتوى الفعلي. يتم إكمال المفاتيح تلقائياً في محرر IDE ومسارات غير صحيحة تسبب أخطاء TypeScript في وقت البناء - لا يلزم إعداد إضافي.tsxنسخ الكودنسخ الكود إلى الحافظة
// مكون العميل - 'about' هو مفتاح قاموس مسجلconst t = useTranslations("about");t("counter.label"); // ✓ مكتملt("does.not.exist"); // ✗ خطأ TypeScript// مكون الخادمconst t = await getTranslations("about");t("counter.label"); // ✓ مكتوب
الترحيل الكامل
الخطوات أدناه اختيارية ويمكن القيام بها بشكل تدريجي. تفتح مجموعة ميزات Intlayer الكاملة: محرر بصري، CMS، ملفات محتوى مكتوبة، ترجمة مدعومة بـ AI، والمزيد.
إعادة تسمية الاستيراد الصريح (اختياري)
اختياريغلاف
createNextIntlPlugin()يتعامل بالفعل مع بديلnext-intl→@intlayer/next-intlعلى مستوى bundler. إذا كنت تفضل جعل التبعية صريحة في ملفات المصدر (واستخدام مكونwithIntlayerالبسيط بدلاً من ذلك)، يمكنك إعادة تسمية الاستيرادات يدويًا:اظهار جميع محتويات الجدولافتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
قبل بعد import { useTranslations } from 'next-intl'import { useTranslations } from '@intlayer/next-intl'import { useLocale } from 'next-intl'import { useLocale } from '@intlayer/next-intl'import { NextIntlClientProvider } from 'next-intl'import { NextIntlClientProvider } from '@intlayer/next-intl'import { getTranslations } from 'next-intl/server'import { getTranslations } from '@intlayer/next-intl/server'import { getLocale } from 'next-intl/server'import { getLocale } from '@intlayer/next-intl/server'import { setLocale } from 'next-intl/server'import { setLocale } from '@intlayer/next-intl/server'import { getMessages } from 'next-intl/server'import { getMessages } from '@intlayer/next-intl/server'احفظ دائماً استيرادات التوجيه من
next-intlالحقيقية - محول التوافق لا يستبدل طبقة التوجيه عبر URL:tsنسخ الكودنسخ الكود إلى الحافظة
// ✅ احفظ هذه دائماً من `next-intl` الحقيقيةimport { createNavigation } from "next-intl/routing";import { createMiddleware } from "next-intl/server";import { defineRouting } from "next-intl/routing";بدلاً من ذلك، يمكنك استخدام
defineRoutingمن@intlayer/next-intl/routingوالذي يدمج إعداد locale منintlayer.config.tsتلقائياً.تفعيل أتمتة الترجمة المدعومة بـ AI
اختياريبمجرد توصيل Intlayer، يمكنك استخدام CLI الخاص به لملء الترجمات المفقودة تلقائياً باستخدام LLM من اختيارك:
bashنسخ الكودنسخ الكود إلى الحافظة
# اختبر الترجمات المفقودة (أضف إلى CI)npx intlayer test# ملء الترجمات المفقودة بـ AInpx intlayer fillأضف
OPENAI_API_KEY(أو مفتاح موفر مفضل) إلى ملف.envالخاص بك، ثم قم بتوسيعintlayer.config.ts:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // الافتراضي // model: "gpt-4o-mini", // الافتراضي }, }; export default config;راجع وثائق Intlayer CLI لجميع الخيارات المتاحة.
ما يمكنك حذفه بعد الترحيل
بمجرد وضع @intlayer/next-intl، يمكن إزالة الكود النموذجي التالي من next-intl:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الملف / النمط | لماذا لا يكون مطلوباً بعد الآن |
|---|---|
src/i18n.ts → تصدير getRequestConfig | يجمّع Intlayer القواامس في وقت البناء؛ لا توجد رسالة تحميل لكل طلب. احتفظ بالملف فقط إذا كنت تصدّر أيضاً مساعدات التوجيه createNavigation. |
استدعاء loadMessages() / getMessages() في التخطيط | يقرأ NextIntlClientProvider من @intlayer/next-intl من الإخراج المجمع؛ لا يلزم messages prop. |
استيرادات locales/{locale}/*.json في التخطيط | حزم JSON مطلوبة فقط إذا كنت تستخدم بعد مكون syncJSON. بمجرد الترحيل إلى ملفات .content.ts يمكنك حذف مجلد JSON. |
عندما تكون جاهزاً للمضي قدماً، يكتشف Intlayer تلقائياً جميع ملفات .content.ts و .content.json في أي مكان في codebase (افتراضياً، في أي مكان داخل ./src). يمكنك وضع ملف about.content.ts بجوار about/page.tsx مباشرة وسيلتقطه Intlayer في وقت البناء دون تكوين إضافي - لا استيرادات، لا تسجيل، لا ملف فهرس مركزي مطلوب. هذا يجعل co-locating الترجمات مع الصفحات والمكونات خالياً من الاحتكاك تماماً.
تكوين TypeScript
يستخدم Intlayer تعديل module لتوفير intellisense TypeScript الكامل لمفاتيح الترجمة. تأكد من أن tsconfig.json يتضمن الأنواع التي يتم إنشاؤها تلقائياً:
نسخ الكود إلى الحافظة
{ // ... تكويناتك TypeScript الموجودة "include": [ // ... تكويناتك TypeScript الموجودة ".intlayer/**/*.ts", // قم بتضمين الأنواع التي تم إنشاؤها تلقائياً ],}تكوين Git
أضف مجلد Intlayer المُنتج إلى .gitignore:
نسخ الكود إلى الحافظة
# تجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer.intlayerاذهب إلى ما هو أبعد
- محرر بصري — إدارة الترجمات بشكل مرئي في المتصفح: محرر Intlayer البصري
- CMS — تحويل إلى خارجي وإدارة المحتوى من بعيد: Intlayer CMS
- VS Code Extension — احصل على إكمال تلقائي واكتشاف خطأ ترجمة فوري: ملحق Intlayer VS Code
- مرجع CLI — قائمة كاملة بأوامر CLI: Intlayer CLI
- Intlayer مع Next.js — دليل الإعداد الكامل لـ Next.js: intlayerwithnextjs_16.md