Packages

ex_cldr

0.12.2
2.47.5 2.47.4 2.47.3 2.47.2 2.47.1 2.47.0 2.46.0 2.45.2 2.45.1 2.45.0 2.44.1 2.44.0 2.43.2 2.43.1 2.43.0 2.42.0 2.41.1 2.41.0 2.40.4 2.40.3 2.40.2 2.40.1 2.40.0 2.39.2 2.39.1 2.39.0 2.38.1 2.38.0 2.37.5 2.37.4 2.37.3 retired 2.37.2 2.37.1 2.37.0 2.36.0 2.35.1 2.35.0 retired 2.34.2 2.34.1 2.34.0 2.33.2 2.33.1 2.33.1-rc.0 2.33.0 2.32.1 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.1 2.27.0 retired 2.26.3 2.26.2 2.26.1 2.26.0 2.25.0 2.24.2 2.24.1 2.24.0 2.24.0-rc.6 2.24.0-rc.5 2.24.0-rc.4 2.24.0-rc.3 2.24.0-rc.2 2.24.0-rc.1 2.24.0-rc.0 2.23.2 2.23.1 2.23.0 2.22.1 2.22.0 2.21.0 2.20.0 2.20.0-rc.3 2.20.0-rc.2 2.20.0-rc.1 2.20.0-rc.0 2.19.1 2.19.0 2.18.2 2.18.1 2.18.0 2.18.0-rc.0 2.17.2 2.17.1 2.17.0 2.16.2 2.16.1 2.16.1-rc.0 2.16.0 2.15.0 2.14.1 2.14.0 2.14.0-rc.0 2.13.0 2.12.1 2.12.0 2.11.1 2.11.0 2.10.2 2.10.1 2.10.0 retired 2.9.0 2.8.1 2.8.0 2.7.2 2.7.1 2.7.0 2.6.2 2.6.1 2.6.0 2.5.0 2.4.3 2.4.2 2.4.1 2.4.0 2.3.2 2.3.1 2.3.0 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 2.0.0-rc.3 retired 2.0.0-rc.2 retired 2.0.0-rc.1 retired 2.0.0-rc.0 retired 1.8.2 1.8.1 1.8.0 1.7.1 1.7.0 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 retired 1.4.0-rc.3 retired 1.4.0-rc.2 retired 1.4.0-rc.1 retired 1.4.0-rc.0 retired 1.3.2 1.3.1 1.3.0 1.2.0 1.1.0 1.0.0 1.0.0-rc.3 retired 1.0.0-rc.2 retired 1.0.0-rc.1 retired 1.0.0-rc.0 retired 0.13.1 0.13.0 0.12.2 retired 0.12.1 retired 0.12.0 retired 0.11.0 retired 0.10.0 retired 0.9.0 retired 0.8.3 retired 0.8.2 retired 0.8.1 retired 0.8.0 retired 0.7.0 retired 0.6.2 retired 0.6.1 retired 0.6.0 retired 0.5.2 retired 0.5.1 retired 0.5.0 retired 0.4.2 retired 0.4.1 retired 0.4.0 retired 0.3.0 retired 0.2.1 retired 0.2.0 retired 0.1.3 retired 0.1.2 retired 0.1.1 retired 0.1.0 retired 0.0.20 retired 0.0.19 retired 0.0.18 retired 0.0.17 retired 0.0.16 retired 0.0.15 retired 0.0.14 retired 0.0.13 retired 0.0.12 retired 0.0.11 retired 0.0.10 retired 0.0.8 retired 0.0.7 retired 0.0.6 retired 0.0.5 retired 0.0.4 retired 0.0.3 retired

Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.

Retired package: Deprecated

Current section

Files

Jump to
ex_cldr lib cldr gettext plural.ex
Raw

lib/cldr/gettext/plural.ex

if Code.ensure_loaded?(Gettext) do
defmodule Cldr.Gettext.Plural do
@moduledoc """
Defines a Plural module for Gettext that uses the `Cldr` plural rules.
"""
@behaviour Gettext.Plural
alias Cldr.Number.Cardinal
alias Cldr.Math
alias Cldr.LanguageTag
alias Cldr.Locale
@doc """
Returns how many plural forms exist for a given locale.
* `locale` is either a locale name in the list `Cldr.known_locales/0` or
a `%LanguageTag{}` as returned by `Cldr.Locale.new/1`
## Examples
iex> Cldr.Gettext.Plural.nplurals("pl")
3
iex> Cldr.Gettext.Plural.nplurals("en")
2
"""
@spec nplurals(Locale.locale_name) :: non_neg_integer
def nplurals(locale_name) when is_binary(locale_name) do
with \
{:ok, _locale} <- Cldr.validate_locale(locale_name)
do
Cardinal.plural_rules_for(locale_name) |> Enum.count
else
{:error, _reason} -> apply(Gettext.Plural, :nplurals, [locale_name])
end
end
@doc """
Returns to what plural form a given number belongs to in a given
locale.
* `locale` is either a locale name in the list `Cldr.known_locales/0` or
a `%LanguageTag{}` as returned by `Cldr.Locale.new/1`
## Examples
iex> Cldr.Gettext.Plural.plural("pl", 1)
0
iex> Cldr.Gettext.Plural.plural("pl", 2)
1
iex> Cldr.Gettext.Plural.plural("pl", 5)
2
iex> Cldr.Gettext.Plural.plural("pl", 112)
2
iex> Cldr.Gettext.Plural.plural("en", 1)
0
iex> Cldr.Gettext.Plural.plural("en", 2)
1
iex> Cldr.Gettext.Plural.plural("en", 112)
1
"""
@spec plural(Locale.locale_name | LanguageTag.t, Math.number_or_decimal)
:: non_neg_integer | {:error, String.t}
def plural(%LanguageTag{cldr_locale_name: cldr_locale_name}, n) do
plural(cldr_locale_name, n)
end
def plural(locale_name, n) when is_binary(locale_name) do
with \
{:ok, locale} <- Cldr.validate_locale(locale_name)
do
rule = Cardinal.plural_rule(n, locale)
n = Cardinal.plural_rules_for(locale_name) |> Enum.count
gettext_return(rule, n)
else
{:error, _reason} -> apply(Gettext.Plural, :plural, [locale_name, n])
end
end
defp gettext_return(:zero, _n), do: 0
defp gettext_return(:one, _n), do: 1
defp gettext_return(:two, _n), do: 2
defp gettext_return(:few, _n), do: 3
defp gettext_return(:many, _n), do: 4
# Since :other is the catch-all it should
# return a number 1 greater than the number
# of rules defined in Cldr
defp gettext_return(:other, n), do: n - 1
end
end