我正在尝试在我的JSP Web应用程序上本地化货币,问题是当我要求语言环境时,我只获取语言代码(“en”)而不是完整语言和国家/地区代码(“en_US”)。 问题是,当setLocale的值不包含语言和国家/地区代码时,formatNumber不起作用。
我可以通过检查jsp页面开头的语言环境语言并设置几种语言的默认国家/地区代码然后设置setLocale的值来解决它,但这种方法对我来说非常难看。有没有更好的方法呢?
我现在就是这样做的:
<c:choose>
<c:when test="${pageContext.response.locale == 'cs'}">
<f:setLocale value="cs_CZ" />
</c:when>
<c:otherwise>
<f:setLocale value="en_US" />
</c:otherwise>
</c:choose>
<f:formatNumber type="currency" value="${product.price}" currencyCode="CZK"/>
答案 0 :(得分:4)
货币取决于国家,而不是语言。你真的需要设置它。更通用的方法是使用Filter
,这样您就不需要在每个JSP中复制检查。
更新:我现在看到您正在使用HttpServletResponse#getLocale()
,它返回以编程方式设置的区域设置或容器的默认区域设置。通常的做法是使用HttpServletRequest#getLocale()
来获取客户端的语言环境,因此:
${pageContext.request.locale}
看看是否有帮助。但是,您仍然需要检查该国家是否确实存在。 Filter
是最适合的地方。
答案 1 :(得分:4)
你正在使用Stripes !! Stripes将为您处理语言环境,您应该从ActionBeanContext中获取它:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
不要绕着Stripes回来!那是痛苦和不幸的道路!条纹是你的朋友!
通常,您不需要使用<fmt:setLocale>
,因为Stripes 已经在Stripes过滤器中设置了区域设置。再次, Stripes是您的朋友!! 在Stripes wiki中阅读:
http://www.stripesframework.org/display/stripes/Localization