Получить отображаемое имя javax.money.CurrencyUnit
У меня есть экземпляр javax.money.CurrencyUnit
и я хочу показать, как это называется в данной локали (например, "Доллары США", "Евро", "Японская иена" и т. д.). Я прочитал всю документацию, но единственное, что мне удалось найти, это как отформатировать MonetaryAmount
:
MonetaryFormats.getAmountFormat(AmountFormatQueryBuilder.of(Locale.US).set(CurrencyStyle.NAME).set("pattern", "00,00,00,00.00 ¤").build()).format(myCurrencyUnit);
И я вижу там, я указываю CurrencyStyle.NAME
поэтому он вернет название валюты в результате, но проблема в том, что у меня нет MonetaryAmount
и я не мог найти форматер для CurrencyUnit
,
Спасибо
2 ответа
Из кода видно, что JavaMoney не поддерживает такое понятие, как отображаемое имя валюты. CurrencyStyle.NAME
пытается разрешить отображаемое имя из валюты JDK.
/**
* This method tries to evaluate the localized display name for a
* {@link CurrencyUnit}. It uses {@link Currency#getDisplayName(Locale)} if
* the given currency code maps to a JDK {@link Currency} instance.
* <p>
* If not found {@code currency.getCurrencyCode()} is returned.
*
* @param currency The currency, not {@code null}
* @return the formatted currency name.
*/
private String getCurrencyName(CurrencyUnit currency) {
Currency jdkCurrency = getCurrency(currency.getCurrencyCode());
if (Objects.nonNull(jdkCurrency)) {
return jdkCurrency.getDisplayName(locale);
}
return currency.getCurrencyCode();
}
Таким образом, вы не можете получить отображаемое имя для пользовательских валют, таких как биткойны. Был создан запрос функции Получить отображаемое имя / символ CurrencyUnit
Спасибо, что подняли это. Действительно, версия 1 JavaMoney/Money JSR опирается на встроенные ресурсы JDK. Мы обсуждаем новую версию из-за таких требований, как эта и другие. Пожалуйста, не стесняйтесь следить или комментировать https://github.com/JavaMoney/jsr354-api/issues/58 в трекере ошибок Java Money API.