我是使用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
我的项目结构:
我已经尝试在WEB-INF中创建一个名为messages的文件夹,但显然我没有得到正确的答案。有什么想法吗?
编辑:使用与消息相关的代码更新了问题。
答案 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)
Basename 表示包含不同翻译的 .properties
文件的前缀。
假设您需要两种语言:英语(en
)和波兰语(pl
)。
您需要做的就是将Basename
设置为messages
,如下所示:
messageSource.setBasename("classpath:messages");
然后在messages_en
中放置messages_pl
和classpath
两个文件(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的回答。