go get github.com/chai2010/gettext-gogo run hello.goThe godoc.org or go.dev has more information.
package main import ( "fmt" "github.com/chai2010/gettext-go" ) func main() { gettext := gettext.New("hello", "./examples/locale").SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!")) // Output: 你好, 世界! }
package main import ( "fmt" "github.com/chai2010/gettext-go" ) func main() { gettext.SetLanguage("zh_CN") gettext.BindLocale(gettext.New("hello", "locale")) // gettext.BindLocale("hello", "locale") // from locale dir // gettext.BindLocale("hello", "locale.zip") // from locale zip file // gettext.BindLocale("hello", "locale.zip", zipData) // from embedded zip data // translate source text fmt.Println(gettext.Gettext("Hello, world!")) // Output: 你好, 世界! // if no msgctxt in PO file (only msgid and msgstr), // specify context as "" by fmt.Println(gettext.PGettext("", "Hello, world!")) // Output: 你好, 世界! // translate resource fmt.Println(string(gettext.Getdata("poems.txt")))) // Output: ... }
Go file: hello.go; PO file: hello.po;
| v0.1.0 (old) | v1.0.0 (new) |
|---|---|
github.com/chai2010/gettext-go/gettext | github.com/chai2010/gettext-go |
github.com/chai2010/gettext-go/gettext/po | github.com/chai2010/gettext-go/po |
github.com/chai2010/gettext-go/gettext/mo | github.com/chai2010/gettext-go/mo |
github.com/chai2010/gettext-go/gettext/plural | github.com/chai2010/gettext-go/plural |
| v0.1.0 (old) | v1.0.0 (new) |
|---|---|
gettext-go/gettext.* | gettext-go.* |
gettext-go/gettext.DefaultLocal | gettext-go.DefaultLanguage |
gettext-go/gettext.BindTextdomain | gettext-go.BindLocale |
gettext-go/gettext.Textdomain | gettext-go.SetDomain |
gettext-go/gettext.SetLocale | gettext-go.SetLanguage |
gettext-go/gettext/po.Load | gettext-go/po.LoadFile |
gettext-go/gettext/po.LoadData | gettext-go/po.Load |
gettext-go/gettext/mo.Load | gettext-go/mo.LoadFile |
gettext-go/gettext/mo.LoadData | gettext-go/mo.Load |
gettext.Gettextpackage main // v0.1.0 // if the **context** missing, use `callerName(2)` as the context: // v1.0.0 // if the **context** missing, use empty string as the context: func main() { gettext.Gettext("hello") // v0.1.0 => gettext.PGettext("main.main", "hello") // v1.0.0 => gettext.PGettext("", "hello") gettext.DGettext("domain", "hello") // v0.1.0 => gettext.DPGettext("domain", "main.main", "hello") // v1.0.0 => gettext.DPGettext("domain", "", "hello") gettext.NGettext("domain", "hello", "hello2", n) // v0.1.0 => gettext.PNGettext("domain", "main.main", "hello", "hello2", n) // v1.0.0 => gettext.PNGettext("domain", "", "hello", "hello2", n) gettext.DNGettext("domain", "hello", "hello2", n) // v0.1.0 => gettext.DPNGettext("domain", "main.main", "hello", "hello2", n) // v1.0.0 => gettext.DPNGettext("domain", "", "hello", "hello2", n) }
BindLocale support FileSystem interface// Use FileSystem: // BindLocale(New("poedit", "name", OS("path/to/dir"))) // bind "poedit" domain // BindLocale(New("poedit", "name", OS("path/to.zip"))) // bind "poedit" domain
Gettexter interface:
type Gettexter interface {
FileSystem() FileSystem
GetDomain() string
SetDomain(domain string) Gettexter
GetLanguage() string
SetLanguage(lang string) Gettexter
Gettext(msgid string) string
PGettext(msgctxt, msgid string) string
NGettext(msgid, msgidPlural string, n int) string
PNGettext(msgctxt, msgid, msgidPlural string, n int) string
DGettext(domain, msgid string) string
DPGettext(domain, msgctxt, msgid string) string
DNGettext(domain, msgid, msgidPlural string, n int) string
DPNGettext(domain, msgctxt, msgid, msgidPlural string, n int) string
Getdata(name string) []byte
DGetdata(domain, name string) []byte
}
func New(domain, path string, data ...interface{}) Gettexter
FileSystem interface:
type FileSystem interface {
LocaleList() []string
LoadMessagesFile(domain, lang, ext string) ([]byte, error)
LoadResourceFile(domain, lang, name string) ([]byte, error)
String() string
}
func NewFS(name string, x interface{}) FileSystem
func OS(root string) FileSystem
func ZipFS(r *zip.Reader, name string) FileSystem
func NilFS(name string) FileSystem
Please report bugs to chaishushan@gmail.com.
Thanks!