package validate import ( "github.com/go-playground/locales/en" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zhTranslations "github.com/go-playground/validator/v10/translations/zh" ) var ( vt *validator.Validate trans ut.Translator ) // 初始化验证器和翻译 func init() { vt = validator.New() trans = newTranslate(vt) } func newTranslate(v *validator.Validate) ut.Translator { zhT := zh.New() enT := en.New() uni := ut.New(enT, zhT) tr, _ := uni.GetTranslator("zh") _ = zhTranslations.RegisterDefaultTranslations(v, tr) return tr } // GrtTrans 获取翻译实例 func GrtTrans() ut.Translator { return trans } // Struct 验证结构体 func Struct(data interface{}) error { return vt.Struct(data) } // TransError 翻译错误信息 func TransError(err error) (msg string) { switch v := err.(type) { case validator.ValidationErrors: if len(v) > 0 { msg = v[0].Translate(trans) } else { msg = v.Error() } case validator.FieldError: msg = v.Translate(trans) default: msg = err.Error() } return }