From abc87ba9eaefa41a750da82b60ab7d9a864ca68a Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sat, 6 May 2023 11:47:01 +0800 Subject: [PATCH] :art: Plugin i18n --- kernel/model/plugin.go | 44 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/kernel/model/plugin.go b/kernel/model/plugin.go index aa2b1a36f..fca4d3482 100644 --- a/kernel/model/plugin.go +++ b/kernel/model/plugin.go @@ -104,15 +104,47 @@ func LoadPetals() (ret []*Petal) { } } - i18nPath := filepath.Join(pluginDir, "i18n", Conf.Lang) - if gulu.File.IsExist(i18nPath) { - data, err := filelock.ReadFile(i18nPath) + i18nDir := filepath.Join(pluginDir, "i18n") + if gulu.File.IsDir(i18nDir) { + langJSONs, err := os.ReadDir(i18nDir) if nil != err { logging.LogErrorf("read plugin [%s] i18n failed: %s", petal.Name, err) } else { - petal.I18n = map[string]interface{}{} - if err = gulu.JSON.UnmarshalJSON(data, &petal.I18n); nil != err { - logging.LogErrorf("unmarshal plugin [%s] i18n failed: %s", petal.Name, err) + preferredLang := Conf.Lang + ".json" + foundPreferredLang := false + foundEnUS := false + foundZhCN := false + for _, langJSON := range langJSONs { + if langJSON.Name() == preferredLang { + foundPreferredLang = true + break + } + if langJSON.Name() == "en_US.json" { + foundEnUS = true + } + if langJSON.Name() == "zh_CN.json" { + foundZhCN = true + } + } + + if !foundPreferredLang { + if foundEnUS { + preferredLang = "en_US.json" + } else if foundZhCN { + preferredLang = "zh_CN.json" + } else { + preferredLang = langJSONs[0].Name() + } + } + + data, err := filelock.ReadFile(filepath.Join(i18nDir, preferredLang)) + if nil != err { + logging.LogErrorf("read plugin [%s] i18n failed: %s", petal.Name, err) + } else { + petal.I18n = map[string]interface{}{} + if err = gulu.JSON.UnmarshalJSON(data, &petal.I18n); nil != err { + logging.LogErrorf("unmarshal plugin [%s] i18n failed: %s", petal.Name, err) + } } } }