java MessageSource未使用与Thymeleaf相同的区域设置

mspsb9vt  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(111)

我根据session属性设置用户区域设置。

@SpringBootApplication
@ServletComponentScan
@Configuration
public class Webapp {

    // Thymeleaf
    @Bean
    public LayoutDialect layoutDialect() {
    return new LayoutDialect();
    }

    @Bean
    public LocaleResolver localeResolver() {
    SessionLocaleResolver localeResolver = new SessionLocaleResolver();
    localeResolver.setLocaleAttributeName("user_locale"); // Not strictly needed
    localeResolver.setDefaultLocale(Locale.ENGLISH);
    return localeResolver;
    }

    @Bean
    public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:lang/messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
    }

    public static void main(String[] args) {
        SpringApplication.run(Webapp.class, args);
    }
}

字符串
当我使用Thymeleaf模板时,所有带有#{..}的内容都会通过messages_XX.properties根据正确的语言XX(在session属性中指定)进行翻译。但是,messageSource.getMessage(text, null, null)始终返回英文。我该怎么解决这个问题?我甚至不知道从哪里开始调试。

n1bvdmb6

n1bvdmb61#

要修复此问题,可以从与当前线程关联的LocaleContext检索当前区域设置。例如,在控制器中,如下所示:

@GetMapping("/customers")
    public String showUserList(Model model) {
        Locale currentLocale = LocaleContextHolder.getLocale();
        log.info("Current locale: {}", currentLocale);
        model.addAttribute("customers", customerService.getCustomers());
        return "customers";
    }

字符串
然后可以将locale传递给messageSource:

messageSource.getMessage(text, null, currentLocale)

相关问题