Intl.PluralRules

Choisit la bonne forme grammaticale d’un mot selon un nombre, dans la langue choisie. En français : 0 leçon, 1 leçon, 2 leçons.

Renvoie
Un objet avec une méthode select(), qui renvoie une catégorie : "zero", "one", "two", "few", "many" ou "other".
Sur cette page

Exemple

#
JavaScript
const rules = new Intl.PluralRules('fr-FR')
const forms = { one: 'point', other: 'points' }

function points(n) {
  return `${n} ${forms[rules.select(n)]}`
}

console.log(points(0))
console.log(points(1))
console.log(points(2))
console.log(points(5))
console.log(points(21))
Console
0 point
1 point
2 points
5 points
21 points

Définition et utilisation

#

Intl.PluralRules indique à quelle catégorie grammaticale appartient un nombre dans la langue choisie. La méthode select(n) renvoie le nom de la catégorie, et c’est vous qui choisissez le mot qui lui correspond. L’objet ne connaît pas les mots eux-mêmes, seulement les règles : vous préparez donc vous-même les formes, en général dans un objet dont les clés sont les catégories.

Le français n’a que deux catégories pour les nombres cardinaux : "one" et "other". Ce qui surprend, c’est que "one" s’applique aussi bien à 0 et 1 qu’à toute valeur décimale entre les deux, comme 1,5 : « 0 leçon », « 1 leçon » et « 1,5 leçon » prennent la forme du singulier, exactement comme à l’oral. L’anglais, lui, met 0 au pluriel (« 0 lessons ») et ne réserve "one" qu’à la valeur 1 exacte.

L’option type: "ordinal" passe aux règles des nombres ordinaux, surtout utile en anglais (« 1st », « 2nd », « 3rd », « 4th »). En français, les ordinaux ne distinguent que "one" (1er) et "other" (2e, 3e, 4e...). Créez l’objet de règles une seule fois et réutilisez-le. La liste des catégories disponibles dans une langue donnée est renvoyée par resolvedOptions().pluralCategories.

Syntaxe

#
Syntaxe
new Intl.PluralRules(locales)
new Intl.PluralRules(locales, options)

rules.select(number)

Paramètres

#
  • locales

    optionnel, chaîne ou tableau

    Un code de langue, par ex. "fr-FR" ou "en-US". Omis, il correspond à la langue du navigateur.
  • options

    objet optionnel

    Des réglages, notamment type : "cardinal" (par défaut, nombres cardinaux) ou "ordinal" (nombres ordinaux).

Plus d’exemples

#
Catégories en français et en anglais
JavaScript
const fr = new Intl.PluralRules('fr-FR')
const en = new Intl.PluralRules('en-US')
const numbers = [0, 1, 2, 5, 1.5]

console.log(numbers.map((n) => fr.select(n)))
console.log(numbers.map((n) => en.select(n)))
Console
['one', 'one', 'other', 'other', 'one']
['other', 'one', 'other', 'other', 'other']
Une fonction de pluriel universelle
JavaScript
const rules = new Intl.PluralRules('fr-FR')

function pluralize(count, forms) {
  return `${count} ${forms[rules.select(count)]}`
}

const lessons = { one: 'leçon', other: 'leçons' }
const days = { one: 'jour', other: 'jours' }

console.log(pluralize(0, lessons))
console.log(pluralize(1, lessons))
console.log(pluralize(4, lessons))
console.log(`Série : ${pluralize(21, days)}`)
Console
0 leçon
1 leçon
4 leçons
Série : 21 jours
Les nombres ordinaux en anglais
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))
Console
['1st', '2nd', '3rd', '4th', '11th', '21st', '22nd']

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Préparez des formes pour les deux catégories one et other. En français, one couvre aussi bien 0 que 1, et même les décimales entre les deux comme 1,5 : sans other, les grands nombres donneraient undefined.
  • Ne recréez pas la règle à la main avec une condition comme n <= 1. Elle est facile à rater pour les nombres négatifs ou décimaux, qu’Intl.PluralRules sait pourtant classer correctement pour chaque langue.
  • Créez l’objet de règles une seule fois, hors de la fonction, et appelez seulement select(). Créer un nouvel objet pour chaque nombre coûte cher inutilement.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.