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

标签 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 。我的应用程序的工作方式似乎有点不同。不确定这是否是库中的错误。

问题

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

最佳答案

事实证明,该问题是库中的错误。更新版本后问题得到解决。感谢@Omid 对此进行调查。

关于java - icu4j 返回货币代码而不是符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228069/

相关文章:

javascript - 本地化和 JQuery/JavaScript

java - 用于更新 JTable 中给定单元格/列和递增焦点的监听器类型

java - 使用 byte[] 和 Java-Mail 发送电子邮件附件

Android MediaRouter 音量事件

java - 如何更改项目单击时的列表项目外观。

Java SE Maven 项目使用 ResourceBundle 进行国际化

java - JSONObject 文本必须以 '{' at 1 [character 2 line 1] 开头,并出现 '{' 错误

java - 如何使用JPA Criteria根据EmbeddedId的字段进行查询?

android - Chrome 手机 : URL bar causes trouble with footer

python - Django DATETIME_FORMAT 特定日期不正确(一年)