Changelog for Cldr_Numbers v2.16.0
This is the changelog for Cldr v2.16.0 released on November 1st, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
Support CLDR 38
Add
Cldr.Number.Formatter.Short.short_format_exponent/2to support compact number pluralization that is added to CLDR 38 (for the "fr" locale only in this release)
Changelog for Cldr_Numbers v2.15.4
This is the changelog for Cldr v2.15.4 released on Septmber 26th, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
- Use
Cldr.default_backend!/1when available sinceCldr.default_backend/0is deprecated as ofex_cldrverison2.18.0.
Bug Fixes
Use
Cldr.Decimal.compare/2which works consistently withDecimal1.xand2.xApply compile-time detection of
Decimalversion in order to know the correct return type ofDecimal.parse/1which differs between1.xand2.x
Changelog for Cldr_Numbers v2.15.3
This is the changelog for Cldr v2.15.3 released on September 5th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix documentation referencing
Cldr.known_locale_names/10to correctly referenceCldr.known_locale_names/0.
Changelog for Cldr_Numbers v2.15.2
This is the changelog for Cldr v2.15.2 released on August 30th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Removes dialyzer warning when running on Elixir 1.11. Uses
Logger.warning/2notLogger.warn/2in this case and uses an anonymous function not a string so that dialyzer is happy.
Changelog for Cldr_Numbers v2.15.1
This is the changelog for Cldr v2.15.1 released on June 23rd, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
Fixes two number parsing bugs:
- A bug whereby decimal and separator symbols would be impacted in non-number strings when using
MyApp.Cldr.Number.scan/2 - A bug whereby numbers using various localised symbols would not be recognised
- A bug whereby decimal and separator symbols would be impacted in non-number strings when using
Fix formatter pipeline generation which was including the
round nearestpipeline stage even when not required. Thanks to @jeroenvisser101 for the collaboration. Fixes #14.
Changelog for Cldr_Numbers v2.15.0
This is the changelog for Cldr v2.15.0 released on June 13th, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
Support binary locale name as an argument to
Cldr.Number.System.number_system_from_locale/2Add
number_system_from_locale/1to backend modules
Changelog for Cldr_Numbers v2.14.0
This is the changelog for Cldr v2.14.0 released on May 27th, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
Add
Cldr.Number.Parser.parse/2to parse numbers in a locale-aware mannerAdd
Cldr.Number.Parser.scan/2to parse a string into a list of string and numbersAdd
Cldr.Number.Parser.resolve_currencies/2to match strings to currency codes in a listAdd
Cldr.Number.Parser.resolve_currency/2to match a string to a currency code
Changelog for Cldr_Numbers v2.13.2
This is the changelog for Cldr v2.13.2 released on May 16th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix regression and allow
:percentformats inCldr.Number.to_string/3. Thanks to @maennchen. Fixes #13.
Changelog for Cldr_Numbers v2.13.1
This is the changelog for Cldr v2.13.1 released on May 14th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix regression and allow
:fractional_digitsto be0. Thanks to @coladarci. Fixes #12.
Changelog for Cldr_Numbers v2.13.0
This is the changelog for Cldr v2.13.0 released on May 2nd, 2020. For older changelogs please consult the release tag on GitHub
Breaking change
- In previous releases, requesting a currency format in
Number.to_string/3without specifying an option:currencywould return an error. In this release, a currency is derived from the locale (either the:localeparameter or frombackend.get_locale()). The affected currency formats are:currency,:accounting,:currency_longand:currency_short
Enhancements
Cldr.Number.to_string/2now detects the number system from any supplied locale. If provided, the option:number_systemtakes precedence over the number system derived from a locale.Add
:round_nearestformatting option forCldr.Number.to_string/3. If provided, this option overrides the value defined by the:formatoption.Refines number system detection. The order of precedence is:
- The
:number_systemoption if provided - The
:number_systemfrom the locale if provided - The
:number_systemfrom the current locale for the supplied backend. This locale is retrieved withbackend.get_locale()
- The
Changelog for Cldr_Numbers v2.12.1
This is the changelog for Cldr v2.12.1 released on March 2nd, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Use the RBNF format
spellout_numberinginstead ofspellout_cardinalfor theCldr.Number.to_string/3optionformat: :spelloutsincespellout_numberinghas a larger locale coverage of RBNF formats.
Changelog for Cldr_Numbers v2.12.0
This is the changelog for Cldr v2.12.0 released on January 21st, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
- Updates version requirement for
cldr_utilsin order to support versions ofdecimalfrom1.6up to2.0.
Bug fixes
- Fixes an incorrect typespec on
Cldr.Number.Format.format_from_locale_or_options/1that was causing a dialyzer warning
Changelog for Cldr_Numbers v2.11.0
This is the changelog for Cldr v2.11.0 released on January 19th, 2020. For older changelogs please consult the release tag on GitHub
Enhancements
- Uses the number system defined by the locale if it is specified. The number system is defined as part of the U extension. The order of precedence is:
- :default if no option is provided to
MyApp.Cldr.Number.to_string/2and no number system is defined in the locale - The option
:number_systemif it is provided toMyApp.Cldr.Number.to_string/2 - The locale's
number_systemif it is defined and the option:number_systemtoMyApp.Cldr.Number.to_string/2is not provided
- :default if no option is provided to
Examples:
# Locale defines a number system and no option :number_system is provided
iex> TestBackend.Cldr.Number.to_string(1234, locale: "th-u-nu-thai")
{:ok, "๑,๒๓๔"}
# Locale defines a number system but an option :number_system is also provded which
# take precedence
iex> MyApp.Cldr.Number.to_string 1234, locale: "th-u-nu-latn", number_system: :thai
{:ok, "๑,๒๓๔"}
# A number system is defined in the locale but it is not supported by the
# locale
iex> MyApp.Cldr.Number.to_string 1234, locale: "en-AU-u-nu-thai"
{:error,
{Cldr.UnknownNumberSystemError,
"The number system :thai is unknown for the locale named \"en\". Valid number systems are %{default: :latn, native: :latn}"}}- Uses the currency code defined by the locale if it is specified and the number format requested is
:currency. The currency code is defined as part of the U extension. The order of precedence is:- The option
:currencyif it is provided toMyApp.Cldr.Number.to_string/2 - The locale's
currency codeif it is defined and the option:currencytoMyApp.Cldr.Number.to_string/2is not provided
- The option
Examples:
# Use the currency code :AUD specified in the locale
iex> MyApp.Cldr.Number.to_string 1234, locale: "en-AU-u-cu-aud", format: :currency
{:ok, "A$1,234.00"}
# Use the currency code :USD provided as an option in precedence over the currency code
# defined by the locale
iex> MyApp.Cldr.Number.to_string 1234, locale: "en-AU-u-cu-aud", format: :currency, currency: :USD
{:ok, "$1,234.00"}- Uses the currency format defined by the locale if it is specified and the number format requested is
:currencyor:accounting. The currency format is defined as part of the U extension. The order of precedence is:- The locale's
currency formatif it is defined and the option:formattoMyApp.Cldr.Number.to_string/2is either:currencyor:accounting. Therefore the locales currency format takes precendence over the:formatargument but only if:formatis a currency format. - The option
:formatin every other case
- The locale's
Examples:
# Using in the locale currency format - just happens to be the same as the format option
iex> MyApp.Cldr.Number.to_string -1234, locale: "en-AU-u-cu-aud-cf-standard", format: :currency
{:ok, "A$-1,234.00"}
# The locale format takes precedence over the format option
iex> MyApp.Cldr.Number.to_string -1234, locale: "en-AU-u-cu-aud-cf-standard", format: :accounting
{:ok, "A$-1,234.00"}
iex> MyApp.Cldr.Number.to_string -1234, locale: "en-AU-u-cu-aud-cf-account", format: :accounting
{:ok, "(A$1,234.00)"}
iex> MyApp.Cldr.Number.to_string -1234, locale: "en-AU-u-cu-aud-cf-account", format: :currency
{:ok, "(A$1,234.00)"}Changelog for Cldr_Numbers v2.10.0
This is the changelog for Cldr v2.10.0 released on January 15th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fixes formatting of negative percentages. Actually fixes an issue where the default negative format would be incorrect in many cases. Thanks to @maennchen. Closes #11.
Enhancements
- Optionally logs a warning if compiling a number format at runtime. The warning is emitted only once for each format to reduce log clutter. The log warning is emitted if the backend configuration key
:supress_warningsis set tofalse(this is the default value). Thewarn_oncemechanism depends on the availability of the:persistent_termmodule which is only available from OTP 21.2 onwards. On earlier releases of OTP no warning will be emitted.
Changelog for Cldr_Numbers v2.9.0
This is the changelog for Cldr v2.9.0 released on October 20th, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Adds option
:currency_symboltoCldr.Number.to_string/2. This option, when set to:isochanges a currency format to force using the ISO currency code instead of the native currency symbol.
Changelog for Cldr_Numbers v2.8.0
This is the changelog for Cldr v2.8.0 released on October 10th, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
Changelog for Cldr_Numbers v2.7.2
This is the changelog for Cldr v2.7.2 released on September 7th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Call
Keyword.get_lazy/3when accessingCldr.default_locale/0to avoid exceptions when no default backend is configured but an optional:backendhas been passed.
Changelog for Cldr_Numbers v2.7.1
This is the changelog for Cldr v2.7.1 released on August 23rd, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix
@specforCldr.Number.to_string/3andCldr.Number.to_string!/3
Changelog for Cldr_Numbers v2.7.0
This is the changelog for Cldr v2.7.0 released on August 21st, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- An option
:backendcan be passed toCldr.Number.to_string/3and it will be used if being called asCldr.Number.to_string/2. This means that for a call likeCldr.Number.to_string(number, backend, options)which has an option:backend, the call can be replaced withCldr.Number.to_string(number, options).
Changelog for Cldr_Numbers v2.6.4
This is the changelog for Cldr v2.6.4 released on June 16th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
Fix the default value for the
backendparameter forCldr.Number.to_string/3Allow
Cldr.Number.to_string/3to be called asCldr.Number.to_string <number>, <options>as long as there is a default backend configured inconfig.exs.
Changelog for Cldr_Numbers v2.6.3
This is the changelog for Cldr v2.6.3 released on June 15th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Correctly interpret the special short format
0to mean "format as a normal decimal or currency number". Thanks to @epilgrim. Closes #10
Changelog for Cldr_Numbers v2.6.2
This is the changelog for Cldr v2.6.2 released on June 12th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Don't transliterate in
Cldr.Number.Transliterate.transliterate_digits/3iffromandtonumber systems are the same.
Changelog for Cldr_Numbers v2.6.1
This is the changelog for Cldr v2.6.1 released on June 2nd, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Ensure
Cldr.Number.to_string/3doesn't transliterate is the number systems are compatible for a given locale. Basically, if the local and number system don't require transliteration from0..9to another script (like indian, arabic, ...) then we don't do it. This improves performance by about 10% for this common case.
Changelog for Cldr_Numbers v2.6.0
This is the changelog for Cldr v2.6.0 released on March 28th, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Updates to CLDR version 35.0.0 released on March 27th 2019.
Changelog for Cldr_Numbers v2.5.0
This is the changelog for Cldr v2.5.0 released on March 23rd, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Supports
Cldr.default_backend()as a default for a backend on functions inCldr.Number
Changelog for Cldr_Numbers v2.4.4
This is the changelog for Cldr v2.4.4 released on March 21st, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Rbnf.Ordinal and Rbnf.Spellout now respect the optional generation of @moduledocs in a backend
Changelog for Cldr_Numbers v2.4.3
This is the changelog for Cldr v2.4.3 released on March 20th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix dialyzer warnings
Changelog for Cldr_Numbers v2.4.2
This is the changelog for Cldr v2.4.2 released on March 15th, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Makes generation of documentation for backend modules optional. This is implemented by the
:generate_docsoption to the backend configuration. The default istrue. For example:
defmodule MyApp.Cldr do
use Cldr,
default_locale: "en-001",
locales: ["en", "ja"],
gettext: MyApp.Gettext,
generate_docs: false
endChangelog for Cldr_Numbers v2.4.1
This is the changelog for Cldr v2.4.1 released on March 7th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
Fix fractional grouping. Previously when there was no grouping, the group size was being set to the number of fractional digits.
Fix scientific precision. Previously the mantissa was not being rounded because the prioritisation of significant digits over exponent digits was not being correctly reconciled.
Fix formatting precision of an exponent. A format of
0E00will now format the exponent with two digits.Fix o silence dialyzer warnings
Changelog for Cldr_Numbers v2.4.0
This is the changelog for Cldr v2.4.0 released on March 4th, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Adds
Cldr.Number.Format.default_grouping_for/2to return the default grouping of digits for a locale. This is useful for external number formats like ex_cldr_print.
Changelog for Cldr_Numbers v2.3.0
This is the changelog for Cldr v2.3.0 released on March 1st, 2019. For older changelogs please consult the release tag on GitHub
Enhancements
- Opens up the formatting pipeline for use by other formatting systems like
printf. This is implemented by the introduction ofCldr.Number.Format.Metato create the abstract metadata struct. This struct is used forCldr.Number.to_string/3and is now available for use by other libraries. The functionCldr.Number.Formatter.Decimal.to_string/3is the primary function that should be used by other libraries.
Changelog for Cldr_Numbers v2.2.0
This is the changelog for Cldr v2.2.0 released on Febriuary 24th, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
Fix generating an error tuple when the number system is a binary
Fix
@docerrors
Enhancements
Adds
Cldr.Number.Symbol.all_decimal_symbols/1andCldr.Number.Symbol.all_grouping_symbols/1that support parsing of numbers. The symbols are returned as a list.Adds
Cldr.Number.Symbol.all_decimal_symbols_class/1andCldr.Number.Symbol.all_grouping_symbols_class/1. The symbols are returned as aString.twhich can then be used to define a character class when building a regex.
Changelog for Cldr_Numbers v2.1.1
This is the changelog for Cldr v2.1.1 released on February 3rd, 2019. For older changelogs please consult the release tag on GitHub
Bug Fixes
Formats
Decimal.new("-0")the same asDecimal.new("0")which is to say without the sign. Although the Decimal standard upon which the Decimal library is based allows for-0, formatting this as a string with the sign is not consistent with the output for integers and floats. Consistency is, in this case, considered to be the correct approach.Fix documentation errors
Changelog for Cldr_Numbers v2.1.0
This is the changelog for Cldr v2.1.0 released on December 1st, 2018. For older changelogs please consult the release tag on GitHub
Enhancements
- Added
Cldr.Number.to_at_least_string/3,Cldr.Number.to_at_most_string/3,Cldr.Number.to_range_string/3andCldr.Number.to_approx_string/3to format numbers in way that conveys the relevant intent. These functions are also defined one each backend. For example, in the"en"locale:
iex> MyApp.Cldr.Number.to_at_least_string 1234
{:ok, "1,234+"}
iex> MyApp.Cldr.Number.to_at_most_string 1234
{:ok, "≤1,234"}
iex> MyApp.Cldr.Number.to_approx_string 1234
{:ok, "~1,234"}
iex> MyApp.Cldr.Number.to_range_string 1234..5678
{:ok, "1,234–5,678"}- Refactored options for
Cldr.Numbers.to_string/3and other functions that use the common number formatting options structure. Options are now parsed and contained in aCldr.Number.Format.Optionsstruct. A user-visible benefit is that if passing aCldr.Number.Format.Optionsstruct toCldr.Number.to_string/3then no further validation or normalization will be performed. Therefore if you are formatting in a tight loop and using common options, saving the options in advance will yield some performance improvement. ACldr.Number.Format.Optionsstruct can be returned by calledCldr.Number.Format.Options.validate_options(backend, options).
Changelog for Cldr_Numbers v2.0.0
This is the changelog for Cldr v2.0.0 released on November 22nd, 2018. For older changelogs please consult the release tag on GitHub
Breaking Changes
ex_cldr_numbersnow depends upon ex_cldr version 2.0. As a result it is a requirement that at least one backend module be configured as described in the ex_cldr readme.The public API is now based upon functions defined on a backend module. Therefore calls to functions such as
Cldr.Number.to_string/2should be replaced with calls toMyApp.Cldr.Number.to_string/2(assuming your configured backend module is calledMyApp.Cldr).
Enhancements
Adds
Cldr.Number.validate_number_system/3and<backend>.Number.validate_number_system/2that are now the canonical way to validate and return a number system from either a number system binary or atom, or from a number system name.Cldr.Number.{Ordinal, Cardinal}.pluralize/3now support ranges, not just numbersCurrency spacing is now applied for currency formatting. Depending on the locale, some text may be placed between the current symbol and the number. This enhanced readibility, it does not change the number formatting itself. For example you can see below that for the locale "en", when the currency symbol is text, a non-breaking space is introduced between it and the number.
iex> MyApp.Cldr.Number.to_string 2345, currency: :USD, format: "¤#,##0.00"
{:ok, "$2,345.00"}
iex> MyApp.Cldr.Number.to_string 2345, currency: :USD, format: "¤¤#,##0.00"
{:ok, "USD 2,345.00"}