pl-declension
v0.1.1
Published
Zero-dependency utility for Polish noun declension. Provides simple pluralization rules for i18n and dynamic UI strings.
Maintainers
Readme
pl-declension
Większość bibliotek do pluralizacji działa na schemacie 1 item, 2 items. W Polsce mamy:
1 komentarz2 komentarze5 komentarzy
Ta paczka dostarcza jedną małą funkcję: declination(count, [one, few, many]).
Instalacja
npm i pl-declensionUż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 | bigintforms:- tablica:
[one, few, many] - albo obiekt:
{ one, few, many }
- tablica:
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ślnietrue)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(aliasdeclination)decline(aliasdeclination)
Reguły
one: tylko dla1few: dla2-4, z wyjątkiem12-14many: dla reszty (w tym0)
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 benchPrzykł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"