I\'m using Java + Spring for an international website.
The 2 languages are ZH and EN (Chinese and English).
I have 2 files: messages.properties (for English
You could create your own Custom MessageSource for this purpose.
Something like:
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;
}
}
and configure this messageSource bean in spring xml as
.....
Now to get resolved Label you will be invoking MessageSource's
either of the below methods
String getMessage(String code, Object[] args, Locale locale);
String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
resolveCode()
will be called when your message label has arguments and you pass those arguments via args
parameter like below
invalid.number= {0} is Invalid
and you invoke messageSource.getMessage("INVALID_NUMBER", new Object[]{2d}, locale)
resolveCodeWithoutArguments()
will be called when your message label does not have arguments and you pass args
parameter as null
validation.success = Validation Success
and you invoke messageSource.getMessage("INVALID_NUMBER", null, locale)