Add c-based localization support
This commit is contained in:
parent
4a11ea5ad0
commit
d1bb505e0a
6 changed files with 428 additions and 60 deletions
38
internal/i18n/i18n.go
Normal file
38
internal/i18n/i18n.go
Normal 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))
|
||||
}
|
||||
Loading…
Reference in a new issue