Packages

ex_cldr

2.0.0-rc.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 - obsolete release candidate

Current section

Files

Jump to
ex_cldr lib cldr gettext plural.ex
Raw

lib/cldr/gettext/plural.ex

defmodule Cldr.Gettext.Plural do
@moduledoc false
def define_gettext_plurals_module(config) do
quote location: :keep do
defmodule Gettext.Plural do
@moduledoc """
Defines a Plural module for Gettext that uses the `Cldr` plural rules.
"""
@behaviour :"Elixir.Gettext.Plural"
alias Cldr.LanguageTag
alias Cldr.Locale
alias unquote(config.backend).Number.Cardinal
@doc """
Returns how many plural forms exist for a given locale.
* `locale` is either a locale name in the list `#{unquote(inspect(config.backend))}.known_locales/0` or
a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`
## Examples
iex> #{inspect(__MODULE__)}.nplurals("pl")
4
iex> #{inspect(__MODULE__)}.nplurals("en")
2
"""
@spec nplurals(Locale.locale_name() | LanguageTag.t()) :: pos_integer() | no_return()
def nplurals(%LanguageTag{cldr_locale_name: cldr_locale_name}) do
Cardinal.gettext_nplurals()
|> Map.get(cldr_locale_name)
|> Enum.count
end
def nplurals(locale_name) when is_binary(locale_name) do
with {:ok, locale} <- unquote(config.backend).validate_locale(locale_name) do
nplurals(locale)
else
{:error, _reason} -> raise :'Elixir.Gettext.Plural.UnknownLocaleError', 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 `#{unquote(inspect(config.backend))}.known_locales/0` or
a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`
## Examples
iex> #{inspect(__MODULE__)}.plural("pl", 1)
0
iex> #{inspect(__MODULE__)}.plural("pl", 2)
1
iex> #{inspect(__MODULE__)}.plural("pl", 5)
2
iex> #{inspect(__MODULE__)}.plural("pl", 112)
2
iex> #{inspect(__MODULE__)}.plural("en", 1)
0
iex> #{inspect(__MODULE__)}.plural("en", 2)
1
iex> #{inspect(__MODULE__)}.plural("en", 112)
1
"""
@spec plural(Locale.locale_name() | LanguageTag.t(), number()) :: pos_integer() | no_return()
def plural(%LanguageTag{cldr_locale_name: cldr_locale_name} = locale, n) do
rule = Cardinal.plural_rule(n, cldr_locale_name)
Cardinal.gettext_nplurals()
|> Map.get(cldr_locale_name)
|> Keyword.get(rule)
end
def plural(locale_name, n) when is_binary(locale_name) do
with {:ok, locale} <- unquote(config.backend).validate_locale(locale_name) do
plural(locale, n)
else
{:error, _reason} -> raise :'Elixir.Gettext.Plural.UnknownLocaleError', locale_name
end
end
end
end
end
end