hibiscus/i18n.go
2024-05-18 16:15:20 +03:00

40 lines
936 B
Go

package main
import (
"embed"
"encoding/json"
"log/slog"
)
//go:embed i18n
var I18n embed.FS
var Translations = map[string]string{}
// SetLanguage loads a json file for selected language into the Translations map, with english language as a fallback
func SetLanguage(language string) error {
loadLanguage := func(language string) error {
filename := "i18n/" + language + ".json"
fileContents, err := I18n.ReadFile(filename)
if err != nil {
slog.Error("error reading language file",
"error", err,
"file", filename)
return err
}
return json.Unmarshal(fileContents, &Translations)
}
err := loadLanguage("en") // Load english as fallback language
if err != nil {
return err
}
return loadLanguage(language)
}
// TranslatableText attempts to match an id to a string in current language
func TranslatableText(id string) string {
if v, ok := Translations[id]; !ok {
return id
} else {
return v
}
}