inou/lib/translate.go

65 lines
1.3 KiB
Go

package lib
import (
"os"
"path/filepath"
"gopkg.in/yaml.v3"
)
var translations = make(map[string]map[string]string)
// TranslateInit loads translation files from the given directory
func TranslateInit(langDir string) {
files, err := os.ReadDir(langDir)
if err != nil {
return
}
for _, f := range files {
if filepath.Ext(f.Name()) != ".yaml" {
continue
}
lang := f.Name()[:len(f.Name())-5]
data, err := os.ReadFile(filepath.Join(langDir, f.Name()))
if err != nil {
continue
}
var t map[string]string
if yaml.Unmarshal(data, &t) == nil {
translations[lang] = t
}
}
}
// T translates a key to the given language, falling back to English
func T(lang, key string) string {
if t, ok := translations[lang]; ok {
if s, ok := t[key]; ok {
return s
}
}
if t, ok := translations["en"]; ok {
if s, ok := t[key]; ok {
return s
}
}
return "[" + key + "]"
}
// CategoryTranslate returns the translated category name
func CategoryTranslate(cat int, lang string) string {
return T(lang, CategoryKey(cat))
}
// DossierLanguage returns the language for a dossier, defaulting to "en"
func DossierLanguage(dossierID string) string {
if dossierID == "" {
return "en"
}
d, err := DossierGet(nil, dossierID) // nil ctx = internal operation
if err != nil || d.Language == "" {
return "en"
}
return d.Language
}