【问题标题】:Spring Boot application giving message No message found for locale 'en_GB'Spring Boot 应用程序给出消息 No message found for locale 'en_GB'
【发布时间】:2018-11-19 20:01:53
【问题描述】:

在我的 Spring Boot 应用程序中,我收到消息: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 Boot 默认设置,为什么会收到消息 org.springframework.context.NoSuchMessageException: No message found under code 'invalidAdminPassword' for locale 'en_GB'.

谁能给点建议?

【问题讨论】:

  • 该消息是关于键“name.required”的。它与密钥“invalidAdminPassword”无关。阅读消息会有所帮助。读取异常的堆栈跟踪也有帮助。
  • 我已在问题中更正了这一点。谢谢。
  • 如果您同时拥有“messages.properties”和“massages_en_GB.properties”,则无需引用本地化的基本名称。只需一个简单的 setBasename("messages") 就可以了。 (可以在这里找到很好的例子:baeldung.com/spring-boot-internationalization

标签: java spring spring-boot message properties-file


【解决方案1】:

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

为解决您的问题,请回答,请提供更多细节:

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

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

【讨论】:

  • 一个。文件 message_en_GB.properties 位于文件夹 src/main/resources 中。湾。只有一个消息文件。
  • 很高兴听到。真正的问题是什么?
  • 我把LOCALEen_GBUK 设置搞混了。最后,根据您在 GitHub 上的演示,我只是使用了US
  • 只有文件名对我不起作用不知道为什么?但我们通过在 basename 中添加类路径:文件名解决了这个问题。它工作正常,我可以在我的配置等 messageSource.setBasenames("classpath:messages1","classpath:messages2");
【解决方案2】:

有可以检查的可能错误。

  1. 如果消息源文件位于已定义的位置。
  2. 是否有请求语言环境的消息源文件。
  3. 确实定义了一个名为“messageSource”的 bean。

如果使用java config,必须是这样的

@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

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2013-02-17
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2019-04-03
    相关资源
    最近更新 更多