Intl. PluralRules
Wybiera właściwą odmianę słowa po liczebniku w danym języku. Po polsku: 1 punkt, 2 punkty, 5 punktów.
- Zwraca
- Obiekt z metodą
select(), która zwraca kategorię:"zero","one","two","few","many"albo"other".
Przykład
#const rules = new Intl.PluralRules('pl-PL')
const forms = { one: 'punkt', few: 'punkty', many: 'punktów', other: 'punktu' }
function points(n) {
return `${n} ${forms[rules.select(n)]}`
}
console.log(points(1))
console.log(points(3))
console.log(points(5))
console.log(points(12))
console.log(points(22))Definicja i zastosowanie
#Intl.PluralRules mówi, do której kategorii gramatycznej należy liczba w wybranym języku. Metoda select(n) zwraca nazwę kategorii, a Ty dobierasz do niej odpowiednie słowo. Obiekt nie zna samych słów, tylko reguły, więc formy wyrazu przygotowujesz sam, najczęściej w obiekcie z kluczami kategorii.
Polski ma trzy kategorie dla liczb całkowitych: "one" dla 1 (1 punkt), "few" dla liczb kończących się na 2, 3 lub 4, z wyjątkiem 12, 13 i 14 (2 punkty, 23 punkty), oraz "many" dla pozostałych, w tym 0, 5–21 i 25 (5 punktów, 12 punktów). Dla ułamków reguły zwracają "other" (1,5 punktu). Angielski ma tylko "one" i "other", dlatego proste n === 1 ? ... : ... po polsku nie wystarcza.
Opcja type: "ordinal" przełącza reguły na liczebniki porządkowe, co przydaje się głównie w angielskim („1st”, „2nd”, „3rd”, „4th”). Obiekt reguł utwórz raz i używaj wielokrotnie. Listę kategorii dostępnych w danym języku zwraca resolvedOptions().pluralCategories.
Składnia
#new Intl.PluralRules(locales)
new Intl.PluralRules(locales, options)
rules.select(number)Parametry
#locales
opcjonalny, napis lub tablica
Kod języka, np."pl-PL"albo"en-US". Pominięty oznacza język przeglądarki.options
opcjonalny obiekt
Ustawienia, m.in.type:"cardinal"(domyślnie, liczebniki główne) albo"ordinal"(liczebniki porządkowe).
Więcej przykładów
#const pl = new Intl.PluralRules('pl-PL')
const en = new Intl.PluralRules('en-US')
const numbers = [0, 1, 2, 5, 1.5]
console.log(numbers.map((n) => pl.select(n)))
console.log(numbers.map((n) => en.select(n)))const rules = new Intl.PluralRules('pl-PL')
function pluralize(count, forms) {
return `${count} ${forms[rules.select(count)]}`
}
const lessons = { one: 'lekcja', few: 'lekcje', many: 'lekcji', other: 'lekcji' }
const days = { one: 'dzień', few: 'dni', many: 'dni', other: 'dnia' }
console.log(pluralize(1, lessons))
console.log(pluralize(4, lessons))
console.log(pluralize(11, lessons))
console.log(`Seria: ${pluralize(21, days)}`)const ordinal = new Intl.PluralRules('en-US', { type: 'ordinal' })
const suffixes = { one: 'st', two: 'nd', few: 'rd', other: 'th' }
const place = (n) => `${n}${suffixes[ordinal.select(n)]}`
console.log([1, 2, 3, 4, 11, 21, 22].map(place))Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Przygotuj formy dla wszystkich czterech polskich kategorii:
one,few,manyiother. Bezotherliczby ułamkowe dadząundefined. - Nie odtwarzaj reguł ręcznie warunkami typu
n % 10 < 5. Łatwo pominąć wyjątki, jak 12, 13 i 14, aIntl.PluralRuleszna je dla każdego języka. - Utwórz obiekt reguł raz, poza funkcją, i wywołuj tylko
select(). Tworzenie nowego obiektu dla każdej liczby jest niepotrzebnie kosztowne.
Powiązane hasła
#- Intl.NumberFormatFormatuje liczby zgodnie z zasadami danego języka: separatory, waluty, procenty i jednostki.
- Intl.RelativeTimeFormatFormatuje czas względny w wybranym języku, np. „za 3 dni”, „2 godziny temu” albo „wczoraj”.
- Intl.DateTimeFormatFormatuje daty i godziny zgodnie z zasadami wybranego języka i strefy czasowej.
- Template literalsSzablony tekstowe w odwróconych apostrofach: wstawiają wartości przez ${} i mogą zajmować wiele linii.
Widzisz błąd albo brakuje przykładu? Napisz do nas.