From e12372e28c41ba5702c3267cee7701f112033589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Qui=C3=B1ones=20Requelme?= Date: Thu, 15 Jun 2023 20:55:29 -0600 Subject: [PATCH] Improved translation set load --- pkg/i18n/i18n.go | 54 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index 658fd67d..303b1317 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -1,12 +1,10 @@ package i18n import ( - "strings" - - "github.com/imdario/mergo" - "github.com/cloudfoundry/jibber_jabber" "github.com/go-errors/errors" + "github.com/imdario/mergo" + "github.com/samber/lo" "github.com/sirupsen/logrus" ) @@ -19,13 +17,12 @@ type Localizer struct { func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*TranslationSet, error) { if configLanguage == "auto" { language := detectLanguage(jibber_jabber.DetectLanguage) + return NewTranslationSet(log, language), nil } - for key := range GetTranslationSets() { - if key == configLanguage { - return NewTranslationSet(log, configLanguage), nil - } + if lo.Contains(getSupportedLanguages(), configLanguage) { + return NewTranslationSet(log, configLanguage), nil } return NewTranslationSet(log, "en"), errors.New("Language not found: " + configLanguage) @@ -35,12 +32,9 @@ func NewTranslationSet(log *logrus.Entry, language string) *TranslationSet { log.Info("language: " + language) baseSet := englishSet() + otherSet := getTranslationSet(language) - for languageCode, translationSet := range GetTranslationSets() { - if strings.HasPrefix(language, languageCode) { - _ = mergo.Merge(&baseSet, translationSet, mergo.WithOverride) - } - } + _ = mergo.Merge(&baseSet, otherSet, mergo.WithOverride) return &baseSet } @@ -57,6 +51,40 @@ func GetTranslationSets() map[string]TranslationSet { } } +// getTranslationSet returns the translation set that matches the given language. +// +// It returns an english translation set if not found. +func getTranslationSet(languageCode string) TranslationSet { + switch languageCode { + case "pl": + return polishSet() + case "nl": + return dutchSet() + case "de": + return germanSet() + case "tr": + return turkishSet() + case "en": + return englishSet() + case "fr": + return frenchSet() + } + + return englishSet() +} + +// getSupportedLanguages returns all the supported languages. +func getSupportedLanguages() []string { + return []string{ + "pl", + "nl", + "de", + "tr", + "en", + "fr", + } +} + // detectLanguage extracts user language from environment func detectLanguage(langDetector func() (string, error)) string { if userLang, err := langDetector(); err == nil {