fix(localise): support LANGUAGE locale lists

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-02 07:04:54 +00:00
parent dd42265f90
commit 7b36000b7d
2 changed files with 32 additions and 1 deletions

View file

@ -114,7 +114,12 @@ func CurrentPluralCategory(n int) PluralCategory {
}
func detectLanguage(supported []language.Tag) string {
for _, langEnv := range []string{os.Getenv("LC_ALL"), os.Getenv("LC_MESSAGES"), os.Getenv("LANG")} {
for _, langEnv := range []string{
os.Getenv("LC_ALL"),
firstLocaleFromList(os.Getenv("LANGUAGE")),
os.Getenv("LC_MESSAGES"),
os.Getenv("LANG"),
} {
if langEnv == "" {
continue
}
@ -145,6 +150,18 @@ func detectLanguageFromEnv(langEnv string, supported []language.Tag) string {
return bestMatch.String()
}
func firstLocaleFromList(langList string) string {
if langList == "" {
return ""
}
for _, lang := range core.Split(langList, ":") {
if trimmed := core.Trim(lang); trimmed != "" {
return trimmed
}
}
return ""
}
func normalizeLanguageTag(lang string) string {
lang = core.Trim(lang)
if lang == "" {

View file

@ -279,6 +279,20 @@ func TestDetectLanguage_SkipsInvalidHigherPriorityLocale(t *testing.T) {
assert.Equal(t, "fr", result, "invalid LC_ALL should not block a valid lower-priority locale")
}
func TestDetectLanguage_PrefersLanguageList(t *testing.T) {
t.Setenv("LANGUAGE", "fr_FR.UTF-8:de_DE.UTF-8")
t.Setenv("LANG", "en_US.UTF-8")
supported := []language.Tag{
language.AmericanEnglish,
language.French,
language.German,
}
result := detectLanguage(supported)
assert.Equal(t, "fr", result, "LANGUAGE should be considered before LANG")
}
// --- Mode.String() ---
func TestMode_String_Good(t *testing.T) {