我试图强迫Spring Boot根据用户设置对MessageSource使用语言环境。通常,我会收到“ EN”语言的消息。例如,如果用户将其默认语言设置为“ FR”,则无论其浏览器设置如何,他都会从“ FR”包中接收消息。如果用户不存在或未登录,则由LocaleResolver解决。
这是我的MvcConfigurer-它使用的是我的自定义LocaleResolver:
@Configuration
public class MvcConfigurer implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/i18n/messages");
messageSource.setCacheSeconds(3600);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
return new ApplicationLocaleResolver();
}
}
还有我的自定义LocaleResolver:
@Configuration
@Import(UserService.class)
public class ApplicationLocaleResolver extends CookieLocaleResolver {
@Autowired
private UserService userService;
@Override
public Locale resolveLocale(HttpServletRequest request) {
User activeUser = userService.getActiveUser();
if (activeUser != null) {
return Locale.forLanguageTag(activeUser.getUserLanguage());
}
return super.resolveLocale(request);
}
}
我在ApplicationLocaleResolver中的逻辑正常工作-方法resolveLocale()返回正确的语言“ FR”作为用户偏爱的语言,但最终我所有的消息都使用“ EN”语言。
我也尝试过使用SessionLocaleResolver及其方法setDefaultLocale(Locale.FR)),但它也不起作用。我总是得到“ EN”。