Fil*_*sta 11 java android localization currency internationalization
我在获取系统的默认货币符号时遇到一些问题.我这样得到货币符号:
Currency currency = Currency.getInstance(Locale.getDefault());
Log.v("TAG",currency.getSymbol());
Run Code Online (Sandbox Code Playgroud)
当系统语言在English (United States)右边时,符号显示up($).但是当我选择语言时,Portuguese (Portugal)它会返回此符号¤.
是什么导致这个?
Fil*_*sta 14
这似乎是一个已知问题(http://code.google.com/p/android/issues/detail?id=38622.我通过这种方式找到了一个可能的解决方案:
由于问题出在Symbol而不是Currency代码中,我解决了这个问题,创建了一个静态Map,其中键是CurrencyCode,值是Symbol.
public static final Map<String, String> MYCURRENCIES = new HashMap<String, String>(){
{
put("EUR","€");
put("USD","$");
(..)
}
};
Run Code Online (Sandbox Code Playgroud)
为了获得区域设置信息中可用的所有(或几乎)货币代码,您可以执行以下操作:
for (Locale ll: Locale.getAvailableLocales()){
try {
Currency a = Currency.getInstance(ll);
Log.v("MyCurrency",a.getCurrencyCode()+"#"+a.getSymbol());
}catch (Exception e){
// when the locale is not supported
}
}
Run Code Online (Sandbox Code Playgroud)
使用CurrencyCode和Symbol创建Map后,您只需要这样:
Currency currency = Currency.getInstance(Locale.getDefault());
String curSymbol = MYCURRENCIES.get(currency.getCurrencyCode());
Run Code Online (Sandbox Code Playgroud)
一些想法;
是否您获得了正确的(欧元)符号,但您的字体/日志没有它,并且它看起来只是像该符号?
Locale 是一个非常活跃的类,它的构造函数没有错误检查。您可以轻松地看到标准中不支持或实际上不存在的区域设置(例如“de_US”表示“美国所说的德语”)。
请注意,区域设置数据不一定适用于此类中预定义为常量的任何区域设置,但 en_US 除外,这是 Java 保证始终可用的唯一区域设置,并且它在不同的 Android 版本中有所不同,并且还可能受到以下限制:运营商或自定义构建。pt_PT 是在 2.3 中添加的。
关于您提出的选项,如果您检查Unicode 标准,因为它们已在 API8 及更高版本中实施,那么葡萄牙仅作为一个领土存在(而不是组合)。
因此,如果您仅从国家/地区代码创建部分区域设置实例,然后获取葡萄牙的货币符号,可能会更好。您将无法遵守Locale 类的预定义静态,因为它非常狭窄地支持不同的区域设置(这是一个简短的列表),但它应该可以工作,因为该区域设置具有您在系统中查找的数据。
我还会尝试查看currency.toString() 是否返回欧元(货币的ISO 4217 代码,通常是三个字母的缩写)。
| 归档时间: |
|
| 查看次数: |
13359 次 |
| 最近记录: |