Gin验证器(validator)错误提示翻译成中文

 提示:转载请注明原文链接

 本文永久链接:https://www.360us.net/article/73.html

Gin模型数据绑定验证器用的是go-playground/validator/v10。默认提示是英文内容,我们需要翻译成中文内容。

创建一个文件validator.go

package utils

import (
	"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"
	zhtranslations "github.com/go-playground/validator/v10/translations/zh"
	"log"
)

var trans ut.Translator

//设置验证器中文翻译
func init() {
	if trans != nil {
		return
	}
	zhLoc := zh.New()
	enLoc := en.New()
	uni := ut.New(enLoc, zhLoc)
	trans, _ = uni.GetTranslator("zh")
	if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
		if err := zhtranslations.RegisterDefaultTranslations(v, trans); err != nil {
			log.Fatalln(err)
		}
	}
}

//TransError 翻译验证器错误提示
func TransError(err error) map[string]string {
	if errs, ok := err.(validator.ValidationErrors); ok {
		return errs.Translate(trans)
	}
	log.Println("[TransError]", err)
	return nil
}

主要功能是创建一个工具方法,方便我们调用翻译。

使用:

if err := g.ShouldBind(&add); err != nil {
	g.JSON(http.StatusBadRequest, gin.H{"error": utils.TransError(err)})
	return
}

utils.TransError(err)就会把err的英文内容翻译成中文了。

 评论
暂无评论