如何使FMT:setLocale的工作对FMT:formatNumber在JSP唯一的语言代码?
-
20-09-2019 - |
题
我想定位在我的JSP的Web应用程序的货币,问题是,当我要求的语言环境,我只得到语言代码(“EN”),而不是完整的语言和国家代码(“EN_US”)。 与此问题是,formatNumber不工作时的setLocale的值不包含语言和国家代码。
我可以在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"/>
解决方案
的货币是依赖于国家,而不是上的语言。你真的需要设置它。一个更通用的方法是使用一个Filter
这个,这样你就不需要copypaste在每个JSP检查。
更新:我现在看到你正在使用的 HttpServletResponse#getLocale()
它返回编程方式设置区域设置或以其他方式在容器的默认语言环境。通常的做法是使用 HttpServletRequest#getLocale()
以获取客户端的语言环境,从而这样:
${pageContext.request.locale}
请参阅是否有帮助。但是,您仍然需要检查,如果该国实际存在。甲Filter
是针对的最佳位置。
其他提示
您使用条纹会!条纹将处理区域适合你,你应该从ActionBeanContext得到它:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
别到处条纹回来了!这是通向痛苦和unhapiness!条纹是你的朋友!
在一般情况下,你不应该需要使用<fmt:setLocale>
因为条纹的已经建立的条纹过滤器的语言环境。的再次的条纹是你的朋友!的阅读关于这个在条纹维基:
http://www.stripesframework.org/display/stripes/Localization
不隶属于 StackOverflow