この目的のために、独自のカスタム MessageSource を作成できます。
何かのようなもの:
public class SpecialMessageSource extends ReloadableResourceBundleMessageSource {
@Override
protected MessageFormat resolveCode(String code, Locale locale) {
MessageFormat result = super.resolveCode(code, locale);
if (result.getPattern().isEmpty() && locale == Locale.CHINESE) {
return super.resolveCode(code, Locale.ENGLISH);
}
return result;
}
@Override
protected String resolveCodeWithoutArguments(String code, Locale locale) {
String result= super.resolveCodeWithoutArguments(code, locale);
if ((result == null || result.isEmpty()) && locale == Locale.CHINESE) {
return super.resolveCodeWithoutArguments(code, Locale.ENGLISH);
}
return result;
}
}
この messageSource Bean を spring xml で次のように構成します。
<bean id="messageSource" class="SpecialMessageSource">
.....
</bean>
解決されたラベルを取得する MessageSource's
には、以下のいずれかのメソッドを呼び出します
String getMessage(String code, Object[] args, Locale locale);
String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
resolveCode()
args
メッセージラベルに引数があり、以下のようなパラメーターを介してそれらの引数を渡し、呼び出したときに呼び出され
invalid.number= {0} is Invalid
ますmessageSource.getMessage("INVALID_NUMBER", new Object[]{2d}, locale)
resolveCodeWithoutArguments()
メッセージラベルに引数がなく、args
パラメーターを null として渡し
validation.success = Validation Success
て呼び出した場合に呼び出されますmessageSource.getMessage("INVALID_NUMBER", null, locale)