From da86096e19fc58a8b796f21cc0f8089bb64ad185 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 13 Jul 2024 11:35:15 +0200 Subject: [PATCH 1/2] Add test that demonstrates bug with language auto-detection --- pkg/i18n/i18n_test.go | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/pkg/i18n/i18n_test.go b/pkg/i18n/i18n_test.go index 7023ea40a..28b96bc4f 100644 --- a/pkg/i18n/i18n_test.go +++ b/pkg/i18n/i18n_test.go @@ -2,8 +2,11 @@ package i18n import ( "fmt" + "io" + "runtime" "testing" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" ) @@ -33,3 +36,84 @@ func TestDetectLanguage(t *testing.T) { assert.EqualValues(t, s.expected, detectLanguage(s.langDetector)) } } + +// Can't use utils.NewDummyLog() because of a cyclic dependency +func newDummyLog() *logrus.Entry { + log := logrus.New() + log.Out = io.Discard + return log.WithField("test", "test") +} + +func TestNewTranslationSetFromConfig(t *testing.T) { + if runtime.GOOS == "windows" { + // These tests are based on setting the LANG environment variable, which + // isn't respected on Windows. + t.Skip("Skipping test on Windows") + } + + scenarios := []struct { + name string + configLanguage string + envLanguage string + expected string + expectedErr bool + }{ + { + name: "configLanguage is nl", + configLanguage: "nl", + envLanguage: "en_US", + expected: "nl", + expectedErr: false, + }, + { + name: "configLanguage is an unsupported language", + configLanguage: "xy", + envLanguage: "en_US", + expectedErr: true, + }, + { + name: "auto-detection without LANG set", + configLanguage: "auto", + envLanguage: "", + expected: "en", + expectedErr: false, + }, + { + name: "auto-detection with LANG set to nl_NL", + configLanguage: "auto", + envLanguage: "nl_NL", + expected: "nl", + expectedErr: true, // Demonstrates the bug, this should be false + }, + { + name: "auto-detection with LANG set to zh-CN", + configLanguage: "auto", + envLanguage: "zh-CN", + expected: "zh-CN", + expectedErr: false, + }, + { + name: "auto-detection with LANG set to an unsupported language", + configLanguage: "auto", + envLanguage: "xy_XY", + expected: "en", + expectedErr: false, + }, + } + + for _, s := range scenarios { + t.Run(s.name, func(t *testing.T) { + log := newDummyLog() + t.Setenv("LANG", s.envLanguage) + actualTranslationSet, err := NewTranslationSetFromConfig(log, s.configLanguage) + if s.expectedErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + + expectedTranslationSet, _ := newTranslationSet(log, s.expected) + assert.Equal(t, expectedTranslationSet, actualTranslationSet) + } + }) + } +} From ae4a579153bbe799a785c27f956bca5be46e429c Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 13 Jul 2024 11:10:38 +0200 Subject: [PATCH 2/2] Fix language auto-detection Starting lazygit with an environment containing LANG=ko_KO or LANG=nl_NL would result in an error at startup. --- pkg/i18n/i18n.go | 2 +- pkg/i18n/i18n_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index f9febbe01..3848d42cf 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -24,7 +24,7 @@ func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*Tra language := detectLanguage(jibber_jabber.DetectIETF) for _, languageCode := range languageCodes { if strings.HasPrefix(language, languageCode) { - return newTranslationSet(log, language) + return newTranslationSet(log, languageCode) } } diff --git a/pkg/i18n/i18n_test.go b/pkg/i18n/i18n_test.go index 28b96bc4f..8c5787fcb 100644 --- a/pkg/i18n/i18n_test.go +++ b/pkg/i18n/i18n_test.go @@ -83,7 +83,7 @@ func TestNewTranslationSetFromConfig(t *testing.T) { configLanguage: "auto", envLanguage: "nl_NL", expected: "nl", - expectedErr: true, // Demonstrates the bug, this should be false + expectedErr: false, }, { name: "auto-detection with LANG set to zh-CN",