Получить отображаемое имя 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.

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