validator.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package validator
  2. //将验证器错误翻译成中文
  3. import (
  4. "errors"
  5. "fmt"
  6. "github.com/gin-gonic/gin/binding"
  7. "github.com/go-playground/locales/zh"
  8. ut "github.com/go-playground/universal-translator"
  9. "github.com/go-playground/validator/v10"
  10. zh_translations "github.com/go-playground/validator/v10/translations/zh"
  11. )
  12. var (
  13. uni *ut.UniversalTranslator
  14. // validate *validator.Validate
  15. trans ut.Translator
  16. )
  17. func Init() {
  18. //注册翻译器
  19. zh := zh.New()
  20. uni = ut.New(zh, zh)
  21. trans, _ = uni.GetTranslator("zh")
  22. //获取gin的校验器
  23. validate := binding.Validator.Engine().(*validator.Validate)
  24. //注册翻译器
  25. zh_translations.RegisterDefaultTranslations(validate, trans)
  26. }
  27. // Translate 翻译错误信息
  28. func Translate(err error) map[string][]string {
  29. var result = make(map[string][]string)
  30. errors := err.(validator.ValidationErrors)
  31. for _, err := range errors {
  32. result[err.Field()] = append(result[err.Field()], err.Translate(trans))
  33. }
  34. return result
  35. }
  36. func TranslateError(err error) error {
  37. var validationErr validator.ValidationErrors
  38. if errors.As(err, &validationErr) {
  39. errs := err.(validator.ValidationErrors)
  40. return errors.New(errs[0].Translate(trans))
  41. }
  42. fmt.Println("数据格式校验错误: ", err)
  43. return errors.New("数据格式校验不通过" + err.Error())
  44. }