0

次の ResourceBundle プロパティ ファイルがあるとします。

  1. メッセージのプロパティ
  2. messages_en.properties
  3. messages_es.properties
  4. messages_{一部のロケール}.properties

注: messages.properties には、デフォルト ロケールのすべてのメッセージが含まれています。messages_en.properties は本当に空です - 正確さのためにそこにあるだけです。messages_en.properties は、messages.properties にフォールバックします!

そして、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>

選択したロケールが「es」で、リソースが「es」に翻訳されていない場合、「en」にフォールバックし、最終的に「messages.properties」にフォールバックすると予想されます (messages_en.properties が空であるため)。 .

これが Jetty での仕組みです。これも WebSphere でテストしました。

樹脂が問題

問題は、Resin (3.0.23) に到達したときです。フォールバック解決がまったく機能しません! メッセージを表示するには、次のことを行う必要があります。

  1. messages.properties の名前を messages_en.properties に変更します (基本的に、messages.properties と messages_en.properties の内容を入れ替えます)。
  2. messages_en.properties のキーが、messages_{every other locale}.properties でも​​定義されていることを確認してください (まったく同じ場合でも)。

これを行わないと、「???some.key???」になります。JSPで。

助けてください!これは当惑します。

-- レ

解決

pom.xml に以下を追加します (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>
4

2 に答える 2

1

私はResinを使用していないので、固定しないでください。ただし、症状により、JSTLの実装が不十分な状態で出荷されているように聞こえます。たとえば、webappのより適切なものでオーバーライドしてみてください/WEB-INF/lib。サーブレット2.5の場合はjstl-1.2.jarを取得し、サーブレット2.4の場合はjstl.jarとstandard.jarを取得します。

于 2010-03-19T16:35:40.190 に答える
1

単なるアイデアですが、この context-param も追加してみてください:

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

Resin がそのようなものを「フォールバック」ロケールとして使用している可能性があります。

于 2010-03-19T16:01:39.093 に答える