diff --git a/middleware/i18n.go b/middleware/i18n.go index 87886d4a..5c44dc4a 100644 --- a/middleware/i18n.go +++ b/middleware/i18n.go @@ -10,85 +10,51 @@ package middleware -//import ( -// "github.com/astaxie/beego/config" -// "os" -// "path" -//) +import ( + "encoding/json" + "io/ioutil" + "os" +) -//type Translation struct { -// filetype string -// CurrentLocal string -// Locales map[string]map[string]string -//} +type Translation struct { + filepath string + CurrentLocal string + Locales map[string]map[string]string +} -//func NewLocale(filetype string) *Translation { -// return &Translation{ -// filetype: filetype, -// CurrentLocal: "zh", -// Locales: make(map[string]map[string]string), -// } -//} +func NewLocale(filepath string, defaultlocal string) *Translation { + i18n := make(map[string]map[string]string) + file, err := os.Open(filepath) + if err != nil { + panic("open " + filepath + " err :" + err.Error()) + } + data, err := ioutil.ReadAll(file) + if err != nil { + panic("read " + filepath + " err :" + err.Error()) + } + err = json.Unmarshal(data, &i18n) + if err != nil { + panic("json.Unmarshal " + filepath + " err :" + err.Error()) + } + return &Translation{ + filepath: filepath, + CurrentLocal: defaultlocal, + Locales: i18n, + } +} -//func (t *Translation) loadTranslations(dirPath string) error { -// dir, err := os.Open(dirPath) -// if err != nil { -// return err -// } -// defer dir.Close() +func (t *Translation) SetLocale(local string) { + t.CurrentLocal = local +} -// names, err := dir.Readdirnames(-1) -// if err != nil { -// return err -// } - -// for _, name := range names { -// fullPath := path.Join(dirPath, name) - -// fi, err := os.Stat(fullPath) -// if err != nil { -// return err -// } - -// if fi.IsDir() { -// continue -// } else { -// if err := t.loadTranslation(fullPath, name); err != nil { -// return err -// } -// } -// } - -// return nil -//} - -//func (t *Translation) loadTranslation(fullPath, locale string) error { - -// sourceKey2Trans, ok := t.Locales[locale] -// if !ok { -// sourceKey2Trans = make(map[string]string) - -// t.Locales[locale] = sourceKey2Trans -// } - -// for _, m := range trf.Messages { -// if m.Translation != "" { -// sourceKey2Trans[sourceKey(m.Source, m.Context)] = m.Translation -// } -// } - -// return nil -//} - -//func (t *Translation) SetLocale(local string) { -// t.CurrentLocal = local -//} - -//func (t *Translation) Translate(key string) string { -// if ct, ok := t.Locales[t.CurrentLocal]; ok { -// if v, o := ct[key]; o { -// return v -// } -// } -// return key -//} +func (t *Translation) Translate(key string, local string) string { + if local == "" { + local = t.CurrentLocal + } + if ct, ok := t.Locales[key]; ok { + if v, o := ct[local]; o { + return v + } + } + return key +}