2017-09-13 84 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