2017-01-15 37 views
0

我有Spring web项目。我想用ThymLeaf实现国际化。 我在资源下添加了消息文件。但我总是得到像??page.title_en_US??这样的页面上的错误,或者如果在QueryString中传递lang=en,那么它看起来像??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 bean定义并直接在资源文件夹下移动文件,是否有任何不同? – SAP

+0

我的问题已解决,我已找到解决方案。 我已经错过了'templateResolver'和'templateEngine'方法的'@ Bean'注释。 – Muhammad

回答

0

我已经解决了我的问题。在templateResolvertemplateEngine上错过了@Bean注释。这些方法也应该是public