diff options
author | Dean Karn <Dean.Karn@metricaid.com> | 2016-11-08 19:14:13 +0300 |
---|---|---|
committer | Dean Karn <Dean.Karn@metricaid.com> | 2016-11-08 19:14:13 +0300 |
commit | 7832011dcf5c8b82caa7d6b379c5df17d5681fea (patch) | |
tree | b2feec7ef734b652acf3ac50d3bf8f90623eba63 /ru | |
parent | 23da3897c15437bd43dc8d2bc5f49ac4849e6c32 (diff) |
Correct some issues + Add Russian testsv0.10.2
- corrected handling of single quite in date formats, index was off
causing quotes to appear in text
- corrected bug in plurals rules mod != rules were generating mod10 < 12
&& mod10 >14, when it should be (mod10 < 12 || mod10 > 14)
- added code to sort plural rules, no real issue just now print in order
- override russian percent format CLDR contains space between # and %
but should be no space.
Russian tests were added, thanks @nikolay-turpitko.
- updated tests to cover 100% of range rules.
Diffstat (limited to 'ru')
-rw-r--r-- | ru/ru.go | 24 |
1 files changed, 10 insertions, 14 deletions
@@ -18,7 +18,6 @@ type ru struct { group string minus string percent string - percentSuffix string perMille string timeSeparator string inifinity string @@ -56,8 +55,7 @@ func New() locales.Translator { perMille: "‰", timeSeparator: ":", inifinity: "∞", - 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", "BDT", "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 ", "BYR", "BZD", "CA$", "CDF", "CHE ", "CHF", "CHW ", "CLE ", "CLF ", "CLP", "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", "¥", "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", "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", "₽", "р.", "RWF", "SAR", "SBD", "SCR", "SDD ", "SDG", "SDP ", "SEK", "SGD", "SHP", "SIT ", "SKK ", "SLL", "SOS", "SRD", "SRG ", "SSP", "STD", "SUR ", "SVC ", "SYP", "SZL", "฿", "TJR ", "TJS", "TMM ", "ТМТ", "TND", "TOP", "TPE ", "TRL ", "TRY", "TTD", "NT$", "TZS", "₴", "UAK ", "UGS ", "UGX", "$", "USN ", "USS ", "UYI ", "UYP ", "UYU", "UZS", "VEB ", "VEF", "₫", "VNN ", "VUV", "WST", "FCFA", "XAG ", "XAU ", "XBA ", "XBB ", "XBC ", "XBD ", "EC$", "XDR ", "XEU ", "XFO ", "XFU ", "CFA", "XPD ", "CFPF", "XPT ", "XRE ", "XSU ", "XTS ", "XUA ", "XXXX", "YDD ", "YER", "YUD ", "YUM ", "YUN ", "YUR ", "ZAL ", "ZAR", "ZMK ", "ZMW", "ZRN ", "ZRZ ", "ZWD ", "ZWL ", "ZWR "}, - percentSuffix: " ", + 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", "BDT", "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", "BYR", "BZD", "CA$", "CDF", "CHE", "CHF", "CHW", "CLE", "CLF", "CLP", "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", "¥", "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", "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", "₽", "р.", "RWF", "SAR", "SBD", "SCR", "SDD", "SDG", "SDP", "SEK", "SGD", "SHP", "SIT", "SKK", "SLL", "SOS", "SRD", "SRG", "SSP", "STD", "SUR", "SVC", "SYP", "SZL", "฿", "TJR", "TJS", "TMM", "ТМТ", "TND", "TOP", "TPE", "TRL", "TRY", "TTD", "NT$", "TZS", "₴", "UAK", "UGS", "UGX", "$", "USN", "USS", "UYI", "UYP", "UYU", "UZS", "VEB", "VEF", "₫", "VNN", "VUV", "WST", "FCFA", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "EC$", "XDR", "XEU", "XFO", "XFU", "CFA", "XPD", "CFPF", "XPT", "XRE", "XSU", "XTS", "XUA", "XXXX", "YDD", "YER", "YUD", "YUM", "YUN", "YUR", "ZAL", "ZAR", "ZMK", "ZMW", "ZRN", "ZRZ", "ZWD", "ZWL", "ZWR"}, currencyPositiveSuffix: " ", currencyNegativeSuffix: " ", monthsAbbreviated: []string{"", "янв.", "февр.", "мар.", "апр.", "мая", "июн.", "июл.", "авг.", "сент.", "окт.", "нояб.", "дек."}, @@ -73,7 +71,7 @@ func New() locales.Translator { erasAbbreviated: []string{"до н. э.", "н. э."}, erasNarrow: []string{"до н.э.", "н.э."}, erasWide: []string{"до Рождества Христова", "от Рождества Христова"}, - timezones: map[string]string{"IST": "Индия", "MESZ": "Центральная Европа, летнее время", "HAST": "Гавайско-алеутское стандартное время", "COT": "Колумбия, стандартное время", "AEDT": "Восточная Австралия, летнее время", "MYT": "Малайзия", "AST": "Атлантическое стандартное время", "WAT": "Западная Африка, стандартное время", "WAST": "Западная Африка, летнее время", "WIT": "Восточная Индонезия", "ACDT": "Центральная Австралия, летнее время", "ECT": "Эквадор", "AWDT": "Западная Австралия, летнее время", "SGT": "Сингапур", "OEZ": "Восточная Европа, стандартное время", "EDT": "Восточная Америка, летнее время", "LHST": "Лорд-Хау, стандартное время", "CLST": "Чили, летнее время", "UYST": "Уругвай, летнее время", "CDT": "Центральная Америка, летнее время", "JDT": "Япония, летнее время", "OESZ": "Восточная Европа, летнее время", "AEST": "Восточная Австралия, стандартное время", "UYT": "Уругвай, стандартное время", "ACST": "Центральная Австралия, стандартное время", "ARST": "Аргентина, летнее время", "WEZ": "Западная Европа, стандартное время", "NZDT": "Новая Зеландия, летнее время", "WARST": "Западная Аргентина, летнее время", "SRT": "Суринам", "CHADT": "Чатем, летнее время", "WESZ": "Западная Европа, летнее время", "WIB": "Западная Индонезия", "ChST": "Чаморро", "LHDT": "Лорд-Хау, летнее время", "BOT": "Боливия", "PST": "Тихоокеанское стандартное время", "MEZ": "Центральная Европа, стандартное время", "TMT": "Туркмения, стандартное время", "CLT": "Чили, стандартное время", "CHAST": "Чатем, стандартное время", "SAST": "Южная Африка", "EST": "Восточная Америка, стандартное время", "HADT": "Гавайско-алеутское летнее время", "∅∅∅": "Амазонка, летнее время", "TMST": "Туркмения, летнее время", "MDT": "Горное летнее время (США)", "VET": "Венесуэла", "WITA": "Центральная Индонезия", "PDT": "Тихоокеанское летнее время", "NZST": "Новая Зеландия, стандартное время", "EAT": "Восточная Африка", "GFT": "Французская Гвиана", "ACWST": "Центральная Австралия, западное стандартное время", "AWST": "Западная Австралия, стандартное время", "MST": "Горное стандартное время (США)", "HKT": "Гонконг, стандартное время", "AKST": "Аляска, стандартное время", "ADT": "Атлантическое летнее время", "ACWDT": "Центральная Австралия, западное летнее время", "HNT": "Ньюфаундленд, стандартное время", "HAT": "Ньюфаундленд, летнее время", "COST": "Колумбия, летнее время", "CST": "Центральная Америка, стандартное время", "AKDT": "Аляска, летнее время", "CAT": "Центральная Африка", "WART": "Западная Аргентина, стандартное время", "ART": "Аргентина, стандартное время", "GMT": "Среднее время по Гринвичу", "GYT": "Гайана", "BT": "Бутан", "HKST": "Гонконг, летнее время", "JST": "Япония, стандартное время"}, + timezones: map[string]string{"BOT": "Боливия", "BT": "Бутан", "WIB": "Западная Индонезия", "ChST": "Чаморро", "COST": "Колумбия, летнее время", "GFT": "Французская Гвиана", "HKT": "Гонконг, стандартное время", "PDT": "Тихоокеанское летнее время", "WART": "Западная Аргентина, стандартное время", "ACWDT": "Центральная Австралия, западное летнее время", "TMT": "Туркмения, стандартное время", "AKST": "Аляска, стандартное время", "JST": "Япония, стандартное время", "ACST": "Центральная Австралия, стандартное время", "ACDT": "Центральная Австралия, летнее время", "TMST": "Туркмения, летнее время", "ART": "Аргентина, стандартное время", "AEST": "Восточная Австралия, стандартное время", "AEDT": "Восточная Австралия, летнее время", "HAST": "Гавайско-алеутское стандартное время", "EAT": "Восточная Африка", "MESZ": "Центральная Европа, летнее время", "WEZ": "Западная Европа, стандартное время", "MST": "Макао, стандартное время", "CHADT": "Чатем, летнее время", "EST": "Восточная Америка, стандартное время", "EDT": "Восточная Америка, летнее время", "CST": "Центральная Америка, стандартное время", "MEZ": "Центральная Европа, стандартное время", "CLT": "Чили, стандартное время", "CAT": "Центральная Африка", "HKST": "Гонконг, летнее время", "WESZ": "Западная Европа, летнее время", "CLST": "Чили, летнее время", "WITA": "Центральная Индонезия", "∅∅∅": "Перу, летнее время", "JDT": "Япония, летнее время", "SRT": "Суринам", "GMT": "Среднее время по Гринвичу", "CDT": "Центральная Америка, летнее время", "MYT": "Малайзия", "UYST": "Уругвай, летнее время", "ADT": "Атлантическое летнее время", "NZST": "Новая Зеландия, стандартное время", "WARST": "Западная Аргентина, летнее время", "HAT": "Ньюфаундленд, летнее время", "UYT": "Уругвай, стандартное время", "AKDT": "Аляска, летнее время", "AWDT": "Западная Австралия, летнее время", "IST": "Индия", "AST": "Атлантическое стандартное время", "GYT": "Гайана", "WAST": "Западная Африка, летнее время", "MDT": "Макао, летнее время", "SAST": "Южная Африка", "VET": "Венесуэла", "LHST": "Лорд-Хау, стандартное время", "LHDT": "Лорд-Хау, летнее время", "CHAST": "Чатем, стандартное время", "ARST": "Аргентина, летнее время", "HADT": "Гавайско-алеутское летнее время", "WAT": "Западная Африка, стандартное время", "SGT": "Сингапур", "OEZ": "Восточная Европа, стандартное время", "COT": "Колумбия, стандартное время", "ECT": "Эквадор", "PST": "Тихоокеанское стандартное время", "NZDT": "Новая Зеландия, летнее время", "OESZ": "Восточная Европа, летнее время", "WIT": "Восточная Индонезия", "ACWST": "Центральная Австралия, западное стандартное время", "HNT": "Ньюфаундленд, стандартное время", "AWST": "Западная Австралия, стандартное время"}, } } @@ -107,7 +105,7 @@ func (ru *ru) CardinalPluralRule(num float64, v uint64) locales.PluralRule { if v == 0 && iMod10 == 1 && iMod100 != 11 { return locales.PluralRuleOne - } else if v == 0 && iMod10 >= 2 && iMod10 <= 4 && iMod100 < 12 && iMod100 > 14 { + } else if v == 0 && iMod10 >= 2 && iMod10 <= 4 && (iMod100 < 12 || iMod100 > 14) { return locales.PluralRuleFew } else if (v == 0 && iMod10 == 0) || (v == 0 && iMod10 >= 5 && iMod10 <= 9) || (v == 0 && iMod100 >= 11 && iMod100 <= 14) { return locales.PluralRuleMany @@ -280,7 +278,7 @@ func (ru *ru) FmtNumber(num float64, v uint64) string { // NOTE: 'num' passed into FmtPercent is assumed to be in percent already func (ru *ru) FmtPercent(num float64, v uint64) string { s := strconv.FormatFloat(math.Abs(num), 'f', int(v), 64) - l := len(s) + 5 + l := len(s) + 3 b := make([]byte, 0, l) for i := len(s) - 1; i >= 0; i-- { @@ -302,8 +300,6 @@ func (ru *ru) FmtPercent(num float64, v uint64) string { b[i], b[j] = b[j], b[i] } - b = append(b, ru.percentSuffix...) - b = append(b, ru.percent...) return string(b) @@ -474,8 +470,8 @@ func (ru *ru) FmtDateMedium(t time.Time) string { b = append(b, ru.monthsAbbreviated[t.Month()]...) b = append(b, []byte{0x20}...) b = strconv.AppendInt(b, int64(t.Year()), 10) - b = append(b, []byte{}...) - b = append(b, []byte{0x27, 0xd0, 0xb3, 0x27, 0x2e}...) + b = append(b, []byte{0x20, 0xd0, 0xb3}...) + b = append(b, []byte{0x2e}...) return string(b) } @@ -490,8 +486,8 @@ func (ru *ru) FmtDateLong(t time.Time) string { b = append(b, ru.monthsWide[t.Month()]...) b = append(b, []byte{0x20}...) b = strconv.AppendInt(b, int64(t.Year()), 10) - b = append(b, []byte{}...) - b = append(b, []byte{0x27, 0xd0, 0xb3, 0x27, 0x2e}...) + b = append(b, []byte{0x20, 0xd0, 0xb3}...) + b = append(b, []byte{0x2e}...) return string(b) } @@ -508,8 +504,8 @@ func (ru *ru) FmtDateFull(t time.Time) string { b = append(b, ru.monthsWide[t.Month()]...) b = append(b, []byte{0x20}...) b = strconv.AppendInt(b, int64(t.Year()), 10) - b = append(b, []byte{}...) - b = append(b, []byte{0x27, 0xd0, 0xb3, 0x27, 0x2e}...) + b = append(b, []byte{0x20, 0xd0, 0xb3}...) + b = append(b, []byte{0x2e}...) return string(b) } |