2011-11-15 10 views
3

を取得私はSpring MVCのメッセージバンドルを使用して奇妙な問題を抱えている:間違ったメッセージ・バンドル・ファイルをフェッチしています。私はダブルチェックして、私のJavaコントローラクラスで私はfr_FRロケールを持っていますが、Springタグ(クラスでもappContext.getMessage(code, null, locale);)が私に英語メッセージを返します!春MVCは - 間違ったメッセージバンドル

何が起こっていますか?

私はLiferayポータル用のポートレットを開発しています。

... 
<spring:message code="button.help"/> 
... 

をとパスへ:私ののJSP私は、コードはこのように見てきた中で

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>messages</value> 
     </list> 
    </property> 
</bean> 

applicationContext.xmlを中:私はあなたに私のコードの一部をお見せしましょう私のメッセージは次のようになります。

開発:

  • /src/main/webapp/WEB-INF/classes/messages.properties(英語、デフォルト)
  • /src/main/webapp/WEB-INF/classes/messages_fr.properties
Tomcatの

  • /webapps/MY_APP/WEB-INF/classes/messages.properties
  • /webaに配備

    pps/MY_APP/WEB-INF/classes/messages_fr.properties

+0

問題には3つの原因があります。フランス語のプロパティファイルが読み込まれていないか、何らかの理由でタグが英語のローカルを使用しているか、frenshメッセージファイルにキーが含まれていません。 – Ralph

+0

最も奇妙なことは、この特定のポートレットのローカリゼーションだけが機能しないことです。他のすべてのポートレットは正常に動作します。どちらも同じキーを持っています - 欠けているものはありません。 – Queequeg

+0

ポートレットはよくわかりませんが、ローカルのインターセプタを設定しました。春の参照第15.6 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-localeresolver – Ralph

答えて

1

ローカライズされたメッセージファイルにユニコード文字が正しくない場合( \ uXXX形式)、同様の問題が発生しました。

Java、Spring、Tomcatのいずれも、それに関する情報を書いておらず、フィードバックもまったくありません。

ファイルを修正した後、すべて突然が機能し始めました。

よろしく

+0

ありがとう、これは私の問題を解決しました。私は悪いキャラクターを持っていた – Queequeg

1

ブラウザで言語を設定してみてください(fr_FR)。私が使用のFirefoxのバージョン、その

Edit ->Preferences -> Content -> Langauges

で、移動アップを使用するか、トップの好みとしてfr_FRのを持っているために、ボタンダウンの移動で。

これにより、ブラウザは優先ロケールセットを使用してリクエストを送信します。

+0

私はフランス語に設定しました。すべての可能なデバッグ出力は、(httpリクエストによって)選択されたfr_FRロケールがあることを表示します。 messages.propertiesファイルを削除すると、メッセージが見つからないというエラーが表示されます。 – Queequeg

+0

あなたのプロパティファイル名はmessages_fr.propertiesの代わりにmessages_fr_FR.propertiesでなければならないと思います。 – stratwine

+0

私もそれを試しましたが、何も変わりません。 – Queequeg

0

あなたはまた、私のプロジェクトの最初のJSPページで

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</bean> 

<bean id="localeResolver" 
     class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/> 

が必要

<mvc:interceptors> 
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <property name="paramName" value="lang" /> 
    </bean> 
</mvc:interceptors> 

のようなのApplicationContextでインターセプタを持っている必要があり、私はそのような言語のための選択肢を与えた:

これが助けた場合
<span style="float: right"> <a href="?lang=en">en</a> | <a 
     href="?lang=fr">fr</a> </span> 

を教えてください君は。

P.S.私のメッセージ_ *。propertiesファイルはsrc/main/resourcesのソースフォルダにあり、webappではなく、このことが重要かどうかわかりません。

P.P.S.ここで便利なチュートリアル:それは、MVCなどの接頭語を認識するために必要である

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util-3.0.xsd 
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

http://springbyexample.org/examples/basic-webapp-internationalization.html

私は次のようにあなたがものを持っている必要があり、あなたのxmlの冒頭でもそれを追加したいと思います。それを持っていることを確認してください。

+0

プロパティ名= "basename"または** basenames **? – Queequeg

+0

ベース名ではなく、ベース名です。 – user998692

0

フリストあなたはLiferayがしたいロケールをサポートしていることを確認する必要があります。さらに、各ポートレットのportlet.xmlにサポートされているロケールを追加する必要があります。

portlet.xml

<portlet> 
    ... 
    <supported-locale>en</supported-locale> 
    <supported-locale>fr</supported-locale> 
    ... 
</portlet> 

あなたはそれだけでは動作しません両方のいずれかを欠場する場合。このポートレットのサポートされているロケールも追加したかどうか確認してください。

関連する問題