Domanda

Dati i seguenti proprietà file ResourceBundle:

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

Nota: messages.properties contiene tutti i messaggi per l'impostazione internazionale predefinita. messages_en.properties è davvero vuota - è solo lì per la correttezza. messages_en.properties cadranno di nuovo a messages.properties!

E visti i seguenti params di configurazione in 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>

Mi aspetterei che se il locale scelto è 'es', e una risorsa non è tradotto in 'es', allora sarebbe ripiegare a 'it', e, infine, a 'messages.properties' (dal messages_en.properties è vuoto).

Ecco come funzionano le cose in Jetty. Ho anche provato questo su WebSphere.

resina è il problema

Il problema è quando arrivo a Resina (3.0.23). risoluzione Fallback non funziona affatto! Al fine di ottenere un messaggi da visualizzare, devo effettuare le seguenti operazioni:

  1. Rinomina messages.properties a messages_en.properties (essenzialmente, di swap il contenuto di messages.properties e messages_en.properties)
  2. Assicurati che mai fondamentale nella messages_en.properties è anche definita in messages_ {ogni altro locale} .properties (anche se la stessa).

Se non faccio questo, ottengo "??? some.key ???" nelle JSP.

Si prega di aiuto! Questo lascia perplessi.

- LES

SOLUTION

Aggiungi al seguente pom.xml (se si sta utilizzando 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>
È stato utile?

Soluzione

Non lo faccio in resina, quindi non mi pin su di esso, ma i sintomi rendere il suono come che le navi con un'implementazione JSTL mal cotto. Provate per esempio per sostituire con una più decente nella /WEB-INF/lib del webapp. Se Servlet 2.5, get JSTL-1.2.jar , o se Servlet 2.4, get jstl.jar e standard.jar .

Altri suggerimenti

Solo un'idea, ma si potrebbe provare ad aggiungere questo contesto-param così:

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

E 'possibile che in resina sta usando qualcosa di simile come il 'ripiego' locale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top