代码拉取完成,页面将自动刷新
package validator
import (
"gitee.com/xlizy/common-go/base/enums/common_error"
"gitee.com/xlizy/common-go/base/response"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
pv "github.com/go-playground/validator/v10"
enTranslations "github.com/go-playground/validator/v10/translations/en"
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
"github.com/kataras/iris/v12/context"
"github.com/timandy/routine"
"reflect"
"regexp"
)
const (
ValidatorKey = "ValidatorKey"
TranslatorKey = "TranslatorKey"
locale = "chinese"
)
var validatorCtx = routine.NewInheritableThreadLocal[*pv.Validate]()
var translatorCtx = routine.NewInheritableThreadLocal[ut.Translator]()
func TransInit(c *context.Context) {
//设置支持语言
chinese := zh.New()
english := en.New()
//设置国际化翻译器
uni := ut.New(chinese, chinese, english)
//设置验证器
val := pv.New()
//根据参数取翻译器实例
trans, _ := uni.GetTranslator(locale)
//翻译器注册到validator
switch locale {
case "chinese":
zhTranslations.RegisterDefaultTranslations(val, trans)
//使用fld.Tag.Get("comment")注册一个获取tag的自定义方法
val.RegisterTagNameFunc(func(fld reflect.StructField) string {
return fld.Tag.Get("comment")
})
//自定义翻译器
val.RegisterTranslation("email", trans, func(ut ut.Translator) error {
return ut.Add("email", "{0}不符合邮箱规则", true)
}, func(ut ut.Translator, fe pv.FieldError) string {
t, _ := ut.T("email", fe.Field())
return t
})
//自定义验证方法
val.RegisterValidation("valid_username", func(fl pv.FieldLevel) bool {
matched, _ := regexp.Match("^[a-z]{6,30}$", []byte(fl.Field().String()))
return matched
})
//自定义翻译器
val.RegisterTranslation("valid_username", trans, func(ut ut.Translator) error {
return ut.Add("valid_username", "{0}输入格式不正确或长度不符", true)
}, func(ut ut.Translator, fe pv.FieldError) string {
t, _ := ut.T("valid_username", fe.Field())
return t
})
case "english":
enTranslations.RegisterDefaultTranslations(val, trans)
val.RegisterTagNameFunc(func(fld reflect.StructField) string {
return fld.Tag.Get("en_comment")
})
}
translatorCtx.Set(trans)
validatorCtx.Set(val)
}
func ValidParams(params interface{}) *response.Response {
valid := validatorCtx.Get()
trans := translatorCtx.Get()
err := valid.Struct(params)
//如果数据效验不通过,则将所有err以切片形式输出
if err != nil {
errs := err.(pv.ValidationErrors)
sliceErrs := make([]string, 0)
for _, e := range errs {
//使用validator.ValidationErrors类型里的Translate方法进行翻译
sliceErrs = append(sliceErrs, e.Translate(trans))
}
return response.Error(common_error.REQUEST_ARGUMENT_NOT_VALID, sliceErrs)
}
return response.Succ()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。