DeployHelper/internal/conf/locales/i18n.go

61 lines
984 B
Go
Raw Normal View History

2025-08-01 16:38:08 +08:00
package locales
import (
_ "embed"
"strings"
"gopkg.in/yaml.v2"
)
//go:embed zh-cn.yaml
var Zhcn string
// Dictionary 字典
var Dictionary *map[any]any
// LoadLocales 读取国际化文件
func LoadLocales() error {
m := make(map[any]any)
err := yaml.Unmarshal([]byte(Zhcn), &m)
if err != nil {
return err
}
Dictionary = &m
return nil
}
// T 翻译
func T(key string) string {
dic := *Dictionary
keys := strings.Split(key, ".")
for index, path := range keys {
// 如果到达了最后一层,寻找目标翻译
if len(keys) == (index + 1) {
for k, v := range dic {
if k, ok := k.(string); ok {
if k == path {
if value, ok := v.(string); ok {
return value
}
}
}
}
return path
}
// 如果还有下一层,继续寻找
for k, v := range dic {
if ks, ok := k.(string); !ok {
return ""
} else if ks == path {
if dic, ok = v.(map[any]any); !ok {
return path
}
}
}
}
return ""
}