package validator import ( "errors" "reflect" "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 ( trans ut.Translator validate *validator.Validate ) func InitValidatorZh() { langZh := zh.New() uni := ut.New(langZh, langZh) var found bool trans, found = uni.GetTranslator("zh") if !found { panic("translator 'zh' not found") } err := zhtranslations.RegisterDefaultTranslations(validate, trans) if err != nil { panic("failed to register zh translations: " + err.Error()) } } func init() { validate = validator.New() // 注册自定义标签名称 validate.RegisterTagNameFunc(func(field reflect.StructField) string { name := field.Tag.Get("json") if name == "-" { return "" } return name }) // 初始化中文翻译器 InitValidatorZh() } func Translate(err error) []string { var validateErrs validator.ValidationErrors if errors.As(err, &validateErrs) { messages := make([]string, 0, len(validateErrs)) for _, e := range validateErrs { messages = append(messages, e.Translate(trans)) } return messages } // 非校验错误 直接返回 return []string{err.Error()} } func Struct(s any) error { return validate.Struct(s) }