mirror of
https://github.com/lejianwen/rustdesk-api.git
synced 2025-12-02 01:53:16 +00:00
add i18n
This commit is contained in:
@@ -12,12 +12,17 @@ import (
|
||||
"Gwen/model"
|
||||
"Gwen/service"
|
||||
"fmt"
|
||||
"github.com/BurntSushi/toml"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-playground/locales/en"
|
||||
"github.com/go-playground/locales/zh_Hans_CN"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
en_translations "github.com/go-playground/validator/v10/translations/en"
|
||||
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"golang.org/x/text/language"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
@@ -98,6 +103,7 @@ func main() {
|
||||
//locker
|
||||
global.Lock = lock.NewLocal()
|
||||
|
||||
InitI18n()
|
||||
//gin
|
||||
http.ApiInit()
|
||||
|
||||
@@ -105,15 +111,25 @@ func main() {
|
||||
|
||||
func ApiInitValidator() {
|
||||
validate := validator.New()
|
||||
|
||||
// 定义不同的语言翻译
|
||||
enT := en.New()
|
||||
cn := zh_Hans_CN.New()
|
||||
|
||||
uni := ut.New(enT, cn)
|
||||
trans, _ := uni.GetTranslator("cn")
|
||||
err := zh_translations.RegisterDefaultTranslations(validate, trans)
|
||||
|
||||
enTrans, _ := uni.GetTranslator("en")
|
||||
zhTrans, _ := uni.GetTranslator("zh_Hans_CN")
|
||||
|
||||
err := zh_translations.RegisterDefaultTranslations(validate, zhTrans)
|
||||
if err != nil {
|
||||
//退出
|
||||
panic(err)
|
||||
}
|
||||
err = en_translations.RegisterDefaultTranslations(validate, enTrans)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
||||
label := field.Tag.Get("label")
|
||||
if label == "" {
|
||||
@@ -122,10 +138,16 @@ func ApiInitValidator() {
|
||||
return label
|
||||
})
|
||||
global.Validator.Validate = validate
|
||||
global.Validator.VTrans = trans
|
||||
global.Validator.UT = uni // 存储 Universal Translator
|
||||
global.Validator.VTrans = zhTrans
|
||||
|
||||
global.Validator.ValidStruct = func(i interface{}) []string {
|
||||
global.Validator.ValidStruct = func(ctx *gin.Context, i interface{}) []string {
|
||||
err := global.Validator.Validate.Struct(i)
|
||||
lang := ctx.GetHeader("Accept-Language")
|
||||
if lang == "" {
|
||||
lang = global.Config.Lang
|
||||
}
|
||||
trans := getTranslatorForLang(lang)
|
||||
errList := make([]string, 0, 10)
|
||||
if err != nil {
|
||||
if _, ok := err.(*validator.InvalidValidationError); ok {
|
||||
@@ -133,14 +155,18 @@ func ApiInitValidator() {
|
||||
return errList
|
||||
}
|
||||
for _, err2 := range err.(validator.ValidationErrors) {
|
||||
errList = append(errList, err2.Translate(global.Validator.VTrans))
|
||||
errList = append(errList, err2.Translate(trans))
|
||||
}
|
||||
}
|
||||
return errList
|
||||
}
|
||||
global.Validator.ValidVar = func(field interface{}, tag string) []string {
|
||||
global.Validator.ValidVar = func(ctx *gin.Context, field interface{}, tag string) []string {
|
||||
err := global.Validator.Validate.Var(field, tag)
|
||||
fmt.Println(err)
|
||||
lang := ctx.GetHeader("Accept-Language")
|
||||
if lang == "" {
|
||||
lang = global.Config.Lang
|
||||
}
|
||||
trans := getTranslatorForLang(lang)
|
||||
errList := make([]string, 0, 10)
|
||||
if err != nil {
|
||||
if _, ok := err.(*validator.InvalidValidationError); ok {
|
||||
@@ -148,14 +174,29 @@ func ApiInitValidator() {
|
||||
return errList
|
||||
}
|
||||
for _, err2 := range err.(validator.ValidationErrors) {
|
||||
errList = append(errList, err2.Translate(global.Validator.VTrans))
|
||||
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, _ := global.Validator.UT.GetTranslator("zh_Hans_CN")
|
||||
return trans
|
||||
case "en":
|
||||
fallthrough
|
||||
default:
|
||||
trans, _ := global.Validator.UT.GetTranslator("en")
|
||||
return trans
|
||||
}
|
||||
}
|
||||
func DatabaseAutoUpdate() {
|
||||
version := 126
|
||||
|
||||
@@ -251,3 +292,37 @@ func Migrate(version uint) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func InitI18n() {
|
||||
bundle := i18n.NewBundle(language.English)
|
||||
bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
|
||||
bundle.LoadMessageFile(global.Config.Gin.ResourcesPath + "/i18n/en.toml")
|
||||
bundle.LoadMessageFile(global.Config.Gin.ResourcesPath + "/i18n/zh_CN.toml")
|
||||
global.Localizer = func(ctx *gin.Context) *i18n.Localizer {
|
||||
lang := ctx.GetHeader("Accept-Language")
|
||||
if lang == "" {
|
||||
lang = global.Config.Lang
|
||||
}
|
||||
if lang == "en" {
|
||||
return i18n.NewLocalizer(bundle, "en")
|
||||
} else {
|
||||
return i18n.NewLocalizer(bundle, lang, "en")
|
||||
}
|
||||
}
|
||||
|
||||
//personUnreadEmails := localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
// DefaultMessage: &i18n.Message{
|
||||
// ID: "PersonUnreadEmails",
|
||||
// },
|
||||
// PluralCount: 6,
|
||||
// TemplateData: map[string]interface{}{
|
||||
// "Name": "LE",
|
||||
// "PluralCount": 6,
|
||||
// },
|
||||
//})
|
||||
//personUnreadEmails, err := global.Localizer.LocalizeMessage(&i18n.Message{
|
||||
// ID: "ParamsError",
|
||||
//})
|
||||
//fmt.Println(err, personUnreadEmails)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user