我想定位在我的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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top