There are no good examples of [golang.org/x/text](https://golang.org/x/text)  uses and description of how pluralization made. So, this is it.

#### Generating translations

> You should specify valid [ISO-3166 locale code](https://www.iso.org/obp/ui/#iso:code:3166) to get plurals working!

Write your code:

```go
import (
	"golang.org/x/text/language"
	"golang.org/x/text/message"
)

lang := language.MustParse('ru-RU')
printer := message.NewPrinter(lang)

count := 1
printer.Sprintf("%d butterflies", count)
```

Then run generator for your locale (mine is `ru-RU`):

```shell
gotext -srclang=en-GB update -lang=ru-RU \
	-out=translations.go github.com/path/to-output-folder
```

This will generate `out.gotext.json` in `/path/to-output-folder/ru-RU` of your project. Copy it to `messages.out.json`.

#### Translating and adding plural forms

Change `"translation"` value in generated `messages.gotext.json` to `string` or `object` of the form shown below if you want pluralize strings, ==then run gotext command again==, it will generate `.go files with translations`.

According to [source files of gen_common](https://github.com/golang/text/blob/master/feature/plural/gen_common.go#L19), there's a couple of forms: 
- `=N`, `!=N`,  `%N`  for exact matches
- `zero` | `one` | `two` | `few` | `many` | `other`  - they're different for each language, so, 

```json
{
  "id": "{Count} butterflies",
  "message": "{Count} butterflies",
  "translation": {
	"select": {
	  "feature": "plural",
	  "arg": "Count",
	  "cases": {
		"one": {
		  "msg": "{Count} бабочка"
		},
		"few": {
		  "msg": "{Count} бабочки"
		},
		"many": {
		  "msg": "{Count} бабочек"
		},
		"other": {
		  "msg": "{Count} бабочуль"
		}
	  }
	}
  },
  "placeholders": [
	{
	  "id": "Count",
	  "string": "%[1]d",
	  "type": "int",
	  "underlyingType": "int",
	  "argNum": 1,
	  "expr": "count"
	}
  ]
},
```

#### Using go-generate

Write this at some `.go` file:

```go
//go:generate gotext -srclang=en-GB update -out=translations.go -lang=ru-RU github.com/muerwre/vault-golang/internal/api
```

Then run go generation:

```shell
go generate ./...
```

#### Useful links
- [All available forms in this .go file](https://github.com/golang/text/blob/master/feature/plural/gen_common.go#L19)
- [Answer, that solved it for me](https://community.crowdin.com/t/plurals-in-gotext-json-files/600)