具有百日咳国际化的Spring

具有百日咳国际化的Spring

本文介绍了具有百日咳国际化的Spring 4无法识别来自资源属性文件的消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用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无法识别来自资源属性文件的消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 15:04