使用validato系列的翻译 但是不生效是什么原因呀 有知道的吗

使用validato系列的翻译 但是不生效是什么原因呀 有知道的吗


package utils

import (
    "basketball_web/src/com/basketball/entity"
    "fmt"
    "github.com/gin-gonic/gin/binding"
    "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"
    enTranslations "github.com/go-playground/validator/v10/translations/en"
    zhTranslations "github.com/go-playground/validator/v10/translations/zh"
    "reflect"
    "strings"
    "time"
)

var trans ut.Translator

// InitTrans
//
//    @Description: Init初始化翻译器
//    @param locale
//    @return err
func InitTrans(locale string) (err error) {
    // 修改gin框架中的Validator引擎属性,实现自定制
    if v, ok := binding.Validator.Engine().(*validator.Validate); ok {

        //这里需要注册一个获取 json tag 的自定义方法
        v.RegisterTagNameFunc(func(fld reflect.StructField) string {
            name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
            if name == "-" {
                return ""
            }
            return name
        })

        //为Game 注册 自自定义校验方法
        v.RegisterStructValidation(SignUpParamStructLevelValidation, entity.Game{})


        //在校验注册自定义的校验方法
        err = v.RegisterValidation("checkDate", customFunc)
        if err != nil {
            return err
        }

        //设置支持语言
        chinese := zh.New() //中文翻译器
        english := en.New() //英文翻译器

        //第一个参数是备用(fallback)的语言环境
        //后面的参数是应该支持的语言环境 ,支持多个 国际化翻译器
        uni := ut.New(chinese, chinese, english)

        //locale 通常取决于 http 请求头的     Accept—Language
        var ok bool
        //也可以使用 uni.FindTranslator(...)传入多个locale进行查找
        trans, ok = uni.GetTranslator(locale)
        if !ok {
            return fmt.Errorf("uni.GetTranslator(%s) failed", locale)
        }
        //注册翻译器
        switch locale {
        case "chinese":
            err = zhTranslations.RegisterDefaultTranslations(v, trans)
        case "english":
            err = enTranslations.RegisterDefaultTranslations(v, trans)
        default:
            err = enTranslations.RegisterDefaultTranslations(v, trans)
        }
        if err:=v.RegisterTranslation(
            "checkDate",
            trans,
            registerTranslator("checkDate","{0}必须要晚于当前日期"),
            translate,
            );err!=nil{
            return err
        }
        return
    }
    return
}

// SignUpParamStructLevelValidation
//
//    @Description: 自定义SignUpParam结构体校验参数
//    @param sl
func SignUpParamStructLevelValidation(sl validator.StructLevel) {

}

// customFunc
//
//    @Description: 自定义字段级别校验方法
//    @param game
//    @param fl
//    @return bool
func customFunc(fl validator.FieldLevel) bool {
    date, err := time.Parse("2033-01-02", fl.Field().String())
    if err != nil {
        return false
    }
    if date.Before(time.Now()) {
        return false
    }
    return true
}

// registerTranslator
//
//    @Description: 为自定义字段添加翻译功能
//    @param tag
//    @param msg
//    @return validator.RegisterTranslationsFunc
func registerTranslator(tag string, msg string) validator.RegisterTranslationsFunc {
    return func(trans ut.Translator) error {
        if err := trans.Add(tag, msg, false); err != nil {
            return err
        }
        return nil
    }
}

func translate(trans ut.Translator, fe validator.FieldError) string {
    msg, err := trans.T(fe.Tag(), fe.Field())
    if err != nil {
        //panic(fe.(error).Error())
        return err.Error()
    }
    return msg
}



func InsertAdmin(c *gin.Context) {
    var admin entity.Admin
    err := c.BindJSON(&admin)
    if err != nil {
        errs, ok := err.(validator.ValidationErrors)
        if !ok {
            c.JSON(http.StatusBadRequest, resp.Failed().WithMsg("绑定 admin 对象失败").WithData(err).WithCode(http.StatusBadRequest))
            return
        }
        c.JSON(http.StatusOK, resp.NewResult().WithMsg("绑定 admin 对象失败").WithData(errs.Translate(trans)).WithCode(http.StatusOK))

        return
    }
    err, affected := service.InsertAdmin(&admin)
    if err != nil {
        errs, ok := err.(validator.ValidationErrors)
        if !ok {
            fmt.Println("添加管理员失败:", err)
            c.JSON(http.StatusBadRequest, resp.NewResult().WithCode(http.StatusBadRequest).WithMsg("添加管理员失败").WithData(err))
            return
        }
        c.JSON(http.StatusBadRequest, resp.NewResult().WithMsg("添加管理员失败").WithData(errs.Translate(trans)).WithCode(http.StatusBadRequest))
        return
    }
    if err == nil {
        if affected != 0 {
            c.JSON(http.StatusOK, resp.NewResult().WithCode(http.StatusOK).WithMsg("添加管理员成功").WithData(admin))
            return
        } else {
            c.JSON(http.StatusOK, resp.NewResult().WithCode(http.StatusOK).WithMsg("该管理员已存在,请登录").WithData(admin))
            return
        }
    }
}

{"code":400,"msg":"绑定 json 类型的 game类型 失败","data":{"Value":"string","Type":{},"Offset":52,"Struct":"Game","Field":"tid2"}}