Est-ResourceBundle résolution de secours cassé en Resin3x?
-
24-09-2019 - |
Question
Étant donné les propriétés suivantes ResourceBundle fichiers:
- messages.properties
- messages_en.properties
- messages_es.properties
- 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:
- renommer messages.properties à messages_en.properties (essentiellement, échange le contenu de messages.properties et messages_en.properties)
- 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>
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 ».