Spring,Thymeleaf和本地化字符串

时间:2013-12-11 15:33:50

标签: spring-mvc netbeans thymeleaf

我是使用Spring和Thymeleaf的新手,我无法弄清楚我的本地化.properties文件的位置。我有这个豆子:

@Bean
public MessageSource messageSource() {

    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("classpath:messages/messages", "classpath:messages/validation");
    // if true, the key of the message will be displayed if the key is not
    // found, instead of throwing a NoSuchMessageException
    messageSource.setUseCodeAsDefaultMessage(false);
    messageSource.setDefaultEncoding("UTF-8");
    // # -1 : never reload, 0 always reload
    messageSource.setCacheSeconds(0);

    return messageSource;
}

在login.html内部:

    <p th:text="#{messages.hello}">Welcome to our site!</p>

内部messages_en.properties

    messages.hello=Apparently messages work

我的项目结构:

structure

我已经尝试在WEB-INF中创建一个名为messages的文件夹,但显然我没有得到正确的答案。有什么想法吗?

编辑:使用与消息相关的代码更新了问题。

3 个答案:

答案 0 :(得分:6)

我知道这个人已经老了。但是我已经找到了解决方案,并得到了这篇文章 我自己找到了一个解决方案,其他人可能会遇到同样的问题。

所以这就是我解决它的方法:

MessageSource注入SpringTemplateEngineBean

@Bean
public SpringTemplateEngine templateEngine(MessageSource messageSource, ServletContextTemplateResolver templateResolver) { 
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setTemplateResolver(templateResolver);
    engine.setMessageSource(messageSource);
    return engine;
}

现在,Thymeleaf知道你的MessageSource并评估你的表情。

答案 1 :(得分:3)

此XML中的

Basename 表示包含不同翻译的 .properties 文件的前缀

假设您需要两种语言:英语(en)和波兰语(pl)。 您需要做的就是将Basename设置为messages,如下所示:

messageSource.setBasename("classpath:messages");

然后在messages_en中放置messages_plclasspath两个文件(WEB-INF就足够了,但请考虑使用src/main/resources目录)。

这是一个基本的例子,应该很容易适应你的情况。

答案 2 :(得分:3)

你应该将Thymeleaf的SpringTemplateEngine暴露为bean,让Spring将MessageSource注入其中:

@Bean
public SpringTemplateEngine templateEngine() {
    final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    return templateEngine;
}

有关MessageSource配置的信息,请参阅MichałRybak的回答。