1Panel/backend/i18n/i18n.go

79 lines
1.7 KiB
Go
Raw Normal View History

2022-08-16 23:30:23 +08:00
package i18n
import (
"embed"
"strings"
ginI18n "github.com/gin-contrib/i18n"
"github.com/gin-gonic/gin"
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/text/language"
2023-03-11 19:55:37 +08:00
"gopkg.in/yaml.v3"
2022-08-16 23:30:23 +08:00
)
func GetMsgWithMap(key string, maps map[string]interface{}) string {
2022-08-16 23:30:23 +08:00
content := ""
if maps == nil {
content = ginI18n.MustGetMessage(&i18n.LocalizeConfig{
MessageID: key,
2022-08-16 23:30:23 +08:00
})
} else {
content = ginI18n.MustGetMessage(&i18n.LocalizeConfig{
MessageID: key,
2022-08-16 23:30:23 +08:00
TemplateData: maps,
})
}
content = strings.ReplaceAll(content, ": <no value>", "")
if content == "" {
return key
2022-08-16 23:30:23 +08:00
} else {
return content
}
}
func GetErrMsg(key string, maps map[string]interface{}) string {
content := ""
if maps == nil {
content = ginI18n.MustGetMessage(&i18n.LocalizeConfig{
MessageID: key,
})
} else {
content = ginI18n.MustGetMessage(&i18n.LocalizeConfig{
MessageID: key,
TemplateData: maps,
})
}
return content
}
func GetMsgByKey(key string) string {
content := ginI18n.MustGetMessage(&i18n.LocalizeConfig{
MessageID: key,
})
return content
}
2022-08-16 23:30:23 +08:00
//go:embed lang/*
var fs embed.FS
func GinI18nLocalize() gin.HandlerFunc {
return ginI18n.Localize(
ginI18n.WithBundle(&ginI18n.BundleCfg{
RootPath: "./lang",
2023-07-01 22:56:13 +08:00
AcceptLanguage: []language.Tag{language.Chinese, language.English, language.TraditionalChinese},
2022-08-16 23:30:23 +08:00
DefaultLanguage: language.Chinese,
FormatBundleFile: "yaml",
UnmarshalFunc: yaml.Unmarshal,
Loader: &ginI18n.EmbedLoader{FS: fs},
}),
ginI18n.WithGetLngHandle(
func(context *gin.Context, defaultLng string) string {
lng := context.GetHeader("Accept-Language")
if lng == "" {
return defaultLng
}
return lng
},
))
}