问题描述
使用Spring 4 + thymeleaf处理我的webapp以支持国际化。我尝试了很多方法来更改位置文件和basename的配置并仍然接收?? label.greeting _ ** ??在模板结果。以下是我的代码
Working on my webapp with Spring 4 + thymeleaf to support internationalization. I try a lot ways change position files and configurations of basename and still receiving ??label.greeting_**?? on template result. Below are my code
@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_en.properties和src\main\webapp\WEB-INF \messages_ch.properties
properties files are under WEB-INF which paths are src\main\webapp\WEB-INF\messages_en.properties and src\main\webapp\WEB-INF\messages_ch.properties
推荐答案
我认为我只能通过向Spring注册 ViewResolver
来重现您的问题而不是<$ c $的其他2个组件c> SpringTemplateEngine 和 ServletContextTemplateResolver
。
I think I was able to reproduce your problem by only registering the ViewResolver
to Spring and not the 2 other components that are SpringTemplateEngine
and ServletContextTemplateResolver
.
所以我认为你应该尝试拆分你的稍微配置一下,将这2个其他组件注册到弹簧容器中。这是代码:
So I think you should try to split your configuration a little to register those 2 other components to the spring container. Here's the code :
@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;
}
这篇关于具有百日咳国际化的Spring 4无法识别来自资源属性文件的消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!