验证器
中文翻译
为验证错误提供中文翻译支持
中文翻译
xVaild 为 go-playground/validator 提供中文翻译支持,将验证错误消息转换为友好的中文提示。
RegisterTranslator
注册中文翻译器:
func RegisterTranslator(validate *validator.Validate) error使用:
validate := validator.New()
xVaild.RegisterCustomValidators(validate)
xVaild.RegisterTranslator(validate)GetTranslator
获取翻译器实例:
func GetTranslator() ut.TranslatorTranslateError
翻译验证错误为中文:
func TranslateError(err error) map[string]string返回: 字段名到错误消息的映射。
label 标签
使用 label 标签定义字段的中文名称:
type User struct {
// label 优先于 json 作为字段名
Username string `json:"username" label:"用户名" binding:"required,min=4"`
Password string `json:"password" label:"密码" binding:"required,min=8"`
Email string `json:"email" label:"邮箱" binding:"required,email"`
}错误消息示例:
用户名为必填项密码长度不能少于 8 个字符邮箱必须是有效的邮箱地址
内置消息映射
字段
类型
自定义验证器消息
字段
类型
使用示例
基础使用
func CreateUser(ctx *gin.Context) {
var req dto.CreateUserRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
// 获取翻译后的错误消息
errors := xVaild.TranslateError(err)
for field, msg := range errors {
fmt.Printf("%s: %s\n", field, msg)
}
return
}
}配合 HandleValidationError
func CreateUser(ctx *gin.Context) {
var req dto.CreateUserRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
// 自动翻译并返回响应
xVaild.HandleValidationError(ctx, err)
return
}
}完整初始化
func (r *Reg) EngineInit() {
engine := gin.Default()
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
// 1. 注册自定义验证器
_ = xVaild.RegisterCustomValidators(v)
// 2. 注册中文翻译器
_ = xVaild.RegisterTranslator(v)
// 3. 使用 label 标签作为字段名
v.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := fld.Tag.Get("label")
if name == "" {
name = fld.Tag.Get("json")
}
return name
})
}
}