Spring 引导应用程序给出消息 未找到区域设置的消息 'en_GB'

Spring Boot application giving message No message found for locale 'en_GB'

在我的 Spring 引导应用程序中,我收到消息:org.springframework.context.NoSuchMessageException: No message found under code 'invalidAdminPassword' for locale 'en_GB'.

我知道这是由于 MessageSource 对象在我的代码中定义为:

@Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        Locale.setDefault(Locale.UK);
        messageSource.setBasename("messages_en_GB");
        messageSource.setCacheSeconds(3600); // Refresh cache once per hour.
        return messageSource;
    }

messages_en_GB.properties,我有消息:

# Other validation messages.
invalidAdminPassword=Invalid password.

在相关的控制器中我有:

System.out.println(messageSource.getMessage("invalidAdminPassword", null, Locale.UK));

只是为了测试从 messages_en_GB.properties 文件中的检索。

我相信我正在使用 Spring 引导默认设置,为什么我会收到消息 org.springframework.context.NoSuchMessageException: No message found under code 'invalidAdminPassword' for locale 'en_GB'.

有人可以指点一下吗?

tl;dr:link 中有一个最小的 运行 示例。

解决您的问题,请回答,请详细说明:

a) 你把你的 messages.properties 放在哪里了?

b) 是否有多个消息{.*}.properties?

有可能的错误可以检查。

  1. 如果消息源文件在定义的位置。
  2. 请求的语言环境是否有消息源文件。
  3. 是否定义了一个名为 "messageSource".
  4. 的 bean

如果使用 java 配置,必须像

@Bean
public MessageSource messageSource() {
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
     messageSource.setBasename("/WEB-INF/messages");
}

这里我们的消息文件应该按照定义在WEB-INF里面。

@Bean(name="messageSource")
public MessageSource setUpmessageSource() {}

如果我们只定义

public MessageSource setUpmessageSource() {}

然后没有名为messageSource

的bean