diff --git a/controllers/util.go b/controllers/util.go index b7c8401c..e2333405 100644 --- a/controllers/util.go +++ b/controllers/util.go @@ -17,6 +17,7 @@ package controllers import ( "fmt" "strconv" + "strings" "github.com/casdoor/casdoor/conf" "github.com/casdoor/casdoor/i18n" @@ -56,7 +57,7 @@ func (c *ApiController) T(error string) string { // GetAcceptLanguage ... func (c *ApiController) GetAcceptLanguage() string { lang := c.Ctx.Request.Header.Get("Accept-Language") - if lang == "" { + if lang == "" || !strings.Contains(conf.GetConfigString("languages"), lang[0:2]) { lang = "en" } return lang[0:2] diff --git a/i18n/util.go b/i18n/util.go index 8bee7885..b0ec9c73 100644 --- a/i18n/util.go +++ b/i18n/util.go @@ -17,7 +17,6 @@ package i18n import ( "embed" "fmt" - "log" "strings" "github.com/casdoor/casdoor/util" @@ -27,10 +26,7 @@ import ( //go:embed languages/*.ini var f embed.FS -var ( - langMapConfig = make(map[string]*ini.File) - isNotFirstLoad = make(map[string]bool) -) +var langMapConfig = make(map[string]*ini.File) func getI18nFilePath(language string) string { return fmt.Sprintf("../web/src/locales/%s/data.json", language) @@ -77,16 +73,14 @@ func applyData(data1 *I18nData, data2 *I18nData) { func Translate(lang string, error string) string { parts := strings.Split(error, ".") if !strings.Contains(error, ".") || len(parts) != 2 { - log.Println("Invalid Error Name") - return "" + return "Translate Error: " + error } - if isNotFirstLoad[lang] { + if langMapConfig[lang] != nil { return langMapConfig[lang].Section(parts[0]).Key(parts[1]).String() } else { file, _ := f.ReadFile("languages/locale_" + lang + ".ini") langMapConfig[lang], _ = ini.Load(file) - isNotFirstLoad[lang] = true return langMapConfig[lang].Section(parts[0]).Key(parts[1]).String() } } diff --git a/web/src/Setting.js b/web/src/Setting.js index 87455107..016305e2 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -553,6 +553,9 @@ export function setLanguage(language) { } export function getAcceptLanguage() { + if (i18next.language === null || i18next.language === "") { + return "en;q=0.9,en;q=0.8"; + } return i18next.language + ";q=0.9,en;q=0.8"; }