zh_cn.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package unity
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin/binding"
  5. "github.com/go-playground/locales/en"
  6. "github.com/go-playground/locales/zh"
  7. ut "github.com/go-playground/universal-translator"
  8. "github.com/go-playground/validator/v10"
  9. enTranslations "github.com/go-playground/validator/v10/translations/en"
  10. zhTranslations "github.com/go-playground/validator/v10/translations/zh"
  11. )
  12. var Trans ut.Translator // 声明一个全局的Translator变量
  13. // Translator 是一个用于设置验证器本地化翻译的函数
  14. func Translator(local string) error {
  15. // 验证并获取Validator引擎实例
  16. if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
  17. // 初始化英语和中文翻译器
  18. zhT := zh.New()
  19. enT := en.New()
  20. // 创建一个通用翻译器实例,传入多个翻译器(这里是英语和中文)
  21. uni := ut.New(enT, zhT, enT)
  22. // 尝试从通用翻译器中获取指定语言的翻译器
  23. var found bool
  24. Trans, found = uni.GetTranslator(local)
  25. if !found {
  26. return fmt.Errorf("failed to find translator for %s", local)
  27. }
  28. // 根据本地化语言注册相应的翻译器到验证器中
  29. switch local {
  30. case "en":
  31. err := enTranslations.RegisterDefaultTranslations(v, Trans)
  32. if err != nil {
  33. return err
  34. }
  35. case "zh":
  36. err := zhTranslations.RegisterDefaultTranslations(v, Trans)
  37. if err != nil {
  38. return err
  39. }
  40. default:
  41. // 如果指定了不受支持的语言,默认使用英文
  42. err := enTranslations.RegisterDefaultTranslations(v, Trans)
  43. if err != nil {
  44. return err
  45. }
  46. }
  47. } else {
  48. return fmt.Errorf("validator engine not found")
  49. }
  50. return nil
  51. }