Spring Boot
ではapplication.properties
に設定を書けばMessageSource
クラスから多言語対応されたメッセージが返ってくるらしい。
...が、どうもバリデーションエラーメッセージは多言語化してくれなかった。
簡単にやり方をメモっておく。
動作環境
- Java 8
- Spring Boot 1.3.2
実際に書いたコード
設定ファイルの用意
ほぼ初期設定のまま。言語ファイルはi18n
の下に置きたかったのでそこだけ変更。
src/main/resources/config/applicaton.properties
# INTERNATIONALIZATION
spring.messages.basename=i18n/messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8
言語ファイルの用意
設定ファイルに記載した場所と名前で用意する。
日本語を記載するファイルを作るのでmessages_ja.properties
というファイル名にする。
src/main/resources/i18n/messages_ja.properties
org.hibernate.validator.constraints.NotEmpty.message=入力してください
設定クラスの用意
messageSource
クラスをバリデータに設定するクラスを用意する。
@Configuration
を見て自動的に読み込んでくれるので作成するだけで良い。
src/main/java/com/example/config/MessageConfig.java
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class MessageConfig extends WebMvcConfigurerAdapter
{
@Autowired
private MessageSource messageSource;
@Bean
public LocalValidatorFactoryBean validator()
{
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource);
return localValidatorFactoryBean;
}
@Override
public Validator getValidator()
{
return validator();
}
}