Ist Resourceausweich Auflösung gebrochen in Resin3x?
-
24-09-2019 - |
Frage
In Anbetracht der folgenden Eigenschaften Resource Dateien:
- messages.properties
- messages_en.properties
- messages_es.properties
- messages_ {einige locale} .properties
Hinweis: messages.properties enthält alle Meldungen für das Standardgebietsschema. messages_en.properties ist wirklich leer - es ist da nur für Richtigkeit. messages_en.properties wird messages.properties fallen zurück!
Und die folgenden Konfigurationsparameter erstellt in web.xml gegeben:
<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>
Das würde ich erwarten, wenn das gewählte Gebietsschema ‚es‘, und eine Ressource in ‚es‘ nicht übersetzt, dann wäre es, zu ‚de‘ zurückgreifen und schließlich zu ‚messages.properties‘ (seit messages_en.properties leer ist).
Dies ist, wie die Dinge in Jetty arbeiten. Ich habe auch diese auf WebSphere getestet.
Harz ist das Problem
Das Problem ist, wenn ich zu Harz erhalten (3.0.23). Fallback-Lösung funktioniert nicht! Um eine Nachrichten-Anzeige zu erhalten, muss ich folgendes tun:
- Rename messages.properties zu messages_en.properties (im Wesentlichen, Swap die Inhalte von messages.properties und messages_en.properties)
- Achten Sie darauf, immer Schlüssel in messages_en.properties auch in messages_ {jede andere locale} .properties definiert ist (auch wenn genau das gleiche).
Wenn ich das nicht tun, erhalte ich „??? some.key ???“ in dem JSPs.
Bitte Hilfe! Dies ist verwirrend.
- LES
SOLUTION
Fügen Sie folgende zu pom.xml (wenn Sie mit 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>
Lösung
ich nicht Resin tun, so lass mich nicht auf sie stecken, aber die Symptome machen es klingen wie, dass es Schiffe mit einem schlecht gebacken JSTL Umsetzung. Versuchen Sie zum Beispiel mit einem anständigen in der Webapp der /WEB-INF/lib
außer Kraft zu setzen. Wenn Servlet 2.5, jstl-1.2.jar oder wenn Servlet 2.4, get jstl.jar und standard.jar .
Andere Tipps
Nur eine Idee, aber man konnte diesen Kontext-param versuchen Sie auch:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en</param-value>
</context-param>
Es ist möglich, dass Harz wird mit so etwas wie das als ‚Rückfall‘ locale.