Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chai2010/gettext-go
:ab: GNU gettext for Go (Imported By Kubernetes)
https://github.com/chai2010/gettext-go
gettext go golang i18n k8s kubernetes language mo-files po-files translation
Last synced: about 1 month ago
JSON representation
:ab: GNU gettext for Go (Imported By Kubernetes)
- Host: GitHub
- URL: https://github.com/chai2010/gettext-go
- Owner: chai2010
- License: bsd-3-clause
- Created: 2014-03-31T03:30:27.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-04-30T09:27:27.000Z (7 months ago)
- Last Synced: 2024-10-06T01:18:13.363Z (about 1 month ago)
- Topics: gettext, go, golang, i18n, k8s, kubernetes, language, mo-files, po-files, translation
- Language: Go
- Homepage: http://pkg.go.dev/github.com/chai2010/gettext-go
- Size: 863 KB
- Stars: 90
- Watchers: 7
- Forks: 25
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
- *Go语言QQ群: 102319854, 1055927514*
- *凹语言(凹读音“Wa”)(The Wa Programming Language): https://github.com/wa-lang/wa*----
# gettext-go: GNU gettext for Go ([Imported By Kubernetes](https://pkg.go.dev/github.com/chai2010/[email protected]/gettext?tab=importedby))
- PkgDoc: [http://godoc.org/github.com/chai2010/gettext-go](http://godoc.org/github.com/chai2010/gettext-go)
- PkgDoc: [http://pkg.go.dev/github.com/chai2010/gettext-go](http://pkg.go.dev/github.com/chai2010/gettext-go)## Install
1. `go get github.com/chai2010/gettext-go`
2. `go run hello.go`The godoc.org or go.dev has more information.
## Examples
```Go
package mainimport (
"fmt""github.com/chai2010/gettext-go"
)func main() {
gettext := gettext.New("hello", "./examples/locale").SetLanguage("zh_CN")
fmt.Println(gettext.Gettext("Hello, world!"))// Output: 你好, 世界!
}
``````Go
package mainimport (
"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](https://github.com/chai2010/gettext-go/blob/master/examples/hello.go); PO file: [hello.po](https://github.com/chai2010/gettext-go/blob/master/examples/locale/default/LC_MESSAGES/hello.po);
----
## API Changes (v0.1.0 vs v1.0.0)
### Renamed package path
| 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` |### Renamed functions
| 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` |### Use empty string as the default context for `gettext.Gettext`
```go
package 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
```go
// Use FileSystem:
// BindLocale(New("poedit", "name", OS("path/to/dir"))) // bind "poedit" domain
// BindLocale(New("poedit", "name", OS("path/to.zip"))) // bind "poedit" domain
```## New API in v1.0.0
`Gettexter` interface:
```go
type Gettexter interface {
FileSystem() FileSystemGetDomain() string
SetDomain(domain string) GettexterGetLanguage() string
SetLanguage(lang string) GettexterGettext(msgid string) string
PGettext(msgctxt, msgid string) stringNGettext(msgid, msgidPlural string, n int) string
PNGettext(msgctxt, msgid, msgidPlural string, n int) stringDGettext(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) stringGetdata(name string) []byte
DGetdata(domain, name string) []byte
}func New(domain, path string, data ...interface{}) Gettexter
````FileSystem` interface:
```go
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
```----
## BUGS
Please report bugs to .
Thanks!