Cldr (Cldr v2.26.0) View Source

Cldr provides the core functions to retrieve and manage the CLDR data that supports formatting and localisation.

This module provides the core functions to access formatted CLDR data, set and retrieve a current locale and validate certain core data types such as locales, currencies and territories.

Cldr functionality is packaged into a several packages that each depend on this one. These additional modules are:

  • Cldr.Number.to_string/2 for formatting numbers and Cldr.Currency.to_string/2 for formatting currencies. These functions are contained in the hex package ex_cldr_numbers.

  • Cldr.List.to_string/2 for formatting lists. These function is contained in the hex package ex_cldr_lists.

  • Cldr.Unit.to_string/2 for formatting SI units. These function is contained in the hex package ex_cldr_units.

  • Cldr.DateTime.to_string/2 for formatting of dates, times and datetimes. This function is contained in the hex package ex_cldr_dates_times.

Link to this section Summary

Functions

Returns a list of all the locale names defined in the CLDR repository.

Returns a boolean indicating if the specified locale is available in CLDR.

default_backend() deprecated

Returns the configured default backend module.

Returns the configured global default locale.

Returns the global default locale for a given backend.

Returns the default territory when a locale does not specify one and none can be inferred.

Return a localised string suitable for presentation purposes for structs that implement the Cldr.LanguageTag.DisplayName protocol.

Add locale-specific ellipsis to a string.

Returns a unicode string representing a flag for a territory.

Return the Cldr locale for the current process.

Returns a list of strings representing the calendars known to Cldr.

Returns a list of strings representing the currencies known to Cldr.

Returns either the Gettext locale_name in Cldr format or false based upon whether the locale name is configured in GetText.

Returns a boolean indicating if the specified locale name is configured and available in Gettext.

Returns a list of GetText locale names but in CLDR format with underscore replaces by hyphen in order to facilitate comparisons with Cldr locale names.

Returns either the locale_name or false based upon whether the locale name is configured in Cldr.

Returns a boolean indicating if the specified locale name is configured and available in Cldr.

Returns a list of the known locale names.

Returns a list of atoms representing the number systems types known to Cldr.

Returns a list of atoms representing the number systems known to Cldr.

Returns either the RBNF locale_name or false based upon whether the locale name is configured in Cldr and has RBNF rules defined.

Returns a boolean indicating if the specified locale name is configured and available in Cldr and supports rules based number formats (RBNF).

Returns a list of locale names which have rules based number formats (RBNF).

Returns a list of the territories known to Cldr.

Returns a map of territory subdivisions sith a list of their parent subdivisions and region.

Returns the map of territories and subdivisions and their child subdivsions.

Set the default system-wide backend module.

Set's the system default locale.

Set the current process's Gettext locale from a t:Cldr.LanguageTag.

Set the current process's locale for a specified backend or for all backends.

Add locale-specific quotation marks around a string.

Returns a list of all requested locale names.

Return the territory fallback chain based upon a locales territory (including u extension) and territory containment definitions.

Return the territory fallback chain based upon a locales territory (including u extension) and territory containment definitions.

Returns the territory for the world

Return a localsed string for types that implement the Cldr.Chars protocol.

Returns an error tuple for an invalid calendar.

Returns an error tuple for an invalid currency.

Returns a list of the locales names that are configured, but not known in CLDR.

Returns an error tuple for an unknown number system.

Returns an error tuple for an unknown number system type.

Returns an error tuple for an unknown plural type.

Returns an error tuple for an invalid script.

Returns an error tuple for an unknown territory.

Validates that a module is a CLDR backend module.

Normalise and validate a calendar name.

Normalize and validate a currency code.

Normalise and validate a gettext locale name.

Normalise and validate a locale name.

Normalise and validate a measurement system type.

Normalize and validate a number system name.

Normalize and validate a plural type.

Normalise and validate a script code.

Normalise and validate a territory code.

Normalise and validate a territory subdivision code.

Returns the version of the CLDR repository as a tuple

Link to this section Types

Specs

backend() :: module()

Link to this section Functions

Specs

all_locale_names() :: [Cldr.Locale.locale_name(), ...]

Returns a list of all the locale names defined in the CLDR repository.

Note that not necessarily all of these locales are available since functions are only generated for configured locales which is most cases will be a subset of locales defined in CLDR.

See also: requested_locales/1 and known_locales/1

Link to this function

available_locale_name?(locale_name)

View Source

Specs

available_locale_name?(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) ::
  boolean()

Returns a boolean indicating if the specified locale is available in CLDR.

The return value depends on whether the locale is defined in the CLDR repository. It does not necessarily mean the locale is configured for Cldr. See also Cldr.known_locale_name?/2.

Arguments

Examples

iex> Cldr.available_locale_name?(:"en-AU")
true

iex> Cldr.available_locale_name?(:"en-SA")
false
This function is deprecated. Use default_backend!/0.

Specs

default_backend() :: backend() | no_return()

Returns the configured default backend module.

The default backend can be set with Cldr.put_default_backend/1.

Alternatively the default backend may be configured in config.exs under the ex_cldr key as follows:

config :ex_cldr,
  default_backend: <backend_module>

Important Note

If this function is called and no default backend is configured an exception will be raised.

Returns the configured global default locale.

The default locale can be set with Cldr.put_default_locale/1.

Alternatively the default locale may be configured in config.exs under the ex_cldr key as follows:

config :ex_cldr,
  default_locale: <locale_name>

Returns

  • The default locale or

  • Raises an exception if no default backend is configured

Notes

Cldr.default_locale/0 returns the system-wide default locale.

Example

iex> Cldr.default_locale
%Cldr.LanguageTag{
  backend: TestBackend.Cldr,
  canonical_locale_name: "en-001",
  cldr_locale_name: :"en-001",
  language_subtags: [],
  extensions: %{},
  gettext_locale_name: "en",
  language: "en",
  locale: %{},
  private_use: [],
  rbnf_locale_name: :en,
  requested_locale_name: "en-001",
  script: :Latn,
  territory: :"001",
  transform: %{},
  language_variants: []
}

Specs

default_locale(backend()) :: Cldr.LanguageTag.t()

Returns the global default locale for a given backend.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module

Returns

  • The default locale for the backend

Example

iex> Cldr.default_locale(TestBackend.Cldr)
%Cldr.LanguageTag{
  backend: TestBackend.Cldr,
  canonical_locale_name: "en-001",
  cldr_locale_name: :"en-001",
  language_subtags: [],
  extensions: %{},
  gettext_locale_name: "en",
  language: "en",
  locale: %{},
  private_use: [],
  rbnf_locale_name: :en,
  requested_locale_name: "en-001",
  script: :Latn,
  territory: :"001",
  transform: %{},
  language_variants: []
}
Link to this function

default_territory(backend \\ default_backend!())

View Source

Specs

default_territory(backend()) :: atom()

Returns the default territory when a locale does not specify one and none can be inferred.

Arguments

Returns

  • The default territory or

  • Raises if no argument is supplied and there is no default backend configured

Example

iex> Cldr.default_territory(TestBackend.Cldr)
:"001"
Link to this function

display_name(term, options \\ [])

View Source

Specs

display_name(term(), Keyword.t()) :: String.t()

Return a localised string suitable for presentation purposes for structs that implement the Cldr.LanguageTag.DisplayName protocol.

The Cldr.LanguageTag.DisplayName protocol is implemented in this library for t:Cldr.LanguageTag.t.

Other CLDR-related libraries implement the protocol for the types they support such as t:Cldr.Unit and t:Cldr.Currency.

Link to this function

ellipsis(string, backend \\ default_backend!(), options \\ [])

View Source

Specs

ellipsis(String.t() | [String.t()], backend(), Keyword.t()) :: String.t()

Add locale-specific ellipsis to a string.

Arguments

  • string is any String.t or a 2-element list of String.t between which the ellipsis is inserted.

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend/0. Note that Cldr.default_backend/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

  • options is a keyword list of options.

Options

  • :locale is any valid locale name returned by Cldr.known_locale_names/1. The default is Cldr.get_locale/0

  • :location determines where to place the ellipsis. The options are :after (the default for a single string argument), :between (the default and only valid location for an argument that is a list of two strings) and :before

  • :format formats based upon whether the ellipsis is inserted between words or sentences. The valid options are :word or :sentence. The default is :sentence.

Examples

iex> Cldr.ellipsis "And furthermore"
"And furthermore…"

iex> Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: "ja"
"And furthermore…there is much to be done"

iex> Cldr.ellipsis "And furthermore", format: :word
"And furthermore …"

iex> Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: "ja", format: :word
"And furthermore … there is much to be done"

Returns a unicode string representing a flag for a territory.

Options

Returns

  • A string representing a flag or

  • An empty string if the territory is valid but no unicode grapheme is defined. This is true for territories that are aggregate areas such as "the world" which is :001

  • {:error, {Cldr.UnknownTerritoryError, message}}

Notes

Examples

iex> Cldr.flag :AU
"🇦🇺"

iex> Cldr.flag :US
"🇺🇸"

iex> Cldr.flag "UN"
"🇺🇳"

iex> Cldr.flag(:UK)
"🇬🇧"

iex> Cldr.flag(:GB)
"🇬🇧"

iex> Cldr.flag(:UX)
{:error, {Cldr.UnknownTerritoryError, "The territory :UX is unknown"}}
Link to this function

get_locale(backend \\ nil)

View Source

Return the Cldr locale for the current process.

Note that the locale is set per-process. If the locale is not set for the given process then:

  • Return the global default locale which is defined under the :ex_cldr key in config.exs

  • Or the system-wide default locale which is "en-001"

Note that if there is no locale set for the current process then an error is not returned - a default locale will be returned per the rules above.

Example

iex> Cldr.put_locale(TestBackend.Cldr.Locale.new!("pl"))
iex> Cldr.get_locale()
%Cldr.LanguageTag{
   backend: TestBackend.Cldr,
   canonical_locale_name: "pl",
   cldr_locale_name: :pl,
   extensions: %{},
   language: "pl",
   locale: %{},
   private_use: [],
   rbnf_locale_name: :pl,
   territory: :PL,
   requested_locale_name: "pl",
   script: :Latn,
   transform: %{},
   language_variants: []
 }
Link to this macro

is_locale_name(locale_name)

View Source (macro)

Specs

known_calendars() :: [atom(), ...]

Returns a list of strings representing the calendars known to Cldr.

Example

iex> Cldr.known_calendars
[:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,
 :gregorian, :hebrew, :indian, :islamic, :islamic_civil, :islamic_rgsa,
 :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]

Specs

known_currencies() :: [atom(), ...] | []

Returns a list of strings representing the currencies known to Cldr.

Example

iex> Cldr.known_currencies
[:ADP, :AED, :AFA, :AFN, :ALK, :ALL, :AMD, :ANG, :AOA, :AOK, :AON, :AOR, :ARA,
 :ARL, :ARM, :ARP, :ARS, :ATS, :AUD, :AWG, :AZM, :AZN, :BAD, :BAM, :BAN, :BBD,
 :BDT, :BEC, :BEF, :BEL, :BGL, :BGM, :BGN, :BGO, :BHD, :BIF, :BMD, :BND, :BOB,
 :BOL, :BOP, :BOV, :BRB, :BRC, :BRE, :BRL, :BRN, :BRR, :BRZ, :BSD, :BTN, :BUK,
 :BWP, :BYB, :BYN, :BYR, :BZD, :CAD, :CDF, :CHE, :CHF, :CHW, :CLE, :CLF, :CLP,
 :CNH, :CNX, :CNY, :COP, :COU, :CRC, :CSD, :CSK, :CUC, :CUP, :CVE, :CYP, :CZK,
 :DDM, :DEM, :DJF, :DKK, :DOP, :DZD, :ECS, :ECV, :EEK, :EGP, :ERN, :ESA, :ESB,
 :ESP, :ETB, :EUR, :FIM, :FJD, :FKP, :FRF, :GBP, :GEK, :GEL, :GHC, :GHS, :GIP,
 :GMD, :GNF, :GNS, :GQE, :GRD, :GTQ, :GWE, :GWP, :GYD, :HKD, :HNL, :HRD, :HRK,
 :HTG, :HUF, :IDR, :IEP, :ILP, :ILR, :ILS, :INR, :IQD, :IRR, :ISJ, :ISK, :ITL,
 :JMD, :JOD, :JPY, :KES, :KGS, :KHR, :KMF, :KPW, :KRH, :KRO, :KRW, :KWD, :KYD,
 :KZT, :LAK, :LBP, :LKR, :LRD, :LSL, :LTL, :LTT, :LUC, :LUF, :LUL, :LVL, :LVR,
 :LYD, :MAD, :MAF, :MCF, :MDC, :MDL, :MGA, :MGF, :MKD, :MKN, :MLF, :MMK, :MNT,
 :MOP, :MRO, :MRU, :MTL, :MTP, :MUR, :MVP, :MVR, :MWK, :MXN, :MXP, :MXV, :MYR,
 :MZE, :MZM, :MZN, :NAD, :NGN, :NIC, :NIO, :NLG, :NOK, :NPR, :NZD, :OMR, :PAB,
 :PEI, :PEN, :PES, :PGK, :PHP, :PKR, :PLN, :PLZ, :PTE, :PYG, :QAR, :RHD, :ROL,
 :RON, :RSD, :RUB, :RUR, :RWF, :SAR, :SBD, :SCR, :SDD, :SDG, :SDP, :SEK, :SGD,
 :SHP, :SIT, :SKK, :SLL, :SOS, :SRD, :SRG, :SSP, :STD, :STN, :SUR, :SVC, :SYP,
 :SZL, :THB, :TJR, :TJS, :TMM, :TMT, :TND, :TOP, :TPE, :TRL, :TRY, :TTD, :TWD,
 :TZS, :UAH, :UAK, :UGS, :UGX, :USD, :USN, :USS, :UYI, :UYP, :UYU, :UYW, :UZS,
 :VEB, :VEF, :VES, :VND, :VNN, :VUV, :WST, :XAF, :XAG, :XAU, :XBA, :XBB, :XBC,
 :XBD, :XCD, :XDR, :XEU, :XFO, :XFU, :XOF, :XPD, :XPF, :XPT, :XRE, :XSU, :XTS,
 :XUA, :XXX, :YDD, :YER, :YUD, :YUM, :YUN, :YUR, :ZAL, :ZAR, :ZMK, :ZMW, :ZRN,
 :ZRZ, :ZWD, :ZWL, :ZWR]
Link to this function

known_gettext_locale_name(locale_name, backend \\ default_backend!())

View Source

Specs

known_gettext_locale_name(String.t(), backend()) :: String.t() | false

Returns either the Gettext locale_name in Cldr format or false based upon whether the locale name is configured in GetText.

Arguments

Examples

iex> Cldr.known_gettext_locale_name("en", TestBackend.Cldr)
"en"

iex> Cldr.known_gettext_locale_name("en-SA", TestBackend.Cldr)
false
Link to this function

known_gettext_locale_name?(locale_name, backend \\ default_backend!())

View Source

Specs

known_gettext_locale_name?(String.t(), backend()) :: boolean()

Returns a boolean indicating if the specified locale name is configured and available in Gettext.

Arguments

Examples

iex> Cldr.known_gettext_locale_name?("en", TestBackend.Cldr)
true

iex> Cldr.known_gettext_locale_name?("!!", TestBackend.Cldr)
false
Link to this function

known_gettext_locale_names(backend \\ default_backend!())

View Source

Specs

known_gettext_locale_names(backend()) :: [Cldr.Locale.locale_name(), ...] | []

Returns a list of GetText locale names but in CLDR format with underscore replaces by hyphen in order to facilitate comparisons with Cldr locale names.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend!/0. Note that Cldr.default_backend!/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.
Link to this function

known_locale_name(locale_name, backend \\ default_backend!())

View Source

Specs

known_locale_name(Cldr.Locale.locale_name() | String.t(), backend()) ::
  atom() | nil

Returns either the locale_name or false based upon whether the locale name is configured in Cldr.

This is helpful when building a list of or expressions to return the first known locale name from a list.

Arguments

Examples

iex> Cldr.known_locale_name(:"en-AU", TestBackend.Cldr)
:"en-AU"

iex> Cldr.known_locale_name(:"en-SA", TestBackend.Cldr)
nil
Link to this function

known_locale_name?(locale_name, backend \\ default_backend!())

View Source

Specs

known_locale_name?(Cldr.Locale.locale_name(), backend()) :: boolean()

Returns a boolean indicating if the specified locale name is configured and available in Cldr.

Arguments

Examples

iex> Cldr.known_locale_name?(:en, TestBackend.Cldr)
true

iex> Cldr.known_locale_name?(:"!!", TestBackend.Cldr)
false
Link to this function

known_locale_names(backend \\ default_backend!())

View Source

Specs

known_locale_names(backend()) :: [Cldr.Locale.locale_name(), ...] | []

Returns a list of the known locale names.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend!/0. Note that Cldr.default_backend!/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

Known locales are those locales which are the subset of all CLDR locales that have been configured for use either directly in the config.exs file or in Gettext.

Link to this function

known_number_system_types(backend \\ default_backend!())

View Source

Returns a list of atoms representing the number systems types known to Cldr.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend/0. Note that Cldr.default_backend/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

Example

iex> Cldr.known_number_system_types(TestBackend.Cldr)
[:default, :finance, :native, :traditional]

Specs

known_number_systems() :: [atom(), ...] | []

Returns a list of atoms representing the number systems known to Cldr.

Example

iex> Cldr.known_number_systems
[:adlm, :ahom, :arab, :arabext, :armn, :armnlow, :bali, :beng, :bhks, :brah,
 :cakm, :cham, :cyrl, :deva, :diak, :ethi, :fullwide, :geor, :gong, :gonm, :grek,
 :greklow, :gujr, :guru, :hanidays, :hanidec, :hans, :hansfin, :hant, :hantfin,
 :hebr, :hmng, :hmnp, :java, :jpan, :jpanfin, :jpanyear, :kali, :khmr, :knda, :lana, :lanatham,
 :laoo, :latn, :lepc, :limb, :mathbold, :mathdbl, :mathmono, :mathsanb,
 :mathsans, :mlym, :modi, :mong, :mroo, :mtei, :mymr, :mymrshan, :mymrtlng,
 :newa, :nkoo, :olck, :orya, :osma, :rohg, :roman, :romanlow, :saur, :segment, :shrd,
 :sind, :sinh, :sora, :sund, :takr, :talu, :taml, :tamldec, :telu, :thai, :tibt,
 :tirh, :tnsa, :vaii, :wara, :wcho]
Link to this function

known_rbnf_locale_name(locale_name, backend \\ default_backend!())

View Source

Specs

known_rbnf_locale_name(Cldr.Locale.locale_name(), backend()) ::
  String.t() | false

Returns either the RBNF locale_name or false based upon whether the locale name is configured in Cldr and has RBNF rules defined.

Arguments

Examples

iex> Cldr.known_rbnf_locale_name(:en, TestBackend.Cldr)
:en

iex> Cldr.known_rbnf_locale_name(:"en-SA", TestBackend.Cldr)
false
Link to this function

known_rbnf_locale_name?(locale_name, backend \\ default_backend!())

View Source

Specs

known_rbnf_locale_name?(Cldr.Locale.locale_name(), backend()) :: boolean()

Returns a boolean indicating if the specified locale name is configured and available in Cldr and supports rules based number formats (RBNF).

Arguments

Examples

iex> Cldr.known_rbnf_locale_name?(:en, TestBackend.Cldr)
true

iex> Cldr.known_rbnf_locale_name?(:"!!", TestBackend.Cldr)
false
Link to this function

known_rbnf_locale_names(backend \\ default_backend!())

View Source

Specs

known_rbnf_locale_names(backend()) :: [Cldr.Locale.locale_name(), ...] | []

Returns a list of locale names which have rules based number formats (RBNF).

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module

Specs

known_territories() :: [atom(), ...]

Returns a list of the territories known to Cldr.

The territories codes are defined in UN M.49 which defines both individual territories and enclosing territories. These enclosing territories are defined for statistical purposes and do not relate to political alignment.

For example, the territory :"001" is defined as "the world".

Example

iex> Cldr.known_territories
[:"001", :"002", :"003", :"005", :"009", :"011", :"013", :"014", :"015", :"017",
 :"018", :"019", :"021", :"029", :"030", :"034", :"035", :"039", :"053", :"054",
 :"057", :"061", :"142", :"143", :"145", :"150", :"151", :"154", :"155", :"202",
 :"419", :AC, :AD, :AE, :AF, :AG, :AI, :AL, :AM, :AO, :AQ, :AR, :AS, :AT, :AU,
 :AW, :AX, :AZ, :BA, :BB, :BD, :BE, :BF, :BG, :BH, :BI, :BJ, :BL, :BM, :BN, :BO,
 :BQ, :BR, :BS, :BT, :BV, :BW, :BY, :BZ, :CA, :CC, :CD, :CF, :CG, :CH, :CI, :CK,
 :CL, :CM, :CN, :CO, :CP, :CR, :CU, :CV, :CW, :CX, :CY, :CZ, :DE, :DG, :DJ, :DK,
 :DM, :DO, :DZ, :EA, :EC, :EE, :EG, :EH, :ER, :ES, :ET, :EU, :EZ, :FI, :FJ, :FK,
 :FM, :FO, :FR, :GA, :GB, :GD, :GE, :GF, :GG, :GH, :GI, :GL, :GM, :GN, :GP, :GQ,
 :GR, :GS, :GT, :GU, :GW, :GY, :HK, :HM, :HN, :HR, :HT, :HU, :IC, :ID, :IE, :IL,
 :IM, :IN, :IO, :IQ, :IR, :IS, :IT, :JE, :JM, :JO, :JP, :KE, :KG, :KH, :KI, :KM,
 :KN, :KP, :KR, :KW, :KY, :KZ, :LA, :LB, :LC, :LI, :LK, :LR, :LS, :LT, :LU, :LV,
 :LY, :MA, :MC, :MD, :ME, :MF, :MG, :MH, :MK, :ML, :MM, :MN, :MO, :MP, :MQ, :MR,
 :MS, :MT, :MU, :MV, :MW, :MX, :MY, :MZ, :NA, :NC, :NE, :NF, :NG, :NI, :NL, :NO,
 :NP, :NR, :NU, :NZ, :OM, :PA, :PE, :PF, :PG, :PH, :PK, :PL, :PM, :PN, :PR, :PS,
 :PT, :PW, :PY, :QA, :QO, :RE, :RO, :RS, :RU, :RW, :SA, :SB, :SC, :SD, :SE, :SG,
 :SH, :SI, :SJ, :SK, :SL, :SM, :SN, :SO, :SR, :SS, :ST, :SV, :SX, :SY, :SZ, :TA,
 :TC, :TD, :TF, :TG, :TH, :TJ, :TK, :TL, :TM, :TN, :TO, :TR, :TT, :TV, :TW, :TZ,
 :UA, :UG, :UM, :UN, :US, :UY, :UZ, :VA, :VC, :VE, :VG, :VI, :VN, :VU, :WF, :WS,
 :XK, :YE, :YT, :ZA, :ZM, :ZW]
Link to this function

known_territory_subdivision_containment()

View Source

Specs

known_territory_subdivision_containment() :: map()

Returns a map of territory subdivisions sith a list of their parent subdivisions and region.

For a description of territory subdivisions see Cldr.known_territory_subdivisions/0

Link to this function

known_territory_subdivisions()

View Source

Specs

known_territory_subdivisions() :: %{required(atom()) => list()}

Returns the map of territories and subdivisions and their child subdivsions.

The subdivision codes designate a subdivision of a country or region. They are called various names, such as a state in the United States, or a province in Canada.

The codes in CLDR are based on ISO 3166-2 subdivision codes. The ISO codes have a region code followed by a hyphen, then a suffix consisting of 1..3 ASCII letters or digits.

The CLDR codes are designed to work in a unicode_locale_id (BCP47), and are thus all lowercase, with no hyphen. For example, the following are valid, and mean “English as used in California, USA”.

en-u-sd-usca
en-US-u-sd-usca

CLDR has additional subdivision codes. These may start with a 3-digit region code or use a suffix of 4 ASCII letters or digits, so they will not collide with the ISO codes. Subdivision codes for unknown values are the region code plus "zzzz", such as "uszzzz" for an unknown subdivision of the US. Other codes may be added for stability.

Link to this function

put_default_backend(backend)

View Source

Set the default system-wide backend module.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module.

Returns

  • {:ok, backend} or

  • {:error, {exception, reason}}

Link to this function

put_default_locale(locale)

View Source

Set's the system default locale.

The locale set here is the based level system default equivalent to setting the :default_locale key in config.exs.

Arguments

Returns

  • {:ok, locale}
Link to this function

put_default_locale(locale_name, backend \\ default_backend!())

View Source

Sets the system default locale.

The locale set here is the based level system default equivalent to setting the :default_locale key in config.exs.

Arguments

  • locale is any valid locale name returned by Cldr.known_locale_names/1

  • backend is any module that includes use Cldr and therefore is a Cldr backend module

Returns

  • {:ok, locale} or

  • {:error, {exception, reason}}

Link to this function

put_gettext_locale(locale)

View Source

Specs

put_gettext_locale(Cldr.LanguageTag.t()) ::
  {:ok, binary() | nil} | {:error, {module(), String.t()}}

Set the current process's Gettext locale from a t:Cldr.LanguageTag.

Arguments

Returns

  • {:ok, gettext_locale_name} or

  • {:error, {exception, reason}}

Behaviour

  1. If the locale.gettext_locale_name is nil then an error is returned.

  2. The gettext locale for the gettext_backend configured for the CLDR backend defined by the t:Cldr.LanguageTag is set.

Examples

iex> import Cldr.LanguageTag.Sigil
iex> Cldr.put_gettext_locale(~l"en")
{:ok, "en"}

iex> import Cldr.LanguageTag.Sigil
iex> Cldr.put_gettext_locale(~l"de")
{:error,
  {Cldr.UnknownLocaleError,
    "Locale #Cldr.LanguageTag<de [validated]> does not map to a known gettext locale name"}}
Link to this function

put_locale(backend \\ nil, locale)

View Source

Specs

put_locale(backend(), Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) ::
  {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}

Set the current process's locale for a specified backend or for all backends.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is to set the locale for all backends.

  • locale is any valid locale name returned by Cldr.known_locale_names/1 or a Cldr.LanguageTag struct returned by Cldr.Locale.new!/2. It may also be a map that contains the keys "cldr_locale" and "cldr_backend" which is the shape of a Phoenix and Plug session making it easy to set the locale from a session.

Returns

  • {:ok, locale}

Behaviour

  1. If no backend is provided and the locale is a Cldr.LanguageTag.t then the the locale is set as the default for the current process

Notes

See rfc5646 for the specification of a language tag

Examples

iex> Cldr.put_locale(TestBackend.Cldr, "en")
{:ok,
 %Cldr.LanguageTag{
   backend: TestBackend.Cldr,
   canonical_locale_name: "en",
   cldr_locale_name: :en,
   language_subtags: [],
   extensions: %{},
   gettext_locale_name: "en",
   language: "en",
   locale: %{},
   private_use: [],
   rbnf_locale_name: :en,
   requested_locale_name: "en",
   script: :Latn,
   territory: :US,
   transform: %{},
   language_variants: []
 }}

iex> Cldr.put_locale(TestBackend.Cldr, "invalid-locale!")
{:error, {Cldr.LanguageTag.ParseError,
  "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
Link to this function

quote(string, backend \\ default_backend!(), options \\ [])

View Source

Specs

quote(String.t(), backend(), Keyword.t()) :: String.t()

Add locale-specific quotation marks around a string.

Arguments

  • string is any valid Elixir string

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend!/0. Note that Cldr.default_backend!/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

  • options is a keyword list of options

Options

Examples

iex> Cldr.quote "Quoted String", MyApp.Cldr
"“Quoted String”"

iex> Cldr.quote "Quoted String", MyApp.Cldr, locale: "ja"
"「Quoted String」"
Link to this function

requested_locale_names(backend \\ default_backend!())

View Source

Specs

requested_locale_names(backend()) :: [Cldr.Locale.locale_name(), ...] | []

Returns a list of all requested locale names.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend!/0. Note that Cldr.default_backend!/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

The list is the combination of configured locales, Gettext locales and the default locale.

See also known_locales/1 and all_locales/0

Return the territory fallback chain based upon a locales territory (including u extension) and territory containment definitions.

While CLDR also includes subdivisions in the territory chain, this implementation does not consider them.

Arguments

  • territory is either a binary or atom territory code or a t:Cldr.LanguageTag

Returns

  • {:ok, list} where list is a list of territories in decreasing order of containment (ie larger enclosing areas) or

  • {:error, {exception, reason}} indicating an error

Examples

iex> Cldr.territory_chain "US"
{:ok, [:US, :"021", :"019", :"001"]}

iex> Cldr.territory_chain :AU
{:ok, [:AU, :"053", :"009", :"001"]}

iex> {:ok, locale} = Cldr.validate_locale("en-US-u-rg-CAzzzz", MyApp.Cldr)
iex> Cldr.territory_chain locale
{:ok, [:CA, :"021", :"019", :"001"]}

iex> Cldr.territory_chain :"001"
{:ok, [:"001"]}
Link to this function

territory_chain(locale_name, backend)

View Source

Return the territory fallback chain based upon a locales territory (including u extension) and territory containment definitions.

While CLDR also includes subdivisions in the territory chain, this implementation does not consider them.

Arguments

  • locale is a binary locale name

  • backend is any module that includes use Cldr and therefore is a Cldr backend module.

Returns

  • {:ok, list} where list is a list of territories in decreasing order of containment (ie larger enclosing areas) or

  • {:error, {exception, reason}} indicating an error

Examples

iex> Cldr.territory_chain "en-US-u-rg-CAzzzz", MyApp.Cldr
{:ok, [:CA, :"021", :"019", :"001"]}

Specs

territory_containment() :: map()

Returns the territory for the world

This is the outermost containment of territories in CLDR.

CLDR does not yet consider non-terrestrial territories.

Specs

to_string(term()) :: String.t()

Return a localsed string for types that implement the Cldr.Chars protocol.

The Cldr.Chars protocol is implemented in this library for t:Cldr.LanguageTag.t().

Other CLDR-related libraries implement the protocol for the types they support such as Float, Integer, Decimal, Money, Unit and List.

Link to this function

unknown_calendar_error(calendar)

View Source

Returns an error tuple for an invalid calendar.

Arguments

Returns

  • {:error, {Cldr.UnknownCalendarError, message}}

Examples

iex> Cldr.unknown_calendar_error("invalid")
{Cldr.UnknownCalendarError, "The calendar name \"invalid\" is invalid"}
Link to this function

unknown_currency_error(currency)

View Source

Returns an error tuple for an invalid currency.

Arguments

Returns

  • {:error, {Cldr.UnknownCurrencyError, message}}

Examples

iex> Cldr.unknown_currency_error("invalid")
{Cldr.UnknownCurrencyError, "The currency \"invalid\" is invalid"}
Link to this function

unknown_locale_names(backend \\ default_backend!())

View Source

Specs

unknown_locale_names(backend()) :: [Cldr.Locale.locale_name(), ...] | []

Returns a list of the locales names that are configured, but not known in CLDR.

Arguments

  • backend is any module that includes use Cldr and therefore is a Cldr backend module. The default is Cldr.default_backend!/0. Note that Cldr.default_backend!/0 will raise an exception if no :default_backend is configured under the :ex_cldr key in config.exs.

Since there is a compile-time exception raise if there are any unknown locales this function should always return an empty list.

Link to this function

unknown_measurement_system_error(measurement_system)

View Source
Link to this function

unknown_number_system_error(number_system)

View Source

Specs

unknown_number_system_error(any()) ::
  {Cldr.UnknownNumberSystemError, String.t()}

Returns an error tuple for an unknown number system.

Arguments

Returns

  • {:error, {Cldr.UnknownNumberSystemError, message}}

Examples

iex> Cldr.unknown_number_system_error "invalid"
{Cldr.UnknownNumberSystemError, "The number system \"invalid\" is invalid"}

iex> Cldr.unknown_number_system_error :invalid
{Cldr.UnknownNumberSystemError, "The number system :invalid is unknown"}
Link to this function

unknown_number_system_type_error(number_system_type)

View Source

Specs

unknown_number_system_type_error(any()) ::
  {Cldr.UnknownNumberSystemTypeError, String.t()}

Returns an error tuple for an unknown number system type.

Options

Returns

  • {:error, {Cldr.UnknownNumberSystemTypeError, message}}

Examples

iex> Cldr.unknown_number_system_type_error("invalid")
{Cldr.UnknownNumberSystemTypeError, "The number system type \"invalid\" is invalid"}

iex> Cldr.unknown_number_system_type_error(:invalid)
{Cldr.UnknownNumberSystemTypeError, "The number system type :invalid is unknown"}
Link to this function

unknown_plural_type_error(plural_type)

View Source

Specs

unknown_plural_type_error(any()) :: {Cldr.UnknownPluralTypeError, String.t()}

Returns an error tuple for an unknown plural type.

Options

  • plural_type is any unknown number system type

Returns

  • {:error, {Cldr.UnknownPluralTypeError, message}}

Examples

iex> Cldr.unknown_plural_type_error("invalid")
{Cldr.UnknownPluralTypeError, "The plural type \"invalid\" is invalid"}

iex> Cldr.unknown_plural_type_error(:invalid)
{Cldr.UnknownPluralTypeError, "The plural type :invalid is unknown"}
Link to this function

unknown_script_error(script)

View Source (since 2.23.0)

Specs

unknown_script_error(any()) :: {Cldr.InvalidScriptError, String.t()}

Returns an error tuple for an invalid script.

Arguments

  • script is any script as a string or an atom

Returns

  • {:error, {Cldr.InvalidScriptError, message}}

Examples

iex> Cldr.unknown_script_error "invalid"
{Cldr.InvalidScriptError, "The script \"invalid\" is invalid"}

iex> Cldr.unknown_script_error :invalid
{Cldr.InvalidScriptError, "The script :invalid is invalid"}
Link to this function

unknown_territory_error(territory)

View Source

Specs

unknown_territory_error(any()) :: {Cldr.UnknownTerritoryError, String.t()}

Returns an error tuple for an unknown territory.

Arguments

Returns

  • {:error, {Cldr.UnknownTerritoryError, message}}

Examples

iex> Cldr.unknown_territory_error("invalid")
{Cldr.UnknownTerritoryError, "The territory \"invalid\" is unknown"}
Link to this function

validate_backend(backend)

View Source

Specs

validate_backend(backend :: atom()) ::
  {:ok, atom()} | {:error, {atom(), binary()}}

Validates that a module is a CLDR backend module.

Arguments

  • backend is any module name that may be a CLDR backend module.

Returns

  • {:ok, backend} is the module if a CLDR backend module or

  • {:error, {exception, reason}} if the module is unknown or if the module is not a backend module.

Examples

iex> Cldr.validate_backend MyApp.Cldr
{:ok, MyApp.Cldr}

iex> Cldr.validate_backend :something_else
{:error,
 {Cldr.UnknownBackendError,
  "The backend :something_else is not known or not a backend module."}}
Link to this function

validate_calendar(calendar)

View Source

Specs

validate_calendar(atom() | String.t()) ::
  {:ok, atom()} | {:error, {module(), String.t()}}

Normalise and validate a calendar name.

Arguments

Returns

  • {:ok, normalized_calendar_name} or

  • {:error, {Cldr.UnknownCalendarError, message}}

Examples

iex> Cldr.validate_calendar(:gregorian)
{:ok, :gregorian}

iex> Cldr.validate_calendar(:invalid)
{:error, {Cldr.UnknownCalendarError, "The calendar name :invalid is invalid"}}
Link to this function

validate_currency(currency)

View Source

Normalize and validate a currency code.

Arguments

  • currency is any ISO 4217 currency code as returned by Cldr.known_currencies/0 or any valid private use ISO4217 code which is a three-letter alphabetic code that starts with "X".

Returns

  • {:ok, normalized_currency_code} or

  • {:error, {Cldr.UnknownCurrencyError, message}}

Examples

iex> Cldr.validate_currency(:USD)
{:ok, :USD}

iex> Cldr.validate_currency("USD")
{:ok, :USD}

iex> Cldr.validate_currency(:XTC)
{:ok, :XTC}

iex> Cldr.validate_currency("xtc")
{:ok, :XTC}

iex> Cldr.validate_currency("invalid")
{:error, {Cldr.UnknownCurrencyError, "The currency \"invalid\" is invalid"}}

iex> Cldr.validate_currency(:invalid)
{:error, {Cldr.UnknownCurrencyError, "The currency :invalid is invalid"}}
Link to this function

validate_gettext_locale(locale_name, backend \\ default_backend!())

View Source

Specs

validate_gettext_locale(
  Cldr.Locale.locale_name() | Cldr.LanguageTag.t(),
  backend()
) ::
  {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}

Normalise and validate a gettext locale name.

Arguments

Returns

  • {:ok, language_tag}

  • {:error, reason}

Examples

Link to this function

validate_locale(locale, backend \\ nil)

View Source

Specs

validate_locale(
  Cldr.Locale.locale_name() | Cldr.LanguageTag.t() | String.t(),
  backend()
) ::
  {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}

Normalise and validate a locale name.

Arguments

Returns

  • {:ok, language_tag}

  • {:error, reason}

Examples

iex> Cldr.validate_locale(:en, TestBackend.Cldr)
{:ok,
%Cldr.LanguageTag{
  backend: TestBackend.Cldr,
  canonical_locale_name: "en",
  cldr_locale_name: :en,
  extensions: %{},
  gettext_locale_name: "en",
  language: "en",
  locale: %{},
  private_use: [],
  rbnf_locale_name: :en,
  requested_locale_name: "en",
  script: :Latn,
  territory: :US,
  transform: %{},
  language_variants: []
}}

iex> Cldr.validate_locale(:af, TestBackend.Cldr)
{:ok,
%Cldr.LanguageTag{
  backend: TestBackend.Cldr,
  canonical_locale_name: "af",
  cldr_locale_name: :af,
  extensions: %{},
  gettext_locale_name: nil,
  language: "af",
  locale: %{},
  private_use: [],
  rbnf_locale_name: :af,
  requested_locale_name: "af",
  script: :Latn,
  territory: :ZA,
  transform: %{},
  language_variants: []
}}

iex> Cldr.validate_locale("zzz", TestBackend.Cldr)
{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
Link to this function

validate_measurement_system(system)

View Source

Normalise and validate a measurement system type.

Arguments

  • measurement_system is a known measurement system.

Returns

  • {:ok, normalized_measurement_system} or

  • {:error, {exception, message}}

Examples

iex> Cldr.validate_measurement_system :metric
{:ok, :metric}

iex> Cldr.validate_measurement_system "ussystem"
{:ok, :ussystem}

iex> Cldr.validate_measurement_system "uksystem"
{:ok, :uksystem}

iex> Cldr.validate_measurement_system "something"
{:error, {Cldr.UnknownMeasurementSystemError,
 "The measurement system \"something\" is invalid"}}
Link to this function

validate_number_system(number_system)

View Source

Specs

validate_number_system(atom() | String.t()) ::
  {:ok, atom()} | {:error, {module(), String.t()}}

Normalize and validate a number system name.

Arguments

Returns

  • {:ok, normalized_number_system_name} or

  • {:error, {exception, message}}

Examples

iex> Cldr.validate_number_system :latn
{:ok, :latn}

iex> Cldr.validate_number_system :arab
{:ok, :arab}

iex> Cldr.validate_number_system "invalid"
{
  :error,
  {Cldr.UnknownNumberSystemError, "The number system :invalid is unknown"}
}
Link to this function

validate_number_system_type(number_system_type, backend \\ default_backend!())

View Source

Specs

validate_number_system_type(String.t() | atom(), backend()) ::
  {:ok, atom()} | {:error, {module(), String.t()}}

Normalise and validate a number system type.

Arguments

Returns

  • {:ok, normalized_number_system_type} or

  • {:error, {exception, message}}

Examples

iex> Cldr.validate_number_system_type(:default, TestBackend.Cldr)
{:ok, :default}

iex> Cldr.validate_number_system_type(:traditional, TestBackend.Cldr)
{:ok, :traditional}

iex> Cldr.validate_number_system_type(:latn, TestBackend.Cldr)
{
  :error,
  {Cldr.UnknownNumberSystemTypeError, "The number system type :latn is unknown"}
}
Link to this function

validate_plural_type(plural_type)

View Source

Specs

validate_plural_type(atom() | String.t()) ::
  {:ok, Cldr.Number.PluralRule.plural_type()} | {:error, {module(), String.t()}}

Normalize and validate a plural type.

Arguments

Returns

  • {:ok, normalized_plural_type} or

  • {:error, {exception, message}}

Examples

iex> Cldr.validate_plural_type :few
{:ok, :few}

iex> Cldr.validate_plural_type "one"
{:ok, :one}

iex> Cldr.validate_plural_type "invalid"
{
  :error,
  {Cldr.UnknownPluralTypeError, "The plural type :invalid is unknown"}
}
Link to this function

validate_script(script)

View Source (since 2.23.0)

Specs

validate_script(Cldr.Locale.script() | String.t()) ::
  {:ok, atom()} | {:error, {module(), String.t()}}

Normalise and validate a script code.

Arguments

  • script is any script code as a binary or atom

Returns:

  • {:ok, normalized_script_code} or

  • {:error, {Cldr.UnknownscriptError, message}}

Examples

iex> Cldr.validate_script("thai")
{:ok, :Thai}

iex> Cldr.validate_script("qaai")
{:ok, :Zinh}

iex> Cldr.validate_script(Cldr.Locale.new!("en", TestBackend.Cldr))
{:ok, :Latn}

iex> Cldr.validate_script("aaaa")
{:error, {Cldr.InvalidScriptError, "The script \"aaaa\" is invalid"}}

iex> Cldr.validate_script(%{})
{:error, {Cldr.InvalidScriptError, "The script %{} is invalid"}}
Link to this function

validate_territory(territory)

View Source

Specs

validate_territory(atom() | String.t()) ::
  {:ok, Cldr.Locale.territory_code()} | {:error, {module(), String.t()}}

Normalise and validate a territory code.

Arguments

Returns:

  • {:ok, normalized_territory_code} or

  • {:error, {Cldr.UnknownTerritoryError, message}}

Examples

iex> Cldr.validate_territory("en")
{:error, {Cldr.UnknownTerritoryError, "The territory \"en\" is unknown"}}

iex> Cldr.validate_territory("gb")
{:ok, :GB}

iex> Cldr.validate_territory("001")
{:ok, :"001"}

iex> Cldr.validate_territory(Cldr.Locale.new!("en", TestBackend.Cldr))
{:ok, :US}

iex> Cldr.validate_territory(%{})
{:error, {Cldr.UnknownTerritoryError, "The territory %{} is unknown"}}
Link to this function

validate_territory_subdivision(subdivision)

View Source

Normalise and validate a territory subdivision code.

Arguments

Returns:

  • {:ok, normalized_subdivision_code} or

  • {:error, {Cldr.UnknownTerritoryError, message}}

Examples

Specs

Returns the version of the CLDR repository as a tuple

Example

iex> Cldr.version
{40, 0, 0}