From 3b92b162e1c4f1b44637896af0980a107e11989c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20B=C3=B6hmke?= Date: Sun, 23 Feb 2020 10:08:48 +0100 Subject: [PATCH] moved PO file writing to domain object --- cli/xgotext/main.go | 27 ++------------------ cli/xgotext/parser/domain.go | 49 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/cli/xgotext/main.go b/cli/xgotext/main.go index 1f25c9d..0ff16b6 100644 --- a/cli/xgotext/main.go +++ b/cli/xgotext/main.go @@ -3,8 +3,6 @@ package main import ( "flag" "log" - "os" - "path/filepath" "github.com/leonelquinteros/gotext/cli/xgotext/parser" ) @@ -32,29 +30,8 @@ func main() { log.Fatal(err) } - err = os.MkdirAll(*outputDir, os.ModePerm) + err = data.Save(*outputDir) if err != nil { - log.Fatalf("failed to create output dir: %s", err) - } - - for name, domain := range data { - outFile := filepath.Join(*outputDir, name+".po") - file, err := os.Create(outFile) - if err != nil { - log.Fatalf("failed to save po file for %s: %s", name, err) - } - - file.WriteString(`msgid "" -msgstr "" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: \n" -"X-Generator: xgotext\n" - -`) - file.WriteString(domain.Dump()) - file.Close() + log.Fatal(err) } } diff --git a/cli/xgotext/parser/domain.go b/cli/xgotext/parser/domain.go index 126031c..2fc5fa0 100644 --- a/cli/xgotext/parser/domain.go +++ b/cli/xgotext/parser/domain.go @@ -1,6 +1,9 @@ package parser import ( + "fmt" + "os" + "path/filepath" "sort" "strings" ) @@ -117,6 +120,34 @@ func (d *Domain) Dump() string { return strings.Join(data, "\n\n") } +// Save domain to file +func (d *Domain) Save(path string) error { + file, err := os.Create(path) + if err != nil { + return fmt.Errorf("failed to domain: %w", err) + } + defer file.Close() + + // write header + _, err = file.WriteString(`msgid "" +msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: \n" +"X-Generator: xgotext\n" + +`) + if err != nil { + return err + } + + // write domain content + _, err = file.WriteString(d.Dump()) + return err +} + // DomainMap contains multiple domains as map with name as key type DomainMap map[string]*Domain @@ -127,3 +158,21 @@ func (m *DomainMap) AddTranslation(domain string, translation *Translation) { } (*m)[domain].AddTranslation(translation) } + +// Save domains to directory +func (m *DomainMap) Save(directory string) error { + // ensure output directory exist + err := os.MkdirAll(directory, os.ModePerm) + if err != nil { + return fmt.Errorf("failed to create output dir: %w", err) + } + + // save each domain in a separate po file + for name, domain := range *m { + err := domain.Save(filepath.Join(directory, name+".po")) + if err != nil { + return fmt.Errorf("failed to save domain %s: %w", name, err) + } + } + return nil +}