\n\n\n```\n\n \n \n\nTo use plural content in Svelte components, retrieve it via the `useIntlayer` hook and call it with a count. The store is accessed with `$`. Here's an example:\n\n```svelte fileName=\"**/*.svelte\"\n\n\n
\n

{$content.totalOpenings(count)}

\n
\n```\n\n
\n \n\nTo use plural content in Preact components, retrieve it via the `useIntlayer` hook and call it with a count. Here's an example:\n\n```tsx fileName=\"**/*.tsx\" codeFormat={[\"typescript\", \"esm\"]}\nimport type { FC } from \"preact\";\nimport { useIntlayer } from \"preact-intlayer\";\n\nconst OpeningsComponent: FC<{ count: number }> = ({ count }) => {\n const { totalOpenings } = useIntlayer(\"total_openings\");\n\n return (\n
\n

{totalOpenings(count)}

\n
\n );\n};\n\nexport default OpeningsComponent;\n```\n\n
\n \n\nTo use plural content in SolidJS components, retrieve it via the `useIntlayer` hook and call it with a count. Here's an example:\n\n```tsx fileName=\"**/*.tsx\" codeFormat={[\"typescript\", \"esm\"]}\nimport type { Component } from \"solid-js\";\nimport { useIntlayer } from \"solid-intlayer\";\n\nconst OpeningsComponent: Component<{ count: number }> = (props) => {\n const { totalOpenings } = useIntlayer(\"total_openings\");\n\n return (\n
\n

{totalOpenings(props.count)}

\n
\n );\n};\n\nexport default OpeningsComponent;\n```\n\n
\n \n\nTo use plural content in Angular components, retrieve it via the `useIntlayer` hook and call it with a count. Here's an example:\n\n```typescript fileName=\"app.component.ts\" codeFormat=\"typescript\"\nimport { Component, Input } from \"@angular/core\";\nimport { useIntlayer } from \"angular-intlayer\";\n\n@Component({\n selector: \"app-openings\",\n template: `\n
\n

{{ content().totalOpenings(count) }}

\n
\n `,\n})\nexport class OpeningsComponent {\n @Input() count!: number;\n\n content = useIntlayer(\"total_openings\");\n}\n```\n\n
\n \n\nTo use plural content with `vanilla-intlayer`, retrieve it via the `useIntlayer` hook and call it with a count. Here's an example:\n\n```typescript fileName=\"**/*.ts\" codeFormat={[\"typescript\", \"esm\"]}\nimport { installIntlayer, useIntlayer } from \"vanilla-intlayer\";\n\ninstallIntlayer();\n\nconst content = useIntlayer(\"total_openings\").onChange((newContent) => {\n document.getElementById(\"openings\")!.textContent =\n newContent.totalOpenings(5);\n});\n\n// Initial render\ndocument.getElementById(\"openings\")!.textContent = content.totalOpenings(5);\n```\n\n \n\n\n## إعداد محتوى الجمع\n\nلإعداد محتوى الجمع في مشروع Intlayer الخاص بك، قم بإنشاء وحدة محتوى تستخدم مساعد `plural`. فئة `other` مطلوبة وتستخدم كبديل عندما لا تحدد اللغة فئة أكثر تحديدًا.\n\n```typescript fileName=\"**/*.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { plural, t, type Dictionary } from \"intlayer\";\n\nconst openingsContent = {\n key: \"total_openings\",\n content: {\n totalOpenings: t({\n en: plural({\n one: \"{{count}} opening\",\n other: \"{{count}} openings\",\n }),\n ar: plural({\n zero: \"لا توجد وظائف شاغرة\",\n one: \"وظيفة شاغرة واحدة\",\n two: \"وظيفتان شاغرتان\",\n few: \"{{count}} وظائف شاغرة\",\n many: \"{{count}} وظيفة شاغرة\",\n other: \"{{count}} وظيفة شاغرة\",\n }),\n }),\n },\n} satisfies Dictionary;\n\nexport default openingsContent;\n```\n\n```json fileName=\"**/*.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"total_openings\",\n \"content\": {\n \"totalOpenings\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": {\n \"nodeType\": \"plural\",\n \"plural\": {\n \"one\": \"{{count}} opening\",\n \"other\": \"{{count}} openings\"\n }\n },\n \"ar\": {\n \"nodeType\": \"plural\",\n \"plural\": {\n \"zero\": \"لا توجد وظائف شاغرة\",\n \"one\": \"وظيفة شاغرة واحدة\",\n \"two\": \"وظيفتان شاغرتان\",\n \"few\": \"{{count}} وظائف شاغرة\",\n \"many\": \"{{count}} وظيفة شاغرة\",\n \"other\": \"{{count}} وظيفة شاغرة\"\n }\n }\n }\n }\n }\n}\n```\n\n> الفئات المدعومة هي `zero` و `one` و `two` و `few` و `many` و `other`. تحتاج فقط إلى التصريح عن الفئات التي تستخدمها لغتك المستهدفة, يعود Intlayer إلى `other` عندما لا تتطابق أي فئة محددة.\n>\n> يتم استبدال العنصر النائب `{{count}}` تلقائيًا بالعدد الذي تمرره في وقت التشغيل. يمكنك تضمين عناصر نائبة أخرى أيضًا (انظر [العناصر النائبة المخصصة](#custom-placeholders) أدناه).\n\n## استخدام محتوى الجمع مع React Intlayer\n\nلاستخدام محتوى الجمع داخل مكون React، قم باسترجاعه عبر خطاف `useIntlayer` واستدعه مع العدد. يتم دمج اللغة النشطة والعدد لاختيار فئة CLDR المطابقة.\n\n```tsx fileName=\"**/*.tsx\" codeFormat={[\"typescript\", \"esm\"]}\nimport type { FC } from \"react\";\nimport { useIntlayer } from \"react-intlayer\";\n\nconst OpeningsComponent: FC<{ count: number }> = ({ count }) => {\n const { totalOpenings } = useIntlayer(\"total_openings\");\n\n return (\n
\n {/* باللغة الإنجليزية: */}\n {/* count=0 → \"0 openings\" (other) */}\n {/* count=1 → \"1 opening\" (one) */}\n {/* count=2 → \"2 openings\" (other) */}\n {/* count=21 → \"21 openings\" (other) */}\n

{totalOpenings(count)}

\n
\n );\n};\n\nexport default OpeningsComponent;\n```\n\nيمكنك استدعاء الوظيفة المرجعة بطريقتين متكافئتين:\n\n```tsx\ntotalOpenings(21); // اختصار: العدد فقط\ntotalOpenings({ count: 21 }); // النموذج الصريح\n```\n\n## العناصر النائبة المخصصة\n\nيمكن أن تتضمن سلاسل الجمع عناصر نائبة أخرى غير `{{count}}`. قم بتمريرها في شكل كائن بجانب `count`:\n\n```typescript fileName=\"**/*.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { plural, type Dictionary } from \"intlayer\";\n\nconst inboxContent = {\n key: \"inbox_summary\",\n content: {\n summary: plural({\n one: \"{{name}}، لديك رسالة جديدة واحدة\",\n other: \"{{name}}، لديك {{count}} رسائل جديدة\",\n }),\n },\n} satisfies Dictionary;\n\nexport default inboxContent;\n```\n\n```tsx fileName=\"**/*.tsx\" codeFormat={[\"typescript\", \"esm\"]}\nconst { summary } = useIntlayer(\"inbox_summary\");\n\nsummary({ count: 1, name: \"Alice\" });\n// → \"Alice، لديك رسالة جديدة واحدة\"\n\nsummary({ count: 7, name: \"Alice\" });\n// → \"Alice، لديك 7 رسائل جديدة\"\n```\n\n## فئات CLDR في لمحة\n\nتستخدم اللغات المختلفة مجموعات فرعية مختلفة من فئات CLDR. بعض الحالات الشائعة:\n\n| اللغة | الفئات المستخدمة |\n| ------------------- | ------------------------------------------------- |\n| الإنجليزية (`en`) | `one` ، `other` |\n| الفرنسية (`fr`) | `one` ، `many` ، `other` |\n| الروسية (`ru`) | `one` ، `few` ، `many` ، `other` |\n| البولندية (`pl`) | `one` ، `few` ، `many` ، `other` |\n| العربية (`ar`) | `zero` ، `one` ، `two` ، `few` ، `many` ، `other` |\n| اليابانية / الصينية | `other` فقط |\n\nلا تحتاج إلى حفظ هذا, صرح عن الفئات التي لديك ترجمات لها، وسيعود Intlayer إلى `other` عند الحاجة.\n\n## قيود\n\nمقارنة بالعقد الأخرى، لا يمكن تداخل العقدة `plural` مع العقد الفرعية حتى الآن.\n\nمثال:\n\nصالح:\n\n```ts\n totalOpenings: t({\n en: plural({\n one: \"{{count}} opening\",\n other: \"{{count}} openings\",\n }),\n fr: plural({\n one: \"{{count}} offre\",\n other: \"{{count}} offres\",\n }),\n }),\n```\n\nغير صالح:\n\n```ts\ntotalOpenings: plural({\n one: t({\n en: \"{{count}} opening\",\n fr: \"{{count}} offre\",\n }),\n other: t({\n en: \"{{count}} openings\",\n fr: \"{{count}} offres\",\n }),\n}),\n```\n\n## موارد إضافية\n\nلمزيد من المعلومات التفصيلية حول التكوين والاستخدام، راجع الموارد التالية:\n\n- [توثيق التعداد (Enumeration)](/ar/doc/concept/content/enumeration)\n- [توثيق الإدراج (Insertion)](/ar/doc/concept/content/insertion)\n- [توثيق Intlayer CLI](/ar/doc/concept/cli)\n- [توثيق React Intlayer](/ar/doc/environment/create-react-app)\n- [توثيق Next Intlayer](/ar/doc/environment/nextjs/15)\n\nتقدم هذه الموارد مزيدًا من الرؤى حول إعداد واستخدام Intlayer عبر بيئات وأطر عمل مختلفة.\n","description":"تعرف على كيفية التصريح عن محتوى الجمع المتوافق مع اللغة (بناءً على CLDR) واستخدامه في موقعك الإلكتروني متعدد اللغات. اتبع الخطوات في هذه التوثيق عبر الإنترنت لإعداد مشروعك في بضع دقائق.","url":"https://intlayer.org/ar/doc/concept/content/plural","datePublished":"2026-05-04","dateModified":"2026-05-04","version":"8.8.0","keywords":"الجمع, الجمع والتثنية, CLDR, تدويل, توثيق, Intlayer, Next.js, JavaScript, React","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"المطورون ومديرو المحتوى"}}
    المؤلف:
    إنشاء:2026-05-04آخر تحديث:2026-05-04

    محتوى الجمع / الجمع في Intlayer

    كيف يعمل الجمع

    في Intlayer، يتم تحقيق محتوى الجمع من خلال وظيفة plural التي تربط فئات الجمع في CLDR, zero و one و two و few و many و other, بالمحتوى المقابل لها. يتم اختيار الفئة الصحيحة تلقائيًا بناءً على اللغة النشطة وقيمة العدد، باستخدام واجهة برمجة تطبيقات Intl.PluralRules المدمجة في النظام الأساسي.

    على عكس enu، الذي يختار المحتوى بناءً على نطاقات رقمية تحددها بنفسك، تفوض وظيفة plural الاختيار لقواعد CLDR. وهذا ما يجعلها قابلة للتوسع للغات ذات قواعد الجمع المعقدة, مثل الروسية أو البولندية أو العربية أو الويلزية, دون الحاجة إلى كتابة منطق الحساب يدويًا.

    متى تستخدم plural مقابل enu

    To use plural content inside a React component, retrieve it via the useIntlayer hook and call it with a count. The active locale and the count are combined to pick the matching CLDR category.

    **/*.tsx
    import type { FC } from "react";
    import { useIntlayer } from "react-intlayer";
    
    const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
    const { totalOpenings } = useIntlayer("total_openings");
    
    return (
      <div>
        <p>{totalOpenings(count)}</p>
      </div>
    );
    };
    
    export default OpeningsComponent;

    إعداد محتوى الجمع

    لإعداد محتوى الجمع في مشروع Intlayer الخاص بك، قم بإنشاء وحدة محتوى تستخدم مساعد plural. فئة other مطلوبة وتستخدم كبديل عندما لا تحدد اللغة فئة أكثر تحديدًا.

    **/*.content.ts
    import { plural, t, type Dictionary } from "intlayer";
    
    const openingsContent = {
      key: "total_openings",
      content: {
        totalOpenings: t({
          en: plural({
            one: "{{count}} opening",
            other: "{{count}} openings",
          }),
          ar: plural({
            zero: "لا توجد وظائف شاغرة",
            one: "وظيفة شاغرة واحدة",
            two: "وظيفتان شاغرتان",
            few: "{{count}} وظائف شاغرة",
            many: "{{count}} وظيفة شاغرة",
            other: "{{count}} وظيفة شاغرة",
          }),
        }),
      },
    } satisfies Dictionary;
    
    export default openingsContent;

    الفئات المدعومة هي zero و one و two و few و many و other. تحتاج فقط إلى التصريح عن الفئات التي تستخدمها لغتك المستهدفة, يعود Intlayer إلى other عندما لا تتطابق أي فئة محددة.

    يتم استبدال العنصر النائب {{count}} تلقائيًا بالعدد الذي تمرره في وقت التشغيل. يمكنك تضمين عناصر نائبة أخرى أيضًا (انظر العناصر النائبة المخصصة أدناه).

    استخدام محتوى الجمع مع React Intlayer

    لاستخدام محتوى الجمع داخل مكون React، قم باسترجاعه عبر خطاف useIntlayer واستدعه مع العدد. يتم دمج اللغة النشطة والعدد لاختيار فئة CLDR المطابقة.

    **/*.tsx
    import type { FC } from "react";
    import { useIntlayer } from "react-intlayer";
    
    const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
      const { totalOpenings } = useIntlayer("total_openings");
    
      return (
        <div>
          {/* باللغة الإنجليزية:                                 */}
          {/*  count=0  → "0 openings"   (other)           */}
          {/*  count=1  → "1 opening"    (one)             */}
          {/*  count=2  → "2 openings"   (other)           */}
          {/*  count=21 → "21 openings"  (other)           */}
          <p>{totalOpenings(count)}</p>
        </div>
      );
    };
    
    export default OpeningsComponent;

    يمكنك استدعاء الوظيفة المرجعة بطريقتين متكافئتين:

    tsx
    totalOpenings(21); // اختصار: العدد فقطtotalOpenings({ count: 21 }); // النموذج الصريح

    العناصر النائبة المخصصة

    يمكن أن تتضمن سلاسل الجمع عناصر نائبة أخرى غير {{count}}. قم بتمريرها في شكل كائن بجانب count:

    **/*.content.ts
    import { plural, type Dictionary } from "intlayer";
    
    const inboxContent = {
      key: "inbox_summary",
      content: {
        summary: plural({
          one: "{{name}}، لديك رسالة جديدة واحدة",
          other: "{{name}}، لديك {{count}} رسائل جديدة",
        }),
      },
    } satisfies Dictionary;
    
    export default inboxContent;
    **/*.tsx
    const { summary } = useIntlayer("inbox_summary");
    
    summary({ count: 1, name: "Alice" });
    // → "Alice، لديك رسالة جديدة واحدة"
    
    summary({ count: 7, name: "Alice" });
    // → "Alice، لديك 7 رسائل جديدة"

    فئات CLDR في لمحة

    تستخدم اللغات المختلفة مجموعات فرعية مختلفة من فئات CLDR. بعض الحالات الشائعة:

    اللغة الفئات المستخدمة
    الإنجليزية (en) one ، other
    الفرنسية (fr) one ، many ، other
    الروسية (ru) one ، few ، many ، other
    البولندية (pl) one ، few ، many ، other
    العربية (ar) zero ، one ، two ، few ، many ، other
    اليابانية / الصينية other فقط

    لا تحتاج إلى حفظ هذا, صرح عن الفئات التي لديك ترجمات لها، وسيعود Intlayer إلى other عند الحاجة.

    قيود

    مقارنة بالعقد الأخرى، لا يمكن تداخل العقدة plural مع العقد الفرعية حتى الآن.

    مثال:

    صالح:

    ts
        totalOpenings: t({      en: plural({        one: "{{count}} opening",        other: "{{count}} openings",      }),      fr: plural({        one: "{{count}} offre",        other: "{{count}} offres",      }),    }),

    غير صالح:

    ts
    totalOpenings: plural({  one: t({    en: "{{count}} opening",    fr: "{{count}} offre",  }),  other: t({    en: "{{count}} openings",    fr: "{{count}} offres",  }),}),

    موارد إضافية

    لمزيد من المعلومات التفصيلية حول التكوين والاستخدام، راجع الموارد التالية:

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