diff options
author | Christopher Speller <crspeller@gmail.com> | 2017-04-24 20:11:36 -0400 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-04-24 20:11:36 -0400 |
commit | f5437632f486b7d0a0a181c58f113c86d032b02c (patch) | |
tree | 407388e3003a210a89f4b2128d7ad656f8b79d26 /vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go | |
parent | 7f68a60f8c228d5604e0566bf84cabb145d16c37 (diff) | |
download | chat-f5437632f486b7d0a0a181c58f113c86d032b02c.tar.gz chat-f5437632f486b7d0a0a181c58f113c86d032b02c.tar.bz2 chat-f5437632f486b7d0a0a181c58f113c86d032b02c.zip |
Upgrading server dependancies (#6215)
Diffstat (limited to 'vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go')
-rw-r--r-- | vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go | 95 |
1 files changed, 64 insertions, 31 deletions
diff --git a/vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go b/vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go index 1d34ac438..1b9d04fd3 100644 --- a/vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go +++ b/vendor/github.com/nicksnyder/go-i18n/goi18n/merge_command.go @@ -5,7 +5,6 @@ import ( "flag" "fmt" "io/ioutil" - "os" "path/filepath" "reflect" "sort" @@ -15,6 +14,7 @@ import ( "github.com/nicksnyder/go-i18n/i18n/bundle" "github.com/nicksnyder/go-i18n/i18n/language" "github.com/nicksnyder/go-i18n/i18n/translation" + toml "github.com/pelletier/go-toml" ) type mergeCommand struct { @@ -22,6 +22,7 @@ type mergeCommand struct { sourceLanguage string outdir string format string + flat bool } func (mc *mergeCommand) execute() error { @@ -33,15 +34,10 @@ func (mc *mergeCommand) execute() error { return fmt.Errorf("invalid source locale: %s", mc.sourceLanguage) } - marshal, err := newMarshalFunc(mc.format) - if err != nil { - return err - } - bundle := bundle.New() for _, tf := range mc.translationFiles { if err := bundle.LoadTranslationFile(tf); err != nil { - return fmt.Errorf("failed to load translation file %s because %s\n", tf, err) + return fmt.Errorf("failed to load translation file %s: %s\n", tf, err) } } @@ -64,7 +60,7 @@ func (mc *mergeCommand) execute() error { all := filter(localeTranslations, func(t translation.Translation) translation.Translation { return t.Normalize(lang) }) - if err := mc.writeFile("all", all, localeID, marshal); err != nil { + if err := mc.writeFile("all", all, localeID); err != nil { return err } @@ -74,7 +70,7 @@ func (mc *mergeCommand) execute() error { } return nil }) - if err := mc.writeFile("untranslated", untranslated, localeID, marshal); err != nil { + if err := mc.writeFile("untranslated", untranslated, localeID); err != nil { return err } } @@ -88,6 +84,7 @@ func (mc *mergeCommand) parse(arguments []string) { sourceLanguage := flags.String("sourceLanguage", "en-us", "") outdir := flags.String("outdir", ".", "") format := flags.String("format", "json", "") + flat := flags.Bool("flat", true, "") flags.Parse(arguments) @@ -95,31 +92,44 @@ func (mc *mergeCommand) parse(arguments []string) { mc.sourceLanguage = *sourceLanguage mc.outdir = *outdir mc.format = *format + if *format == "toml" { + mc.flat = true + } else { + mc.flat = *flat + } } func (mc *mergeCommand) SetArgs(args []string) { mc.translationFiles = args } -type marshalFunc func(interface{}) ([]byte, error) - -func (mc *mergeCommand) writeFile(label string, translations []translation.Translation, localeID string, marshal marshalFunc) error { +func (mc *mergeCommand) writeFile(label string, translations []translation.Translation, localeID string) error { sort.Sort(translation.SortableByID(translations)) - buf, err := marshal(marshalInterface(translations)) + + var convert func([]translation.Translation) interface{} + if mc.flat { + convert = marshalFlatInterface + } else { + convert = marshalInterface + } + + buf, err := mc.marshal(convert(translations)) if err != nil { - return fmt.Errorf("failed to marshal %s strings to %s because %s", localeID, mc.format, err) + return fmt.Errorf("failed to marshal %s strings to %s: %s", localeID, mc.format, err) } + filename := filepath.Join(mc.outdir, fmt.Sprintf("%s.%s.%s", localeID, label, mc.format)) + if err := ioutil.WriteFile(filename, buf, 0666); err != nil { - return fmt.Errorf("failed to write %s because %s", filename, err) + return fmt.Errorf("failed to write %s: %s", filename, err) } return nil } -func filter(translations map[string]translation.Translation, filter func(translation.Translation) translation.Translation) []translation.Translation { +func filter(translations map[string]translation.Translation, f func(translation.Translation) translation.Translation) []translation.Translation { filtered := make([]translation.Translation, 0, len(translations)) for _, translation := range translations { - if t := filter(translation); t != nil { + if t := f(translation); t != nil { filtered = append(filtered, t) } } @@ -127,21 +137,15 @@ func filter(translations map[string]translation.Translation, filter func(transla } -func newMarshalFunc(format string) (marshalFunc, error) { - switch format { - case "json": - return func(v interface{}) ([]byte, error) { - return json.MarshalIndent(v, "", " ") - }, nil - case "yaml": - return func(v interface{}) ([]byte, error) { - return yaml.Marshal(v) - }, nil +func marshalFlatInterface(translations []translation.Translation) interface{} { + mi := make(map[string]interface{}, len(translations)) + for _, translation := range translations { + mi[translation.ID()] = translation.MarshalFlatInterface() } - return nil, fmt.Errorf("unsupported format: %s\n", format) + return mi } -func marshalInterface(translations []translation.Translation) []interface{} { +func marshalInterface(translations []translation.Translation) interface{} { mi := make([]interface{}, len(translations)) for i, translation := range translations { mi[i] = translation.MarshalInterface() @@ -149,6 +153,31 @@ func marshalInterface(translations []translation.Translation) []interface{} { return mi } +func (mc mergeCommand) marshal(v interface{}) ([]byte, error) { + switch mc.format { + case "json": + return json.MarshalIndent(v, "", " ") + case "toml": + return marshalTOML(v) + case "yaml": + return yaml.Marshal(v) + } + return nil, fmt.Errorf("unsupported format: %s\n", mc.format) +} + +func marshalTOML(v interface{}) ([]byte, error) { + m, ok := v.(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("invalid format for marshaling to TOML") + } + tree, err := toml.TreeFromMap(m) + if err != nil { + return nil, err + } + s, err := tree.ToTomlString() + return []byte(s), err +} + func usageMerge() { fmt.Printf(`Merge translation files. @@ -198,9 +227,13 @@ Options: -format format goi18n encodes the output translation files in this format. - Supported formats: json, yaml + Supported formats: json, toml, yaml Default: json + -flat + goi18n writes the output translation files in flat format. + Usage of '-format toml' automitically sets this flag. + Default: true + `) - os.Exit(1) } |