123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package middleware
- import (
- "github.com/gin-gonic/gin"
- "github.com/go-playground/locales/en"
- "github.com/go-playground/locales/zh"
- "github.com/go-playground/universal-translator"
- "github.com/go_gateway_admin/public"
- "gopkg.in/go-playground/validator.v9"
- en_translations "gopkg.in/go-playground/validator.v9/translations/en"
- zh_translations "gopkg.in/go-playground/validator.v9/translations/zh"
- "reflect"
- )
- //设置Translation
- func TranslationMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- //参照:https://github.com/go-playground/validator/blob/v9/_examples/translations/main.go
- //设置支持语言
- en := en.New()
- zh := zh.New()
- //设置国际化翻译器
- uni := ut.New(zh, zh, en)
- val := validator.New()
- //根据参数取翻译器实例
- locale := c.DefaultQuery("locale", "zh")
- trans, _ := uni.GetTranslator(locale)
- //翻译器注册到validator
- switch locale {
- case "en":
- en_translations.RegisterDefaultTranslations(val, trans)
- val.RegisterTagNameFunc(func(fld reflect.StructField) string {
- return fld.Tag.Get("en_comment")
- })
- break
- default:
- zh_translations.RegisterDefaultTranslations(val, trans)
- val.RegisterTagNameFunc(func(fld reflect.StructField) string {
- return fld.Tag.Get("comment")
- })
- //自定义验证方法
- //https://github.com/go-playground/validator/blob/v9/_examples/custom-validation/main.go
- val.RegisterValidation("is_valid_username", func(fl validator.FieldLevel) bool {
- return fl.Field().String() == "admin"
- })
- //自定义验证器
- //https://github.com/go-playground/validator/blob/v9/_examples/translations/main.go
- val.RegisterTranslation("is_valid_username", trans, func(ut ut.Translator) error {
- return ut.Add("is_valid_username", "{0} 填写不正确哦", true)
- }, func(ut ut.Translator, fe validator.FieldError) string {
- t, _ := ut.T("is_valid_username", fe.Field())
- return t
- })
- break
- }
- c.Set(public.TranslatorKey, trans)
- c.Set(public.ValidatorKey, val)
- c.Next()
- }
- }
|