2017-01-15 8 views
0

У меня есть веб-проект Spring. Я хочу реализовать интернационализацию ThymLeaf. Я добавил файл с данными в ресурсы. но я всегда получаю ошибку на странице, например, ??page.title_en_US?? или, если передать lang=en в QueryString, тогда он выглядит как ??page.title_en??. , когда это получать сообщения в контроллер с помощью MessageResource его возвращающимся все сообщения, которые определены в файле свойств: messageSource.getMessage("page.title",null,locale) Моя структура файл ресурсов: ресурсыИнтернационализация Spring Thymleaf не получает сообщений из ресурсов

         i18n/messages.properties 
             i18n/messages_en.properties 

Вот моя конфигурация Bean:

/** 
* This method is used for configure thymeleaf view resolver. 
* This view resolver have second priority. 
* */ 
private ViewResolver thymeleafViewResolver() { 
    ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver(); 
    thymeleafViewResolver.setViewClass(ThymeleafView.class); 
    thymeleafViewResolver.setTemplateEngine(templateEngine()); 

    return thymeleafViewResolver; 
} 


/** 
* This method is used to configure template engine for thymeleaf. 
* */ 
private SpringTemplateEngine templateEngine() { 
    SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(templateResolver()); 

    return templateEngine; 
} 

/** 
* This method is used for configure the thymeleaf view configuration. 
* */ 
private SpringResourceTemplateResolver templateResolver() { 
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    //ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); 
    //ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver(); 
    resolver.setApplicationContext(applicationContext); 
    resolver.setPrefix("/WEB-INF/views/templates/"); 
    resolver.setSuffix(".html"); 
    resolver.setTemplateMode(TemplateMode.HTML); 

    resolver.setCharacterEncoding("UTF8"); 

    resolver.setOrder(2); 
    return resolver; 
} 


@Override 
public void configureDefaultServletHandling(
     DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
} 

@Bean 
public LocaleResolver localeResolver() { 
    SessionLocaleResolver slr = new SessionLocaleResolver(); 
    slr.setDefaultLocale(Locale.US); 
    return slr; 
} 


@Bean 
public MessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasename("i18n/messages"); 
    messageSource.setDefaultEncoding("UTF-8"); 
    // messageSource.setCacheSeconds(3600); //refresh cache once per hour 
    return messageSource; 
} 
@Bean 
public LocaleChangeInterceptor localeChangeInterceptor() { 
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 
    lci.setParamName("lang"); 
    return lci; 
} 
@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(localeChangeInterceptor()); 
} 
+0

Spring автоматически извлекает файлы свойств сообщения непосредственно в папку ресурсов. Существуют ли какие-либо отличия, если вы удаляете определения addResourceHandlers и messageSource и перемещаете файлы непосредственно в папку ресурсов? – SAP

+0

Моя проблема решена. Я нашел решение. Я пропустил аннотацию '@ Bean' на методах' templateResolver' и 'templateEngine'. – Muhammad

ответ

0

Я решил свою проблему. @Bean аннотация аннулировалась на templateResolver и templateEngine. и эти методы должны быть также public.