为什么百万美元的消息显示不正确?

时间:2017-09-13 01:00:03

标签: spring-boot thymeleaf

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??的页面,我没有找到问题。

enter image description here

1 个答案:

答案 0 :(得分:2)

问题是Spring引导的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-US zh-CN 区域设置是否为默认值,并重命名其中一个为messages.properties

或者,如果您不想创建默认资源捆绑包,也可以创建自己的MessageSource

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