Каков наилучший способ отображения символа валюты в зависимости от локали? - PullRequest
4 голосов
/ 25 февраля 2012

Я хотел бы отобразить символ валюты ($, €) в зависимости от текущей локали браузера.Каков наилучший подход для этого?

Я пытался:

locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
System.out.println(locale); //gives: "en"
Currency.getInstance(locale).getSymbol(); //java.lang.IllegalArgumentException
Currency.getInstance(locale.GERMANY).getSymbol(); //gives €

Как я могу получить символ, основанный на настройках браузера, зависящих от локали (здесь «en»)?

Обновление

locale.getLanguage() > "de"
locale.getDefault() > "de_DE"

Тем не менее, Currency.getInstance(locale).getSymbol(); не удается.

1 Ответ

2 голосов
/ 25 февраля 2012

Валюта зависит от страны-части локали.Поскольку en не содержит часть страны, это недопустимый аргумент для создания экземпляра Currency.

Другими словами: вы ожидаете $, US$, AU$ или £Язык "en"?Или что-то другое?Там нет валюты для "английский".Существуют валюты для США, Великобритании, Австралии и т. Д., Но не для английского.

Редактировать Если пользователь правильно настроил свой браузер, то вы действительно получите локаль с разделами «Страна» и «Язык» (например, en-US).Эти локали можно использовать так, как вы это сделали в своем вопросе.

НО вам следует рассмотреть возможность использования геотаргетинга на основе IP-адреса.Существуют базы данных, такие как GEO-IP и MaxMind .Имейте в виду, что есть различия - американский студент в семестре за границей в Германии занимается серфингом со своим ноутбуком.Его браузер может вернуть en-US, но база данных GEO-IP, скорее всего, будет нацелена на Germany.Но, может быть, это именно то, что вам нужно?!

Наконец, вы можете использовать один из этих подходов в качестве основного фактора таргетинга, а второй - в качестве резервного.Если оба не удаются, переключитесь на значение по умолчанию (например, US $)

...