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>