代码拉取完成,页面将自动刷新
package validator
import (
"reflect"
"regexp"
"strings"
"go.uber.org/zap"
"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"
en_translations "github.com/go-playground/validator/v10/translations/en" // 英文
zh_translations "github.com/go-playground/validator/v10/translations/zh" // 中文
"gitee.com/jason-laf/common/global"
)
func Init() {
v, ok := binding.Validator.Engine().(*validator.Validate)
if !ok {
zap.S().Panicf("初始化validator失败")
}
// 注册一个获取json字段的自定义方法
v.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
// 定义翻译器并注册
zh := zh.New()
en := en.New()
uni := ut.New(en, zh, en) // 第一个参数是备用的语言环境,后面的是应该支持的语言环境
global.Trans, ok = uni.GetTranslator(global.Local)
if !ok {
zap.S().Panicf("uni.GetTranslator false")
}
switch global.Local {
case "zh":
if err := zh_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
case "en":
if err := en_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
default:
if err := en_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
}
// 将自定义的mobile字段和验证函数注册到validation中
err := v.RegisterValidation("mobile", func(fl validator.FieldLevel) bool {
mobile := fl.Field().String()
// 使用正则表达式判断是否合法
ok, _ := regexp.MatchString(
`^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`,
mobile,
) // 使用反引号解决转义字符"\"的问题
return ok
})
if err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
// 自定义的mobile字段需要设置翻译返回
v.RegisterTranslation("mobile", global.Trans, func(ut ut.Translator) error {
return ut.Add("mobile", "{0}必须是合法的!", true) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("mobile", fe.Field())
return t
})
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。