validator.go 1023 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package validator
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gin-gonic/gin/binding"
  5. "github.com/go-playground/locales/zh"
  6. ut "github.com/go-playground/universal-translator"
  7. "github.com/go-playground/validator/v10"
  8. zh_translations "github.com/go-playground/validator/v10/translations/zh"
  9. "reflect"
  10. )
  11. var trans ut.Translator
  12. func init() {
  13. uni := ut.New(zh.New())
  14. trans, _ = uni.GetTranslator("zh")
  15. if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
  16. //注册翻译器
  17. _ = zh_translations.RegisterDefaultTranslations(v, trans)
  18. //注册一个函数,获取struct tag里自定义的label作为字段名
  19. v.RegisterTagNameFunc(func(fld reflect.StructField) string {
  20. name := fld.Tag.Get("label")
  21. return name
  22. })
  23. }
  24. }
  25. // ValidatorData 验证数据
  26. func ValidatorData(c *gin.Context, data interface{}) (string, bool) {
  27. if err := c.ShouldBind(data); err != nil {
  28. for _, v := range err.(validator.ValidationErrors) {
  29. return v.Translate(trans), false
  30. }
  31. }
  32. return "", true
  33. }