الرئيسيةبيئة اختبارمعرض الأعمالتطبيقوثيقةمدونة
    • Englishالإنجليزية
      EN
    • русскийالروسية
      RU
    • 日本語اليابانية
      JA
    • françaisالفرنسية
      FR
    • 한국어الكورية
      KO
    • 中文الصينية
      ZH
    • españolالإسبانية
      ES
    • Deutschالألمانية
      DE
    • العربيةالعربية
      AR
    • italianoالإيطالية
      IT
    • British Englishالإنجليزية (المملكة المتحدة)
      EN-GB
    • portuguêsالبرتغالية
      PT
    • हिन्दीالهندية
      HI
    • Türkçeالتركية
      TR
    • polskiالبولندية
      PL
    • Indonesiaالإندونيسية
      ID
    • Tiếng Việtالفيتنامية
      VI
    • українськаالأوكرانية
      UK
    /
    تصفية المستندات حسب الإطار
    Alt+←
    لماذا Intlayer؟
    ابدأ
    مفهوم
    • كيف يعمل Intlayer
    • التكوين
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • المحرر المرئي
    • CMS
    • تكامل CI/CD
    • ترجمةجمعتعدادشرطجنسإدراجملفتداخلMarkdownHTMLجلب الوظيفة
    • ملف لكل لغة
    • محرر
    • الملء التلقائي
    • اختبار
    • تحسين الحزمة
    بيئة
    • Next.js 14 وموجه التطبيق
      Next.js 15
      Next.js بدون locale URL
      Next.js وموجه الصفحة
      المترجم
    • Tanstack Start Solid
    • Astro و React
      Astro و Svelte
      Astro و Vue
      Astro و Solid
      Astro و Preact
      Astro و Lit
      Astro و Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt و Vue
    • Vite و Solid
    • SvelteKit
    • Vite و Preact
    • Vite و Vanilla JS
    • Vite و Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native و Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx و React
    Plugins
    • JSON
    • gettext (.po)
    امتداد VS Code
    وكيل
    • خادم MCP
    • مهارات الوكيل
    إصدارات
    • v8
    • v7
    • v6
    مؤشر أداء
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    مدونة
    طرح سؤال
    1. Documentation
    2. إصدارات
    3. v7
    إنشاء:2025-09-22آخر تحديث:2025-09-23
    استخدم هذه الصفحة والموفر AI الذي تريده
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده

    تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.

    اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزية
    تعديل هذه الوثيقة

    إذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.

    رابط GitHub للتوثيق
    نسخ

    نسخ الـ Markdown من المستند إلى الحافظة

    الإصدار الجديد Intlayer v7 - ما الجديد؟

    مرحبًا بك في Intlayer v7! يقدم هذا الإصدار الكبير تحسينات ملحوظة في الأداء، أمان الأنواع، وتجربة المطور. فيما يلي أبرز النقاط، مع ملاحظات الترحيل وأمثلة عملية.

    أبرز النقاط

    • استراتيجية التخزين المؤقت لبناء أسرع
    • تحسين توليد أنواع TypeScript بأنواع مخصصة لكل لغة
    • تحسين الحزمة: استخدام السلاسل النصية للغات بدلاً من التعداد (enum)
    • أوضاع توجيه جديدة: prefix-no-default، prefix-all، no-prefix، search-params
    • تخزين اللغات متوافق مع GDPR باستخدام localStorage كإعداد افتراضي
    • تكوين تخزين مرن: ملفات تعريف الارتباط (cookies)، localStorage، sessionStorage، أو متعددة
    • حجم حزمة محرر المحتوى المرئي أصغر بنسبة 30%
    • خيارات محسنة لتكوين الوسيط (middleware)
    • تحديث سلوك أمر التعبئة (fill) لإدارة محتوى أفضل
    • استقرار محسّن مع تحديثات كاملة لملفات إعلان المحتوى
    • إدارة ذكية لإعادة المحاولة لضمان دقة الترجمة
    • المعالجة المتوازية لتسريع عملية الترجمة
    • تقسيم ذكي للتعامل مع الملفات الكبيرة ضمن حدود سياق الذكاء الاصطناعي

    الأداء: التخزين المؤقت لبناء أسرع

    بدلاً من إعادة بناء إعلانات المحتوى باستخدام esbuild في كل عملية بناء، تقوم النسخة 7 بتنفيذ استراتيجية تخزين مؤقت تُسرّع عملية البناء.

    bash
    نسخ الكود

    نسخ الكود إلى الحافظة

    npx intlayer build

    نظام التخزين المؤقت الجديد:

    • يخزن إعلانات المحتوى المجمعة لتجنب المعالجة المتكررة
    • يكتشف التغييرات ويعيد بناء الملفات المعدلة فقط
    • يقلل بشكل كبير من أوقات البناء للمشاريع الكبيرة

    تايب سكريبت: توليد أنواع مخصصة لكل لغة

    يتم الآن توليد أنواع TypeScript لكل لغة على حدة، مما يوفر كتابة أقوى ويقضي على أنواع الاتحاد عبر جميع اللغات.

    سلوك النسخة 6:

    tsx
    نسخ الكود

    نسخ الكود إلى الحافظة

    const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }

    سلوك النسخة 7:

    tsx
    نسخ الكود

    نسخ الكود إلى الحافظة

    const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" }

    الفوائد:

    • إكمال تلقائي أكثر دقة في بيئة التطوير الخاصة بك
    • أمان نوع أفضل بدون تلوث أنواع عبر اللغات المختلفة
    • أداء محسّن من خلال تقليل تعقيد الأنواع

    تحسين الحزمة: اللغات كسلاسل نصية

    لم يعد نوع Locales تعدادًا (enum)، مما يعني أنه أصبح قابلًا لإزالة الشجر بالكامل (tree-shakeable) ولن يثقل حزمة التطبيق الخاصة بك بآلاف سجلات اللغات غير المستخدمة.

    النسخة 6:

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales } from "intlayer";// تعداد يشمل جميع اللغات -> غير قابل لإزالة الشجرconst locale: Locales = Locales.ENGLISH;

    النسخة 7:

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, Locale } from "intlayer";// نوع سلسلة نصية -> قابل لإزالة الشجر بالكاملconst locale: Locale = Locales.ENGLISH;
    نظرًا لأن Locales لم يعد تعدادًا (enum)، سيتعين عليك تغيير النوع من Locales إلى Locale للحصول على اللغة كنمط.

    راجع تفاصيل التنفيذ لمزيد من المعلومات.


    أوضاع التوجيه الجديدة لمزيد من المرونة

    تقدم النسخة 7 تكوينًا موحدًا routing.mode يحل محل الخيارات السابقة prefixDefault و noPrefix، مما يوفر تحكمًا أكثر دقة في هيكل عنوان URL.

    أوضاع التوجيه المتاحة

    • prefix-no-default (الافتراضي): اللغة الافتراضية بدون بادئة، واللغات الأخرى لها بادئة
      • /dashboard (en) أو /fr/dashboard (fr)
    • prefix-all: جميع اللغات لها بادئة
      • /en/dashboard (en) أو /fr/dashboard (fr)
    • no-prefix: لا توجد بادئات للغة في عناوين URL (يتم التعامل مع اللغة عبر التخزين/الرؤوس)
      • /dashboard لجميع اللغات
    • search-params: تمرير اللغة كمعامل استعلام
      • /dashboard?locale=en أو /dashboard?locale=fr

    التكوين الأساسي

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    // intlayer.config.tsexport default {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default", // الافتراضي  },};

    الامتثال للائحة حماية البيانات العامة (GDPR): تخزين localStorage / الكوكيز

    تُعطي النسخة 7 أولوية لخصوصية المستخدم باستخدام localStorage كآلية التخزين الافتراضية بدلاً من الكوكيز. يساعد هذا التغيير في الامتثال للائحة GDPR من خلال تجنب متطلبات موافقة الكوكيز لتفضيلات اللغة.

    خيارات تكوين التخزين

    يتوفر الحقل الجديد routing.storage بالإضافة إلى الخيارات السابقة middleware.cookieName و middleware.serverSetCookie، مما يوفر تكوينات تخزين مرنة:

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    // تعطيل التخزينstorage: false// أنواع التخزين البسيطةstorage: 'cookie'storage: 'localStorage'storage: 'sessionStorage'// الكوكيز مع سمات مخصصةstorage: {  type: 'cookie',  name: 'custom-locale',  domain: '.example.com',  secure: true,  sameSite: 'strict'}// localStorage مع مفتاح مخصصstorage: {  type: 'localStorage',  name: 'custom-locale'}// أنواع تخزين متعددة للنسخ الاحتياطيstorage: ['cookie', 'localStorage']

    مثال على تكوين متوافق مع GDPR

    للتطبيقات الإنتاجية التي تحتاج إلى موازنة بين الوظائف والامتثال لـ GDPR:

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    // intlayer.config.tsexport default {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default",    storage: [      {        type: "localStorage", // التخزين الأساسي (لا يحتاج موافقة)        name: "user-locale",      },      {        type: "cookie", // تخزين الكوكيز الاختياري (يتطلب موافقة)        name: "user-locale",        secure: true,        sameSite: "strict",        httpOnly: false,      },    ],  },};

    تمكين / تعطيل تخزين الكوكيز

    مثال باستخدام React / Next.js:

    يمكن تعريفه على مستوى عام:

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    <IntlayerProvider isCookieEnabled={false}>  <App /></IntlayerProvider>

    يمكن تجاوزه محليًا لكل هوك:

    ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    const { setLocale } = useLocale({ isCookieEnabled: false });setLocale("en");

    ملاحظة: الكوكيز مفعلة بشكل افتراضي. ملاحظة: تحقق من متطلبات الكوكيز وفقًا للائحة GDPR لحالتك الخاصة.


    المحرر المرئي: حزمة أصغر بنسبة 30%

    تم تحسين حزمة المحرر المرئي لتكون أصغر بنسبة 30% مقارنة بالإصدار السابق، وذلك بفضل:

    • تحسينات أداء محرر الكود
    • إزالة التبعيات غير الضرورية على حزم Intlayer الأساسية
    • تحسين تقنيات tree-shaking وتجميع الوحدات

    ينتج عن ذلك أوقات تحميل أسرع وأداء أفضل أثناء تشغيل التطبيق الخاص بك.


    أمر fill: سلوك محدث لإدارة محتوى أفضل

    يقدم الإصدار 7 سلوكًا محسّنًا لأمر fill، مما يوفر إدارة محتوى أكثر توقعًا ومرونة:

    سلوك fill الجديد

    • fill: true - يعيد كتابة الملف الحالي بمحتوى مملوء لجميع اللغات
    • fill: "path/to/file" - يملأ الملف المحدد دون تعديل الملف الحالي
    • fill: false - يعطل الملء التلقائي تمامًا

    دعم معزز لهياكل المحتوى المعقدة

    يدعم أمر fill الآن هياكل إعلان المحتوى المعقدة، بما في ذلك:

    • الكائنات المركبة: إعلانات المحتوى التي تشير إلى كائنات أخرى
    • المحتوى المفكك: المحتوى الذي يستخدم أنماط التفكيك
    • المراجع المتداخلة: الكائنات التي تستدعي بعضها البعض في تسلسلات معقدة
    • هياكل المحتوى الديناميكية: المحتوى ذو الخصائص الشرطية أو المحسوبة

    الفوائد

    • نية أوضح: أصبح السلوك أكثر وضوحًا بشأن ما يتم تعديله
    • فصل أفضل: يمكن الاحتفاظ بملفات المحتوى منفصلة عن الترجمات المعبأة
    • تحسين سير العمل: يتمتع المطورون بمزيد من التحكم في مكان تخزين الترجمات
    • دعم الهياكل المعقدة: التعامل مع هياكل محتوى متطورة تحتوي على عدة كائنات مترابطة

    مثال على الاستخدام

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    // إعادة كتابة الملف الحالي مع جميع اللغاتconst content = {  key: "example",  fill: true, // يعيد كتابة هذا الملف  content: {    title: "Hello World",  },};// تعبئة ملف منفصل دون تعديل الملف الحاليconst content = {  key: "example",  fill: "./translations.json", // ينشئ/يحدث translations.json  content: {    title: "Hello World",  },};// تعطيل التعبئة التلقائيةconst content = {  key: "example",  fill: false, // لا تعبئة تلقائية  content: {    title: "Hello World",  },};// هيكل محتوى معقد مع كائنات مركبةconst sharedContent = {  buttons: {    save: "حفظ",    cancel: "إلغاء",  },};const content = {  key: "complex-example",  fill: true,  content: {    // مراجع لكائنات أخرى    sharedContent,    // محتوى مفكك    ...sharedContent,    // مراجع متداخلة    sections: [      {        ...sharedContent.buttons,        header: "القسم 1",      },    ],  },};

    تحسين الاستقرار وإدارة الترجمة

    يقدم الإصدار 7 عدة تحسينات لجعل ترجمة المحتوى أكثر موثوقية وكفاءة:

    تحديثات كاملة لملفات إعلان المحتوى

    يقوم النظام الآن بتحديث ملفات .content.{ts,js,cjs,mjs} بدلاً من التحديثات الجزئية، مما يضمن:

    • سلامة البيانات: إعادة كتابة الملف بالكامل تمنع التحديثات الجزئية التي قد تؤدي إلى تلف المحتوى
    • الاتساق: يتم تحديث جميع اللغات بشكل ذري، مما يحافظ على التزامن
    • الموثوقية: يقلل من خطر وجود ملفات محتوى غير مكتملة أو تالفة

    إدارة إعادة المحاولة الذكية

    آليات إعادة المحاولة الجديدة تمنع دفع المحتوى بصيغ غير صحيحة، وتتجنب كسر عملية التعبئة بالكامل إذا فشل طلب واحد.

    المعالجة المتوازية لتسريع الأداء

    تعمل عمليات الترجمة الآن في قائمة انتظار لتشغيلها بشكل متوازي. هذا يسرع العملية بشكل كبير.

    تقسيم ذكي للملفات الكبيرة

    استراتيجيات تقسيم متقدمة تتعامل مع ملفات المحتوى الكبيرة دون تجاوز حدود سياق الذكاء الاصطناعي:

    مثال على سير العمل

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    // يتم تقسيم ملف المحتوى الكبير تلقائيًاconst content = {  key: "large-documentation",  fill: true,  content: {    // يتم تقسيم المحتوى الكبير تلقائيًا للمعالجة بواسطة الذكاء الاصطناعي    introduction: "..." // أكثر من 5000 حرف    sections: [      // عدة أقسام كبيرة    ]  }};

    يقوم النظام تلقائيًا بـ:

    1. تحليل حجم المحتوى وبنيته
    2. تقسيم المحتوى بشكل مناسب
    3. معالجة الأجزاء بشكل متوازي
    4. التحقق من الصحة وإعادة المحاولة إذا لزم الأمر
    5. إعادة بناء الملف الكامل

    ملاحظات الترحيل من الإصدار v6

    الإعدادات التي تمت إزالتها

    • middleware.cookieName: تم استبداله بـ routing.storage
    • middleware.serverSetCookie: تم استبداله بـ routing.storage
    • middleware.prefixDefault: تم استبداله بـ routing.mode
    • middleware.noPrefix: تم استبداله بـ routing.mode

    خريطة الترحيل

    خريطة التهيئة

    اظهار جميع محتويات الجدول

    افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح

    تهيئة v6 تهيئة v7
    autoFill: xxx fill: xxx
    prefixDefault: false mode: 'prefix-no-default'
    prefixDefault: true mode: 'prefix-all'
    noPrefix: true mode: 'no-prefix'
    cookieName: 'my-locale' storage: { type: 'cookie', name: 'my-locale' }
    serverSetCookie: 'never' storage: false أو إزالة الكوكي من مصفوفة التخزين

    مثال على الترحيل

    قبل (v6):

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    export default {  middleware: {    headerName: "x-intlayer-locale",    cookieName: "intlayer-locale",    prefixDefault: false,    basePath: "",    serverSetCookie: "always",    noPrefix: false,  },};

    بعد (v7):

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    export default {  routing: {    mode: "prefix-no-default",    storage: "localStorage", // أو 'cookie' إذا كنت بحاجة إلى تخزين الكوكيز    headerName: "x-intlayer-locale",    basePath: "",  },};

    مطابقة محتوى القاموس

    اظهار جميع محتويات الجدول

    افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح

    محتوى القاموس في v6 محتوى القاموس في v7
    autoFill: xxx fill: xxx

    مثال على الترحيل

    قبل (v6):

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    const content = {  key: "example",  autoFill: true, // يعيد كتابة هذا الملف  content: {    title: "مرحبا بالعالم",  },};

    بعد (v7):

    typescript
    نسخ الكود

    نسخ الكود إلى الحافظة

    const content = {  key: "example",  fill: true, // يعيد كتابة هذا الملف  content: {    title: "مرحبا بالعالم",  },};

    ملاحظات الترحيل من الإصدار v5 إلى v6

    راجع ملاحظات الترحيل من v5 إلى v6 لمزيد من المعلومات.


    روابط مفيدة

    • مرجع التكوين
    • توثيق الوسيط
    • أنواع TypeScript
    • إرشادات ملفات تعريف الارتباط وفقًا للائحة GDPR
    v8
    v6
    Alt+→

    في هذه الصفحة

      المناقشات مجهولة الهوية ويتم مراجعتها بانتظام لمعالجة المشكلات الشائعة. لا تتردد في مشاركة أفكار الميزات أو التعليقات على الوثائق أو أي شيء يتعلق بـ Intlayer, نستخدم هذه المدخلات لتشكيل خارطة الطريق وتحسين المنتج.

      npx intlayer build
      const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }
      const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" }
      import { Locales } from "intlayer";// تعداد يشمل جميع اللغات -> غير قابل لإزالة الشجرconst locale: Locales = Locales.ENGLISH;
      import { Locales, Locale } from "intlayer";// نوع سلسلة نصية -> قابل لإزالة الشجر بالكاملconst locale: Locale = Locales.ENGLISH;
      // intlayer.config.tsexport default {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default", // الافتراضي  },};
      // تعطيل التخزينstorage: false// أنواع التخزين البسيطةstorage: 'cookie'storage: 'localStorage'storage: 'sessionStorage'// الكوكيز مع سمات مخصصةstorage: {  type: 'cookie',  name: 'custom-locale',  domain: '.example.com',  secure: true,  sameSite: 'strict'}// localStorage مع مفتاح مخصصstorage: {  type: 'localStorage',  name: 'custom-locale'}// أنواع تخزين متعددة للنسخ الاحتياطيstorage: ['cookie', 'localStorage']
      // intlayer.config.tsexport default {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default",    storage: [      {        type: "localStorage", // التخزين الأساسي (لا يحتاج موافقة)        name: "user-locale",      },      {        type: "cookie", // تخزين الكوكيز الاختياري (يتطلب موافقة)        name: "user-locale",        secure: true,        sameSite: "strict",        httpOnly: false,      },    ],  },};
      <IntlayerProvider isCookieEnabled={false}>  <App /></IntlayerProvider>
      const { setLocale } = useLocale({ isCookieEnabled: false });setLocale("en");
      // إعادة كتابة الملف الحالي مع جميع اللغاتconst content = {  key: "example",  fill: true, // يعيد كتابة هذا الملف  content: {    title: "Hello World",  },};// تعبئة ملف منفصل دون تعديل الملف الحاليconst content = {  key: "example",  fill: "./translations.json", // ينشئ/يحدث translations.json  content: {    title: "Hello World",  },};// تعطيل التعبئة التلقائيةconst content = {  key: "example",  fill: false, // لا تعبئة تلقائية  content: {    title: "Hello World",  },};// هيكل محتوى معقد مع كائنات مركبةconst sharedContent = {  buttons: {    save: "حفظ",    cancel: "إلغاء",  },};const content = {  key: "complex-example",  fill: true,  content: {    // مراجع لكائنات أخرى    sharedContent,    // محتوى مفكك    ...sharedContent,    // مراجع متداخلة    sections: [      {        ...sharedContent.buttons,        header: "القسم 1",      },    ],  },};
      // يتم تقسيم ملف المحتوى الكبير تلقائيًاconst content = {  key: "large-documentation",  fill: true,  content: {    // يتم تقسيم المحتوى الكبير تلقائيًا للمعالجة بواسطة الذكاء الاصطناعي    introduction: "..." // أكثر من 5000 حرف    sections: [      // عدة أقسام كبيرة    ]  }};
      export default {  middleware: {    headerName: "x-intlayer-locale",    cookieName: "intlayer-locale",    prefixDefault: false,    basePath: "",    serverSetCookie: "always",    noPrefix: false,  },};
      export default {  routing: {    mode: "prefix-no-default",    storage: "localStorage", // أو 'cookie' إذا كنت بحاجة إلى تخزين الكوكيز    headerName: "x-intlayer-locale",    basePath: "",  },};
      const content = {  key: "example",  autoFill: true, // يعيد كتابة هذا الملف  content: {    title: "مرحبا بالعالم",  },};
      const content = {  key: "example",  fill: true, // يعيد كتابة هذا الملف  content: {    title: "مرحبا بالعالم",  },};