Creation:2026-05-04Last update: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

    Przypadek użycia Pomocnik
    Formy gramatyczne liczby mnogiej zależne od języka (jedno jabłko / dwa jabłka / 5 jabłek) plural
    Niestandardowe zakresy liczbowe (<5, >=10) lub przedziały spoza CLDR enu

    Jeśli Twoim celem jest tylko język angielski (który ma tylko one / other), oba rozwiązania zadziałają. Dla każdego języka z rozróżnieniem na few / many / two, preferuj plural.

    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.