added option to set default domain
This commit is contained in:
@@ -10,6 +10,7 @@ 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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user