icu4j возвращает код валюты вместо символа

Фон

У меня есть приложение для Android, где я хочу отформатировать целочисленное значение в виде строки валюты в зависимости от кода ISO и текущей локали. Для этого я использую библиотеку ICU 1.8.1.

Например, если у меня значение 75, а код ISO - "USD", я хочу видеть "75 долларов" в США, но "USD75" во французском языке.

проблема

Проблема в том, что я всегда вижу "75 долларов США", даже когда я явно устанавливаю язык в США. Я думал, что проблема в моем NumberFormat экземпляр валюты, но потом я попытался просто получить символ валюты и заметил, что это неверно. По какой-то причине getSymbol() Метод всегда возвращает код валюты.

public void test() {
    Locale.setDefault(Locale.US);
    String theISOCode = "USD"
    Currency currency = Currency.getInstance(theISOCode);

    currency.getCurrencyCode(); // "USD". This works as expected
    currency.getSymbol(); // "USD". This looks weird.. Shouldn't it be "$"?
    currency.getSymbol(Locale.US); // "USD". Same here, I expect it to be "$"
    currency.getSymbol(ULocale.US); // still "USD"
}

Я также проверил эту ссылку: Java: символ валюты, основанный на коде валюты ISO 4217. Кажется, мое приложение работает немного по-другому. Не уверен, что это ошибка в библиотеке.

Вопрос

Это имеет смысл для меня, что currency.getSymbol() возвращает "USD", если ваша локаль Locale.FRANCE, Но почему он возвращает "USD", когда моя локаль Locale.US? Было бы здорово, если бы я мог найти решение, не переключая библиотеку.

1 ответ

Решение

Проблема оказалась ошибкой в ​​библиотеке. После обновления версии проблема была решена. Спасибо @Omid за внимание.

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