123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package unity
- import (
- "fmt"
- "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"
- enTranslations "github.com/go-playground/validator/v10/translations/en"
- zhTranslations "github.com/go-playground/validator/v10/translations/zh"
- )
- var Trans ut.Translator // 声明一个全局的Translator变量
- // Translator 是一个用于设置验证器本地化翻译的函数
- func Translator(local string) error {
- // 验证并获取Validator引擎实例
- if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
- // 初始化英语和中文翻译器
- zhT := zh.New()
- enT := en.New()
- // 创建一个通用翻译器实例,传入多个翻译器(这里是英语和中文)
- uni := ut.New(enT, zhT, enT)
- // 尝试从通用翻译器中获取指定语言的翻译器
- var found bool
- Trans, found = uni.GetTranslator(local)
- if !found {
- return fmt.Errorf("failed to find translator for %s", local)
- }
- // 根据本地化语言注册相应的翻译器到验证器中
- switch local {
- case "en":
- err := enTranslations.RegisterDefaultTranslations(v, Trans)
- if err != nil {
- return err
- }
- case "zh":
- err := zhTranslations.RegisterDefaultTranslations(v, Trans)
- if err != nil {
- return err
- }
- default:
- // 如果指定了不受支持的语言,默认使用英文
- err := enTranslations.RegisterDefaultTranslations(v, Trans)
- if err != nil {
- return err
- }
- }
- } else {
- return fmt.Errorf("validator engine not found")
- }
- return nil
- }
|