0

给定以下 ResourceBundle 属性文件:

  1. 消息属性
  2. messages_en.properties
  3. messages_es.properties
  4. 消息_{某些语言环境}.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) 时。后备解决方案根本不起作用!为了显示消息,我必须执行以下操作:

  1. 将messages.properties 重命名为messages_en.properties(本质上是交换messages.properties 和messages_en.properties 的内容)
  2. 确保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>
4

2 回答 2

1

只是一个想法,但您也可以尝试添加此上下文参数:

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

Resin 可能正在使用类似的东西作为“后备”语言环境。

于 2010-03-19T16:01:39.093 回答
1

我不做 Resin,所以不要把我钉在上面,但症状听起来像是它附带了一个糟糕的 JSTL 实现。例如,尝试在 webapp 的/WEB-INF/lib. 如果 Servlet 2.5,获取jstl-1.2.jar,或者如果 Servlet 2.4,获取jstl.jar 和 standard.jar

于 2010-03-19T16:35:40.190 回答