OSDN Git Service

delete miner
[bytom/vapor.git] / vendor / github.com / go-playground / locales / bg / bg.go
1 package bg
2
3 import (
4         "math"
5         "strconv"
6         "time"
7
8         "github.com/go-playground/locales"
9         "github.com/go-playground/locales/currency"
10 )
11
12 type bg struct {
13         locale                 string
14         pluralsCardinal        []locales.PluralRule
15         pluralsOrdinal         []locales.PluralRule
16         pluralsRange           []locales.PluralRule
17         decimal                string
18         group                  string
19         minus                  string
20         percent                string
21         perMille               string
22         timeSeparator          string
23         inifinity              string
24         currencies             []string // idx = enum of currency code
25         currencyPositiveSuffix string
26         currencyNegativePrefix string
27         currencyNegativeSuffix string
28         monthsAbbreviated      []string
29         monthsNarrow           []string
30         monthsWide             []string
31         daysAbbreviated        []string
32         daysNarrow             []string
33         daysShort              []string
34         daysWide               []string
35         periodsAbbreviated     []string
36         periodsNarrow          []string
37         periodsShort           []string
38         periodsWide            []string
39         erasAbbreviated        []string
40         erasNarrow             []string
41         erasWide               []string
42         timezones              map[string]string
43 }
44
45 // New returns a new instance of translator for the 'bg' locale
46 func New() locales.Translator {
47         return &bg{
48                 locale:                 "bg",
49                 pluralsCardinal:        []locales.PluralRule{2, 6},
50                 pluralsOrdinal:         []locales.PluralRule{6},
51                 pluralsRange:           []locales.PluralRule{6},
52                 decimal:                ",",
53                 group:                  " ",
54                 minus:                  "-",
55                 percent:                "%",
56                 perMille:               "‰",
57                 timeSeparator:          ":",
58                 inifinity:              "∞",
59                 currencies:             []string{"ADP", "AED", "AFA", "AFN", "ALK", "ALL", "AMD", "ANG", "AOA", "AOK", "AON", "AOR", "ARA", "ARL", "ARM", "ARP", "ARS", "ATS", "AUD", "AWG", "AZM", "AZN", "BAD", "BAM", "BAN", "BBD", "BDT", "BEC", "BEF", "BEL", "BGL", "BGM", "лв.", "BGO", "BHD", "BIF", "BMD", "BND", "BOB", "BOL", "BOP", "BOV", "BRB", "BRC", "BRE", "BRL", "BRN", "BRR", "BRZ", "BSD", "BTN", "BUK", "BWP", "BYB", "BYN", "BYR", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLE", "CLF", "CLP", "CNX", "CNY", "COP", "COU", "CRC", "CSD", "CSK", "CUC", "CUP", "CVE", "CYP", "CZK", "DDM", "DEM", "DJF", "DKK", "DOP", "DZD", "ECS", "ECV", "EEK", "EGP", "ERN", "ESA", "ESB", "ESP", "ETB", "€", "FIM", "FJD", "FKP", "FRF", "GBP", "GEK", "GEL", "GHC", "GHS", "GIP", "GMD", "GNF", "GNS", "GQE", "GRD", "GTQ", "GWE", "GWP", "GYD", "HKD", "HNL", "HRD", "HRK", "HTG", "HUF", "IDR", "IEP", "ILP", "ILR", "ILS", "INR", "IQD", "IRR", "ISJ", "ISK", "ITL", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRH", "KRO", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LTT", "LUC", "LUF", "LUL", "LVL", "LVR", "LYD", "MAD", "MAF", "MCF", "MDC", "MDL", "MGA", "MGF", "MKD", "MKN", "MLF", "MMK", "MNT", "MOP", "MRO", "MTL", "MTP", "MUR", "MVP", "MVR", "MWK", "MXN", "MXP", "MXV", "MYR", "MZE", "MZM", "MZN", "NAD", "NGN", "NIC", "NIO", "NLG", "NOK", "NPR", "NZD", "OMR", "PAB", "PEI", "PEN", "PES", "PGK", "PHP", "PKR", "PLN", "PLZ", "PTE", "PYG", "QAR", "RHD", "ROL", "RON", "RSD", "RUB", "RUR", "RWF", "SAR", "SBD", "SCR", "SDD", "SDG", "SDP", "SEK", "SGD", "SHP", "SIT", "SKK", "SLL", "SOS", "SRD", "SRG", "SSP", "STD", "SUR", "SVC", "SYP", "SZL", "THB", "TJR", "TJS", "TMM", "TMT", "TND", "TOP", "TPE", "TRL", "TRY", "TTD", "TWD", "TZS", "UAH", "UAK", "UGS", "UGX", "щ.д.", "USN", "USS", "UYI", "UYP", "UYU", "UZS", "VEB", "VEF", "VND", "VNN", "VUV", "WST", "FCFA", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XEU", "XFO", "XFU", "CFA", "XPD", "CFPF", "XPT", "XRE", "XSU", "XTS", "XUA", "XXX", "YDD", "YER", "YUD", "YUM", "YUN", "YUR", "ZAL", "ZAR", "ZMK", "ZMW", "ZRN", "ZRZ", "ZWD", "ZWL", "ZWR"},
60                 currencyPositiveSuffix: " ",
61                 currencyNegativePrefix: "(",
62                 currencyNegativeSuffix: " )",
63                 monthsAbbreviated:      []string{"", "яну", "фев", "март", "апр", "май", "юни", "юли", "авг", "сеп", "окт", "ное", "дек"},
64                 monthsNarrow:           []string{"", "я", "ф", "м", "а", "м", "ю", "ю", "а", "с", "о", "н", "д"},
65                 monthsWide:             []string{"", "януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"},
66                 daysAbbreviated:        []string{"нд", "пн", "вт", "ср", "чт", "пт", "сб"},
67                 daysNarrow:             []string{"н", "п", "в", "с", "ч", "п", "с"},
68                 daysShort:              []string{"нд", "пн", "вт", "ср", "чт", "пт", "сб"},
69                 daysWide:               []string{"неделя", "понеделник", "вторник", "сряда", "четвъртък", "петък", "събота"},
70                 periodsAbbreviated:     []string{"am", "pm"},
71                 periodsNarrow:          []string{"am", "pm"},
72                 periodsWide:            []string{"пр.об.", "сл.об."},
73                 erasAbbreviated:        []string{"пр.Хр.", "сл.Хр."},
74                 erasNarrow:             []string{"", ""},
75                 erasWide:               []string{"преди Христа", "след Христа"},
76                 timezones:              map[string]string{"LHST": "Лорд Хау – стандартно време", "WART": "Западноаржентинско стандартно време", "ART": "Аржентинско стандартно време", "ADT": "Северноамериканско атлантическо лятно часово време", "HKST": "Хонконгско лятно часово време", "WEZ": "Западноевропейско стандартно време", "CAT": "Централноафриканско време", "MESZ": "Централноевропейско лятно часово време", "HNPM": "Сен Пиер и Микелон – стандартно време", "HEPM": "Сен Пиер и Микелон – лятно часово време", "PST": "Северноамериканско тихоокеанско стандартно време", "CDT": "Северноамериканско централно лятно часово време", "HEEG": "Източногренландско лятно часово време", "HKT": "Хонконгско стандартно време", "ACDT": "Австралия – централно лятно часово време", "ECT": "Еквадорско време", "OEZ": "Източноевропейско стандартно време", "NZST": "Новозеландско стандартно време", "WARST": "Западноаржентинско лятно часово време", "HENOMX": "Мексико – северозападно лятно часово време", "WITA": "Централноиндонезийско време", "ACST": "Австралия – централно стандартно време", "HECU": "Кубинско лятно часово време", "PDT": "Северноамериканско тихоокеанско лятно часово време", "WAST": "Западноафриканско лятно часово време", "SGT": "Сингапурско време", "ARST": "Аржентинско лятно часово време", "HNOG": "Западногренландско стандартно време", "VET": "Венецуелско време", "HNCU": "Кубинско стандартно време", "BT": "Бутанско време", "UYT": "Уругвайско стандартно време", "ACWST": "Австралия – западно централно стандартно време", "SAST": "Южноафриканско време", "EAT": "Източноафриканско време", "COST": "Колумбийско лятно часово време", "EDT": "Северноамериканско източно лятно часово време", "HADT": "Хавайско-алеутско лятно часово време", "IST": "Индийско стандартно време", "∅∅∅": "Амазонско лятно часово време", "TMST": "Туркменистанско лятно часово време", "JST": "Японско стандартно време", "OESZ": "Източноевропейско лятно часово време", "ACWDT": "Австралия – западно централно лятно часово време", "HNNOMX": "Мексико – северозападно стандартно време", "HNEG": "Източногренландско стандартно време", "EST": "Северноамериканско източно стандартно време", "GMT": "Средно гринуичко време", "SRT": "Суринамско време", "JDT": "Японско лятно часово време", "COT": "Колумбийско стандартно време", "HAT": "Нюфаундлендско лятно часово време", "BOT": "Боливийско време", "AWDT": "Австралия – западно лятно часово време", "AKDT": "Аляска – лятно часово време", "HAST": "Хавайско-алеутско стандартно време", "WAT": "Западноафриканско стандартно време", "CLST": "Чилийско лятно часово време", "GFT": "Френска Гвиана", "AKST": "Аляска – стандартно време", "GYT": "Гаяна", "AWST": "Австралия – западно стандартно време", "LHDT": "Лорд Хау – лятно часово време", "CLT": "Чилийско стандартно време", "WIT": "Източноиндонезийско време", "UYST": "Уругвайско лятно часово време", "WIB": "Западноиндонезийско време", "CHAST": "Чатъм – стандартно време", "MST": "MST", "CST": "Северноамериканско централно стандартно време", "AST": "Северноамериканско атлантическо стандартно време", "HNT": "Нюфаундлендско стандартно време", "ChST": "Чаморо – стандартно време", "MDT": "MDT", "MYT": "Малайзийско време", "MEZ": "Централноевропейско стандартно време", "AEDT": "Австралия – източно лятно часово време", "HNPMX": "Мексиканско тихоокеанско стандартно време", "HEPMX": "Мексиканско тихоокеанско лятно часово време", "CHADT": "Чатъм – лятно часово време", "NZDT": "Новозеландско лятно часово време", "WESZ": "Западноевропейско лятно време", "TMT": "Туркменистанско стандартно време", "AEST": "Австралия – източно стандартно време", "HEOG": "Западногренландско лятно часово време"},
77         }
78 }
79
80 // Locale returns the current translators string locale
81 func (bg *bg) Locale() string {
82         return bg.locale
83 }
84
85 // PluralsCardinal returns the list of cardinal plural rules associated with 'bg'
86 func (bg *bg) PluralsCardinal() []locales.PluralRule {
87         return bg.pluralsCardinal
88 }
89
90 // PluralsOrdinal returns the list of ordinal plural rules associated with 'bg'
91 func (bg *bg) PluralsOrdinal() []locales.PluralRule {
92         return bg.pluralsOrdinal
93 }
94
95 // PluralsRange returns the list of range plural rules associated with 'bg'
96 func (bg *bg) PluralsRange() []locales.PluralRule {
97         return bg.pluralsRange
98 }
99
100 // CardinalPluralRule returns the cardinal PluralRule given 'num' and digits/precision of 'v' for 'bg'
101 func (bg *bg) CardinalPluralRule(num float64, v uint64) locales.PluralRule {
102
103         n := math.Abs(num)
104
105         if n == 1 {
106                 return locales.PluralRuleOne
107         }
108
109         return locales.PluralRuleOther
110 }
111
112 // OrdinalPluralRule returns the ordinal PluralRule given 'num' and digits/precision of 'v' for 'bg'
113 func (bg *bg) OrdinalPluralRule(num float64, v uint64) locales.PluralRule {
114         return locales.PluralRuleOther
115 }
116
117 // RangePluralRule returns the ordinal PluralRule given 'num1', 'num2' and digits/precision of 'v1' and 'v2' for 'bg'
118 func (bg *bg) RangePluralRule(num1 float64, v1 uint64, num2 float64, v2 uint64) locales.PluralRule {
119         return locales.PluralRuleOther
120 }
121
122 // MonthAbbreviated returns the locales abbreviated month given the 'month' provided
123 func (bg *bg) MonthAbbreviated(month time.Month) string {
124         return bg.monthsAbbreviated[month]
125 }
126
127 // MonthsAbbreviated returns the locales abbreviated months
128 func (bg *bg) MonthsAbbreviated() []string {
129         return bg.monthsAbbreviated[1:]
130 }
131
132 // MonthNarrow returns the locales narrow month given the 'month' provided
133 func (bg *bg) MonthNarrow(month time.Month) string {
134         return bg.monthsNarrow[month]
135 }
136
137 // MonthsNarrow returns the locales narrow months
138 func (bg *bg) MonthsNarrow() []string {
139         return bg.monthsNarrow[1:]
140 }
141
142 // MonthWide returns the locales wide month given the 'month' provided
143 func (bg *bg) MonthWide(month time.Month) string {
144         return bg.monthsWide[month]
145 }
146
147 // MonthsWide returns the locales wide months
148 func (bg *bg) MonthsWide() []string {
149         return bg.monthsWide[1:]
150 }
151
152 // WeekdayAbbreviated returns the locales abbreviated weekday given the 'weekday' provided
153 func (bg *bg) WeekdayAbbreviated(weekday time.Weekday) string {
154         return bg.daysAbbreviated[weekday]
155 }
156
157 // WeekdaysAbbreviated returns the locales abbreviated weekdays
158 func (bg *bg) WeekdaysAbbreviated() []string {
159         return bg.daysAbbreviated
160 }
161
162 // WeekdayNarrow returns the locales narrow weekday given the 'weekday' provided
163 func (bg *bg) WeekdayNarrow(weekday time.Weekday) string {
164         return bg.daysNarrow[weekday]
165 }
166
167 // WeekdaysNarrow returns the locales narrow weekdays
168 func (bg *bg) WeekdaysNarrow() []string {
169         return bg.daysNarrow
170 }
171
172 // WeekdayShort returns the locales short weekday given the 'weekday' provided
173 func (bg *bg) WeekdayShort(weekday time.Weekday) string {
174         return bg.daysShort[weekday]
175 }
176
177 // WeekdaysShort returns the locales short weekdays
178 func (bg *bg) WeekdaysShort() []string {
179         return bg.daysShort
180 }
181
182 // WeekdayWide returns the locales wide weekday given the 'weekday' provided
183 func (bg *bg) WeekdayWide(weekday time.Weekday) string {
184         return bg.daysWide[weekday]
185 }
186
187 // WeekdaysWide returns the locales wide weekdays
188 func (bg *bg) WeekdaysWide() []string {
189         return bg.daysWide
190 }
191
192 // Decimal returns the decimal point of number
193 func (bg *bg) Decimal() string {
194         return bg.decimal
195 }
196
197 // Group returns the group of number
198 func (bg *bg) Group() string {
199         return bg.group
200 }
201
202 // Group returns the minus sign of number
203 func (bg *bg) Minus() string {
204         return bg.minus
205 }
206
207 // FmtNumber returns 'num' with digits/precision of 'v' for 'bg' and handles both Whole and Real numbers based on 'v'
208 func (bg *bg) FmtNumber(num float64, v uint64) string {
209
210         s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
211         l := len(s) + 2 + 2*len(s[:len(s)-int(v)-1])/3
212         count := 0
213         inWhole := v == 0
214         b := make([]byte, 0, l)
215
216         for i := len(s) - 1; i >= 0; i-- {
217
218                 if s[i] == '.' {
219                         b = append(b, bg.decimal[0])
220                         inWhole = true
221                         continue
222                 }
223
224                 if inWhole {
225                         if count == 3 {
226                                 for j := len(bg.group) - 1; j >= 0; j-- {
227                                         b = append(b, bg.group[j])
228                                 }
229                                 count = 1
230                         } else {
231                                 count++
232                         }
233                 }
234
235                 b = append(b, s[i])
236         }
237
238         if num < 0 {
239                 b = append(b, bg.minus[0])
240         }
241
242         // reverse
243         for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
244                 b[i], b[j] = b[j], b[i]
245         }
246
247         return string(b)
248 }
249
250 // FmtPercent returns 'num' with digits/precision of 'v' for 'bg' and handles both Whole and Real numbers based on 'v'
251 // NOTE: 'num' passed into FmtPercent is assumed to be in percent already
252 func (bg *bg) FmtPercent(num float64, v uint64) string {
253         s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
254         l := len(s) + 3
255         b := make([]byte, 0, l)
256
257         for i := len(s) - 1; i >= 0; i-- {
258
259                 if s[i] == '.' {
260                         b = append(b, bg.decimal[0])
261                         continue
262                 }
263
264                 b = append(b, s[i])
265         }
266
267         if num < 0 {
268                 b = append(b, bg.minus[0])
269         }
270
271         // reverse
272         for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
273                 b[i], b[j] = b[j], b[i]
274         }
275
276         b = append(b, bg.percent...)
277
278         return string(b)
279 }
280
281 // FmtCurrency returns the currency representation of 'num' with digits/precision of 'v' for 'bg'
282 func (bg *bg) FmtCurrency(num float64, v uint64, currency currency.Type) string {
283
284         s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
285         symbol := bg.currencies[currency]
286         l := len(s) + len(symbol) + 4
287
288         b := make([]byte, 0, l)
289
290         for i := len(s) - 1; i >= 0; i-- {
291
292                 if s[i] == '.' {
293                         b = append(b, bg.decimal[0])
294                         continue
295                 }
296
297                 b = append(b, s[i])
298         }
299
300         if num < 0 {
301                 b = append(b, bg.minus[0])
302         }
303
304         // reverse
305         for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
306                 b[i], b[j] = b[j], b[i]
307         }
308
309         if int(v) < 2 {
310
311                 if v == 0 {
312                         b = append(b, bg.decimal...)
313                 }
314
315                 for i := 0; i < 2-int(v); i++ {
316                         b = append(b, '0')
317                 }
318         }
319
320         b = append(b, bg.currencyPositiveSuffix...)
321
322         b = append(b, symbol...)
323
324         return string(b)
325 }
326
327 // FmtAccounting returns the currency representation of 'num' with digits/precision of 'v' for 'bg'
328 // in accounting notation.
329 func (bg *bg) FmtAccounting(num float64, v uint64, currency currency.Type) string {
330
331         s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
332         symbol := bg.currencies[currency]
333         l := len(s) + len(symbol) + 6
334
335         b := make([]byte, 0, l)
336
337         for i := len(s) - 1; i >= 0; i-- {
338
339                 if s[i] == '.' {
340                         b = append(b, bg.decimal[0])
341                         continue
342                 }
343
344                 b = append(b, s[i])
345         }
346
347         if num < 0 {
348
349                 b = append(b, bg.currencyNegativePrefix[0])
350
351         }
352
353         // reverse
354         for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
355                 b[i], b[j] = b[j], b[i]
356         }
357
358         if int(v) < 2 {
359
360                 if v == 0 {
361                         b = append(b, bg.decimal...)
362                 }
363
364                 for i := 0; i < 2-int(v); i++ {
365                         b = append(b, '0')
366                 }
367         }
368
369         if num < 0 {
370                 b = append(b, bg.currencyNegativeSuffix...)
371                 b = append(b, symbol...)
372         } else {
373
374                 b = append(b, bg.currencyPositiveSuffix...)
375                 b = append(b, symbol...)
376         }
377
378         return string(b)
379 }
380
381 // FmtDateShort returns the short date representation of 't' for 'bg'
382 func (bg *bg) FmtDateShort(t time.Time) string {
383
384         b := make([]byte, 0, 32)
385
386         b = strconv.AppendInt(b, int64(t.Day()), 10)
387         b = append(b, []byte{0x2e}...)
388
389         if t.Month() < 10 {
390                 b = append(b, '0')
391         }
392
393         b = strconv.AppendInt(b, int64(t.Month()), 10)
394
395         b = append(b, []byte{0x2e}...)
396
397         if t.Year() > 9 {
398                 b = append(b, strconv.Itoa(t.Year())[2:]...)
399         } else {
400                 b = append(b, strconv.Itoa(t.Year())[1:]...)
401         }
402
403         b = append(b, []byte{0x20, 0xd0, 0xb3}...)
404         b = append(b, []byte{0x2e}...)
405
406         return string(b)
407 }
408
409 // FmtDateMedium returns the medium date representation of 't' for 'bg'
410 func (bg *bg) FmtDateMedium(t time.Time) string {
411
412         b := make([]byte, 0, 32)
413
414         b = strconv.AppendInt(b, int64(t.Day()), 10)
415         b = append(b, []byte{0x2e}...)
416
417         if t.Month() < 10 {
418                 b = append(b, '0')
419         }
420
421         b = strconv.AppendInt(b, int64(t.Month()), 10)
422
423         b = append(b, []byte{0x2e}...)
424
425         if t.Year() > 0 {
426                 b = strconv.AppendInt(b, int64(t.Year()), 10)
427         } else {
428                 b = strconv.AppendInt(b, int64(-t.Year()), 10)
429         }
430
431         b = append(b, []byte{0x20, 0xd0, 0xb3}...)
432         b = append(b, []byte{0x2e}...)
433
434         return string(b)
435 }
436
437 // FmtDateLong returns the long date representation of 't' for 'bg'
438 func (bg *bg) FmtDateLong(t time.Time) string {
439
440         b := make([]byte, 0, 32)
441
442         b = strconv.AppendInt(b, int64(t.Day()), 10)
443         b = append(b, []byte{0x20}...)
444         b = append(b, bg.monthsWide[t.Month()]...)
445         b = append(b, []byte{0x20}...)
446
447         if t.Year() > 0 {
448                 b = strconv.AppendInt(b, int64(t.Year()), 10)
449         } else {
450                 b = strconv.AppendInt(b, int64(-t.Year()), 10)
451         }
452
453         b = append(b, []byte{0x20, 0xd0, 0xb3}...)
454         b = append(b, []byte{0x2e}...)
455
456         return string(b)
457 }
458
459 // FmtDateFull returns the full date representation of 't' for 'bg'
460 func (bg *bg) FmtDateFull(t time.Time) string {
461
462         b := make([]byte, 0, 32)
463
464         b = append(b, bg.daysWide[t.Weekday()]...)
465         b = append(b, []byte{0x2c, 0x20}...)
466         b = strconv.AppendInt(b, int64(t.Day()), 10)
467         b = append(b, []byte{0x20}...)
468         b = append(b, bg.monthsWide[t.Month()]...)
469         b = append(b, []byte{0x20}...)
470
471         if t.Year() > 0 {
472                 b = strconv.AppendInt(b, int64(t.Year()), 10)
473         } else {
474                 b = strconv.AppendInt(b, int64(-t.Year()), 10)
475         }
476
477         b = append(b, []byte{0x20, 0xd0, 0xb3}...)
478         b = append(b, []byte{0x2e}...)
479
480         return string(b)
481 }
482
483 // FmtTimeShort returns the short time representation of 't' for 'bg'
484 func (bg *bg) FmtTimeShort(t time.Time) string {
485
486         b := make([]byte, 0, 32)
487
488         b = strconv.AppendInt(b, int64(t.Hour()), 10)
489         b = append(b, bg.timeSeparator...)
490
491         if t.Minute() < 10 {
492                 b = append(b, '0')
493         }
494
495         b = strconv.AppendInt(b, int64(t.Minute()), 10)
496
497         return string(b)
498 }
499
500 // FmtTimeMedium returns the medium time representation of 't' for 'bg'
501 func (bg *bg) FmtTimeMedium(t time.Time) string {
502
503         b := make([]byte, 0, 32)
504
505         b = strconv.AppendInt(b, int64(t.Hour()), 10)
506         b = append(b, bg.timeSeparator...)
507
508         if t.Minute() < 10 {
509                 b = append(b, '0')
510         }
511
512         b = strconv.AppendInt(b, int64(t.Minute()), 10)
513         b = append(b, bg.timeSeparator...)
514
515         if t.Second() < 10 {
516                 b = append(b, '0')
517         }
518
519         b = strconv.AppendInt(b, int64(t.Second()), 10)
520
521         return string(b)
522 }
523
524 // FmtTimeLong returns the long time representation of 't' for 'bg'
525 func (bg *bg) FmtTimeLong(t time.Time) string {
526
527         b := make([]byte, 0, 32)
528
529         b = strconv.AppendInt(b, int64(t.Hour()), 10)
530         b = append(b, bg.timeSeparator...)
531
532         if t.Minute() < 10 {
533                 b = append(b, '0')
534         }
535
536         b = strconv.AppendInt(b, int64(t.Minute()), 10)
537         b = append(b, bg.timeSeparator...)
538
539         if t.Second() < 10 {
540                 b = append(b, '0')
541         }
542
543         b = strconv.AppendInt(b, int64(t.Second()), 10)
544         b = append(b, []byte{0x20}...)
545
546         tz, _ := t.Zone()
547         b = append(b, tz...)
548
549         return string(b)
550 }
551
552 // FmtTimeFull returns the full time representation of 't' for 'bg'
553 func (bg *bg) FmtTimeFull(t time.Time) string {
554
555         b := make([]byte, 0, 32)
556
557         b = strconv.AppendInt(b, int64(t.Hour()), 10)
558         b = append(b, bg.timeSeparator...)
559
560         if t.Minute() < 10 {
561                 b = append(b, '0')
562         }
563
564         b = strconv.AppendInt(b, int64(t.Minute()), 10)
565         b = append(b, bg.timeSeparator...)
566
567         if t.Second() < 10 {
568                 b = append(b, '0')
569         }
570
571         b = strconv.AppendInt(b, int64(t.Second()), 10)
572         b = append(b, []byte{0x20}...)
573
574         tz, _ := t.Zone()
575
576         if btz, ok := bg.timezones[tz]; ok {
577                 b = append(b, btz...)
578         } else {
579                 b = append(b, tz...)
580         }
581
582         return string(b)
583 }