(飛歌筆記)資料國際化和提示資訊國家化
公司要求對資料進行國際化和驗證提示資訊進行國際化。
其中驗證提示國際化這個遇到問題。因為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;
}