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 за внимание.