3

我试图在我的 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"/>
4

2 回答 2

4

货币取决于国家,而不是语言。你真的需要设置它。一种更通用的方法是为此使用 a Filter,这样您就不需要在每个 JSP 中复制粘贴检查。

更新:我现在看到您正在使用HttpServletResponse#getLocale()它返回以编程方式设置的语言环境或容器的默认语言环境。通常的做法是用来HttpServletRequest#getLocale()获取客户端的语言环境,因此:

${pageContext.request.locale}

看看是否有帮助。但是,您仍然需要检查该国家/地区是否实际存在。AFilter是最好的地方。

于 2010-02-13T20:46:39.693 回答
4

您正在使用条纹!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

于 2010-02-13T23:30:45.603 回答