显示依赖于区域设置的货币符号的最佳方法是什么?

时间:2012-02-25 15:22:45

标签: java jsf currency

我想显示取决于当前浏览器区域设置的货币符号($,€)。 这样做的最佳方法是什么?

我试过了:

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 个答案:

答案 0 :(得分:2)

货币取决于国家/地区的部分地区。由于en不包含国家/地区部分,因此它是创建Currency实例的非法参数。

换句话说:您对Locale“en”的期望是$US$AU$还是£?或者是其他东西? “English”没有货币。有美国,英国,澳大利亚等货币,但不包括英文货币。

修改
如果用户正确配置了他的浏览器,那么您将确实获得具有以下两者的区域设置:国家/地区和语言部分(例如en-US)。您可以按照自己在问题中的方式使用这些区域设置。

但您应该考虑使用基于IP地址的地理位置定位。存在GEO-IPMaxMind等数据库。请注意,存在差异 - 在德国国外学期的美国学生用笔记本电脑冲浪。他的浏览器可能会返回en-US,但GEO-IP数据库很可能会返回Germany。但也许这正是你想要的?!

最后,您可以将其中一种方法用作主要定位因子,将第二种方法用作备份。如果两者都失败,则切换到默认值(例如US $)