Changelog
Cldr_Numbers v2.19.0
This is the changelog for Cldr v2.19.0 released on July 1st, 2021. For older changelogs please consult the release tag on GitHub
Enhancements
- Updated to ex_cldr version 2.23.0 which changes the names of some of the field in the "-u-" extension to match the CLDR canonical name. In particular the field name
number_system
changes tonumbers
.
Cldr_Numbers v2.18.4
This is the changelog for Cldr v2.18.4 released on June 17th, 2021. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Allow
t:Cldr.Currency
as a:currency
option inCldr.Number.to_string/2
. Thanks to @jeroenvisser101 for the PR.
Cldr_Numbers v2.18.3
This is the changelog for Cldr v2.18.3 released on June 12th, 2021. For older changelogs please consult the release tag on GitHub
Breaking Change
- There is a minor breaking change in the error return from
Cldr.Number.Parser.parse/2
. Previously the error return was{:error, string}
. It is now more consistent with the rest ofex_cldr
and returns{:error, {exception, message}}
Bug Fixes
- Fix
Cldr.Number.Parser.parse/2
for numbers that are in non-latin scripts (like Thai, Arabic, ...). There are 66 known number systems that have decimal digits as of CLDR39.
Cldr_Numbers v2.18.2
This is the changelog for Cldr v2.18.2 released on June 11th, 2021. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix
Cldr.Number.Parser.scan/2
to correctly parse numbers like1kg
Cldr_Numbers v2.18.1
This is the changelog for Cldr v2.18.1 released on June 8th, 2021. For older changelogs please consult the release tag on GitHub
Bug Fixes
Thanks to @alaadahmed for the collaboration to fix two bugs in rules based number formatting.
Fixes RBNF formatting options setting for
:spellout_ordinal
Allows any defined RNBF rule for a locale to be invoked as the
:format
option toCldr.Number.to_string/3
.
Cldr_Numbers v2.18.0
This is the changelog for Cldr v2.18.0 released on May 8th, 2021. For older changelogs please consult the release tag on GitHub
Bug Fixes
Fixes short and long number formatting.
Fixes formatting whent the format string consists only of digits. Previously this would erroneously set both the maximum and minimum integer digits. Now it only sets the minimum integer digits.
Enhancements
- Add option
:maximum_integer_digits
as an option toCldr.Number.to_string/2
Cldr_Numbers v2.17.0
This is the changelog for Cldr v2.17.0 released on April 8th, 2021. For older changelogs please consult the release tag on GitHub
Enhancements
- Updated to require ex_cldr version 2.20 which includes CLDR 39 data.
Cldr_Numbers v2.16.1
This is the changelog for Cldr v2.16.1 released on November 8th, 2020. For older changelogs please consult the release tag on GitHub
Bug Fixes
- Fix bug in
Cldr.Number.System.number_system_from/1
to correctly allow a binary language tag without a backend parameter (which will then default toCldr.default_backend!/0
)
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/2
to support compact number pluralization that is added to CLDR 38 (for the "fr" locale only in this release)
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!/1
when available sinceCldr.default_backend/0
is deprecated as ofex_cldr
verison2.18.0
.
Bug Fixes
Use
Cldr.Decimal.compare/2
which works consistently withDecimal
1.x
and2.x
Apply compile-time detection of
Decimal
version in order to know the correct return type ofDecimal.parse/1
which differs between1.x
and2.x
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/10
to correctly referenceCldr.known_locale_names/0
.
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/2
notLogger.warn/2
in this case and uses an anonymous function not a string so that dialyzer is happy.
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 nearest
pipeline stage even when not required. Thanks to @jeroenvisser101 for the collaboration. Fixes #14.
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/2
Add
number_system_from_locale/1
to backend modules
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/2
to parse numbers in a locale-aware mannerAdd
Cldr.Number.Parser.scan/2
to parse a string into a list of string and numbersAdd
Cldr.Number.Parser.resolve_currencies/2
to match strings to currency codes in a listAdd
Cldr.Number.Parser.resolve_currency/2
to match a string to a currency code
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
:percent
formats inCldr.Number.to_string/3
. Thanks to @maennchen. Fixes #13.
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_digits
to be0
. Thanks to @coladarci. Fixes #12.
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/3
without specifying an option:currency
would return an error. In this release, a currency is derived from the locale (either the:locale
parameter or frombackend.get_locale()
). The affected currency formats are:currency
,:accounting
,:currency_long
and:currency_short
Enhancements
Cldr.Number.to_string/2
now detects the number system from any supplied locale. If provided, the option:number_system
takes precedence over the number system derived from a locale.Add
:round_nearest
formatting option forCldr.Number.to_string/3
. If provided, this option overrides the value defined by the:format
option.Refines number system detection. The order of precedence is:
- The
:number_system
option if provided - The
:number_system
from the locale if provided - The
:number_system
from the current locale for the supplied backend. This locale is retrieved withbackend.get_locale()
- The
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_numbering
instead ofspellout_cardinal
for theCldr.Number.to_string/3
optionformat: :spellout
sincespellout_numbering
has a larger locale coverage of RBNF formats.
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_utils
in order to support versions ofdecimal
from1.6
up to2.0
.
Bug fixes
- Fixes an incorrect typespec on
Cldr.Number.Format.format_from_locale_or_options/1
that was causing a dialyzer warning
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/2
and no number system is defined in the locale - The option
:number_system
if it is provided toMyApp.Cldr.Number.to_string/2
- The locale's
number_system
if it is defined and the option:number_system
toMyApp.Cldr.Number.to_string/2
is 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
:currency
if it is provided toMyApp.Cldr.Number.to_string/2
- The locale's
currency code
if it is defined and the option:currency
toMyApp.Cldr.Number.to_string/2
is 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
:currency
or:accounting
. The currency format is defined as part of the U extension. The order of precedence is:- The locale's
currency format
if it is defined and the option:format
toMyApp.Cldr.Number.to_string/2
is either:currency
or:accounting
. Therefore the locales currency format takes precendence over the:format
argument but only if:format
is a currency format. - The option
:format
in 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)"}
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_warnings
is set tofalse
(this is the default value). Thewarn_once
mechanism depends on the availability of the:persistent_term
module which is only available from OTP 21.2 onwards. On earlier releases of OTP no warning will be emitted.
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_symbol
toCldr.Number.to_string/2
. This option, when set to:iso
changes a currency format to force using the ISO currency code instead of the native currency symbol.
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
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/3
when accessingCldr.default_locale/0
to avoid exceptions when no default backend is configured but an optional:backend
has been passed.
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
@spec
forCldr.Number.to_string/3
andCldr.Number.to_string!/3
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
:backend
can be passed toCldr.Number.to_string/3
and 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)
.
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
backend
parameter forCldr.Number.to_string/3
Allow
Cldr.Number.to_string/3
to be called asCldr.Number.to_string <number>, <options>
as long as there is a default backend configured inconfig.exs
.
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
0
to mean "format as a normal decimal or currency number". Thanks to @epilgrim. Closes #10
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/3
iffrom
andto
number systems are the same.
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/3
doesn't transliterate is the number systems are compatible for a given locale. Basically, if the local and number system don't require transliteration from0..9
to another script (like indian, arabic, ...) then we don't do it. This improves performance by about 10% for this common case.
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.
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
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
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
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_docs
option 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
end
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
0E00
will now format the exponent with two digits.Fix o silence dialyzer warnings
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/2
to return the default grouping of digits for a locale. This is useful for external number formats like ex_cldr_print.
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.Meta
to create the abstract metadata struct. This struct is used forCldr.Number.to_string/3
and is now available for use by other libraries. The functionCldr.Number.Formatter.Decimal.to_string/3
is the primary function that should be used by other libraries.
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
@doc
errors
Enhancements
Adds
Cldr.Number.Symbol.all_decimal_symbols/1
andCldr.Number.Symbol.all_grouping_symbols/1
that support parsing of numbers. The symbols are returned as a list.Adds
Cldr.Number.Symbol.all_decimal_symbols_class/1
andCldr.Number.Symbol.all_grouping_symbols_class/1
. The symbols are returned as aString.t
which can then be used to define a character class when building a regex.
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
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/3
andCldr.Number.to_approx_string/3
to 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/3
and other functions that use the common number formatting options structure. Options are now parsed and contained in aCldr.Number.Format.Options
struct. A user-visible benefit is that if passing aCldr.Number.Format.Options
struct toCldr.Number.to_string/3
then 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.Options
struct can be returned by calledCldr.Number.Format.Options.validate_options(backend, options)
.
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_numbers
now 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/2
should 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/3
and<backend>.Number.validate_number_system/2
that 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/3
now 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"}