给出以下ResourceBundle属性文件:
注意:messages.properties包含默认语言环境的所有消息。 messages_en.properties真的是空的 - 它只是为了正确性。 messages_en.properties将回退到messages.properties!
在web.xml中给出以下配置参数:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
<param-value>en</param-value>
</context-param>
我希望如果选择的语言环境是'es',而资源没有翻译成'es',那么它将回退到'en',最后回到'messages.properties'(因为messages_en.properties)是空的。
这就是Jetty的工作原理。我也在WebSphere上测试了这个。
树脂是问题
问题是当我到达Resin(3.0.23)时。后备分辨率根本不起作用!为了显示消息,我必须执行以下操作:
如果我不这样做,我会得到“??? some.key ???”在JSP中。
请帮忙!这很令人困惑。
- LES
解
将以下内容添加到pom.xml(如果您使用的是maven)
...
<properties>
<taglibs.version>1.1.2</taglibs.version>
</properties>
...
<!--
Resin ships with a crappy JSTL implementation that doesn't work with
fallback locales for resource bundles correctly; we therefore include
our own JSTL implementation in the WAR, and avoid this problem. This
can be removed if the target container is not resin.
-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${taglibs.version}</version>
<scope>compile</scope>
</dependency>
答案 0 :(得分:1)
只是一个想法,但你也可以尝试添加这个context-param:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en</param-value>
</context-param>
Resin可能会使用类似的东西作为“后备”语言环境。
答案 1 :(得分:1)
我不做树脂,所以不要把它钉在上面,但是这些症状听起来好像它带有一个很难烘烤的JSTL实现。例如,尝试在webapp的/WEB-INF/lib
中使用更合适的覆盖它来覆盖它。如果是Servlet 2.5,请获取jstl-1.2.jar,或者如果是Servlet 2.4,请获取jstl.jar and standard.jar。