Files
libredesk/cmd/i18n.go
2025-04-03 01:21:12 +05:30

58 lines
1.5 KiB
Go

package main
import (
"fmt"
"net/http"
"github.com/abhinavxd/libredesk/internal/envelope"
"github.com/knadh/go-i18n"
"github.com/knadh/stuffbin"
"github.com/zerodha/fastglue"
)
const (
defLang = "en"
)
// handleGetI18nLang returns the JSON language pack for the given language code.
func handleGetI18nLang(r *fastglue.Request) error {
var (
app = r.Context.(*App)
lang = r.RequestCtx.UserValue("lang").(string)
)
i, err := loadI18nLang(lang, app.fs)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendBytes(http.StatusOK, "application/json", i.JSON())
}
// loadI18nLang loads the i18n language pack for the given language code.
func loadI18nLang(lang string, fs stuffbin.FileSystem) (*i18n.I18n, error) {
// Helper function to read and initialize i18n language.
readLang := func(lang string) ([]byte, error) {
return fs.Read(fmt.Sprintf("/i18n/%s.json", lang))
}
// Read default language.
b, err := readLang(defLang)
if err != nil {
return nil, envelope.NewError(envelope.GeneralError, "error reading default language", nil)
}
// Initialize with the default language.
i, err := i18n.New(b)
if err != nil {
return nil, envelope.NewError(envelope.GeneralError, "error unmarshalling i18n language", nil)
}
// Load the selected language on top of it.
if b, err = readLang(lang); err == nil {
if err := i.Load(b); err != nil {
return i, envelope.NewError(envelope.GeneralError, "error loading i18n language file", nil)
}
}
return i, nil
}