如何使fmt:setLocale在fmt:formatNumber中只使用JSP中的语言代码?

时间:2010-02-13 16:55:17

标签: jsp internationalization jstl stripes

我正在尝试在我的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"/>

2 个答案:

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