公司要求对数据进行国际化和验证提示信息进行国际化。
其中验证提示国际化这个遇到问题。因为spring boot也可以进行国际化。所以就一直没绕出这个问题。我们使用的是hibernate validator 来进行国际化的。所以应该是对hibernate validator进行国际化。而不是用spring boot 进行国际化。关键代码如下:
/**
* ********************************************************
* @Title: validateEntityIn
* @Description: 实体类校验--国际化方法
* @Param: @param obj
* @Param: @return
* @Return: ValidationResult
* @Throws
* @Author ganjing
**********************************************************
*/
public static <T> ValidationResult validateEntityIn(T obj,String lang){
ValidationResult result = new ValidationResult();
Locale locale = null;
if(LanguageEnum.US_ENGLISH.getCode().equals(lang)) {
locale = LanguageEnum.US_ENGLISH.getLocale();
}else {
locale = LanguageEnum.ZH_CHINESE.getLocale();
}
Set<ConstraintViolation<T>> set = getValidatorByLocale(locale).validate(obj,Default.class);
if( CollectionUtils.isNotEmpty(set) ){
result.setHasErrors(true);
Map<String,String> errorMsg = new HashMap<String,String>();
for(ConstraintViolation<T> cv : set){
errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
}
result.setErrorMsg(errorMsg);
}
return result;
}
/**
* ********************************************************
* @Title: getValidatorByLocale
* @Description:得到不同语言验证器
* @Param: @param locale
* @Param: @return
* @Return: Validator
* @Throws
* @Author ganjing
**********************************************************
*/
public static Validator getValidatorByLocale(Locale locale) {
Locale.setDefault(locale);
Validator validator = Validation.byDefaultProvider().configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(new PlatformResourceBundleLocator("i18n/MyMessages")))
.buildValidatorFactory().getValidator();
return validator;
}