Spring Boot(1.4.1)和Thymeleaf(3)MessageSource单引号

时间:2016-10-25 16:02:38

标签: spring spring-boot properties internationalization thymeleaf

我对Spring Boot(1.4.1)和Thymeleaf(3)中的MessageSource消息有疑问。

文件app.properties

app.quotes=Francesco's title
app.quotes2=Francesco''s title

在打印消息时的page.html中

<h2 th:text="#{app.quotes}"></h2>
<h2 th:utext="#{app.quotes}"></h2>
<h2 th:text="#{app.quotes2}"></h2>
<h2 th:utext="#{app.quotes2}"></h2>

我完全得到了(th:text或th:utext没有任何区别)

  • Francesco的头衔
  • Francesco的头衔
  • Francesco&#39;标题
  • Francesco&#39;标题

在我的控制器中

private final Logger log = LoggerFactory.getLogger(this.getClass());    

@Autowired
private MessageSource messages;

@RequestMapping(value="/page", method = RequestMethod.GET)
public String page() {

    String text = messages.getMessage("app.quotes", null, LocaleContextHolder.getLocale());
    String text2 = messages.getMessage("app.quotes2", null, LocaleContextHolder.getLocale());

    log.debug("text = " + text);
    log.debug("text2 = " + text2);

    // Output
    return "page";
}

我记录的文字是

  • text = Francescos title
  • text2 = Francesco's title

这是可以预测的,因为属性消息中的单引号必须使用双引号进行转义(&#34; Francesco&#39;标题&#34;应该是正确的文本)。 我怎样才能让Thymeleaf打印出像MessageSource那样转义双单引号的消息,或者让MessageSource以Thymeleaf的形式返回纯文本? 我不想根据调用者使用不同的键/值。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Spring不会解析消息,只要它不包含参数(app.quote=John's message),如果它有一个(app.quote={0}'s message

就会这样做

您可以使用setAlwaysUseMessageFormat覆盖此行为:

@Bean
MessageSource defaultMessageSource(){
 org.springframework.context.support.ReloadableResourceBundleMessageSource source = new org.springframework.context.support.ReloadableResourceBundleMessageSource();
source.setAlwaysUseMessageFormat(true);
return source;
}

另请查看resolveCodeWithoutArguments