SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

メッセージをプロパティファイルで外出しにする(多言語対応もやり方は同じ)STS/Spring Boot/thymeleaf 

今回は、メッセージの外出し(=プロパティファイルで管理)です。

多言語対応も同じことです。

STS3(3.9.6)+SpringBoot2.0+Tymeleaf3.0迄動作確認しています。

f:id:arakan_no_boku:20190222012501j:plain

 

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>

 

実行する

 

どちらのやり方でも、このように表示されます。

f:id:arakan_no_boku:20170314233150j:plain

 この2種類のやり方ができれば、ほぼほぼ問題ないですね。 

 


 STS+Spring Boot+thymeleaf 関連記事 

入力画面に関連する記事

画像をSUBMITボタン代わりに使う

ラジオボタンとラジオボタングループを使う 

ラジオボタンとラジオボタングループを使う 

チェックボックスを使う。 

HTMLのタグの閉じ忘れで例外が発生する!

プルダウンリストとマルチセレクトボックスを使う。

今度はテキストエリアで複数行入力する。 

テキストボックスの入力と基本的なチェックを使う。

 

参照画面・画面遷移に関連する記事

参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。 

参照画面:条件に一致した時のみHTML要素を出力する。

セッションを使って画面間で情報を受け渡す 

画面遷移:GET時のリクエストパラメータを受け取る 

日本語しか使わなくても、i18N対応はする意味がある。

 

入力チェックに関連する記事

入力チェック:未入力時に空文字が渡される仕様を回避する。 

入力チェック:@Patternと正規表現で独自チェックする。

入力チェック:アノテーション定義を自分で作る。(再利用版)

入力チェック用アノテーション定義を自分で作る。(独自実装版)

入力チェック:複数項目の相関チェックアノテーションの作り方

 

データアクセス・その他に関連する記事

データアクセス:Jprepositoryを使って簡単にCRUDする。 

データアクセス:ネイティブなSQL文を実行する 

クラスパス内の静的ファイルにアクセスする 

SpringBootだとログの書き出しも楽ちんです。 

SpringBootプロジェクトでJUNIT4を使った単体テストをする。