Spring Boot + MVC:根据用户偏好设置MessageSource的用户区域设置

时间:2019-12-02 11:34:41

标签: java spring-boot spring-mvc

我试图强迫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”。

0 个答案:

没有答案