Skip to content

Commit

Permalink
Use locales number system when parsing. Not latn
Browse files Browse the repository at this point in the history
  • Loading branch information
kipcole9 committed Apr 13, 2024
1 parent c3468df commit 37b6d3d
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
13 changes: 10 additions & 3 deletions lib/money.ex
Expand Up @@ -2468,11 +2468,12 @@ defmodule Money do

defp parse_decimal(string, locale, backend) do
with {:ok, locale} <- Cldr.validate_locale(locale, backend),
{:ok, symbols} <- Cldr.Number.Symbol.number_symbols_for(locale, backend) do
{:ok, symbols} <- Cldr.Number.Symbol.number_symbols_for(locale, backend),
{:ok, script_symbols} <- number_symbols_for_number_system(symbols, locale, backend) do
decimal =
string
|> String.replace(symbols.latn.group, "")
|> String.replace(symbols.latn.decimal, ".")
|> String.replace(script_symbols.group, "")
|> String.replace(script_symbols.decimal, ".")
|> Decimal.new()

{:ok, decimal}
Expand All @@ -2495,6 +2496,12 @@ defmodule Money do
nil
end

defp number_symbols_for_number_system(symbols, locale, backend) do
number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
symbols = Map.get(symbols, number_system) || Map.get(symbols, :latn)
{:ok, symbols}
end

@doc false
@app_name Money.Mixfile.project() |> Keyword.get(:app)
def app_name do
Expand Down
2 changes: 1 addition & 1 deletion mix/test_cldr.ex
Expand Up @@ -6,7 +6,7 @@ defmodule Money.Cldr do

use Cldr,
locales: [
"en", "de", "it", "es", "fr", "da", "zh-Hant-HK", "zh-Hans", "ja", "en-001", "th", "es-CO", "pt-CV"
"en", "de", "it", "es", "fr", "da", "zh-Hant-HK", "zh-Hans", "ja", "en-001", "th", "es-CO", "pt-CV", "ar-EG"
],
default_locale: "en",
providers: [Cldr.Number, Money]
Expand Down
2 changes: 1 addition & 1 deletion test/money_test.exs
Expand Up @@ -557,7 +557,7 @@ defmodule MoneyTest do
Application.put_env(:ex_cldr, :default_backend, cldr_backend)
end

test "that format options propogate through operations" do
test "that format options propagate through operations" do
format_options = [fractional_digits: 4]
money = Money.new!(:USD, 100)
money_with_options = Money.new!(:USD, 100, format_options)
Expand Down

0 comments on commit 37b6d3d

Please sign in to comment.