Autor:
    Data utworzenia:2026-05-04Ostatnia aktualizacja:2026-05-04

    Treści w liczbie mnogiej / Liczba mnoga w Intlayer

    Jak działa liczba mnoga

    W Intlayer treści w liczbie mnogiej są realizowane za pomocą funkcji plural, która mapuje kategorie liczby mnogiej CLDR, zero, one, two, few, many, other, do odpowiadającej im treści. Prawidłowa kategoria jest wybierana automatycznie na podstawie aktywnego języka i wartości licznika, przy użyciu wbudowanego w platformę API Intl.PluralRules.

    W przeciwieństwie do enu, który wybiera treści na podstawie zdefiniowanych przez Ciebie zakresów liczbowych, plural deleguje wybór do reguł CLDR. To właśnie sprawia, że jest on skalowalny dla języków o złożonych regułach pluralizacji, takich jak polski, rosyjski, arabski czy walijski, bez konieczności ręcznego pisania logiki modulo.

    Kiedy używać plural vs 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;

    Konfigurowanie treści w liczbie mnogiej

    Aby skonfigurować treści w liczbie mnogiej w swoim projekcie Intlayer, utwórz moduł treści korzystający z pomocnika plural. Kategoria other jest wymagana i służy jako rezerwowa, gdy dany język nie definiuje bardziej szczegółowej kategorii.

    **/*.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",
          }),
          pl: plural({
            one: "{{count}} wolne miejsce",
            few: "{{count}} wolne miejsca",
            many: "{{count}} wolnych miejsc",
            other: "{{count}} wolnych miejsc",
          }),
        }),
      },
    } satisfies Dictionary;
    
    export default openingsContent;

    Obsługiwane kategorie to zero, one, two, few, many, other. Musisz zadeklarować tylko te kategorie, których używa Twój język docelowy, Intlayer powraca do other, gdy żadna konkretna kategoria nie pasuje.

    Symbol zastępczy {{count}} jest automatycznie zastępowany wartością licznika przekazaną w czasie wykonywania. Możesz również dołączyć inne symbole zastępcze (patrz Niestandardowe symbole zastępcze poniżej).

    Używanie treści w liczbie mnogiej z React Intlayer

    Aby użyć treści w liczbie mnogiej w komponencie React, pobierz ją za pomocą hooka useIntlayer i wywołaj z licznikiem. Aktywny język i licznik są łączone, aby wybrać pasującą kategorię 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>
          {/* W języku angielskim:                               */}
          {/*  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;

    Możesz wywołać zwróconą funkcję na dwa równoważne sposoby:

    tsx
    totalOpenings(21); // skrót: tylko liczniktotalOpenings({ count: 21 }); // forma jawna

    Niestandardowe symbole zastępcze

    Ciągi znaków w liczbie mnogiej mogą zawierać symbole zastępcze inne niż {{count}}. Przekaż je w formie obiektu obok count:

    **/*.content.ts
    import { plural, type Dictionary } from "intlayer";
    
    const inboxContent = {
      key: "inbox_summary",
      content: {
        summary: plural({
          one: "{{name}}, masz {{count}} nową wiadomość",
          few: "{{name}}, masz {{count}} nowe wiadomości",
          many: "{{name}}, masz {{count}} nowych wiadomości",
          other: "{{name}}, masz {{count}} nowych wiadomości",
        }),
      },
    } satisfies Dictionary;
    
    export default inboxContent;
    **/*.tsx
    const { summary } = useIntlayer("inbox_summary");
    
    summary({ count: 1, name: "Alice" });
    // → "Alice, masz 1 nową wiadomość"
    
    summary({ count: 7, name: "Alice" });
    // → "Alice, masz 7 nowych wiadomości"

    Kategorie CLDR w skrócie

    Różne języki używają różnych podzbiorów kategorii CLDR. Kilka typowych przypadków:

    Język Używane kategorie
    Angielski (en) one, other
    Francuski (fr) one, many, other
    Rosyjski (ru) one, few, many, other
    Polski (pl) one, few, many, other
    Arabski (ar) zero, one, two, few, many, other
    Japoński / Chiński tylko other

    Nie musisz tego zapamiętywać, zadeklaruj kategorie, dla których masz tłumaczenia, a Intlayer w razie potrzeby powróci do other.

    Ograniczenie

    W przeciwieństwie do innych węzłów, węzeł plural nie może być jeszcze zagnieżdżany z węzłami podrzędnymi.

    Przykład:

    Prawidłowe:

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

    Nieprawidłowe:

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

    Dodatkowe zasoby

    Aby uzyskać bardziej szczegółowe informacje na temat konfiguracji i użytkowania, zapoznaj się z następującymi zasobami:

    Zasoby te oferują dalszy wgląd w konfigurację i użytkowanie Intlayer w różnych środowiskach i frameworkach.