我有一个带有国际化所需bean的spring boot应用程序。
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
cookieLocaleResolver.setCookieName(CookieNames.LANG);
cookieLocaleResolver.setDefaultLocale(new Locale(Lang.DEFAULT_LANG.getLabel())); //label is "ru"
cookieLocaleResolver.setCookieMaxAge(this.localeAgeCookie);
return cookieLocaleResolver;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:i18n/messages");
messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
return messageSource;
}
@Bean
public MessageSourceAccessor messageSourceAccessor() {
return new MessageSourceAccessor(messageSource());
}
并且有俄语(messages.properties)和英语(messages_en.properties)的文件消息,默认选择俄语。
通过调用以下方法,我使用POST请求而不是拦截器更改语言。
public static void setLocale(HttpServletRequest request, HttpServletResponse response, Lang lang) {
final LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
localeResolver.setLocale(request, response, Locale.forLanguageTag(lang.getLabel()));
}
问题是当我打电话
messageSourceAccessor.getMessage(key)
密钥同时位于消息和消息文件中,即使在查询中强制使用以下语言环境,我也始终从消息中获取消息:
messageSourceAccessor.getMessage(key, new Locale("ru")).
如何解决这个问题?