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".
Exemple
#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))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
#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, notammenttype:"cardinal"(par défaut, nombres cardinaux) ou"ordinal"(nombres ordinaux).
Plus d’exemples
#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)))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)}`)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))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
oneetother. En français,onecouvre aussi bien 0 que 1, et même les décimales entre les deux comme 1,5 : sansother, les grands nombres donneraientundefined. - 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.PluralRulessait 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
#- Intl.NumberFormatFormate des nombres selon les règles d’une langue donnée : séparateurs, devises, pourcentages et unités.
- Intl.RelativeTimeFormatFormate un temps relatif dans la langue choisie, par ex. « dans 3 jours », « il y a 2 heures » ou « hier ».
- Intl.DateTimeFormatFormate les dates et les heures selon les règles d’une langue et d’un fuseau horaire choisis.
- Template literalsDes templates de texte entre guillemets inversés : ils insèrent des valeurs via ${} et peuvent s’étendre sur plusieurs lignes.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.