Question

Étant donné les propriétés suivantes ResourceBundle fichiers:

  1. messages.properties
  2. messages_en.properties
  3. messages_es.properties
  4. messages_ {} certains paramètres régionaux .properties

Note: messages.properties contient tous les messages pour la langue par défaut. messages_en.properties est vraiment vide - il est juste là pour l'exactitude. messages_en.properties retomberont à messages.properties!

Et étant donné les config suivantes params dans 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>

Je suppose que si les paramètres régionaux choisi est « es », et une ressource ne se traduit pas dans « es », il retombait à « en », et enfin « messages.properties » (depuis messages_en.properties est vide).

Voici comment les choses fonctionnent dans la jetée. J'ai aussi testé ceci sur WebSphere.

La résine est le problème

Le problème est quand je suis à la résine (3.0.23). la résolution ne fonctionne pas fallback du tout! Afin d'obtenir un message à afficher, je dois faire ce qui suit:

  1. renommer messages.properties à messages_en.properties (essentiellement, échange le contenu de messages.properties et messages_en.properties)
  2. Assurez-vous que jamais clé dans messages_en.properties est également définie dans messages_ {} tous les autres paramètres régionaux .properties (même si exactement la même).

Si je ne le fais pas, je reçois « ??? some.key ??? » dans le JSP.

S'il vous plaît aider! Ce laisse perplexe.

- LES

SOLUTION

Ajouter à la suite pom.xml (si vous utilisez 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>
Était-ce utile?

La solution

Je ne fais pas de résine, alors ne me épingler pas, mais les symptômes le faire sonner comme ça il est livré avec une mise en œuvre JSTL mal cuite. Essayez par exemple pour la remplacer par un plus décent dans le /WEB-INF/lib du webapp. Si Servlet 2.5, obtenir jstl-1.2.jar ou si Servlet 2.4, obtenir jstl.jar et standard.jar.

Autres conseils

Juste une idée, mais vous pouvez essayer d'ajouter ce contexte-param ainsi:

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

Il est possible que la résine utilise quelque chose comme ça que les paramètres régionaux « de secours ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top