61 lines
984 B
Go
61 lines
984 B
Go
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 ""
|
|
}
|