Java Spring4中的thymeleaf国际化无法识别来自资源属性文件的消息
使用Spring 4+thymeleaf开发我的webapp以支持国际化。我尝试了很多方法来更改basename的位置文件和配置,但仍然收到??label.greeting_**??在模板结果上。下面是我的代码Java Spring4中的thymeleaf国际化无法识别来自资源属性文件的消息,java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,使用Spring 4+thymeleaf开发我的webapp以支持国际化。我尝试了很多方法来更改basename的位置文件和配置,但仍然收到??label.greeting_**??在模板结果上。下面是我的代码 @Configuration @EnableSpringConfigured @EnableWebMvc @EnableScheduling @ComponentScan(basePackages = {"com.categorybags.web.controller", "com.ca
@Configuration
@EnableSpringConfigured
@EnableWebMvc
@EnableScheduling
@ComponentScan(basePackages = {"com.categorybags.web.controller", "com.categorybags.persistence.services"})
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/res/**").addResourceLocations("/res/");
}
@Bean
public ViewResolver viewResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setCacheable(false);
templateResolver.setPrefix("/WEB-INF/jsp/");
templateResolver.setSuffix(".jsp");
templateResolver.setTemplateMode("HTML5");
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setOrder(1);
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(new Locale("en"));
return localeResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("WEB-INF/messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
属性文件位于WEB-INF下,路径是src\main\webapp\WEB-INF\messages\u en.properties和src\main\webapp\WEB-INF\messages\u ch.properties我想我能够重现您的问题,只需将
视图解析器
注册到Spring,而不是SpringTemplateEngine
和ServletContextTemplateResolver
因此,我认为您应该尝试稍微拆分配置,以便将这两个其他组件注册到spring容器中。代码如下:
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setCacheable(false);
templateResolver.setPrefix("/WEB-INF/jsp/");
templateResolver.setSuffix(".jsp");
templateResolver.setTemplateMode("HTML5");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setOrder(1);
return viewResolver;
}
显示的标签是什么:?标签。问候语?您是否放置了“”?它应该是??标签。问候语??或??标签。问候语??或LocaleResolver检测到的任何区域设置。此外,在配置LocaleResolver时,可能只需要尝试使用Locale.ENGLISH实例,这比创建新的Locale实例要好。@m4rtin它们是??label.greeting\u en??和??label.greeting_ch??,取决于LocalResolver检测到的语言。并切换到Locale.ENGLISH不会对结果进行任何更改。非常感谢!它解决了我的问题,是因为缺少Spring需要的templateResolver或templateEngine吗?是的,这并不明显,但我认为在某些情况下,Spring和Thymeleaf需要这些依赖项来解决国际化消息(以及其他问题)。对,所有人都指责他们的文档:)