func NGettext(msgid string, msgidPlural string, n uint64) string {
	cmsgid := C.CString(msgid)
	defer C.free(unsafe.Pointer(cmsgid))
	cmsgidPlural := C.CString(msgidPlural)
	defer C.free(unsafe.Pointer(cmsgidPlural))
	return C.GoString(C.ngettext(cmsgid, cmsgidPlural, C.ulong(n)))
}
NGettext attempts to translate a text string into the user's system
language, by looking up the appropriate plural form of the translation in a
message catalog.
package gettext
import "C"
import (
	"fmt"
	"strings"
	"unsafe"
)
var (
	LcAll = uint(C.LC_ALL)
	LcCollate = uint(C.LC_COLLATE)
	LcCtype = uint(C.LC_CTYPE)
	LcMessages = uint(C.LC_MESSAGES)
	LcMonetary = uint(C.LC_MONETARY)
	LcNumeric = uint(C.LC_NUMERIC)
	LcTime = uint(C.LC_TIME)
)
var (
	LC_ALL      = LcAll
	LC_COLLATE  = LcCollate
	LC_CTYPE    = LcCtype
	LC_MESSAGES = LcMessages
	LC_MONETARY = LcMonetary
	LC_NUMERIC  = LcNumeric
	LC_TIME     = LcTime
)
func SetLocale(category uint, locale string) string {
	clocale := C.CString(locale)
	defer C.free(unsafe.Pointer(clocale))
	return C.GoString(C.setlocale(C.int(category), clocale))
}
func BindTextdomain(domainname string, dirname string) string {
	cdirname := C.CString(dirname)
	defer C.free(unsafe.Pointer(cdirname))
	cdomainname := C.CString(domainname)
	defer C.free(unsafe.Pointer(cdomainname))
	return C.GoString(C.bindtextdomain(cdomainname, cdirname))
}
func BindTextdomainCodeset(domainname string, codeset string) string {
	cdomainname := C.CString(domainname)
	defer C.free(unsafe.Pointer(cdomainname))
	ccodeset := C.CString(codeset)
	defer C.free(unsafe.Pointer(ccodeset))
	return C.GoString(C.bind_textdomain_codeset(cdomainname, ccodeset))
}
func Textdomain(domainname string) string {
	cdomainname := C.CString(domainname)
	defer C.free(unsafe.Pointer(cdomainname))
	return C.GoString(C.textdomain(cdomainname))
}
func Gettext(msgid string) string {
	cmsgid := C.CString(msgid)
	defer C.free(unsafe.Pointer(cmsgid))
	return C.GoString(C.gettext(cmsgid))
}
func DGettext(domain string, msgid string) string {
	cdomain := cDomainName(domain)
	defer C.free(unsafe.Pointer(cdomain))
	cmsgid := C.CString(msgid)
	defer C.free(unsafe.Pointer(cmsgid))
	return C.GoString(C.dgettext(cdomain, cmsgid))
}
func DCGettext(domain string, msgid string, category uint) string {
	cdomain := cDomainName(domain)
	defer C.free(unsafe.Pointer(cdomain))
	cmsgid := C.CString(msgid)
	defer C.free(unsafe.Pointer(cmsgid))
	return C.GoString(C.dcgettext(cdomain, cmsgid, C.int(category)))
}