Pluralize Counts With Intl.PluralRules

Choose singular or plural forms by CLDR plural category, including custom two and few forms for non-English locales.

JavascriptData Integrity

Code

snippet
export function pluralize(count, singular, plural, locale = "en") {
  if (typeof count !== "number" || !Number.isFinite(count)) {
    throw new TypeError("count must be a finite number");
  }
  const rules = new Intl.PluralRules(locale);
  const category = rules.select(count);
  const forms = typeof plural === "string"
    ? { one: singular, other: plural }
    : { one: singular, other: singular, ...plural };
  const word = forms[category] ?? forms.other ?? singular;
  return String(count) + " " + word;
}

export function pluralizeWithNumber(count, singular, plural, locale = "en") {
  const formatted = new Intl.NumberFormat(locale).format(count);
  const text = pluralize(count, singular, plural, locale);
  const separator = text.indexOf(" ");
  return separator === -1 ? text : formatted + text.slice(separator);
}