tijl.dev-core/internal/i18n/i18n.go
tijl fea80ba467
All checks were successful
build / build (push) Successful in 33s
updates
2024-08-22 15:15:16 +02:00

87 lines
1.7 KiB
Go

package i18n
import (
"encoding/json"
"path/filepath"
"strings"
"git.tijl.dev/tijl/tijl.dev-core/locales"
log "git.tijl.dev/tijl/tijl.dev-core/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)
files, err := locales.Embed.ReadDir(".")
if err != nil {
log.Fatal().Err(err)
}
for _, file := range files {
if file.IsDir() {
continue
}
if filepath.Ext(file.Name()) != ".json" {
continue
}
lang := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
data, err := locales.Embed.ReadFile(filepath.Join(".", file.Name()))
if err != nil {
log.Error().Err(err).Msg("Failed to read file")
continue
}
var messages map[string]string
if err := json.Unmarshal(data, &messages); err != nil {
log.Error().Err(err).Msg("Failed to decode JSON")
continue
}
log.Debug().Str("filename", file.Name()).Msg("i18n.Load: loaded")
translations[lang] = messages
}
log.Info().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]
}