Subject: bug#45871: Incorrect currency symbol used by locale support

From: Guenther Brunthaler <[email-masked]>
Date: Thu, 14 Jan 2021 20:19:54 +0100

The (locale-currency-symbol) procedure uses the wrong locale setting,
which effects the formatting of monetary amounts:

scheme@(guile-user)> (use-modules (ice-9 i18n))
scheme@(guile-user)> (setlocale LC_ALL "")
$3 = "de_AT.UTF-8"
scheme@(guile-user)> (display (monetary-amount->locale-string +123.456
#f)) (newline)
-€ 123,46

A negative amount???

This seems to be the source of the problem:

scheme@(guile-user)> (locale-currency-symbol #f)
$2 = "-€"

(Note if your e-mail agent cannot display the currency symbol correctly:
The symbol ought to be displayed as the EUR-sign.)

Obviously, the implementation uses the "crncystr" setting:

$ locale -kc LC_MONETARY | grep -E '€'
currency_symbol="€"
crncystr="-€"
duo_currency_symbol="€"

Problem resolution: The implementation should use the "currency_symbol"
setting rather than the "crncystr" setting.

Alternatively, the "crncystr" can be used, but then the first character
should be interpreted as defined by the POSIX standard, i. e. as a mode
indicator and not as part of the actual currency symbol.