浏览代码

Correct some issues + Add Russian tests

- 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.
Dean Karn 9 年之前
父节点
当前提交
7832011dcf
共有 100 个文件被更改,包括 65 次插入34 次删除
  1. 1 1
      README.md
  2. 0 0
      af/af.go
  3. 0 0
      af_NA/af_NA.go
  4. 0 0
      af_ZA/af_ZA.go
  5. 0 0
      agq/agq.go
  6. 0 0
      agq_CM/agq_CM.go
  7. 0 0
      ak/ak.go
  8. 0 0
      ak_GH/ak_GH.go
  9. 0 0
      am/am.go
  10. 1 1
      am_ET/am_ET.go
  11. 0 0
      ar/ar.go
  12. 0 0
      ar_001/ar_001.go
  13. 1 1
      ar_AE/ar_AE.go
  14. 0 0
      ar_BH/ar_BH.go
  15. 1 1
      ar_DJ/ar_DJ.go
  16. 0 0
      ar_DZ/ar_DZ.go
  17. 0 0
      ar_EG/ar_EG.go
  18. 0 0
      ar_EH/ar_EH.go
  19. 1 1
      ar_ER/ar_ER.go
  20. 0 0
      ar_IL/ar_IL.go
  21. 1 1
      ar_IQ/ar_IQ.go
  22. 0 0
      ar_JO/ar_JO.go
  23. 0 0
      ar_KM/ar_KM.go
  24. 1 1
      ar_KW/ar_KW.go
  25. 0 0
      ar_LB/ar_LB.go
  26. 0 0
      ar_LY/ar_LY.go
  27. 0 0
      ar_MA/ar_MA.go
  28. 0 0
      ar_MR/ar_MR.go
  29. 1 1
      ar_OM/ar_OM.go
  30. 0 0
      ar_PS/ar_PS.go
  31. 0 0
      ar_QA/ar_QA.go
  32. 0 0
      ar_SA/ar_SA.go
  33. 0 0
      ar_SD/ar_SD.go
  34. 0 0
      ar_SO/ar_SO.go
  35. 1 1
      ar_SS/ar_SS.go
  36. 0 0
      ar_SY/ar_SY.go
  37. 0 0
      ar_TD/ar_TD.go
  38. 1 1
      ar_TN/ar_TN.go
  39. 0 0
      ar_YE/ar_YE.go
  40. 0 0
      as/as.go
  41. 0 0
      as_IN/as_IN.go
  42. 0 0
      asa/asa.go
  43. 0 0
      asa_TZ/asa_TZ.go
  44. 0 0
      ast/ast.go
  45. 0 0
      ast_ES/ast_ES.go
  46. 1 1
      az/az.go
  47. 1 1
      az_Cyrl/az_Cyrl.go
  48. 1 1
      az_Cyrl_AZ/az_Cyrl_AZ.go
  49. 1 1
      az_Latn/az_Latn.go
  50. 1 1
      az_Latn_AZ/az_Latn_AZ.go
  51. 0 0
      bas/bas.go
  52. 0 0
      bas_CM/bas_CM.go
  53. 0 0
      be/be.go
  54. 0 0
      be_BY/be_BY.go
  55. 0 0
      bem/bem.go
  56. 0 0
      bem_ZM/bem_ZM.go
  57. 0 0
      bez/bez.go
  58. 0 0
      bez_TZ/bez_TZ.go
  59. 0 0
      bg/bg.go
  60. 0 0
      bg_BG/bg_BG.go
  61. 0 0
      bm/bm.go
  62. 0 0
      bm_ML/bm_ML.go
  63. 0 0
      bn/bn.go
  64. 0 0
      bn_BD/bn_BD.go
  65. 0 0
      bn_IN/bn_IN.go
  66. 0 0
      bo/bo.go
  67. 0 0
      bo_CN/bo_CN.go
  68. 0 0
      bo_IN/bo_IN.go
  69. 0 0
      br/br.go
  70. 0 0
      br_FR/br_FR.go
  71. 0 0
      brx/brx.go
  72. 0 0
      brx_IN/brx_IN.go
  73. 1 1
      bs/bs.go
  74. 0 0
      bs_Cyrl/bs_Cyrl.go
  75. 1 1
      bs_Cyrl_BA/bs_Cyrl_BA.go
  76. 0 0
      bs_Latn/bs_Latn.go
  77. 0 0
      bs_Latn_BA/bs_Latn_BA.go
  78. 0 0
      ca/ca.go
  79. 0 0
      ca_AD/ca_AD.go
  80. 0 0
      ca_ES/ca_ES.go
  81. 0 0
      ca_ES_VALENCIA/ca_ES_VALENCIA.go
  82. 0 0
      ca_FR/ca_FR.go
  83. 0 0
      ca_IT/ca_IT.go
  84. 0 0
      ce/ce.go
  85. 0 0
      ce_RU/ce_RU.go
  86. 0 0
      cgg/cgg.go
  87. 0 0
      cgg_UG/cgg_UG.go
  88. 0 0
      chr/chr.go
  89. 0 0
      chr_US/chr_US.go
  90. 0 0
      ckb/ckb.go
  91. 0 0
      ckb_IQ/ckb_IQ.go
  92. 0 0
      ckb_IR/ckb_IR.go
  93. 46 15
      cmd/generate_resources.go
  94. 1 1
      cs/cs.go
  95. 0 0
      cs_CZ/cs_CZ.go
  96. 0 0
      cu/cu.go
  97. 0 0
      cu_RU/cu_RU.go
  98. 1 1
      cy/cy.go
  99. 0 0
      cy_GB/cy_GB.go
  100. 0 0
      da/da.go

+ 1 - 1
README.md

@@ -1,6 +1,6 @@
 ## locales
 <img align="right" src="https://raw.githubusercontent.com/go-playground/locales/master/logo.png">
-![Project status](https://img.shields.io/badge/version-0.10.1-green.svg)
+![Project status](https://img.shields.io/badge/version-0.10.2-green.svg)
 [![Build Status](https://semaphoreci.com/api/v1/joeybloggs/locales/branches/master/badge.svg)](https://semaphoreci.com/joeybloggs/locales)
 [![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/locales)](https://goreportcard.com/report/github.com/go-playground/locales)
 [![GoDoc](https://godoc.org/github.com/go-playground/locales?status.svg)](https://godoc.org/github.com/go-playground/locales)

文件差异内容过多而无法显示
+ 0 - 0
af/af.go


文件差异内容过多而无法显示
+ 0 - 0
af_NA/af_NA.go


文件差异内容过多而无法显示
+ 0 - 0
af_ZA/af_ZA.go


文件差异内容过多而无法显示
+ 0 - 0
agq/agq.go


文件差异内容过多而无法显示
+ 0 - 0
agq_CM/agq_CM.go


文件差异内容过多而无法显示
+ 0 - 0
ak/ak.go


文件差异内容过多而无法显示
+ 0 - 0
ak_GH/ak_GH.go


文件差异内容过多而无法显示
+ 0 - 0
am/am.go


文件差异内容过多而无法显示
+ 1 - 1
am_ET/am_ET.go


文件差异内容过多而无法显示
+ 0 - 0
ar/ar.go


文件差异内容过多而无法显示
+ 0 - 0
ar_001/ar_001.go


文件差异内容过多而无法显示
+ 1 - 1
ar_AE/ar_AE.go


文件差异内容过多而无法显示
+ 0 - 0
ar_BH/ar_BH.go


文件差异内容过多而无法显示
+ 1 - 1
ar_DJ/ar_DJ.go


文件差异内容过多而无法显示
+ 0 - 0
ar_DZ/ar_DZ.go


文件差异内容过多而无法显示
+ 0 - 0
ar_EG/ar_EG.go


文件差异内容过多而无法显示
+ 0 - 0
ar_EH/ar_EH.go


文件差异内容过多而无法显示
+ 1 - 1
ar_ER/ar_ER.go


文件差异内容过多而无法显示
+ 0 - 0
ar_IL/ar_IL.go


文件差异内容过多而无法显示
+ 1 - 1
ar_IQ/ar_IQ.go


文件差异内容过多而无法显示
+ 0 - 0
ar_JO/ar_JO.go


文件差异内容过多而无法显示
+ 0 - 0
ar_KM/ar_KM.go


文件差异内容过多而无法显示
+ 1 - 1
ar_KW/ar_KW.go


文件差异内容过多而无法显示
+ 0 - 0
ar_LB/ar_LB.go


文件差异内容过多而无法显示
+ 0 - 0
ar_LY/ar_LY.go


文件差异内容过多而无法显示
+ 0 - 0
ar_MA/ar_MA.go


文件差异内容过多而无法显示
+ 0 - 0
ar_MR/ar_MR.go


文件差异内容过多而无法显示
+ 1 - 1
ar_OM/ar_OM.go


文件差异内容过多而无法显示
+ 0 - 0
ar_PS/ar_PS.go


文件差异内容过多而无法显示
+ 0 - 0
ar_QA/ar_QA.go


文件差异内容过多而无法显示
+ 0 - 0
ar_SA/ar_SA.go


文件差异内容过多而无法显示
+ 0 - 0
ar_SD/ar_SD.go


文件差异内容过多而无法显示
+ 0 - 0
ar_SO/ar_SO.go


文件差异内容过多而无法显示
+ 1 - 1
ar_SS/ar_SS.go


文件差异内容过多而无法显示
+ 0 - 0
ar_SY/ar_SY.go


文件差异内容过多而无法显示
+ 0 - 0
ar_TD/ar_TD.go


文件差异内容过多而无法显示
+ 1 - 1
ar_TN/ar_TN.go


文件差异内容过多而无法显示
+ 0 - 0
ar_YE/ar_YE.go


文件差异内容过多而无法显示
+ 0 - 0
as/as.go


文件差异内容过多而无法显示
+ 0 - 0
as_IN/as_IN.go


文件差异内容过多而无法显示
+ 0 - 0
asa/asa.go


文件差异内容过多而无法显示
+ 0 - 0
asa_TZ/asa_TZ.go


文件差异内容过多而无法显示
+ 0 - 0
ast/ast.go


文件差异内容过多而无法显示
+ 0 - 0
ast_ES/ast_ES.go


文件差异内容过多而无法显示
+ 1 - 1
az/az.go


文件差异内容过多而无法显示
+ 1 - 1
az_Cyrl/az_Cyrl.go


文件差异内容过多而无法显示
+ 1 - 1
az_Cyrl_AZ/az_Cyrl_AZ.go


文件差异内容过多而无法显示
+ 1 - 1
az_Latn/az_Latn.go


文件差异内容过多而无法显示
+ 1 - 1
az_Latn_AZ/az_Latn_AZ.go


文件差异内容过多而无法显示
+ 0 - 0
bas/bas.go


文件差异内容过多而无法显示
+ 0 - 0
bas_CM/bas_CM.go


文件差异内容过多而无法显示
+ 0 - 0
be/be.go


文件差异内容过多而无法显示
+ 0 - 0
be_BY/be_BY.go


文件差异内容过多而无法显示
+ 0 - 0
bem/bem.go


文件差异内容过多而无法显示
+ 0 - 0
bem_ZM/bem_ZM.go


文件差异内容过多而无法显示
+ 0 - 0
bez/bez.go


文件差异内容过多而无法显示
+ 0 - 0
bez_TZ/bez_TZ.go


文件差异内容过多而无法显示
+ 0 - 0
bg/bg.go


文件差异内容过多而无法显示
+ 0 - 0
bg_BG/bg_BG.go


文件差异内容过多而无法显示
+ 0 - 0
bm/bm.go


文件差异内容过多而无法显示
+ 0 - 0
bm_ML/bm_ML.go


文件差异内容过多而无法显示
+ 0 - 0
bn/bn.go


文件差异内容过多而无法显示
+ 0 - 0
bn_BD/bn_BD.go


文件差异内容过多而无法显示
+ 0 - 0
bn_IN/bn_IN.go


文件差异内容过多而无法显示
+ 0 - 0
bo/bo.go


文件差异内容过多而无法显示
+ 0 - 0
bo_CN/bo_CN.go


文件差异内容过多而无法显示
+ 0 - 0
bo_IN/bo_IN.go


文件差异内容过多而无法显示
+ 0 - 0
br/br.go


文件差异内容过多而无法显示
+ 0 - 0
br_FR/br_FR.go


文件差异内容过多而无法显示
+ 0 - 0
brx/brx.go


文件差异内容过多而无法显示
+ 0 - 0
brx_IN/brx_IN.go


文件差异内容过多而无法显示
+ 1 - 1
bs/bs.go


文件差异内容过多而无法显示
+ 0 - 0
bs_Cyrl/bs_Cyrl.go


文件差异内容过多而无法显示
+ 1 - 1
bs_Cyrl_BA/bs_Cyrl_BA.go


文件差异内容过多而无法显示
+ 0 - 0
bs_Latn/bs_Latn.go


文件差异内容过多而无法显示
+ 0 - 0
bs_Latn_BA/bs_Latn_BA.go


文件差异内容过多而无法显示
+ 0 - 0
ca/ca.go


文件差异内容过多而无法显示
+ 0 - 0
ca_AD/ca_AD.go


文件差异内容过多而无法显示
+ 0 - 0
ca_ES/ca_ES.go


文件差异内容过多而无法显示
+ 0 - 0
ca_ES_VALENCIA/ca_ES_VALENCIA.go


文件差异内容过多而无法显示
+ 0 - 0
ca_FR/ca_FR.go


文件差异内容过多而无法显示
+ 0 - 0
ca_IT/ca_IT.go


文件差异内容过多而无法显示
+ 0 - 0
ce/ce.go


文件差异内容过多而无法显示
+ 0 - 0
ce_RU/ce_RU.go


文件差异内容过多而无法显示
+ 0 - 0
cgg/cgg.go


文件差异内容过多而无法显示
+ 0 - 0
cgg_UG/cgg_UG.go


文件差异内容过多而无法显示
+ 0 - 0
chr/chr.go


文件差异内容过多而无法显示
+ 0 - 0
chr_US/chr_US.go


文件差异内容过多而无法显示
+ 0 - 0
ckb/ckb.go


文件差异内容过多而无法显示
+ 0 - 0
ckb_IQ/ckb_IQ.go


文件差异内容过多而无法显示
+ 0 - 0
ckb_IR/ckb_IR.go


+ 46 - 15
cmd/generate_resources.go

@@ -308,6 +308,13 @@ func main() {
 	}
 }
 
+func ApplyOverrides(trans *translator) {
+
+	if trans.BaseLocale == "ru" {
+		trans.PercentNumberFormat = "#,##0%"
+	}
+}
+
 func postProcess(cldr *cldr.CLDR) {
 
 	for _, v := range timezones {
@@ -533,13 +540,12 @@ func postProcess(cldr *cldr.CLDR) {
 
 		var kval string
 
-		// add a space for readability for non locale specific currencies eg. -USD<space>10,356.45
 		for k, v := range globCurrencyIdxMap {
 
 			kval = k
-			if kval[:len(kval)-1] != " " {
-				kval += " "
-			}
+			// if kval[:len(kval)-1] != " " {
+			// 	kval += " "
+			// }
 
 			currencies[v] = kval
 		}
@@ -590,6 +596,8 @@ func postProcess(cldr *cldr.CLDR) {
 			}
 		}
 
+		ApplyOverrides(trans)
+
 		parseDecimalNumberFormat(trans)
 		parsePercentNumberFormat(trans)
 		parseCurrencyNumberFormat(trans)
@@ -1138,6 +1146,7 @@ func parseDateTimeFormat(baseLocale, format string, eraScore uint8) (results str
 		case '\'':
 
 			i++
+			startI := i
 
 			// peek to see if ''
 			if len(format) != i && format[i] == '\'' {
@@ -1147,7 +1156,7 @@ func parseDateTimeFormat(baseLocale, format string, eraScore uint8) (results str
 					results += "b = append(b, " + fmt.Sprintf("%#v", []byte(format[start:i-1])) + "...)\n"
 				} else {
 					inConstantText = true
-					start = i - 1
+					start = i
 				}
 
 				continue
@@ -1156,18 +1165,22 @@ func parseDateTimeFormat(baseLocale, format string, eraScore uint8) (results str
 			// not '' so whatever comes between '' is constant
 
 			if len(format) != i {
-				if inConstantText {
-					// inContantText = false // gonna put us right back in so not setting...
-					results += "b = append(b, " + fmt.Sprintf("%#v", []byte(format[start:i-2])) + "...)\n"
-					start = i - 1
-				}
-
-				inConstantText = true
 
 				// advance i to the next single quote + 1
 				for ; i < len(format); i++ {
 					if format[i] == '\'' {
-						// i++
+
+						if inConstantText {
+							inConstantText = false
+							b := []byte(format[start : startI-1])
+							b = append(b, []byte(format[startI:i])...)
+
+							results += "b = append(b, " + fmt.Sprintf("%#v", b) + "...)\n"
+
+						} else {
+							results += "b = append(b, " + fmt.Sprintf("%#v", []byte(format[startI:i])) + "...)\n"
+						}
+
 						break
 					}
 				}
@@ -1831,6 +1844,12 @@ func (a ByRank) Len() int           { return len(a) }
 func (a ByRank) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
 func (a ByRank) Less(i, j int) bool { return a[i].Rank < a[j].Rank }
 
+type ByPluralRule []locales.PluralRule
+
+func (a ByPluralRule) Len() int           { return len(a) }
+func (a ByPluralRule) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
+func (a ByPluralRule) Less(i, j int) bool { return a[i] < a[j] }
+
 // TODO: refine generated code a bit, some combinations end up with same plural rule,
 // could check all at once; but it works and that's step 1 complete
 func parseRangePluralRuleFunc(current *cldr.CLDR, baseLocale string) (results string, plurals string) {
@@ -1924,6 +1943,18 @@ func parseRangePluralRuleFunc(current *cldr.CLDR, baseLocale string) (results st
 	if len(pluralArr) == 0 {
 		plurals = "nil"
 	} else {
+
+		ints := make([]int, len(pluralArr))
+		for i := 0; i < len(pluralArr); i++ {
+			ints[i] = int(pluralArr[i])
+		}
+
+		sort.Ints(ints)
+
+		for i := 0; i < len(ints); i++ {
+			pluralArr[i] = locales.PluralRule(ints[i])
+		}
+
 		plurals = fmt.Sprintf("%#v", pluralArr)
 	}
 
@@ -2077,7 +2108,7 @@ func parseOrdinalPluralRuleFunc(current *cldr.CLDR, baseLocale string) (results
 								case "==":
 									pre += lft + " >= " + rng[0] + " && " + lft + "<=" + rng[1]
 								case "!=":
-									pre += lft + " < " + rng[0] + " && " + lft + " > " + rng[1]
+									pre += "(" + lft + " < " + rng[0] + " || " + lft + " > " + rng[1] + ")"
 								}
 
 								if multiRange {
@@ -2355,7 +2386,7 @@ func parseCardinalPluralRuleFunc(current *cldr.CLDR, baseLocale string) (results
 								case "==":
 									pre += lft + " >= " + rng[0] + " && " + lft + "<=" + rng[1]
 								case "!=":
-									pre += lft + " < " + rng[0] + " && " + lft + " > " + rng[1]
+									pre += "(" + lft + " < " + rng[0] + " || " + lft + " > " + rng[1] + ")"
 								}
 
 								if multiRange {

文件差异内容过多而无法显示
+ 1 - 1
cs/cs.go


文件差异内容过多而无法显示
+ 0 - 0
cs_CZ/cs_CZ.go


文件差异内容过多而无法显示
+ 0 - 0
cu/cu.go


文件差异内容过多而无法显示
+ 0 - 0
cu_RU/cu_RU.go


文件差异内容过多而无法显示
+ 1 - 1
cy/cy.go


文件差异内容过多而无法显示
+ 0 - 0
cy_GB/cy_GB.go


文件差异内容过多而无法显示
+ 0 - 0
da/da.go


部分文件因为文件数量过多而无法显示