--- createdAt: 2026-05-04 updatedAt: 2026-05-04 title: Liczba mnoga description: Dowiedz się, jak deklarować i używać treści w liczbie mnogiej zależnych od języka (opartych na CLDR) w swojej wielojęzycznej witrynie. Postępuj zgodnie z krokami w tej dokumentacji online, aby skonfigurować swój projekt w kilka minut. keywords: - Liczba mnoga - Pluralizacja - CLDR - Internacjonalizacja - Dokumentacja - Intlayer - Next.js - JavaScript - React slugs: - doc - concept - content - plural history: - version: 8.8.0 date: 2026-05-04 changes: "Init history" --- # 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`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules). W przeciwieństwie do [`enu`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/enumeration.md), 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. ```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]} 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; ``` ```json fileName="**/*.content.json" contentDeclarationFormat="json" { "$schema": "https://intlayer.org/schema.json", "key": "total_openings", "content": { "totalOpenings": { "nodeType": "translation", "translation": { "en": { "nodeType": "plural", "plural": { "one": "{{count}} opening", "other": "{{count}} openings" } }, "pl": { "nodeType": "plural", "plural": { "one": "{{count}} wolne miejsce", "few": "{{count}} wolne miejsca", "many": "{{count}} wolnych miejsc", "other": "{{count}} wolnych miejsc" } } } } } } ``` > 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](#custom-placeholders) 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 fileName="**/*.tsx" codeFormat={["typescript", "esm"]} import type { FC } from "react"; import { useIntlayer } from "react-intlayer"; const OpeningsComponent: FC<{ count: number }> = ({ count }) => { const { totalOpenings } = useIntlayer("total_openings"); return (
{/* W języku angielskim: */} {/* count=0 → "0 openings" (other) */} {/* count=1 → "1 opening" (one) */} {/* count=2 → "2 openings" (other) */} {/* count=21 → "21 openings" (other) */}

{totalOpenings(count)}

); }; export default OpeningsComponent; ``` Możesz wywołać zwróconą funkcję na dwa równoważne sposoby: ```tsx totalOpenings(21); // skrót: tylko licznik totalOpenings({ 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`: ```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]} 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 fileName="**/*.tsx" codeFormat={["typescript", "esm"]} 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: { en: "{{count}} opening", fr: "{{count}} offre", }, other: { 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: - [Dokumentacja wyliczeń (Enumeration)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/enumeration.md) - [Dokumentacja wstawiania (Insertion)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/insertion.md) - [Dokumentacja Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/cli/index.md) - [Dokumentacja React Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_create_react_app.md) - [Dokumentacja Next Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_15.md) Zasoby te oferują dalszy wgląd w konfigurację i użytkowanie Intlayer w różnych środowiskach i frameworkach.