Packages
ex_cldr
2.47.3
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.
Current section
Files
Jump to
Current section
Files
lib/cldr/type.ex
defmodule Cldr.Type do
@moduledoc false
alias Cldr.Timezone
# Convert a map to a typespec
def number_systems() do
systems_ast =
Cldr.Config.number_systems()
|> Enum.map(fn
{system, %{digits: _digits, type: :numeric}} ->
{system,
{:%{}, [],
[
digits: string_t(),
type: :numeric
]}}
{system, %{rules: _rules, type: :algorithmic}} ->
{system,
{:%{}, [],
[
rules: string_t(),
type: :algorithmic
]}}
end)
{:%{}, [], systems_ast}
end
def territory_containment(containment) do
containment_ast =
Enum.map(containment, fn {territory, contained} ->
{territory, [from_list(contained), {:..., [], Elixir}]}
end)
{:%{}, [], containment_ast}
end
def subdivision_containment() do
quote do
%{
(subdivision_code :: Cldr.Locale.subdivision_code()) =>
contained_within :: [Cldr.Locale.territory_code() | Cldr.Locale.subdivision_code(), ...]
}
end
end
def timezones_by_territory(territory_timezones) do
timezone_ast =
Enum.map(territory_timezones, fn {territory, _timezones} ->
{territory, territory_list()}
end)
{:%{}, [], timezone_ast}
end
def aliases(aliases) do
alias_ast =
Enum.map(aliases, fn
{:language, _languages} ->
{:language, language_list()}
{:region, _regions} ->
{:region, region_list()}
{:zone, _zones} ->
{:zone, zone_list()}
{:variant, _variants} ->
{:variant, variant_list()}
{:script, _scripts} ->
{:script, script_list()}
{:subdivision, _subdivisions} ->
{:subdivision, subdivision_list()}
end)
{:%{}, [], alias_ast}
end
defp string_t() do
{{:., [], [{:__aliases__, [alias: false], [:String]}, :t]}, [], []}
end
defp territory_list do
quote do
[Timezone.timezone(), ...]
end
end
defp subdivision_list do
quote do
%{
(subdivision_alias :: String.t()) =>
subdivision ::
Cldr.Locale.territory_code()
| Cldr.Locale.subdivision_code()
| [Cldr.Locale.subdivision_code(), ...]
}
end
end
defp zone_list() do
quote do
%{(zone_alias :: String.t()) => String.t() | %{(city :: String.t()) => zone :: String.t()}}
end
end
defp region_list() do
quote do
%{(region_alias :: String.t()) => region :: String.t()}
end
end
defp variant_list() do
quote do
%{(variant_alias :: String.t()) => variant :: String.t()}
end
end
defp language_list() do
quote do
%{(language :: String.t()) => language_tag :: Cldr.LanguageTag.t()}
end
end
defp script_list() do
quote do
%{(script_alias :: String.t()) => script :: String.t()}
end
end
def from_list(list) do
Enum.reduce(list, fn x, acc -> {:|, [], [x, acc]} end)
end
end