tijl.dev-core/internal/i18n/i18n.go
tijl c6dc9cd110
Some checks failed
build / build (push) Failing after 0s
updates
2024-08-21 01:08:47 +02:00

79 lines
1.5 KiB
Go

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]
}