2019-06-09 07:24:20 +00:00
## universal-translator
2022-08-19 16:34:07 +00:00
< img align = "right" src = "https://raw.githubusercontent.com/go-playground/universal-translator/master/logo.png" > ![Project status](https://img.shields.io/badge/version-0.18.0-green.svg)
Move to protobuf for Message type (#1706)
* Use a single Message type `v1/message.go` and `message.go` are the same now, and they embed `protobuf.ChatMessage`
* Use `SendChatMessage` for sending chat messages, this is basically the old `Send` but a bit more flexible so we can send different message types (stickers,commands), and not just text.
* Remove dedup from services/shhext. Because now we process in status-protocol, dedup makes less sense, as those messages are going to be processed anyway, so removing for now, we can re-evaluate if bringing it to status-go or not.
* Change the various retrieveX method to a single one:
`RetrieveAll` will be processing those messages that it can process (Currently only `Message`), and return the rest in `RawMessages` (still transit). The format for the response is:
`Chats`: -> The chats updated by receiving the message
`Messages`: -> The messages retrieved (already matched to a chat)
`Contacts`: -> The contacts updated by the messages
`RawMessages` -> Anything else that can't be parsed, eventually as we move everything to status-protocol-go this will go away.
2019-12-05 16:25:34 +00:00
[![Build Status ](https://travis-ci.org/go-playground/universal-translator.svg?branch=master )](https://travis-ci.org/go-playground/universal-translator)
2019-06-09 07:24:20 +00:00
[![Coverage Status ](https://coveralls.io/repos/github/go-playground/universal-translator/badge.svg )](https://coveralls.io/github/go-playground/universal-translator)
[![Go Report Card ](https://goreportcard.com/badge/github.com/go-playground/universal-translator )](https://goreportcard.com/report/github.com/go-playground/universal-translator)
[![GoDoc ](https://godoc.org/github.com/go-playground/universal-translator?status.svg )](https://godoc.org/github.com/go-playground/universal-translator)
![License ](https://img.shields.io/dub/l/vibe-d.svg )
[![Gitter ](https://badges.gitter.im/go-playground/universal-translator.svg )](https://gitter.im/go-playground/universal-translator?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge)
Universal Translator is an i18n Translator for Go/Golang using CLDR data + pluralization rules
Why another i18n library?
--------------------------
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 ](https://github.com/go-playground/locales ) for everyone to use; this package
is a thin wrapper around [locales ](https://github.com/go-playground/locales ) in order to store and translate text for
use in your applications.
Features
--------
2022-08-19 16:34:07 +00:00
- [x] Rules generated from the [CLDR ](http://cldr.unicode.org/index/downloads ) data, v36.0.1
2019-06-09 07:24:20 +00:00
- [x] Contains Cardinal, Ordinal and Range Plural Rules
- [x] Contains Month, Weekday and Timezone translations built in
- [x] Contains Date & Time formatting functions
- [x] Contains Number, Currency, Accounting and Percent formatting functions
- [x] Supports the "Gregorian" calendar only ( my time isn't unlimited, had to draw the line somewhere )
- [x] Support loading translations from files
- [x] 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 ](https://github.com/go-playground/locales/issues/1 )
Installation
-----------
Use go get
```shell
go get github.com/go-playground/universal-translator
```
Usage & Documentation
-------
Please see https://godoc.org/github.com/go-playground/universal-translator for usage docs
##### Examples:
Move to protobuf for Message type (#1706)
* Use a single Message type `v1/message.go` and `message.go` are the same now, and they embed `protobuf.ChatMessage`
* Use `SendChatMessage` for sending chat messages, this is basically the old `Send` but a bit more flexible so we can send different message types (stickers,commands), and not just text.
* Remove dedup from services/shhext. Because now we process in status-protocol, dedup makes less sense, as those messages are going to be processed anyway, so removing for now, we can re-evaluate if bringing it to status-go or not.
* Change the various retrieveX method to a single one:
`RetrieveAll` will be processing those messages that it can process (Currently only `Message`), and return the rest in `RawMessages` (still transit). The format for the response is:
`Chats`: -> The chats updated by receiving the message
`Messages`: -> The messages retrieved (already matched to a chat)
`Contacts`: -> The contacts updated by the messages
`RawMessages` -> Anything else that can't be parsed, eventually as we move everything to status-protocol-go this will go away.
2019-12-05 16:25:34 +00:00
- [Basic ](https://github.com/go-playground/universal-translator/tree/master/_examples/basic )
- [Full - no files ](https://github.com/go-playground/universal-translator/tree/master/_examples/full-no-files )
- [Full - with files ](https://github.com/go-playground/universal-translator/tree/master/_examples/full-with-files )
2019-06-09 07:24:20 +00:00
File formatting
--------------
2022-08-19 16:34:07 +00:00
All types, Plain substitution, Cardinal, Ordinal and Range translations can all be contained within the same file(s);
2019-06-09 07:24:20 +00:00
they are only separated for easy viewing.
##### Examples:
Move to protobuf for Message type (#1706)
* Use a single Message type `v1/message.go` and `message.go` are the same now, and they embed `protobuf.ChatMessage`
* Use `SendChatMessage` for sending chat messages, this is basically the old `Send` but a bit more flexible so we can send different message types (stickers,commands), and not just text.
* Remove dedup from services/shhext. Because now we process in status-protocol, dedup makes less sense, as those messages are going to be processed anyway, so removing for now, we can re-evaluate if bringing it to status-go or not.
* Change the various retrieveX method to a single one:
`RetrieveAll` will be processing those messages that it can process (Currently only `Message`), and return the rest in `RawMessages` (still transit). The format for the response is:
`Chats`: -> The chats updated by receiving the message
`Messages`: -> The messages retrieved (already matched to a chat)
`Contacts`: -> The contacts updated by the messages
`RawMessages` -> Anything else that can't be parsed, eventually as we move everything to status-protocol-go this will go away.
2019-12-05 16:25:34 +00:00
- [Formats ](https://github.com/go-playground/universal-translator/tree/master/_examples/file-formats )
2019-06-09 07:24:20 +00:00
##### Basic Makeup
Move to protobuf for Message type (#1706)
* Use a single Message type `v1/message.go` and `message.go` are the same now, and they embed `protobuf.ChatMessage`
* Use `SendChatMessage` for sending chat messages, this is basically the old `Send` but a bit more flexible so we can send different message types (stickers,commands), and not just text.
* Remove dedup from services/shhext. Because now we process in status-protocol, dedup makes less sense, as those messages are going to be processed anyway, so removing for now, we can re-evaluate if bringing it to status-go or not.
* Change the various retrieveX method to a single one:
`RetrieveAll` will be processing those messages that it can process (Currently only `Message`), and return the rest in `RawMessages` (still transit). The format for the response is:
`Chats`: -> The chats updated by receiving the message
`Messages`: -> The messages retrieved (already matched to a chat)
`Contacts`: -> The contacts updated by the messages
`RawMessages` -> Anything else that can't be parsed, eventually as we move everything to status-protocol-go this will go away.
2019-12-05 16:25:34 +00:00
NOTE: not all fields are needed for all translation types, see [examples ](https://github.com/go-playground/universal-translator/tree/master/_examples/file-formats )
2019-06-09 07:24:20 +00:00
```json
{
"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.|
Help With Tests
---------------
To anyone interesting in helping or contributing, I sure could use some help creating tests for each language.
Please see issue [here ](https://github.com/go-playground/locales/issues/1 ) for details.
License
------
Distributed under MIT License, please see license file in code for more details.