Packages
ex_cldr
0.0.16
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
Current section
Files
lib/cldr/currency.ex
defmodule Cldr.Currency do
@moduledoc """
Defines a currency structure and a set of functions to manage the validity of a currency code.
"""
@type format :: :standard |
:accounting |
:short |
:long |
:percent |
:scientific
@type code :: String.t
@type t :: %__MODULE__{
code: code,
name: String.t,
tender: boolean,
symbol: String.t,
digits: pos_integer,
rounding: pos_integer,
narrow_symbol: String.t,
cash_digits: pos_integer,
cash_rounding: pos_integer,
count: %{}
}
defstruct [
:code,
:name,
:symbol,
:narrow_symbol,
:digits,
:rounding,
:cash_digits,
:cash_rounding,
:tender,
:count]
@doc """
Returns a list of all known currency codes.
## Example
iex> Cldr.Currency.known_currencies |> Enum.count
298
"""
def known_currencies do
Cldr.get_locale()
|> Cldr.Locale.get_locale
|> get_in([:currencies])
|> Map.keys
end
@doc """
Returns a boolean indicating if the supplied currency code is known.
## Examples
iex> Cldr.Currency.known_currency? "AUD"
true
iex> Cldr.Currency.known_currency? "GGG"
false
"""
@spec known_currency?(code) :: boolean
def known_currency?(currency) when is_binary(currency) do
try do
currency = normalize_currency_code(currency)
known_currency?(currency)
rescue ArgumentError ->
false
end
end
def known_currency?(currency) when is_atom(currency) do
!!Enum.find(known_currencies(), &(&1 == currency))
end
@doc """
Returns the currency metadata for the requested currency code.
The currency code is a string representation of an ISO 4217 currency code.
## Examples
iex> Cldr.Currency.for_code("AUD")
%Cldr.Currency{cash_digits: 2, cash_rounding: 0, code: "AUD",
count: %{one: "Australian dollar", other: "Australian dollars"},
digits: 2, name: "Australian Dollar", narrow_symbol: "$",
rounding: 0, symbol: "A$", tender: true}
iex> Cldr.Currency.for_code("THB")
%Cldr.Currency{cash_digits: 2, cash_rounding: 0, code: "THB",
count: %{one: "Thai baht", other: "Thai baht"}, digits: 2,
name: "Thai Baht", narrow_symbol: "฿", rounding: 0, symbol: "THB",
tender: true}
"""
@spec for_code(code, Cldr.locale) :: %{}
def for_code(currency, locale \\ Cldr.get_locale()) do
do_for_code(currency, locale)
end
@doc """
Returns the currency metadata for a locale.
"""
@spec for_locale(Cldr.locale) :: %{}
def for_locale(locale) do
Cldr.Locale.get_locale(locale).currencies
end
@doc """
Normalizes the representation of a currency code.
The normalized form is an ISO4217 code in an atom form.
"""
@spec normalize_currency_code(binary) :: atom
def normalize_currency_code(currency) when is_binary(currency) do
currency
|> String.upcase
|> String.to_existing_atom
end
@spec do_for_code(code, Cldr.locale) :: %{}
defp do_for_code(code, locale) when is_binary(code) do
code
|> normalize_currency_code
|> do_for_code(locale)
end
defp do_for_code(code, locale) when is_atom(code) do
for_locale(locale)[code]
end
end