2017-09-13 15 views
0

1. i18nファイルの場所を定義しました。なぜthymeleafメッセージが間違って表示されますか?

spring.messages.basename=i18n/messages 

login.rememberMeのメッセージとキーのファイルが存在します。

I18N/messages_zh_CN.properties

login.rememberMe=记住我 

I18N/messages_en_US.properties

login.rememberMe=Remember Me 

3.このlogin.htmlとのメッセージ内容です。

<label th:text="#{login.rememberMe}"></label> 

ページには??login.rememberMe_zh_CN??が表示され、問題は見つかりませんでした。

enter image description here

+0

プロパティが存在しますか?なぜそれは "lib"で始まるのですか? –

+0

@DaveNewtonはい、それは存在します、Intellij Ideaの機能で、メッセージは 'lib'です。 – Raw

+0

コードの画像はここでは役に立たない。なぜこのような多くの理由があるのか​​については、[このメタ投稿](https://meta.stackoverflow.com/a/285557/62576)を参照してください。コードはテキストで、投稿に直接コピー&ペーストして、コードとして適切にフォーマットすることができます。画像は絶対最小値に保たれ、問題がなければそれを証明することができない場合にのみ使用されます。 –

答えて

1

問題は、その春ブーツのMessageSourceAutoConfigurationのみResourceBundleCondition条件が満たされたときにキックです。最もimportant lineはここにある:

return new PathMatchingResourcePatternResolver(classLoader) 
        .getResources("classpath*:" + name + ".properties"); 

これは、基本的にはロケールのどれもが一致しない場合、デフォルトのResourceBundleですclasspath:i18n/messages.propertiesと呼ばれるファイルは、ありますとき、あなたはMessageSourceのみが作成されることを意味します。


私の推測では、あなただけmessages_en_US.propertiesmessages_zh_CN.propertiesを持っているということです。つまり、これを解決するには、デフォルトのmessages.propertiesファイルを作成する必要があります。

あなたは空白のmessages.propertiesファイルを作成することを選択したり、あなたEN-USまたはZH-CNロケールがデフォルトであるかどうかを判断し、messages.propertiesにそれらのいずれかの名前を変更することができます。また


、デフォルトのResourceBundleを作成したくない場合、あなたはまた、独自のMessageSourceを作成することができます。

@Bean 
public ResourceBundleMessageSource messageSource() { 
    ResourceBundleMessageSource source = new ResourceBundleMessageSource(); 
    source.setBasenames("i18n/messages"); 
    source.setUseCodeAsDefaultMessage(true); 
    return source; 
} 
+0

実際には、これを設定します: 'spring.messages.fallbackToSystemLocale:false'、デフォルトはtrueです。システムロケールになります。 – Raw

関連する問題