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 }