アラカン"BOKU"のITな日常

あれこれ興味をもって考えたことを書いてます

日本語しか使わなくても、i18N対応はする意味がある。STS 3.8.3(Spring Boot 1.5.1)+thymeleaf 

日本語しか使う予定はない!と言い切れる場合でも、多言語対応できるようにはしときましょう。

 

その場合、正確には多言語対応ではなく、メッセージの外出し(=プロパティファイルで管理)です。

 

メッセージを外出しするだけで、十分メリットがあります。

 

メッセージを1ファイルにまとめて管理できるのは、プログラムソースの数が増えるほど有り難みが増してきます。プロパティファイルを用意するだけで多言語化できるより、そちらが大きいです。

 

Springの多言語化(i18n)でググると、applicationContext.xmlで<bean>タグを使ったやり方がたくさんヒットしますが、それはSpring Bootのやり方とは違うので、気をつけてください。

 

Spring Bootで、多言語化を使うための設定は、src/main/resources/application.propertiesに以下の様に書きます。

spring.messages.basename=messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8 

 

後は src/main/resources/messages.properties というファイルを用意します。

 

ファイル名がとても重要です。一文字違っていても、例外が発生して画面表示ができません。一度、つまづくと結構苦しみます。慎重に行きましょう。

 

ちなみに、多言語化する時には、messagesの後ろにロケールを示す文字、例えば英語(en)なら、messages_en.properties のようにファイルを用意することになります。

 

この messages.properties に以下のように書いてみます。

hello.welcome=こんにちは、世界の皆様へ

 

これをthymeleafから直接参照する時には、こう書きます。

<h1 th:text="#{hello.welcome}">XXXXX</h1>

 

もう一つのやり方が、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ではこう書くと表示できます。

<h1 th:text="${titleMsg}">XXXXX</h1>

 

どちらのやり方をしても、実行すると、このように表示されます。

f:id:arakan_no_boku:20170314233150j:plain

 

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

 

 


 STS  3.8.3(Spring Boot 1.5.1)+thymeleaf 関連記事

 

入力画面に関連する記事

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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