| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700 |
- package main
- import (
- "fmt"
- "log"
- "os"
- "os/exec"
- "sort"
- "strings"
- "github.com/go-playground/universal-translator/resources/locales"
- "golang.org/x/text/unicode/cldr"
- "text/template"
- )
- // numbers:
- // symbols:
- // decimal: .
- // group: ','
- // negative: '-'
- // percent: '%'
- // permille: "\u2030"
- // formats:
- // decimal: '#,##0.###'
- // currency: "\xA4#,##0.00;(\xA4#,##0.00)"
- // percent: '#,##0%'
- // currencies:
- // JPY:
- // symbol: "\xA5"
- // USD:
- // symbol: $
- // type pluralInfo struct {
- // path string
- // locale string
- // plural string
- // }
- // type translator struct {
- // locale string
- // }
- //
- const (
- locDir = "../../resources/locales/%s"
- locFilename = locDir + "/%s.go"
- )
- var (
- prVarFuncs = map[string]string{
- "n": "n := math.Abs(num)\n",
- "i": "i := int64(n)\n",
- // "v": "v := ...", // inherently available as argument
- "w": "w := locales.W(n, v)\n",
- "f": "f := locales.F(n, v)\n",
- "t": "t := locales.T(n, v)\n",
- }
- translators = make(map[string]*translator)
- baseTranslators = make(map[string]*translator)
- tmpl *template.Template
- )
- type translator struct {
- Locale string
- BaseLocale string
- Plurals string
- CardinalFunc string
- Decimal string
- Group string
- Minus string
- Percent string
- PerMille string
- Symbol string
- // Currency string
- // CurrencyAbbrev string
- // decimal string
- // group string
- // minus string
- // percent string
- // perMille string
- // currency string
- // currencyName string
- // currencyAbbrev string
- }
- func main() {
- var err error
- // load template
- tmpl, err = template.ParseGlob("*.tmpl")
- if err != nil {
- log.Fatal(err)
- }
- // load CLDR recourses
- var decoder cldr.Decoder
- cldr, err := decoder.DecodePath("data/core")
- if err != nil {
- panic(err)
- }
- preProcess(cldr)
- postProcess(cldr)
- for _, trans := range translators {
- fmt.Println("Writing Data:", trans.Locale)
- if err = os.MkdirAll(fmt.Sprintf(locDir, trans.Locale), 0777); err != nil {
- log.Fatal(err)
- }
- filename := fmt.Sprintf(locFilename, trans.Locale, trans.Locale)
- output, err := os.Create(filename)
- if err != nil {
- log.Fatal(err)
- }
- defer output.Close()
- if err := tmpl.ExecuteTemplate(output, "translator", trans); err != nil {
- log.Fatal(err)
- }
- output.Close()
- // after file written run gofmt on file to ensure best formatting
- cmd := exec.Command("goimports", "-w", filename)
- if err = cmd.Run(); err != nil {
- log.Panic(err)
- }
- }
- }
- func postProcess(cldr *cldr.CLDR) {
- var base *translator
- var found bool
- for _, trans := range translators {
- fmt.Println("Post Processing:", trans.Locale)
- // plural rules
- trans.CardinalFunc, trans.Plurals = parseCardinalPluralRuleFunc(cldr, trans.BaseLocale)
- // ignore base locales
- if trans.BaseLocale == trans.Locale {
- found = false
- } else {
- base, found = baseTranslators[trans.BaseLocale]
- }
- // Numbers
- if len(trans.Decimal) == 0 {
- if found {
- trans.Decimal = fmt.Sprintf("%#v", []byte(base.Decimal))
- }
- if len(trans.Decimal) == 0 {
- trans.Decimal = "[]byte{}"
- }
- }
- if len(trans.Group) == 0 {
- if found {
- trans.Group = fmt.Sprintf("%#v", []byte(base.Group))
- }
- if len(trans.Group) == 0 {
- trans.Group = "[]byte{}"
- }
- }
- if len(trans.Minus) == 0 {
- if found {
- trans.Minus = fmt.Sprintf("%#v", []byte(base.Minus))
- }
- if len(trans.Minus) == 0 {
- trans.Minus = "[]byte{}"
- }
- }
- if len(trans.Percent) == 0 {
- if found {
- trans.Percent = fmt.Sprintf("%#v", []byte(base.Percent))
- }
- if len(trans.Percent) == 0 {
- trans.Percent = "[]byte{}"
- }
- }
- if len(trans.PerMille) == 0 {
- if found {
- trans.PerMille = fmt.Sprintf("%#v", []byte(base.PerMille))
- }
- if len(trans.PerMille) == 0 {
- trans.PerMille = "[]byte{}"
- }
- }
- // Currency
- if len(trans.Symbol) == 0 {
- if found {
- trans.Symbol = fmt.Sprintf("%#v", []byte(base.Symbol))
- }
- if len(trans.Symbol) == 0 {
- trans.Symbol = "[]byte{}"
- }
- }
- // if len(trans.Currency) == 0 {
- // if found {
- // trans.Currency = fmt.Sprintf("%#v", []byte(base.Currency))
- // }
- // if len(trans.Currency) == 0 {
- // trans.Currency = "[]byte{}"
- // }
- // }
- }
- }
- // preprocesses maps, array etc... just requires multiple passes no choice....
- func preProcess(cldr *cldr.CLDR) {
- for _, l := range cldr.Locales() {
- fmt.Println("Pre Processing:", l)
- split := strings.SplitN(l, "_", 2)
- baseLocale := split[0]
- trans := &translator{
- Locale: l,
- BaseLocale: baseLocale,
- }
- // if is a base locale
- if len(split) == 1 {
- baseTranslators[baseLocale] = trans
- }
- translators[l] = trans
- // get number, currency and datetime symbols
- // number values
- ldml := cldr.RawLDML(l)
- // some just have no data...
- if ldml.Numbers != nil && len(ldml.Numbers.Symbols) > 0 {
- symbol := ldml.Numbers.Symbols[0]
- if len(symbol.Decimal) > 0 {
- trans.Decimal = fmt.Sprintf("%#v", []byte(symbol.Decimal[0].Data()))
- }
- if len(symbol.Group) > 0 {
- trans.Group = fmt.Sprintf("%#v", []byte(symbol.Group[0].Data()))
- }
- if len(symbol.MinusSign) > 0 {
- trans.Minus = fmt.Sprintf("%#v", []byte(symbol.MinusSign[0].Data()))
- }
- if len(symbol.PercentSign) > 0 {
- trans.Percent = fmt.Sprintf("%#v", []byte(symbol.PercentSign[0].Data()))
- }
- if len(symbol.PerMille) > 0 {
- trans.PerMille = fmt.Sprintf("%#v", []byte(symbol.PerMille[0].Data()))
- }
- // if ldml.Numbers.Currencies != nil {
- // for _, currency := range ldml.Numbers.Currencies.Currency {
- // if len(currency.Symbol) == 0 {
- // continue
- // }
- // trans.Symbol = currency.Symbol[0].Data()
- // if len(trans.Currency) == 0 {
- // continue
- // }
- // trans.Currency = fmt.Sprintf("%#v", []byte(currency.Type))
- // // if len(currency.DisplayName) > 0 {
- // // trans.CurrencyName = fmt.Sprintf("%#v", []byte(currency.DisplayName[0].Data()))
- // // } else {
- // // trans.CurrencyName = "[]byte{}"
- // // }
- // // 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
- // }
- // }
- // var decimalFormat, currencyFormat, currencyAccountingFormat, percentageFormat string
- // if len(ldml.Numbers.DecimalFormats) > 0 && len(ldml.Numbers.DecimalFormats[0].DecimalFormatLength) > 0 {
- // decimalFormat = ldml.Numbers.DecimalFormats[0].DecimalFormatLength[0].DecimalFormat[0].Pattern[0].Data()
- // }
- // if len(ldml.Numbers.CurrencyFormats) > 0 && len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength) > 0 {
- // currencyFormat = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[0].Pattern[0].Data()
- // currencyAccountingFormat = currencyFormat
- // if len(ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat) > 1 {
- // currencyAccountingFormat = ldml.Numbers.CurrencyFormats[0].CurrencyFormatLength[0].CurrencyFormat[1].Pattern[0].Data()
- // }
- // }
- // if len(ldml.Numbers.PercentFormats) > 0 && len(ldml.Numbers.PercentFormats[0].PercentFormatLength) > 0 {
- // percentageFormat = ldml.Numbers.PercentFormats[0].PercentFormatLength[0].PercentFormat[0].Pattern[0].Data()
- // }
- // // parse Number values
- // parseNumbers(decimal, group, minus, percent, permille, decimalFormat, currencyFormat, currencyAccountingFormat, percentageFormat)
- // end number values
- }
- }
- }
- // func parseNumbers(decimal, group, minus, percent, permille, decimalFormat, currencyFormat, currencyAccountingFormat, percentageFormat string) {
- // if includeDecimalDigits {
- // nfMutex.RLock()
- // if format, exists := numberFormats[pattern]; exists {
- // nfMutex.RUnlock()
- // return format
- // }
- // nfMutex.RUnlock()
- // } else {
- // nfndMutex.RLock()
- // if format, exists := numberFormatsNoDecimals[pattern]; exists {
- // nfndMutex.RUnlock()
- // return format
- // }
- // nfndMutex.RUnlock()
- // }
- // format := new(numberFormat)
- // patterns := strings.Split(pattern, ";")
- // matches := prefixSuffixRegex.FindAllStringSubmatch(patterns[0], -1)
- // if len(matches) > 0 {
- // if len(matches[0]) > 1 {
- // format.positivePrefix = matches[0][1]
- // }
- // if len(matches[0]) > 2 {
- // format.positiveSuffix = matches[0][2]
- // }
- // }
- // // default values for negative prefix & suffix
- // format.negativePrefix = string(n.Symbols.Negative) + string(format.positivePrefix)
- // format.negativeSuffix = format.positiveSuffix
- // // see if they are in the pattern
- // if len(patterns) > 1 {
- // matches = prefixSuffixRegex.FindAllStringSubmatch(patterns[1], -1)
- // if len(matches) > 0 {
- // if len(matches[0]) > 1 {
- // format.negativePrefix = matches[0][1]
- // }
- // if len(matches[0]) > 2 {
- // format.negativeSuffix = matches[0][2]
- // }
- // }
- // }
- // pat := patterns[0]
- // if strings.Index(pat, "%") != -1 {
- // format.multiplier = 100
- // } else if strings.Index(pat, "‰") != -1 {
- // format.multiplier = 1000
- // } else {
- // format.multiplier = 1
- // }
- // pos := strings.Index(pat, ".")
- // if pos != -1 {
- // pos2 := strings.LastIndex(pat, "0")
- // if pos2 > pos {
- // format.minDecimalDigits = pos2 - pos
- // }
- // pos3 := strings.LastIndex(pat, "#")
- // if pos3 >= pos2 {
- // format.maxDecimalDigits = pos3 - pos
- // } else {
- // format.maxDecimalDigits = format.minDecimalDigits
- // }
- // pat = pat[0:pos]
- // }
- // p := strings.Replace(pat, ",", "", -1)
- // pos = strings.Index(p, "0")
- // if pos != -1 {
- // format.minIntegerDigits = strings.LastIndex(p, "0") - pos + 1
- // }
- // p = strings.Replace(pat, "#", "0", -1)
- // pos = strings.LastIndex(pat, ",")
- // if pos != -1 {
- // format.groupSizeFinal = strings.LastIndex(p, "0") - pos
- // pos2 := strings.LastIndex(p[0:pos], ",")
- // if pos2 != -1 {
- // format.groupSizeMain = pos - pos2 - 1
- // } else {
- // format.groupSizeMain = format.groupSizeFinal
- // }
- // }
- // if includeDecimalDigits {
- // nfMutex.Lock()
- // numberFormats[pattern] = format
- // nfMutex.Unlock()
- // return format
- // }
- // format.maxDecimalDigits = 0
- // format.minDecimalDigits = 0
- // nfndMutex.Lock()
- // numberFormatsNoDecimals[pattern] = format
- // nfndMutex.Unlock()
- // return format
- // }
- type sortRank struct {
- Rank uint8
- Value string
- }
- type ByRank []sortRank
- func (a ByRank) Len() int { return len(a) }
- func (a ByRank) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
- func (a ByRank) Less(i, j int) bool { return a[i].Rank < a[j].Rank }
- // 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, plurals string) {
- var prCardinal *struct {
- cldr.Common
- Locales string "xml:\"locales,attr\""
- PluralRule []*struct {
- cldr.Common
- Count string "xml:\"count,attr\""
- } "xml:\"pluralRule\""
- }
- var pluralArr []locales.PluralRule
- for _, p := range current.Supplemental().Plurals {
- for _, pr := range p.PluralRules {
- locs := strings.Split(pr.Locales, " ")
- for _, loc := range locs {
- if loc == baseLocale {
- prCardinal = pr
- }
- }
- }
- }
- // no plural rules for locale
- if prCardinal == nil {
- plurals = "nil"
- results = "return locales.PluralRuleUnknown"
- return
- }
- vals := make(map[string]struct{})
- first := true
- // pre parse for variables
- for _, rule := range prCardinal.PluralRule {
- ps1 := pluralStringToString(rule.Count)
- psI := pluralStringToInt(rule.Count)
- pluralArr = append(pluralArr, psI)
- data := strings.Replace(strings.Replace(strings.Replace(strings.TrimSpace(strings.SplitN(rule.Common.Data(), "@", 2)[0]), " = ", " == ", -1), " or ", " || ", -1), " and ", " && ", -1)
- if len(data) == 0 {
- if len(prCardinal.PluralRule) == 1 {
- results = "return locales." + ps1
- } else {
- results += "\n\nreturn locales." + ps1
- // results += "else {\nreturn locales." + locales.PluralStringToString(rule.Count) + ", nil\n}"
- }
- continue
- }
- // // All need n, so always add
- // if strings.Contains(data, "n") {
- // vals[prVarFuncs["n"]] = struct{}{}
- // }
- if strings.Contains(data, "i") {
- vals[prVarFuncs["i"]] = struct{}{}
- }
- // v is inherently avaialable as an argument
- // if strings.Contains(data, "v") {
- // vals[prVarFuncs["v"]] = struct{}{}
- // }
- if strings.Contains(data, "w") {
- vals[prVarFuncs["w"]] = struct{}{}
- }
- if strings.Contains(data, "f") {
- vals[prVarFuncs["f"]] = struct{}{}
- }
- if strings.Contains(data, "t") {
- vals[prVarFuncs["t"]] = struct{}{}
- }
- if first {
- results += "if "
- first = false
- } else {
- results += "else if "
- }
- stmt := ""
- // real work here
- //
- // split by 'or' then by 'and' allowing to better
- // determine bracketing for formula
- ors := strings.Split(data, "||")
- for _, or := range ors {
- stmt += "("
- ands := strings.Split(strings.TrimSpace(or), "&&")
- for _, and := range ands {
- inArg := false
- pre := ""
- lft := ""
- preOperator := ""
- args := strings.Split(strings.TrimSpace(and), " ")
- for _, a := range args {
- if inArg {
- // check to see if is a value range 2..9
- multiRange := strings.Count(a, "..") > 1
- cargs := strings.Split(strings.TrimSpace(a), ",")
- hasBracket := len(cargs) > 1
- bracketAdded := false
- lastWasRange := false
- for _, carg := range cargs {
- if rng := strings.Split(carg, ".."); len(rng) > 1 {
- if multiRange {
- pre += " ("
- } else {
- pre += " "
- }
- switch preOperator {
- case "==":
- pre += lft + " >= " + rng[0] + " && " + lft + "<=" + rng[1]
- case "!=":
- pre += lft + " < " + rng[0] + " && " + lft + " > " + rng[1]
- }
- if multiRange {
- pre += ") || "
- } else {
- pre += " || "
- }
- lastWasRange = true
- continue
- }
- if lastWasRange {
- pre = strings.TrimRight(pre, " || ") + " && "
- }
- lastWasRange = false
- if hasBracket && !bracketAdded {
- pre += "("
- bracketAdded = true
- }
- // single comma separated values
- switch preOperator {
- case "==":
- pre += " " + lft + preOperator + carg + " || "
- case "!=":
- pre += " " + lft + preOperator + carg + " && "
- }
- }
- pre = strings.TrimRight(pre, " || ")
- pre = strings.TrimRight(pre, " && ")
- pre = strings.TrimRight(pre, " || ")
- if hasBracket && bracketAdded {
- pre += ")"
- }
- continue
- }
- if strings.Contains(a, "=") || a == ">" || a == "<" {
- inArg = true
- preOperator = a
- continue
- }
- lft += a
- }
- stmt += pre + " && "
- }
- stmt = strings.TrimRight(stmt, " && ") + ") || "
- }
- stmt = strings.TrimRight(stmt, " || ")
- results += stmt
- results += " {\n"
- // return plural rule here
- results += "return locales." + ps1 + "\n"
- results += "}"
- }
- pre := "\n"
- // always needed
- vals[prVarFuncs["n"]] = struct{}{}
- sorted := make([]sortRank, 0, len(vals))
- for k := range vals {
- switch k[:1] {
- case "n":
- sorted = append(sorted, sortRank{
- Value: prVarFuncs["n"],
- Rank: 1,
- })
- case "i":
- sorted = append(sorted, sortRank{
- Value: prVarFuncs["i"],
- Rank: 2,
- })
- case "w":
- sorted = append(sorted, sortRank{
- Value: prVarFuncs["w"],
- Rank: 3,
- })
- case "f":
- sorted = append(sorted, sortRank{
- Value: prVarFuncs["f"],
- Rank: 4,
- })
- case "t":
- sorted = append(sorted, sortRank{
- Value: prVarFuncs["t"],
- Rank: 5,
- })
- }
- }
- sort.Sort(ByRank(sorted))
- for _, k := range sorted {
- pre += k.Value
- }
- pre += "\n"
- if len(results) == 0 {
- results = "return locales.PluralRuleUnknown"
- } else {
- if !strings.HasPrefix(results, "return") {
- results = pre + results
- }
- }
- if len(pluralArr) == 0 {
- plurals = "nil"
- } else {
- plurals = fmt.Sprintf("%#v", pluralArr)
- }
- return
- }
- // pluralStringToInt returns the enum value of 'plural' provided
- func pluralStringToInt(plural string) locales.PluralRule {
- switch plural {
- case "zero":
- return locales.PluralRuleZero
- case "one":
- return locales.PluralRuleOne
- case "two":
- return locales.PluralRuleTwo
- case "few":
- return locales.PluralRuleFew
- case "many":
- return locales.PluralRuleMany
- case "other":
- return locales.PluralRuleOther
- default:
- return locales.PluralRuleUnknown
- }
- }
- 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"
- }
- }
- // //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 {
- // 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
- // }
- // 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
- // }
- // if calendar.Formats.DateTime.Short == "" {
- // calendar.Formats.DateTime.Short = baseCal.Formats.DateTime.Short
- // }
- // // months
- // if calendar.FormatNames.Months.Abbreviated == nil {
- // calendar.FormatNames.Months.Abbreviated = make(i18n.CalendarMonthFormatNameValue)
- // }
- // if calendar.FormatNames.Months.Narrow == nil {
- // calendar.FormatNames.Months.Narrow = make(i18n.CalendarMonthFormatNameValue)
- // }
- // if calendar.FormatNames.Months.Short == nil {
- // calendar.FormatNames.Months.Short = make(i18n.CalendarMonthFormatNameValue)
- // }
- // if calendar.FormatNames.Months.Wide == nil {
- // calendar.FormatNames.Months.Wide = make(i18n.CalendarMonthFormatNameValue)
- // }
- // for k, v := range baseCal.FormatNames.Months.Abbreviated {
- // val, ok := calendar.FormatNames.Months.Abbreviated[k]
- // if !ok {
- // calendar.FormatNames.Months.Abbreviated[k] = v
- // continue
- // }
- // if val == "" {
- // calendar.FormatNames.Months.Abbreviated[k] = v
- // }
- // }
- // 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
- // }
- // }
- // 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)
- // }
- // }
|