var langDir = "langs"
var defaultLanguage string
var langs map[string]i18n.TranslateFunc
func Init() {
if langs == nil {
langs = make(map[string]i18n.TranslateFunc)
}
dirList, _ := ioutil.ReadDir(fmt.Sprintf("%s%s", env.GetPath(), langDir))
defaultLanguage = config.GetDefaultLanguage()
hasDefaultLanguage := false
for _, dir := range dirList {
lang := dir.Name()
files, _ := ioutil.ReadDir(fmt.Sprintf("%s%s/%s", env.GetPath(), langDir, lang))
if lang == defaultLanguage {
hasDefaultLanguage = true
}
for _, file := range files {
fileName := file.Name()
err := i18n.LoadTranslationFile(fmt.Sprintf("%s%s/%s/%s", env.GetPath(), langDir, lang, fileName))
if err != nil {
panic(fmt.Sprintf("Error loading language file -> %s/%s: %s", lang, fileName, err))
}
log.Info.Println("Loaded translation file", "->", fileName)
}
var err error
langs[lang], err = i18n.Tfunc(lang)
if err != nil {
panic(fmt.Sprintf("Error parsing language -> %s: %s", lang, err))
}
log.Info.Println("Finished loading language", "->", lang)
}
if !hasDefaultLanguage {
panic(fmt.Sprintf("There is no translation for %s", defaultLanguage))
}
}
func GetUserLanguage(r *http.Request) string {
ret := config.GetDefaultLanguage()
userLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
for _, userLang := range userLangs {
userLangStr := strings.Replace(userLang.String(), "-", "_", -1)
userLangSplitted := strings.Split(userLangStr, "_")
if LangExists(userLangStr) {
ret = userLangStr
break
} else if len(userLangSplitted) > 1 {
if LangExists(userLangSplitted[0]) {
ret = userLangSplitted[0]
break
}
}
}
return ret
}
func LangExists(lang string) bool {
_, ok := langs[lang]
return ok
}
func GetAll() []string {
var ret []string
for lang := range langs {
ret = append(ret, lang)
}
return ret
}
func Get(lang string, key string) string {
return GetPlural(lang, key, 1)
}
func GetPlural(lang string, key string, amount int) string {
ret := key
if LangExists(lang) {
ret = langs[lang](key, amount)
if ret == key && lang != defaultLanguage {
ret = Get(defaultLanguage, key)
}
}
return ret
}
Hello, I'm
Philipp König
a software developer based in Stuttgart, Germany.
I have created two browser extensions for Google Chrome and Microsoft Edge to improve the user experience by providing some new features within the browser.
I always disliked how bookmarks are managed in these browsers, especially when dealing with many entries and folders.
To circumvent this problem I created a browser extension which displays the bookmarks as a nested list in a togglable and highly user-configurable sidebar.
Currently over 450,000 people are benefiting from using my extensions.
Read moreI uploaded some of my projects to Github. Feel free to check them out and contribute by sending feedback, suggestions, or report issues.
Show profile