diff options
author | Naohisa Murakami <tiqwab.ch90@gmail.com> | 2021-04-15 03:52:01 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-14 19:52:01 +0100 |
commit | 1426601cf7dd6e2cefca218a84d38905dc1cb295 (patch) | |
tree | 3adb7d635388cb8d10634b62870f80f5147591f3 /modules/translation/translation.go | |
parent | 078df7a39272fb4c20db2d72b39338f3d4920f1b (diff) | |
download | gitea-1426601cf7dd6e2cefca218a84d38905dc1cb295.tar.gz gitea-1426601cf7dd6e2cefca218a84d38905dc1cb295.zip |
Use index of the supported tags to choose user lang (#15452)
Fix #14793.
The previous implementation used the first return value of matcher.Match, which is the chosen language tag but may contain extensions such as de-DE-u-rg-chzzzz.
As mentioned in the documentation of language package, matcher.Match also returns the index of the supported tags, so I think it is better to use it rather than manipulate the returned language tag.
Diffstat (limited to 'modules/translation/translation.go')
-rw-r--r-- | modules/translation/translation.go | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/modules/translation/translation.go b/modules/translation/translation.go index dec48c7a65..77cc9ac7f5 100644 --- a/modules/translation/translation.go +++ b/modules/translation/translation.go @@ -25,8 +25,9 @@ type LangType struct { } var ( - matcher language.Matcher - allLangs []LangType + matcher language.Matcher + allLangs []LangType + supportedTags []language.Tag ) // AllLangs returns all supported langauages @@ -50,12 +51,12 @@ func InitLocales() { } } - tags := make([]language.Tag, len(setting.Langs)) + supportedTags = make([]language.Tag, len(setting.Langs)) for i, lang := range setting.Langs { - tags[i] = language.Raw.Make(lang) + supportedTags[i] = language.Raw.Make(lang) } - matcher = language.NewMatcher(tags) + matcher = language.NewMatcher(supportedTags) for i := range setting.Names { key := "locale_" + setting.Langs[i] + ".ini" if err = i18n.SetMessageWithDesc(setting.Langs[i], setting.Names[i], localFiles[key]); err != nil { @@ -73,8 +74,9 @@ func InitLocales() { } // Match matches accept languages -func Match(tags ...language.Tag) (tag language.Tag, index int, c language.Confidence) { - return matcher.Match(tags...) +func Match(tags ...language.Tag) language.Tag { + _, i, _ := matcher.Match(tags...) + return supportedTags[i] } // locale represents the information of localization. |