From cfd47b2877cab6c357c45f176338dee82f861990 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 6 Jul 2019 12:22:20 +1000 Subject: [PATCH] add get_required_translations.go --- pkg/i18n/english.go | 2 -- pkg/i18n/i18n.go | 29 +++++++++--------- scripts/generate_cheatsheet.go | 4 +-- .../translations/get_required_translations.go | 30 +++++++++++++++++++ 4 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 scripts/translations/get_required_translations.go diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index d8e660fc..48442c0c 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -2,8 +2,6 @@ package i18n // TranslationSet is a set of localised strings for a given language type TranslationSet struct { - AddFavourite string - ErrorMessage string NotEnoughSpace string ProjectTitle string MainTitle string diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index 405dd819..bdc62ab1 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -22,25 +22,26 @@ func NewTranslationSet(log *logrus.Entry) *TranslationSet { log.Info("language: " + userLang) - set := englishSet() + baseSet := englishSet() - if strings.HasPrefix(userLang, "pl") { - _ = mergo.Merge(&set, polishSet(), mergo.WithOverride) + for languageCode, translationSet := range GetTranslationSets() { + if strings.HasPrefix(userLang, languageCode) { + _ = mergo.Merge(&baseSet, translationSet, mergo.WithOverride) + } } - if strings.HasPrefix(userLang, "nl") { - _ = mergo.Merge(&set, dutchSet(), mergo.WithOverride) - } + return &baseSet +} - if strings.HasPrefix(userLang, "de") { - _ = mergo.Merge(&set, germanSet(), mergo.WithOverride) +// GetTranslationSets gets all the translation sets, keyed by language code +func GetTranslationSets() map[string]TranslationSet { + return map[string]TranslationSet{ + "pl": polishSet(), + "nl": dutchSet(), + "de": germanSet(), + "tr": turkishSet(), + "en": englishSet(), } - - if strings.HasPrefix(userLang, "tr") { - _ = mergo.Merge(&set, turkishSet(), mergo.WithOverride) - } - - return &set } // detectLanguage extracts user language from environment diff --git a/scripts/generate_cheatsheet.go b/scripts/generate_cheatsheet.go index 111f53ad..4ef6608e 100644 --- a/scripts/generate_cheatsheet.go +++ b/scripts/generate_cheatsheet.go @@ -17,6 +17,7 @@ import ( "github.com/jesseduffield/lazydocker/pkg/app" "github.com/jesseduffield/lazydocker/pkg/config" "github.com/jesseduffield/lazydocker/pkg/gui" + "github.com/jesseduffield/lazydocker/pkg/i18n" ) type bindingSection struct { @@ -25,13 +26,12 @@ type bindingSection struct { } func main() { - langs := []string{"pl", "nl", "en"} mConfig, err := config.NewAppConfig("lazydocker", "", "", "", "", true, nil, "") if err != nil { panic(err) } - for _, lang := range langs { + for lang := range i18n.GetTranslationSets() { os.Setenv("LC_ALL", lang) mApp, _ := app.NewApp(mConfig) file, err := os.Create(getProjectRoot() + "/docs/keybindings/Keybindings_" + lang + ".md") diff --git a/scripts/translations/get_required_translations.go b/scripts/translations/get_required_translations.go new file mode 100644 index 00000000..9e0dd400 --- /dev/null +++ b/scripts/translations/get_required_translations.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "reflect" + + "github.com/jesseduffield/lazydocker/pkg/i18n" +) + +func main() { + fmt.Println(getOutstandingTranslations()) +} + +// adapted from https://github.com/a8m/reflect-examples#read-struct-tags +func getOutstandingTranslations() string { + output := "" + for languageCode, translationSet := range i18n.GetTranslationSets() { + output += languageCode + ":\n" + v := reflect.ValueOf(translationSet) + + for i := 0; i < v.NumField(); i++ { + value := v.Field(i).String() + if value == "" { + output += v.Type().Field(i).Name + "\n" + } + } + output += "\n" + } + return output +}