JSPM

pl-declension

0.1.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7
  • Score
    100M100P100Q22960F
  • License MIT

Zero-dependency utility for Polish noun declension. Provides simple pluralization rules for i18n and dynamic UI strings.

Package Exports

  • pl-declension

Readme

pl-declension

npm version npm downloads

Większość bibliotek do pluralizacji działa na schemacie 1 item, 2 items. W Polsce mamy:

  • 1 komentarz
  • 2 komentarze
  • 5 komentarzy

Ta paczka dostarcza jedną małą funkcję: declination(count, [one, few, many]).

Instalacja

npm i pl-declension

Użycie

import { declination } from 'pl-declension';

const n = 5;
const label = declination(n, ['komentarz', 'komentarze', 'komentarzy']);

console.log(`${n} ${label}`);

Możesz też przekazać formy jako obiekt:

import { declination } from 'pl-declension';

const n = 2;
const label = declination(n, { one: 'komentarz', few: 'komentarze', many: 'komentarzy' });

API

declination(count, forms)

  • count: number | bigint
  • forms:
    • tablica: [one, few, many]
    • albo obiekt: { one, few, many }

Zwraca jedną z form w zależności od liczby.

format(count, forms, options?)

Zwraca gotowy string, domyślnie z liczbą:

import { format } from 'pl-declension';

format(5, ['komentarz', 'komentarze', 'komentarzy']);
// => "5 komentarzy"

format(5, ['komentarz', 'komentarze', 'komentarzy'], { includeNumber: false });
// => "komentarzy"

Opcje:

  • includeNumber?: boolean (domyślnie true)
  • separator?: string (domyślnie spacja)
  • number?: (count) => string | number (opcjonalny formatter liczby)

Przykład formattera:

import { format } from 'pl-declension';

format(10000, ['komentarz', 'komentarze', 'komentarzy'], {
  number: (n) => Number(n).toLocaleString('pl-PL')
});
// => "10 000 komentarzy" (zależnie od ustawień środowiska)

formIndex(count)

Zwraca indeks formy: 0 | 1 | 2.

Przydatne, jeśli wolisz sam wybierać z tablicy:

import { formIndex } from 'pl-declension';

const forms = ['komentarz', 'komentarze', 'komentarzy'];
const label = forms[formIndex(22)];

createDeclension(forms)

Tworzy wyspecjalizowaną funkcję dla konkretnych form (wygodne w UI):

import { createDeclension } from 'pl-declension';

const comments = createDeclension(['komentarz', 'komentarze', 'komentarzy']);

comments(1); // "komentarz"
comments(2); // "komentarze"
comments(5); // "komentarzy"

assertForms(forms)

Waliduje i normalizuje formy do obiektu { one, few, many }. Przydatne, jeśli chcesz walidować na starcie aplikacji.

Aliasy

Jeśli wolisz inną nazwę:

  • pluralizePl (alias declination)
  • decline (alias declination)

Reguły

  • one: tylko dla 1
  • few: dla 2-4, z wyjątkiem 12-14
  • many: dla reszty (w tym 0)

Dla liczb niecałkowitych (np. 1.5) zwracana jest forma many.

Intl.PluralRules

W JavaScripcie istnieje Intl.PluralRules, ale w praktyce i tak potrzebujesz mapowania na własne formy i trzech wariantów dla języka polskiego. Ta paczka celuje w prosty, powtarzalny przypadek front-endowy: podajesz liczbę i trzy formy, dostajesz string.

Release

Konwencja tagów:

  • v0.1.0, v0.1.1, ...

Benchmark

Możesz odpalić prosty benchmark lokalnie:

npm run bench

Przykłady

import { format } from 'pl-declension';

const n = 22;
console.log(format(n, ['komentarz', 'komentarze', 'komentarzy']));
// => "22 komentarze"
import { format } from 'pl-declension';

const n = 12;
console.log(format(n, ['komentarz', 'komentarze', 'komentarzy']));
// => "12 komentarzy"