Add c-based localization support

This commit is contained in:
Olli 2026-02-26 10:39:52 +01:00
commit d1bb505e0a
6 changed files with 428 additions and 60 deletions

38
internal/i18n/i18n.go Normal file
View file

@ -0,0 +1,38 @@
package i18n
/*
#include <locale.h>
#include <stdlib.h>
#include <libintl.h>
static void init_i18n(const char* domain, const char* localedir) {
setlocale(LC_ALL, "");
bindtextdomain(domain, localedir);
bind_textdomain_codeset(domain, "UTF-8");
textdomain(domain);
}
*/
import "C"
import (
"log"
"unsafe"
)
func Init(domain, localeDir string) {
cDomain := C.CString(domain)
defer C.free(unsafe.Pointer(cDomain))
cDir := C.CString(localeDir)
defer C.free(unsafe.Pointer(cDir))
log.Println("initialize localization for domain", domain, "with directory", localeDir)
C.init_i18n(cDomain, cDir)
}
func T(msgid string) string {
c := C.CString(msgid)
defer C.free(unsafe.Pointer(c))
return C.GoString(C.gettext(c))
}