57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
|
package validator
|
|||
|
|
|||
|
import (
|
|||
|
"errors"
|
|||
|
"github.com/gin-gonic/gin/binding"
|
|||
|
"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"
|
|||
|
"log"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
var (
|
|||
|
uni *ut.UniversalTranslator
|
|||
|
validate *validator.Validate
|
|||
|
trans ut.Translator
|
|||
|
)
|
|||
|
|
|||
|
// Init
|
|||
|
// @description: 初始化验证器
|
|||
|
func Init() {
|
|||
|
//注册翻译器
|
|||
|
zhTranslator := zh.New()
|
|||
|
uni = ut.New(zhTranslator, zhTranslator)
|
|||
|
|
|||
|
trans, _ = uni.GetTranslator("zh")
|
|||
|
|
|||
|
//获取gin的校验器
|
|||
|
validate = binding.Validator.Engine().(*validator.Validate)
|
|||
|
//注册翻译器
|
|||
|
err := zhTranslations.RegisterDefaultTranslations(validate, trans)
|
|||
|
if err != nil {
|
|||
|
log.Panicf("注册翻译器失败:%v", err)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Translate
|
|||
|
// @description: 翻译错误信息
|
|||
|
// @param err
|
|||
|
// @return error
|
|||
|
func Translate(err error) error {
|
|||
|
errorMsg := make([]string, 0)
|
|||
|
|
|||
|
var ves validator.ValidationErrors
|
|||
|
ok := errors.As(err, &ves)
|
|||
|
if !ok {
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
for _, e := range ves {
|
|||
|
errorMsg = append(errorMsg, e.Translate(trans))
|
|||
|
}
|
|||
|
|
|||
|
return errors.New(strings.Join(errorMsg, ";"))
|
|||
|
}
|