11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpringBoot メッセージ国際化

Last updated at Posted at 2015-09-21

SpringBootでメッセージ国際化をしてみます
何をするかというと、HTML内に表示されるメッセージを一つのファイルにまとめておきます。
あとからの修正が楽になるなどのメリットがありサイトを多言語展開する場合などに役立ちます
プロパティファイルに指定したメッセージは起動時に読み込まれ、インスタンス内にキャッシュされます
キャッシュされる方を使いたい場合には、ResourceBundleMessageSourceを使います。
今回は
リソースが変更されたらメッセージも変更される様にしたいのでReloadableResourceBundleMessageSourceをつかいます。

この機能はSpringの機能を利用する事になります。
必要なライブラリなどはなく、
1.ビーン登録
2.メッセージ用のpropertyファイルの配置
3.MessageSourceの継承

のみになります。

1.ビーン登録
WebMvcConfigurerAdapterを継承したクラス内で記述します

hymeleafConfig.java
@Configuration
public class ThymeleafConfig extends WebMvcConfigurerAdapter {
        @Value("${lang.default.lang}")
		private String defLang;
        @Value("${lang.default.locale}")
		private String defLocale;

        @Override 
        public void addInterceptors(InterceptorRegistry registry) { 
                registry.addInterceptor(localeChangeInterceptor()); 
        } 

        @Bean 
        public LocaleChangeInterceptor localeChangeInterceptor() { 
                LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
                localeChangeInterceptor.setParamName("language"); 
                return localeChangeInterceptor; 
        } 

        @Bean 
        public CookieLocaleResolver localeResolver() { 
                CookieLocaleResolver localeResolver = new CookieLocaleResolver(); 
                Locale defaultLocale = new Locale(defLang + "_" + defLocale); 
                localeResolver.setDefaultLocale(defaultLocale); 
                return localeResolver; 
        } 
        
        @Bean 
        public ReloadableResourceBundleMessageSource messageSource() { 
        	ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
                messageSource.setBasename("classpath:messages/messages"); 
                return messageSource; 
        }
}

2.メッセージ用のpropertyファイルの配置
HkZjtiskt-iv01pygPmylDR2gCusLMnXSkuW74YZIqU.png

3.MessageSourceの継承

MessageResolver.java
	public class MessageResolver implements MessageSource{
		
	@Autowired
	private MessageSource messageSource;
	
	public void setMessageSource(MessageSource messageSource) {
	    this.messageSource = messageSource;
	}
	
	
	@Override
	public String getMessage(String code, Object[] args,String defaultMessage, Locale locale) {
		return this.getMessage(code,args,"",locale);
	}
	
	@Override
	public String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException {
		// TODO Auto-generated method stub
		String sMess = messageSource.getMessage(code,args,locale);
		return sMess;
	}
	
	@Override
	public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException {
		// TODO Auto-generated method stub
		String sMess = messageSource.getMessage(resolvable,locale);
		return sMess;
	}
	}
11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?