给定以下 ResourceBundle 属性文件:
- 消息属性
- messages_en.properties
- messages_es.properties
- 消息_{某些语言环境}.properties
注意: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) 时。后备解决方案根本不起作用!为了显示消息,我必须执行以下操作:
- 将messages.properties 重命名为messages_en.properties(本质上是交换messages.properties 和messages_en.properties 的内容)
- 确保messages_en.properties 中的所有键也在messages_{every other locale}.properties 中定义(即使完全相同)。
如果我不这样做,我会得到“???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>