package root import ( "math" "strconv" "github.com/go-playground/locales" "github.com/go-playground/locales/currency" ) type root struct { locale string pluralsCardinal []locales.PluralRule pluralsOrdinal []locales.PluralRule decimal []byte group []byte minus []byte percent []byte percentPrefix []byte percentSuffix []byte perMille []byte currencies [][]byte // idx = enum of currency code currencyPositivePrefix []byte currencyPositiveSuffix []byte currencyNegativePrefix []byte currencyNegativeSuffix []byte } // New returns a new instance of translator for the 'root' locale func New() locales.Translator { return &root{ locale: "root", pluralsCardinal: []locales.PluralRule{6}, pluralsOrdinal: []locales.PluralRule{6}, decimal: []byte{}, group: []byte{}, minus: []byte{}, percent: []byte{}, perMille: []byte{}, currencies: [][]uint8{[]uint8{0x41, 0x44, 0x50}, []uint8{0x41, 0x45, 0x44}, []uint8{0x41, 0x46, 0x41}, []uint8{0x41, 0x46, 0x4e}, []uint8{0x41, 0x4c, 0x4b}, []uint8{0x41, 0x4c, 0x4c}, []uint8{0x41, 0x4d, 0x44}, []uint8{0x41, 0x4e, 0x47}, []uint8{0x4b, 0x7a}, []uint8{0x41, 0x4f, 0x4b}, []uint8{0x41, 0x4f, 0x4e}, []uint8{0x41, 0x4f, 0x52}, []uint8{0x41, 0x52, 0x41}, []uint8{0x41, 0x52, 0x4c}, []uint8{0x41, 0x52, 0x4d}, []uint8{0x41, 0x52, 0x50}, []uint8{0x24}, []uint8{0x41, 0x54, 0x53}, []uint8{0x41, 0x24}, []uint8{0x41, 0x57, 0x47}, []uint8{0x41, 0x5a, 0x4d}, []uint8{0x41, 0x5a, 0x4e}, []uint8{0x42, 0x41, 0x44}, []uint8{0x4b, 0x4d}, []uint8{0x42, 0x41, 0x4e}, []uint8{0x24}, []uint8{0xe0, 0xa7, 0xb3}, []uint8{0x42, 0x45, 0x43}, []uint8{0x42, 0x45, 0x46}, []uint8{0x42, 0x45, 0x4c}, []uint8{0x42, 0x47, 0x4c}, []uint8{0x42, 0x47, 0x4d}, []uint8{0x42, 0x47, 0x4e}, []uint8{0x42, 0x47, 0x4f}, []uint8{0x42, 0x48, 0x44}, []uint8{0x42, 0x49, 0x46}, []uint8{0x24}, []uint8{0x24}, []uint8{0x42, 0x73}, []uint8{0x42, 0x4f, 0x4c}, []uint8{0x42, 0x4f, 0x50}, []uint8{0x42, 0x4f, 0x56}, []uint8{0x42, 0x52, 0x42}, []uint8{0x42, 0x52, 0x43}, []uint8{0x42, 0x52, 0x45}, []uint8{0x52, 0x24}, []uint8{0x42, 0x52, 0x4e}, []uint8{0x42, 0x52, 0x52}, []uint8{0x42, 0x52, 0x5a}, []uint8{0x24}, []uint8{0x42, 0x54, 0x4e}, []uint8{0x42, 0x55, 0x4b}, []uint8{0x50}, []uint8{0x42, 0x59, 0x42}, []uint8{0xd1, 0x80, 0x2e}, []uint8{0x24}, []uint8{0x43, 0x41, 0x24}, []uint8{0x43, 0x44, 0x46}, []uint8{0x43, 0x48, 0x45}, []uint8{0x43, 0x48, 0x46}, []uint8{0x43, 0x48, 0x57}, []uint8{0x43, 0x4c, 0x45}, []uint8{0x43, 0x4c, 0x46}, []uint8{0x24}, []uint8{0x43, 0x4e, 0x58}, []uint8{0x43, 0x4e, 0xc2, 0xa5}, []uint8{0x24}, []uint8{0x43, 0x4f, 0x55}, []uint8{0xe2, 0x82, 0xa1}, []uint8{0x43, 0x53, 0x44}, []uint8{0x43, 0x53, 0x4b}, []uint8{0x24}, []uint8{0x24}, []uint8{0x43, 0x56, 0x45}, []uint8{0x43, 0x59, 0x50}, []uint8{0x4b, 0xc4, 0x8d}, []uint8{0x44, 0x44, 0x4d}, []uint8{0x44, 0x45, 0x4d}, []uint8{0x44, 0x4a, 0x46}, []uint8{0x6b, 0x72}, []uint8{0x24}, []uint8{0x44, 0x5a, 0x44}, []uint8{0x45, 0x43, 0x53}, []uint8{0x45, 0x43, 0x56}, []uint8{0x45, 0x45, 0x4b}, []uint8{0x45, 0xc2, 0xa3}, []uint8{0x45, 0x52, 0x4e}, []uint8{0x45, 0x53, 0x41}, []uint8{0x45, 0x53, 0x42}, []uint8{0xe2, 0x82, 0xa7}, []uint8{0x45, 0x54, 0x42}, []uint8{0xe2, 0x82, 0xac}, []uint8{0x46, 0x49, 0x4d}, []uint8{0x24}, []uint8{0xc2, 0xa3}, []uint8{0x46, 0x52, 0x46}, []uint8{0xc2, 0xa3}, []uint8{0x47, 0x45, 0x4b}, []uint8{0xe2, 0x82, 0xbe}, []uint8{0x47, 0x48, 0x43}, []uint8{0x47, 0x48, 0x53}, []uint8{0xc2, 0xa3}, []uint8{0x47, 0x4d, 0x44}, []uint8{0x46, 0x47}, []uint8{0x47, 0x4e, 0x53}, []uint8{0x47, 0x51, 0x45}, []uint8{0x47, 0x52, 0x44}, []uint8{0x51}, []uint8{0x47, 0x57, 0x45}, []uint8{0x47, 0x57, 0x50}, []uint8{0x24}, []uint8{0x48, 0x4b, 0x24}, []uint8{0x4c}, []uint8{0x48, 0x52, 0x44}, []uint8{0x6b, 0x6e}, []uint8{0x48, 0x54, 0x47}, []uint8{0x46, 0x74}, []uint8{0x52, 0x70}, []uint8{0x49, 0x45, 0x50}, []uint8{0x49, 0x4c, 0x50}, []uint8{0x49, 0x4c, 0x52}, []uint8{0xe2, 0x82, 0xaa}, []uint8{0xe2, 0x82, 0xb9}, []uint8{0x49, 0x51, 0x44}, []uint8{0x49, 0x52, 0x52}, []uint8{0x49, 0x53, 0x4a}, []uint8{0x6b, 0x72}, []uint8{0x49, 0x54, 0x4c}, []uint8{0x24}, []uint8{0x4a, 0x4f, 0x44}, []uint8{0x4a, 0x50, 0xc2, 0xa5}, []uint8{0x4b, 0x45, 0x53}, []uint8{0x4b, 0x47, 0x53}, []uint8{0xe1, 0x9f, 0x9b}, []uint8{0x43, 0x46}, []uint8{0xe2, 0x82, 0xa9}, []uint8{0x4b, 0x52, 0x48}, []uint8{0x4b, 0x52, 0x4f}, []uint8{0xe2, 0x82, 0xa9}, []uint8{0x4b, 0x57, 0x44}, []uint8{0x24}, []uint8{0xe2, 0x82, 0xb8}, []uint8{0xe2, 0x82, 0xad}, []uint8{0x4c, 0xc2, 0xa3}, []uint8{0x52, 0x73}, []uint8{0x24}, []uint8{0x4c, 0x53, 0x4c}, []uint8{0x4c, 0x74}, []uint8{0x4c, 0x54, 0x54}, []uint8{0x4c, 0x55, 0x43}, []uint8{0x4c, 0x55, 0x46}, []uint8{0x4c, 0x55, 0x4c}, []uint8{0x4c, 0x73}, []uint8{0x4c, 0x56, 0x52}, []uint8{0x4c, 0x59, 0x44}, []uint8{0x4d, 0x41, 0x44}, []uint8{0x4d, 0x41, 0x46}, []uint8{0x4d, 0x43, 0x46}, []uint8{0x4d, 0x44, 0x43}, []uint8{0x4d, 0x44, 0x4c}, []uint8{0x41, 0x72}, []uint8{0x4d, 0x47, 0x46}, []uint8{0x4d, 0x4b, 0x44}, []uint8{0x4d, 0x4b, 0x4e}, []uint8{0x4d, 0x4c, 0x46}, []uint8{0x4b}, []uint8{0xe2, 0x82, 0xae}, []uint8{0x4d, 0x4f, 0x50}, []uint8{0x4d, 0x52, 0x4f}, []uint8{0x4d, 0x54, 0x4c}, []uint8{0x4d, 0x54, 0x50}, []uint8{0x52, 0x73}, []uint8{0x4d, 0x56, 0x50}, []uint8{0x4d, 0x56, 0x52}, []uint8{0x4d, 0x57, 0x4b}, []uint8{0x4d, 0x58, 0x24}, []uint8{0x4d, 0x58, 0x50}, []uint8{0x4d, 0x58, 0x56}, []uint8{0x52, 0x4d}, []uint8{0x4d, 0x5a, 0x45}, []uint8{0x4d, 0x5a, 0x4d}, []uint8{0x4d, 0x5a, 0x4e}, []uint8{0x24}, []uint8{0xe2, 0x82, 0xa6}, []uint8{0x4e, 0x49, 0x43}, []uint8{0x43, 0x24}, []uint8{0x4e, 0x4c, 0x47}, []uint8{0x6b, 0x72}, []uint8{0x52, 0x73}, []uint8{0x4e, 0x5a, 0x24}, []uint8{0x4f, 0x4d, 0x52}, []uint8{0x50, 0x41, 0x42}, []uint8{0x50, 0x45, 0x49}, []uint8{0x50, 0x45, 0x4e}, []uint8{0x50, 0x45, 0x53}, []uint8{0x50, 0x47, 0x4b}, []uint8{0xe2, 0x82, 0xb1}, []uint8{0x52, 0x73}, []uint8{0x7a, 0xc5, 0x82}, []uint8{0x50, 0x4c, 0x5a}, []uint8{0x50, 0x54, 0x45}, []uint8{0xe2, 0x82, 0xb2}, []uint8{0x51, 0x41, 0x52}, []uint8{0x52, 0x48, 0x44}, []uint8{0x52, 0x4f, 0x4c}, []uint8{0x52, 0x4f, 0x4e}, []uint8{0x52, 0x53, 0x44}, []uint8{0xe2, 0x82, 0xbd}, []uint8{0xd1, 0x80, 0x2e}, []uint8{0x52, 0x46}, []uint8{0x53, 0x41, 0x52}, []uint8{0x24}, []uint8{0x53, 0x43, 0x52}, []uint8{0x53, 0x44, 0x44}, []uint8{0x53, 0x44, 0x47}, []uint8{0x53, 0x44, 0x50}, []uint8{0x6b, 0x72}, []uint8{0x24}, []uint8{0xc2, 0xa3}, []uint8{0x53, 0x49, 0x54}, []uint8{0x53, 0x4b, 0x4b}, []uint8{0x53, 0x4c, 0x4c}, []uint8{0x53, 0x4f, 0x53}, []uint8{0x24}, []uint8{0x53, 0x52, 0x47}, []uint8{0xc2, 0xa3}, []uint8{0x44, 0x62}, []uint8{0x53, 0x55, 0x52}, []uint8{0x53, 0x56, 0x43}, []uint8{0xc2, 0xa3}, []uint8{0x53, 0x5a, 0x4c}, []uint8{0xe0, 0xb8, 0xbf}, []uint8{0x54, 0x4a, 0x52}, []uint8{0x54, 0x4a, 0x53}, []uint8{0x54, 0x4d, 0x4d}, []uint8{0x54, 0x4d, 0x54}, []uint8{0x54, 0x4e, 0x44}, []uint8{0x54, 0x24}, []uint8{0x54, 0x50, 0x45}, []uint8{0x54, 0x52, 0x4c}, []uint8{0xe2, 0x82, 0xba}, []uint8{0x24}, []uint8{0x4e, 0x54, 0x24}, []uint8{0x54, 0x5a, 0x53}, []uint8{0xe2, 0x82, 0xb4}, []uint8{0x55, 0x41, 0x4b}, []uint8{0x55, 0x47, 0x53}, []uint8{0x55, 0x47, 0x58}, []uint8{0x55, 0x53, 0x24}, []uint8{0x55, 0x53, 0x4e}, []uint8{0x55, 0x53, 0x53}, []uint8{0x55, 0x59, 0x49}, []uint8{0x55, 0x59, 0x50}, []uint8{0x24}, []uint8{0x55, 0x5a, 0x53}, []uint8{0x56, 0x45, 0x42}, []uint8{0x42, 0x73}, []uint8{0xe2, 0x82, 0xab}, []uint8{0x56, 0x4e, 0x4e}, []uint8{0x56, 0x55, 0x56}, []uint8{0x57, 0x53, 0x54}, []uint8{0x46, 0x43, 0x46, 0x41}, []uint8{0x58, 0x41, 0x47}, []uint8{0x58, 0x41, 0x55}, []uint8{0x58, 0x42, 0x41}, []uint8{0x58, 0x42, 0x42}, []uint8{0x58, 0x42, 0x43}, []uint8{0x58, 0x42, 0x44}, []uint8{0x45, 0x43, 0x24}, []uint8{0x58, 0x44, 0x52}, []uint8{0x58, 0x45, 0x55}, []uint8{0x58, 0x46, 0x4f}, []uint8{0x58, 0x46, 0x55}, []uint8{0x43, 0x46, 0x41}, []uint8{0x58, 0x50, 0x44}, []uint8{0x43, 0x46, 0x50, 0x46}, []uint8{0x58, 0x50, 0x54}, []uint8{0x58, 0x52, 0x45}, []uint8{0x58, 0x53, 0x55}, []uint8{0x58, 0x54, 0x53}, []uint8{0x58, 0x55, 0x41}, []uint8{0x58, 0x58, 0x58}, []uint8{0x59, 0x44, 0x44}, []uint8{0x59, 0x45, 0x52}, []uint8{0x59, 0x55, 0x44}, []uint8{0x59, 0x55, 0x4d}, []uint8{0x59, 0x55, 0x4e}, []uint8{0x59, 0x55, 0x52}, []uint8{0x5a, 0x41, 0x4c}, []uint8{0x52}, []uint8{0x5a, 0x4d, 0x4b}, []uint8{0x5a, 0x4b}, []uint8{0x5a, 0x52, 0x4e}, []uint8{0x5a, 0x52, 0x5a}, []uint8{0x5a, 0x57, 0x44}, []uint8{0x5a, 0x57, 0x4c}, []uint8{0x5a, 0x57, 0x52}}} } // Locale returns the current translators string locale func (root *root) Locale() string { return root.locale } // PluralsCardinal returns the list of cardinal plural rules associated with 'root' func (root *root) PluralsCardinal() []locales.PluralRule { return root.pluralsCardinal } // PluralsOrdinal returns the list of ordinal plural rules associated with 'root' func (root *root) PluralsOrdinal() []locales.PluralRule { return root.pluralsOrdinal } // CardinalPluralRule returns the cardinal PluralRule given 'num' and digits/precision of 'v' for 'root' func (root *root) CardinalPluralRule(num float64, v uint64) locales.PluralRule { return locales.PluralRuleOther } // OrdinalPluralRule returns the ordinal PluralRule given 'num' and digits/precision of 'v' for 'root' func (root *root) OrdinalPluralRule(num float64, v uint64) locales.PluralRule { return locales.PluralRuleOther } // RangePluralRule returns the ordinal PluralRule given 'num1', 'num2' and digits/precision of 'v1' and 'v2' for 'root' func (root *root) RangePluralRule(num1 float64, v1 uint64, num2 float64, v2 uint64) locales.PluralRule { return locales.PluralRuleUnknown } // FmtNumber returns 'num' with digits/precision of 'v' for 'root' and handles both Whole and Real numbers based on 'v' // returned as a []byte just in case the caller wishes to add more and can help // avoid allocations; otherwise just cast as string. func (root *root) FmtNumber(num float64, v uint64) []byte { s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64) return []byte(s) } // FmtPercent returns 'num' with digits/precision of 'v' for 'root' and handles both Whole and Real numbers based on 'v' // returned as a []byte just in case the caller wishes to add more and can help // avoid allocations; otherwise just cast as string. // NOTE: 'num' passed into FmtPercent is assumed to be in percent already func (root *root) FmtPercent(num float64, v uint64) []byte { s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64) return []byte(s) } // FmtCurrency returns the currency representation of 'num' with digits/precision of 'v' for 'root' // returned as a []byte just in case the caller wishes to add more and can help // avoid allocations; otherwise just cast as string. func (root *root) FmtCurrency(num float64, v uint64, currency currency.Type) []byte { s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64) symbol := root.currencies[currency] return append(append([]byte{}, symbol...), s...) } // FmtAccounting returns the currency representation of 'num' with digits/precision of 'v' for 'root' // in accounting notation. returned as a []byte just in case the caller wishes to add more and can help // avoid allocations; otherwise just cast as string. func (root *root) FmtAccounting(num float64, v uint64, currency currency.Type) []byte { s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64) symbol := root.currencies[currency] return append(append([]byte{}, symbol...), s...) }