Improved translation set load

This commit is contained in:
Luis Quiñones Requelme 2023-06-15 20:55:29 -06:00
parent 15bc01b9af
commit e12372e28c

View file

@ -1,12 +1,10 @@
package i18n package i18n
import ( import (
"strings"
"github.com/imdario/mergo"
"github.com/cloudfoundry/jibber_jabber" "github.com/cloudfoundry/jibber_jabber"
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/imdario/mergo"
"github.com/samber/lo"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -19,13 +17,12 @@ type Localizer struct {
func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*TranslationSet, error) { func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*TranslationSet, error) {
if configLanguage == "auto" { if configLanguage == "auto" {
language := detectLanguage(jibber_jabber.DetectLanguage) language := detectLanguage(jibber_jabber.DetectLanguage)
return NewTranslationSet(log, language), nil return NewTranslationSet(log, language), nil
} }
for key := range GetTranslationSets() { if lo.Contains(getSupportedLanguages(), configLanguage) {
if key == configLanguage { return NewTranslationSet(log, configLanguage), nil
return NewTranslationSet(log, configLanguage), nil
}
} }
return NewTranslationSet(log, "en"), errors.New("Language not found: " + configLanguage) 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) log.Info("language: " + language)
baseSet := englishSet() baseSet := englishSet()
otherSet := getTranslationSet(language)
for languageCode, translationSet := range GetTranslationSets() { _ = mergo.Merge(&baseSet, otherSet, mergo.WithOverride)
if strings.HasPrefix(language, languageCode) {
_ = mergo.Merge(&baseSet, translationSet, mergo.WithOverride)
}
}
return &baseSet 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 // detectLanguage extracts user language from environment
func detectLanguage(langDetector func() (string, error)) string { func detectLanguage(langDetector func() (string, error)) string {
if userLang, err := langDetector(); err == nil { if userLang, err := langDetector(); err == nil {