在Java / Spring中,如何妥善处理缺失的转换值?
问题内容:
我正在使用Java + Spring作为国际网站。
两种语言为ZH和EN(中文和英文)。
我有2个文件:messages.properties(用于英语键/值对)和messages_zh.properties。
该网站使用#springMessage标签以英语编码。然后,我使用Poeditor.com让翻译人员为每个英语短语提供中文值。因此,尽管英语messages.properties文件总是完整的,并且messages_zh.properties文件始终具有所有
键 ,但由于几天后我从翻译人员那里收到了翻译,所以messages_zh.properties文件有时仍为空 值 。
每当缺少中文值时,我都需要系统显示等效的英文值(在我的网站上)。
当中文值不可用时,如何告诉Spring退一步以使用英语?我需要在逐个值的基础上实现这一目标。
现在,无论缺少中文值的地方,我都在网站上看到空白的按钮标签。我希望每当中文为空白时使用英语(默认语言)。
问题答案:
为此,您可以创建自己的Custom 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;
}
}
并在spring xml中将此messageSource bean配置为
<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)