Как можно настроить 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;