1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-13 00:07:59 +02:00

rewrite language detection, rewrite tests

This commit is contained in:
Anthony HAMON 2018-08-20 21:04:04 +02:00
parent 3c0fb9b324
commit e4070ccb4f
3 changed files with 65 additions and 68 deletions

View File

@ -51,10 +51,7 @@ func NewApp(config config.AppConfigurer) (*App, error) {
return app, err return app, err
} }
app.Tr, err = i18n.NewLocalizer(app.Log) app.Tr = i18n.NewLocalizer(app.Log)
if err != nil {
return app, err
}
app.GitCommand, err = commands.NewGitCommand(app.Log, app.OSCommand) app.GitCommand, err = commands.NewGitCommand(app.Log, app.OSCommand)
if err != nil { if err != nil {

View File

@ -18,33 +18,12 @@ type Localizer struct {
} }
// NewLocalizer creates a new Localizer // NewLocalizer creates a new Localizer
func NewLocalizer(log *logrus.Logger) (*Localizer, error) { func NewLocalizer(log *logrus.Logger) *Localizer {
userLang := detectLanguage(jibber_jabber.DetectLanguage)
// detect the user's language
userLang, err := jibber_jabber.DetectLanguage()
if err != nil {
if err.Error() != "Could not detect Language" {
return nil, err
}
userLang = "C"
}
log.Info("language: " + userLang) log.Info("language: " + userLang)
// create a i18n bundle that can be used to add translations and other things return setupLocalizer(log, userLang)
i18nBundle := &i18n.Bundle{DefaultLanguage: language.English}
addBundles(log, i18nBundle)
// return the new localizer that can be used to translate text
i18nLocalizer := i18n.NewLocalizer(i18nBundle, userLang)
localizer := &Localizer{
i18nLocalizer: i18nLocalizer,
language: userLang,
Log: log,
}
return localizer, nil
} }
// Localize handels the translations // Localize handels the translations
@ -96,3 +75,29 @@ func addBundles(log *logrus.Logger, i18nBundle *i18n.Bundle) {
} }
} }
// detectLanguage extracts user language from environment
func detectLanguage(langDetector func() (string, error)) string {
if userLang, err := langDetector(); err == nil {
return userLang
}
return "C"
}
// setupLocalizer creates a new localizer using given userLang
func setupLocalizer(log *logrus.Logger, userLang string) *Localizer {
// create a i18n bundle that can be used to add translations and other things
i18nBundle := &i18n.Bundle{DefaultLanguage: language.English}
addBundles(log, i18nBundle)
// return the new localizer that can be used to translate text
i18nLocalizer := i18n.NewLocalizer(i18nBundle, userLang)
return &Localizer{
i18nLocalizer: i18nLocalizer,
language: userLang,
Log: log,
}
}

View File

@ -1,7 +1,7 @@
package i18n package i18n
import ( import (
"os" "fmt"
"testing" "testing"
"github.com/nicksnyder/go-i18n/v2/i18n" "github.com/nicksnyder/go-i18n/v2/i18n"
@ -11,38 +11,46 @@ import (
) )
func TestNewLocalizer(t *testing.T) { func TestNewLocalizer(t *testing.T) {
type scenario struct { assert.NotNil(t, NewLocalizer(logrus.New()))
setup func() }
test func(*Localizer, error)
teardown func()
}
LCALL := os.Getenv("LC_ALL") func TestDetectLanguage(t *testing.T) {
LANG := os.Getenv("LANG") type scenario struct {
langDetector func() (string, error)
expected string
}
scenarios := []scenario{ scenarios := []scenario{
{ {
func() { func() (string, error) {
os.Setenv("LC_ALL", "") return "", fmt.Errorf("An error occurred")
os.Setenv("LANG", "")
},
func(l *Localizer, err error) {
assert.EqualValues(t, "C", l.GetLanguage())
},
func() {
os.Setenv("LC_ALL", LCALL)
os.Setenv("LANG", LANG)
}, },
"C",
}, },
{ {
func() { func() (string, error) {
os.Setenv("LC_ALL", "whatever") return "en", nil
os.Setenv("LANG", "whatever")
}, },
func(l *Localizer, err error) { "en",
assert.NoError(t, err) },
}
assert.EqualValues(t, "whatever", l.GetLanguage()) for _, s := range scenarios {
assert.EqualValues(t, s.expected, detectLanguage(s.langDetector))
}
}
func TestLocalizer(t *testing.T) {
type scenario struct {
userLang string
test func(*Localizer)
}
scenarios := []scenario{
{
"C",
func(l *Localizer) {
assert.EqualValues(t, "C", l.GetLanguage())
assert.Equal(t, "Diff", l.Localize(&i18n.LocalizeConfig{ assert.Equal(t, "Diff", l.Localize(&i18n.LocalizeConfig{
DefaultMessage: &i18n.Message{ DefaultMessage: &i18n.Message{
ID: "DiffTitle", ID: "DiffTitle",
@ -51,18 +59,10 @@ func TestNewLocalizer(t *testing.T) {
assert.Equal(t, "Diff", l.SLocalize("DiffTitle")) assert.Equal(t, "Diff", l.SLocalize("DiffTitle"))
assert.Equal(t, "Are you sure you want delete the branch test ?", l.TemplateLocalize("DeleteBranchMessage", Teml{"selectedBranchName": "test"})) assert.Equal(t, "Are you sure you want delete the branch test ?", l.TemplateLocalize("DeleteBranchMessage", Teml{"selectedBranchName": "test"}))
}, },
func() {
os.Setenv("LC_ALL", LCALL)
os.Setenv("LANG", LANG)
},
}, },
{ {
func() { "nl",
os.Setenv("LC_ALL", "nl") func(l *Localizer) {
},
func(l *Localizer, err error) {
assert.NoError(t, err)
assert.EqualValues(t, "nl", l.GetLanguage()) assert.EqualValues(t, "nl", l.GetLanguage())
assert.Equal(t, "Diff", l.Localize(&i18n.LocalizeConfig{ assert.Equal(t, "Diff", l.Localize(&i18n.LocalizeConfig{
DefaultMessage: &i18n.Message{ DefaultMessage: &i18n.Message{
@ -72,15 +72,10 @@ func TestNewLocalizer(t *testing.T) {
assert.Equal(t, "Diff", l.SLocalize("DiffTitle")) assert.Equal(t, "Diff", l.SLocalize("DiffTitle"))
assert.Equal(t, "Weet je zeker dat je test branch wil verwijderen?", l.TemplateLocalize("DeleteBranchMessage", Teml{"selectedBranchName": "test"})) assert.Equal(t, "Weet je zeker dat je test branch wil verwijderen?", l.TemplateLocalize("DeleteBranchMessage", Teml{"selectedBranchName": "test"}))
}, },
func() {
os.Setenv("LC_ALL", LCALL)
},
}, },
} }
for _, s := range scenarios { for _, s := range scenarios {
s.setup() s.test(setupLocalizer(logrus.New(), s.userLang))
s.test(NewLocalizer(logrus.New()))
s.teardown()
} }
} }