Resin3x中的ResourceBundle回退分辨率是否被破坏?

时间:2010-03-03 03:45:08

标签: jsp internationalization resin resourcebundle fallback

给出以下ResourceBundle属性文件:

  1. messages.properties
  2. messages_en.properties
  3. messages_es.properties
  4. messages_ {some locale} .properties
  5. 注意: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(本质上, swap messages.properties和messages_en.properties的内容)
    2. 确保在messages_ {其他所有语言环境} .properties中定义了messages_en.properties中的键(即使完全相同)。
    3. 如果我不这样做,我会得到“??? 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>
      

2 个答案:

答案 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