如何从Java代码设置JSTL语言环境?

| 我想设置
<fmt:formatNumber>
和朋友使用的JSTL语言环境。我知道使用
<fmt:setLocale>
可以实现,但是我需要动态地做到这一点(取决于从我的数据库中检索到的用户数据),并且更喜欢Java代码-确切地说是一个过滤器类。 我以为将会话属性ѭ2setting设置为所需的
Locale
实例可以解决问题,但是它被忽略了:JSTL标记继续使用浏览器区域设置。 我确认没有页面上下文或相同名称的请求属性。 那我在做什么错?还是我真的需要通过JSP做到这一点? 阅读JSTL代码后,我找到了对
LocalizationContext
的引用,并认为我需要设置一个。不过,我无法完全弄清楚它如何适合图片或如何设置图片。     
已邀请:
您需要第二个: 设置JSTL语言环境的3种方法: /以及默认应用程序资源包,时区和数据源/ 通过JSTL操作设置–这允许通过scope属性指定范围。
<fmt:setLocale value=\"en_US\" scope=\"session\"/>
以编程方式设置–允许通过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)
由上下文初始化参数设置–指定在任何标准作用域中未找到设置时使用的值。
<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
    <param-value>en_US</param-value>
</context-param>
jstl-quick-reference(PDF)     
您可以在
<fmt:setLocale>
中使用EL。它不需要是硬编码的值或类似的东西。 这是一个例子:
<c:set var=\"language\" value=\"${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}\" scope=\"session\" />
<fmt:setLocale value=\"${language}\" />
如果将语言作为名称为ѭ10name的请求参数提供,则将对其进行设置。否则,如果先前已经在会话中通过属性名称“ 10”设置了该语言,则请坚持使用该语言。否则,请在请求标头中使用用户提供的语言环境。 如果您在过滤器代码中输入ѭ12,则将使用-如果未设置请求参数。 也可以看看: 如何使Java Web应用程序国际化?     
据我所知,\'javax.servlet.jsp.jstl.fmt.locale \'被浏览器的语言环境覆盖。 JSTL使用浏览器的语言环境,如果找不到该语言环境,则使用后备语言环境。因此,您可以设置请求属性以指定该语言环境。将此行添加到您的控制器
request.setAttribute(\"javax.servlet.jsp.jstl.fmt.fallbackLocale.request\", \"en-us\");
使用此设置将设置JSTL将使用的语言环境。请注意属性名称中的.request,如果将此属性设置为其他范围,则必须使用不同的后缀。对于HttpSession,后缀是.session,对于ServletContext,后缀是.application     
如果您依赖于DB中的数据,也许有更好的方法将此逻辑插入ѭ14或
\'controller\'
(取决于您使用的框架)。只需使用参数ѭ16扩展URL 希望这可以帮助     
还有另一种方式。在servlet中,您可以通过创建会话属性来设置语言环境,如下所示:
request.getSession().setAttribute(\"javax.servlet.jsp.jstl.fmt.locale.session\", \"ko-KR\");
    

要回复问题请先登录注册