icu4j返回货币代码而不是符号

时间:2016-03-25 21:09:15

标签: java android localization formatting icu4j

背景

我有一个Android应用程序,我想根据ISO代码和当前区域设置将整数值格式化为货币字符串。我正在使用ICU库1.8.1。

例如,如果我的值为75且ISO代码为“USD”,我希望在美国语言环境中看到“$ 75”,但在法语区域设置上看到“USD75”。

问题

问题在于,即使我明确将语言环境设置为美国,我也总是看到“USD75”。我认为问题出在我的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: Currency symbol based on ISO 4217 currency cod。看来我的应用程序有点不同。不确定它是否是库中的错误。

问题

如果您的区域设置为currency.getSymbol()Locale.FRANCE返回“USD”是有道理的。但是,当我的语言环境为Locale.US时,为什么会返回“USD”?如果我能在不切换库的情况下找到解决方案,那就太棒了。

1 个答案:

答案 0 :(得分:0)

该问题原来是图书馆中的一个错误。更新版本后问题得到解决。感谢@Omid对此进行调查。