我有一个使用这个类的应用程序:java.util.Currency
在应用程序中,我维护一个国家代码到语言环境的地图。我通过传入国家/地区代码来检索语言环境
当我将此语言环境传递给 时Currency.getInstance()
,它会返回正确的货币。我通过调用验证了这一点Currency.getCurrencyCode()
但是,当我调用getDisplayName()
同一个货币实例时,它会返回null
这种行为不会发生在我的开发机器上,只会发生在我的测试服务器上
我的开发机器和服务器都使用 Ubuntu 12.04 LTS:
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
该应用程序在tomcat中运行
我可能在这里遗漏了一些东西
编辑
import java.util.Currency;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
...
public static Map<String, Locale> COUNTRY_TO_LOCALE_MAP;
public static void initCountryToLocaleMap() {
if (COUNTRY_TO_LOCALE_MAP != null) {
return;
}
COUNTRY_TO_LOCALE_MAP = new HashMap<String, Locale>();
Locale[] locales = Locale.getAvailableLocales();
for (Locale l : locales) {
COUNTRY_TO_LOCALE_MAP.put(l.getCountry(), l);
}
}
public static Locale getLocaleFromCountryCode(String countryCode) {
if (countryCode == null) {
return null;
}
initCountryToLocaleMap();
Locale locale = COUNTRY_TO_LOCALE_MAP.get(countryCode);
if (locale == null) {
return new Locale("", countryCode);
}
return locale;
}
public static void main(String args[]) {
initCountryToLocaleMap();
String countryCode = "ZA";
Locale locale = getLocaleFromCountryCode(countryCode);
Currency currency = Currency.getInstance(locale);
System.out.println("currencyCode: " + currency.getCurrencyCode());
System.out.println("displayName: " + currency.getDisplayName());
}
运行 main() 后,我得到以下输出:来自开发机器:
currencyCode: ZAR
displayName: South African Rand
从测试服务器:
currencyCode: ZAR