translation.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package middleware
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/go-playground/locales/en"
  5. "github.com/go-playground/locales/zh"
  6. "github.com/go-playground/universal-translator"
  7. "github.com/go_gateway_admin/public"
  8. "gopkg.in/go-playground/validator.v9"
  9. en_translations "gopkg.in/go-playground/validator.v9/translations/en"
  10. zh_translations "gopkg.in/go-playground/validator.v9/translations/zh"
  11. "reflect"
  12. )
  13. //设置Translation
  14. func TranslationMiddleware() gin.HandlerFunc {
  15. return func(c *gin.Context) {
  16. //参照:https://github.com/go-playground/validator/blob/v9/_examples/translations/main.go
  17. //设置支持语言
  18. en := en.New()
  19. zh := zh.New()
  20. //设置国际化翻译器
  21. uni := ut.New(zh, zh, en)
  22. val := validator.New()
  23. //根据参数取翻译器实例
  24. locale := c.DefaultQuery("locale", "zh")
  25. trans, _ := uni.GetTranslator(locale)
  26. //翻译器注册到validator
  27. switch locale {
  28. case "en":
  29. en_translations.RegisterDefaultTranslations(val, trans)
  30. val.RegisterTagNameFunc(func(fld reflect.StructField) string {
  31. return fld.Tag.Get("en_comment")
  32. })
  33. break
  34. default:
  35. zh_translations.RegisterDefaultTranslations(val, trans)
  36. val.RegisterTagNameFunc(func(fld reflect.StructField) string {
  37. return fld.Tag.Get("comment")
  38. })
  39. //自定义验证方法
  40. //https://github.com/go-playground/validator/blob/v9/_examples/custom-validation/main.go
  41. val.RegisterValidation("is_valid_username", func(fl validator.FieldLevel) bool {
  42. return fl.Field().String() == "admin"
  43. })
  44. //自定义验证器
  45. //https://github.com/go-playground/validator/blob/v9/_examples/translations/main.go
  46. val.RegisterTranslation("is_valid_username", trans, func(ut ut.Translator) error {
  47. return ut.Add("is_valid_username", "{0} 填写不正确哦", true)
  48. }, func(ut ut.Translator, fe validator.FieldError) string {
  49. t, _ := ut.T("is_valid_username", fe.Field())
  50. return t
  51. })
  52. break
  53. }
  54. c.Set(public.TranslatorKey, trans)
  55. c.Set(public.ValidatorKey, val)
  56. c.Next()
  57. }
  58. }