\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 uk: plural({\n one: \"{{count}} вакансія\",\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 \"uk\": {\n \"nodeType\": \"plural\",\n \"plural\": {\n \"one\": \"{{count}} вакансія\",\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}}, у вас {{count}} нове повідомлення\",\n few: \"{{name}}, у вас {{count}} нові повідомлення\",\n many: \"{{name}}, у вас {{count}} нових повідомлень\",\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, у вас 1 нове повідомлення\"\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| Українська (`uk`) | `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)](/uk/doc/concept/content/enumeration)\n- [Документація по вставці (Insertion)](/uk/doc/concept/content/insertion)\n- [Документація по Intlayer CLI](/uk/doc/concept/cli)\n- [Документація React Intlayer](/uk/doc/environment/create-react-app)\n- [Документація Next Intlayer](/uk/doc/environment/nextjs/15)\n\nЦі ресурси пропонують додаткову інформацію про налаштування та використання Intlayer у різних середовищах та фреймворках.\n","description":"Дізнайтеся, як оголошувати та використовувати контент з урахуванням множини (на основі CLDR) на вашому багатомовному веб-сайті. Дотримуйтесь інструкцій у цій онлайн-документації, щоб налаштувати свій проект за кілька хвилин.","url":"https://intlayer.org/uk/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, з відповідним контентом. Правильна категорія вибирається автоматично на основі активної локалі та значення лічильника за допомогою вбудованого в платформу API 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",
          }),
          uk: plural({
            one: "{{count}} вакансія",
            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}}, у вас {{count}} нове повідомлення",
          few: "{{name}}, у вас {{count}} нові повідомлення",
          many: "{{name}}, у вас {{count}} нових повідомлень",
          other: "{{name}}, у вас {{count}} нових повідомлень",
        }),
      },
    } satisfies Dictionary;
    
    export default inboxContent;
    **/*.tsx
    const { summary } = useIntlayer("inbox_summary");
    
    summary({ count: 1, name: "Alice" });
    // → "Alice, у вас 1 нове повідомлення"
    
    summary({ count: 7, name: "Alice" });
    // → "Alice, у вас 7 нових повідомлень"

    Категорії CLDR з першого погляду

    Різні мови використовують різні підмножини категорій CLDR. Кілька поширених випадків:

    Мова Використовувані категорії
    Англійська (en) one, other
    Французька (fr) one, many, other
    Російська (ru) one, few, many, other
    Українська (uk) 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 у різних середовищах та фреймворках.