mirror of
https://github.com/lejianwen/rustdesk-api.git
synced 2025-11-29 00:23:18 +00:00
161 lines
4.3 KiB
Go
161 lines
4.3 KiB
Go
package global
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-playground/locales/en"
|
|
"github.com/go-playground/locales/es"
|
|
"github.com/go-playground/locales/fr"
|
|
"github.com/go-playground/locales/ko"
|
|
"github.com/go-playground/locales/ru"
|
|
"github.com/go-playground/locales/zh_Hans_CN"
|
|
"github.com/go-playground/locales/zh_Hant"
|
|
ut "github.com/go-playground/universal-translator"
|
|
"github.com/go-playground/validator/v10"
|
|
en_translations "github.com/go-playground/validator/v10/translations/en"
|
|
es_translations "github.com/go-playground/validator/v10/translations/es"
|
|
fr_translations "github.com/go-playground/validator/v10/translations/fr"
|
|
ko_translations "github.com/go-playground/validator/v10/translations/ko"
|
|
ru_translations "github.com/go-playground/validator/v10/translations/ru"
|
|
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
|
zh_tw_translations "github.com/go-playground/validator/v10/translations/zh_tw"
|
|
"reflect"
|
|
)
|
|
|
|
func ApiInitValidator() {
|
|
validate := validator.New()
|
|
|
|
// 定义不同的语言翻译
|
|
enT := en.New()
|
|
cn := zh_Hans_CN.New()
|
|
koT := ko.New()
|
|
ruT := ru.New()
|
|
esT := es.New()
|
|
frT := fr.New()
|
|
zhTwT := zh_Hant.New()
|
|
|
|
uni := ut.New(enT, cn, koT, ruT, esT, frT, zhTwT)
|
|
|
|
enTrans, _ := uni.GetTranslator("en")
|
|
zhTrans, _ := uni.GetTranslator("zh_Hans_CN")
|
|
koTrans, _ := uni.GetTranslator("ko")
|
|
ruTrans, _ := uni.GetTranslator("ru")
|
|
esTrans, _ := uni.GetTranslator("es")
|
|
frTrans, _ := uni.GetTranslator("fr")
|
|
zhTwTrans, _ := uni.GetTranslator("zh_Hant")
|
|
|
|
err := zh_translations.RegisterDefaultTranslations(validate, zhTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = en_translations.RegisterDefaultTranslations(validate, enTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = ko_translations.RegisterDefaultTranslations(validate, koTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = ru_translations.RegisterDefaultTranslations(validate, ruTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = es_translations.RegisterDefaultTranslations(validate, esTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = fr_translations.RegisterDefaultTranslations(validate, frTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = zh_tw_translations.RegisterDefaultTranslations(validate, zhTwTrans)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
|
label := field.Tag.Get("label")
|
|
if label == "" {
|
|
return field.Name
|
|
}
|
|
return label
|
|
})
|
|
Validator.Validate = validate
|
|
Validator.UT = uni // 存储 Universal Translator
|
|
Validator.VTrans = zhTrans
|
|
|
|
Validator.ValidStruct = func(ctx *gin.Context, i interface{}) []string {
|
|
err := Validator.Validate.Struct(i)
|
|
lang := ctx.GetHeader("Accept-Language")
|
|
if lang == "" {
|
|
lang = Config.Lang
|
|
}
|
|
trans := getTranslatorForLang(lang)
|
|
errList := make([]string, 0, 10)
|
|
if err != nil {
|
|
if _, ok := err.(*validator.InvalidValidationError); ok {
|
|
errList = append(errList, err.Error())
|
|
return errList
|
|
}
|
|
for _, err2 := range err.(validator.ValidationErrors) {
|
|
errList = append(errList, err2.Translate(trans))
|
|
}
|
|
}
|
|
return errList
|
|
}
|
|
Validator.ValidVar = func(ctx *gin.Context, field interface{}, tag string) []string {
|
|
err := Validator.Validate.Var(field, tag)
|
|
lang := ctx.GetHeader("Accept-Language")
|
|
if lang == "" {
|
|
lang = Config.Lang
|
|
}
|
|
trans := getTranslatorForLang(lang)
|
|
errList := make([]string, 0, 10)
|
|
if err != nil {
|
|
if _, ok := err.(*validator.InvalidValidationError); ok {
|
|
errList = append(errList, err.Error())
|
|
return errList
|
|
}
|
|
for _, err2 := range err.(validator.ValidationErrors) {
|
|
errList = append(errList, err2.Translate(trans))
|
|
}
|
|
}
|
|
return errList
|
|
}
|
|
}
|
|
func getTranslatorForLang(lang string) ut.Translator {
|
|
switch lang {
|
|
case "zh_CN":
|
|
fallthrough
|
|
case "zh-CN":
|
|
fallthrough
|
|
case "zh":
|
|
trans, _ := Validator.UT.GetTranslator("zh_Hans_CN")
|
|
return trans
|
|
case "zh_TW":
|
|
fallthrough
|
|
case "zh-TW":
|
|
fallthrough
|
|
case "zh-tw":
|
|
trans, _ := Validator.UT.GetTranslator("zh_Hant")
|
|
return trans
|
|
case "ko":
|
|
trans, _ := Validator.UT.GetTranslator("ko")
|
|
return trans
|
|
case "ru":
|
|
trans, _ := Validator.UT.GetTranslator("ru")
|
|
return trans
|
|
case "es":
|
|
trans, _ := Validator.UT.GetTranslator("es")
|
|
return trans
|
|
case "fr":
|
|
trans, _ := Validator.UT.GetTranslator("fr")
|
|
return trans
|
|
case "en":
|
|
fallthrough
|
|
default:
|
|
trans, _ := Validator.UT.GetTranslator("en")
|
|
return trans
|
|
}
|
|
}
|