我正在使用Spring Boot +百里香模板引擎。
我使用标准的语言环境cookie来设置语言环境,但是我还需要将用户语言环境保存在数据库中(实际上我在数据库中保存了带有语言标签的字符串)。
然后我向控制器添加了@ControllerAdvice,以检查是否已登录用户并设置区域设置。它有效,但不适用于Thymeleaf th:text标签...
@ModelAttribute
public void addUserRef(Model model, HttpServletRequest request){
User user = authFacade.getAuthenticatedUser();
if(user != null){
LocaleContextHolder.setLocale(user.getLocale());
}
}
如果我没有写类似th:text="#{message_text}"
的语言环境,则它只会使用cookie的语言环境值。
如何配置Thymeleaf以根据用户区域设置使用区域设置?
我以这种方式配置Thymleaf
@Bean
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
// templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setMessageSource(messageSource);
templateEngine.addDialect(springSecurityDialect());
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setOrder(1);
return viewResolver;
}