go-i18n ![Build Status](https://secure.travis-ci.org/nicksnyder/go-i18n.png?branch=master)
go-i18n is a Go package and a command that can be used to translate Go programs into multiple languages.
Package i18n ![GoDoc](http://godoc.org/github.com/nicksnyder/go-i18n?status.png)
The i18n package provides runtime APIs for fetching translated strings.
Command goi18n ![GoDoc](http://godoc.org/github.com/nicksnyder/go-i18n?status.png)
The goi18n command provides functionality for managing the translation process.
Installation
Make sure you have setup GOPATH.
go get -u github.com/nicksnyder/go-i18n/goi18n
goi18n -help
Workflow
A typical workflow looks like this:
-
Add a new string to your source code.
T("settings_title")
-
Add the string to en-US.all.json
[
{
"id": "settings_title",
"translation": "Settings"
}
]
-
Run goi18n
goi18n path/to/*.all.json
-
Send path/to/*.untranslated.json
to get translated.
-
Run goi18n again to merge the translations
goi18n path/to/*.all.json path/to/*.untranslated.json
Translation files
A translation file stores translated and untranslated strings.
Example:
[
{
"id": "d_days",
"translation": {
"one": "{{.Count}} day",
"other": "{{.Count}} days"
}
},
{
"id": "my_height_in_meters",
"translation": {
"one": "I am {{.Count}} meter tall.",
"other": "I am {{.Count}} meters tall."
}
},
{
"id": "person_greeting",
"translation": "Hello {{.Person}}"
},
{
"id": "person_unread_email_count",
"translation": {
"one": "{{.Person}} has {{.Count}} unread email.",
"other": "{{.Person}} has {{.Count}} unread emails."
}
},
{
"id": "person_unread_email_count_timeframe",
"translation": {
"one": "{{.Person}} has {{.Count}} unread email in the past {{.Timeframe}}.",
"other": "{{.Person}} has {{.Count}} unread emails in the past {{.Timeframe}}."
}
},
{
"id": "program_greeting",
"translation": "Hello world"
},
{
"id": "your_unread_email_count",
"translation": {
"one": "You have {{.Count}} unread email.",
"other": "You have {{.Count}} unread emails."
}
}
]
Supported languages
- Arabic (
ar
)
- Belarusian (
be
)
- Bulgarian (
bg
)
- Burmese (
my
)
- Catalan (
ca
)
- Chinese (simplified and traditional) (
zh
)
- Czech (
cs
)
- Danish (
da
)
- Dutch (
nl
)
- English (
en
)
- French (
fr
)
- German (
de
)
- Icelandic (
is
)
- Indonesian (
id
)
- Italian (
it
)
- Korean (
ko
)
- Japanese (
ja
)
- Lithuanian (
lt
)
- Malay (
ms
)
- Polish (
pl
)
- Portuguese (
pt
)
- Portuguese (Brazilian) (
pt-BR
)
- Russian (
ru
)
- Spanish (
es
)
- Swedish (
sv
)
- Thai (
th
)
- Turkish (
tr
)
- Ukrainian (
uk
)
Adding new languages
It is easy to add support for additional languages:
-
Lookup the language's CLDR plural rules.
-
Add the language to pluralspec.go:
var pluralSpecs = map[string]*PluralSpec{
// ...
// English
"en": &PluralSpec{
Plurals: newPluralSet(One, Other),
PluralFunc: func(ops *operands) Plural {
if ops.I == 1 && ops.V == 0 {
return One
}
return Other
},
},
// ...
}
-
Add a test to pluralspec_test.go
-
Update this README with the new language.
-
Submit a pull request!
License
go-i18n is available under the MIT license. See the LICENSE file for more info.