Как можно настроить JavaMoney RI AmountFormatQueryBuilder для правильного разбора CurrencyUnits из символов, используя его Locale?

Как я должен анализировать MonetaryAmounts из строк, отображаемых в формате по умолчанию для данной локали? Понятно, что Locale, переданный AmountFormatQueryBuilder, полностью игнорируется CurrencyToken.parse(). В результате MonetaryAmountFormat.format() и MonetaryAmountFormat.parse() не являются симметричными. Есть ли какой-то способ, кроме языкового стандарта, связать сопоставление символов валюты по умолчанию? Следующий простой тест не пройден:

MonetaryAmountFormat moneyFormat = MonetaryFormats.getAmountFormat(
            AmountFormatQueryBuilder.of(new Locale("en", "au"))
                                    .set(CurrencyStyle.SYMBOL)
                                    .set("pattern", "¤#,##0.00")
                                    .build()
);
MonetaryAmount audAmount = Money.of(1, "AUD");
assertEquals(audAmount, moneyFormat.parse(moneyFormat.format(audAmount));

org.javamoney.moneta.internal.format.CurrencyToken.parse () кажется невежественным по отношению к Америке:

                case SYMBOL:
                if (token.startsWith("$")) {
                    cur = Monetary.getCurrency("USD");
                    context.consume("$");
                } else if (token.startsWith("€")) {
                    cur = Monetary.getCurrency("EUR");
                    context.consume("€");
                } else if (token.startsWith("£")) {
                    cur = Monetary.getCurrency("GBP");
                    context.consume("£");
                } else {
                    cur = Monetary.getCurrency(token);
                    context.consume(token);
                }
                context.setParsedCurrency(cur);
                break;

0 ответов

Другие вопросы по тегам