استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
Intlayer v9 الجديد - ما الجديد؟
مرحبًا بكم في Intlayer v9! يمثل هذا الإصدار الرئيسي علامة فارقة ضخمة في تبسيط مسار الترحيل إلى Intlayer من خلال حزم محولات التوافق (Compat Adapter Packages) لمكتبات i18n الرئيسية (react-i18next, next-intl, vue-i18n, إلخ) ويضيف دعمًا لهياكل المحتوى الغنية: المجموعات (Collections)، المتغيرات (Variants)، والسجلات الديناميكية (Dynamic Records).
جدول المحتويات
حزم محولات التوافق (Compat Adapter Packages)
أصبح الترحيل إلى Intlayer من مكتبات i18n الشهيرة أسهل من أي وقت مضى. لقد أنشأنا خمس حزم توافق تعرض نفس واجهات برمجة التطبيقات العامة (public APIs) تمامًا مثل مكتبات i18n القياسية ولكنها تفوض جميع أعمال الترجمة إلى Intlayer في وقت التشغيل (runtime).
عرض نفس واجهة برمجة التطبيقات العامة (Public API) مع كتابة صارمة (Strict Typing)
باستبدال عمليات الاستيراد (imports)، تحصل على جميع مزايا Intlayer (بما في ذلك أمان النوع في وقت التجميع (compile-time type safety) مقابل قواميسك الفعلية) بأقل تغييرات في الكود:
@intlayer/i18next@intlayer/react-i18next@intlayer/next-intl@intlayer/next-i18next@intlayer/vue-i18n
على سبيل المثال، قم ببساطة بتغيير:
نسخ الكود إلى الحافظة
إلى:
نسخ الكود إلى الحافظة
ستكون مفاتيحك الآن مكتوبة بشكل صارم (strictly typed) مقابل قواميس Intlayer الخاصة بك، مما يوفر إكمالًا تلقائيًا كاملاً للمسار النقطي (dot-path auto-completion) في بيئة التطوير المتكاملة (IDE) الخاصة بك!
إضافات اسم مستعار للمجمّع (Bundler Alias Plugins) (Vite, Next.js, Turbopack)
للسماح بالترحيل دون إعادة كتابة جميع عبارات الاستيراد (import statements) يدويًا، تتضمن كل حزمة محول توافق (compat adapter package) إضافة مجمّع مخصصة (custom bundler plugin) (Vite أو Next.js) ضمن المسار الفرعي /plugin.
تعيد هذه الإضافات تلقائيًا كتابة عمليات الاستيراد الموجودة (مثل react-i18next أو next-intl) إلى مكافئاتها @intlayer/* في وقت البناء (build time).
مثال Next.js (Webpack / Turbopack)
بدلاً من withIntlayer، قم بتغليف إعدادات Next.js الخاصة بك باستخدام إضافة التوافق (compat plugin):
نسخ الكود إلى الحافظة
مثال Vite (React, Vue, Solid, Svelte)
نسخ الكود إلى الحافظة
محلل وقت التشغيل المشترك (Mutualized Runtime Resolver)
توجه جميع محولات التوافق (compat adapters) الآن حل الترجمة من خلال محلل وقت تشغيل واحد ومحسن للغاية: @intlayer/core/messageFormat.
- رسالة الاستيفاء (Interpolate Message): تحل
{{var}}القياسية (مسافات بيضاء ومسارات نقطية)، وسيطات ICU المنسقة ({v, number, percent}إلخ)، وقوالب{var}المجردة. - محلل عقدة الرسالة (Message Node Resolver): يحل العقد المتداخلة:
insert()،plural()(قواعد الجمع CLDR)،enu()(التعداد)،gender()، علامات HTML، المصفوفات، وعقد الوظائف القابلة للاستدعاء. - محلل العلامات المرمزة (Tokenized Tag Parser): يدعم علامات XML/HTML المضمنة والعلامات المرقمة (مثل
<1>children</1>) لتشغيل عرض النص الغني (rich-text rendering) بشكل جاهز.
مواصفات الميزة: المجموعات (Collections)، المتغيرات (Variants) والسجلات الديناميكية (Dynamic Records)
يتوسع Intlayer v9 إلى ما هو أبعد من كائنات المفتاح-القيمة الثابتة، مما يسمح للقواميس بالإعلان عن هياكل تخطيط ديناميكية مكتوبة بالكامل من البداية إلى النهاية.
1. المجموعات (Collections)
حدد قائمة من العناصر المرتبة التي يديرها نظام إدارة المحتوى (CMS) (مثل الأسئلة الشائعة، المنتجات، أو قوائم المدونات):
نسخ الكود إلى الحافظة
الاستخدام:
نسخ الكود إلى الحافظة
2. المتغيرات (Variants)
قدم اختبارات A/B، رؤوس صفحات موسمية، علامات ميزات (feature flags)، أو صفحات هبوط مخصصة:
نسخ الكود إلى الحافظة
الاستخدام:
نسخ الكود إلى الحافظة
3. السجلات الديناميكية (Dynamic Records)
حدد القواميس التي يتم تحميل إدخالاتها ديناميكيًا في وقت التشغيل (runtime) عبر معرفات الاستعلام (query IDs):
نسخ الكود إلى الحافظة
الاستخدام:
نسخ الكود إلى الحافظة
التحميل الديناميكي وتحسينات حجم الحزمة (Bundle Size Optimizations)
للحفاظ على أحجام الحزم (bundles) صغيرة للغاية، يدعم Intlayer v9 التحميل الكسول الديناميكي (dynamic lazy loading).
في إعداداتك، اضبط importMode على 'dynamic' أو 'fetch':
نسخ الكود إلى الحافظة
في وقت البناء (build time)، يقوم @intlayer/swc و@intlayer/babel بمسح ملفاتك واستبدال استدعاءات useIntlayer / getIntlayer بـ wrappers قابلة للإزالة (tree-shakeable wrappers) (useDictionary / useDictionaryDynamic). يتم تحميل المحتوى المطلوب فقط للعنصر المحدد في المجموعة (collection item)، أو المتغير (variant)، أو اللغة (locale)، مما يمنع حزمة الإنتاج (production bundle) الخاصة بك من احتواء ترجمات غير مستخدمة.
ملاحظات الترحيل من الإصدار 8
إذا كنت تقوم بالترقية من الإصدار 8، لاحظ أن الإصدار 9 لا يتضمن تغييرات جذرية (breaking changes). ولكن إليك التغييرات الرئيسية:
- اللغات واللهجات (Locales & Dialects): إذا كنت تستخدم تبعيات i18n خارجية، أضف إضافات محول التوافق (compat adapter plugins) الخاصة بها في إعداداتك أو إعداد المجمّع (bundler setup) لإعادة كتابة عمليات الاستيراد (imports) تلقائيًا.
- المحددات المخصصة (Custom Selectors): عند استدعاء
useIntlayer، تم حجز المعامل الثاني الآن لكائن خيارات يحتوي على{ locale, item, variant, id }. إذا كنت قد مررت سابقًا سلسلة لغة (locale string) مباشرة، فلا يزال بإمكانك القيام بذلك، ولكن يوصى باستخدام كائن الخيارات للاختيارات المتقدمة.