我想显示取决于当前浏览器区域设置的货币符号($,€)。 这样做的最佳方法是什么?
我试过了:
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();
失败了。
答案 0 :(得分:2)
货币取决于国家/地区的部分地区。由于en
不包含国家/地区部分,因此它是创建Currency实例的非法参数。
换句话说:您对Locale“en”的期望是$
,US$
,AU$
还是£
?或者是其他东西? “English”没有货币。有美国,英国,澳大利亚等货币,但不包括英文货币。
修改强>
如果用户正确配置了他的浏览器,那么您将确实获得具有以下两者的区域设置:国家/地区和语言部分(例如en-US
)。您可以按照自己在问题中的方式使用这些区域设置。
但您应该考虑使用基于IP地址的地理位置定位。存在GEO-IP和MaxMind等数据库。请注意,存在差异 - 在德国国外学期的美国学生用笔记本电脑冲浪。他的浏览器可能会返回en-US
,但GEO-IP数据库很可能会返回Germany
。但也许这正是你想要的?!
最后,您可以将其中一种方法用作主要定位因子,将第二种方法用作备份。如果两者都失败,则切换到默认值(例如US $)