icu4j returns 货币代码而不是符号
icu4j returns currency code instead of symbol
背景
我有一个 Android 应用程序,我想根据 ISO 代码和当前区域设置将整数值格式化为货币字符串。为此,我正在使用 ICU 库 1.8.1。
例如,如果我有一个值 75 并且 ISO 代码是 "USD",我想在美国语言环境中看到“$75”,但在法语语言环境中看到 "USD75"。
问题
问题是我总是看到 "USD75",即使我将语言环境明确设置为美国。我认为问题出在我的 NumberFormat
货币实例中,但后来我尝试简单地获取货币符号并注意到它不正确。由于某种原因 getSymbol()
方法总是 returns 货币代码。
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"
}
我也检查了这个link:Java: Currency symbol based on ISO 4217 currency cod。我的应用程序似乎有点不同。不确定这是否是库中的错误。
问题
如果您的语言环境是 Locale.FRANCE
,currency.getSymbol()
returns "USD" 对我来说很有意义。但是为什么当我的语言环境是 Locale.US
时它会 return "USD"?如果我能在不切换库的情况下找到解决方案,那就太好了。
问题原来是库中的错误。更新版本后问题得到解决。感谢@Omid 对此进行调查。
背景
我有一个 Android 应用程序,我想根据 ISO 代码和当前区域设置将整数值格式化为货币字符串。为此,我正在使用 ICU 库 1.8.1。
例如,如果我有一个值 75 并且 ISO 代码是 "USD",我想在美国语言环境中看到“$75”,但在法语语言环境中看到 "USD75"。
问题
问题是我总是看到 "USD75",即使我将语言环境明确设置为美国。我认为问题出在我的 NumberFormat
货币实例中,但后来我尝试简单地获取货币符号并注意到它不正确。由于某种原因 getSymbol()
方法总是 returns 货币代码。
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"
}
我也检查了这个link:Java: Currency symbol based on ISO 4217 currency cod。我的应用程序似乎有点不同。不确定这是否是库中的错误。
问题
如果您的语言环境是 Locale.FRANCE
,currency.getSymbol()
returns "USD" 对我来说很有意义。但是为什么当我的语言环境是 Locale.US
时它会 return "USD"?如果我能在不切换库的情况下找到解决方案,那就太好了。
问题原来是库中的错误。更新版本后问题得到解决。感谢@Omid 对此进行调查。