|
- package translation
-
- import (
- "fmt"
-
- "gitoa.ru/go-4devs/translation/arg"
- "golang.org/x/text/language"
- )
-
- // Option configures translate.
- type Option func(*Translate)
-
- // Translate configure translate.
- type Translate struct {
- Domain string
- Locale language.Tag
- Args []Arg
- }
-
- // ArgValues gets value arguments.
- func (t *Translate) ArgValues() []interface{} {
- a := make([]interface{}, len(t.Args))
- for i, v := range t.Args {
- a[i] = v.Val()
- }
-
- return a
- }
-
- // Arg arg translate.
- type Arg interface {
- Val() interface{}
- fmt.Stringer
- }
-
- // WithNumber sets number with options.
- func WithNumber(key string, val interface{}, opts ...arg.NumberOption) Option {
- return func(t *Translate) {
- t.Args = append(t.Args, arg.Number{Key: key, Value: val}.Configure(opts...))
- }
- }
-
- // WithCurrency sets date argument.
- func WithCurrency(key string, val interface{}, opts ...arg.CurrencyOption) Option {
- return func(t *Translate) {
- c := arg.Currency{Value: val, Key: key}
-
- for _, o := range opts {
- o(&c)
- }
-
- t.Args = append(t.Args, c)
- }
- }
-
- // WithDomain sets domain translate.
- func WithDomain(domain string) Option {
- return func(o *Translate) {
- o.Domain = domain
- }
- }
-
- // WithLocale sets locale translate.
- func WithLocale(locale string) Option {
- return func(o *Translate) {
- o.Locale = language.Make(locale)
- }
- }
-
- // WithArgs sets arguments value.
- func WithArgs(vals ...interface{}) Option {
- return func(t *Translate) {
- args := make([]Arg, len(vals))
- for i, val := range vals {
- args[i] = arg.Arg{Value: val}
- }
-
- t.Args = append(t.Args, args...)
- }
- }
|