SpringではMessageSourceも用意されており、設定ファイルに設定すれば使用できます。
しかし、そのままでは少し使いにくいので使いやすくする方法を見てみましょう!
【Springの設定ファイルのサンプル(applicationContext.xml)】
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
<bean id="sample" class="sample.Sample">
<property name="messageSource" ref="messageSource"/>
</bean>
【Sampleクラス(sample.Sample)】
public class Sample{
public void setMessageSource(MessageSource messages) {
this.messages = new MessageSourceAccessor(messages);
}
public String obtainMsg(){
return this.messages.getMessage("sample.msg", "メッセージのデフォルトです");
}
}
【メッセージファイル(messages_jp.properties)】
sample.msg=サンプルメッセージ
【説明】
特に説明の必要は無いかもしれません。
this.messages = new MessageSourceAccessor(messages);
単純にMessageSourceAccessorでラップしているだけです。
この便利さは、もとのMessageSourceの使い方を見ないと分からないかと思います。
<MessageSourceの使い方>
getMessage(sample.msg", null, "メッセージのデフォルトです", Locale.getDefault());
<MessageSourceAccessorの使い方(再掲)>
getMessage("sample.msg", "メッセージのデフォルトです");
いくつか引数を入力しなくて良くなっていますよね!
ほんの少しの違いですが、何回も書くと意外と疲れます。
このクラスもうまく使ってみてください
【おまけ】
SpringにはVMを再起動しなくてもリロードできるメッセージリソースもあります。
ReloadableResourceBundleMessageSource
また、テスト用にプログラム上で書き換えられるメッセージリソースもあります。
StaticMessageSource
わざわざ自作するようなことはやめて、まずはこれらが使えないか検討してみましょう!
参考:
・DIの設定ファイルで外部ファイル(プロパティファイル)を参照するには?
・プロパティファイルをPropertiesクラスのbeanにするには?