المؤلف:
    إنشاء:2024-08-13آخر تحديث:2026-08-22

    توثيق إعدادات Intlayer

    نظرة عامة

    تسمح لك ملفات إعدادات Intlayer بتخصيص جوانب مختلفة من الإضافة، مثل تدويل التطبيق (i18n)، والبرمجيات الوسيطة (middleware)، وإدارة المحتوى. يوفر هذا المستند وصفاً مفصلاً لكل خاصية في الإعدادات.

    جدول المحتويات

    دعم ملفات الإعدادات

    يقبل Intlayer صيغ ملفات الإعدادات التالية: JSON، JS، MJS، و TS:

    • intlayer.config.ts
    • intlayer.config.js
    • intlayer.config.json
    • intlayer.config.json5
    • intlayer.config.jsonc
    • intlayer.config.cjs
    • intlayer.config.mjs
    • .intlayerrc

    مثال لملف الإعدادات

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    import { nextjsRewrite } from "intlayer/routing";
    import { syncJSON } from "@intlayer/sync-json-plugin";
    import { z } from "zod";
    
    /**
     * مثال لملف إعدادات Intlayer مع جميع الخيارات المتاحة.
     */
    const config: IntlayerConfig = {
      /**
       * إعدادات التدويل (Internationalization).
       */
      internationalization: {
        /**
         * قائمة اللغات المدعومة في التطبيق.
         * الافتراضي: [Locales.ENGLISH]
         */
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    
        /**
         * قائمة اللغات المطلوبة التي يجب تعريفها في كل قاموس.
         * إذا كانت فارغة، فستكون جميع اللغات مطلوبة في وضع `strict`.
         * الافتراضي: []
         */
        requiredLocales: [Locales.ENGLISH],
    
        /**
         * مستوى الصرامة للمحتوى المترجم.
         * - "strict": يلقي خطأ إذا كانت اللغة المعلنة مفقودة أو غير معلنة.
         * - "inclusive": يلقي تحذيراً إذا كانت اللغة المعلنة مفقودة.
         * - "loose": يقبل أي لغة موجودة.
         * الافتراضي: "inclusive"
         */
        strictMode: "inclusive",
    
        /**
         * اللغة الافتراضية المستخدمة كاحتياطي في حالة عدم العثور على اللغة المطلوبة.
         * الافتراضي: Locales.ENGLISH
         */
        defaultLocale: Locales.ENGLISH,
      },
    
      /**
       * الإعدادات التي تتحكم في عمليات القاموس والسلوك عند فقدان المحتوى.
       */
      dictionary: {
        /**
         * يتحكم في طريقة استيراد القواميس.
         * - "static": استيراد ثابت أثناء البناء.
         * - "dynamic": استيراد ديناميكي باستخدام Suspense.
         * - "fetch": جلب ديناميكي عبر Live Sync API.
         * الافتراضي: "static"
         */
        importMode: "static",
    
        /**
         * إستراتيجية الملء التلقائي للترجمات المفقودة باستخدام الذكاء الاصطناعي.
         * يمكن أن تكون قيمة منطقية أو نمط مسار لحفظ المحتوى المملوء.
         * الافتراضي: true
         */
        fill: true,
    
        /**
         * الموقع الفعلي لملفات القاموس.
         * - "local": مخزنة في نظام الملفات المحلي.
         * - "remote": مخزنة في Intlayer CMS.
         * - "hybrid": مخزنة محلياً وفي Intlayer CMS.
         * - "plugin" (أو أي سلسلة مخصصة): يتم توفيرها بواسطة إضافة أو مصدر مخصص.
         * الافتراضي: "local"
         */
        location: "local",
    
        /**
         * ما إذا كان سيتم تحويل المحتوى تلقائياً (مثلMarkdown إلى HTML).
         * الافتراضي: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * إعدادات التوجيه والبرمجيات الوسيطة.
       */
      routing: {
        /**
         * إستراتيجية التوجيه حسب اللغة.
         * - "prefix-no-default": بادئة لجميع اللغات باستثناء الافتراضية (مثلاً: /dashboard، /fr/dashboard).
         * - "prefix-all": بادئة لجميع اللغات (مثلاً: /en/dashboard، /fr/dashboard).
         * - "no-prefix": لا توجد لغة في رابط URL.
         * - "search-params": استخدام ?locale=...
         * الافتراضي: "prefix-no-default"
         */
        mode: "prefix-no-default",
    
        /**
         * يفعّل وكيل توجيه اللغات في Intlayer (البرمجية الوسيطة).
         * يتولى اكتشاف اللغة وإعادة التوجيه وإعادة الكتابة في dev وpreview وSSR.
         * - غير محدد (auto): تُبقي خوادم dev وpreview التوجيه معتمدًا على الرابط،
         *   متجاهلةً اللغة المخزّنة في ملفات تعريف الارتباط والترويسات. تظل البادئات
         *   تُحلّ، وتظل اللغة تُحفظ، ويظل اكتشاف Accept-Language ساريًا.
         *   في الإنتاج يتصرف مثل `true`.
         * - true: السلوك الكامل في جميع البيئات.
         * - false: بدون توجيه للغات.
         * الافتراضي: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * أين يتم تخزين اللغة التي يختارها المستخدم.
         * الخيارات: 'cookie' أو 'localStorage' أو 'sessionStorage' أو 'header' أو مصفوفة منها.
         * الافتراضي: ['cookie', 'header']
         */
        storage: ["cookie", "header"],
    
        /**
         * المسار الأساسي لروابط التطبيق.
         * الافتراضي: ""
         */
        basePath: "",
    
        /**
         * قواعد إعادة كتابة رابط URL مخصصة للمسارات في لغات معينة.
         */
        rewrite: nextjsRewrite({
          "/[locale]/about": {
            en: "/[locale]/about",
            fr: "/[locale]/a-propos",
          },
        }),
    
        /**
         * يربط اللغات بأسماء نطاقات الاستضافة للتوجيه القائم على النطاق.
         * ستكون روابط URL لهذه اللغات مطلقة (مثلاً: https://intlayer.cn/).
         * النطاق يشير إلى اللغة، لذا لا يتم إضافة بادئة لغة إلى المسار.
         * الافتراضي: undefined
         */
        domains: {
          en: "intlayer.org",
          zh: "intlayer.cn",
        },
      },
    
      /**
       * إعدادات البحث ومعالجة ملفات المحتوى.
       */
      content: {
        /**
         * امتدادات الملفات لفحص القواميس.
         * الافتراضي: ['.content.ts', '.content.js', '.content.json', إلخ]
         */
        fileExtensions: [".content.ts", ".content.js", ".content.json"],
    
        /**
         * المجلدات التي توجد بها ملفات .content.
         * الافتراضي: ["."]
         */
        contentDir: ["src"],
    
        /**
         * مجلد كود المصدر.
         * يستخدم لتحسينات البناء وتحويل الكود.
         * الافتراضي: ["."]
         */
        codeDir: ["src"],
    
        /**
         * الأنماط المستبعدة من الفحص.
         * الافتراضي: ['node_modules', '.intlayer', إلخ]
         */
        excludedPath: ["node_modules"],
    
        /**
         * ما إذا كان سيتم مراقبة التغييرات وإعادة توليد القواميس أثناء التطوير.
         * الافتراضي: true في وضع التطوير
         */
        watch: true,
    
        /**
         * أمر لتنسيق ملفات .content المنشأة/المحدثة حديثاً.
         */
        formatCommand: 'npx prettier --write "{{file}}"',
      },
    
      /**
       * إعدادات المحرر المرئي.
       */
      editor: {
        /**
         * ما إذا كان المحرر المرئي مفعلاً.
         * الافتراضي: false
         */
        enabled: true,
    
        /**
         * رابط تطبيقك للتحقق من المصدر (origin).
         * الافتراضي: ""
         */
        applicationURL: "http://localhost:3000",
    
        /**
         * المنفذ لخادم المحرر المحلي.
         * الافتراضي: 8000
         */
        port: 8000,
    
        /**
         * الرابط العام للمحرر.
         * الافتراضي: "http://localhost:8000"
         */
        editorURL: "http://localhost:8000",
    
        /**
         * رابط Intlayer CMS.
         * الافتراضي: "https://app.intlayer.org"
         */
        cmsURL: "https://app.intlayer.org",
    
        /**
         * رابط خادم واجهة برمجة التطبيقات (API) الخلفي.
         * الافتراضي: "https://back.intlayer.org"
         */
        backendURL: "https://back.intlayer.org",
    
        /**
         * ما إذا كان سيتم تفعيل مزامنة المحتوى في الوقت الفعلي.
         * الافتراضي: false
         */
        liveSync: true,
      },
    
      /**
       * إعدادات التحليلات (analytics).
       */
      analytics: {
        /**
         * ما إذا كان جمع بيانات التحليلات مفعّلاً (مشاهدات الصفحات، حالات ظهور المحتوى، أحداث A/B).
         * يتطلب تثبيت `@intlayer/analytics` وضبط `editor.clientId` من أجل الإسناد (attribution).
         * الافتراضي: true
         */
        enabled: true,
    
        /**
         * المللي ثانية بين عمليات الإرسال المجمّعة التلقائية إلى الخادم الخلفي.
         * الافتراضي: 20000
         */
        flushInterval: 20000,
    
        /**
         * نسبة الجلسات المراد تسجيلها، من 0 (لا شيء) إلى 1 (الكل).
         * الافتراضي: 1
         */
        sampleRate: 1,
      },
    
      /**
       * إعدادات الترجمة والتوليد باستخدام الذكاء الاصطناعي.
       */
      ai: {
        /**
         * مزود الذكاء الاصطناعي المستخدم.
         * الخيارات: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
         * الافتراضي: 'openai'
         */
        provider: "openai",
    
        /**
         * النموذج المستخدم من المزود المختار.
         */
        model: "gpt-4o",
    
        /**
         * مفتاح واجهة برمجة التطبيقات (API key) للمزود.
         */
        apiKey: process.env.OPENAI_API_KEY,
    
        /**
         * السياق العام لتوجيه الذكاء الاصطناعي عند توليد الترجمات.
         */
        applicationContext: "هذا تطبيق لحجز السفر.",
    
        /**
         * الرابط الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي.
         */
        baseURL: "http://localhost:3000",
    
        /**
         * تسلسل البيانات
         *
         * الخيارات:
         * - "json": افتراضي، موثوق؛ يستهلك المزيد من الوحدات (tokens).
         * - "toon": حات سريعة، استهلاك أقل للوحدات، أقل استقراراً من JSON.
         *
         * الافتراضي: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * إعدادات البناء والتحسين.
       */
      build: {
        /**
         * وضع تنفيذ البناء.
         * - "auto": بناء تلقائي أثناء بناء التطبيق.
         * - "manual": يتطلب أمر بناء صريح.
         * الافتراضي: "auto"
         */
        mode: "auto",
    
        /**
         * ما إذا كان سيتم تحسين الحزمة الناتجة عن طريق إزالة القواميس غير المستخدمة.
         * الافتراضي: true في الإنتاج
         */
        optimize: true,
    
        /**
         * ما إذا كان سيتم ضغط القواميس لتقليل حجم الحزمة.
         * الافتراضي: true
         */
        minify: true,
    
        /**
         * ما إذا كان سيتم حذف المفاتيح غير المستخدمة في القواميس.
         * الافتراضي: true
         */
        prune: true,
    
        /**
         * تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها، بحيث تجلب
         * الصفحة المحمّلة بتكاسل محتواها في طلب واحد.
         * الافتراضي: true
         *
         * ملاحظة:
         * - ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'`.
         */
        chunkGrouping: true,
    
        /**
         * تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء. تُعرض
         * القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء
         * التنقل.
         * الافتراضي: true
         *
         * ملاحظة:
         * - يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.
         */
        dictionariesPreload: true,
    
        /**
         * صيغة الإخراج لملفات القاموس المولدة.
         * الافتراضي: ['cjs', 'esm']
         */
        outputFormat: ["cjs", "esm"],
    
        /**
         * ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript.
         * الافتراضي: false
         */
        checkTypes: false,
      },
    
      /**
       * إعدادات السجل (Logger).
       */
      log: {
        /**
         * مستوى السجل.
         * - "default": تسجيل قياسي.
         * - "verbose": تسجيل تصحيح مفصل.
         * - "disabled": لا يوجد تسجيل.
         * الافتراضي: "default"
         */
        mode: "default",
    
        /**
         * بادئة لجميع الرسائل في السجل.
         * الافتراضي: "[intlayer]"
         */
        prefix: "[intlayer]",
      },
    
      /**
       * إعدادات النظام (حالات الاستخدام المتقدمة)
       */
      system: {
        /**
         * المجلد لتخزين القواميس المترجمة.
         */
        dictionariesDir: ".intlayer/dictionary",
    
        /**
         * المجلد لتوسيع الوحدات (module augmentation).
         */
        moduleAugmentationDir: ".intlayer/types",
    
        /**
         * المجلد لتخزين القواميس غير المدمجة.
         */
        unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
    
        /**
         * المجلد لتخزين أنواع القواميس.
         */
        typesDir: ".intlayer/types",
    
        /**
         * المجلد حيث يتم الاحتفاظ بملفات التطبيق الرئيسية.
         */
        mainDir: ".intlayer/main",
    
        /**
         * المجلد حيث يتم الاحتفاظ بملفات الإعدادات المحولة برمجياً.
         */
        configDir: ".intlayer/config",
    
        /**
         * المجلد لملفات التخزين المؤقت (cache).
         */
        cacheDir: ".intlayer/cache",
      },
    
      /**
       * إعدادات المترجم (حالات الاستخدام المتقدمة)
       */
      compiler: {
        /**
         * ما إذا كان سيتم تفعيل المترجم.
         *
         * - false: تعطيل المترجم.
         * - true: تفعيل المترجم.
         * - "build-only": تخطي المترجم أثناء التطوير لبدء أسرع.
         *
         * الافتراضي: false
         */
        enabled: true,
    
        /**
         * يحدد المسار لملفات الإخراج. يستبدل `outputDir`.
         *
         * - يتم حل المسارات التي تبدأ بـ `./` بالنسبة لمجلد المكون.
         * - يتم حل المسارات التي تبدأ بـ `/` بالنسبة لمجلد المشروع الأساسي (`baseDir`).
         *
         * - وجود متغير `{{locale}}` في المسار يفعل توليد قواميس منفصلة لكل لغة.
         *
         * مثال:
         * ```ts
         * {
         *   // إنشاء ملفات .content.ts متعددة اللغات بجانب المكون
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // مكافئ عبر سلسلة قالب
         * }
         * ```
         *
         * ```ts
         * {
         *   // إنشاء ملفات JSON مركزية حسب اللغة في مجلد المشروع الأساسي
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // مكافئ عبر سلسلة قالب
         * }
         * ```
         *
         * قائمة المتغيرات:
         *   - `fileName`: اسم الملف.
         *   - `key`: مفتاح المحتوى.
         *   - `locale`: لغة المحتوى.
         *   - `extension`: امتداد الملف.
         *   - `componentFileName`: اسم ملف المكون.
         *   - `componentExtension`: امتداد ملف المكون.
         *   - `format`: صيغة القاموس.
         *   - `componentFormat`: صيغة قاموس المكون.
         *   - `componentDirPath`: المسار إلى مجلد المكون.
         */
        output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
    
        /**
         * ما إذا كان سيتم حفظ المكونات بعد تحويلها.
         * بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة لتحويل التطبيق ثم إزالته.
         */
        saveComponents: false,
    
        /**
         * وضع المحتوى فقط في الملف المولد. مفيد لمخرجات بصيغة i18next أو ICU MessageFormat JSON حسب اللغة.
         */
        noMetadata: false,
    
        /**
         * بادئة لمفتاح القاموس
         */
        dictionaryKeyPrefix: "", // إضافة بادئة اختيارية لمفاتيح القواميس المستخرجة
      },
    
      /**
       * مخططات مخصصة للتحقق من صحة محتوى القاموس.
       */
      schemas: {
        "my-schema": z.object({
          title: z.string(),
        }),
      },
    
      /**
       * تكوين القاموس.
       */
      dictionary: {
        /**
         * يتحكم في كيفية استيراد القواميس.
         * - "static": يتم استيرادها بشكل ثابت في وقت البناء.
         * - "dynamic": يتم استيرادها ديناميكيًا باستخدام Suspense.
         * - "fetch": يتم جلبها ديناميكيًا عبر واجهة برمجة تطبيقات المزامنة المباشرة.
         */
        importMode: "static",
    
        /**
         * تنسيق الرسالة الافتراضي لجميع القواميس في المشروع.
         * - 'intlayer': تنسيق intlayer الأصلي (الافتراضي).
         * - 'icu': تنسيق رسالة ICU.
         * - 'i18next': تنسيق i18next.
         * - 'vue-i18n': تنسيق Vue I18n.
         * - 'po': تنسيق GNU Gettext PO.
         */
        format: "icu",
      },
    
      /**
       * تكوين الإضافات.
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    export default config;
    

    مرجع دليل الإعدادات

    يوضح ما يلي معالم الإعدادات المختلفة المتاحة في Intlayer.

    إعدادات التدويل (Internationalization)

    تحدد الإعدادات المتعلقة بتدويل التطبيق، بما في ذلك اللغات المتاحة واللغة الافتراضية.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    localesقائمة اللغات المدعومة في التطبيق.string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesقائمة اللغات المطلوبة في التطبيق.string[][][]• إذا كانت فارغة، فستكون جميع اللغات مطلوبة في وضع strict.
    • تأكد من تعريف اللغات المطلوبة أيضاً في حقل locales.
    strictModeيضمن تنفيذاً قوياً للمحتوى المترجم باستخدام TypeScript.string'inclusive'• إذا كان "strict": تطلب الدالة t تعريف كل لغة معلنة - يلقي خطأ إذا كانت إحداها مفقودة أو غير معلنة.
    • إذا كان "inclusive": يحذر من اللغات المفقودة ولكنه يسمح باستخدام اللغات الموجودة غير المعلنة.
    • إذا كان "loose": يقبل أي لغة موجودة.
    defaultLocaleاللغة الافتراضية المستخدمة كاحتياطي في حالة عدم العثور على اللغة المطلوبة.stringLocales.ENGLISH'en'تُستخدم لتحديد اللغة عندما لا يتم تحديدها في رابط URL أو الكوكيز أو الهيدر.

    إعدادات المحرر (Editor)

    تحدد إعدادات المحرر المرئي المدمج، بما في ذلك منفذ الخادم وحالة التفعيل.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    applicationURLرابط التطبيق.stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • يُستخدم لتقييد مصدر (origin) المحرر لأسباب أمنية.
    • إذا تم تعيينه على '*'، يمكن الوصول إلى المحرر من أي مصدر.
    portالمنفذ المستخدم بواسطة خادم المحرر المرئي.number8000
    editorURLرابط خادم المحرر.string'http://localhost:8000''http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • يُستخدم لتقييد المصادر التي يمكنها التواصل مع التطبيق.
    • إذا تم تعيينه على '*'، يمكن الوصول إليه من أي مصدر.
    • يجب تعيينه إذا تم تغيير المنفذ أو استضافة المحرر على نطاق مختلف.
    cmsURLرابط Intlayer CMS.string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLرابط الخادم الخلفي.stringhttps://back.intlayer.orghttp://localhost:4000
    enabledما إذا كان ينبغي للتطبيق التواصل مع المحرر المرئي.booleanfalseprocess.env.NODE_ENV !== 'production'• إذا كان false ، فلا يمكن للمحرر التواصل مع التطبيق.
    • يؤدي تعطيله لبيئات معينة إلى زيادة الأمان.
    clientIdيسمح لحزم intlayer بالتحقق من الهوية على الخادم الخلفي عبر oAuth2. انتقل إلى intlayer.org/project للحصول على رمز الوصول الخاص بك.string |
    undefined
    undefinedيجب الحفاظ على سريته؛ استخدم متغيرات البيئة.
    clientSecretيسمح لحزم intlayer بالتحقق من الهوية على الخادم الخلفي عبر oAuth2. انتقل إلى intlayer.org/project للحصول على رمز الوصول الخاص بك.string |
    undefined
    undefinedيجب الحفاظ على سريته؛ استخدم متغيرات البيئة.
    dictionaryPriorityStrategyإستراتيجية أولوية القواميس عند وجود قواميس محلية وعن بعد معاً.string'local_first''distant_first''distant_first': يعطي الأولوية للقواميس البعيدة على المحلية.
    'local_first': يعطي الأولوية للقواميس المحلية على البعيدة.
    liveSyncما إذا كان ينبغي لخادم التطبيق إعادة تحميل المحتوى فوراً عند اكتشاف تغييرات في CMS
    المحرر المرئي
    الخادم الخلفي.
    booleantruetrue• عند إضافة/تحديث قاموس، سيقوم التطبيق بتحديث محتوى الصفحة.
    • تستهلك المزامنة الحية المحتوى في خادم آخر، مما قد يؤثر قليلاً على الأداء.
    • يوصى باستضافة كليهما على نفس الجهاز.
    liveSyncPortمنفذ خادم المزامنة الحية.number40004000
    liveSyncURLرابط خادم المزامنة الحية.string'http://localhost:{liveSyncPort}''https://example.com'يشير افتراضياً إلى localhost؛ يمكن تغييره ليشير إلى خادم مزامنة حية بعيد.

    إعدادات التحليلات (Analytics)

    يحدد الإعدادات المتعلقة بتحليلات Intlayer: جمع بيانات حول المحتوى الذي يُعرض فعليًا للمستخدمين (مشاهدات الصفحات، حالات ظهور المحتوى) وتمكين اختبارات A/B على المحتوى.

    التحليلات مفعّلة افتراضيًا (opt-out): يبدأ الجمع بمجرد تثبيت حزمة @intlayer/analytics و تكوين مفتاح مشروع (editor.clientId) من أجل الإسناد. اضبط analytics.enabled على false — أو لا تثبّت الحزمة — وتتم إزالة تكامل التحليلات بالكامل من حزمة تطبيقك (dead-code elimination).

    الحقلالوصفالنوعالافتراضيالمثالملاحظة
    enabledيُفعّل جمع بيانات التحليلات (مشاهدات الصفحات، حالات ظهور المحتوى، أحداث A/B).booleantruefalseيتطلب تثبيت @intlayer/analytics وضبط editor.clientId من أجل الإسناد؛ وإلا تبقى التحليلات معطّلة حتى لو كانت enabled تساوي true.
    flushIntervalالمللي ثانية بين عمليات الإرسال المجمّعة التلقائية إلى الخادم الخلفي.number2000010000
    sampleRateنسبة الجلسات المراد تسجيلها، من 0 (لا شيء) إلى 1 (الكل).number10.5أخذ العينات حتمي لكل جلسة، لذا فإن الجلسة المسجَّلة تُبلّغ عن جميع أحداثها (دون قوائم تحويل جزئية).

    إعدادات التوجيه (Routing)

    الإعدادات التي تتحكم في سلوك التوجيه، بما في ذلك بنية رابط URL، وتخزين اللغة، وإدارة البرمجيات الوسيطة.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    modeوضع توجيه رابط URL لإدارة اللغات.'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default''prefix-no-default': /dashboard (الإنجليزية) أو /fr/dashboard (الفرنسية). 'prefix-all': /en/dashboard. 'no-prefix': تتم إدارة اللغة بوسائل أخرى. 'search-params': /dashboard?locale=frلا يؤثر على إدارة الكوكيز أو تخزين اللغات.
    enableProxyيفعّل وكيل توجيه اللغات في Intlayer (البرمجية الوسيطة).boolean |
    undefined
    undefined (auto)true• غير محدد (auto): تتجاهل خوادم dev وpreview اللغة المخزّنة في ملفات تعريف الارتباط/الترويسات كمصدر لإعادة التوجيه؛ وتظل البادئات والحفظ واكتشاف Accept-Language سارية. في الإنتاج يتصرف مثل true.
    true: السلوك الكامل في كل مكان.
    false: بدون توجيه للغات. في Next.js تصبح البرمجية الوسيطة intlayerProxy مجرد ممر.
    storageإعدادات تخزين اللغة على العميل.false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header']'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    انظر جدول معالم التخزين أدناه.
    basePathالمسار الأساسي لروابط التطبيق.string'''/my-app'إذا كان التطبيق يعمل على العنوان https://example.com/my-app ، فإن الـ basePath هو '/my-app' وتصبح الروابط https://example.com/my-app/en.
    rewriteقواعد إعادة كتابة رابط URL مخصصة تتجاوز وضع التوجيه الافتراضي لمسارات معينة. تدعم المعاملات الديناميكية [param].Record<string, StrictModeLocaleMap<string>>undefinedانظر المثال أدناه• لقواعد إعادة الكتابة أولوية على mode.
    • يعمل مع Next.js و Vite.
    • تقوم getLocalizedUrl() بتطبيق القواعد المناسبة تلقائياً.
    • انظر إعادة كتابة روابط URL المخصصة.
    domainsيربط اللغات بأسماء نطاقات الاستضافة للتوجيه القائم على النطاق. عند تعيينه، تستخدم روابط URL للغة ذلك النطاق كقاعدة (رابط URL مطلق) ولا يتم إضافة بادئة لغة إلى المسار.Partial<Record<Locale, string>>undefined{ zh: 'intlayer.zh', fr: 'intlayer.org' }• البروتوكول الافتراضي هو https:// عندما لا يتم تضمينه في اسم الاستضافة.
    • النطاق نفسه يحدد اللغة، لذا لا يتم إضافة بادئة /zh/.
    getLocalizedUrl('/', 'zh') يرجع https://intlayer.zh/.

    مثال لـ rewrite:

    typescript
    routing: {
      mode: "prefix-no-default", // إستراتيجية احتياطية
      rewrite: nextjsRewrite({
        "/about": {
          en: "/about",
          fr: "/a-propos",
        },
        "/product/[slug]": {
          en: "/product/[slug]",
          fr: "/produit/[slug]",
        },
        "/blog/[category]/[id]": {
          en: "/blog/[category]/[id]",
          fr: "/journal/[category]/[id]",
        },
      }),
    }
    

    معالم التخزين (Storage)

    القيمةملاحظةالوصف
    'cookie'• للامتثال للقانون العام لحماية البيانات (GDPR)، تأكد من الحصول على موافقة المستخدم بشكل صحيح.
    • قابل للتخصيص عبر CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }).
    يخزن اللغة في الكوكيز - يمكن الوصول إليها على كل من العميل والخادم.
    'localStorage'• لا تنتهي صلاحيته إلا إذا تم مسحه صراحة.
    • لا يمكن لـ Intlayer Proxy الوصول إليه.
    • قابل للتخصيص عبر StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    يخزن اللغة في المتصفح دون حد زمني - من جانب العميل فقط.
    'sessionStorage'• يتم مسحه عند إغلاق التبويب/النافذة.
    • لا يمكن لـ Intlayer Proxy الوصول إليه.
    • قابل للتخصيص عبر StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    يخزن اللغة طوال مدة جلسة الصفحة - من جانب العميل فقط.
    'header'• مفيد لطلبات واجهة برمجة التطبيقات (API).
    • لا يمكن لجانب العميل الوصول إليه.
    • قابل للتخصيص عبر StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    يخزن أو يمرر اللغة عبر ترويسات HTTP - من جانب الخادم فقط.

    سمات الكوكيز (Cookies Attributes)

    عند استخدام التخزين في الكوكيز، يمكن تعيين سمات إضافية:

    الحقلالوصفالنوع
    nameاسم الكوكيز. الافتراضي: 'INTLAYER_LOCALE'string
    domainنطاق الكوكيز. الافتراضي: undefinedstring
    pathمسار الكوكيز. الافتراضي: undefinedstring
    secureيتطلب HTTPS. الافتراضي: undefinedboolean
    httpOnlyعلامة HTTP-only. الافتراضي: undefinedboolean
    sameSiteسياسة SameSite.'strict' |
    'lax' |
    'none'
    expiresرقم يمثل الأيام منذ الإنشاء؛ تاريخ (أو سلسلة ISO للتاريخ) هو تاريخ انتهاء مطلق. الافتراضي: undefinedDate |
    number |
    string
    maxAgeالعمر بالثواني منذ الإنشاء. له الأسبقية على expires. الافتراضي: undefinednumber

    سمات التخزين (Storage Attributes)

    عند استخدام localStorage أو sessionStorage:

    الحقلالوصفالنوع
    typeنوع التخزين.'localStorage' |
    'sessionStorage'
    nameاسم المفتاح في التخزين. الافتراضي: 'INTLAYER_LOCALE'string

    أمثلة للإعدادات

    فيما يلي بعض الأمثلة الشائعة للإعدادات لهيكل التوجيه v7 الجديد:

    الإعدادات الأساسية (الافتراضية):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    الإعدادات مع الامتثال لـ GDPR:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      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,
          },
        ],
        basePath: "",
      },
    };
    
    export default config;
    

    وضع معاملات البحث (Search Params):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "search-params",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    وضع بدون بادئة مع تخزين مخصص:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "no-prefix",
        storage: {
          type: "sessionStorage",
          name: "app-locale",
        },
        basePath: "/my-app",
      },
    };
    
    export default config;
    

    إعادة كتابة روابط URL مخصصة مع مسارات ديناميكية:

    typescript
    // intlayer.config.ts
    import { nextjsRewrite } from "intlayer/routing";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // احتياطي للمسارات غير المعاد كتابتها
        storage: "cookie",
        rewrite: nextjsRewrite({
          "/about": {
            en: "/about",
            fr: "/a-propos",
          },
          "/product/[slug]": {
            en: "/product/[slug]",
            fr: "/produit/[slug]",
          },
          "/blog/[category]/[id]": {
            en: "/blog/[category]/[id]",
            fr: "/journal/[category]/[id]",
          },
        }),
      },
    };
    
    export default config;
    

    إعدادات المحتوى (Content)

    الإعدادات المتعلقة بكيفية إدارة المحتوى في التطبيق، بما في ذلك أسماء المجلدات، وامتدادات الملفات، والإعدادات المشتقة.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    watchيشير إلى ما إذا كان ينبغي لـ Intlayer مراقبة التغييرات في ملفات الإعلان عن المحتوى لإعادة توليد القواميس.booleantrue
    fileExtensionsامتدادات الملفات للفحص أثناء تجميع القواميس.string[]['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.json5', '.content.jsonc', '.content.tsx', '.content.jsx']['.data.ts', '.data.js', '.data.json']يساعد التخصيص في تجنب التعارضات.
    contentDirالمسار إلى المجلد حيث يتم الاحتفاظ بملفات تعريف المحتوى (.content.*).string[]['.']['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content']يُستخدم لمراقبة ملفات المحتوى وإعادة توليد القواميس.
    codeDirالمسار إلى المجلد حيث يتم الاحتفاظ بالكود، بالنسبة لمجلد المشروع الأساسي.string[]['.']['src', '../../ui-library']• يُستخدم لمراقبة ملفات الكود للتحويل (إزالة الأجزاء غير الضرورية، التحسين).
    • يمكن أن يؤدي فصله عن contentDir إلى تحسين الأداء.
    excludedPathالمجلدات المستبعدة من فحص المحتوى.string[]['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']غير مستخدم حالياً؛ مخطط له في المستقبل.
    formatCommandأمر لتنسيق ملفات المحتوى عند كتابتها محلياً بواسطة Intlayer.stringundefined'npx prettier --write "{{file}}" --log-level silent' (Prettier), 'npx biome format "{{file}}" --write --log-level none' (Biome), 'npx eslint --fix "{{file}}" --quiet' (ESLint)• سيتم استبدال {{file}} بمسار الملف.
    • إذا لم يتم تعريفه، فسيقوم Intlayer بالتحديد تلقائياً (يختبر prettier و biome و eslint).

    إعدادات النظام

    الإعدادات المتعلقة بالمسارات الداخلية ونتائج المخرجات في Intlayer. عادةً ما تكون هذه الإعدادات داخلية ولا يجب أن يحتاج المستخدم إلى تعديلها.

    الحقلالوصفالنوعالقيمة الافتراضيةمثالملاحظة
    baseDirالمجلد الأساسي للمشروع.stringprocess.cwd()'/path/to/project'يُستخدم لحل جميع المجلدات المتعلقة بـ Intlayer.
    dictionariesDirمسار المجلد لتخزين قواميس التوطين.string'.intlayer/dictionary'
    moduleAugmentationDirالمجلد المخصص لتعزيز الوحدات، مما يسمح بتحسين اقتراحات IDE والتحقق من الأنواع.string'.intlayer/types''intlayer-types'تأكد من تضمينها في tsconfig.json.
    unmergedDictionariesDirالمجلد لتخزين القواامس غير المدمجة.string'.intlayer/unmerged_dictionary'
    typesDirالمجلد لتخزين أنواع القاموس.string'.intlayer/types'
    mainDirالمجلد حيث يتم تخزين ملفات التطبيق الرئيسية.string'.intlayer/main'
    configDirالمجلد حيث يتم تخزين ملفات الإعدادات.string'.intlayer/config'
    cacheDirالمجلد حيث يتم تخزين ملفات الذاكرة المؤقتة.string'.intlayer/cache'

    إعدادات القاموس (Dictionary)

    المعالم التي تتحكم في عمليات القاموس، بما في ذلك سلوك الملء التلقائي وتوليد المحتوى.

    يخدم تكوين القاموس هذا غرضين رئيسيين:

    1. القيم الافتراضية: حدد القيم الافتراضية عند إنشاء ملفات إعلان المحتوى
    2. سلوك الاحتياطي: وفر قيماً احتياطية عند عدم تحديد حقول معينة، مما يسمح لك بتحديد سلوك عملية القاموس عالمياً

    لمزيد من المعلومات حول ملفات إعلان المحتوى وكيفية تطبيق قيم التكوين، راجع وثائق ملف المحتوى.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    fillيتحكم في كيفية توليد ملفات مخرجات الملء التلقائي (ترجمة الذكاء الاصطناعي).boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }true: المسار الافتراضي (نفس ملف المصدر).
    false: تعطيل.
    • تولد سلسلة القالب/الدالة ملفات حسب اللغة.
    • كائن حسب اللغة: كل لغة تقابل قالبها؛ false يتجاهل هذه اللغة.
    • إدراج {{locale}} يفعل التوليد حسب اللغة.
    • الـ fill على مستوى القاموس دائماً له الأولوية على هذا الإعداد العام.
    descriptionيساعد المحرر و CMS على فهم الغرض من القاموس. يُستخدم أيضاً كسياق لتوليد الترجمات باستخدام الذكاء الاصطناعي.stringundefined'User profile section'
    localeيحول القاموس إلى صيغة خاصة بلغة محددة. تصبح كل حقل معلن عقدة ترجمة. إذا غاب، يُعتبر القاموس متعدد اللغات.LocalesValuesundefined'en'استخدم هذا إذا كان القاموس مخصصاً للغة واحدة معينة، بدلاً من ترجمات متعددة.
    contentAutoTransformationيحول سلاسل المحتوى تلقائياً إلى عقد ذات أنواع (markdown أو HTML أو إدراج).boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Titlemd('### Title').
    • HTML : <div>Title</div>html('<div>Title</div>').
    • إدراج : Hello {{name}}insert('Hello {{name}}').
    locationيشير إلى مكان تخزين ملفات القاموس وكيفية مزامنتها مع CMS.'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local''hybrid''local': إدارة محلية فقط.
    'remote': إدارة عن بعد فقط (CMS).
    'hybrid': إدارة محلية وعن بعد معاً.
    'plugin' أو سلسلة مخصصة: إدارة بواسطة إضافة أو مصدر مخصص.
    importModeيتحكم في طريقة استيراد القواميس.'static' |
    'dynamic' |
    'fetch'
    'static''dynamic''static': استيراد ثابت.
    'dynamic': استيراد ديناميكي عبر Suspense.
    'fetch': جلب عبر Live Sync API؛ التراجع إلى 'dynamic' عند الفشل.
    • يتطلب إضافات @intlayer/babel و @intlayer/swc.
    • يجب الإعلان عن المفاتيح بشكل ثابت.
    • يتم تجاهله إذا تم إيقاف optimize.
    • لا يؤثر على getIntlayer أو getDictionary إلخ.
    formatتنسيق الرسالة الافتراضي لجميع القواميس في المشروع.'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu''intlayer': تنسيق intlayer الأصلي.
    'icu': تنسيق رسالة ICU.
    'i18next': تنسيق i18next.
    'vue-i18n': تنسيق Vue I18n.
    'po': تنسيق GNU Gettext PO.
    priorityأولوية القاموس. تفوز القيم الأعلى على القيم الأدنى عند حل التعارضات بين القواميس.numberundefined1
    liveملغي - استخدم importMode: 'fetch'. كان يشير إلى ما إذا كان ينبغي جلب محتوى القاموس ديناميكياً عبر Live Sync API.booleanundefinedتم تغيير اسمه إلى importMode: 'fetch' في v8.0.0.
    schemaيتم توليده تلقائياً بواسطة Intlayer للتحقق من صحة JSON schema.'https://intlayer.org/schema.json'توليد تلقائيلا تقم بتحريره يدوياً.
    titleيساعد في التعرف على القاموس في المحرر و CMS.stringundefined'User Profile'
    tagsيصنف القواميس ويوفر سياقاً أو تعليمات للمحرر والذكاء الاصطناعي.string[]undefined['user', 'profile']
    versionإصدار القاموس البعيد؛ يساعد في تتبع النسخة المستخدمة حالياً.stringundefined'1.0.0'• تتم إدارته في CMS.
    • لا تقم بتحريره محلياً.

    مثال لـ fill:

    ts
    dictionary: {
      fill: {
        en: "/locales/en/{{key}}.content.json",
        fr: ({ key }) => `/locales/fr/${key}.content.json`,
        es: false,
      },
    };
    

    إعدادات السجل (Log)

    المعالم لتخصيص مخرجات سجل Intlayer.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    modeيشير إلى وضع السجل.'default' |
    'verbose' |
    'disabled'
    'default''verbose''verbose': يسجل المزيد من المعلومات لتصحيح الأخطاء.
    'disabled': يوقف السجل تماماً.
    prefixبادئة لجميع الرسائل في السجل.string'[intlayer] ''[my prefix] '

    إعدادات الذكاء الاصطناعي (AI)

    الإعدادات التي تتحكم في ميزات الذكاء الاصطناعي في Intlayer، بما في ذلك المزود، والنموذج، ومفتاح واجهة برمجة التطبيقات.

    هذه الإعدادات اختيارية إذا كنت مسجلاً في لوحة تحكم Intlayer بمفتاح وصول. سيقوم Intlayer تلقائياً بإدارة حل الذكاء الاصطناعي الأكثر كفاءة وملاءمة للتكاليف لاحتياجاتك. استخدام الخيارات الافتراضية يضمن أفضل دعم طويل الأمد حيث يتم تحديث Intlayer باستمرار لاستخدام أحدث النماذج.

    إذا كنت تفضل استخدام مفتاح واجهة برمجة تطبيقات خاص بك أو نموذج محدد، يمكنك تعريف إعدادات الذكاء الاصطناعي الخاصة بك. سيتم استخدام إعدادات الذكاء الاصطناعي هذه عالمياً في بيئة Intlayer الخاصة بك. ستستخدم أوامر CLI هذه الإعدادات افتراضياً لأوامر مثل fill ، وكذلك SDK ، والمحرر المرئي ، و CMS. يمكنك تجاوز هذه القيم الافتراضية لحالات استخدام معينة عبر معاملات الأوامر.

    يدعم Intlayer العديد من مزودي الذكاء الاصطناعي لتحقيق أقصى قدر من المرونة. حالياً، المزودون المدعومون هم:

    • OpenAI (الافتراضي)
    • Anthropic Claude
    • Mistral AI
    • DeepSeek
    • Google Gemini
    • Google AI Studio
    • Google Vertex
    • Meta Llama
    • Ollama
    • OpenRouter
    • Alibaba Cloud
    • Fireworks
    • Hugging Face
    • Groq
    • Amazon Bedrock
    • Together.ai
    • LM Studio
    الحقلالوصفالنوعالافتراضيمثالملاحظة
    providerالمزود المستخدم لميزات الذكاء الاصطناعي في Intlayer.'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'يحتاج المزودون المختلفون إلى مفاتيح واجهة برمجة تطبيقات مختلفة ولهم أسعار مختلفة.
    modelالنموذج المستخدم لميزات الذكاء الاصطناعي.stringلا يوجد'gpt-4o-2024-11-20'يعتمد النموذج المحدد على المزود.
    temperatureيتحكم في عشوائية ردود الذكاء الاصطناعي.numberلا يوجد0.1درجة حرارة أعلى = أكثر إبداعاً وأقل قابلية للتنبؤ.
    apiKeyمفتاح واجهة برمجة التطبيقات الخاص بك للمزود المختار.stringلا يوجدprocess.env.OPENAI_API_KEYيجب الحفاظ على سريته؛ استخدم متغيرات البيئة.
    applicationContextسياق إضافي حول تطبيقك لمساعدة الذكاء الاصطناعي في توليد ترجمات أكثر دقة (المجال، الجمهور المستهدف، النبرة، المصطلحات).stringلا يوجد'سياق تطبيقي الخاص'يمكن استخدامه لإضافة قواعد (مثلاً: "لا يجب عليك تحويل روابط URL").
    baseURLالرابط الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي.stringلا يوجد'https://api.openai.com/v1'
    'http://localhost:5000'
    يمكن أن يشير إلى نقطة نهاية محلية أو مخصصة لواجهة برمجة تطبيقات الذكاء الاصطناعي.
    dataSerializationصيغة تسلسل البيانات لميزات الذكاء الاصطناعي.'json' |
    'toon'
    undefined'toon''json': افتراضي، موثوق؛ يستهلك المزيد من الوحدات.
    'toon': وحدات أقل، أقل استقراراً.
    • يتم تمرير المعاملات الإضافية إلى النموذج كسياق (جهد التفكير إلخ).

    إعدادات البناء (Build)

    المعالم التي تتحكم في كيفية قيام Intlayer بتحسين وترجمة تدويل تطبيقك.

    يتم تطبيق خيارات البناء على إضافات @intlayer/babel و @intlayer/swc.

    في وضع التطوير، يستخدم Intlayer استيراداً ثابتاً للقواميس لتبسيط عملية التطوير.
    أثناء التحسين، سيقوم Intlayer باستبدال استدعاءات القواميس لتحسين تقسيم الكود (chunking) بحيث تستورد الحزمة الناتجة القواميس المستخدمة فعلياً فقط.
    الحقلالوصفالنوعالافتراضيمثالملاحظة
    modeيتحكم في وضع البناء.'auto' |
    'manual'
    'auto''manual''auto': يتم تشغيل البناء تلقائياً أثناء بناء التطبيق.
    'manual': يتم تنفيذه فقط عند استدعاء أمر بناء صريح.
    • يمكن استخدامه لإيقاف بناء القواميس (مثلاً لتجنب الجري في بيئات Node.js).
    optimizeيتحكم في ما إذا كان ينبغي إجراء تحسينات البناء.booleanundefinedprocess.env.NODE_ENV === 'production'• إذا لم يتم تعريفه، فسيتم تشغيل التحسين عند بناء إطار العمل (Vite/Next.js).
    true يفرض التحسين حتى في وضع التطوير.
    false يعطله.
    • عند تشغيله، يستبدل استدعاءات القواميس لتحسين الـ chunking.
    • يتطلب إضافات @intlayer/babel و @intlayer/swc.
    minifyيحدد ما إذا كان ينبغي ضغط القواميس لتقليل حجم الحزمة.booleanfalse• يحدد ما إذا كانت الحزمة يجب أن تكون مضغوطة.
    • الافتراضي: true في الإنتاج.
    • سيتم تجاهل هذا الخيار إذا تم تعطيل optimize.
    • سيتم تجاهل هذا الخيار إذا كان editor.enabled صحيحاً.
    pruneيحدد ما إذا كان ينبغي حذف المفاتيح غير المستخدمة في القواميس.booleantrue• يحدد ما إذا كانت الحزمة يجب أن يتم تنظيفها.
    • الافتراضي: true في الإنتاج.
    • سيتم تجاهل هذا الخيار إذا تم تعطيل optimize.
    checkTypesيشير إلى ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript وتسجيل الأخطاء.booleanfalseقد يبطئ عملية البناء.
    chunkGroupingيحدد ما إذا كان يجب تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها.booleantrue• بدون التجميع، ترسل الصفحة المكوّنة من مكوّنات عديدة طلباً لكل قاموس.
    • القواميس التي يُوصل إليها من عدة حدود تنتقل إلى جزء مشترك، لذا لا تحمل أي صفحة محتوى صفحة أخرى.
    • ينطبق فقط على القواميس التي تستخدم importMode: 'dynamic'.
    • ينطبق فقط على بناء العميل، وفقط عند التحزيم (ليس في وضع التطوير).
    dictionariesPreloadيحدد ما إذا كان يجب تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء.booleantrue• تنتظر نقطة الدخول المولَّدة لغة التصفح في المستوى الأعلى، لذا لا يُعتبر المسار المحمّل بتكاسل محمّلاً حتى يتوفر محتواه.
    • تُعرض القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء التنقل.
    • يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.
    • ينطبق فقط على القواميس التي تستخدم importMode: 'dynamic' في بناء العميل.
    • يتطلب أداة تحزيم تدعم top-level await (Vite، esbuild).
    outputFormatيتحكم في صيغة إخراج القواميس.('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePatternالأنماط التي تحدد الملفات التي يتم فحصها أثناء التحسين.string[]['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']• قيد التحسين على الملفات ذات الصلة لزيادة أداء البناء.
    • سيتم تجاهله إذا توقف optimize.
    • يستخدم أنماط glob.

    إعدادات المترجم (Compiler)

    الإعدادات التي تتحكم في مترجم Intlayer، الذي يستخرج القواميس مباشرة من مكوناتك.

    الحقلالوصفالنوعالافتراضيمثالملاحظة
    enabledيشير إلى ما إذا كان ينبغي تفعيل المترجم لاستخراج القواميس.boolean |
    'build-only'
    true'build-only''build-only' يتخطى المترجم أثناء التطوير لبناء أسرع؛ يتم تنفيذه فقط عند أوامر البناء.
    dictionaryKeyPrefixبادئة لمفاتيح القواميس المستخرجة.string'''my-prefix-'تتم إضافتها إلى المفتاح المولد (بناءً على اسم الملف) لتجنب التعارضات.
    saveComponentsما إذا كان ينبغي حفظ المكونات بعد تحويلها.booleanfalse• إذا كان true ، فسيتم استبدال الملفات الأصلية بنسخها المحولة.
    • يمكن إزالة المترجم بعد تشغيله مرة واحدة.
    outputيحدد المسار لملفات الإخراج. يستبدل outputDir. يدعم قوالب المتغيرات: {{fileName}},
    {{key}},
    {{locale}},
    {{extension}},
    {{componentFileName}},
    {{componentExtension}},
    {{format}},
    {{componentFormat}},
    {{componentDirPath}}.
    boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    undefined'./{{fileName}}{{extension}}'
    '/locales/{{locale}}/{{key}}.json'
    { en: ({ key }) => './locales/en/${key}.json', fr: '...', es: false }
    • يتم حل مسارات ./ بالنسبة لمجلد المكون.
    • مسارات / بالنسبة للمشروع الأساسي.
    {{locale}} يتضمن التوليد حسب اللغة.
    • يدعم تمثيل الكائن لكل لغة.
    noMetadataإذا كان true ، فسيقوم المترجم بحذف بيانات ميتا القاموس (المفتاح، غلاف المحتوى) من المخرجات.booleanfalsefalse{"key":"my-key","content":{"key":"value"}}
    true{"key":"value"}
    • مفيد لمخرجات بصيغة i18next أو ICU MessageFormat JSON.
    • يعمل جيداً مع إضافة loadJSON.
    dictionaryKeyPrefixبادئة لمفتاح القاموسstring''إضافة بادئة اختيارية لمفاتيح القواميس المستخرجة

    مخططات مخصصة (Custom Schemas)

    الحقلالوصفالنوع
    schemasيسمح لك بتعريف مخططات Zod للتحقق من صحة هيكل قواميسك.Record<string, ZodSchema>

    الإضافات (Plugins)

    الحقلالوصفالنوع
    pluginsقائمة إضافات Intlayer لإدراجها.IntlayerPlugin[]

    الأسئلة الشائعة

    في جذر مشروعك، بجانب package.json. يفحص Intlayer دليل العمل والأدلة الأصلية بحثًا عن intlayer.config.ts أو intlayer.config.js أو intlayer.config.mjs أو intlayer.config.cjs. يمكنك أيضًا تحديد مسار مخصص عبر خيار --config في أوامر CLI.

    أقل بكثير من الإعدادات القائمة على فضاءات الأسماء، لأن الصفحة لا تُحمّل أبدًا كتالوجًا لا تعرضه. يُحل المحتوى المعروض على الخادم مباشرة على الخادم، ويستبدل مترجم وقت البناء استدعاءات useIntlayer بإدخالات القاموس الدقيقة التي يستخدمها المكون، لذلك يتم التخلص من المفاتيح واللغات غير المستخدمة. تقسم القواميس الديناميكية الباقي حسب اللغة. مقارنة بالبدائل التقليدية، يقلل Intlayer حجم الحزمة والصفحة بنسبة تصل إلى 50%. انظر تحسين الحزم و المقارنة المعيارية.

    نعم، وبطريقتين. يمكنك ترحيل المحتوى تدريجيًا باستخدام دليل ترحيل i18next أو دليل ترحيل next-intl. أو يمكنك الاحتفاظ بواجهة برمجة التطبيقات الحالية بالكامل: تكشف محولات التوافق نفس واجهات i18next و react-i18next و next-intl و next-i18next و react-intl و use-intl و vue-i18n و Lingui، ولكنها مدعومة بقواميس Intlayer، بحيث تتغير الاستيرادات فقط بينما يظل كود المكون كما هو.

    نعم. تحافظ مكونة مزامنة JSON على ملفات /messages/{locale}/{namespace}.json الخاصة بك كمصدر الحقيقة وتُنشئ قواميس Intlayer منها، في كلا الاتجاهين. وتقوم مكونة مزامنة PO بنفس الشيء لكتالوجات gettext، وتسمح لك الملفات المقسمة حسب اللغة بتقسيم المحتوى حسب اللغة بدلاً من تجميع كل اللغات في ملف واحد.

    لا. قم بتشغيل npx intlayer extract وسيقرأ Intlayer ملفات المصدر الخاصة بك، ويسحب السلاسل النصية الموجهة للمستخدم ويكتب ملف .content بجانب كل منها، بحيث تراجع diff بدلاً من نسخ السلاسل إلى كتالوج يدويًا. راجع أمر extract.

    لأتمتة كاملة، يقوم Intlayer Compiler بالشيء نفسه في وقت البناء على كود JSX و TSX و Vue و Svelte، منشئًا القواميس عند كل تغيير دون الحاجة إلى إدارة المفاتيح يدويًا.

    خمس أدوات، كلها اختيارية:

    • امتداد VS Code: الانتقال من مفتاح useIntlayer إلى ملف المحتوى المصرح به، استخراج المحتوى من المكون، وتشغيل build و fill و test و push و pull من لوحة الأوامر أو علامة تبويب Intlayer.
    • خادم LSP: نفس التجربة في أي محرر يدعم LSP، مع الانتقال إلى التعريف وعروض القيمة المترجمة عند التمرير والإكمال التلقائي للمفاتيح. يدعم أيضًا استدعاءات i18next و react-i18next و next-intl و use-intl.
    • خادم MCP: يكشف وثائق Intlayer و CLI إلى Cursor و VS Code و Claude Desktop و Claude Code و ChatGPT.
    • Agent skills: مهارات مخصصة مثل intlayer-config و intlayer-cli و intlayer-content.
    • ESLint plugin: قاعدة no-raw-text ترصد النصوص المكتوبة مباشرة بدون تدويل.