diff options
-rw-r--r-- | pkg/i18n/i18n.go | 2 | ||||
-rw-r--r-- | pkg/i18n/i18n_test.go | 84 |
2 files changed, 85 insertions, 1 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 7023ea40a..8c5787fcb 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: 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) + } + }) + } +} |