18

我想设置<fmt:formatNumber>和朋友使用的 JSTL 语言环境。我知道这可以通过<fmt:setLocale>.

我认为将会话属性设置javax.servlet.jsp.jstl.fmt.locale为我想要Locale的实例就可以了,但它被忽略了:JSTL 标记继续使用浏览器区域设置。

我确认没有同名的页面上下文或请求属性。

那么我做错了什么?或者我真的需要从 JSP 中完成吗?

阅读 JSTL 代码,我找到了对 a 的引用,LocalizationContext并认为我需要设置一个。不过,我无法完全弄清楚它是如何融入图片或如何设置的。

4

5 回答 5

30

你需要第二个:

设置 JSTL 语言环境的 3 种方法: /以及默认应用程序资源包、时区和数据源/

  1. 由 JSTL 操作设置 - 这允许通过范围属性指定范围。

    <fmt:setLocale value="en_US" scope="session"/>
    
  2. 以编程方式设置 - 允许通过 Config API 指定范围。

    import javax.servlet.jsp.jstl.core.Config;
    (...)
    Config.set( session, Config.FMT_LOCALE, new java.util.Locale("en", "US") )
    // or Locale.forLanguageTag("en-US") (java 1.7 and later)
    
  3. 上下文初始化参数设置 - 指定在任何标准范围内均未找到设置时使用的值。

    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
        <param-value>en_US</param-value>
    </context-param>
    

jstl 快速参考 (PDF)

于 2012-03-31T12:01:33.380 回答
12

您可以在<fmt:setLocale>. 它不需要是硬编码的值或其他东西。

这是一个例子:

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />

如果语言作为带有 name 的请求参数提供language,那么它将被设置。否则,如果先前已通过属性 name 在会话中设置了语言language,则坚持使用它。否则在请求标头中使用用户提供的语言环境。

如果您session.setAttribute("language", language)在过滤器代码中执行 a ,则将使用它 - 如果未设置请求参数。

也可以看看:

于 2011-05-25T15:19:27.910 回答
3

据我所知,“javax.servlet.jsp.jstl.fmt.locale”被浏览器的语言环境覆盖。JSTL 使用浏览器的语言环境,如果找不到,它使用一个备用语言环境。因此,您可以设置请求属性来指定该语言环境。将此行添加到您的控制器

request.setAttribute("javax.servlet.jsp.jstl.fmt.fallbackLocale.request", "en-us");

使用它将设置 JSTL 将使用的语言环境。请注意属性名称中的.request,如果将此属性设置为其他范围,则必须使用不同的后缀。对于 HttpSession 后缀是.session,对于 ServletContext 后缀是.application

于 2011-10-21T09:57:24.867 回答
0

如果您依赖于数据库中的数据,可能有更好的方法将此逻辑插入到您的'router'or'controller'中(取决于您使用的框架)。只需使用参数扩展 url?lang='en'

希望这可以帮助

于 2011-05-25T15:14:02.577 回答
0

还有另一种方法。在 servlet 中,您可以通过创建会话属性来设置语言环境,如下所示:

request.getSession().setAttribute("javax.servlet.jsp.jstl.fmt.locale.session", "ko-KR");
于 2014-11-03T12:44:28.257 回答