Cldr v0.0.12 Cldr.Number.Transliterate

Transliteration for digits and separators.

Transliterating a string is an expensive business. First the string has to be exploded into its component graphemes. Then for each grapheme we have to map to the equivalent in the other {locale, number_system}. Then we have to reassemble the string.

Effort is made to short circuit where possible. Transliteration is not required for any {locale, number_system} that is the same as {"en", "latn"} since the implementation usese this for the placeholders during formatting already. When short circuiting is possible (typically the en-* locales with “latn” number_system - the total number of short circuited locales is 211 of the 511 in CLDR) the overall number formatting is twice as fast than when formal transliteration is required.

Summary

Functions

transliterate(sequence, locale \\ Cldr.get_locale(), number_system \\ System.default_number_system_type())
transliterate(String.t | number, Cldr.locale, String.t) :: String.t

Transliterates from latin digits to another number system’s digits.

Transliterates the latin digits 0..9 to their equivalents in another number system. Also transliterates the decimal and grouping separators as well as the plus and minus sign. Any other character in the string will be returned “as is”.

  • sequence is the string to be transliterated.

  • locale is any known locale, defaulting to Cldr.get_locale().

  • number_system is any known number system. If expressed as a string it is the actual name of a known number system. If epressed as an atom it is used as a key to look up a number system for the locale (the usual keys are :default and :native but :traditional and :finance are also part of the standard). See Cldr.Number.System.number_systems_for/1 for a locale to see what number system types are defined. The default is :default.

For available number systems see Cldr.Number.System.number_systems/0 and Cldr.Number.System.number_systems_for/1. Also see Cldr.Number.Symbol.number_symbols_for/1.

Examples

iex> Cldr.Number.System.transliterate("123556")
"123556"

iex> Cldr.Number.System.transliterate("123,556.000", "fr", :default)
"123 556,000"

iex> Cldr.Number.System.transliterate("123556", "th", :default)
"123556"

iex> Cldr.Number.System.transliterate("123556", "th", "thai")
"๑๒๓๕๕๖"

iex> Cldr.Number.System.transliterate("123556", "th", :native)
"๑๒๓๕๕๖"

iex> Cldr.Number.System.transliterate("Some number is: 123556", "th", "thai")
"Some number is: ๑๒๓๕๕๖"

iex(5)> Cldr.Number.System.transliterate(12345, "th", "thai")
"๑๒๓๔๕"

iex(6)> Cldr.Number.System.transliterate(12345.0, "th", "thai")
"๑๒๓๔๕.๐"

iex(7)> Cldr.Number.System.transliterate(Decimal.new(12345.0), "th", "thai")
"๑๒๓๔๕.๐"