Packages
ex_cldr
0.8.0
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
priv/cldr/rfc5646.abnf
!!!
require Loggerdef normalize(input) when is_list(input) do to_string(input)enddef normalize(input) do inputenddef normalize_list([list]) do normalize(list)enddef normalize_list(list) when is_list(list) do Enum.map(list, &normalize/1)enddef normalize_list(list) do listenddef normalize_tuples(list) do Enum.map(list, fn {k, v} -> {normalize(k), normalize_list(v)} end)enddef return_value(key, state, string_values, _values, _rule) do [v] = string_values {:ok, Map.put(state, key, normalize(v)), v}enddef accumulate_value(key, state, string_values, _values, _rule) do [v] = string_values value = normalize(v) case Map.get(state, key) do nil -> {:ok, Map.put(state, key, value), value} [_h | _t] = state_value -> {:ok, Map.put(state, key, state_value ++ [value]), value} state_value -> {:ok, Map.put(state, key, [state_value, value]), value} endenddef tuples(values) do values |> List.flatten |> Enum.reject(&is_integer/1)end!!!
language-tag = langtag ; normal language tags
/ privateuse ; private use tag
/ grandfathered ; grandfathered tags
langtag = language
["-" script]
["-" region]
*("-" variant)
*("-" extensions)
["-" privateuse]
language = 2*3ALPHA ; shortest ISO 639 code
;["-" extlang] ; sometimes followed by
; extended language subtags
/ 4ALPHA ; or reserved for future use
/ 5*8ALPHA !!! # or registered language subtag
return_value(:language, state, string_values, values, rule) !!!
extlang = 3ALPHA ; selected ISO 639 codes
*2("-" 3ALPHA) ; permanently reserved
script = 4ALPHA !!! # ISO 15924 code
return_value(:script, state, string_values, values, rule) !!!
region = 2ALPHA ; ISO 3166-1 code
/ 3DIGIT !!! # UN M.49 code
return_value(:region, state, string_values, values, rule) !!!
variant = 5*8alphanum ; registered variants
/ (DIGIT 3alphanum) !!!
accumulate_value(:variant, state, string_values, values, rule) !!!
extensions = locale / transform / extension !!!
_ = rule _ = string_values state = if values == [[[[]]]] do state else [[[{extension, values}]]] = values extensions = Map.put(state.extensions, extension, normalize_list(values)) Map.put(state, :extensions, extensions) end {:ok, state, []} !!!
extension = singleton 1*("-" (2*8alphanum)) !!!
_ = rule _ = string_values [extension | values] = :string.split(:lists.flatten(values), '-', :all) {:ok, state, {normalize(extension), values}} !!!
; The following is the syntax for the extensions managed
; by CLDR. These are extensions "u" for locale and "t"
; for transforms
locale = "u" (1*("-" keyword) / 1*("-" attribute) *("-" keyword)) !!!
_ = rule _ = string_values keywords = tuples(values) |> normalize_tuples |> Enum.into(%{}) {:ok, %{state | locale: keywords}, []} !!!
transform = "t" (1*("-" keyword)) !!!
_ = rule _ = string_values keywords = tuples(values) |> normalize_tuples |> Enum.into(%{}) {:ok, %{state | transform: keywords}, []} !!!
keyword = key ["-" type] !!!
_ = rule _ = string_values [key | values] = :string.split(:lists.flatten(values), '-', :all) {:ok, state, {normalize(key), values}} !!!
key = 2alphanum !!!
_ = rule _ = string_values {:ok, state, normalize(:lists.flatten(values))} !!!
type = 3*8alphanum *("-" 3*8alphanum) !!!
_ = rule _ = string_values {:ok, state, normalize(:lists.flatten(values))} !!!
attribute = 3*8alphanum !!!
_ = rule _ = string_values {:ok, state, {:attributes, normalize_list(:string.split(:lists.flatten(values), '-', :all))}} !!!
; Single alphanumerics
; "x" reserved for private use
; "u" reserved for CLDR use as locale
; "t" reserved for CLDR use as tranforms
singleton = DIGIT ; 0 - 9
/ %x41-53 ; A - S
/ %x56-57 ; V - W
/ %x59-5A ; Y - Z
/ %x61-73 ; a - s
/ %x76-77 ; v - w
/ %x79-7A ; y - z
privateuse = "x" 1*("-" (1*8alphanum)) !!!
_ = rule _ = string_values [_x | values] = :string.split(:lists.flatten(values), '-', :all) {:ok, %{state | private_use: normalize_list(values)}, []} !!!
grandfathered = irregular ; non-redundant tags registered
/ regular ; during the RFC 3066 era
irregular = "en-GB-oed" ; irregular tags do not match
/ "i-ami" ; the 'langtag' production and
/ "i-bnn" ; would not otherwise be
/ "i-default" ; considered 'well-formed'
/ "i-enochian" ; These tags are all valid,
/ "i-hak" ; but most are deprecated
/ "i-klingon" ; in favor of more modern
/ "i-lux" ; subtags or subtag
/ "i-mingo" ; combination
/ "i-navajo"
/ "i-pwn"
/ "i-tao"
/ "i-tay"
/ "i-tsu"
/ "sgn-BE-FR"
/ "sgn-BE-NL"
/ "sgn-CH-DE"
regular = "art-lojban" ; these tags match the 'langtag'
/ "cel-gaulish" ; production, but their subtags
/ "no-bok" ; are not extended language
/ "no-nyn" ; or variant subtags: their meaning
/ "zh-guoyu" ; is defined by their registration
/ "zh-hakka" ; and all of these are deprecated
/ "zh-min" ; in favor of a more modern
/ "zh-min-nan" ; subtag or sequence of subtags
/ "zh-xiang"
alphanum = (ALPHA / DIGIT) ; letters and numbers
DIGIT = %x30-39
ALPHA = %x41-5A / %x61-7A