package i18n import ( "encoding/json" "fmt" "io/fs" "pms-api-go/pkg/configs" "pms-api-go/pkg/utils" "pms-api-go/web" "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/sirupsen/logrus" "golang.org/x/text/language" ) var i18nBundle *i18n.Bundle func InitBundle() { i18nBundle = i18n.NewBundle(language.English) i18nBundle.RegisterUnmarshalFunc("json", json.Unmarshal) files := []string{"zh_CN", "en_US"} for _, file := range files { filePath := fmt.Sprintf("%s/%s.json", configs.ConfigGlobal.I18nPath, file) if utils.PathExists(filePath) { _, err := i18nBundle.LoadMessageFile(filePath) if err != nil { logrus.Errorf("load i18n file %+v", err) } continue } buf, err := fs.ReadFile(web.ResourcesFiles, fmt.Sprintf("resources/%s.json", file)) if err != nil { if err != nil { logrus.Errorf("load i18n file %+v", err) } continue } i18nBundle.ParseMessageFileBytes(buf, fmt.Sprintf("resources/%s.json", file)) } } func Message(lang string, id string) string { localizer := i18n.NewLocalizer(i18nBundle, lang) result, err := localizer.Localize(&i18n.LocalizeConfig{ DefaultMessage: &i18n.Message{ ID: id, }, }) if err != nil { // lfshook.NewLogger().Warn(err) return id } return result } // func (b *i18n.Bundle) LoadMessageFileFS(fsys fs.FS, path string) (*i18n.MessageFile, error) { // buf, err := fs.ReadFile(fsys, path) // if err != nil { // return nil, err // } // return b.ParseMessageFileBytes(buf, path) // }