This is the changelog for Cldr v2.15.2 released on August 30th, 2020. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.15.1 released on June 23rd, 2020. For older changelogs please consult the release tag on GitHub
-
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.
This is the changelog for Cldr v2.15.0 released on June 13th, 2020. For older changelogs please consult the release tag on GitHub
-
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
This is the changelog for Cldr v2.14.0 released on May 27th, 2020. For older changelogs please consult the release tag on GitHub
-
Add
Cldr.Number.Parser.parse/2
to parse numbers in a locale-aware manner -
Add
Cldr.Number.Parser.scan/2
to parse a string into a list of string and numbers -
Add
Cldr.Number.Parser.resolve_currencies/2
to match strings to currency codes in a list -
Add
Cldr.Number.Parser.resolve_currency/2
to match a string to a currency code
This is the changelog for Cldr v2.13.2 released on May 16th, 2020. For older changelogs please consult the release tag on GitHub
- Fix regression and allow
:percent
formats inCldr.Number.to_string/3
. Thanks to @maennchen. Fixes #13.
This is the changelog for Cldr v2.13.1 released on May 14th, 2020. For older changelogs please consult the release tag on GitHub
- Fix regression and allow
:fractional_digits
to be0
. Thanks to @coladarci. Fixes #12.
This is the changelog for Cldr v2.13.0 released on May 2nd, 2020. For older changelogs please consult the release tag on GitHub
- 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
-
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()
-
This is the changelog for Cldr v2.12.1 released on March 2nd, 2020. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.12.0 released on January 21st, 2020. For older changelogs please consult the release tag on GitHub
- Updates version requirement for
cldr_utils
in order to support versions ofdecimal
from1.6
up to2.0
.
- Fixes an incorrect typespec on
Cldr.Number.Format.format_from_locale_or_options/1
that was causing a dialyzer warning
This is the changelog for Cldr v2.11.0 released on January 19th, 2020. For older changelogs please consult the release tag on GitHub
-
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
-
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
-
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
-
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)"}
This is the changelog for Cldr v2.10.0 released on January 15th, 2020. For older changelogs please consult the release tag on GitHub
- 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.
- 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.
This is the changelog for Cldr v2.9.0 released on October 20th, 2019. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.8.0 released on October 10th, 2019. For older changelogs please consult the release tag on GitHub
This is the changelog for Cldr v2.7.2 released on September 7th, 2019. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.7.1 released on August 23rd, 2019. For older changelogs please consult the release tag on GitHub
- Fix
@spec
forCldr.Number.to_string/3
andCldr.Number.to_string!/3
This is the changelog for Cldr v2.7.0 released on August 21st, 2019. For older changelogs please consult the release tag on GitHub
- 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)
.
This is the changelog for Cldr v2.6.4 released on June 16th, 2019. For older changelogs please consult the release tag on GitHub
-
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
.
This is the changelog for Cldr v2.6.3 released on June 15th, 2019. For older changelogs please consult the release tag on GitHub
- Correctly interpret the special short format
0
to mean "format as a normal decimal or currency number". Thanks to @epilgrim. Closes #10
This is the changelog for Cldr v2.6.2 released on June 12th, 2019. For older changelogs please consult the release tag on GitHub
- Don't transliterate in
Cldr.Number.Transliterate.transliterate_digits/3
iffrom
andto
number systems are the same.
This is the changelog for Cldr v2.6.1 released on June 2nd, 2019. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.6.0 released on March 28th, 2019. For older changelogs please consult the release tag on GitHub
- Updates to CLDR version 35.0.0 released on March 27th 2019.
This is the changelog for Cldr v2.5.0 released on March 23rd, 2019. For older changelogs please consult the release tag on GitHub
- Supports
Cldr.default_backend()
as a default for a backend on functions inCldr.Number
This is the changelog for Cldr v2.4.4 released on March 21st, 2019. For older changelogs please consult the release tag on GitHub
- Rbnf.Ordinal and Rbnf.Spellout now respect the optional generation of @moduledocs in a backend
This is the changelog for Cldr v2.4.3 released on March 20th, 2019. For older changelogs please consult the release tag on GitHub
- Fix dialyzer warnings
This is the changelog for Cldr v2.4.2 released on March 15th, 2019. For older changelogs please consult the release tag on GitHub
- 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
This is the changelog for Cldr v2.4.1 released on March 7th, 2019. For older changelogs please consult the release tag on GitHub
-
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
This is the changelog for Cldr v2.4.0 released on March 4th, 2019. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.3.0 released on March 1st, 2019. For older changelogs please consult the release tag on GitHub
- 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.
This is the changelog for Cldr v2.2.0 released on Febriuary 24th, 2019. For older changelogs please consult the release tag on GitHub
-
Fix generating an error tuple when the number system is a binary
-
Fix
@doc
errors
-
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.
This is the changelog for Cldr v2.1.1 released on February 3rd, 2019. For older changelogs please consult the release tag on GitHub
-
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
This is the changelog for Cldr v2.1.0 released on December 1st, 2018. For older changelogs please consult the release tag on GitHub
- 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)
.
This is the changelog for Cldr v2.0.0 released on November 22nd, 2018. For older changelogs please consult the release tag on GitHub
-
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
).
-
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 numbers -
Currency 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"}