Packages
ex_cldr_numbers
0.1.0
2.38.3
2.38.2
2.38.1
2.38.0
2.37.0
2.36.0
2.35.2
2.35.1
2.35.0
2.34.1
2.34.0
2.33.6
2.33.5
2.33.4
2.33.3
2.33.2
2.33.1
2.33.0
2.32.4
2.32.3
2.32.2
2.32.1
2.32.0
retired
2.31.3
retired
2.31.2
2.31.1
2.31.0
2.30.1
2.30.0
2.29.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.0
2.25.2
2.25.1
2.25.0
2.24.0
2.23.3
2.23.2
2.23.1
2.23.0
2.23.0-rc.4
2.23.0-rc.3
2.23.0-rc.2
2.23.0-rc.1
2.23.0-rc.0
2.22.1
2.22.0
2.21.0
2.20.0
2.19.0
2.18.4
2.18.3
2.18.2
2.18.1
2.18.0
2.17.0
2.17.0-rc.1
2.17.0-rc.0
2.16.1
2.16.0
2.16.0-rc.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.0
2.13.2
2.13.1
2.13.0
2.13.0-rc.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
2.0.0-rc.0
1.6.0
1.5.2
1.5.1
1.5.0
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.3.0-rc.1
1.3.0-rc.0
retired
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.3.3
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Number and currency localization and formatting functions for the Common Locale Data Repository (CLDR).
Current section
Files
Jump to
Current section
Files
lib/number/symbol.ex
defmodule Cldr.Number.Symbol do
@moduledoc """
Functions to manage the symbol definitions for a locale and
number system.
"""
require Cldr
alias Cldr.Number
alias Cldr.Locale
defstruct [:decimal, :group, :exponential, :infinity, :list, :minus_sign,
:nan, :per_mille, :percent_sign, :plus_sign,
:superscripting_exponent, :time_separator]
@doc """
Returns a list of the number symbols for all number systems of a locale.
* `locale` is any locale known to `Cldr`. See `Cldr.known_locales()`.
## Example:
iex> Symbol.number_symbols_for("th")
[latn: %{decimal: ".", exponential: "E", group: ",", infinity: "∞", list: ";",
minus_sign: "-", nan: "NaN", per_mille: "‰", percent_sign: "%",
plus_sign: "+", superscripting_exponent: "×", time_separator: ":"},
thai: %{decimal: ".", exponential: "E", group: ",", infinity: "∞", list: ";",
minus_sign: "-", nan: "NaN", per_mille: "‰", percent_sign: "%",
plus_sign: "+", superscripting_exponent: "×", time_separator: ":"}]
"""
@spec number_symbols_for(Locale.name) :: Keyword.t
def number_symbols_for(locale \\ Cldr.get_current_locale())
for locale <- Cldr.Config.known_locales() do
symbols =
locale
|> Cldr.Config.get_locale
|> Map.get(:number_symbols)
def number_symbols_for(unquote(locale)) do
symbols =
unquote(Macro.escape(symbols))
|> Enum.map(fn
{k, nil} -> {k, nil}
{k, v} -> {k, struct(__MODULE__, v)}
end)
|> Enum.into(%{})
{:ok, symbols}
end
end
def number_symbols_for(locale) do
{:error, Locale.locale_error(locale)}
end
@doc """
Returns the number sysbols for a specific locale and number system.
* `locale` is any locale known to `Cldr`. See `Cldr.known_locales()`.
* `number_system` which defaults to `:default` and is either:
* an `atom` in which case it is interpreted as a `number system type`
in the given locale. Typically this would be either `:default` or
`:native`. See `Cldr.Number.Format.format_types_for/1` for the number
system types available for a given `locale`.
* a `binary` in which case it is used to look up the number system
directly (for exmple `"latn"` which is common for western european
languages). See `Cldr.Number.Format.formats_for/1` for the
available formats for a `locale`.
## Example
iex> Cldr.Number.Symbol.number_symbols_for("th", "thai")
%{decimal: ".", exponential: "E", group: ",", infinity: "∞", list: ";",
minus_sign: "-", nan: "NaN", per_mille: "‰", percent_sign: "%",
plus_sign: "+", superscripting_exponent: "×", time_separator: ":"}
"""
@spec number_symbols_for(Local.t, atom | binary) ::
{:ok, Map.t} | {:no_symbols, String.t} | {:error, String.t}
def number_symbols_for(locale, number_system) do
with {:ok, system_name} <- Number.System.system_name_from(number_system, locale),
{:ok, symbols} <- number_symbols_for(locale)
do
symbols
|> Map.get(system_name)
|> get_symbols_return(locale, number_system)
else
{:error, reason} -> {:error, reason}
end
end
defp get_symbols_return(nil, locale, number_system) do
{:no_symbols, "The locale #{inspect locale} does not have " <>
"any symbols for number system #{inspect number_system}"}
end
defp get_symbols_return(symbols, _locale, _number_system) do
{:ok, symbols}
end
end