LoginSignup
11
13

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