2017-09-13 80 views
0

1.我已經定義了i18n文件的位置。爲什麼thymeleaf消息顯示不正確?

spring.messages.basename=i18n/messages 

2.存在用於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

代碼的圖像在這裏沒用。請參閱[此Meta帖子](https://meta.stackoverflow.com/a/285557/62576)瞭解許多原因的列表。代碼是文本,可以直接複製/粘貼到您的文章中並正確格式化爲代碼。圖像應該保持在絕對最低限度,並且只有當沒有它的情況下不能證明問題時纔會使用。 –

回答

1

的問題是,春天啓動的MessageSourceAutoConfiguration只有當ResourceBundleCondition條件滿足在踢。最important line這裏是:

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

這基本上意味着你MessageSource時,有一個叫classpath:i18n/messages.properties文件,這是默認的ResourceBundle如果沒有語言環境的匹配,纔會創建。


我的猜測是,你只有一個messages_en_US.propertiesmessages_zh_CN.properties。這意味着爲了解決這個問題,你需要創建一個默認的messages.properties文件。

您可以選擇創建一個空白messages.properties文件,或者決定是否您的的en-USZH-CN區域設置是默認的,並重新命名他們中的任何一個來messages.properties


另外,如果你不想創建一個默認的資源包,你也可以創建自己的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