Spring Boot MessageSource 在 application.properties 中不起作用

Posted

技术标签:

【中文标题】Spring Boot MessageSource 在 application.properties 中不起作用【英文标题】:Spring boot MessageSource not working in application.properties 【发布时间】:2019-01-03 06:22:45 【问题描述】:

我正在将 spring MVC 转换为 spring boot (2.0.3.RELEASE) 项目。

我在 Spring Boot 中使用它,它可以工作:

@Bean
public MessageSource messageSource() 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("classpath:/locale/normal/message", "classpath:/locale/validation/message");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;

我尝试使用spring boot自动配置(通过application.properties)如下(删除上面的手动bean配置):

spring.messages.basename=classpath:/locale/normal/message,classpath:/locale/validation/message

我试了下,还是不行:

spring.messages.basename=/locale/normal/message,/locale/validation/message

我在下面阅读了他们的documentation:

# INTERNATIONALIZATION (MessageSourceProperties)
spring.messages.always-use-message-format=false # Whether to always apply the MessageFormat rules, parsing even messages without arguments.
spring.messages.basename=messages # Comma-separated list of basenames (essentially a fully-qualified classpath location), each following the ResourceBundle convention with relaxed support for slash based locations.
spring.messages.cache-duration= # Loaded resource bundle files cache duration. When not set, bundles are cached forever. If a duration suffix is not specified, seconds will be used.
spring.messages.encoding=UTF-8 # Message bundles encoding.
spring.messages.fallback-to-system-locale=true # Whether to fall back to the system Locale if no files for a specific Locale have been found.
spring.messages.use-code-as-default-message=false # Whether to use the message code as the default message instead of throwing a "NoSuchMessageException". Recommended during development only.

我将消息属性文件放在类路径中:

src\main\resources\locale\normal
src\main\resources\locale\validation

我尝试了很多组合,但都不起作用,为什么?

我遇到的错误:

javax.servlet.jsp.JspTagException: No message found under code 'login.timeout' for locale 'en'.

(我很确定消息代码在我的所有语言环境的属性文件中。)

我正在使用 Spring 标签来加载本地化消息:

<spring:message code="$param.error" />

【问题讨论】:

你用的是哪个版本? 忘了说,是2.0.3.RELEASE 还有什么不完全有效? 您能否给出您遇到的异常或错误 更新了我遇到的错误信息。 【参考方案1】:

尝试使用# 代替$ - &lt;spring:message code="#param.error" /&gt;

【讨论】:

【参考方案2】:

确保除了特定于语言环境的messages.properties 之外还有默认的messages.properties

【讨论】:

以上是关于Spring Boot MessageSource 在 application.properties 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot MessageSource 在 application.properties 中不起作用

spring boot国际化类ReloadableResourceBundleMessageSource

spring boot国际化类ReloadableResourceBundleMessageSource

Spring boot国际化

Spring Boot yml ResourceBundle 文件

MessageSource Spring:NotSerializableException