mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-17 01:06:37 +08:00
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package i18n
|
|
|
|
import (
|
|
"embed"
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
//go:embed locales/*.json
|
|
var localesFS embed.FS
|
|
|
|
var (
|
|
translations = make(map[string]map[string]string)
|
|
defaultLang = "en"
|
|
ContextKey = "i18n"
|
|
)
|
|
|
|
// Init loads all translation files from embedded filesystem
|
|
func Init() error {
|
|
entries, err := localesFS.ReadDir("locales")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, entry := range entries {
|
|
if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".json") {
|
|
continue
|
|
}
|
|
|
|
langCode := strings.TrimSuffix(entry.Name(), ".json")
|
|
content, err := localesFS.ReadFile("locales/" + entry.Name())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var translation map[string]string
|
|
if err := json.Unmarshal(content, &translation); err != nil {
|
|
return err
|
|
}
|
|
translations[langCode] = translation
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetLang(c *gin.Context) string {
|
|
rawLang, ok := c.Get(ContextKey)
|
|
if !ok {
|
|
return defaultLang
|
|
}
|
|
lang, _ := rawLang.(string)
|
|
if lang != "" {
|
|
return lang
|
|
}
|
|
return defaultLang
|
|
}
|
|
|
|
func Translate(c *gin.Context, message string) string {
|
|
lang := GetLang(c)
|
|
return translateHelper(lang, message)
|
|
}
|
|
|
|
func translateHelper(lang, message string) string {
|
|
if trans, ok := translations[lang]; ok {
|
|
if translated, exists := trans[message]; exists {
|
|
return translated
|
|
}
|
|
}
|
|
return message
|
|
}
|