Universal Translator is an i18n Translator for Go/Golang using CLDR data + pluralization rules
Because none of the plural rules seem to be correct out there, including the previous implementation of this package, so I took it upon myself to create locales for everyone to use; this package is a thin wrapper around locales in order to store and translate text for use in your applications.
- Rules generated from the CLDR data, v36.0.1
- Contains Cardinal, Ordinal and Range Plural Rules
- Contains Month, Weekday and Timezone translations built in
- Contains Date & Time formatting functions
- Contains Number, Currency, Accounting and Percent formatting functions
- Supports the "Gregorian" calendar only ( my time isn't unlimited, had to draw the line somewhere )
- Support loading translations from files
- Exporting translations to file(s), mainly for getting them professionally translated
- Code Generation for translation files -> Go code.. i.e. after it has been professionally translated
- Tests for all languages, I need help with this, please see here
Use go get
go get github.com/go-playground/universal-translator
Please see https://godoc.org/github.com/go-playground/universal-translator for usage docs
All types, Plain substitution, Cardinal, Ordinal and Range translations can all be contained within the same file(s); they are only separated for easy viewing.
NOTE: not all fields are needed for all translation types, see examples
{
"locale": "en",
"key": "days-left",
"trans": "You have {0} day left.",
"type": "Cardinal",
"rule": "One",
"override": false
}
Field | Description |
---|---|
locale | The locale for which the translation is for. |
key | The translation key that will be used to store and lookup each translation; normally it is a string or integer. |
trans | The actual translation text. |
type | The type of translation Cardinal, Ordinal, Range or "" for a plain substitution(not required to be defined if plain used) |
rule | The plural rule for which the translation is for eg. One, Two, Few, Many or Other.(not required to be defined if plain used) |
override | If you wish to override an existing translation that has already been registered, set this to 'true'. 99% of the time there is no need to define it. |
To anyone interesting in helping or contributing, I sure could use some help creating tests for each language. Please see issue here for details.
Distributed under MIT License, please see license file in code for more details.