本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

gin 自定义翻译器 将err转化中文

一、Gin binding标签可对参数进行校验

type ReqGameData struct {
	Uuid string `json:"uuid" binding:"required,min=16"`
	X    int    `json:"x" binding:"required"`
	Y    int    `json:"y" binding:"required"`
}

但是错误返回都是英文, 通过下方可进行"翻译"错误

想查看binding的具体的限制条件, 请查看:gin-binding参数校验

二、validator.go 翻译中文

package initialize

import (
	"github.com/gin-gonic/gin/binding"
	zh "github.com/go-playground/locales/zh"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zh_translations "github.com/go-playground/validator/v10/translations/zh"
)

//gin > 1.4.0
//将验证器错误翻译成中文

var (
	uni   *ut.UniversalTranslator
	Trans ut.Translator
)

func InitValidate() {
	//注册翻译器
	zhT := zh.New()
	uni = ut.New(zhT, zhT)

	Trans, _ = uni.GetTranslator("zh")

	//获取gin的校验器
	validate := binding.Validator.Engine().(*validator.Validate)
	//注册翻译器
	zh_translations.RegisterDefaultTranslations(validate, Trans)
}

// Translate 翻译错误信息
func Translate(err error) map[string][]string {

	var result = make(map[string][]string)

	errors := err.(validator.ValidationErrors)

	for _, err := range errors {
		result[err.Field()] = append(result[err.Field()], err.Translate(Trans))
	}
	return result
}

三、在gin接口中使用

func Move(c *gin.Context) {
	var req form.ReqGameData
	err := c.ShouldBind(&req)
	if err != nil {
		c.JSON(200, gin.H{
			//在这里使用
			"error": initialize.Translate(err),
			"msg":   "fail",
		})
		return
	}

	// xxxx
	// xxxx
}
# golang   gin  

评论