package ersteller_lib type Language string const ( En Language = "en" De Language = "de" ) type GlobalI18nTexts interface { Add(text I18nText) GlobalI18nTexts GetAllTexts() []I18nText } var GlobalI18n GlobalI18nTexts type GlobalI18nImplementation struct { i18nTexts map[string]I18nText } func (g GlobalI18nImplementation) GetAllTexts() []I18nText { allTexts := make([]I18nText, len(g.i18nTexts)) for _, value := range g.i18nTexts { allTexts = append(allTexts, value) } return allTexts } func (g GlobalI18nImplementation) Add(text I18nText) GlobalI18nTexts { if g.i18nTexts == nil { g.i18nTexts = make(map[string]I18nText) } g.i18nTexts[text.GetKey()] = text return g } type I18nText struct { langMap map[Language]string } func NewI18nText(langMap map[Language]string) I18nText { text := I18nText{langMap: langMap} GlobalI18n = GlobalI18n.Add(text) return text } func (t I18nText) FromLang(lang Language) string { return t.langMap[lang] } func (t I18nText) From(c HtmxContext) string { return t.FromLang(c.GetLanguage()) } func (t I18nText) GetKey() string { if t.langMap[En] != "" { return t.langMap[En] } // Get values of map as an array/slice var values []string for _, value := range t.langMap { if value != "" { values = append(values, value) } } // Return first available value if len(values) > 0 { return values[0] } return "" }