浏览代码

initial plural rule generation rewrite.

joeybloggs 9 年之前
父节点
当前提交
e2b44a5626
共有 100 个文件被更改,包括 2288 次插入2101 次删除
  1. 1153 760
      cmd/resources/generate_resources.go
  2. 29 0
      cmd/resources/translator.tmpl
  3. 36 0
      resources/locales/af/af.go
  4. 0 4
      resources/locales/af/calendar.go
  5. 0 4
      resources/locales/af/currency.go
  6. 0 18
      resources/locales/af/main.go
  7. 0 8
      resources/locales/af/number.go
  8. 0 3
      resources/locales/af/plural.go
  9. 36 0
      resources/locales/af_NA/af_NA.go
  10. 0 4
      resources/locales/af_NA/calendar.go
  11. 0 5
      resources/locales/af_NA/currency.go
  12. 0 18
      resources/locales/af_NA/main.go
  13. 0 8
      resources/locales/af_NA/number.go
  14. 0 3
      resources/locales/af_NA/plural.go
  15. 36 0
      resources/locales/af_ZA/af_ZA.go
  16. 26 0
      resources/locales/agq/agq.go
  17. 0 4
      resources/locales/agq/calendar.go
  18. 0 4
      resources/locales/agq/currency.go
  19. 0 18
      resources/locales/agq/main.go
  20. 0 8
      resources/locales/agq/number.go
  21. 0 3
      resources/locales/agq/plural.go
  22. 26 0
      resources/locales/agq_CM/agq_CM.go
  23. 36 0
      resources/locales/ak/ak.go
  24. 0 5
      resources/locales/ak/calendar.go
  25. 0 4
      resources/locales/ak/currency.go
  26. 0 18
      resources/locales/ak/main.go
  27. 0 8
      resources/locales/ak/number.go
  28. 0 3
      resources/locales/ak/plural.go
  29. 36 0
      resources/locales/ak_GH/ak_GH.go
  30. 0 813
      resources/locales/all.go
  31. 41 0
      resources/locales/am/am.go
  32. 0 4
      resources/locales/am/calendar.go
  33. 0 4
      resources/locales/am/currency.go
  34. 0 18
      resources/locales/am/main.go
  35. 0 8
      resources/locales/am/number.go
  36. 0 3
      resources/locales/am/plural.go
  37. 41 0
      resources/locales/am_ET/am_ET.go
  38. 44 0
      resources/locales/ar/ar.go
  39. 0 4
      resources/locales/ar/calendar.go
  40. 0 4
      resources/locales/ar/currency.go
  41. 0 18
      resources/locales/ar/main.go
  42. 0 8
      resources/locales/ar/number.go
  43. 0 3
      resources/locales/ar/plural.go
  44. 44 0
      resources/locales/ar_001/ar_001.go
  45. 44 0
      resources/locales/ar_AE/ar_AE.go
  46. 0 4
      resources/locales/ar_AE/calendar.go
  47. 0 5
      resources/locales/ar_AE/currency.go
  48. 0 18
      resources/locales/ar_AE/main.go
  49. 0 8
      resources/locales/ar_AE/number.go
  50. 0 3
      resources/locales/ar_AE/plural.go
  51. 44 0
      resources/locales/ar_BH/ar_BH.go
  52. 44 0
      resources/locales/ar_DJ/ar_DJ.go
  53. 0 4
      resources/locales/ar_DJ/calendar.go
  54. 0 5
      resources/locales/ar_DJ/currency.go
  55. 0 18
      resources/locales/ar_DJ/main.go
  56. 0 8
      resources/locales/ar_DJ/number.go
  57. 0 3
      resources/locales/ar_DJ/plural.go
  58. 44 0
      resources/locales/ar_DZ/ar_DZ.go
  59. 0 4
      resources/locales/ar_DZ/calendar.go
  60. 0 5
      resources/locales/ar_DZ/currency.go
  61. 0 18
      resources/locales/ar_DZ/main.go
  62. 0 8
      resources/locales/ar_DZ/number.go
  63. 0 3
      resources/locales/ar_DZ/plural.go
  64. 44 0
      resources/locales/ar_EG/ar_EG.go
  65. 44 0
      resources/locales/ar_EH/ar_EH.go
  66. 0 4
      resources/locales/ar_EH/calendar.go
  67. 0 5
      resources/locales/ar_EH/currency.go
  68. 0 18
      resources/locales/ar_EH/main.go
  69. 0 8
      resources/locales/ar_EH/number.go
  70. 0 3
      resources/locales/ar_EH/plural.go
  71. 44 0
      resources/locales/ar_ER/ar_ER.go
  72. 0 4
      resources/locales/ar_ER/calendar.go
  73. 0 5
      resources/locales/ar_ER/currency.go
  74. 0 18
      resources/locales/ar_ER/main.go
  75. 0 8
      resources/locales/ar_ER/number.go
  76. 0 3
      resources/locales/ar_ER/plural.go
  77. 44 0
      resources/locales/ar_IL/ar_IL.go
  78. 44 0
      resources/locales/ar_IQ/ar_IQ.go
  79. 44 0
      resources/locales/ar_JO/ar_JO.go
  80. 44 0
      resources/locales/ar_KM/ar_KM.go
  81. 44 0
      resources/locales/ar_KW/ar_KW.go
  82. 44 0
      resources/locales/ar_LB/ar_LB.go
  83. 0 4
      resources/locales/ar_LB/calendar.go
  84. 0 5
      resources/locales/ar_LB/currency.go
  85. 0 18
      resources/locales/ar_LB/main.go
  86. 0 8
      resources/locales/ar_LB/number.go
  87. 0 3
      resources/locales/ar_LB/plural.go
  88. 44 0
      resources/locales/ar_LY/ar_LY.go
  89. 0 4
      resources/locales/ar_LY/calendar.go
  90. 0 5
      resources/locales/ar_LY/currency.go
  91. 0 18
      resources/locales/ar_LY/main.go
  92. 0 8
      resources/locales/ar_LY/number.go
  93. 0 3
      resources/locales/ar_LY/plural.go
  94. 44 0
      resources/locales/ar_MA/ar_MA.go
  95. 0 4
      resources/locales/ar_MA/calendar.go
  96. 0 5
      resources/locales/ar_MA/currency.go
  97. 0 18
      resources/locales/ar_MA/main.go
  98. 0 8
      resources/locales/ar_MA/number.go
  99. 0 3
      resources/locales/ar_MA/plural.go
  100. 44 0
      resources/locales/ar_MR/ar_MR.go

+ 1153 - 760
cmd/resources/generate_resources.go

@@ -1,22 +1,15 @@
 package main
 
 import (
-	"bytes"
 	"fmt"
-	"go/format"
-	"io/ioutil"
+	"log"
 	"os"
-	"path/filepath"
+	"os/exec"
 	"strings"
-	"sync"
-	"text/template"
-	"time"
-
-	"gopkg.in/yaml.v2"
 
 	"golang.org/x/text/unicode/cldr"
 
-	i18n "github.com/go-playground/universal-translator"
+	"text/template"
 )
 
 // numbers:
@@ -36,904 +29,1304 @@ import (
 //     USD:
 //       symbol: $
 
-type pluralInfo struct {
-	path   string
-	locale string
-	plural string
-}
+// type pluralInfo struct {
+// 	path   string
+// 	locale string
+// 	plural string
+// }
 
-func main() {
+// type translator struct {
+// 	locale string
 
-	//plurals
-	rules := "data/rules"
-	plurals := map[string]*pluralInfo{}
-	basePlurals := map[string]string{}
+// }
+//
 
-	err := filepath.Walk(rules, func(path string, info os.FileInfo, err error) error {
+const (
+	locDir      = "../../resources/locales/%s"
+	locFilename = locDir + "/%s.go"
+)
 
+var (
+	prVarFuncs = map[string]string{
+		"n": `n, err := locales.N(num)
 		if err != nil {
-			panic(err)
-		}
-
-		if info.IsDir() {
-			return nil
+			return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue:num, InnerError: err}
 		}
 
-		in, err := ioutil.ReadFile(path)
+		`,
+		"i": `i, err := locales.I(num)
 		if err != nil {
-			panic(err)
+			return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue:num, InnerError: err}
 		}
 
-		var out yaml.MapSlice
-		if err = yaml.Unmarshal(in, &out); err != nil {
-			panic(err)
-		}
-
-		var plural string
-		for _, item := range out {
-			if item.Key == "plural" {
-				plural = item.Value.(string)
-			}
+		`,
+		"v": "v := locales.V(num)\n\n",
+		"w": `w, err := locales.W(num)
+		if err != nil {
+			return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue:num, InnerError: err}
 		}
 
-		locale := strings.Replace(info.Name(), filepath.Ext(info.Name()), "", 1)
-		locale = strings.ToLower(strings.Replace(locale, "-", "_", -1))
-
-		plurals[locale] = &pluralInfo{
-			path:   path,
-			locale: locale,
-			plural: plural,
+		`,
+		"f": `f, err := locales.F(num)
+		if err != nil {
+			return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue:num, InnerError: err}
 		}
 
-		if plural == "" {
-			return nil
+		`,
+		"t": `t, err := locales.T(num)
+		if err != nil {
+			return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue:num, InnerError: err}
 		}
 
-		basePlurals[locale] = plural
-
-		return nil
-	})
-
-	if err != nil {
-		panic(err)
+		`,
 	}
+)
 
-	for _, p := range plurals {
-
-		if p.plural == "" {
-
-			var ok bool
+type translator struct {
+	Locale       string
+	CardinalFunc string
+}
 
-			fmt.Print("can't find plurals in ", p.path, " attempting to locate base language plural rules...")
+var tmpl *template.Template
 
-			base := strings.SplitN(p.locale, "_", 2)
+func main() {
 
-			p.plural, ok = basePlurals[base[0]]
-			if !ok {
-				fmt.Println("Not Found")
-				continue
-			}
+	var err error
 
-			fmt.Println("Found")
-		}
+	// load template
+	tmpl, err = template.ParseGlob("*.tmpl")
+	if err != nil {
+		log.Fatal(err)
 	}
 
-	// cldr
-
+	// load CLDR recourses
 	var decoder cldr.Decoder
 	cldr, err := decoder.DecodePath("data/core")
 	if err != nil {
 		panic(err)
 	}
 
-	locs := map[string]string{}
-	numbers := map[string]i18n.Number{}
-	calendars := map[string]i18n.Calendar{}
-	locales := cldr.Locales()
-	for _, loc := range locales {
-
-		ldml := cldr.RawLDML(loc)
-		if ldml.Numbers == nil {
-			continue
-		}
-		var number i18n.Number
-
-		number.Currencies = make(i18n.CurrencyFormatValue)
+	// cardinalPlurals := map[string]
 
-		if len(ldml.Numbers.Symbols) > 0 {
-			symbol := ldml.Numbers.Symbols[0]
-			if len(symbol.Decimal) > 0 {
-				number.Symbols.Decimal = symbol.Decimal[0].Data()
-			}
-			if len(symbol.Group) > 0 {
-				number.Symbols.Group = symbol.Group[0].Data()
-			}
-			if len(symbol.MinusSign) > 0 {
-				number.Symbols.Negative = symbol.MinusSign[0].Data()
-			}
-			if len(symbol.PercentSign) > 0 {
-				number.Symbols.Percent = symbol.PercentSign[0].Data()
-			}
-			if len(symbol.PerMille) > 0 {
-				number.Symbols.PerMille = symbol.PerMille[0].Data()
-			}
-		}
-		if len(ldml.Numbers.DecimalFormats) > 0 && len(ldml.Numbers.DecimalFormats[0].DecimalFormatLength) > 0 {
-			number.Formats.Decimal = ldml.Numbers.DecimalFormats[0].DecimalFormatLength[0].DecimalFormat[0].Pattern[0].Data()
-		}
+	// for _, p := range ldr.Supplemental().Plurals {
 
-		if len(ldml.Numbers.CurrencyFormats) > 0 && len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength) > 0 {
+	// 	for _, pr := range p.PluralRules {
 
-			number.Formats.Currency = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[0].Pattern[0].Data()
-			number.Formats.CurrencyAccounting = number.Formats.Currency
+	// 		fmt.Println(pr.Locales)
 
-			if len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat) > 1 {
-				number.Formats.CurrencyAccounting = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[1].Pattern[0].Data()
-			}
-		}
-		if len(ldml.Numbers.PercentFormats) > 0 && len(ldml.Numbers.PercentFormats[0].PercentFormatLength) > 0 {
-			number.Formats.Percent = ldml.Numbers.PercentFormats[0].PercentFormatLength[0].PercentFormat[0].Pattern[0].Data()
-		}
-		if ldml.Numbers.Currencies != nil {
+	// 		for _, rule := range pr.PluralRule {
+	// 			fmt.Println(rule.Count, rule.Common.Data())
+	// 		}
+	// 	}
+	// }
 
-			for _, currency := range ldml.Numbers.Currencies.Currency {
+	for _, l := range cldr.Locales() {
 
-				var c i18n.Currency
-
-				c.Currency = currency.Type
-
-				if len(currency.DisplayName) > 0 {
-					c.DisplayName = currency.DisplayName[0].Data()
-				}
+		// // work on uk for the moment
+		// if l != "uk" && l != "fil" && l != "gd" {
+		// if l != "gd" {
+		// 	continue
+		// }
+		fmt.Println(l)
 
-				if len(currency.Symbol) > 0 {
-					c.Symbol = currency.Symbol[0].Data()
-				}
+		baseLocale := strings.SplitN(l, "_", 2)[0]
 
-				number.Currencies[c.Currency] = c
-			}
+		trans := &translator{
+			Locale:       l,
+			CardinalFunc: parseCardinalPluralRuleFunc(cldr, baseLocale),
 		}
-		numbers[loc] = number
-		locs[loc] = strings.ToLower(strings.Replace(loc, "_", "", -1))
 
-		if ldml.Dates != nil && ldml.Dates.Calendars != nil {
+		// cardinalRules := getLocaleCardinalPluralRules(cldr, baseLocale)
+		// fmt.Println("CardinalRules:", l, cardinalRules)
+		// Start Plural Rules
 
-			var calendar i18n.Calendar
-			ldmlCar := ldml.Dates.Calendars.Calendar[0]
+		// for _, p := range cldr.Supplemental().Plurals {
 
-			for _, cal := range ldml.Dates.Calendars.Calendar {
-				if cal.Type == "gregorian" {
-					ldmlCar = cal
-				}
-			}
+		// 	for _, pr := range p.PluralRules {
 
-			if ldmlCar.DateFormats != nil {
-				for _, datefmt := range ldmlCar.DateFormats.DateFormatLength {
-					switch datefmt.Type {
-					case "full":
-						calendar.Formats.DateEra.BC.Full = datefmt.DateFormat[0].Pattern[0].Data()
-						calendar.Formats.DateEra.AD.Full = calendar.Formats.DateEra.BC.Full
-
-					case "long":
-						calendar.Formats.DateEra.BC.Long = datefmt.DateFormat[0].Pattern[0].Data()
-						calendar.Formats.DateEra.AD.Long = calendar.Formats.DateEra.BC.Long
-
-						// Overrides TODO: Split Each Section into separate function, getting to big to maintain
-
-					case "medium":
-						calendar.Formats.DateEra.BC.Medium = datefmt.DateFormat[0].Pattern[0].Data()
-						calendar.Formats.DateEra.AD.Medium = calendar.Formats.DateEra.BC.Medium
-					case "short":
-						calendar.Formats.DateEra.BC.Short = datefmt.DateFormat[0].Pattern[0].Data()
-						calendar.Formats.DateEra.AD.Short = calendar.Formats.DateEra.BC.Short
-					}
-				}
+		// 		locales := strings.Split(pr.Locales, " ")
 
-				// Overrides TODO: Split Each Section into separate function, getting to big to maintain
-				switch loc {
-				case "th":
-					calendar.Formats.DateEra.BC.Full = "EEEEที่ d MMMM y GGGG"
-					calendar.Formats.DateEra.AD.Full = "EEEEที่ d MMMM GGGG y"
-					calendar.Formats.DateEra.BC.Long = "d MMMM y GG"
-					calendar.Formats.DateEra.AD.Long = "d MMMM GG y"
-				case "en":
-					calendar.Formats.DateEra.BC.Full = "EEEE, MMMM d, y GGGG"
-					calendar.Formats.DateEra.BC.Long = "MMMM d, y GG"
-					// calendar.Formats.DateEra.BC.Medium = "MMM d, y GG"
-					// calendar.Formats.DateEra.BC.Short = "M/d/yy G"
-				}
-			}
+		// 		for _, loc := range locales {
 
-			if ldmlCar.TimeFormats != nil {
-				for _, datefmt := range ldmlCar.TimeFormats.TimeFormatLength {
-					switch datefmt.Type {
-					case "full":
-						calendar.Formats.Time.Full = datefmt.TimeFormat[0].Pattern[0].Data()
-					case "long":
-						calendar.Formats.Time.Long = datefmt.TimeFormat[0].Pattern[0].Data()
-					case "medium":
-						calendar.Formats.Time.Medium = datefmt.TimeFormat[0].Pattern[0].Data()
-					case "short":
-						calendar.Formats.Time.Short = datefmt.TimeFormat[0].Pattern[0].Data()
-					}
-				}
-			}
-			if ldmlCar.DateTimeFormats != nil {
-				for _, datefmt := range ldmlCar.DateTimeFormats.DateTimeFormatLength {
-					switch datefmt.Type {
-					case "full":
-						calendar.Formats.DateTime.Full = datefmt.DateTimeFormat[0].Pattern[0].Data()
-					case "long":
-						calendar.Formats.DateTime.Long = datefmt.DateTimeFormat[0].Pattern[0].Data()
-					case "medium":
-						calendar.Formats.DateTime.Medium = datefmt.DateTimeFormat[0].Pattern[0].Data()
-					case "short":
-						calendar.Formats.DateTime.Short = datefmt.DateTimeFormat[0].Pattern[0].Data()
-					}
-				}
-			}
-			if ldmlCar.Months != nil {
-
-				for _, monthctx := range ldmlCar.Months.MonthContext {
-
-					for _, months := range monthctx.MonthWidth {
-
-						i18nMonth := make(i18n.CalendarMonthFormatNameValue)
-
-						for _, m := range months.Month {
-							switch m.Type {
-							case "1":
-								i18nMonth[time.January] = m.Data()
-							case "2":
-								i18nMonth[time.February] = m.Data()
-							case "3":
-								i18nMonth[time.March] = m.Data()
-							case "4":
-								i18nMonth[time.April] = m.Data()
-							case "5":
-								i18nMonth[time.May] = m.Data()
-							case "6":
-								i18nMonth[time.June] = m.Data()
-							case "7":
-								i18nMonth[time.July] = m.Data()
-							case "8":
-								i18nMonth[time.August] = m.Data()
-							case "9":
-								i18nMonth[time.September] = m.Data()
-							case "10":
-								i18nMonth[time.October] = m.Data()
-							case "11":
-								i18nMonth[time.November] = m.Data()
-							case "12":
-								i18nMonth[time.December] = m.Data()
-							}
-						}
-						switch months.Type {
-						case "abbreviated":
-							calendar.FormatNames.Months.Abbreviated = i18nMonth
-						case "narrow":
-							calendar.FormatNames.Months.Narrow = i18nMonth
-						case "short":
-							calendar.FormatNames.Months.Short = i18nMonth
-						case "wide":
-							calendar.FormatNames.Months.Wide = i18nMonth
-						}
-					}
-				}
-			}
-			if ldmlCar.Days != nil {
-				for _, dayctx := range ldmlCar.Days.DayContext {
-
-					for _, days := range dayctx.DayWidth {
-
-						i18nDay := make(i18n.CalendarDayFormatNameValue)
-
-						for _, d := range days.Day {
-
-							switch d.Type {
-							case "sun":
-								i18nDay[time.Sunday] = d.Data()
-							case "mon":
-								i18nDay[time.Monday] = d.Data()
-							case "tue":
-								i18nDay[time.Tuesday] = d.Data()
-							case "wed":
-								i18nDay[time.Wednesday] = d.Data()
-							case "thu":
-								i18nDay[time.Thursday] = d.Data()
-							case "fri":
-								i18nDay[time.Friday] = d.Data()
-							case "sat":
-								i18nDay[time.Saturday] = d.Data()
-							}
-						}
-
-						switch days.Type {
-						case "abbreviated":
-							calendar.FormatNames.Days.Abbreviated = i18nDay
-						case "narrow":
-							calendar.FormatNames.Days.Narrow = i18nDay
-						case "short":
-							calendar.FormatNames.Days.Short = i18nDay
-						case "wide":
-							calendar.FormatNames.Days.Wide = i18nDay
-						}
-					}
-				}
-			}
-
-			if ldmlCar.DayPeriods != nil {
-
-				for _, ctx := range ldmlCar.DayPeriods.DayPeriodContext {
-
-					for _, width := range ctx.DayPeriodWidth {
+		// 			if loc == baseLocale {
 
-						// var i18nPeriod i18n.CalendarPeriodFormatNameValue
-						i18nPeriod := make(i18n.CalendarPeriodFormatNameValue)
+		// 				// plural rule found
+		// 				fmt.Println("Locale Plural Rules Found:", loc, baseLocale, l)
+		// 			}
+		// 		}
+		// 		// fmt.Println(pr.Locales)
 
-						for _, d := range width.DayPeriod {
+		// 		// for _, rule := range pr.PluralRule {
+		// 		// 	fmt.Println(rule.Count, rule.Common.Data())
+		// 		// }
+		// 	}
+		// }
 
-							if _, ok := i18nPeriod[d.Type]; !ok {
-								i18nPeriod[d.Type] = d.Data()
-							}
-						}
-
-						switch width.Type {
-						case "abbreviated":
-							calendar.FormatNames.Periods.Abbreviated = i18nPeriod
-						case "narrow":
-							calendar.FormatNames.Periods.Narrow = i18nPeriod
-						case "short":
-							calendar.FormatNames.Periods.Short = i18nPeriod
-						case "wide":
-							calendar.FormatNames.Periods.Wide = i18nPeriod
-						}
-					}
-				}
-				// var empty i18n.CalendarPeriodFormatNameValue
-				// if calendar.FormatNames.Periods.Abbreviated == empty {
-				// 	calendar.FormatNames.Periods.Abbreviated = calendar.FormatNames.Periods.Wide
-				// }
-			}
-
-			if ldmlCar.Eras != nil {
-
-				var eras i18n.Eras
-
-				if ldmlCar.Eras.EraNames != nil && len(ldmlCar.Eras.EraNames.Era) > 0 {
-					eras.BC.Full = ldmlCar.Eras.EraNames.Era[0].Data()
-				}
-
-				if ldmlCar.Eras.EraAbbr != nil && len(ldmlCar.Eras.EraAbbr.Era) > 0 {
-					eras.BC.Abbrev = ldmlCar.Eras.EraAbbr.Era[0].Data()
-				}
-
-				if ldmlCar.Eras.EraNarrow != nil && len(ldmlCar.Eras.EraNarrow.Era) > 0 {
-					eras.BC.Narrow = ldmlCar.Eras.EraNarrow.Era[0].Data()
-				}
+		// End Plural Rules
 
-				if ldmlCar.Eras.EraNames != nil && len(ldmlCar.Eras.EraNames.Era) > 2 {
-					eras.AD.Full = ldmlCar.Eras.EraNames.Era[2].Data()
-				}
-
-				if ldmlCar.Eras.EraAbbr != nil && len(ldmlCar.Eras.EraAbbr.Era) > 2 {
-					eras.AD.Abbrev = ldmlCar.Eras.EraAbbr.Era[2].Data()
-				}
-
-				if ldmlCar.Eras.EraNarrow != nil && len(ldmlCar.Eras.EraNarrow.Era) > 2 {
-					eras.AD.Narrow = ldmlCar.Eras.EraNarrow.Era[2].Data()
-				}
-
-				calendar.FormatNames.Eras = eras
-			}
-
-			calendars[loc] = calendar
+		if err = os.MkdirAll(fmt.Sprintf(locDir, l), 0777); err != nil {
+			log.Fatal(err)
 		}
-	}
-
-	for locale := range locs {
-
-		if !strings.Contains(locale, "_") {
-			continue
-		}
-
-		calendar := calendars[locale]
-
-		bString := strings.SplitN(locale, "_", 2)
-		base := bString[0]
 
-		baseCal := calendars[base]
+		filename := fmt.Sprintf(locFilename, l, l)
 
-		// copy base calendar objects
-
-		// Dates
-		if calendar.Formats.DateEra.AD.Full == "" {
-			calendar.Formats.DateEra.BC.Full = baseCal.Formats.DateEra.BC.Full
-			calendar.Formats.DateEra.AD.Full = baseCal.Formats.DateEra.AD.Full
-		}
-
-		if calendar.Formats.DateEra.AD.Long == "" {
-			calendar.Formats.DateEra.BC.Long = baseCal.Formats.DateEra.BC.Long
-			calendar.Formats.DateEra.AD.Long = baseCal.Formats.DateEra.AD.Long
-		}
-
-		if calendar.Formats.DateEra.AD.Medium == "" {
-			calendar.Formats.DateEra.BC.Medium = baseCal.Formats.DateEra.BC.Medium
-			calendar.Formats.DateEra.AD.Medium = baseCal.Formats.DateEra.AD.Medium
-		}
-
-		if calendar.Formats.DateEra.AD.Short == "" {
-			calendar.Formats.DateEra.BC.Short = baseCal.Formats.DateEra.BC.Short
-			calendar.Formats.DateEra.AD.Short = baseCal.Formats.DateEra.AD.Short
-		}
-
-		// times
-		if calendar.Formats.Time.Full == "" {
-			calendar.Formats.Time.Full = baseCal.Formats.Time.Full
-		}
-
-		if calendar.Formats.Time.Long == "" {
-			calendar.Formats.Time.Long = baseCal.Formats.Time.Long
-		}
-
-		if calendar.Formats.Time.Medium == "" {
-			calendar.Formats.Time.Medium = baseCal.Formats.Time.Medium
-		}
-
-		if calendar.Formats.Time.Short == "" {
-			calendar.Formats.Time.Short = baseCal.Formats.Time.Short
-		}
-
-		// date & times
-		if calendar.Formats.DateTime.Full == "" {
-			calendar.Formats.DateTime.Full = baseCal.Formats.DateTime.Full
-		}
-
-		if calendar.Formats.DateTime.Long == "" {
-			calendar.Formats.DateTime.Long = baseCal.Formats.DateTime.Long
-		}
-
-		if calendar.Formats.DateTime.Medium == "" {
-			calendar.Formats.DateTime.Medium = baseCal.Formats.DateTime.Medium
+		output, err := os.Create(filename)
+		if err != nil {
+			log.Fatal(err)
 		}
+		defer output.Close()
 
-		if calendar.Formats.DateTime.Short == "" {
-			calendar.Formats.DateTime.Short = baseCal.Formats.DateTime.Short
+		if err := tmpl.ExecuteTemplate(output, "translator", trans); err != nil {
+			log.Fatal(err)
 		}
 
-		// months
+		output.Close()
 
-		if calendar.FormatNames.Months.Abbreviated == nil {
-			calendar.FormatNames.Months.Abbreviated = make(i18n.CalendarMonthFormatNameValue)
+		// after file written run gofmt on file to ensure best formatting
+		cmd := exec.Command("gofmt", "-s", "-w", filename)
+		if err = cmd.Run(); err != nil {
+			log.Panic(err)
 		}
+	}
+}
 
-		if calendar.FormatNames.Months.Narrow == nil {
-			calendar.FormatNames.Months.Narrow = make(i18n.CalendarMonthFormatNameValue)
-		}
+// TODO: cleanup function logic perhaps write a lexer... but it's working right now, and
+// I'm already farther down the rabbit hole than I'd like and so pulling the chute here.
+func parseCardinalPluralRuleFunc(current *cldr.CLDR, baseLocale string) (results string) {
+
+	var prCardinal *struct {
+		cldr.Common
+		Locales    string "xml:\"locales,attr\""
+		PluralRule []*struct {
+			cldr.Common
+			Count string "xml:\"count,attr\""
+		} "xml:\"pluralRule\""
+	}
 
-		if calendar.FormatNames.Months.Short == nil {
-			calendar.FormatNames.Months.Short = make(i18n.CalendarMonthFormatNameValue)
-		}
+	for _, p := range current.Supplemental().Plurals {
 
-		if calendar.FormatNames.Months.Wide == nil {
-			calendar.FormatNames.Months.Wide = make(i18n.CalendarMonthFormatNameValue)
-		}
+		for _, pr := range p.PluralRules {
 
-		for k, v := range baseCal.FormatNames.Months.Abbreviated {
+			locs := strings.Split(pr.Locales, " ")
 
-			val, ok := calendar.FormatNames.Months.Abbreviated[k]
-			if !ok {
-				calendar.FormatNames.Months.Abbreviated[k] = v
-				continue
-			}
+			for _, loc := range locs {
 
-			if val == "" {
-				calendar.FormatNames.Months.Abbreviated[k] = v
+				if loc == baseLocale {
+					prCardinal = pr
+				}
 			}
 		}
+	}
 
-		for k, v := range baseCal.FormatNames.Months.Narrow {
+	// no plural rules for locale
+	if prCardinal == nil {
+		return
+	}
 
-			val, ok := calendar.FormatNames.Months.Narrow[k]
-			if !ok {
-				calendar.FormatNames.Months.Narrow[k] = v
-				continue
-			}
+	vals := make(map[string]struct{})
+	first := true
 
-			if val == "" {
-				calendar.FormatNames.Months.Narrow[k] = v
-			}
-		}
+	// pre parse for variables
+	for _, rule := range prCardinal.PluralRule {
 
-		for k, v := range baseCal.FormatNames.Months.Short {
+		data := strings.Replace(strings.Replace(strings.Replace(strings.TrimSpace(strings.SplitN(rule.Common.Data(), "@", 2)[0]), " = ", " == ", -1), " or ", " || ", -1), " and ", " && ", -1)
 
-			val, ok := calendar.FormatNames.Months.Short[k]
-			if !ok {
-				calendar.FormatNames.Months.Short[k] = v
-				continue
-			}
+		if len(data) == 0 {
+			if len(prCardinal.PluralRule) == 1 {
 
-			if val == "" {
-				calendar.FormatNames.Months.Short[k] = v
-			}
-		}
+				results = "return locales." + pluralStringToString(rule.Count) + ", nil"
 
-		for k, v := range baseCal.FormatNames.Months.Wide {
+			} else {
 
-			val, ok := calendar.FormatNames.Months.Wide[k]
-			if !ok {
-				calendar.FormatNames.Months.Wide[k] = v
-				continue
+				results += "\n\nreturn locales." + pluralStringToString(rule.Count) + ", nil"
+				// results += "else {\nreturn locales." + locales.PluralStringToString(rule.Count) + ", nil\n}"
 			}
 
-			if val == "" {
-				calendar.FormatNames.Months.Wide[k] = v
-			}
+			continue
 		}
 
-		// days
-
-		if calendar.FormatNames.Days.Abbreviated == nil {
-			calendar.FormatNames.Days.Abbreviated = make(i18n.CalendarDayFormatNameValue)
+		if strings.Contains(data, "n") {
+			vals[prVarFuncs["n"]] = struct{}{}
 		}
 
-		if calendar.FormatNames.Days.Narrow == nil {
-			calendar.FormatNames.Days.Narrow = make(i18n.CalendarDayFormatNameValue)
+		if strings.Contains(data, "i") {
+			vals[prVarFuncs["i"]] = struct{}{}
 		}
 
-		if calendar.FormatNames.Days.Short == nil {
-			calendar.FormatNames.Days.Short = make(i18n.CalendarDayFormatNameValue)
+		if strings.Contains(data, "v") {
+			vals[prVarFuncs["v"]] = struct{}{}
 		}
 
-		if calendar.FormatNames.Days.Wide == nil {
-			calendar.FormatNames.Days.Wide = make(i18n.CalendarDayFormatNameValue)
+		if strings.Contains(data, "w") {
+			vals[prVarFuncs["w"]] = struct{}{}
 		}
 
-		for k, v := range baseCal.FormatNames.Days.Abbreviated {
-
-			val, ok := calendar.FormatNames.Days.Abbreviated[k]
-			if !ok {
-				calendar.FormatNames.Days.Abbreviated[k] = v
-				continue
-			}
-
-			if val == "" {
-				calendar.FormatNames.Days.Abbreviated[k] = v
-			}
+		if strings.Contains(data, "f") {
+			vals[prVarFuncs["f"]] = struct{}{}
 		}
 
-		for k, v := range baseCal.FormatNames.Days.Narrow {
-
-			val, ok := calendar.FormatNames.Days.Narrow[k]
-			if !ok {
-				calendar.FormatNames.Days.Narrow[k] = v
-				continue
-			}
-
-			if val == "" {
-				calendar.FormatNames.Days.Narrow[k] = v
-			}
+		if strings.Contains(data, "t") {
+			vals[prVarFuncs["t"]] = struct{}{}
 		}
 
-		for k, v := range baseCal.FormatNames.Days.Short {
-
-			val, ok := calendar.FormatNames.Days.Short[k]
-			if !ok {
-				calendar.FormatNames.Days.Short[k] = v
-				continue
-			}
+		// fmt.Println(rule.Count, data)
 
-			if val == "" {
-				calendar.FormatNames.Days.Short[k] = v
-			}
+		if first {
+			results += "if "
+			first = false
+		} else {
+			results += "else if "
 		}
 
-		for k, v := range baseCal.FormatNames.Days.Wide {
+		stmt := ""
 
-			val, ok := calendar.FormatNames.Days.Wide[k]
-			if !ok {
-				calendar.FormatNames.Days.Wide[k] = v
-				continue
-			}
+		// real work here
+		//
+		// split by 'or' then by 'and' allowing to better
+		// determine bracketing for formula
 
-			if val == "" {
-				calendar.FormatNames.Days.Wide[k] = v
-			}
-		}
+		ors := strings.Split(data, "||")
 
-		// periods
-		if calendar.FormatNames.Periods.Abbreviated == nil {
-			calendar.FormatNames.Periods.Abbreviated = make(i18n.CalendarPeriodFormatNameValue)
-		}
+		for _, or := range ors {
 
-		if calendar.FormatNames.Periods.Narrow == nil {
-			calendar.FormatNames.Periods.Narrow = make(i18n.CalendarPeriodFormatNameValue)
-		}
+			stmt += "("
 
-		if calendar.FormatNames.Periods.Short == nil {
-			calendar.FormatNames.Periods.Short = make(i18n.CalendarPeriodFormatNameValue)
-		}
+			ands := strings.Split(strings.TrimSpace(or), "&&")
 
-		if calendar.FormatNames.Periods.Wide == nil {
-			calendar.FormatNames.Periods.Wide = make(i18n.CalendarPeriodFormatNameValue)
-		}
+			for _, and := range ands {
 
-		for k, v := range baseCal.FormatNames.Periods.Abbreviated {
+				inArg := false
+				pre := ""
+				lft := ""
+				preOperator := ""
+				args := strings.Split(strings.TrimSpace(and), " ")
 
-			val, ok := calendar.FormatNames.Periods.Abbreviated[k]
-			if !ok {
-				calendar.FormatNames.Periods.Abbreviated[k] = v
-				continue
-			}
+				for _, a := range args {
 
-			if val == "" {
-				calendar.FormatNames.Periods.Abbreviated[k] = v
-			}
-		}
+					if inArg {
+						// check to see if is a value range 2..9
 
-		for k, v := range baseCal.FormatNames.Periods.Narrow {
+						multiRange := strings.Count(a, "..") > 1
+						cargs := strings.Split(strings.TrimSpace(a), ",")
+						hasBracket := len(cargs) > 1
+						bracketAdded := false
+						lastWasRange := false
 
-			val, ok := calendar.FormatNames.Periods.Narrow[k]
-			if !ok {
-				calendar.FormatNames.Periods.Narrow[k] = v
-				continue
-			}
-
-			if val == "" {
-				calendar.FormatNames.Periods.Narrow[k] = v
-			}
-		}
+						for _, carg := range cargs {
 
-		for k, v := range baseCal.FormatNames.Periods.Short {
+							if rng := strings.Split(carg, ".."); len(rng) > 1 {
 
-			val, ok := calendar.FormatNames.Periods.Short[k]
-			if !ok {
-				calendar.FormatNames.Periods.Short[k] = v
-				continue
-			}
+								if multiRange {
+									pre += " ("
+								} else {
+									pre += " "
+								}
 
-			if val == "" {
-				calendar.FormatNames.Periods.Short[k] = v
-			}
-		}
+								switch preOperator {
+								case "==":
+									pre += lft + " >= " + rng[0] + " && " + lft + "<=" + rng[1]
+								case "!=":
+									pre += lft + " < " + rng[0] + " && " + lft + " > " + rng[1]
+								}
 
-		for k, v := range baseCal.FormatNames.Periods.Wide {
+								if multiRange {
+									pre += ") || "
+								} else {
+									pre += " || "
+								}
 
-			val, ok := calendar.FormatNames.Periods.Wide[k]
-			if !ok {
-				calendar.FormatNames.Periods.Wide[k] = v
-				continue
-			}
+								lastWasRange = true
+								continue
+							}
 
-			if val == "" {
-				calendar.FormatNames.Periods.Wide[k] = v
-			}
-		}
+							if lastWasRange {
+								pre = strings.TrimRight(pre, " || ") + " && "
+							}
 
-		calendars[locale] = calendar
+							lastWasRange = false
 
-		number := numbers[locale]
-		baseNum := numbers[base]
+							if hasBracket && !bracketAdded {
+								pre += "("
+								bracketAdded = true
+							}
 
-		// symbols
-		if number.Symbols.Decimal == "" {
-			number.Symbols.Decimal = baseNum.Symbols.Decimal
-		}
+							// single comma separated values
+							switch preOperator {
+							case "==":
+								pre += " " + lft + preOperator + carg + " || "
+							case "!=":
+								pre += " " + lft + preOperator + carg + " && "
+							}
 
-		if number.Symbols.Group == "" {
-			number.Symbols.Group = baseNum.Symbols.Group
-		}
+						}
 
-		if number.Symbols.Negative == "" {
-			number.Symbols.Negative = baseNum.Symbols.Negative
-		}
+						pre = strings.TrimRight(pre, " || ")
+						pre = strings.TrimRight(pre, " && ")
+						pre = strings.TrimRight(pre, " || ")
 
-		if number.Symbols.Percent == "" {
-			number.Symbols.Percent = baseNum.Symbols.Percent
-		}
+						if hasBracket && bracketAdded {
+							pre += ")"
+						}
 
-		if number.Symbols.PerMille == "" {
-			number.Symbols.PerMille = baseNum.Symbols.PerMille
-		}
+						continue
+					}
 
-		// formats
-		if number.Formats.Decimal == "" {
-			number.Formats.Decimal = baseNum.Formats.Decimal
-		}
+					if strings.Contains(a, "=") || a == ">" || a == "<" {
+						inArg = true
+						preOperator = a
+						continue
+					}
 
-		if number.Formats.Currency == "" {
-			number.Formats.Currency = baseNum.Formats.Currency
-		}
+					lft += a
+				}
 
-		if number.Formats.CurrencyAccounting == "" {
-			number.Formats.CurrencyAccounting = baseNum.Formats.CurrencyAccounting
-		}
+				stmt += pre + " && "
+			}
 
-		if number.Formats.Percent == "" {
-			number.Formats.Percent = baseNum.Formats.Percent
+			stmt = strings.TrimRight(stmt, " && ") + ") || "
 		}
 
-		// currency
-		for k, v := range baseNum.Currencies {
+		stmt = strings.TrimRight(stmt, " || ")
 
-			val, ok := number.Currencies[k]
-			if !ok {
-				// number.Currencies[k] = v
-				continue
-			}
+		results += stmt
 
-			if val.Currency == "" {
-				val.Currency = v.Currency
-			}
+		results += " {\n"
 
-			if val.DisplayName == "" {
-				val.DisplayName = v.DisplayName
-			}
+		// return plural rule here
+		results += "return locales." + pluralStringToString(rule.Count) + ", nil\n"
 
-			if val.Symbol == "" {
-				val.Symbol = v.Symbol
-			}
+		results += "}"
+	}
 
-			number.Currencies[k] = val
-		}
+	pre := "\n"
 
-		numbers[locale] = number
+	for k := range vals {
+		pre += k
 	}
 
-	var wg sync.WaitGroup
-	wg.Add(len(numbers))
-	for locale, number := range numbers {
-		go func(locale string, number i18n.Number) {
+	pre += "\n"
 
-			localeLowercase := strings.ToLower(locale)
-
-			defer func() { wg.Done() }()
-			path := "../../resources/locales/" + locale
+	if len(results) == 0 {
+		results = "return locales.PluralRuleUnknown,nil"
+	}
 
-			if _, err := os.Stat(path); err != nil {
-				if err = os.MkdirAll(path, 0777); err != nil {
-					panic(err)
-				}
-			}
+	results = pre + results
 
-			path += "/"
+	return
+}
 
-			mainFile, err := os.Create(path + "main.go")
-			if err != nil {
-				panic(err)
-			}
-			defer mainFile.Close()
-
-			calendar := calendars[locale]
-
-			mainCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
-			import "github.com/go-playground/universal-translator"
-
-			var locale = &ut.Locale{
-				Locale: %q,
-				Number: ut.Number{
-					Symbols: symbols,
-					Formats: formats,
-					Currencies: currencies,
-				},
-				Calendar: calendar,
-				PluralRule:   pluralRule,
-			}
+func pluralStringToString(pr string) string {
+
+	pr = strings.TrimSpace(pr)
+
+	switch pr {
+	case "zero":
+		return "PluralRuleZero"
+	case "one":
+		return "PluralRuleOne"
+	case "two":
+		return "PluralRuleTwo"
+	case "few":
+		return "PluralRuleFew"
+	case "many":
+		return "PluralRuleMany"
+	case "other":
+		return "PluralRuleOther"
+	default:
+		return "PluralRuleUnknown"
+	}
+}
 
-			func init() {
-				ut.RegisterLocale(locale)
-			}
-		`, locale, locale)))
+// //plurals
+// rules := "data/rules"
+// plurals := map[string]*pluralInfo{}
+// basePlurals := map[string]string{}
 
-			if err != nil {
-				panic(err)
-			}
+// err := filepath.Walk(rules, func(path string, info os.FileInfo, err error) error {
+
+// 	if err != nil {
+// 		panic(err)
+// 	}
+
+// 	if info.IsDir() {
+// 		return nil
+// 	}
+
+// 	in, err := ioutil.ReadFile(path)
+// 	if err != nil {
+// 		panic(err)
+// 	}
+
+// 	var out yaml.MapSlice
+// 	if err = yaml.Unmarshal(in, &out); err != nil {
+// 		panic(err)
+// 	}
+
+// 	var plural string
+// 	for _, item := range out {
+// 		if item.Key == "plural" {
+// 			plural = item.Value.(string)
+// 		}
+// 	}
+
+// 	locale := strings.Replace(info.Name(), filepath.Ext(info.Name()), "", 1)
+// 	locale = strings.ToLower(strings.Replace(locale, "-", "_", -1))
+
+// 	plurals[locale] = &pluralInfo{
+// 		path:   path,
+// 		locale: locale,
+// 		plural: plural,
+// 	}
+
+// 	if plural == "" {
+// 		return nil
+// 	}
+
+// 	basePlurals[locale] = plural
+
+// 	return nil
+// })
+
+// if err != nil {
+// 	panic(err)
+// }
+
+// for _, p := range plurals {
+
+// 	if p.plural == "" {
+
+// 		var ok bool
+
+// 		fmt.Print("can't find plurals in ", p.path, " attempting to locate base language plural rules...")
+
+// 		base := strings.SplitN(p.locale, "_", 2)
+
+// 		p.plural, ok = basePlurals[base[0]]
+// 		if !ok {
+// 			fmt.Println("Not Found")
+// 			continue
+// 		}
+
+// 		fmt.Println("Found")
+// 	}
+// }
+
+// cldr
+
+// var decoder cldr.Decoder
+// cldr, err := decoder.DecodePath("data/core")
+// if err != nil {
+// 	panic(err)
+// }
+
+// 	locs := map[string]string{}
+// 	numbers := map[string]i18n.Number{}
+// 	calendars := map[string]i18n.Calendar{}
+// 	locales := cldr.Locales()
+// 	for _, loc := range locales {
+
+// 		ldml := cldr.RawLDML(loc)
+// 		if ldml.Numbers == nil {
+// 			continue
+// 		}
+// 		var number i18n.Number
+
+// 		number.Currencies = make(i18n.CurrencyFormatValue)
+
+// 		if len(ldml.Numbers.Symbols) > 0 {
+// 			symbol := ldml.Numbers.Symbols[0]
+// 			if len(symbol.Decimal) > 0 {
+// 				number.Symbols.Decimal = symbol.Decimal[0].Data()
+// 			}
+// 			if len(symbol.Group) > 0 {
+// 				number.Symbols.Group = symbol.Group[0].Data()
+// 			}
+// 			if len(symbol.MinusSign) > 0 {
+// 				number.Symbols.Negative = symbol.MinusSign[0].Data()
+// 			}
+// 			if len(symbol.PercentSign) > 0 {
+// 				number.Symbols.Percent = symbol.PercentSign[0].Data()
+// 			}
+// 			if len(symbol.PerMille) > 0 {
+// 				number.Symbols.PerMille = symbol.PerMille[0].Data()
+// 			}
+// 		}
+// 		if len(ldml.Numbers.DecimalFormats) > 0 && len(ldml.Numbers.DecimalFormats[0].DecimalFormatLength) > 0 {
+// 			number.Formats.Decimal = ldml.Numbers.DecimalFormats[0].DecimalFormatLength[0].DecimalFormat[0].Pattern[0].Data()
+// 		}
+
+// 		if len(ldml.Numbers.CurrencyFormats) > 0 && len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength) > 0 {
+
+// 			number.Formats.Currency = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[0].Pattern[0].Data()
+// 			number.Formats.CurrencyAccounting = number.Formats.Currency
+
+// 			if len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat) > 1 {
+// 				number.Formats.CurrencyAccounting = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[1].Pattern[0].Data()
+// 			}
+// 		}
+// 		if len(ldml.Numbers.PercentFormats) > 0 && len(ldml.Numbers.PercentFormats[0].PercentFormatLength) > 0 {
+// 			number.Formats.Percent = ldml.Numbers.PercentFormats[0].PercentFormatLength[0].PercentFormat[0].Pattern[0].Data()
+// 		}
+// 		if ldml.Numbers.Currencies != nil {
+
+// 			for _, currency := range ldml.Numbers.Currencies.Currency {
+
+// 				var c i18n.Currency
+
+// 				c.Currency = currency.Type
+
+// 				if len(currency.DisplayName) > 0 {
+// 					c.DisplayName = currency.DisplayName[0].Data()
+// 				}
+
+// 				if len(currency.Symbol) > 0 {
+// 					c.Symbol = currency.Symbol[0].Data()
+// 				}
+
+// 				number.Currencies[c.Currency] = c
+// 			}
+// 		}
+// 		numbers[loc] = number
+// 		locs[loc] = strings.ToLower(strings.Replace(loc, "_", "", -1))
+
+// 		if ldml.Dates != nil && ldml.Dates.Calendars != nil {
+
+// 			var calendar i18n.Calendar
+// 			ldmlCar := ldml.Dates.Calendars.Calendar[0]
+
+// 			for _, cal := range ldml.Dates.Calendars.Calendar {
+// 				if cal.Type == "gregorian" {
+// 					ldmlCar = cal
+// 				}
+// 			}
+
+// 			if ldmlCar.DateFormats != nil {
+// 				for _, datefmt := range ldmlCar.DateFormats.DateFormatLength {
+// 					switch datefmt.Type {
+// 					case "full":
+// 						calendar.Formats.DateEra.BC.Full = datefmt.DateFormat[0].Pattern[0].Data()
+// 						calendar.Formats.DateEra.AD.Full = calendar.Formats.DateEra.BC.Full
+
+// 					case "long":
+// 						calendar.Formats.DateEra.BC.Long = datefmt.DateFormat[0].Pattern[0].Data()
+// 						calendar.Formats.DateEra.AD.Long = calendar.Formats.DateEra.BC.Long
+
+// 						// Overrides TODO: Split Each Section into separate function, getting to big to maintain
+
+// 					case "medium":
+// 						calendar.Formats.DateEra.BC.Medium = datefmt.DateFormat[0].Pattern[0].Data()
+// 						calendar.Formats.DateEra.AD.Medium = calendar.Formats.DateEra.BC.Medium
+// 					case "short":
+// 						calendar.Formats.DateEra.BC.Short = datefmt.DateFormat[0].Pattern[0].Data()
+// 						calendar.Formats.DateEra.AD.Short = calendar.Formats.DateEra.BC.Short
+// 					}
+// 				}
+
+// 				// Overrides TODO: Split Each Section into separate function, getting to big to maintain
+// 				switch loc {
+// 				case "th":
+// 					calendar.Formats.DateEra.BC.Full = "EEEEที่ d MMMM y GGGG"
+// 					calendar.Formats.DateEra.AD.Full = "EEEEที่ d MMMM GGGG y"
+// 					calendar.Formats.DateEra.BC.Long = "d MMMM y GG"
+// 					calendar.Formats.DateEra.AD.Long = "d MMMM GG y"
+// 				case "en":
+// 					calendar.Formats.DateEra.BC.Full = "EEEE, MMMM d, y GGGG"
+// 					calendar.Formats.DateEra.BC.Long = "MMMM d, y GG"
+// 					// calendar.Formats.DateEra.BC.Medium = "MMM d, y GG"
+// 					// calendar.Formats.DateEra.BC.Short = "M/d/yy G"
+// 				}
+// 			}
+
+// 			if ldmlCar.TimeFormats != nil {
+// 				for _, datefmt := range ldmlCar.TimeFormats.TimeFormatLength {
+// 					switch datefmt.Type {
+// 					case "full":
+// 						calendar.Formats.Time.Full = datefmt.TimeFormat[0].Pattern[0].Data()
+// 					case "long":
+// 						calendar.Formats.Time.Long = datefmt.TimeFormat[0].Pattern[0].Data()
+// 					case "medium":
+// 						calendar.Formats.Time.Medium = datefmt.TimeFormat[0].Pattern[0].Data()
+// 					case "short":
+// 						calendar.Formats.Time.Short = datefmt.TimeFormat[0].Pattern[0].Data()
+// 					}
+// 				}
+// 			}
+// 			if ldmlCar.DateTimeFormats != nil {
+// 				for _, datefmt := range ldmlCar.DateTimeFormats.DateTimeFormatLength {
+// 					switch datefmt.Type {
+// 					case "full":
+// 						calendar.Formats.DateTime.Full = datefmt.DateTimeFormat[0].Pattern[0].Data()
+// 					case "long":
+// 						calendar.Formats.DateTime.Long = datefmt.DateTimeFormat[0].Pattern[0].Data()
+// 					case "medium":
+// 						calendar.Formats.DateTime.Medium = datefmt.DateTimeFormat[0].Pattern[0].Data()
+// 					case "short":
+// 						calendar.Formats.DateTime.Short = datefmt.DateTimeFormat[0].Pattern[0].Data()
+// 					}
+// 				}
+// 			}
+// 			if ldmlCar.Months != nil {
+
+// 				for _, monthctx := range ldmlCar.Months.MonthContext {
+
+// 					for _, months := range monthctx.MonthWidth {
+
+// 						i18nMonth := make(i18n.CalendarMonthFormatNameValue)
+
+// 						for _, m := range months.Month {
+// 							switch m.Type {
+// 							case "1":
+// 								i18nMonth[time.January] = m.Data()
+// 							case "2":
+// 								i18nMonth[time.February] = m.Data()
+// 							case "3":
+// 								i18nMonth[time.March] = m.Data()
+// 							case "4":
+// 								i18nMonth[time.April] = m.Data()
+// 							case "5":
+// 								i18nMonth[time.May] = m.Data()
+// 							case "6":
+// 								i18nMonth[time.June] = m.Data()
+// 							case "7":
+// 								i18nMonth[time.July] = m.Data()
+// 							case "8":
+// 								i18nMonth[time.August] = m.Data()
+// 							case "9":
+// 								i18nMonth[time.September] = m.Data()
+// 							case "10":
+// 								i18nMonth[time.October] = m.Data()
+// 							case "11":
+// 								i18nMonth[time.November] = m.Data()
+// 							case "12":
+// 								i18nMonth[time.December] = m.Data()
+// 							}
+// 						}
+// 						switch months.Type {
+// 						case "abbreviated":
+// 							calendar.FormatNames.Months.Abbreviated = i18nMonth
+// 						case "narrow":
+// 							calendar.FormatNames.Months.Narrow = i18nMonth
+// 						case "short":
+// 							calendar.FormatNames.Months.Short = i18nMonth
+// 						case "wide":
+// 							calendar.FormatNames.Months.Wide = i18nMonth
+// 						}
+// 					}
+// 				}
+// 			}
+// 			if ldmlCar.Days != nil {
+// 				for _, dayctx := range ldmlCar.Days.DayContext {
+
+// 					for _, days := range dayctx.DayWidth {
+
+// 						i18nDay := make(i18n.CalendarDayFormatNameValue)
+
+// 						for _, d := range days.Day {
+
+// 							switch d.Type {
+// 							case "sun":
+// 								i18nDay[time.Sunday] = d.Data()
+// 							case "mon":
+// 								i18nDay[time.Monday] = d.Data()
+// 							case "tue":
+// 								i18nDay[time.Tuesday] = d.Data()
+// 							case "wed":
+// 								i18nDay[time.Wednesday] = d.Data()
+// 							case "thu":
+// 								i18nDay[time.Thursday] = d.Data()
+// 							case "fri":
+// 								i18nDay[time.Friday] = d.Data()
+// 							case "sat":
+// 								i18nDay[time.Saturday] = d.Data()
+// 							}
+// 						}
+
+// 						switch days.Type {
+// 						case "abbreviated":
+// 							calendar.FormatNames.Days.Abbreviated = i18nDay
+// 						case "narrow":
+// 							calendar.FormatNames.Days.Narrow = i18nDay
+// 						case "short":
+// 							calendar.FormatNames.Days.Short = i18nDay
+// 						case "wide":
+// 							calendar.FormatNames.Days.Wide = i18nDay
+// 						}
+// 					}
+// 				}
+// 			}
+
+// 			if ldmlCar.DayPeriods != nil {
+
+// 				for _, ctx := range ldmlCar.DayPeriods.DayPeriodContext {
+
+// 					for _, width := range ctx.DayPeriodWidth {
+
+// 						// var i18nPeriod i18n.CalendarPeriodFormatNameValue
+// 						i18nPeriod := make(i18n.CalendarPeriodFormatNameValue)
+
+// 						for _, d := range width.DayPeriod {
+
+// 							if _, ok := i18nPeriod[d.Type]; !ok {
+// 								i18nPeriod[d.Type] = d.Data()
+// 							}
+// 						}
+
+// 						switch width.Type {
+// 						case "abbreviated":
+// 							calendar.FormatNames.Periods.Abbreviated = i18nPeriod
+// 						case "narrow":
+// 							calendar.FormatNames.Periods.Narrow = i18nPeriod
+// 						case "short":
+// 							calendar.FormatNames.Periods.Short = i18nPeriod
+// 						case "wide":
+// 							calendar.FormatNames.Periods.Wide = i18nPeriod
+// 						}
+// 					}
+// 				}
+// 				// var empty i18n.CalendarPeriodFormatNameValue
+// 				// if calendar.FormatNames.Periods.Abbreviated == empty {
+// 				// 	calendar.FormatNames.Periods.Abbreviated = calendar.FormatNames.Periods.Wide
+// 				// }
+// 			}
+
+// 			if ldmlCar.Eras != nil {
+
+// 				var eras i18n.Eras
+
+// 				if ldmlCar.Eras.EraNames != nil && len(ldmlCar.Eras.EraNames.Era) > 0 {
+// 					eras.BC.Full = ldmlCar.Eras.EraNames.Era[0].Data()
+// 				}
+
+// 				if ldmlCar.Eras.EraAbbr != nil && len(ldmlCar.Eras.EraAbbr.Era) > 0 {
+// 					eras.BC.Abbrev = ldmlCar.Eras.EraAbbr.Era[0].Data()
+// 				}
+
+// 				if ldmlCar.Eras.EraNarrow != nil && len(ldmlCar.Eras.EraNarrow.Era) > 0 {
+// 					eras.BC.Narrow = ldmlCar.Eras.EraNarrow.Era[0].Data()
+// 				}
+
+// 				if ldmlCar.Eras.EraNames != nil && len(ldmlCar.Eras.EraNames.Era) > 2 {
+// 					eras.AD.Full = ldmlCar.Eras.EraNames.Era[2].Data()
+// 				}
+
+// 				if ldmlCar.Eras.EraAbbr != nil && len(ldmlCar.Eras.EraAbbr.Era) > 2 {
+// 					eras.AD.Abbrev = ldmlCar.Eras.EraAbbr.Era[2].Data()
+// 				}
+
+// 				if ldmlCar.Eras.EraNarrow != nil && len(ldmlCar.Eras.EraNarrow.Era) > 2 {
+// 					eras.AD.Narrow = ldmlCar.Eras.EraNarrow.Era[2].Data()
+// 				}
+
+// 				calendar.FormatNames.Eras = eras
+// 			}
+
+// 			calendars[loc] = calendar
+// 		}
+// 	}
+
+// 	for locale := range locs {
+
+// 		if !strings.Contains(locale, "_") {
+// 			continue
+// 		}
+
+// 		calendar := calendars[locale]
+
+// 		bString := strings.SplitN(locale, "_", 2)
+// 		base := bString[0]
+
+// 		baseCal := calendars[base]
+
+// 		// copy base calendar objects
+
+// 		// Dates
+// 		if calendar.Formats.DateEra.AD.Full == "" {
+// 			calendar.Formats.DateEra.BC.Full = baseCal.Formats.DateEra.BC.Full
+// 			calendar.Formats.DateEra.AD.Full = baseCal.Formats.DateEra.AD.Full
+// 		}
+
+// 		if calendar.Formats.DateEra.AD.Long == "" {
+// 			calendar.Formats.DateEra.BC.Long = baseCal.Formats.DateEra.BC.Long
+// 			calendar.Formats.DateEra.AD.Long = baseCal.Formats.DateEra.AD.Long
+// 		}
+
+// 		if calendar.Formats.DateEra.AD.Medium == "" {
+// 			calendar.Formats.DateEra.BC.Medium = baseCal.Formats.DateEra.BC.Medium
+// 			calendar.Formats.DateEra.AD.Medium = baseCal.Formats.DateEra.AD.Medium
+// 		}
 
-			fmt.Fprintf(mainFile, "%s", mainCodes)
+// 		if calendar.Formats.DateEra.AD.Short == "" {
+// 			calendar.Formats.DateEra.BC.Short = baseCal.Formats.DateEra.BC.Short
+// 			calendar.Formats.DateEra.AD.Short = baseCal.Formats.DateEra.AD.Short
+// 		}
+
+// 		// times
+// 		if calendar.Formats.Time.Full == "" {
+// 			calendar.Formats.Time.Full = baseCal.Formats.Time.Full
+// 		}
+
+// 		if calendar.Formats.Time.Long == "" {
+// 			calendar.Formats.Time.Long = baseCal.Formats.Time.Long
+// 		}
+
+// 		if calendar.Formats.Time.Medium == "" {
+// 			calendar.Formats.Time.Medium = baseCal.Formats.Time.Medium
+// 		}
+
+// 		if calendar.Formats.Time.Short == "" {
+// 			calendar.Formats.Time.Short = baseCal.Formats.Time.Short
+// 		}
+
+// 		// date & times
+// 		if calendar.Formats.DateTime.Full == "" {
+// 			calendar.Formats.DateTime.Full = baseCal.Formats.DateTime.Full
+// 		}
 
-			numberFile, err := os.Create(path + "number.go")
-			if err != nil {
-				panic(err)
-			}
-			defer numberFile.Close()
-
-			numberCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
-			import "github.com/go-playground/universal-translator"
-			var (
-				symbols = %#v
-				formats = %#v
-			)
-		`, locale, number.Symbols, number.Formats)))
-			if err != nil {
-				panic(err)
-			}
-			fmt.Fprintf(numberFile, "%s", numberCodes)
+// 		if calendar.Formats.DateTime.Long == "" {
+// 			calendar.Formats.DateTime.Long = baseCal.Formats.DateTime.Long
+// 		}
 
-			currencyFile, err := os.Create(path + "currency.go")
-			if err != nil {
-				panic(err)
-			}
-			defer currencyFile.Close()
-
-			currencyCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
-			import "github.com/go-playground/universal-translator"
-			var currencies = %# v
-		`, locale, number.Currencies)))
-			if err != nil {
-				panic(err)
-			}
-			fmt.Fprintf(currencyFile, "%s", currencyCodes)
+// 		if calendar.Formats.DateTime.Medium == "" {
+// 			calendar.Formats.DateTime.Medium = baseCal.Formats.DateTime.Medium
+// 		}
 
-			calendarFile, err := os.Create(path + "calendar.go")
-			if err != nil {
-				panic(err)
-			}
-			defer calendarFile.Close()
-
-			calendarCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
-			import "github.com/go-playground/universal-translator"
-			var calendar = %#v
-		`, locale, calendar)))
-			if err != nil {
-				panic(err)
-			}
-			fmt.Fprintf(calendarFile, "%s", calendarCodes)
+// 		if calendar.Formats.DateTime.Short == "" {
+// 			calendar.Formats.DateTime.Short = baseCal.Formats.DateTime.Short
+// 		}
 
-			var ok bool
-			pluralCode := "1"
+// 		// months
 
-			pInfo, ok := plurals[localeLowercase]
-			if ok && pInfo.plural != "" {
-				pluralCode = pInfo.plural
-			}
+// 		if calendar.FormatNames.Months.Abbreviated == nil {
+// 			calendar.FormatNames.Months.Abbreviated = make(i18n.CalendarMonthFormatNameValue)
+// 		}
 
-			pluralFile, err := os.Create(path + "plural.go")
-			if err != nil {
-				panic(err)
-			}
-			defer pluralFile.Close()
+// 		if calendar.FormatNames.Months.Narrow == nil {
+// 			calendar.FormatNames.Months.Narrow = make(i18n.CalendarMonthFormatNameValue)
+// 		}
 
-			pluralCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+// 		if calendar.FormatNames.Months.Short == nil {
+// 			calendar.FormatNames.Months.Short = make(i18n.CalendarMonthFormatNameValue)
+// 		}
 
-			var pluralRule = %q
-		`, locale, pluralCode)))
-			if err != nil {
-				panic(err)
-			}
-			fmt.Fprintf(pluralFile, "%s", pluralCodes)
-		}(locale, number)
-	}
+// 		if calendar.FormatNames.Months.Wide == nil {
+// 			calendar.FormatNames.Months.Wide = make(i18n.CalendarMonthFormatNameValue)
+// 		}
 
-	wg.Wait()
+// 		for k, v := range baseCal.FormatNames.Months.Abbreviated {
 
-	localesFile, err := os.Create("../../resources/locales/all.go")
-	if err != nil {
-		panic(err)
-	}
-	defer localesFile.Close()
+// 			val, ok := calendar.FormatNames.Months.Abbreviated[k]
+// 			if !ok {
+// 				calendar.FormatNames.Months.Abbreviated[k] = v
+// 				continue
+// 			}
 
-	tmpl, err := template.New("").Parse(`package locales
+// 			if val == "" {
+// 				calendar.FormatNames.Months.Abbreviated[k] = v
+// 			}
+// 		}
 
-		// Imports for all locales
-		import (
-			{{range $locale, $_ := .}}// Locale "{{$locale}}" import that automatically registers itslef with the universal-translator package
-			_ "github.com/go-playground/universal-translator/resources/locales/{{$locale}}"
-		{{end}})
-	`)
+// 		for k, v := range baseCal.FormatNames.Months.Narrow {
+
+// 			val, ok := calendar.FormatNames.Months.Narrow[k]
+// 			if !ok {
+// 				calendar.FormatNames.Months.Narrow[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Months.Narrow[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Months.Short {
+
+// 			val, ok := calendar.FormatNames.Months.Short[k]
+// 			if !ok {
+// 				calendar.FormatNames.Months.Short[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Months.Short[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Months.Wide {
+
+// 			val, ok := calendar.FormatNames.Months.Wide[k]
+// 			if !ok {
+// 				calendar.FormatNames.Months.Wide[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Months.Wide[k] = v
+// 			}
+// 		}
+
+// 		// days
+
+// 		if calendar.FormatNames.Days.Abbreviated == nil {
+// 			calendar.FormatNames.Days.Abbreviated = make(i18n.CalendarDayFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Days.Narrow == nil {
+// 			calendar.FormatNames.Days.Narrow = make(i18n.CalendarDayFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Days.Short == nil {
+// 			calendar.FormatNames.Days.Short = make(i18n.CalendarDayFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Days.Wide == nil {
+// 			calendar.FormatNames.Days.Wide = make(i18n.CalendarDayFormatNameValue)
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Days.Abbreviated {
+
+// 			val, ok := calendar.FormatNames.Days.Abbreviated[k]
+// 			if !ok {
+// 				calendar.FormatNames.Days.Abbreviated[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Days.Abbreviated[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Days.Narrow {
+
+// 			val, ok := calendar.FormatNames.Days.Narrow[k]
+// 			if !ok {
+// 				calendar.FormatNames.Days.Narrow[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Days.Narrow[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Days.Short {
+
+// 			val, ok := calendar.FormatNames.Days.Short[k]
+// 			if !ok {
+// 				calendar.FormatNames.Days.Short[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Days.Short[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Days.Wide {
+
+// 			val, ok := calendar.FormatNames.Days.Wide[k]
+// 			if !ok {
+// 				calendar.FormatNames.Days.Wide[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Days.Wide[k] = v
+// 			}
+// 		}
+
+// 		// periods
+// 		if calendar.FormatNames.Periods.Abbreviated == nil {
+// 			calendar.FormatNames.Periods.Abbreviated = make(i18n.CalendarPeriodFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Periods.Narrow == nil {
+// 			calendar.FormatNames.Periods.Narrow = make(i18n.CalendarPeriodFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Periods.Short == nil {
+// 			calendar.FormatNames.Periods.Short = make(i18n.CalendarPeriodFormatNameValue)
+// 		}
+
+// 		if calendar.FormatNames.Periods.Wide == nil {
+// 			calendar.FormatNames.Periods.Wide = make(i18n.CalendarPeriodFormatNameValue)
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Periods.Abbreviated {
+
+// 			val, ok := calendar.FormatNames.Periods.Abbreviated[k]
+// 			if !ok {
+// 				calendar.FormatNames.Periods.Abbreviated[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Periods.Abbreviated[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Periods.Narrow {
+
+// 			val, ok := calendar.FormatNames.Periods.Narrow[k]
+// 			if !ok {
+// 				calendar.FormatNames.Periods.Narrow[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Periods.Narrow[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Periods.Short {
+
+// 			val, ok := calendar.FormatNames.Periods.Short[k]
+// 			if !ok {
+// 				calendar.FormatNames.Periods.Short[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Periods.Short[k] = v
+// 			}
+// 		}
+
+// 		for k, v := range baseCal.FormatNames.Periods.Wide {
+
+// 			val, ok := calendar.FormatNames.Periods.Wide[k]
+// 			if !ok {
+// 				calendar.FormatNames.Periods.Wide[k] = v
+// 				continue
+// 			}
+
+// 			if val == "" {
+// 				calendar.FormatNames.Periods.Wide[k] = v
+// 			}
+// 		}
 
-	if err != nil {
-		panic(err)
-	}
-	var buf bytes.Buffer
-	if err := tmpl.Execute(&buf, locs); err != nil {
-		panic(err)
-	}
-	allCodes, err := format.Source(buf.Bytes())
-	if err != nil {
-		panic(err)
-	}
-	_, err = localesFile.Write(allCodes)
-	if err != nil {
-		panic(err)
-	}
-}
+// 		calendars[locale] = calendar
+
+// 		number := numbers[locale]
+// 		baseNum := numbers[base]
+
+// 		// symbols
+// 		if number.Symbols.Decimal == "" {
+// 			number.Symbols.Decimal = baseNum.Symbols.Decimal
+// 		}
+
+// 		if number.Symbols.Group == "" {
+// 			number.Symbols.Group = baseNum.Symbols.Group
+// 		}
+
+// 		if number.Symbols.Negative == "" {
+// 			number.Symbols.Negative = baseNum.Symbols.Negative
+// 		}
+
+// 		if number.Symbols.Percent == "" {
+// 			number.Symbols.Percent = baseNum.Symbols.Percent
+// 		}
+
+// 		if number.Symbols.PerMille == "" {
+// 			number.Symbols.PerMille = baseNum.Symbols.PerMille
+// 		}
+
+// 		// formats
+// 		if number.Formats.Decimal == "" {
+// 			number.Formats.Decimal = baseNum.Formats.Decimal
+// 		}
+
+// 		if number.Formats.Currency == "" {
+// 			number.Formats.Currency = baseNum.Formats.Currency
+// 		}
+
+// 		if number.Formats.CurrencyAccounting == "" {
+// 			number.Formats.CurrencyAccounting = baseNum.Formats.CurrencyAccounting
+// 		}
+
+// 		if number.Formats.Percent == "" {
+// 			number.Formats.Percent = baseNum.Formats.Percent
+// 		}
+
+// 		// currency
+// 		for k, v := range baseNum.Currencies {
+
+// 			val, ok := number.Currencies[k]
+// 			if !ok {
+// 				// number.Currencies[k] = v
+// 				continue
+// 			}
+
+// 			if val.Currency == "" {
+// 				val.Currency = v.Currency
+// 			}
+
+// 			if val.DisplayName == "" {
+// 				val.DisplayName = v.DisplayName
+// 			}
+
+// 			if val.Symbol == "" {
+// 				val.Symbol = v.Symbol
+// 			}
+
+// 			number.Currencies[k] = val
+// 		}
+
+// 		numbers[locale] = number
+// 	}
+
+// 	var wg sync.WaitGroup
+// 	wg.Add(len(numbers))
+// 	for locale, number := range numbers {
+// 		go func(locale string, number i18n.Number) {
+
+// 			localeLowercase := strings.ToLower(locale)
+
+// 			defer func() { wg.Done() }()
+// 			path := "../../resources/locales/" + locale
+
+// 			if _, err := os.Stat(path); err != nil {
+// 				if err = os.MkdirAll(path, 0777); err != nil {
+// 					panic(err)
+// 				}
+// 			}
+
+// 			path += "/"
+
+// 			mainFile, err := os.Create(path + "main.go")
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			defer mainFile.Close()
+
+// 			calendar := calendars[locale]
+
+// 			mainCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+// 			import "github.com/go-playground/universal-translator"
+
+// 			var locale = &ut.Locale{
+// 				Locale: %q,
+// 				Number: ut.Number{
+// 					Symbols: symbols,
+// 					Formats: formats,
+// 					Currencies: currencies,
+// 				},
+// 				Calendar: calendar,
+// 				PluralRule:   pluralRule,
+// 			}
+
+// 			func init() {
+// 				ut.RegisterLocale(locale)
+// 			}
+// 		`, locale, locale)))
+
+// 			if err != nil {
+// 				panic(err)
+// 			}
+
+// 			fmt.Fprintf(mainFile, "%s", mainCodes)
+
+// 			numberFile, err := os.Create(path + "number.go")
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			defer numberFile.Close()
+
+// 			numberCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+// 			import "github.com/go-playground/universal-translator"
+// 			var (
+// 				symbols = %#v
+// 				formats = %#v
+// 			)
+// 		`, locale, number.Symbols, number.Formats)))
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			fmt.Fprintf(numberFile, "%s", numberCodes)
+
+// 			currencyFile, err := os.Create(path + "currency.go")
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			defer currencyFile.Close()
+
+// 			currencyCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+// 			import "github.com/go-playground/universal-translator"
+// 			var currencies = %# v
+// 		`, locale, number.Currencies)))
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			fmt.Fprintf(currencyFile, "%s", currencyCodes)
+
+// 			calendarFile, err := os.Create(path + "calendar.go")
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			defer calendarFile.Close()
+
+// 			calendarCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+// 			import "github.com/go-playground/universal-translator"
+// 			var calendar = %#v
+// 		`, locale, calendar)))
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			fmt.Fprintf(calendarFile, "%s", calendarCodes)
+
+// 			var ok bool
+// 			pluralCode := "1"
+
+// 			pInfo, ok := plurals[localeLowercase]
+// 			if ok && pInfo.plural != "" {
+// 				pluralCode = pInfo.plural
+// 			}
+
+// 			pluralFile, err := os.Create(path + "plural.go")
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			defer pluralFile.Close()
+
+// 			pluralCodes, err := format.Source([]byte(fmt.Sprintf(`package %s
+
+// 			var pluralRule = %q
+// 		`, locale, pluralCode)))
+// 			if err != nil {
+// 				panic(err)
+// 			}
+// 			fmt.Fprintf(pluralFile, "%s", pluralCodes)
+// 		}(locale, number)
+// 	}
+
+// 	wg.Wait()
+
+// 	localesFile, err := os.Create("../../resources/locales/all.go")
+// 	if err != nil {
+// 		panic(err)
+// 	}
+// 	defer localesFile.Close()
+
+// 	tmpl, err := template.New("").Parse(`package locales
+
+// 		// Imports for all locales
+// 		import (
+// 			{{range $locale, $_ := .}}// Locale "{{$locale}}" import that automatically registers itslef with the universal-translator package
+// 			_ "github.com/go-playground/universal-translator/resources/locales/{{$locale}}"
+// 		{{end}})
+// 	`)
+
+// 	if err != nil {
+// 		panic(err)
+// 	}
+// 	var buf bytes.Buffer
+// 	if err := tmpl.Execute(&buf, locs); err != nil {
+// 		panic(err)
+// 	}
+// 	allCodes, err := format.Source(buf.Bytes())
+// 	if err != nil {
+// 		panic(err)
+// 	}
+// 	_, err = localesFile.Write(allCodes)
+// 	if err != nil {
+// 		panic(err)
+// 	}
+// }

+ 29 - 0
cmd/resources/translator.tmpl

@@ -0,0 +1,29 @@
+{{ define "translator" }}
+package {{ .Locale }}
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type {{ .Locale }} struct {
+	locale string
+}
+
+// New returns a new instance of translator for the '{{ .Locale }}' locale
+func New() locales.Translator {
+	return &{{ .Locale }}{
+		locale: "{{ .Locale }}",
+	}
+}
+
+// Locale returns the current translators string locale
+func(l *{{ .Locale }}) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func(l *{{ .Locale }}) CardinalPluralRule(num string) (locales.PluralRule, error) {
+	{{ .CardinalFunc }}
+}
+
+{{ end }}

+ 36 - 0
resources/locales/af/af.go

@@ -0,0 +1,36 @@
+package af
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type af struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'af' locale
+func New() locales.Translator {
+	return &af{
+		locale: "af",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *af) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *af) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 1 {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


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


+ 0 - 18
resources/locales/af/main.go

@@ -1,18 +0,0 @@
-package af
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "af",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/af/number.go

@@ -1,8 +0,0 @@
-package af
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: "\u00a0", Negative: "-", Percent: "%", PerMille: "‰"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤#,##0.00", CurrencyAccounting: "¤#,##0.00;(¤#,##0.00)", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/af/plural.go

@@ -1,3 +0,0 @@
-package af
-
-var pluralRule = "2A"

+ 36 - 0
resources/locales/af_NA/af_NA.go

@@ -0,0 +1,36 @@
+package af_NA
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type af_NA struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'af_NA' locale
+func New() locales.Translator {
+	return &af_NA{
+		locale: "af_NA",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *af_NA) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *af_NA) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 1 {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/af_NA/currency.go

@@ -1,5 +0,0 @@
-package af_NA
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{"NAD": ut.Currency{Currency: "NAD", DisplayName: "Namibiese dollar", Symbol: "$"}}

+ 0 - 18
resources/locales/af_NA/main.go

@@ -1,18 +0,0 @@
-package af_NA
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "af_NA",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/af_NA/number.go

@@ -1,8 +0,0 @@
-package af_NA
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: "\u00a0", Negative: "-", Percent: "%", PerMille: "‰"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤#,##0.00", CurrencyAccounting: "¤#,##0.00;(¤#,##0.00)", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/af_NA/plural.go

@@ -1,3 +0,0 @@
-package af_NA
-
-var pluralRule = "1"

+ 36 - 0
resources/locales/af_ZA/af_ZA.go

@@ -0,0 +1,36 @@
+package af_ZA
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type af_ZA struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'af_ZA' locale
+func New() locales.Translator {
+	return &af_ZA{
+		locale: "af_ZA",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *af_ZA) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *af_ZA) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 1 {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 26 - 0
resources/locales/agq/agq.go

@@ -0,0 +1,26 @@
+package agq
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type agq struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'agq' locale
+func New() locales.Translator {
+	return &agq{
+		locale: "agq",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *agq) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *agq) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+}

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


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


+ 0 - 18
resources/locales/agq/main.go

@@ -1,18 +0,0 @@
-package agq
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "agq",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/agq/number.go

@@ -1,8 +0,0 @@
-package agq
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: "\u00a0", Negative: "", Percent: "", PerMille: ""}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "#,##0.00¤", CurrencyAccounting: "#,##0.00¤", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/agq/plural.go

@@ -1,3 +0,0 @@
-package agq
-
-var pluralRule = "1"

+ 26 - 0
resources/locales/agq_CM/agq_CM.go

@@ -0,0 +1,26 @@
+package agq_CM
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type agq_CM struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'agq_CM' locale
+func New() locales.Translator {
+	return &agq_CM{
+		locale: "agq_CM",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *agq_CM) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *agq_CM) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+}

+ 36 - 0
resources/locales/ak/ak.go

@@ -0,0 +1,36 @@
+package ak
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ak struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ak' locale
+func New() locales.Translator {
+	return &ak{
+		locale: "ak",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ak) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ak) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n >= 0 && n <= 1 {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 0 - 5
resources/locales/ak/calendar.go

@@ -1,5 +0,0 @@
-package ak
-
-import "github.com/go-playground/universal-translator"
-
-var calendar = ut.Calendar{Formats: ut.CalendarFormats{DateEra: ut.DateEra{BC: ut.CalendarDateFormat{Full: "EEEE, y MMMM dd", Long: "y MMMM d", Medium: "y MMM d", Short: "yy/MM/dd"}, AD: ut.CalendarDateFormat{Full: "EEEE, y MMMM dd", Long: "y MMMM d", Medium: "y MMM d", Short: "yy/MM/dd"}}, Time: ut.CalendarDateFormat{Full: "h:mm:ss a zzzz", Long: "h:mm:ss a z", Medium: "h:mm:ss a", Short: "h:mm a"}, DateTime: ut.CalendarDateFormat{Full: "", Long: "", Medium: "", Short: ""}}, FormatNames: ut.CalendarFormatNames{Months: ut.CalendarMonthFormatNames{Abbreviated: ut.CalendarMonthFormatNameValue{12: "M-Ɔ", 2: "K-Ɔ", 6: "O-A", 7: "A-K", 11: "Ɔ-O", 8: "D-Ɔ", 9: "F-Ɛ", 10: "Ɔ-A", 1: "S-Ɔ", 3: "E-Ɔ", 4: "E-O", 5: "E-K"}, Narrow: ut.CalendarMonthFormatNameValue(nil), Short: ut.CalendarMonthFormatNameValue(nil), Wide: ut.CalendarMonthFormatNameValue{12: "Mumu-Ɔpɛnimba", 1: "Sanda-Ɔpɛpɔn", 3: "Ebɔw-Ɔbenem", 4: "Ebɔbira-Oforisuo", 6: "Obirade-Ayɛwohomumu", 7: "Ayɛwoho-Kitawonsa", 9: "Fankwa-Ɛbɔ", 10: "Ɔbɛsɛ-Ahinime", 2: "Kwakwar-Ɔgyefuo", 5: "Esusow Aketseaba-Kɔtɔnimba", 8: "Difuu-Ɔsandaa", 11: "Ɔberɛfɛw-Obubuo"}}, Days: ut.CalendarDayFormatNames{Abbreviated: ut.CalendarDayFormatNameValue{1: "Dwo", 2: "Ben", 3: "Wuk", 4: "Yaw", 5: "Fia", 6: "Mem", 0: "Kwe"}, Narrow: ut.CalendarDayFormatNameValue{2: "B", 3: "W", 4: "Y", 5: "F", 6: "M", 0: "K", 1: "D"}, Short: ut.CalendarDayFormatNameValue(nil), Wide: ut.CalendarDayFormatNameValue{3: "Wukuda", 4: "Yawda", 5: "Fida", 6: "Memeneda", 0: "Kwesida", 1: "Dwowda", 2: "Benada"}}, Periods: ut.CalendarPeriodFormatNames{Abbreviated: ut.CalendarPeriodFormatNameValue{"pm": "EW", "am": "AN"}, Narrow: ut.CalendarPeriodFormatNameValue(nil), Short: ut.CalendarPeriodFormatNameValue(nil), Wide: ut.CalendarPeriodFormatNameValue{"am": "AN", "pm": "EW"}}, Eras: ut.Eras{AD: ut.CalendarEraFormatNames{Full: "", Abbrev: "", Narrow: ""}, BC: ut.CalendarEraFormatNames{Full: "Ansa Kristo", Abbrev: "AK", Narrow: ""}}}}

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


+ 0 - 18
resources/locales/ak/main.go

@@ -1,18 +0,0 @@
-package ak
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ak",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ak/number.go

@@ -1,8 +0,0 @@
-package ak
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ".", Group: ",", Negative: "", Percent: "", PerMille: ""}
-	formats = ut.NumberFormats{Decimal: "", Currency: "¤#,##0.00", CurrencyAccounting: "¤#,##0.00", Percent: ""}
-)

+ 0 - 3
resources/locales/ak/plural.go

@@ -1,3 +0,0 @@
-package ak
-
-var pluralRule = "2B"

+ 36 - 0
resources/locales/ak_GH/ak_GH.go

@@ -0,0 +1,36 @@
+package ak_GH
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ak_GH struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ak_GH' locale
+func New() locales.Translator {
+	return &ak_GH{
+		locale: "ak_GH",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ak_GH) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ak_GH) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n >= 0 && n <= 1 {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 0 - 813
resources/locales/all.go

@@ -1,813 +0,0 @@
-package locales
-
-// Imports for all locales
-import (
-	// Locale "af" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/af"
-	// Locale "af_NA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/af_NA"
-	// Locale "agq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/agq"
-	// Locale "ak" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ak"
-	// Locale "am" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/am"
-	// Locale "ar" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar"
-	// Locale "ar_AE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_AE"
-	// Locale "ar_DJ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_DJ"
-	// Locale "ar_DZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_DZ"
-	// Locale "ar_EH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_EH"
-	// Locale "ar_ER" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_ER"
-	// Locale "ar_LB" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_LB"
-	// Locale "ar_LY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_LY"
-	// Locale "ar_MA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_MA"
-	// Locale "ar_MR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_MR"
-	// Locale "ar_SO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_SO"
-	// Locale "ar_SS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_SS"
-	// Locale "ar_TN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ar_TN"
-	// Locale "as" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/as"
-	// Locale "asa" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/asa"
-	// Locale "ast" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ast"
-	// Locale "az" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/az"
-	// Locale "az_Cyrl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/az_Cyrl"
-	// Locale "bas" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bas"
-	// Locale "be" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/be"
-	// Locale "bem" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bem"
-	// Locale "bez" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bez"
-	// Locale "bg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bg"
-	// Locale "bm" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bm"
-	// Locale "bn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bn"
-	// Locale "bo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bo"
-	// Locale "bo_IN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bo_IN"
-	// Locale "br" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/br"
-	// Locale "brx" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/brx"
-	// Locale "bs" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bs"
-	// Locale "bs_Cyrl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/bs_Cyrl"
-	// Locale "ca" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ca"
-	// Locale "ca_ES_VALENCIA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ca_ES_VALENCIA"
-	// Locale "ca_FR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ca_FR"
-	// Locale "ce" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ce"
-	// Locale "cgg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/cgg"
-	// Locale "chr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/chr"
-	// Locale "ckb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ckb"
-	// Locale "cs" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/cs"
-	// Locale "cu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/cu"
-	// Locale "cy" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/cy"
-	// Locale "da" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/da"
-	// Locale "dav" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dav"
-	// Locale "de" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/de"
-	// Locale "de_AT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/de_AT"
-	// Locale "de_CH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/de_CH"
-	// Locale "de_LI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/de_LI"
-	// Locale "de_LU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/de_LU"
-	// Locale "dje" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dje"
-	// Locale "dsb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dsb"
-	// Locale "dua" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dua"
-	// Locale "dyo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dyo"
-	// Locale "dz" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/dz"
-	// Locale "ebu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ebu"
-	// Locale "ee" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ee"
-	// Locale "el" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/el"
-	// Locale "en" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en"
-	// Locale "en_001" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_001"
-	// Locale "en_150" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_150"
-	// Locale "en_AG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_AG"
-	// Locale "en_AI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_AI"
-	// Locale "en_AT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_AT"
-	// Locale "en_AU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_AU"
-	// Locale "en_BB" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BB"
-	// Locale "en_BE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BE"
-	// Locale "en_BI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BI"
-	// Locale "en_BM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BM"
-	// Locale "en_BS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BS"
-	// Locale "en_BW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BW"
-	// Locale "en_BZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_BZ"
-	// Locale "en_CA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_CA"
-	// Locale "en_CC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_CC"
-	// Locale "en_CH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_CH"
-	// Locale "en_CK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_CK"
-	// Locale "en_CX" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_CX"
-	// Locale "en_DE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_DE"
-	// Locale "en_DK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_DK"
-	// Locale "en_DM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_DM"
-	// Locale "en_ER" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_ER"
-	// Locale "en_FI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_FI"
-	// Locale "en_FJ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_FJ"
-	// Locale "en_FK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_FK"
-	// Locale "en_GB" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GB"
-	// Locale "en_GD" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GD"
-	// Locale "en_GG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GG"
-	// Locale "en_GH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GH"
-	// Locale "en_GI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GI"
-	// Locale "en_GM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GM"
-	// Locale "en_GY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_GY"
-	// Locale "en_IM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_IM"
-	// Locale "en_IN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_IN"
-	// Locale "en_JE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_JE"
-	// Locale "en_JM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_JM"
-	// Locale "en_KE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_KE"
-	// Locale "en_KI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_KI"
-	// Locale "en_KN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_KN"
-	// Locale "en_KY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_KY"
-	// Locale "en_LC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_LC"
-	// Locale "en_LR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_LR"
-	// Locale "en_LS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_LS"
-	// Locale "en_MG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MG"
-	// Locale "en_MO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MO"
-	// Locale "en_MS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MS"
-	// Locale "en_MT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MT"
-	// Locale "en_MU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MU"
-	// Locale "en_MW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MW"
-	// Locale "en_MY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_MY"
-	// Locale "en_NA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NA"
-	// Locale "en_NF" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NF"
-	// Locale "en_NG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NG"
-	// Locale "en_NL" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NL"
-	// Locale "en_NR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NR"
-	// Locale "en_NU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NU"
-	// Locale "en_NZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_NZ"
-	// Locale "en_PG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_PG"
-	// Locale "en_PH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_PH"
-	// Locale "en_PK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_PK"
-	// Locale "en_PN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_PN"
-	// Locale "en_RW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_RW"
-	// Locale "en_SB" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SB"
-	// Locale "en_SC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SC"
-	// Locale "en_SE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SE"
-	// Locale "en_SG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SG"
-	// Locale "en_SH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SH"
-	// Locale "en_SI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SI"
-	// Locale "en_SL" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SL"
-	// Locale "en_SS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SS"
-	// Locale "en_SX" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SX"
-	// Locale "en_SZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_SZ"
-	// Locale "en_TK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_TK"
-	// Locale "en_TO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_TO"
-	// Locale "en_TT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_TT"
-	// Locale "en_TV" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_TV"
-	// Locale "en_TZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_TZ"
-	// Locale "en_UG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_UG"
-	// Locale "en_US_POSIX" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_US_POSIX"
-	// Locale "en_VC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_VC"
-	// Locale "en_VU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_VU"
-	// Locale "en_WS" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_WS"
-	// Locale "en_ZA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_ZA"
-	// Locale "en_ZM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/en_ZM"
-	// Locale "eo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/eo"
-	// Locale "es" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es"
-	// Locale "es_419" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_419"
-	// Locale "es_AR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_AR"
-	// Locale "es_BO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_BO"
-	// Locale "es_BR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_BR"
-	// Locale "es_CL" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_CL"
-	// Locale "es_CO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_CO"
-	// Locale "es_CR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_CR"
-	// Locale "es_CU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_CU"
-	// Locale "es_DO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_DO"
-	// Locale "es_EC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_EC"
-	// Locale "es_GQ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_GQ"
-	// Locale "es_GT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_GT"
-	// Locale "es_HN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_HN"
-	// Locale "es_MX" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_MX"
-	// Locale "es_NI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_NI"
-	// Locale "es_PA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_PA"
-	// Locale "es_PE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_PE"
-	// Locale "es_PH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_PH"
-	// Locale "es_PR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_PR"
-	// Locale "es_PY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_PY"
-	// Locale "es_SV" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_SV"
-	// Locale "es_US" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_US"
-	// Locale "es_UY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_UY"
-	// Locale "es_VE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/es_VE"
-	// Locale "et" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/et"
-	// Locale "eu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/eu"
-	// Locale "ewo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ewo"
-	// Locale "fa" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fa"
-	// Locale "fa_AF" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fa_AF"
-	// Locale "ff" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ff"
-	// Locale "ff_GN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ff_GN"
-	// Locale "ff_MR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ff_MR"
-	// Locale "fi" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fi"
-	// Locale "fil" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fil"
-	// Locale "fo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fo"
-	// Locale "fo_DK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fo_DK"
-	// Locale "fr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr"
-	// Locale "fr_BE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_BE"
-	// Locale "fr_BI" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_BI"
-	// Locale "fr_CA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_CA"
-	// Locale "fr_CD" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_CD"
-	// Locale "fr_CH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_CH"
-	// Locale "fr_DJ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_DJ"
-	// Locale "fr_DZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_DZ"
-	// Locale "fr_GN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_GN"
-	// Locale "fr_HT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_HT"
-	// Locale "fr_KM" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_KM"
-	// Locale "fr_LU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_LU"
-	// Locale "fr_MA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_MA"
-	// Locale "fr_MG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_MG"
-	// Locale "fr_MR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_MR"
-	// Locale "fr_MU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_MU"
-	// Locale "fr_RW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_RW"
-	// Locale "fr_SC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_SC"
-	// Locale "fr_SY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_SY"
-	// Locale "fr_TN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_TN"
-	// Locale "fr_VU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fr_VU"
-	// Locale "fur" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fur"
-	// Locale "fy" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/fy"
-	// Locale "ga" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ga"
-	// Locale "gd" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/gd"
-	// Locale "gl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/gl"
-	// Locale "gsw" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/gsw"
-	// Locale "gu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/gu"
-	// Locale "guz" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/guz"
-	// Locale "gv" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/gv"
-	// Locale "ha" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ha"
-	// Locale "ha_GH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ha_GH"
-	// Locale "haw" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/haw"
-	// Locale "he" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/he"
-	// Locale "hi" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hi"
-	// Locale "hr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hr"
-	// Locale "hr_BA" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hr_BA"
-	// Locale "hsb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hsb"
-	// Locale "hu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hu"
-	// Locale "hy" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/hy"
-	// Locale "id" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/id"
-	// Locale "ig" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ig"
-	// Locale "ii" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ii"
-	// Locale "is" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/is"
-	// Locale "it" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/it"
-	// Locale "it_CH" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/it_CH"
-	// Locale "ja" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ja"
-	// Locale "jgo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/jgo"
-	// Locale "jmc" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/jmc"
-	// Locale "ka" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ka"
-	// Locale "kab" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kab"
-	// Locale "kam" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kam"
-	// Locale "kde" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kde"
-	// Locale "kea" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kea"
-	// Locale "khq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/khq"
-	// Locale "ki" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ki"
-	// Locale "kk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kk"
-	// Locale "kkj" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kkj"
-	// Locale "kl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kl"
-	// Locale "kln" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kln"
-	// Locale "km" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/km"
-	// Locale "kn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kn"
-	// Locale "ko" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ko"
-	// Locale "kok" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kok"
-	// Locale "ks" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ks"
-	// Locale "ksb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ksb"
-	// Locale "ksf" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ksf"
-	// Locale "ksh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ksh"
-	// Locale "kw" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/kw"
-	// Locale "ky" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ky"
-	// Locale "lag" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lag"
-	// Locale "lb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lb"
-	// Locale "lg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lg"
-	// Locale "lkt" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lkt"
-	// Locale "ln" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ln"
-	// Locale "ln_AO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ln_AO"
-	// Locale "lo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lo"
-	// Locale "lrc" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lrc"
-	// Locale "lt" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lt"
-	// Locale "lu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lu"
-	// Locale "luo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/luo"
-	// Locale "luy" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/luy"
-	// Locale "lv" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/lv"
-	// Locale "mas" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mas"
-	// Locale "mas_TZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mas_TZ"
-	// Locale "mer" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mer"
-	// Locale "mfe" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mfe"
-	// Locale "mg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mg"
-	// Locale "mgh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mgh"
-	// Locale "mgo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mgo"
-	// Locale "mk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mk"
-	// Locale "ml" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ml"
-	// Locale "mn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mn"
-	// Locale "mr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mr"
-	// Locale "ms" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ms"
-	// Locale "ms_BN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ms_BN"
-	// Locale "ms_SG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ms_SG"
-	// Locale "mt" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mt"
-	// Locale "mua" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mua"
-	// Locale "my" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/my"
-	// Locale "mzn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/mzn"
-	// Locale "naq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/naq"
-	// Locale "nb" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nb"
-	// Locale "nd" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nd"
-	// Locale "ne" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ne"
-	// Locale "nl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl"
-	// Locale "nl_AW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_AW"
-	// Locale "nl_BE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_BE"
-	// Locale "nl_BQ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_BQ"
-	// Locale "nl_CW" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_CW"
-	// Locale "nl_SR" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_SR"
-	// Locale "nl_SX" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nl_SX"
-	// Locale "nmg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nmg"
-	// Locale "nn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nn"
-	// Locale "nnh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nnh"
-	// Locale "nus" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nus"
-	// Locale "nyn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/nyn"
-	// Locale "om" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/om"
-	// Locale "om_KE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/om_KE"
-	// Locale "or" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/or"
-	// Locale "os" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/os"
-	// Locale "os_RU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/os_RU"
-	// Locale "pa" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pa"
-	// Locale "pa_Arab" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pa_Arab"
-	// Locale "pl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pl"
-	// Locale "prg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/prg"
-	// Locale "ps" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ps"
-	// Locale "pt" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt"
-	// Locale "pt_AO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_AO"
-	// Locale "pt_CV" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_CV"
-	// Locale "pt_LU" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_LU"
-	// Locale "pt_MO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_MO"
-	// Locale "pt_MZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_MZ"
-	// Locale "pt_PT" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_PT"
-	// Locale "pt_ST" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/pt_ST"
-	// Locale "qu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/qu"
-	// Locale "qu_BO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/qu_BO"
-	// Locale "qu_EC" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/qu_EC"
-	// Locale "rm" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/rm"
-	// Locale "rn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/rn"
-	// Locale "ro" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ro"
-	// Locale "ro_MD" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ro_MD"
-	// Locale "rof" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/rof"
-	// Locale "root" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/root"
-	// Locale "ru" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ru"
-	// Locale "ru_BY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ru_BY"
-	// Locale "ru_KG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ru_KG"
-	// Locale "ru_KZ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ru_KZ"
-	// Locale "ru_MD" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ru_MD"
-	// Locale "rw" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/rw"
-	// Locale "rwk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/rwk"
-	// Locale "sah" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sah"
-	// Locale "saq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/saq"
-	// Locale "sbp" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sbp"
-	// Locale "se" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/se"
-	// Locale "se_SE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/se_SE"
-	// Locale "seh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/seh"
-	// Locale "ses" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ses"
-	// Locale "sg" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sg"
-	// Locale "shi" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/shi"
-	// Locale "shi_Latn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/shi_Latn"
-	// Locale "si" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/si"
-	// Locale "sk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sk"
-	// Locale "sl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sl"
-	// Locale "smn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/smn"
-	// Locale "sn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sn"
-	// Locale "so" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/so"
-	// Locale "so_DJ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/so_DJ"
-	// Locale "so_ET" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/so_ET"
-	// Locale "so_KE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/so_KE"
-	// Locale "sq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sq"
-	// Locale "sq_MK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sq_MK"
-	// Locale "sr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sr"
-	// Locale "sr_Latn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sr_Latn"
-	// Locale "sv" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sv"
-	// Locale "sw" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sw"
-	// Locale "sw_CD" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sw_CD"
-	// Locale "sw_UG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/sw_UG"
-	// Locale "ta" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ta"
-	// Locale "ta_LK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ta_LK"
-	// Locale "ta_MY" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ta_MY"
-	// Locale "ta_SG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ta_SG"
-	// Locale "te" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/te"
-	// Locale "teo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/teo"
-	// Locale "teo_KE" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/teo_KE"
-	// Locale "th" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/th"
-	// Locale "ti" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ti"
-	// Locale "ti_ER" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ti_ER"
-	// Locale "tk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/tk"
-	// Locale "to" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/to"
-	// Locale "tr" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/tr"
-	// Locale "twq" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/twq"
-	// Locale "tzm" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/tzm"
-	// Locale "ug" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ug"
-	// Locale "uk" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/uk"
-	// Locale "ur" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ur"
-	// Locale "ur_IN" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/ur_IN"
-	// Locale "uz" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/uz"
-	// Locale "uz_Arab" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/uz_Arab"
-	// Locale "uz_Cyrl" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/uz_Cyrl"
-	// Locale "vai" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/vai"
-	// Locale "vai_Latn" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/vai_Latn"
-	// Locale "vi" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/vi"
-	// Locale "vun" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/vun"
-	// Locale "wae" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/wae"
-	// Locale "xog" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/xog"
-	// Locale "yav" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/yav"
-	// Locale "yi" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/yi"
-	// Locale "yo" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/yo"
-	// Locale "yo_BJ" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/yo_BJ"
-	// Locale "yue" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/yue"
-	// Locale "zgh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zgh"
-	// Locale "zh" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh"
-	// Locale "zh_Hans_HK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hans_HK"
-	// Locale "zh_Hans_MO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hans_MO"
-	// Locale "zh_Hans_SG" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hans_SG"
-	// Locale "zh_Hant" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hant"
-	// Locale "zh_Hant_HK" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hant_HK"
-	// Locale "zh_Hant_MO" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zh_Hant_MO"
-	// Locale "zu" import that automatically registers itslef with the universal-translator package
-	_ "github.com/go-playground/universal-translator/resources/locales/zu"
-)

+ 41 - 0
resources/locales/am/am.go

@@ -0,0 +1,41 @@
+package am
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type am struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'am' locale
+func New() locales.Translator {
+	return &am{
+		locale: "am",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *am) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *am) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	i, err := locales.I(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if (i == 0) || (n == 1) {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


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


+ 0 - 18
resources/locales/am/main.go

@@ -1,18 +0,0 @@
-package am
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "am",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/am/number.go

@@ -1,8 +0,0 @@
-package am
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ".", Group: ",", Negative: "-", Percent: "%", PerMille: "‰"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤#,##0.00", CurrencyAccounting: "¤#,##0.00;(¤#,##0.00)", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/am/plural.go

@@ -1,3 +0,0 @@
-package am
-
-var pluralRule = "2B"

+ 41 - 0
resources/locales/am_ET/am_ET.go

@@ -0,0 +1,41 @@
+package am_ET
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type am_ET struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'am_ET' locale
+func New() locales.Translator {
+	return &am_ET{
+		locale: "am_ET",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *am_ET) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *am_ET) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	i, err := locales.I(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if (i == 0) || (n == 1) {
+		return locales.PluralRuleOne, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar/ar.go

@@ -0,0 +1,44 @@
+package ar
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar' locale
+func New() locales.Translator {
+	return &ar{
+		locale: "ar",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


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


+ 0 - 18
resources/locales/ar/main.go

@@ -1,18 +0,0 @@
-package ar
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar/number.go

@@ -1,8 +0,0 @@
-package ar
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: "٫", Group: "٬", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar/plural.go

@@ -1,3 +0,0 @@
-package ar
-
-var pluralRule = "6A"

+ 44 - 0
resources/locales/ar_001/ar_001.go

@@ -0,0 +1,44 @@
+package ar_001
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_001 struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_001' locale
+func New() locales.Translator {
+	return &ar_001{
+		locale: "ar_001",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_001) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_001) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_AE/ar_AE.go

@@ -0,0 +1,44 @@
+package ar_AE
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_AE struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_AE' locale
+func New() locales.Translator {
+	return &ar_AE{
+		locale: "ar_AE",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_AE) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_AE) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

文件差异内容过多而无法显示
+ 0 - 4
resources/locales/ar_AE/calendar.go


+ 0 - 5
resources/locales/ar_AE/currency.go

@@ -1,5 +0,0 @@
-package ar_AE
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{"BND": ut.Currency{Currency: "BND", DisplayName: "دولار بروناي", Symbol: "$"}}

+ 0 - 18
resources/locales/ar_AE/main.go

@@ -1,18 +0,0 @@
-package ar_AE
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_AE",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_AE/number.go

@@ -1,8 +0,0 @@
-package ar_AE
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: "٫", Group: "٬", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_AE/plural.go

@@ -1,3 +0,0 @@
-package ar_AE
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_BH/ar_BH.go

@@ -0,0 +1,44 @@
+package ar_BH
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_BH struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_BH' locale
+func New() locales.Translator {
+	return &ar_BH{
+		locale: "ar_BH",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_BH) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_BH) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_DJ/ar_DJ.go

@@ -0,0 +1,44 @@
+package ar_DJ
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_DJ struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_DJ' locale
+func New() locales.Translator {
+	return &ar_DJ{
+		locale: "ar_DJ",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_DJ) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_DJ) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

文件差异内容过多而无法显示
+ 0 - 4
resources/locales/ar_DJ/calendar.go


+ 0 - 5
resources/locales/ar_DJ/currency.go

@@ -1,5 +0,0 @@
-package ar_DJ
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{"DJF": ut.Currency{Currency: "DJF", DisplayName: "فرنك جيبوتي", Symbol: "Fdj"}}

+ 0 - 18
resources/locales/ar_DJ/main.go

@@ -1,18 +0,0 @@
-package ar_DJ
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_DJ",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_DJ/number.go

@@ -1,8 +0,0 @@
-package ar_DJ
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: "٫", Group: "٬", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_DJ/plural.go

@@ -1,3 +0,0 @@
-package ar_DJ
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_DZ/ar_DZ.go

@@ -0,0 +1,44 @@
+package ar_DZ
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_DZ struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_DZ' locale
+func New() locales.Translator {
+	return &ar_DZ{
+		locale: "ar_DZ",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_DZ) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_DZ) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/ar_DZ/currency.go

@@ -1,5 +0,0 @@
-package ar_DZ
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{}

+ 0 - 18
resources/locales/ar_DZ/main.go

@@ -1,18 +0,0 @@
-package ar_DZ
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_DZ",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_DZ/number.go

@@ -1,8 +0,0 @@
-package ar_DZ
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: ".", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_DZ/plural.go

@@ -1,3 +0,0 @@
-package ar_DZ
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_EG/ar_EG.go

@@ -0,0 +1,44 @@
+package ar_EG
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_EG struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_EG' locale
+func New() locales.Translator {
+	return &ar_EG{
+		locale: "ar_EG",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_EG) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_EG) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_EH/ar_EH.go

@@ -0,0 +1,44 @@
+package ar_EH
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_EH struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_EH' locale
+func New() locales.Translator {
+	return &ar_EH{
+		locale: "ar_EH",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_EH) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_EH) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/ar_EH/currency.go

@@ -1,5 +0,0 @@
-package ar_EH
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{}

+ 0 - 18
resources/locales/ar_EH/main.go

@@ -1,18 +0,0 @@
-package ar_EH
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_EH",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_EH/number.go

@@ -1,8 +0,0 @@
-package ar_EH
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: "٫", Group: "٬", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_EH/plural.go

@@ -1,3 +0,0 @@
-package ar_EH
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_ER/ar_ER.go

@@ -0,0 +1,44 @@
+package ar_ER
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_ER struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_ER' locale
+func New() locales.Translator {
+	return &ar_ER{
+		locale: "ar_ER",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_ER) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_ER) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

文件差异内容过多而无法显示
+ 0 - 4
resources/locales/ar_ER/calendar.go


+ 0 - 5
resources/locales/ar_ER/currency.go

@@ -1,5 +0,0 @@
-package ar_ER
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{"ERN": ut.Currency{Currency: "ERN", DisplayName: "ناكفا أريتري", Symbol: "Nfk"}}

+ 0 - 18
resources/locales/ar_ER/main.go

@@ -1,18 +0,0 @@
-package ar_ER
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_ER",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_ER/number.go

@@ -1,8 +0,0 @@
-package ar_ER
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: "٫", Group: "٬", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_ER/plural.go

@@ -1,3 +0,0 @@
-package ar_ER
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_IL/ar_IL.go

@@ -0,0 +1,44 @@
+package ar_IL
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_IL struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_IL' locale
+func New() locales.Translator {
+	return &ar_IL{
+		locale: "ar_IL",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_IL) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_IL) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_IQ/ar_IQ.go

@@ -0,0 +1,44 @@
+package ar_IQ
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_IQ struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_IQ' locale
+func New() locales.Translator {
+	return &ar_IQ{
+		locale: "ar_IQ",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_IQ) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_IQ) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_JO/ar_JO.go

@@ -0,0 +1,44 @@
+package ar_JO
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_JO struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_JO' locale
+func New() locales.Translator {
+	return &ar_JO{
+		locale: "ar_JO",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_JO) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_JO) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_KM/ar_KM.go

@@ -0,0 +1,44 @@
+package ar_KM
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_KM struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_KM' locale
+func New() locales.Translator {
+	return &ar_KM{
+		locale: "ar_KM",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_KM) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_KM) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_KW/ar_KW.go

@@ -0,0 +1,44 @@
+package ar_KW
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_KW struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_KW' locale
+func New() locales.Translator {
+	return &ar_KW{
+		locale: "ar_KW",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_KW) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_KW) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

+ 44 - 0
resources/locales/ar_LB/ar_LB.go

@@ -0,0 +1,44 @@
+package ar_LB
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_LB struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_LB' locale
+func New() locales.Translator {
+	return &ar_LB{
+		locale: "ar_LB",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_LB) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_LB) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/ar_LB/currency.go

@@ -1,5 +0,0 @@
-package ar_LB
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{"SDG": ut.Currency{Currency: "SDG", DisplayName: "جنيه سوداني", Symbol: "SDG"}}

+ 0 - 18
resources/locales/ar_LB/main.go

@@ -1,18 +0,0 @@
-package ar_LB
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_LB",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_LB/number.go

@@ -1,8 +0,0 @@
-package ar_LB
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: ".", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_LB/plural.go

@@ -1,3 +0,0 @@
-package ar_LB
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_LY/ar_LY.go

@@ -0,0 +1,44 @@
+package ar_LY
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_LY struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_LY' locale
+func New() locales.Translator {
+	return &ar_LY{
+		locale: "ar_LY",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_LY) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_LY) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/ar_LY/currency.go

@@ -1,5 +0,0 @@
-package ar_LY
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{}

+ 0 - 18
resources/locales/ar_LY/main.go

@@ -1,18 +0,0 @@
-package ar_LY
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_LY",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_LY/number.go

@@ -1,8 +0,0 @@
-package ar_LY
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: ".", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_LY/plural.go

@@ -1,3 +0,0 @@
-package ar_LY
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_MA/ar_MA.go

@@ -0,0 +1,44 @@
+package ar_MA
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_MA struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_MA' locale
+func New() locales.Translator {
+	return &ar_MA{
+		locale: "ar_MA",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_MA) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_MA) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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


+ 0 - 5
resources/locales/ar_MA/currency.go

@@ -1,5 +0,0 @@
-package ar_MA
-
-import "github.com/go-playground/universal-translator"
-
-var currencies = ut.CurrencyFormatValue{}

+ 0 - 18
resources/locales/ar_MA/main.go

@@ -1,18 +0,0 @@
-package ar_MA
-
-import "github.com/go-playground/universal-translator"
-
-var locale = &ut.Locale{
-	Locale: "ar_MA",
-	Number: ut.Number{
-		Symbols:    symbols,
-		Formats:    formats,
-		Currencies: currencies,
-	},
-	Calendar:   calendar,
-	PluralRule: pluralRule,
-}
-
-func init() {
-	ut.RegisterLocale(locale)
-}

+ 0 - 8
resources/locales/ar_MA/number.go

@@ -1,8 +0,0 @@
-package ar_MA
-
-import "github.com/go-playground/universal-translator"
-
-var (
-	symbols = ut.Symbols{Decimal: ",", Group: ".", Negative: "\u200f-", Percent: "٪", PerMille: "؉"}
-	formats = ut.NumberFormats{Decimal: "#,##0.###", Currency: "¤\u00a0#,##0.00", CurrencyAccounting: "¤\u00a0#,##0.00", Percent: "#,##0%"}
-)

+ 0 - 3
resources/locales/ar_MA/plural.go

@@ -1,3 +0,0 @@
-package ar_MA
-
-var pluralRule = "1"

+ 44 - 0
resources/locales/ar_MR/ar_MR.go

@@ -0,0 +1,44 @@
+package ar_MR
+
+import (
+	"github.com/go-playground/universal-translator/resources/locales"
+)
+
+type ar_MR struct {
+	locale string
+}
+
+// New returns a new instance of translator for the 'ar_MR' locale
+func New() locales.Translator {
+	return &ar_MR{
+		locale: "ar_MR",
+	}
+}
+
+// Locale returns the current translators string locale
+func (l *ar_MR) Locale() string {
+	return l.locale
+}
+
+// CardinalPluralRule returns the PluralRule given 'num'
+func (l *ar_MR) CardinalPluralRule(num string) (locales.PluralRule, error) {
+
+	n, err := locales.N(num)
+	if err != nil {
+		return locales.PluralRuleUnknown, &locales.ErrBadNumberValue{NumberValue: num, InnerError: err}
+	}
+
+	if n == 0 {
+		return locales.PluralRuleZero, nil
+	} else if n == 1 {
+		return locales.PluralRuleOne, nil
+	} else if n == 2 {
+		return locales.PluralRuleTwo, nil
+	} else if n%100 >= 3 && n%100 <= 10 {
+		return locales.PluralRuleFew, nil
+	} else if n%100 >= 11 && n%100 <= 99 {
+		return locales.PluralRuleMany, nil
+	}
+
+	return locales.PluralRuleOther, nil
+}

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