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".
Na tej stronie

Przykład

#
JavaScript
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))
Konsola
1 punkt
3 punkty
5 punktów
12 punktów
22 punkty

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

#
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

#
Kategorie po polsku i po angielsku
JavaScript
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)))
Konsola
['many', 'one', 'few', 'many', 'other']
['other', 'one', 'other', 'other', 'other']
Uniwersalna funkcja odmiany
JavaScript
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)}`)
Konsola
1 lekcja
4 lekcje
11 lekcji
Seria: 21 dni
Liczebniki porządkowe po angielsku
JavaScript
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))
Konsola
['1st', '2nd', '3rd', '4th', '11th', '21st', '22nd']

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, many i other. Bez other liczby ułamkowe dadzą undefined.
  • Nie odtwarzaj reguł ręcznie warunkami typu n % 10 < 5. Łatwo pominąć wyjątki, jak 12, 13 i 14, a Intl.PluralRules zna 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

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.