mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-11-25 22:32:13 +02:00
Fix language auto detection (#3744)
- **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
This commit is contained in:
@@ -24,7 +24,7 @@ func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*Tra
|
|||||||
language := detectLanguage(jibber_jabber.DetectIETF)
|
language := detectLanguage(jibber_jabber.DetectIETF)
|
||||||
for _, languageCode := range languageCodes {
|
for _, languageCode := range languageCodes {
|
||||||
if strings.HasPrefix(language, languageCode) {
|
if strings.HasPrefix(language, languageCode) {
|
||||||
return newTranslationSet(log, language)
|
return newTranslationSet(log, languageCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ package i18n
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -33,3 +36,84 @@ func TestDetectLanguage(t *testing.T) {
|
|||||||
assert.EqualValues(t, s.expected, detectLanguage(s.langDetector))
|
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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user