1.我已经定义了i18n文件的位置。
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??
的页面,我没有找到问题。
答案 0 :(得分:2)
问题是Spring引导的MessageSourceAutoConfiguration
仅在满足ResourceBundleCondition
条件时启动。这里important line最多的是:
return new PathMatchingResourcePatternResolver(classLoader)
.getResources("classpath*:" + name + ".properties");
这基本上意味着只有当有一个名为MessageSource
的文件时才会创建classpath:i18n/messages.properties
,如果没有一个区域设置匹配,则该文件是默认的resourcebundle。
我的猜测是你只有messages_en_US.properties
和messages_zh_CN.properties
。这意味着为了解决这个问题,您需要创建一个默认的messages.properties
文件。
您可以选择创建空白messages.properties
文件,也可以决定 en-US 或 zh-CN 区域设置是否为默认值,并重命名其中一个为messages.properties
。
或者,如果您不想创建默认资源捆绑包,也可以创建自己的MessageSource
:
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasenames("i18n/messages");
source.setUseCodeAsDefaultMessage(true);
return source;
}