今回は、メッセージの外出し(=プロパティファイルで管理)です。
多言語対応も同じことです。
STS3(3.9.6)+SpringBoot2.0+Tymeleaf3.0迄動作確認しています。
Springの多言語化とは違うので要注意
Springの多言語化(i18n)でググると、applicationContext.xmlで<bean>タグを使ったやり方がたくさんヒットします。
ですが、それはSpring Bootのやり方とは違うので、気をつけてください。
Spring Bootで、多言語化を使うための設定
src/main/resources/application.propertiesに以下の様に書きます。
spring.messages.basename=messages
spring.messages.cache-duration=-1
spring.messages.encoding=UTF-8
2018/3/11追記
>spring.messages.cache-secondsが廃止予定になったため、上記を更新しています。
>古いバージョンのSTS・SpringBootの場合は 「spring.messages.cache-duration」を「spring.messages.cache-seconds」にする必要があるかもしれません。
プロパティファイルを用意する方法
src/main/resources/messages.properties というファイルを用意します。
ファイル名がとても重要です。
一文字違っていても、例外が発生して画面表示ができません。
一度、つまづくと結構苦しみます。
多言語化する時には、messagesの後ろにロケールを示す文字、例えば英語(en)なら、messages_en.properties のようにファイルを用意することになります。
この messages.properties に以下のように書いてみます。
hello.welcome=こんにちは、世界の皆様へ
HTML+tymeleafで直接参照する
これをthymeleafから直接参照する時には、こう書きます。
<h1 th:text="#{hello.welcome}">XXXXX</h1>
JAVA側でプロパティファイルから取得する方法
JAVA側でプロパティファイルから取得してメッセージにセットする方法です。
@Autowired
protected MessageSource messageSource;@RequestMapping("/hello2")
public String hello(Model model) {model.addAttribute("titleMsg", messageSource.getMessage("hello.welcome", null, Locale.JAPAN));
return "hello2";
}
MessageSourceクラスを、@Autowiredをつけて宣言し、messageSource.getMessage("hello.welcome", null, Locale.JAPAN));で、プロパティファイルから読みこむわけです。
あとは、titleMsgで参照できるように、addAttributeしてます。
HTML+tymeleafで参照する
受け側のHTMLではこう書くと表示できます。
<h1 th:text="${titleMsg}">XXXXX</h1>
実行する
どちらのやり方でも、このように表示されます。
この2種類のやり方ができれば、ほぼほぼ問題ないですね。
STS+Spring Boot+thymeleaf 関連記事
入力画面に関連する記事
参照画面・画面遷移に関連する記事
参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。
入力チェックに関連する記事
入力チェック:@Patternと正規表現で独自チェックする。
入力チェック用アノテーション定義を自分で作る。(独自実装版)
データアクセス・その他に関連する記事