Pergunta

Dados os seguintes arquivos da ResourceBundle Properties:

  1. mensagens.properties
  2. Mensagens_en.properties
  3. mensagens_es.properties
  4. mensagens_ {alguns locais} .Properties

NOTA: Mensagens.Properties contém todas as mensagens para o local padrão. Mensagens_en.properties está realmente vazio - está lá apenas para correção. Mensagens_en.Properties voltarão ao Message.Properties!

E dados os seguintes parâmetros de configuração em 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>

Eu esperaria que, se o local escolhido for 'es', e um recurso não seja traduzido em 'es', então ele voltaria para 'en' e, finalmente, 'mensagens.properties' (já que as mensagens_en.properties estão vazias) .

É assim que as coisas funcionam no cais. Eu também testei isso no WebSphere.

Resina é o problema

O problema é quando chego a resina (3.0.23). A resolução de fallback não funciona! Para obter mensagens para exibir, devo fazer o seguinte:

  1. Renomear mensagens.properties para mensagens_en.properties (essencialmente, troca o conteúdo de mensagens.properties and Message_en.properties)
  2. Certifique -se de sempre que a chave em mensagens_en.properties seja definida em mensagens_ {todos os outros locais} .Properties (mesmo se exatamente o mesmo).

Se eu não fizer isso, eu entendo "? nos JSPs.

Por favor ajude! Isso é desconcertante.

- Les

SOLUÇÃO

Adicione o seguinte ao pom.xml (se você estiver usando o 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>
Foi útil?

Solução

Eu não faço resina, então não me prenda, mas os sintomas fazem parecer assim que ele é enviado com uma implementação JSTL mal assada. Tente, por exemplo, substituí -lo por um mais decente no webapp's /WEB-INF/lib. Se o servlet 2.5, obtenha jstl-1.2.jar, ou se servlet 2.4, obtenha jstl.jar e padrão.jar.

Outras dicas

Apenas uma ideia, mas você pode tentar adicionar esta param de contexto também:

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

É possível que a resina esteja usando algo assim como o local de 'fallback'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top