【Java・SpringBoot・Thymeleaf】ブラウザ言語設定でエラーメッセージの言語を変更(SpringBootアプリケーション実践編8)


おさらい

ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます🌟
前回はユーザー登録画面で、まずは必須入力チェックを行い、次に中身のチェックを行うという、エラーメッセージを順番に実行する実装をしました〜
今回はWebブラウザの言語設定に応じて、メッセージプロパティファイルを切り替え、表示メッセージを英語に切り替えられるようにします

前回の記事🌟
【Java・SpringBoot・Thymeleaf】バリデーションチェックの順番を設定(SpringBootアプリケーション実践編7)

構成は以下のようになっています

Project Root
└─src
    └─ main
        └─ java  
            └─ com.example.demo
                └─ login
                    └─ controller                ...コントローラクラス用パッケージ
                └─ domain                        ...ビジネスロジック用パッケージ
                    └─ model                     ...Modelクラス用パッケージ
                        └─ LoginForm.java
                        └─ SignupForm.java
                        └─ ValidGroup1.java
                        └─ ValidGroup2.java
                        └─ ValidGroup3.java
                        └─ GroupOrder.java
        └─ resouces
            └─ static                            ...css,js用フォルダ
            └─ templates
                └─ login
                    └─ login.html
                    └─ signup.html
            └─ messages.properties
            └─ messages_en.properties

英語用のメッセージファイルを作成

  • messages_en.propertiesを作成します
src/main/resources/messages_en.properties
# =======================================
# データバインドエラーメッセージ
# =======================================

#typeMismatch.[ModelAttribute名].[プロパティ名]
typeMismatch.signupForm.age=Please enter a numeric value
typeMismatch.signupForm.birthday=Please enter in yyyy / MM / dd format

# =================================================
# バリデーションエラーメッセージ
# =================================================

#ユーザーID
signupForm.userId=UserID
NotBlank.signupForm.userId={0} is required 
Email.signupForm.userId=Please enter {0} in e-mail address format

#パスワード
signupForm.password=Password
NotBlank.signupForm.password={0} is required 
Length.signupForm.password=Please input {0} with more than {2} digits, {1} digits or fewer digits
Pattern.signupForm.password=Please enter {0} with half-width alphanumeric characters

#ユーザー名
signupForm.userName=UserName
NotBlank.signupForm.userName={0} is required 

#誕生日
signupForm.birthday=Birthday
NotNull.signupForm.birthday={0} is required 

#年齢
signupForm.age=Age
Min.signupForm.age={0} must be at least {1}
Max.signupForm.age={0} must be less than {1}

#結婚
AssertFalse.signupForm.marriage=You can only register if false

ブラウザの言語設定を変更

  • ブラウザの言語設定で英語の優先順位を一番にする
  • Googleの設定から、
  • 詳細設定>言語>英語(アメリカ合衆国)
    • その他の操作>トップに移動

ユーザー登録画面を確認!

  • ブラウザを再起動
  • http://localhost:8080/signup
  • ユーザー登録画面で何も入力せずにユーザー登録ボタンをクリック
  • エラーメッセージが英語になりました〜〜^^
  • これでブラウザの言語設定に応じて、メッセージ用プロパティファイルが切り替えられましたo(^_^)o

バインド・バリデーションのまとめ

  • 🌟データバインド
    • @ModelAttribute:コントローラークラスと画面の間でフォームクラスを受け取る
    • th:object属性やth:field属性:画面とフォームクラスのマッピングを行う
    • @DateTimeFormat:Date型フィールドへのバインドを行う
    • エラーメッセージはsrc/main/resources/messages.propertiesに設定
  • 🌟バリデーション
    • バリデーションをするには、フォームクラスに@NotBlankなどを付け、
      コントローラークラスに@Validatedを付ける
    • @GroupSequence:バリデーションの順番を制御する
    • 言語毎のメッセージプロパティファイルを用意すれば、多言語対応可能!