ThymeleafでSpringのMessageSourceを使ってテキストをローカライズする

ThymeleafはSpringとうまく結合されているので、Spring管理下にあるMessageSourceは特に意識せずともテンプレートで使用することができます。

Spring側で必要なのは、MessageSourceをBeanとして登録してあげるだけ。

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("WEB-INF/messages/messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}

Thymeleafのテンプレートでは、#{messagekey} という形式でメッセージリソースを参照できます。

<span th:text="#{messagekey}"></span>

では、メッセージリソースが引数を取る場合はどのように記載したらよいのでしょうか?

答えは「括弧で引数を指定する」です。

<span th:text="#{messagekey(arg)}"></span>

複数の引数を取る場合はカンマでつなげばOKです。

<span th:text="#{messagekey(arg1, arg2, arg3)}"></span>

引数に変数を与えることもできます。括弧が多くなるので大変ですが。

<span th:text="#{messagekey(${model.value}, #{anothermessage(#{argmessage})})}"></span>