2

applicationContext.xml で、次のように MessageSource を定義しました。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/i18n/messages</value>
        </list>
    </property>
</bean>

また、ローカライズされたすべてのメッセージをロードする必要があるため、独自のクラスを作成しました。

public class ErpMessageSource extends ResourceBundleMessageSource {

    public Map<String, String> getMessages(String basename, Locale locale) {
        Set<String> keys = getKeys(basename, locale);
        Map<String, String> m = new HashMap<String, String>();

        for (String key : keys) {
            try {
                m.put(key, getMessage(key, null, locale));              
            } catch (Exception e) {
                System.err.println(key + " - " + e.getLocalizedMessage());
            }
        }

        return m;
    }

    private Set<String> getKeys(String basename, Locale locale) {
        ResourceBundle bundle = getResourceBundle(basename, locale);
        return bundle.keySet();
    }

}

これには2つの問題があります:

問題 1: メッセージ ファイルが WEB-INF/i18n ディレクトリにあります。このファイルには、messages_en.properties と messages_hr.properties の 2 つのファイルのみが含まれています。

上記のコードを実行しようとすると、「MessageSource の ResourceBundle [messages] not found: Can't find bundle for base name messages, locale 'some locale'」という警告が表示されます。

メッセージ ファイルを WEB-INF/classes フォルダーに移動すると、問題はなくなりますが、2 つ目の問題が発生します。

問題 2: メッセージが WEB-INF/classes ディレクトリの下にあるときに上記のコードを実行すると、例外が発生します: 「ロケール 'some locale' のコード 'some.code' の下にメッセージが見つかりません」 .

質問: WEB-INF/i18n フォルダー内にメッセージを保持することで問題 1 を回避する方法と、そこで何が起こっているのか本当にわからないため、2 番目の問題の解決策が必要です。

4

2 に答える 2

8

おそらく、リソース フォルダーをプロジェクトのクラスパスに追加するだけで済みます。

次の操作を実行してみてください。

[パッケージ エクスプローラー] ビューでプロジェクト名を右クリック ---> [プロパティ] ---> [Java ビルド パス] ---> [ソース] タブ (デフォルトで開く) にとどまる ---> [フォルダー] をクリック ---> リストプロジェクト内のすべてのフォルダーが表示されるはずです--->メッセージプロパティファイルを含むフォルダーにチェックマークを付けます

プロジェクトを再構築して実行してみます。

于 2012-12-07T10:24:02.460 に答える
1

質問から2年が経ちましたが、同じ問題があり、解決策を見つけました。

i18n プロパティー・ファイルを webcontent フォルダーの外部に保持したい場合は、.settingフォルダー内のファイル org.eclipse.resources.prefs を変更する必要があります。次のようにします。

eclipse.preferences.version=1
encoding//WebContent/WEB-INF/i18n/property_en.properties=UTF-8
encoding//WebContent/WEB-INF/i18n/property_fr.properties=UTF-8

bean プロパティで、前と同じように messageSource を設定します。しかし追加:

<property name="defaultEncoding" value="UTF-8" />

それがうまくいくことを願っています。

于 2014-05-27T14:26:54.763 に答える