質問: お世話になります。 spring boot のメッセージソースを利用するところではまっています。 以下のサイトを参考にサンプルを作りましたが、正しく動きません。 messages_ja.properties に 「msg1=メッセージ」のように設定して、コントローラクラスから、「msg.getMessage("msg1", null, Locale.JAPAN);」(msgはメッセージソースのインスタンス)した場合、以下のような例外が発生してしまいます。 org.springframework.context.NoSuchMessageException: No message found under code 'msg1' for locale 'ja_JP'. messages_ja.properties を messages.properties に変更すると正しく取得できます。 他に、コントローラでロケールを受け取り、標準出力すると「ja」と表示されることを確認しています。 原因と思われるものは何でしょうか? よろしくお願い致します。 追記: ・application.properties の内容は「spring.messages.basename=messages」の一行だけです。 ・Spring boot のバージョンは v2.0.3.RELEASE です。 若干自己解決: 「messages_ja.properties」のファイルと同じ場所に、空の「messages.properties」ファイルを置いたら、メッセージが取得できるようになりました。不思議。
回答: Locale.JAPANで対応するプロパティは messages_ja_JP.properties となります。 Locale.JAPANESE は messages_ja.properties です。 なので、今のファイル名のまま使うためにはJAPANESE の方を使ってください。 また、_ja を省略するとデフォルトとして使われるため、取得可能になったはずです。 追記 springでAutoConfigureにてBeanを注入した場合、デフォルトのプロパティがないとだめなようです。 messages.propertiesがない場合はDelegatingMessageSource,message.properiesがある場合はResourceBundleMessageSourceがBeanとして注入されます。 もしmessages.propertiesを使いたくない場合は自分で注入するためのBeanを設定したほうが良さそうです。