我根据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)
始终返回英文。我该怎么解决这个问题?我甚至不知道从哪里开始调试。
1条答案
按热度按时间n1bvdmb61#
要修复此问题,可以从与当前线程关联的LocaleContext检索当前区域设置。例如,在控制器中,如下所示:
字符串
然后可以将locale传递给messageSource:
型