복붙노트

[SPRING] Spring 4 with thymeleaf 국제화는 자원 특성 파일에서 메시지를 식별하지 못함

SPRING

Spring 4 with thymeleaf 국제화는 자원 특성 파일에서 메시지를 식별하지 못함

국제화를 지원하기 위해 Spring 4 + thymeleaf로 webapp에서 작업하기. 나는 basename의 위치 파일과 구성을 변경하고 여전히받는 많은 방법을 시도해 본다 ?? label.greeting _ ** ?? 템플릿 결과에. 내 코드는 다음과 같습니다.

@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());
    }
}

properties 파일은 src \ main \ webapp \ WEB-INF \ messages_en.properties 및 src \ main \ webapp \ WEB-INF \ messages_ch.properties에있는 WEB-INF에 있습니다.

해결법

  1. ==============================

    1.ViewResolver를 Spring에만 등록하고 SpringTemplateEngine과 ServletContextTemplateResolver 인 두 개의 다른 구성 요소를 등록하지 않아서 문제를 재현 할 수 있었다고 생각합니다.

    ViewResolver를 Spring에만 등록하고 SpringTemplateEngine과 ServletContextTemplateResolver 인 두 개의 다른 구성 요소를 등록하지 않아서 문제를 재현 할 수 있었다고 생각합니다.

    그래서 스프링 컨테이너에 2 개의 다른 구성 요소를 등록하기 위해 구성을 약간 분할해야한다고 생각합니다. 코드는 다음과 같습니다.

    @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;
    }
    
  2. from https://stackoverflow.com/questions/25159685/spring-4-with-thymeleaf-internationalization-not-identify-message-from-resource by cc-by-sa and MIT license