added option to set default domain

This commit is contained in:
Benjamin Böhmke
2020-02-24 17:52:39 +01:00
parent 9091772533
commit 478f4d29b7
4 changed files with 37 additions and 18 deletions

View File

@@ -8,8 +8,9 @@ import (
) )
var ( var (
dirName = flag.String("in", "", "input dir: /path/to/go/pkg") dirName = flag.String("in", "", "input dir: /path/to/go/pkg")
outputDir = flag.String("out", "", "output dir: /path/to/i18n/files") outputDir = flag.String("out", "", "output dir: /path/to/i18n/files")
defaultDomain = flag.String("default", "default", "Name of default domain")
) )
func main() { func main() {
@@ -25,7 +26,11 @@ func main() {
log.Fatal("No output directory given") log.Fatal("No output directory given")
} }
data, err := parser.ParseDirRec(*dirName) data := &parser.DomainMap{
Default: *defaultDomain,
}
err := parser.ParseDirRec(*dirName, data)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }

View File

@@ -149,14 +149,31 @@ msgstr ""
} }
// DomainMap contains multiple domains as map with name as key // DomainMap contains multiple domains as map with name as key
type DomainMap map[string]*Domain type DomainMap struct {
Domains map[string]*Domain
Default string
}
// AddTranslation to domain map // AddTranslation to domain map
func (m *DomainMap) AddTranslation(domain string, translation *Translation) { func (m *DomainMap) AddTranslation(domain string, translation *Translation) {
if _, ok := (*m)[domain]; !ok { if m.Domains == nil {
(*m)[domain] = new(Domain) m.Domains = make(map[string]*Domain, 1)
} }
(*m)[domain].AddTranslation(translation)
// use "default" as default domain if not set
if m.Default == "" {
m.Default = "default"
}
// no domain given -> use default
if domain == "" {
domain = m.Default
}
if _, ok := m.Domains[domain]; !ok {
m.Domains[domain] = new(Domain)
}
m.Domains[domain].AddTranslation(translation)
} }
// Save domains to directory // Save domains to directory
@@ -168,7 +185,7 @@ func (m *DomainMap) Save(directory string) error {
} }
// save each domain in a separate po file // save each domain in a separate po file
for name, domain := range *m { for name, domain := range m.Domains {
err := domain.Save(filepath.Join(directory, name+".po")) err := domain.Save(filepath.Join(directory, name+".po"))
if err != nil { if err != nil {
return fmt.Errorf("failed to save domain %s: %v", name, err) return fmt.Errorf("failed to save domain %s: %v", name, err)

View File

@@ -53,7 +53,7 @@ func init() {
} }
// parse go package // parse go package
func goParser(dirPath, basePath string, data DomainMap) error { func goParser(dirPath, basePath string, data *DomainMap) error {
fileSet := token.NewFileSet() fileSet := token.NewFileSet()
conf := packages.Config{ conf := packages.Config{
@@ -100,7 +100,7 @@ func goParser(dirPath, basePath string, data DomainMap) error {
type GoFile struct { type GoFile struct {
filePath string filePath string
basePath string basePath string
data DomainMap data *DomainMap
fileSet *token.FileSet fileSet *token.FileSet
pkgConf *packages.Config pkgConf *packages.Config
@@ -234,9 +234,7 @@ func (g *GoFile) parseGetter(def GetterDef, args []*ast.BasicLit, pos string) {
// get domain // get domain
var domain string var domain string
if def.Domain == -1 { if def.Domain != -1 {
domain = "default" // TODO
} else {
domain, _ = strconv.Unquote(args[def.Domain].Value) domain, _ = strconv.Unquote(args[def.Domain].Value)
} }

View File

@@ -6,7 +6,7 @@ import (
) )
// ParseDirFunc parses one directory // ParseDirFunc parses one directory
type ParseDirFunc func(filePath, basePath string, data DomainMap) error type ParseDirFunc func(filePath, basePath string, data *DomainMap) error
var knownParser []ParseDirFunc var knownParser []ParseDirFunc
@@ -20,7 +20,7 @@ func AddParser(parser ParseDirFunc) {
} }
// ParseDir calls all known parser for each directory // ParseDir calls all known parser for each directory
func ParseDir(dirPath, basePath string, data DomainMap) error { func ParseDir(dirPath, basePath string, data *DomainMap) error {
dirPath, _ = filepath.Abs(dirPath) dirPath, _ = filepath.Abs(dirPath)
basePath, _ = filepath.Abs(basePath) basePath, _ = filepath.Abs(basePath)
@@ -34,8 +34,7 @@ func ParseDir(dirPath, basePath string, data DomainMap) error {
} }
// ParseDirRec calls all known parser for each directory // ParseDirRec calls all known parser for each directory
func ParseDirRec(dirPath string) (DomainMap, error) { func ParseDirRec(dirPath string, data *DomainMap) error {
data := make(DomainMap)
dirPath, _ = filepath.Abs(dirPath) dirPath, _ = filepath.Abs(dirPath)
err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error { err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
@@ -51,5 +50,5 @@ func ParseDirRec(dirPath string) (DomainMap, error) {
} }
return nil return nil
}) })
return data, err return err
} }