2015-11-20 5 views
0

Я пытаюсь просто добавить номер версии приложения в фрагмент Thymeleaf. Я использую Spring Boot 1.2.5. Если у меня есть файл с именем /resources/messages.properties определен так:Интернационализация Spring Boot (messages.properties)

application.version=1.0.0 

И у меня есть вид Thymeleaf со следующим фрагментом:

Application Version: <span th:text="#{application.version}"> 

Это что-то вроде отображающее ?? application.version_en_US ?? вместо 1.0.0. (У меня также есть файлы с именем messages_en.properties и messages_en_US.properties в пути к классу с тем же содержимым тоже.) Я действительно не уверен, как решить эту проблему ... Я потратил часы на что-то, что кажется невероятным тривиальна ...

Application.java

@SpringBootApplication 
@ComponentScan(basePackages = {"org.application"}) 
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, ThymeleafAutoConfiguration.class}) 
@PropertySources(value = {@PropertySource("classpath:website.properties")}) 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

} 

WebConfig.java

@EnableWebMvc 
@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

@Bean 
public SpelAwareProxyProjectionFactory projectionFactory() { 
    return new SpelAwareProxyProjectionFactory(); 
} 

@Bean 
public SessionHandler sessionHandler() { 
    return new SessionHandler(); 
} 

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/web/auth/login").setViewName("auth/login"); 
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
} 

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

@Bean 
public LocaleChangeInterceptor localeChangeInterceptor() { 
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
    localeChangeInterceptor.setParamName("language"); 
    return localeChangeInterceptor; 
} 

@Bean 
public CookieLocaleResolver localeResolver() { 
    CookieLocaleResolver localeResolver = new CookieLocaleResolver(); 
    localeResolver.setDefaultLocale(Locale.ENGLISH); 
    return localeResolver; 
} 

@Bean 
public ResourceBundleMessageSource messageSource() { 
    return new ResourceBundleMessageSource(); 
} 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    // Locale change interceptor 
    registry.addInterceptor(localeChangeInterceptor()); 

    // Utility interceptor which helps with the "active" link styles in the navigation. --mm 
    registry.addInterceptor(new BaseInterceptor()); 

    // Expire session after a period of time 
    registry.addInterceptor(sessionHandler()); 
} 
} 

ThymeleafConfig.java

@Configuration 
public class ThymeleafConfig { 

@Bean 
public ServletContextTemplateResolver templateResolver() { 
    ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); 
    resolver.setPrefix("/WEB-INF/views/"); 
    resolver.setSuffix(".html"); 

    // must use Legacy HTML5 as the template, otherwise Handlebars will not parse! 
    // 
    // this should hopefully be fixed in Thymeleaf 3.0 
    resolver.setTemplateMode("LEGACYHTML5"); 
    resolver.setCacheable(false); 
    return resolver; 
} 

public SpringTemplateEngine templateEngine() { 
    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.setTemplateResolver(templateResolver()); 

    // Add Spring security 
    Set<IDialect> dialects = new HashSet<IDialect>(); 
    engine.setAdditionalDialects(dialects); 
    engine.addDialect(new SpringSecurityDialect()); 
    return engine; 
} 

@Bean 
public ViewResolver viewResolver() { 
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
    viewResolver.setTemplateEngine(templateEngine()); 
    viewResolver.setOrder(1); 
    viewResolver.setViewNames(new String[]{"*"}); 
    viewResolver.setCache(false); 
    return viewResolver; 
} 
} 

Купит виртуальный тур выстрелов кем бы решить эту проблему ...

ответ

1

я думаю, вы всегда можете добавить это в методе templateEngine:

engine.addMessageResolver(new StandardMessageResolver()); 
or engine.setMessageResolver(new StandardMessageResolver()); 

Кроме того, с точки зрения дизайна, я предлагаю вам попробовать использовать автоконфигурацию для thymeleaf (удаление исключения) и многие другие вещи, которые загружают весну автоматически для вас.

+0

Я отказался от этой домашней конфигурации и просто разместил всю конфигурацию Thymeleaf в application.properties. i18n теперь работает как чемпион. –

Смежные вопросы