package i18n import ( "encoding/json" "os" "path/filepath" log "git.tijl.dev/tijl/tijl.dev/modules/logger" "github.com/gofiber/fiber/v2" ) var translations map[string]map[string]string const DefaultLang = "en" func Load() { translations = make(map[string]map[string]string) dir := "locales" files, err := filepath.Glob(filepath.Join(dir, "*.json")) if err != nil { log.Fatal().Err(err) } for _, file := range files { lang := filepath.Base(file) lang = lang[:len(lang)-len(filepath.Ext(lang))] file, err := os.Open(file) if err != nil { log.Error().Err(err) continue } defer file.Close() var messages map[string]string if err := json.NewDecoder(file).Decode(&messages); err != nil { log.Error().Err(err) continue } translations[lang] = messages } log.Debug().Msg("Loaded translations") } func Translate(c *fiber.Ctx, key string) string { lang := c.Cookies("language") if messages, ok := translations[lang]; ok { if message, ok := messages[key]; ok { return message } } if messages, ok := translations[DefaultLang]; ok { if message, ok := messages[key]; ok { return message } } return key } func GetLanguage(c *fiber.Ctx) string { lang := c.Cookies("language") if _, ok := translations[lang]; ok { return lang } else { return DefaultLang } } func GetTranslations(lang string) map[string]string { if messages, ok := translations[lang]; ok { return messages } return translations[DefaultLang] }