Skip to content

Commit

Permalink
Fix language auto detection (#3744)
Browse files Browse the repository at this point in the history
- **PR Description**

Fix a regression (introduced with #3649) that broke language
auto-detection. When starting lazygit with the `gui.language` config set
to "auto" (which is the default), lazygit would fail to start if the
LANG environment is set to one of our supported languages.

For example:
```
$ export LANG=nl_NL
$ lazygit
2024/07/13 11:43:03 open translations/nl-NL.json: file does not exist
```

Fixes #3743
  • Loading branch information
stefanhaller authored Jul 13, 2024
2 parents e1d973d + ae4a579 commit 71ad3fa
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/i18n/i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

This comment has been minimized.

Copy link
@redah26

redah26 Jul 22, 2024

return newTranslationSet(log, languageCode)

return newTranslationSet(log, languageCode)
}
}

Expand Down
84 changes: 84 additions & 0 deletions pkg/i18n/i18n_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@ package i18n

import (
"fmt"
"io"
"runtime"
"testing"

"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -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)
}
})
}
}

0 comments on commit 71ad3fa

Please sign in to comment.