الرئيسيةبيئة اختبارمعرض الأعمالتطبيقوثيقةمدونة
    • 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. إعلان المحتوى
    إنشاء:2025-02-07آخر تحديث:2026-05-12
    استخدم هذه الصفحة والموفر AI الذي تريده
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

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

    تاريخ الإصدارات

    1. "إضافة دعم لتنسيقات ملفات YAML و Markdown"
      v8.10.019‏/5‏/2026
    2. "إضافة نوع عقدة المحتوى `plural`"
      v8.9.012‏/5‏/2026
    3. "إضافة نوع عقدة المحتوى `html`"
      v8.0.028‏/1‏/2026
    4. "Rename `live` import mode to `fetch` to better describe the underlying mechanism."
      v8.0.024‏/1‏/2026
    5. "إضافة خيارات القاموس `location` و `schema`"
      v8.0.018‏/1‏/2026
    6. "إضافة دعم لتنسيقات ملفات JSON5 و JSONC"
      v7.5.1310‏/1‏/2026
    7. "إضافة دعم تنسيقات ICU و i18next"
      v7.5.013‏/12‏/2025
    8. "إضافة توثيق الحقول"
      v6.0.020‏/9‏/2025
    9. "بدء السجل"
      v5.5.1029‏/6‏/2025

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

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

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

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

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

    ملف المحتوى

    www.youtube.com

    ما هو ملف المحتوى؟

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

    ستكون القواميس هي النتيجة النهائية التي سيستوردها تطبيقك باستخدام الخطاف useIntlayer.

    المفاهيم الأساسية

    القاموس

    القاموس هو مجموعة منظمة من المحتوى مرتبة بواسطة المفاتيح. يحتوي كل قاموس على:

    • المفتاح: معرف فريد للقاموس
    • المحتوى: القيم الفعلية للمحتوى (نصوص، أرقام، كائنات، إلخ)
    • البيانات الوصفية: معلومات إضافية مثل العنوان، الوصف، العلامات، إلخ

    ملف المحتوى

    مثال على ملف المحتوى:

    src/example.content.tsx
    نسخ الكود

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

    import { type ReactNode } from "react";
    import {
      t,
      enu,
      plural,
      cond,
      nest,
      md,
      insert,
      file,
      type Dictionary,
    } from "intlayer";
    
    interface Content {
      imbricatedContent: {
        imbricatedContent2: {
          stringContent: string;
          numberContent: number;
          booleanContent: boolean;
          javaScriptContent: string;
        };
      };
      multilingualContent: string;
      quantityContent: string;
      pluralContent: string;
      conditionalContent: string;
      markdownContent: never;
      htmlContent: never;
      externalContent: string;
      insertionContent: string;
      nestedContent: string;
      fileContent: string;
      jsxContent: ReactNode;
    }
    
    export default {
      key: "page",
      content: {
        imbricatedContent: {
          imbricatedContent2: {
            stringContent: "مرحبا بالعالم",
            numberContent: 123,
            booleanContent: true,
            javaScriptContent: `${process.env.NODE_ENV}`,
          },
        },
        multilingualContent: t({
          ar: "محتوى باللغة العربية",
          en: "English content",
          "en-GB": "English content (UK)",
          fr: "French content",
          es: "Spanish content",
        }),
        quantityContent: enu({
          "<-1": "أقل من ناقص سيارة واحدة",
          "-1": "ناقص سيارة واحدة",
          "0": "لا سيارات",
          "1": "سيارة واحدة",
          ">5": "بعض السيارات",
          ">19": "الكثير من السيارات",
        }),
        pluralContent: plural({
          one: "One car",
          other: "{{count}} cars",
        }),
        conditionalContent: cond({
          true: "التحقق مفعل",
          false: "التحقق معطل",
        }),
        insertionContent: insert("مرحبًا {{name}}!"),
        nestedContent: nest(
          "navbar", // مفتاح القاموس للتضمين
          "login.button" // [اختياري] مسار المحتوى للتضمين
        ),
        fileContent: file("./path/to/file.txt"),
        externalContent: fetch("https://example.com").then((res) => res.json()),
        markdownContent: md("# مثال على ماركداون"),
        htmlContent: html("<p>Hello <strong>World</strong></p>"),
    
        /*
         * متاح فقط باستخدام `react-intlayer` أو `next-intlayer`
         */
        jsxContent: <h1>عنواني</h1>,
      },
    } satisfies Dictionary<Content>; // [اختياري] القاموس عام ويسمح لك بتقوية تنسيق قاموسك

    عقد المحتوى

    عقد المحتوى هي اللبنات الأساسية لمحتوى القاموس. يمكن أن تكون:

    • قيم بدائية: سلاسل نصية، أرقام، قيم منطقية، null، undefined
    • عقد ذات نوع: أنواع محتوى خاصة مثل الترجمات، الشروط، الماركداون، إلخ.
    • دوال: محتوى ديناميكي يمكن تقييمه أثناء وقت التشغيل انظر جلب الدوال
    • محتوى الجمع: راجع محتوى الجمع راجع محتوى الجمع
    • محتوى متداخل: مراجع إلى قواميس أخرى

    أنواع المحتوى

    يدعم Intlayer أنواع محتوى مختلفة من خلال العقد ذات النوع:

    • محتوى الترجمة: نص متعدد اللغات بقيم خاصة بكل لغة انظر محتوى الترجمة
    • محتوى الشرط: محتوى شرطي يعتمد على تعبيرات منطقية انظر محتوى الشرط
    • محتوى التعداد: محتوى يتغير بناءً على قيم معدودة انظر محتوى التعداد
    • محتوى الإدراج: محتوى يمكن إدراجه داخل محتويات أخرى انظر محتوى الإدراج
    • محتوى ماركداون: محتوى نص غني بصيغة ماركداون انظر محتوى ماركداون
    • محتوى HTML: محتوى HTML غني مع مكونات مخصصة اختيارية انظر محتوى HTML
    • محتوى متداخل: مراجع إلى قواميس أخرى انظر المحتوى المتداخل
    • محتوى حسب الجنس: محتوى يختلف بناءً على الجنس انظر محتوى الجنس
    • محتوى ملف: مراجع إلى ملفات خارجية انظر محتوى الملف

    هيكل القاموس

    القاموس في Intlayer يُعرّف بواسطة نوع Dictionary ويحتوي على عدة خصائص تتحكم في سلوكه:

    الخصائص المطلوبة

    key (سلسلة نصية)

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

    استخدم تسمية kebab-case (مثلًا، "about-page-meta").

    المحتوى (string | number | boolean | object | array | function)

    خاصية content تحتوي على بيانات القاموس الفعلية وتدعم:

    • القيم الأولية: سلاسل نصية، أرقام، قيم منطقية، null، undefined
    • العقد المطبقة: أنواع محتوى خاصة باستخدام دوال مساعدة من Intlayer
    • الكائنات المتداخلة: هياكل بيانات معقدة
    • المصفوفات: مجموعات من المحتوى
    • الدوال: تقييم المحتوى الديناميكي

    الخصائص الاختيارية

    title (string)

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

    مثال:

    typescript
    نسخ الكود

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

    {  key: "about-page-meta",  title: "بيانات وصفية لصفحة حول",  content: { /* ... */ }}

    description (string)

    وصف تفصيلي يشرح غرض القاموس، إرشادات الاستخدام، وأي اعتبارات خاصة. يُستخدم هذا الوصف أيضًا كسياق لتوليد الترجمة المدعومة بالذكاء الاصطناعي، مما يجعله ذا قيمة للحفاظ على جودة الترجمة واتساقها.

    مثال:

    typescript
    نسخ الكود

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

    {  key: "about-page-meta",  description: [    "هذا القاموس يدير البيانات الوصفية لصفحة حول",    "ضع في اعتبارك الممارسات الجيدة لتحسين محركات البحث (SEO):",    "- يجب أن يكون العنوان بين 50 و 60 حرفًا",    "- يجب أن يكون الوصف بين 150 و 160 حرفًا",  ].join('\n'),  content: { /* ... */ }}

    tags (string[])

    مصفوفة من السلاسل النصية لتصنيف وتنظيم القواميس. توفر الوسوم سياقًا إضافيًا ويمكن استخدامها للتصفية أو البحث أو تنظيم القواميس في المحررات وأنظمة إدارة المحتوى.

    مثال:

    typescript
    نسخ الكود

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

    {  key: "about-page-meta",  tags: ["metadata", "about-page", "seo"],  content: { /* ... */ }}

    format ('intlayer' | 'icu' | 'i18next')

    يحدد المُنسق الذي سيتم استخدامه لمحتوى القاموس. يسمح هذا باستخدام صيغ تنسيق رسائل مختلفة.

    • 'intlayer': مُنسق Intlayer الافتراضي.
    • 'icu': يستخدم تنسيق رسائل ICU.
    • 'i18next': يستخدم تنسيق رسائل i18next.

    مثال:

    typescript
    نسخ الكود

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

    {  key: "my-dictionary",  format: "icu",  content: {    message: "Hello {name}, you have {count, plural, one {# message} other {# messages}}"  }}

    locale (LocalesValues)

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

    • يتم التعامل مع القاموس كقاموس بلغة واحدة فقط
    • يصبح كل حقل عقدة ترجمة لتلك اللغة المحددة
    • يجب ألا تستخدم عقد الترجمة (t()) في المحتوى عند استخدام هذه الخاصية
    • إذا لم تكن موجودة، سيتم التعامل مع القاموس كقاموس متعدد اللغات
    راجع إعلان المحتوى حسب اللغة في Intlayer لمزيد من المعلومات.

    مثال:

    json
    نسخ الكود

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

    // قاموس حسب اللغة{  "key": "about-page",  "locale": "en",  "content": {    "title": "About Us", // تصبح هذه عقدة ترجمة للغة 'en'    "description": "Learn more about our company"  }}

    schema (SchemaKeys)

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

    مثال:

    intlayer.config.ts
    نسخ الكود

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

    import { z } from "zod";export default {  schemas: {    "seo-metadata": z.object({      title: z.string().min(50).max(60),      description: z.string().min(150).max(160),    }),  },};
    src/example.content.ts
    نسخ الكود

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

    import { type Dictionary } from "intlayer";const aboutPageMetaContent = {  key: "about-page-meta",  schema: "seo-metadata",  content: {    title: "About Our Company - Learn More About Us",    description: "Discover our company's mission, values, and team.",  },} satisfies Dictionary;export default aboutPageMetaContent;

    location ('local' | 'remote' | 'hybrid' | string)

    يشير إلى موقع القاموس ويسيطر على كيفية مزامنته مع CMS:

    • 'local': يتم إدارة القاموس محليًا فقط. لن يتم إرساله إلى CMS البعيد. استخدم هذا للمحتوى الذي يجب أن يبقى في قاعدة الكود الخاصة بك.
    • 'remote': يتم إدارة القاموس عن بُعد فقط. بعد الإرسال إلى CMS، سيتم فصله عن الملف المحلي. في وقت تحميل المحتوى، سيتم سحب القاموس البعيد من CMS. سيتم تجاهل ملف .content بموقع remote بعد الإرسال الأولي.
    • 'hybrid': يتم إدارة القاموس محليًا وعن بُعد. بعد الإرسال إلى CMS، سيبقى متزامنًا, يتم إرسال التغييرات من الملف المحلي إلى CMS، ويمكن سحب التغييرات البعيدة مرة أخرى إلى الملف المحلي.
    • string (مثلاً 'plugin'): يتم إدارة القاموس بواسطة مكون إضافي أو مصدر مخصص. عندما تحاول إرساله، سيسألك النظام ماذا تفعل.

    مثال:

    typescript
    نسخ الكود

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

    {  key: "about-page",  location: "local", // يبقى المحتوى فقط في قاعدة الكود الخاصة بك  content: {    title: "About Us"  }}

    autoFill (AutoFill)

    تعليمات لملء محتوى القاموس تلقائيًا من مصادر خارجية. يمكن تكوين هذا عالميًا في intlayer.config.ts أو لكل قاموس على حدة. يدعم عدة تنسيقات:

    • true: تمكين الملء التلقائي لجميع اللغات
    • string: مسار لملف واحد أو قالب يحتوي على متغيرات
    • object: مسارات ملفات لكل لغة على حدة

    أمثلة:

    json
    نسخ الكود

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

    // تمكين لجميع اللغات{  "autoFill": true}// ملف واحد{  "autoFill": "./translations/aboutPage.content.json"}// قالب يحتوي على متغيرات{  "autoFill": "/messages/{{locale}}/{{key}}/{{fileName}}.content.json"}// تكوين دقيق لكل لغة على حدة{  "autoFill": {    "en": "./translations/en/aboutPage.content.json",    "fr": "./translations/fr/aboutPage.content.json",    "es": "./translations/es/aboutPage.content.json"  }}

    المتغيرات المتاحة:

    • {{locale}} – رمز اللغة (مثل fr، es)
    • {{fileName}} – اسم الملف (مثل example)
    • {{key}} – مفتاح القاموس (مثل example)
    راجع تكوين التعبئة التلقائية في Intlayer لمزيد من المعلومات.
    priority (عدد)

    يشير إلى أولوية القاموس لحل التعارضات. عندما تحتوي عدة قواميس على نفس المفتاح، فإن القاموس ذو الرقم الأعلى في الأولوية سيتجاوز الآخرين. هذا مفيد لإدارة تسلسل المحتوى والتجاوزات.

    مثال:

    typescript
    نسخ الكود

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

    // القاموس الأساسي{  key: "welcome-message",  priority: 1,  content: { message: "Welcome!" }}// قاموس التجاوز{  key: "welcome-message",  priority: 10,  content: { message: "مرحبًا بك في خدمتنا المميزة!" }}// هذا سيتجاوز القاموس الأساسي

    خصائص نظام إدارة المحتوى

    version (سلسلة نصية)

    معرف الإصدار للقواميس البعيدة. يساعد في تتبع أي إصدار من القاموس يتم استخدامه حاليًا، وهو مفيد بشكل خاص عند العمل مع أنظمة إدارة المحتوى البعيدة.

    importMode ('static' | 'dynamic' | 'fetch')

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

    • 'static': يتم استيراد القاموس بشكل ثابت في وقت البناء. هذا هو الوضع الافتراضي.
    • 'dynamic': يتم استيراد القاموس ديناميكيًا في وقت التشغيل باستخدام واجهة برمجة تطبيقات suspense.
    • 'fetch': يتم استيراد القاموس ديناميكيًا باستخدام واجهة برمجة تطبيقات المزامنة الحية.

    إذا تم تعيينه، فإن هذه الخاصية تتجاوز importMode العام المحدد في the dictionaryproperty ofintlayer.config.ts``.

    خصائص النظام (تم إنشاؤها تلقائيًا)

    يتم إنشاء هذه الخصائص تلقائيًا بواسطة Intlayer ولا ينبغي تعديلها يدويًا:

    $schema (سلسلة نصية)

    مخطط JSON المستخدم للتحقق من صحة هيكل القاموس. يضاف تلقائيًا بواسطة Intlayer لضمان سلامة القاموس.

    id (سلسلة نصية)

    بالنسبة للقواميس البعيدة، هذا هو المعرف الفريد للقاموس في الخادم البعيد. يُستخدم لجلب وإدارة المحتوى البعيد.

    localId (LocalDictionaryId)

    معرف فريد للقواميس المحلية. يتم إنشاؤه تلقائيًا بواسطة Intlayer للمساعدة في تحديد القاموس وتحديد ما إذا كان محليًا أو بعيدًا، بالإضافة إلى موقعه.

    localIds (LocalDictionaryId[])

    بالنسبة للقواميس المدمجة، تحتوي هذه المصفوفة على معرفات جميع القواميس التي تم دمجها معًا. مفيد لتتبع مصدر المحتوى المدمج.

    filePath (string)

    مسار ملف القاموس المحلي، يشير إلى ملف .content الذي تم إنشاء القاموس منه. يساعد في تصحيح الأخطاء وتتبع المصدر.

    versions (string[])

    بالنسبة للقواميس البعيدة، تحتوي هذه المصفوفة على جميع الإصدارات المتاحة من القاموس. يساعد في تتبع الإصدارات المتوفرة للاستخدام.

    autoFilled (true)

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

    location ('distant' | 'locale')

    يشير إلى موقع القاموس:

    • 'locale': قاموس محلي (من ملفات المحتوى)
    • 'distant': قاموس بعيد (من مصدر خارجي)

    أنواع عقد المحتوى

    يوفر Intlayer عدة أنواع متخصصة من عقد المحتوى التي توسع القيم الأولية الأساسية:

    محتوى الترجمة (t)

    محتوى متعدد اللغات يختلف حسب اللغة:

    typescript
    نسخ الكود

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

    import { t } from "intlayer";// TypeScript/JavaScriptmultilingualContent: t({  en: "Welcome to our website",  fr: "Bienvenue sur notre site web",  es: "Bienvenido a nuestro sitio web",});
    راجع محتوى الترجمة (t) توثيق لمزيد من المعلومات.

    محتوى الشرط (cond)

    محتوى يتغير بناءً على شروط منطقية:

    typescript
    نسخ الكود

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

    import { cond } from "intlayer";conditionalContent: cond({  true: "User is logged in",  false: "Please log in to continue",});
    راجع محتوى الشرط (cond) توثيق لمزيد من المعلومات.

    محتوى التعداد (enu)

    المحتوى الذي يختلف بناءً على القيم المعدودة:

    typescript
    نسخ الكود

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

    import { enu } from "intlayer";statusContent: enu({  pending: "طلبك قيد الانتظار",  approved: "تمت الموافقة على طلبك",  rejected: "تم رفض طلبك",});
    راجع محتوى التعداد (enu) توثيق لمزيد من المعلومات.

    محتوى الجمع (plural)

    المحتوى الذي يختلف بناءً على قواعد الجمع:

    typescript
    نسخ الكود

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

    import { plural } from "intlayer";pluralContent: plural({  one: "One car",  other: "{{count}} cars",});
    راجع محتوى الجمع توثيق لمزيد من المعلومات.

    محتوى الإدراج (insert)

    محتوى يمكن إدراجه داخل محتويات أخرى:

    typescript
    نسخ الكود

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

    import { insert } from "intlayer";insertionContent: insert("يمكن إدراج هذا النص في أي مكان");
    راجع محتوى الإدراج (insert) توثيق لمزيد من المعلومات.

    المحتوى المتداخل (nest)

    مراجع إلى قواميس أخرى:

    typescript
    نسخ الكود

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

    import { nest } from "intlayer";nestedContent: nest("about-page");
    راجع المحتوى المتداخل (nest) توثيق لمزيد من المعلومات.

    محتوى ماركداون (md)

    محتوى نص غني بصيغة ماركداون:

    typescript
    نسخ الكود

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

    import { md } from "intlayer";markdownContent: md(  "# مرحبًا\n\nهذا نص **عريض** مع [روابط](https://example.com)");
    راجع محتوى ماركداون (md) توثيق لمزيد من المعلومات.

    محتوى HTML (html)

    محتوى HTML غني يمكنه استخدام وسوم قياسية أو مكونات مخصصة:

    typescript
    نسخ الكود

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

    import { html, file, t } from "intlayer";// HTML مضمنhtmlContent: html("<p>Hello <strong>World</strong></p>");// HTML حسب اللغة من ملفات خارجيةlocalizedHtmlContent: t({  en: html(file("./content.en.html")),  ar: html(file("./content.ar.html")),});
    راجع محتوى HTML (html) توثيق لمزيد من المعلومات.

    محتوى الجنس (gender)

    محتوى يتغير بناءً على الجنس:

    typescript
    نسخ الكود

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

    import { gender } from "intlayer";genderContent: gender({  male: "هو مطور",  female: "هي مطورة",  other: "هم مطورون",});
    راجع محتوى الجنس (gender) توثيق لمزيد من المعلومات.

    محتوى الملف (file)

    مراجع لملفات خارجية:

    typescript
    نسخ الكود

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

    import { file } from "intlayer";fileContent: file("./path/to/content.txt");
    راجع محتوى الملف (file) توثيق لمزيد من المعلومات.

    إنشاء ملفات المحتوى

    الهيكل الأساسي لملف المحتوى

    ملف المحتوى يصدر كائنًا افتراضيًا يفي بنوع Dictionary:

    typescript
    نسخ الكود

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

    // example.content.tsimport { t, cond, nest, md, insert, file } from "intlayer";export default {  key: "welcome-page",  title: "محتوى صفحة الترحيب",  description: "محتوى الصفحة الرئيسية الرئيسية بما في ذلك قسم البطل والميزات",  tags: ["صفحة", "ترحيب", "الصفحة الرئيسية"],  content: {    hero: {      title: t({        en: "Welcome to Our Platform",        fr: "Bienvenue sur Notre Plateforme",        es: "Bienvenido a Nuestra Plataforma",      }),      subtitle: t({        en: "Build amazing applications with ease",        fr: "Construisez des applications incroyables avec facilité",        es: "Construye aplicaciones increíbles con facilidad",      }),      cta: cond({        true: t({          en: "Get Started",          fr: "Commencer",          es: "Comenzar",        }),        false: t({          en: "Sign Up",          fr: "S'inscrire",          es: "Registrarse",        }),      }),    },    features: [      {        title: t({          en: "Easy to Use",          fr: "Facile à Utiliser",          es: "Fácil de Usar",        }),        description: t({          en: "Intuitive interface for all skill levels",          fr: "Interface intuitive pour tous les niveaux",          es: "Interfaz intuitiva para todos los niveles",        }),      },    ],    documentation: nest("documentation"),    readme: file("./README.md"),  },} satisfies Dictionary;

    ملف محتوى JSON

    يمكنك أيضًا إنشاء ملفات محتوى بصيغة JSON:

    json
    نسخ الكود

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

    {  "key": "welcome-page",  "title": "محتوى صفحة الترحيب",  "description": "محتوى الصفحة الرئيسية للترحيب",  "tags": ["صفحة", "ترحيب"],  "content": {    "hero": {      "title": {        "nodeType": "translation",        "translation": {          "en": "مرحبًا بكم في منصتنا",          "fr": "Bienvenue sur Notre Plateforme"        }      },      "subtitle": {        "nodeType": "translation",        "translation": {          "en": "قم ببناء تطبيقات مذهلة بسهولة",          "fr": "Construisez des applications incroyables avec facilité"        }      }    }  }}

    ملف محتوى Markdown

    markdown
    نسخ الكود

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

    ---key: welcome-pagelocale: entitle: Welcome Page Contentdescription: Content for the main welcome pagetags:  - page  - welcome---# Welcome to Our Platform## Build amazing applications with ease

    ملف محتوى YAML

    yaml
    نسخ الكود

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

    key: welcome-pagetitle: Welcome Page Contentdescription: Content for the main welcome pagelocale: "en"tags:  - page  - welcomecontent:  hero:    title: Welcome to Our Platform    subtitle: Build amazing applications with ease

    ملفات المحتوى حسب اللغة

    للقواميس حسب اللغة، حدد خاصية locale:

    typescript
    نسخ الكود

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

    // welcome-page.en.content.tsexport default {  key: "welcome-page",  locale: "en",  content: {    hero: {      title: "مرحبًا بكم في منصتنا",      subtitle: "قم ببناء تطبيقات مذهلة بسهولة",    },  },} satisfies Dictionary;
    typescript
    نسخ الكود

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

    // welcome-page.fr.content.tsexport default {  key: "welcome-page",  locale: "fr",  content: {    hero: {      title: "Bienvenue sur Notre Plateforme",      subtitle: "Construisez des applications incroyables avec facilité",    },  },} satisfies Dictionary;

    امتدادات ملفات المحتوى

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

    الامتدادات الافتراضية

    بشكل افتراضي، تراقب Intlayer جميع الملفات التي تحمل الامتدادات التالية لإعلانات المحتوى:

    • .content.json
    • .content.json5
    • .content.jsonc
    • .content.ts
    • .content.tsx
    • .content.js
    • .content.jsx
    • .content.mjs
    • .content.mjx
    • .content.cjs
    • .content.cjx
    • .content.md
    • .content.mdx
    • .content.yaml
    • .content.yml

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

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

    مفاهيم متقدمة

    دمج القواميس

    عندما تحتوي عدة قواميس على نفس المفتاح، يقوم Intlayer بدمجها تلقائيًا. يعتمد سلوك الدمج على عدة عوامل:

    • الأولوية: القواميس ذات القيم الأعلى في priority تتجاوز تلك ذات القيم الأقل
    • الملء التلقائي مقابل القاعدة: القواميس الأساسية تتجاوز القواميس المملوءة تلقائيًا
    • الموقع: القواميس المحلية تتجاوز القواميس البعيدة (عندما تكون الأولويات متساوية)

    أمان النوع

    يوفر Intlayer دعمًا كاملاً لـ TypeScript لملفات المحتوى:

    typescript
    نسخ الكود

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

    // تعريف نوع المحتوى الخاص بكinterface WelcomePageContent {  hero: {    title: string;    subtitle: string;    cta: string;  };  features: Array<{    title: string;    description: string;  }>;}// استخدامه في القاموس الخاص بكexport default {  key: "welcome-page",  content: {    // TypeScript سيوفر الإكمال التلقائي وفحص النوع    hero: {      title: "Welcome",      subtitle: "Build amazing apps",      cta: "Get Started",    },  },} satisfies Dictionary<WelcomePageContent>;

    تعشيش العقد

    يمكنك بدون مشكلة تضمين الدوال داخل دوال أخرى.

    مثال:

    src/example.content.tsx
    نسخ الكود

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

    import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
    
    const getName = async () => "John Doe";
    
    export default {
      key: "page",
      content: {
        // `getIntlayer('page','en').hiMessage` يعيد `['Hi', ' ', 'John Doe']`
        hiMessage: [
          t({
            en: "Hi",
            fr: "Salut",
            es: "Hola",
          }),
          " ",
          getName(),
        ],
        // محتوى مركب يضم شرط، تعداد، ومحتوى متعدد اللغات
        // `getIntlayer('page','en').advancedContent(true)(10)` يعيد 'Multiple items found'
        advancedContent: cond({
          true: enu({
            "0": t({
              en: "No items found",
              fr: "لم يتم العثور على أي عنصر",
              es: "لم يتم العثور على عناصر",
            }),
            "1": t({
              en: "تم العثور على عنصر واحد",
              fr: "تم العثور على عنصر واحد",
              es: "تم العثور على عنصر واحد",
            }),
            ">1": t({
              en: "تم العثور على عدة عناصر",
              fr: "تم العثور على عدة عناصر",
              es: "تم العثور على عدة عناصر",
            }),
          }),
          false: t({
            en: "لا توجد بيانات صالحة متاحة",
            fr: "لا توجد بيانات صالحة متاحة",
            es: "لا توجد بيانات صالحة متاحة",
          }),
        }),
      },
    } satisfies Dictionary;

    أفضل الممارسات

    1. تسمية المتغيرات:

      • استخدم نمط kebab-case لمفاتيح القاموس ("about-page-meta")
      • اجمع المحتوى المرتبط تحت نفس بادئة المفتاح
    2. تنظيم المحتوى:

      • احتفظ بالمحتوى المرتبط معًا في نفس القاموس
      • استخدم الكائنات المتداخلة لتنظيم هياكل المحتوى المعقدة
      • استغل الوسوم للتصنيف
      • استخدم autoFill لملء الترجمات المفقودة تلقائيًا
    3. الأداء:

      • ضبط تكوين المحتوى لتحديد نطاق الملفات المراقبة
      • استخدم القواميس الحية فقط عندما تكون التحديثات في الوقت الحقيقي ضرورية، (مثل اختبار A/B، إلخ)
      • تأكد من تمكين مكون تحويل البناء (@intlayer/swc، أو @intlayer/babel) لتحسين القاموس أثناء وقت البناء
    تكامل CI/CD
    ترجمة
    Alt+→

    في هذه الصفحة

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

      {  key: "about-page-meta",  title: "بيانات وصفية لصفحة حول",  content: { /* ... */ }}
      {  key: "about-page-meta",  description: [    "هذا القاموس يدير البيانات الوصفية لصفحة حول",    "ضع في اعتبارك الممارسات الجيدة لتحسين محركات البحث (SEO):",    "- يجب أن يكون العنوان بين 50 و 60 حرفًا",    "- يجب أن يكون الوصف بين 150 و 160 حرفًا",  ].join('\n'),  content: { /* ... */ }}
      {  key: "about-page-meta",  tags: ["metadata", "about-page", "seo"],  content: { /* ... */ }}
      {  key: "my-dictionary",  format: "icu",  content: {    message: "Hello {name}, you have {count, plural, one {# message} other {# messages}}"  }}
      // قاموس حسب اللغة{  "key": "about-page",  "locale": "en",  "content": {    "title": "About Us", // تصبح هذه عقدة ترجمة للغة 'en'    "description": "Learn more about our company"  }}
      import { z } from "zod";export default {  schemas: {    "seo-metadata": z.object({      title: z.string().min(50).max(60),      description: z.string().min(150).max(160),    }),  },};
      import { type Dictionary } from "intlayer";const aboutPageMetaContent = {  key: "about-page-meta",  schema: "seo-metadata",  content: {    title: "About Our Company - Learn More About Us",    description: "Discover our company's mission, values, and team.",  },} satisfies Dictionary;export default aboutPageMetaContent;
      {  key: "about-page",  location: "local", // يبقى المحتوى فقط في قاعدة الكود الخاصة بك  content: {    title: "About Us"  }}
      // تمكين لجميع اللغات{  "autoFill": true}// ملف واحد{  "autoFill": "./translations/aboutPage.content.json"}// قالب يحتوي على متغيرات{  "autoFill": "/messages/{{locale}}/{{key}}/{{fileName}}.content.json"}// تكوين دقيق لكل لغة على حدة{  "autoFill": {    "en": "./translations/en/aboutPage.content.json",    "fr": "./translations/fr/aboutPage.content.json",    "es": "./translations/es/aboutPage.content.json"  }}
      // القاموس الأساسي{  key: "welcome-message",  priority: 1,  content: { message: "Welcome!" }}// قاموس التجاوز{  key: "welcome-message",  priority: 10,  content: { message: "مرحبًا بك في خدمتنا المميزة!" }}// هذا سيتجاوز القاموس الأساسي
      import { t } from "intlayer";// TypeScript/JavaScriptmultilingualContent: t({  en: "Welcome to our website",  fr: "Bienvenue sur notre site web",  es: "Bienvenido a nuestro sitio web",});
      import { cond } from "intlayer";conditionalContent: cond({  true: "User is logged in",  false: "Please log in to continue",});
      import { enu } from "intlayer";statusContent: enu({  pending: "طلبك قيد الانتظار",  approved: "تمت الموافقة على طلبك",  rejected: "تم رفض طلبك",});
      import { plural } from "intlayer";pluralContent: plural({  one: "One car",  other: "{{count}} cars",});
      import { insert } from "intlayer";insertionContent: insert("يمكن إدراج هذا النص في أي مكان");
      import { nest } from "intlayer";nestedContent: nest("about-page");
      import { md } from "intlayer";markdownContent: md(  "# مرحبًا\n\nهذا نص **عريض** مع [روابط](https://example.com)");
      import { html, file, t } from "intlayer";// HTML مضمنhtmlContent: html("<p>Hello <strong>World</strong></p>");// HTML حسب اللغة من ملفات خارجيةlocalizedHtmlContent: t({  en: html(file("./content.en.html")),  ar: html(file("./content.ar.html")),});
      import { gender } from "intlayer";genderContent: gender({  male: "هو مطور",  female: "هي مطورة",  other: "هم مطورون",});
      import { file } from "intlayer";fileContent: file("./path/to/content.txt");
      // example.content.tsimport { t, cond, nest, md, insert, file } from "intlayer";export default {  key: "welcome-page",  title: "محتوى صفحة الترحيب",  description: "محتوى الصفحة الرئيسية الرئيسية بما في ذلك قسم البطل والميزات",  tags: ["صفحة", "ترحيب", "الصفحة الرئيسية"],  content: {    hero: {      title: t({        en: "Welcome to Our Platform",        fr: "Bienvenue sur Notre Plateforme",        es: "Bienvenido a Nuestra Plataforma",      }),      subtitle: t({        en: "Build amazing applications with ease",        fr: "Construisez des applications incroyables avec facilité",        es: "Construye aplicaciones increíbles con facilidad",      }),      cta: cond({        true: t({          en: "Get Started",          fr: "Commencer",          es: "Comenzar",        }),        false: t({          en: "Sign Up",          fr: "S'inscrire",          es: "Registrarse",        }),      }),    },    features: [      {        title: t({          en: "Easy to Use",          fr: "Facile à Utiliser",          es: "Fácil de Usar",        }),        description: t({          en: "Intuitive interface for all skill levels",          fr: "Interface intuitive pour tous les niveaux",          es: "Interfaz intuitiva para todos los niveles",        }),      },    ],    documentation: nest("documentation"),    readme: file("./README.md"),  },} satisfies Dictionary;
      {  "key": "welcome-page",  "title": "محتوى صفحة الترحيب",  "description": "محتوى الصفحة الرئيسية للترحيب",  "tags": ["صفحة", "ترحيب"],  "content": {    "hero": {      "title": {        "nodeType": "translation",        "translation": {          "en": "مرحبًا بكم في منصتنا",          "fr": "Bienvenue sur Notre Plateforme"        }      },      "subtitle": {        "nodeType": "translation",        "translation": {          "en": "قم ببناء تطبيقات مذهلة بسهولة",          "fr": "Construisez des applications incroyables avec facilité"        }      }    }  }}
      ---key: welcome-pagelocale: entitle: Welcome Page Contentdescription: Content for the main welcome pagetags:  - page  - welcome---# Welcome to Our Platform## Build amazing applications with ease
      key: welcome-pagetitle: Welcome Page Contentdescription: Content for the main welcome pagelocale: "en"tags:  - page  - welcomecontent:  hero:    title: Welcome to Our Platform    subtitle: Build amazing applications with ease
      // welcome-page.en.content.tsexport default {  key: "welcome-page",  locale: "en",  content: {    hero: {      title: "مرحبًا بكم في منصتنا",      subtitle: "قم ببناء تطبيقات مذهلة بسهولة",    },  },} satisfies Dictionary;
      // welcome-page.fr.content.tsexport default {  key: "welcome-page",  locale: "fr",  content: {    hero: {      title: "Bienvenue sur Notre Plateforme",      subtitle: "Construisez des applications incroyables avec facilité",    },  },} satisfies Dictionary;
      // تعريف نوع المحتوى الخاص بكinterface WelcomePageContent {  hero: {    title: string;    subtitle: string;    cta: string;  };  features: Array<{    title: string;    description: string;  }>;}// استخدامه في القاموس الخاص بكexport default {  key: "welcome-page",  content: {    // TypeScript سيوفر الإكمال التلقائي وفحص النوع    hero: {      title: "Welcome",      subtitle: "Build amazing apps",      cta: "Get Started",    },  },} satisfies Dictionary<WelcomePageContent>;