【问题标题】:How to change messagesource with locale in spring boot?如何在春季启动中使用语言环境更改消息源?
【发布时间】:2018-02-10 04:46:30
【问题描述】:

我在 Spring Boot 中遇到了多个消息资源的问题,如下所示:

这是我的 application.yml:

...
spring:
   messages:
      basename: i18n/messages_fr,i18n/messages_en

这是我的测试课:

public class MessageSourceTest {
@Autowired
MessageSource messageSource;

public String getMessage(String key, String keyLang) {
    Locale locale = Locale.forLanguageTag(keyLang); // keyLang = "en", or "fr"
    String message = messageSource.getMessage(key, null, locale);
    return message;
}

}

问题是无论我设置的区域设置是“en”还是“fr”,我总是从 i18n/messages_fr 收到消息。

如果我将 application.yml 设置为:

basename: i18n/messages_en,i18n/messages_fr

然后我收到了来自 i18n/messages_en 的消息

那么,有什么方法可以让我获得动态语言环境的消息。

(仅在后端,未使用 localeResolver 和 addInterceptors 设置通过客户端,如下所示:http://www.baeldung.com/spring-boot-internationalization

【问题讨论】:

  • 您的基本名称必须是i18n/message 正确的文件是基于Locale 加载的。
  • 这行不通。我得到了异常 org.springframework.context.NoSuchMessageException: No message found under code 'test.title' for locale 'en'。
  • 如果您复制粘贴我输入的内容,因为它缺少 s ... i18n/messages
  • _fr 的问题在于它基本上是Locale 的约定,并且它会(在附加Locale 之后尝试定位messages_fr_en(对于en @ 987654334@)。它不存在,因此做一个后备。你还需要一个包含默认消息的i18n/messages.properties
  • 我在 Spring 和 Spring Boot 参考指南中记录了这一点(Spring Boot 添加了一个messages.properties 的要求,用于检测文件的存在(并且它被用作默认值)。

标签: spring spring-boot internationalization locale


【解决方案1】:

您应该将baseName 设置为i18n/messages 而不是i18n/messages_{lang}。 然后通过检查您的localeResolver,spring 决定应该读取哪个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2021-07-05
    • 2011-10-29
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多