2016-02-12 4 views
1

Конечным пользователям предоставляется список валют. Один из них может быть выбран ими в любое время. Таким образом, локаль, используемая в java.text.NumberFormat, должна быть изменена в зависимости от выбранной валюты. Это не кажется тривиальным.Динамическое изменение языкового стандарта в соответствии с динамическим значением валюты

Locale locale = new Locale("en", "US"); 
NumberFormat decimalFormat = NumberFormat.getCurrencyInstance(locale); 
decimalFormat.setGroupingUsed(true); 
decimalFormat.setCurrency(Currency.getInstance("USD")); 

System.out.println(decimalFormat.format(BigDecimal.valueOf(1.12))); 

Кусок кода выше будет отображать правильную валюту значение $1.12. Поскольку валюта (и локаль) определяется динамически во время выполнения в зависимости от предпочтений пользователя, если USD изменен на нечто иное, например GBP, то соответствующий языковой стандарт также необходимо изменить с en_US на en_GB. В противном случае он отобразит GBP1.12, где ожидается £1.12 (для краткости курс валюты исключается).

Есть ли способ определить языковой стандарт на основе кода валюты, который поставляется динамически во время выполнения?

ответ

2

Если вы поддерживаете только ограниченное количество валют, вам, вероятно, лучше создать сопоставление вручную. В противном случае это будет сложно, потому что на каждую валюту имеется более одного действующего языка. Например USD может быть en_US или es_US или es_PR или es_EC ...

Вы можете посмотреть на Currency.getInstance(locale) для всех Locale.availableLocales(), чтобы получить представление о том:

for (Locale locale : Locale.getAvailableLocales()) { 
    try { 
    Currency c = Currency.getInstance(locale); 
    System.out.println(c + "\t" + locale); 
    } catch (IllegalArgumentException ignore) { } 
} 
Смежные вопросы