Pregunta

Teniendo en cuenta los siguientes archivos de propiedades ResourceBundle:

  1. messages.properties
  2. messages_en.properties
  3. messages_es.properties
  4. messages_ {locale} algunos .properties

Nota: messages.properties contiene todos los mensajes de la configuración regional predeterminada. messages_en.properties es realmente vacío - es sólo allí para la corrección. messages_en.properties caerán de nuevo a messages.properties!

Y teniendo en cuenta los siguientes parametros de configuración en 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>

Yo esperaría que si la configuración regional es elegido 'es', y un recurso no se traduce en 'es', entonces sería caer de nuevo a 'es', y finalmente a '' messages.properties (ya messages_en.properties está vacío).

Así es como funcionan las cosas en el embarcadero. También he probado esto en WebSphere.

Resina es el problema

El problema es cuando llego a resina (3.0.23). Resolución de reserva no funciona en absoluto! Con el fin de conseguir un mensajes a la pantalla, hay que hacer lo siguiente:

  1. Cambiar nombre messages.properties a messages_en.properties (esencialmente, intercambio el contenido de messages.properties y messages_en.properties)
  2. Asegúrese siempre clave en messages_en.properties también se define en messages_ {locale} cada dos .properties (incluso si exactamente el mismo).

Si no hago esto, me sale "??? some.key ???" en las páginas JSP.

Por favor, ayuda! Esto es desconcertante.

- LES

SOLUCIÓN

Añadir a pom.xml siguiente (si está utilizando 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>
¿Fue útil?

Solución

No hago resina, así que no me fijar en él, pero los síntomas que suene como que se distribuye con una implementación JSTL mal cocida. Pruebe por ejemplo, para sustituirlo por uno más decente en /WEB-INF/lib de la aplicación web. Si Servlet 2.5, obtener jstl-1.2.jar o si Servlet 2.4, get jstl.jar y standard.jar .

Otros consejos

Es sólo una idea, pero se puede intentar añadir este contexto-param así:

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

Es posible que la resina está usando algo así como el 'retroceso' configuración regional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top