tijl.dev-core/internal/i18n/i18n.go

79 lines
1.5 KiB
Go
Raw Normal View History

2024-08-19 22:32:43 +02:00
package i18n
import (
"encoding/json"
"github.com/gofiber/fiber/v2"
"os"
"path/filepath"
2024-08-20 13:35:49 +02:00
log "github.com/sirupsen/logrus"
2024-08-19 22:32:43 +02:00
)
var translations map[string]map[string]string
const DefaultLang = "en"
2024-08-20 13:35:49 +02:00
func Load() {
2024-08-19 22:32:43 +02:00
translations = make(map[string]map[string]string)
dir := "locales"
files, err := filepath.Glob(filepath.Join(dir, "*.json"))
if err != nil {
log.Fatalf("Error loading language files: %v", 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 {
2024-08-20 13:35:49 +02:00
log.Errorf("Error opening translation file %s: %v", file, err)
2024-08-19 22:32:43 +02:00
continue
}
defer file.Close()
var messages map[string]string
if err := json.NewDecoder(file).Decode(&messages); err != nil {
2024-08-20 13:35:49 +02:00
log.Errorf("Error decoding translation file %s: %v", file, err)
2024-08-19 22:32:43 +02:00
continue
}
translations[lang] = messages
}
2024-08-20 13:35:49 +02:00
log.Debug("Loaded translations")
2024-08-19 22:32:43 +02:00
}
func Translate(c *fiber.Ctx, key string) string {
2024-08-20 18:25:59 +02:00
lang := c.Cookies("language")
2024-08-19 22:32:43 +02:00
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
}
2024-08-20 18:25:59 +02:00
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]
2024-08-19 22:32:43 +02:00
}