Literature.Number.Cardinal (literature v0.4.7)

Implements cardinal plural rules for numbers.

Summary

Functions

The locale names for which plural rules are defined.

The configured locales for which plural rules are defined.

Return the plural key for a given number in a given locale

Returns all the plural rules defined in CLDR.

Return the plural rules for a locale.

Pluralize a number using cardinal plural rules and a substitution map.

Functions

available_locale_names()

The locale names for which plural rules are defined.

known_locale_names()

@spec known_locale_names() :: [Cldr.Locale.locale_name(), ...]

The configured locales for which plural rules are defined.

Returns the intersection of Literature.known_locale_names/0 and the locales for which Cardinal plural rules are defined.

There are many Cldr locales which don't have their own plural rules so this list is the intersection of Cldr's configured locales and those that have rules.

plural_rule(number, locale, rounding \\ Math.default_rounding())

Return the plural key for a given number in a given locale

Returns which plural key (:zero, :one, :two, :few, :many or :other) a given number fits into within the context of a given locale.

Note that these key names should not be interpreted literally. For example, the key returned from Cldr.Number.Ordinal.plural_rule(0, "en") is actually :other, not :zero.

This key can then be used to format a number, date, time, unit, list or other content in a plural-sensitive way.

Arguments

Examples

iex> Literature.Number.Cardinal.plural_rule 0, "fr"
:one

iex> Literature.Number.Cardinal.plural_rule 0, "en"
:other

plural_rules()

@spec plural_rules() :: %{
  required(Cldr.Locale.locale_name()) => [
    {plural_type :: Cldr.Number.PluralRule.plural_type(),
     plural_rules :: [Cldr.Number.PluralRule.plural_rule(), ...]},
    ...
  ]
}

Returns all the plural rules defined in CLDR.

plural_rules_for(locale_name)

@spec plural_rules_for(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) :: [
  {atom(), list()},
  ...
]

Return the plural rules for a locale.

Arguments

The rules are returned in AST form after parsing.

pluralize(number, locale_name, substitutions)

Pluralize a number using cardinal plural rules and a substitution map.

Arguments

  • number is an integer, float or Decimal

  • locale is any locale returned by Literature.Locale.new!/1 or any locale_name returned by Literature.known_locale_names/0

  • substitutions is a map that maps plural keys to a string. The valid substitution keys are :zero, :one, :two, :few, :many and :other.

See also Literature.Number.Cardinal.Cardinal.plural_rule/3.

Examples

iex> Literature.Number.Cardinal.pluralize 1, "en", %{one: "one"}
"one"

iex> Literature.Number.Cardinal.pluralize 2, "en", %{one: "one"}
nil

iex> Literature.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
"other"

iex> Literature.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
"other"

iex> Literature.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
"one"

iex> Literature.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
nil

iex> Literature.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
nil

iex> Literature.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
"few"

iex> Literature.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
"other"