59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
|
package translator
|
||
|
|
||
|
import (
|
||
|
"path/filepath"
|
||
|
"runtime"
|
||
|
|
||
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||
|
"github.com/pelletier/go-toml/v2"
|
||
|
"golang.org/x/text/language"
|
||
|
)
|
||
|
|
||
|
var Bundle *i18n.Bundle
|
||
|
|
||
|
func init() {
|
||
|
var err error
|
||
|
|
||
|
_, currentFile, _, _ := runtime.Caller(0)
|
||
|
currentDir := filepath.Dir(currentFile)
|
||
|
|
||
|
// 解析模板文件
|
||
|
globpath := filepath.Join(currentDir, "/*.toml")
|
||
|
|
||
|
Bundle = i18n.NewBundle(language.Chinese)
|
||
|
Bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
|
||
|
matches, err := filepath.Glob(globpath)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
for _, m := range matches {
|
||
|
Bundle.MustLoadMessageFile(m)
|
||
|
}
|
||
|
|
||
|
// localizer := i18n.NewLocalizer(Bundle, "zh_cn")
|
||
|
// log.Println(localizer.Localize(&i18n.LocalizeConfig{
|
||
|
// MessageID: "format_account_is_insufficient",
|
||
|
// TemplateData: map[string]any{
|
||
|
// "CatalogCurrency": "USDT",
|
||
|
// },
|
||
|
// }))
|
||
|
|
||
|
}
|
||
|
|
||
|
func Localize(MessageID TrCode, Lang string, MessageTemplateParam any) (string, error) {
|
||
|
var localizer = i18n.NewLocalizer(Bundle, Lang)
|
||
|
return localizer.Localize(&i18n.LocalizeConfig{
|
||
|
MessageID: string(MessageID),
|
||
|
TemplateData: MessageTemplateParam,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func LocalizeEx(MessageID TrCode, MessageTemplateParam any, Langs ...string) (string, error) {
|
||
|
var localizer = i18n.NewLocalizer(Bundle, Langs...)
|
||
|
|
||
|
return localizer.Localize(&i18n.LocalizeConfig{
|
||
|
MessageID: string(MessageID),
|
||
|
TemplateData: MessageTemplateParam,
|
||
|
})
|
||
|
}
|