1 package ccp
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 ccp 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
25 monthsAbbreviated []string
26 monthsNarrow []string
27 monthsWide []string
28 daysAbbreviated []string
29 daysNarrow []string
30 daysShort []string
31 daysWide []string
32 periodsAbbreviated []string
33 periodsNarrow []string
34 periodsShort []string
35 periodsWide []string
36 erasAbbreviated []string
37 erasNarrow []string
38 erasWide []string
39 timezones map[string]string
40 }
41
42
43 func New() locales.Translator {
44 return &ccp{
45 locale: "ccp",
46 pluralsCardinal: nil,
47 pluralsOrdinal: nil,
48 pluralsRange: nil,
49 decimal: ".",
50 percent: "%",
51 perMille: "‰",
52 timeSeparator: ":",
53 inifinity: "∞",
54 currencies: []string{"ADP", "AED", "AFA", "AFN", "ALK", "ALL", "AMD", "ANG", "AOA", "AOK", "AON", "AOR", "ARA", "ARL", "ARM", "ARP", "ARS", "ATS", "A$", "AWG", "AZM", "AZN", "BAD", "BAM", "BAN", "BBD", "৳", "BEC", "BEF", "BEL", "BGL", "BGM", "BGN", "BGO", "BHD", "BIF", "BMD", "BND", "BOB", "BOL", "BOP", "BOV", "BRB", "BRC", "BRE", "R$", "BRN", "BRR", "BRZ", "BSD", "BTN", "BUK", "BWP", "BYB", "BYN", "BYR", "BZD", "CA$", "CDF", "CHE", "CHF", "CHW", "CLE", "CLF", "CLP", "CNH", "CNX", "CN¥", "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", "£", "GEK", "GEL", "GHC", "GHS", "GIP", "GMD", "GNF", "GNS", "GQE", "GRD", "GTQ", "GWE", "GWP", "GYD", "HK$", "HNL", "HRD", "HRK", "HTG", "HUF", "IDR", "IEP", "ILP", "ILR", "₪", "₹", "IQD", "IRR", "ISJ", "ISK", "ITL", "JMD", "JOD", "JP¥", "KES", "KGS", "KHR", "KMF", "KPW", "KRH", "KRO", "₩", "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", "MRU", "MTL", "MTP", "MUR", "MVP", "MVR", "MWK", "MX$", "MXP", "MXV", "MYR", "MZE", "MZM", "MZN", "NAD", "NGN", "NIC", "NIO", "NLG", "NOK", "NPR", "NZ$", "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", "STN", "SUR", "SVC", "SYP", "SZL", "฿", "TJR", "TJS", "TMM", "TMT", "TND", "TOP", "TPE", "TRL", "TRY", "TTD", "NT$", "TZS", "UAH", "UAK", "UGS", "UGX", "US$", "USN", "USS", "UYI", "UYP", "UYU", "UYW", "UZS", "VEB", "VEF", "VES", "₫", "VNN", "VUV", "WST", "FCFA", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "EC$", "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"},
55 monthsAbbreviated: []string{"", "𑄎𑄚𑄪", "𑄜𑄬𑄛𑄴", "𑄟𑄢𑄴𑄌𑄧", "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", "𑄟𑄬", "𑄎𑄪𑄚𑄴", "𑄎𑄪𑄣𑄭", "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", "𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴", "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄢𑄴"},
56 monthsNarrow: []string{"", "𑄎", "𑄜𑄬", "𑄟", "𑄃𑄬", "𑄟𑄬", "𑄎𑄪𑄚𑄴", "𑄎𑄪", "𑄃", "𑄥𑄬", "𑄃𑄧", "𑄚𑄧", "𑄓𑄨"},
57 monthsWide: []string{"", "𑄎𑄚𑄪𑄠𑄢𑄨", "𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨", "𑄟𑄢𑄴𑄌𑄧", "𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴", "𑄟𑄬", "𑄎𑄪𑄚𑄴", "𑄎𑄪𑄣𑄭", "𑄃𑄉𑄧𑄌𑄴𑄑𑄴", "𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴", "𑄃𑄧𑄇𑄴𑄑𑄬𑄝𑄧𑄢𑄴", "𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴", "𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴"},
58 daysAbbreviated: []string{"𑄢𑄧𑄝𑄨", "𑄥𑄧𑄟𑄴", "𑄟𑄧𑄁𑄉𑄧𑄣𑄴", "𑄝𑄪𑄖𑄴", "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴", "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴", "𑄥𑄧𑄚𑄨"},
59 daysNarrow: []string{"𑄢𑄧", "𑄥𑄧", "𑄟𑄧", "𑄝𑄪", "𑄝𑄳𑄢𑄨", "𑄥𑄪", "𑄥𑄧"},
60 daysWide: []string{"𑄢𑄧𑄝𑄨𑄝𑄢𑄴", "𑄥𑄧𑄟𑄴𑄝𑄢𑄴", "𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴", "𑄝𑄪𑄖𑄴𑄝𑄢𑄴", "𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴𑄝𑄢𑄴", "𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴", "𑄥𑄧𑄚𑄨𑄝𑄢𑄴"},
61 periodsAbbreviated: []string{"AM", "PM"},
62 periodsNarrow: []string{"AM", "PM"},
63 periodsWide: []string{"AM", "PM"},
64 erasAbbreviated: []string{"", ""},
65 erasNarrow: []string{"", ""},
66 erasWide: []string{"", ""},
67 timezones: map[string]string{"ACDT": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "ACST": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "ACWDT": "ACWDT", "ACWST": "ACWST", "ADT": "𑄃𑄑𑄴𑄣𑄚𑄴𑄖𑄨𑄉𑄮𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AEDT": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄪𑄉𑄬𑄘𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AEST": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄪𑄉𑄬𑄘𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AKDT": "𑄃𑄣𑄌𑄴𑄇 𑄘𑄨𑄚𑄮𑄃𑄣𑄮 𑄃𑄧𑄇𑄴𑄖𑄧", "AKST": "𑄃𑄣𑄌𑄴𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "ARST": "𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "ART": "𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AST": "𑄃𑄑𑄴𑄣𑄚𑄴𑄖𑄨𑄉𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AWDT": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "AWST": "𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "BOT": "𑄝𑄮𑄣𑄨𑄞𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧", "BT": "𑄞𑄪𑄑𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "CAT": "𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄜𑄳𑄢𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧", "CDT": "𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦 𑄘𑄨𑄚𑄮𑄃𑄣𑄮 𑄃𑄧𑄇𑄴𑄖𑄧", "CHADT": "𑄌𑄳𑄠𑄗𑄟𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "CHAST": "𑄌𑄳𑄠𑄗𑄟𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "CLST": "𑄌𑄨𑄣𑄨 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "CLT": "𑄌𑄨𑄣𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "COST": "𑄇𑄧𑄣𑄧𑄟𑄴𑄝𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "COT": "𑄇𑄧𑄣𑄧𑄟𑄴𑄝𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "CST": "𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "ChST": "𑄌𑄟𑄬𑄢𑄮 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "EAT": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧", "ECT": "𑄃𑄨𑄇𑄪𑄠𑄬𑄓𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "EDT": "𑄛𑄪𑄉𑄮 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "EST": "𑄛𑄪𑄉𑄮 𑄞𑄨𑄘𑄬𑄢𑄴 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "GFT": "𑄜𑄧𑄢𑄥𑄨 𑄉𑄠𑄚 𑄃𑄧𑄇𑄴𑄖𑄧", "GMT": "𑄉𑄳𑄢𑄨𑄚𑄨𑄌𑄴 𑄟𑄨𑄚𑄴 𑄑𑄬𑄟𑄴", "GST": "𑄃𑄪𑄛𑄧𑄥𑄉𑄧𑄢𑄨𑄠𑄧 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "GYT": "𑄉𑄪𑄠𑄚 𑄃𑄧𑄇𑄴𑄖𑄧", "HADT": "𑄦𑄧𑄃𑄮𑄠𑄭-𑄃𑄣𑄬𑄃𑄪𑄖𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HAST": "𑄦𑄧𑄃𑄮𑄠𑄭-𑄃𑄣𑄬𑄃𑄪𑄖𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HAT": "𑄚𑄨𑄃𑄪𑄜𑄃𑄪𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HECU": "𑄇𑄨𑄃𑄪𑄝 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HEEG": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HENOMX": "𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HEOG": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HEPM": "𑄥𑄬𑄚𑄴𑄑𑄴 𑄛𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄇𑄬𑄣𑄧𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HEPMX": "𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HKST": "𑄦𑄧𑄁 𑄇𑄧𑄁 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HKT": "𑄦𑄧𑄁 𑄇𑄧𑄁 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNCU": "𑄇𑄨𑄃𑄪𑄝 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNEG": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNNOMX": "𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNOG": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNPM": "𑄥𑄬𑄚𑄴𑄑𑄴 𑄛𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄇𑄬𑄣𑄧𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNPMX": "𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "HNT": "𑄚𑄨𑄃𑄪𑄜𑄃𑄪𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "IST": "𑄃𑄨𑄚𑄴𑄘𑄨𑄠𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "JDT": "𑄎𑄛𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "JST": "𑄎𑄛𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "LHDT": "𑄣𑄧𑄢𑄴𑄓𑄴 𑄦𑄤𑄬 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "LHST": "𑄣𑄧𑄢𑄴𑄓𑄴 𑄦𑄤𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "MDT": "𑄦𑄨𑄣𑄧𑄧𑄱 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "MESZ": "𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "MEZ": "𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "MST": "𑄦𑄨𑄣𑄧𑄧𑄱 𑄞𑄨𑄘𑄬𑄢𑄴 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "MYT": "𑄟𑄣𑄴𑄠𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧", "NZDT": "𑄚𑄨𑄃𑄪𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "NZST": "𑄚𑄨𑄃𑄪𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "OESZ": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "OEZ": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "PDT": "𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "PST": "𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄞𑄨𑄘𑄬𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "SAST": "𑄘𑄧𑄉𑄨𑄚𑄴 𑄃𑄜𑄳𑄢𑄨𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "SGT": "𑄥𑄨𑄁𑄉𑄛𑄪𑄢 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "SRT": "𑄥𑄪𑄢𑄨𑄚𑄟𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "TMST": "𑄖𑄪𑄢𑄴𑄇𑄴𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "TMT": "𑄖𑄪𑄢𑄴𑄇𑄴𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "UYST": "𑄃𑄪𑄢𑄪𑄉𑄪𑄠𑄬 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "UYT": "𑄃𑄪𑄢𑄪𑄉𑄪𑄠𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "VET": "𑄞𑄬𑄚𑄬𑄎𑄪𑄠𑄬𑄣 𑄃𑄧𑄇𑄴𑄖𑄧", "WARST": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WART": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WAST": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WAT": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WESZ": "𑄛𑄧𑄏𑄬𑄟𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WEZ": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧", "WIB": "𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧", "WIT": "𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧", "WITA": "𑄃𑄏𑄧𑄣𑄴 𑄉𑄢𑄳𑄦 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧", "∅∅∅": "𑄝𑄳𑄢𑄥𑄨𑄣𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧"},
68 }
69 }
70
71
72 func (ccp *ccp) Locale() string {
73 return ccp.locale
74 }
75
76
77 func (ccp *ccp) PluralsCardinal() []locales.PluralRule {
78 return ccp.pluralsCardinal
79 }
80
81
82 func (ccp *ccp) PluralsOrdinal() []locales.PluralRule {
83 return ccp.pluralsOrdinal
84 }
85
86
87 func (ccp *ccp) PluralsRange() []locales.PluralRule {
88 return ccp.pluralsRange
89 }
90
91
92 func (ccp *ccp) CardinalPluralRule(num float64, v uint64) locales.PluralRule {
93 return locales.PluralRuleUnknown
94 }
95
96
97 func (ccp *ccp) OrdinalPluralRule(num float64, v uint64) locales.PluralRule {
98 return locales.PluralRuleUnknown
99 }
100
101
102 func (ccp *ccp) RangePluralRule(num1 float64, v1 uint64, num2 float64, v2 uint64) locales.PluralRule {
103 return locales.PluralRuleUnknown
104 }
105
106
107 func (ccp *ccp) MonthAbbreviated(month time.Month) string {
108 return ccp.monthsAbbreviated[month]
109 }
110
111
112 func (ccp *ccp) MonthsAbbreviated() []string {
113 return ccp.monthsAbbreviated[1:]
114 }
115
116
117 func (ccp *ccp) MonthNarrow(month time.Month) string {
118 return ccp.monthsNarrow[month]
119 }
120
121
122 func (ccp *ccp) MonthsNarrow() []string {
123 return ccp.monthsNarrow[1:]
124 }
125
126
127 func (ccp *ccp) MonthWide(month time.Month) string {
128 return ccp.monthsWide[month]
129 }
130
131
132 func (ccp *ccp) MonthsWide() []string {
133 return ccp.monthsWide[1:]
134 }
135
136
137 func (ccp *ccp) WeekdayAbbreviated(weekday time.Weekday) string {
138 return ccp.daysAbbreviated[weekday]
139 }
140
141
142 func (ccp *ccp) WeekdaysAbbreviated() []string {
143 return ccp.daysAbbreviated
144 }
145
146
147 func (ccp *ccp) WeekdayNarrow(weekday time.Weekday) string {
148 return ccp.daysNarrow[weekday]
149 }
150
151
152 func (ccp *ccp) WeekdaysNarrow() []string {
153 return ccp.daysNarrow
154 }
155
156
157 func (ccp *ccp) WeekdayShort(weekday time.Weekday) string {
158 return ccp.daysShort[weekday]
159 }
160
161
162 func (ccp *ccp) WeekdaysShort() []string {
163 return ccp.daysShort
164 }
165
166
167 func (ccp *ccp) WeekdayWide(weekday time.Weekday) string {
168 return ccp.daysWide[weekday]
169 }
170
171
172 func (ccp *ccp) WeekdaysWide() []string {
173 return ccp.daysWide
174 }
175
176
177 func (ccp *ccp) Decimal() string {
178 return ccp.decimal
179 }
180
181
182 func (ccp *ccp) Group() string {
183 return ccp.group
184 }
185
186
187 func (ccp *ccp) Minus() string {
188 return ccp.minus
189 }
190
191
192 func (ccp *ccp) FmtNumber(num float64, v uint64) string {
193
194 s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
195 l := len(s) + 1
196 count := 0
197 inWhole := v == 0
198 inSecondary := false
199 groupThreshold := 3
200
201 b := make([]byte, 0, l)
202
203 for i := len(s) - 1; i >= 0; i-- {
204
205 if s[i] == '.' {
206 b = append(b, ccp.decimal[0])
207 inWhole = true
208 continue
209 }
210
211 if inWhole {
212
213 if count == groupThreshold {
214 b = append(b, ccp.group[0])
215 count = 1
216
217 if !inSecondary {
218 inSecondary = true
219 groupThreshold = 2
220 }
221 } else {
222 count++
223 }
224 }
225
226 b = append(b, s[i])
227 }
228
229 if num < 0 {
230 b = append(b, ccp.minus[0])
231 }
232
233
234 for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
235 b[i], b[j] = b[j], b[i]
236 }
237
238 return string(b)
239 }
240
241
242
243 func (ccp *ccp) FmtPercent(num float64, v uint64) string {
244 s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
245 l := len(s) + 2
246 b := make([]byte, 0, l)
247
248 for i := len(s) - 1; i >= 0; i-- {
249
250 if s[i] == '.' {
251 b = append(b, ccp.decimal[0])
252 continue
253 }
254
255 b = append(b, s[i])
256 }
257
258 if num < 0 {
259 b = append(b, ccp.minus[0])
260 }
261
262
263 for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
264 b[i], b[j] = b[j], b[i]
265 }
266
267 b = append(b, ccp.percent...)
268
269 return string(b)
270 }
271
272
273 func (ccp *ccp) FmtCurrency(num float64, v uint64, currency currency.Type) string {
274
275 s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
276 symbol := ccp.currencies[currency]
277 l := len(s) + len(symbol) + 1
278 count := 0
279 inWhole := v == 0
280 inSecondary := false
281 groupThreshold := 3
282
283 b := make([]byte, 0, l)
284
285 for i := len(s) - 1; i >= 0; i-- {
286
287 if s[i] == '.' {
288 b = append(b, ccp.decimal[0])
289 inWhole = true
290 continue
291 }
292
293 if inWhole {
294
295 if count == groupThreshold {
296 b = append(b, ccp.group[0])
297 count = 1
298
299 if !inSecondary {
300 inSecondary = true
301 groupThreshold = 2
302 }
303 } else {
304 count++
305 }
306 }
307
308 b = append(b, s[i])
309 }
310
311 if num < 0 {
312 b = append(b, ccp.minus[0])
313 }
314
315
316 for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
317 b[i], b[j] = b[j], b[i]
318 }
319
320 if int(v) < 2 {
321
322 if v == 0 {
323 b = append(b, ccp.decimal...)
324 }
325
326 for i := 0; i < 2-int(v); i++ {
327 b = append(b, '0')
328 }
329 }
330
331 b = append(b, symbol...)
332
333 return string(b)
334 }
335
336
337
338 func (ccp *ccp) FmtAccounting(num float64, v uint64, currency currency.Type) string {
339
340 s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64)
341 symbol := ccp.currencies[currency]
342 l := len(s) + len(symbol) + 1
343 count := 0
344 inWhole := v == 0
345 inSecondary := false
346 groupThreshold := 3
347
348 b := make([]byte, 0, l)
349
350 for i := len(s) - 1; i >= 0; i-- {
351
352 if s[i] == '.' {
353 b = append(b, ccp.decimal[0])
354 inWhole = true
355 continue
356 }
357
358 if inWhole {
359
360 if count == groupThreshold {
361 b = append(b, ccp.group[0])
362 count = 1
363
364 if !inSecondary {
365 inSecondary = true
366 groupThreshold = 2
367 }
368 } else {
369 count++
370 }
371 }
372
373 b = append(b, s[i])
374 }
375
376 if num < 0 {
377
378 b = append(b, ccp.minus[0])
379
380 }
381
382
383 for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
384 b[i], b[j] = b[j], b[i]
385 }
386
387 if int(v) < 2 {
388
389 if v == 0 {
390 b = append(b, ccp.decimal...)
391 }
392
393 for i := 0; i < 2-int(v); i++ {
394 b = append(b, '0')
395 }
396 }
397
398 if num < 0 {
399 b = append(b, symbol...)
400 } else {
401
402 b = append(b, symbol...)
403 }
404
405 return string(b)
406 }
407
408
409 func (ccp *ccp) FmtDateShort(t time.Time) string {
410
411 b := make([]byte, 0, 32)
412
413 b = strconv.AppendInt(b, int64(t.Day()), 10)
414 b = append(b, []byte{0x2f}...)
415 b = strconv.AppendInt(b, int64(t.Month()), 10)
416 b = append(b, []byte{0x2f}...)
417
418 if t.Year() > 9 {
419 b = append(b, strconv.Itoa(t.Year())[2:]...)
420 } else {
421 b = append(b, strconv.Itoa(t.Year())[1:]...)
422 }
423
424 return string(b)
425 }
426
427
428 func (ccp *ccp) FmtDateMedium(t time.Time) string {
429
430 b := make([]byte, 0, 32)
431
432 b = strconv.AppendInt(b, int64(t.Day()), 10)
433 b = append(b, []byte{0x20}...)
434 b = append(b, ccp.monthsAbbreviated[t.Month()]...)
435 b = append(b, []byte{0x2c, 0x20}...)
436
437 if t.Year() > 0 {
438 b = strconv.AppendInt(b, int64(t.Year()), 10)
439 } else {
440 b = strconv.AppendInt(b, int64(-t.Year()), 10)
441 }
442
443 return string(b)
444 }
445
446
447 func (ccp *ccp) FmtDateLong(t time.Time) string {
448
449 b := make([]byte, 0, 32)
450
451 b = strconv.AppendInt(b, int64(t.Day()), 10)
452 b = append(b, []byte{0x20}...)
453 b = append(b, ccp.monthsWide[t.Month()]...)
454 b = append(b, []byte{0x2c, 0x20}...)
455
456 if t.Year() > 0 {
457 b = strconv.AppendInt(b, int64(t.Year()), 10)
458 } else {
459 b = strconv.AppendInt(b, int64(-t.Year()), 10)
460 }
461
462 return string(b)
463 }
464
465
466 func (ccp *ccp) FmtDateFull(t time.Time) string {
467
468 b := make([]byte, 0, 32)
469
470 b = append(b, ccp.daysWide[t.Weekday()]...)
471 b = append(b, []byte{0x2c, 0x20}...)
472 b = strconv.AppendInt(b, int64(t.Day()), 10)
473 b = append(b, []byte{0x20}...)
474 b = append(b, ccp.monthsWide[t.Month()]...)
475 b = append(b, []byte{0x2c, 0x20}...)
476
477 if t.Year() > 0 {
478 b = strconv.AppendInt(b, int64(t.Year()), 10)
479 } else {
480 b = strconv.AppendInt(b, int64(-t.Year()), 10)
481 }
482
483 return string(b)
484 }
485
486
487 func (ccp *ccp) FmtTimeShort(t time.Time) string {
488
489 b := make([]byte, 0, 32)
490
491 h := t.Hour()
492
493 if h > 12 {
494 h -= 12
495 }
496
497 b = strconv.AppendInt(b, int64(h), 10)
498 b = append(b, ccp.timeSeparator...)
499
500 if t.Minute() < 10 {
501 b = append(b, '0')
502 }
503
504 b = strconv.AppendInt(b, int64(t.Minute()), 10)
505 b = append(b, []byte{0x20}...)
506
507 if t.Hour() < 12 {
508 b = append(b, ccp.periodsAbbreviated[0]...)
509 } else {
510 b = append(b, ccp.periodsAbbreviated[1]...)
511 }
512
513 return string(b)
514 }
515
516
517 func (ccp *ccp) FmtTimeMedium(t time.Time) string {
518
519 b := make([]byte, 0, 32)
520
521 h := t.Hour()
522
523 if h > 12 {
524 h -= 12
525 }
526
527 b = strconv.AppendInt(b, int64(h), 10)
528 b = append(b, ccp.timeSeparator...)
529
530 if t.Minute() < 10 {
531 b = append(b, '0')
532 }
533
534 b = strconv.AppendInt(b, int64(t.Minute()), 10)
535 b = append(b, ccp.timeSeparator...)
536
537 if t.Second() < 10 {
538 b = append(b, '0')
539 }
540
541 b = strconv.AppendInt(b, int64(t.Second()), 10)
542 b = append(b, []byte{0x20}...)
543
544 if t.Hour() < 12 {
545 b = append(b, ccp.periodsAbbreviated[0]...)
546 } else {
547 b = append(b, ccp.periodsAbbreviated[1]...)
548 }
549
550 return string(b)
551 }
552
553
554 func (ccp *ccp) FmtTimeLong(t time.Time) string {
555
556 b := make([]byte, 0, 32)
557
558 h := t.Hour()
559
560 if h > 12 {
561 h -= 12
562 }
563
564 b = strconv.AppendInt(b, int64(h), 10)
565 b = append(b, ccp.timeSeparator...)
566
567 if t.Minute() < 10 {
568 b = append(b, '0')
569 }
570
571 b = strconv.AppendInt(b, int64(t.Minute()), 10)
572 b = append(b, ccp.timeSeparator...)
573
574 if t.Second() < 10 {
575 b = append(b, '0')
576 }
577
578 b = strconv.AppendInt(b, int64(t.Second()), 10)
579 b = append(b, []byte{0x20}...)
580
581 if t.Hour() < 12 {
582 b = append(b, ccp.periodsAbbreviated[0]...)
583 } else {
584 b = append(b, ccp.periodsAbbreviated[1]...)
585 }
586
587 b = append(b, []byte{0x20}...)
588
589 tz, _ := t.Zone()
590 b = append(b, tz...)
591
592 return string(b)
593 }
594
595
596 func (ccp *ccp) FmtTimeFull(t time.Time) string {
597
598 b := make([]byte, 0, 32)
599
600 h := t.Hour()
601
602 if h > 12 {
603 h -= 12
604 }
605
606 b = strconv.AppendInt(b, int64(h), 10)
607 b = append(b, ccp.timeSeparator...)
608
609 if t.Minute() < 10 {
610 b = append(b, '0')
611 }
612
613 b = strconv.AppendInt(b, int64(t.Minute()), 10)
614 b = append(b, ccp.timeSeparator...)
615
616 if t.Second() < 10 {
617 b = append(b, '0')
618 }
619
620 b = strconv.AppendInt(b, int64(t.Second()), 10)
621 b = append(b, []byte{0x20}...)
622
623 if t.Hour() < 12 {
624 b = append(b, ccp.periodsAbbreviated[0]...)
625 } else {
626 b = append(b, ccp.periodsAbbreviated[1]...)
627 }
628
629 b = append(b, []byte{0x20}...)
630
631 tz, _ := t.Zone()
632
633 if btz, ok := ccp.timezones[tz]; ok {
634 b = append(b, btz...)
635 } else {
636 b = append(b, tz...)
637 }
638
639 return string(b)
640 }
641
View as plain text