【发布时间】: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