Documentation ¶
Overview ¶
Package gettext implements a basic GNU's gettext library.
Example:
import ( "github.com/chai2010/gettext-go" ) func main() { gettext.SetLanguage("zh_CN") // gettext.BindLocale(gettext.New("hello", "locale")) // from locale dir // gettext.BindLocale(gettext.New("hello", "locale.zip")) // from locale zip file // gettext.BindLocale(gettext.New("hello", "locale.zip", zipData)) // from embedded zip data gettext.BindLocale(gettext.New("hello", "locale")) // translate source text fmt.Println(gettext.Gettext("Hello, world!")) // Output: 你好, 世界! // translate resource fmt.Println(string(gettext.Getdata("poems.txt"))) // Output: ... }
Translate directory struct("./examples/locale.zip"):
Root: "path" or "file.zip/zipBaseName" +-default # locale: $(LC_MESSAGES) or $(LANG) or "default" | +-LC_MESSAGES # just for `gettext.Gettext` | | +-hello.mo # $(Root)/$(lang)/LC_MESSAGES/$(domain).mo | | +-hello.po # $(Root)/$(lang)/LC_MESSAGES/$(domain).po | | \-hello.json # $(Root)/$(lang)/LC_MESSAGES/$(domain).json | | | \-LC_RESOURCE # just for `gettext.Getdata` | +-hello # domain map a dir in resource translate | +-favicon.ico # $(Root)/$(lang)/LC_RESOURCE/$(domain)/$(filename) | \-poems.txt | \-zh_CN # simple chinese translate +-LC_MESSAGES | +-hello.po # try "$(domain).po" first | +-hello.mo # try "$(domain).mo" second | \-hello.json # try "$(domain).json" third | \-LC_RESOURCE +-hello +-favicon.ico # $(lang)/$(domain)/favicon.ico \-poems.txt # $(lang)/$(domain)/poems.txt
See:
http://en.wikipedia.org/wiki/Gettext http://www.gnu.org/software/gettext/manual/html_node http://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html http://www.gnu.org/software/gettext/manual/html_node/PO-Files.html http://www.gnu.org/software/gettext/manual/html_node/MO-Files.html http://www.poedit.net/
Please report bugs to <chaishushan{AT}gmail.com>. Thanks!
Example ¶
gettext := gettext.New("hello", "./examples/locale").SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!"))
Output: 你好, 世界!
Example (Bind) ¶
gettext.BindLocale(gettext.New("hello", "./examples/locale.zip")) gettext.SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!"))
Output: 你好, 世界!
Example (Json) ¶
const jsonData = `{ "zh_CN": { "LC_MESSAGES": { "hello.json": [{ "msgctxt" : "", "msgid" : "Hello, world!", "msgid_plural": "", "msgstr" : ["你好, 世界!"] }] } } }` gettext := gettext.New("hello", "???", jsonData).SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!"))
Output: 你好, 世界!
Example (MultiLang) ¶
zh := gettext.New("hello", "./examples/locale").SetLanguage("zh_CN") tw := gettext.New("hello", "./examples/locale").SetLanguage("zh_TW") fmt.Println(zh.PGettext( "code.google.com/p/gettext-go/examples/hi.SayHi", "pkg hi: Hello, world!", )) fmt.Println(tw.PGettext( "code.google.com/p/gettext-go/examples/hi.SayHi", "pkg hi: Hello, world!", ))
Output: 来自"Hi"包的问候: 你好, 世界!(ctx:code.google.com/p/gettext-go/examples/hi.SayHi) 來自"Hi"包的問候: 你好, 世界!(ctx:code.google.com/p/gettext-go/examples/hi.SayHi)
Example (Zip) ¶
gettext := gettext.New("hello", "./examples/locale.zip").SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!"))
Output: 你好, 世界!
Example (ZipData) ¶
zipData, err := ioutil.ReadFile("./examples/locale.zip") if err != nil { log.Fatal(err) } gettext := gettext.New("hello", "???", zipData).SetLanguage("zh_CN") fmt.Println(gettext.Gettext("Hello, world!"))
Output: 你好, 世界!
Index ¶
- Variables
- func BindLocale(g Gettexter)
- func DGetdata(domain, name string) []byte
- func DGettext(domain, msgid string) string
- func DNGettext(domain, msgid, msgidPlural string, n int) string
- func DPGettext(domain, msgctxt, msgid string) string
- func DPNGettext(domain, msgctxt, msgid, msgidPlural string, n int) string
- func Getdata(name string) []byte
- func Gettext(msgid string) string
- func NGettext(msgid, msgidPlural string, n int) string
- func PGettext(msgctxt, msgid string) string
- func PNGettext(msgctxt, msgid, msgidPlural string, n int) string
- func SetDomain(domain string) string
- func SetLanguage(lang string) string
- type FileSystem
- type Gettexter
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var (
DefaultLanguage string = getDefaultLanguage() // use $(LC_MESSAGES) or $(LANG) or "default"
)
Functions ¶
func BindLocale ¶
func BindLocale(g Gettexter)
BindLocale sets and queries program's domains.
Examples:
BindLocale(New("poedit", "locale")) // bind "poedit" domain
Use zip file:
BindLocale(New("poedit", "locale.zip")) // bind "poedit" domain BindLocale(New("poedit", "locale.zip", zipData)) // bind "poedit" domain
Use FileSystem:
BindLocale(New("poedit", "name", OS("path/to/dir"))) // bind "poedit" domain BindLocale(New("poedit", "name", OS("path/to.zip"))) // bind "poedit" domain
func DGetdata ¶
DGetdata like Getdata(), but looking up the resource in the specified domain.
Examples:
func Foo() { msg := gettext.DGetdata("hello", "poems.txt") }
func DGettext ¶
DGettext like Gettext(), but looking up the message in the specified domain.
Examples:
func Foo() { msg := gettext.DGettext("poedit", "Hello") }
func DNGettext ¶
DNGettext like NGettext(), but looking up the message in the specified domain.
Examples:
func Foo() { msg := gettext.PNGettext("poedit", "gettext-go.example", "%d people", "%d peoples", 2) }
func DPGettext ¶
DPGettext like PGettext(), but looking up the message in the specified domain.
Examples:
func Foo() { msg := gettext.DPGettext("poedit", "gettext-go.example", "Hello") }
func DPNGettext ¶
DPNGettext like PNGettext(), but looking up the message in the specified domain.
Examples:
func Foo() { msg := gettext.DPNGettext("poedit", "gettext-go.example", "%d people", "%d peoples", 2) }
func Getdata ¶
Getdata attempt to translate a resource file into the user's native language, by looking up the translation in a message catalog.
Examples:
func Foo() { Textdomain("hello") BindLocale("hello", "locale.zip", nilOrZipData) poems := gettext.Getdata("poems.txt") }
func Gettext ¶
Gettext attempt to translate a text string into the user's native language, by looking up the translation in a message catalog.
It use the caller's function name as the msgctxt.
Examples:
func Foo() { msg := gettext.Gettext("Hello") // msgctxt is "" }
func NGettext ¶
NGettext attempt to translate a text string into the user's native language, by looking up the appropriate plural form of the translation in a message catalog.
It use the caller's function name as the msgctxt.
Examples:
func Foo() { msg := gettext.NGettext("%d people", "%d peoples", 2) }
func PGettext ¶
PGettext attempt to translate a text string into the user's native language, by looking up the translation in a message catalog.
Examples:
func Foo() { msg := gettext.PGettext("gettext-go.example", "Hello") // msgctxt is "gettext-go.example" }
func PNGettext ¶
PNGettext attempt to translate a text string into the user's native language, by looking up the appropriate plural form of the translation in a message catalog.
Examples:
func Foo() { msg := gettext.PNGettext("gettext-go.example", "%d people", "%d peoples", 2) }
func SetDomain ¶
SetDomain sets and retrieves the current message domain.
If the domain is not empty string, set the new domains.
If the domain is empty string, don't change anything.
Returns is the all used domains.
Examples:
SetDomain("poedit") // set domain: poedit SetDomain("") // get domain: return poedit
func SetLanguage ¶
SetLanguage sets and queries the program's current lang.
If the lang is not empty string, set the new locale.
If the lang is empty string, don't change anything.
Returns is the current locale.
Examples:
SetLanguage("") // get locale: return DefaultLocale SetLanguage("zh_CN") // set locale: return zh_CN SetLanguage("") // get locale: return zh_CN
Types ¶
type FileSystem ¶
type FileSystem interface { LocaleList() []string LoadMessagesFile(domain, lang, ext string) ([]byte, error) LoadResourceFile(domain, lang, name string) ([]byte, error) String() string }
func NewFS ¶
func NewFS(name string, x interface{}) FileSystem
func NilFS ¶
func NilFS(name string) FileSystem
func OS ¶
func OS(root string) FileSystem
type Gettexter ¶
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 }
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
xgettext-go
The xgettext-go program extracts translatable strings from Go packages.
|
The xgettext-go program extracts translatable strings from Go packages. |
This is a gettext-go exmaple.
|
This is a gettext-go exmaple. |
hi
Package hi is a example pkg.
|
Package hi is a example pkg. |
Package mo provides support for reading and writing GNU MO file.
|
Package mo provides support for reading and writing GNU MO file. |
Package plural provides standard plural formulas.
|
Package plural provides standard plural formulas. |
Package po provides support for reading and writing GNU PO file.
|
Package po provides support for reading and writing GNU PO file. |