Parse SetDomain methods

This commit is contained in:
Leonel Quinteros
2019-02-18 18:09:32 -03:00
parent 0e382cfe26
commit 6431cb3aea
2 changed files with 34 additions and 26 deletions

View File

@@ -29,7 +29,8 @@ func main() {
l := gotext.NewLocale("/path/to/locales/root/dir", "es_UY")
// Load domain '/path/to/locales/root/dir/es_UY/default.po'
l.AddDomain("default")
l.AddDomain("translations")
l.SetDomain("translations")
// Translate text from domain
fmt.Println(l.GetD("translations", "Translate this"))
@@ -39,7 +40,7 @@ func main() {
num := 17
l.GetN("SingularVar", "PluralVar", num)
l.GetDC("domain", "string", "ctx")
l.GetDC("domain2", "string", "ctx")
l.GetNDC("translations", "ndc", "ndcs", 7, "NDC-CTX")
f := Fake{}

View File

@@ -1,6 +1,7 @@
package main
import (
"flag"
"fmt"
"go/ast"
"go/parser"
@@ -12,8 +13,9 @@ import (
)
var (
dirName string
outputDir string
debug = flag.Bool("debug", false, "enable debug mode and print AST")
dirName = flag.String("in", "", "input dir: /path/to/go/pkg")
outputDir = flag.String("out", "", "output dir: /path/to/i18n/files")
fset *token.FileSet
domainFiles map[string]*os.File
currentDomain = "default"
@@ -21,33 +23,26 @@ var (
)
func main() {
flag.Parse()
// Init logger
log.SetFlags(0)
// Init domain files
domainFiles = make(map[string]*os.File)
// Validate args
if len(os.Args) < 2 {
log.Println("Usage: ")
log.Fatal("$ xgotext /path/to/package [ /path/to/output/dir ]")
}
if len(os.Args) > 2 {
outputDir = os.Args[2]
}
// Check if dir name parameter is valid
dirName = os.Args[1]
f, err := os.Stat(dirName)
log.Println(*dirName)
f, err := os.Stat(*dirName)
if err != nil {
log.Fatal(err)
}
// Process file or dir
if f.IsDir() {
parseDir(dirName)
parseDir(*dirName)
} else {
parseFile(dirName)
parseFile(*dirName)
}
}
@@ -58,7 +53,7 @@ func getDomainFile(domain string) *os.File {
}
// If the file doesn't exist, create it.
filePath := path.Join(outputDir, domain+".po")
filePath := path.Join(*outputDir, domain+".po")
f, err := os.OpenFile(filePath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
@@ -138,8 +133,10 @@ func parseFile(fileName string) error {
return err
}
// Debug
//ast.Print(fset, node)
// Debug mode
if *debug {
ast.Print(fset, node)
}
ast.Inspect(node, inspectFile)
@@ -182,12 +179,14 @@ func inspectCallExpr(n *ast.CallExpr) {
case "GetNDC":
parseGetNDC(n)
case "SetDomain":
parseSetDomain(n)
}
}
}
func parseGet(call *ast.CallExpr) {
// Expect first param to be string
if call.Args != nil && len(call.Args) > 0 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit.Kind == token.STRING {
@@ -202,7 +201,6 @@ func parseGet(call *ast.CallExpr) {
}
func parseGetN(call *ast.CallExpr) {
// Expect at least 3 params, first 2 strings, third int
if call.Args == nil || len(call.Args) < 3 {
return
}
@@ -234,7 +232,6 @@ func parseGetN(call *ast.CallExpr) {
}
func parseGetD(call *ast.CallExpr) {
// Expect first 2 params to be string
if call.Args != nil && len(call.Args) > 1 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit1, ok := call.Args[1].(*ast.BasicLit); ok {
@@ -255,7 +252,6 @@ func parseGetD(call *ast.CallExpr) {
}
func parseGetND(call *ast.CallExpr) {
// Expect first 3 params to be string
if call.Args != nil && len(call.Args) > 2 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit1, ok := call.Args[1].(*ast.BasicLit); ok {
@@ -278,7 +274,6 @@ func parseGetND(call *ast.CallExpr) {
}
func parseGetC(call *ast.CallExpr) {
// Expect first 2 params to be string
if call.Args != nil && len(call.Args) > 1 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit1, ok := call.Args[1].(*ast.BasicLit); ok {
@@ -296,7 +291,6 @@ func parseGetC(call *ast.CallExpr) {
}
func parseGetNC(call *ast.CallExpr) {
// Expect at least 4 params. 1, 2, and 3 as string
if call.Args != nil && len(call.Args) > 3 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit1, ok := call.Args[1].(*ast.BasicLit); ok {
@@ -362,3 +356,16 @@ func parseGetNDC(call *ast.CallExpr) {
}
}
}
func parseSetDomain(call *ast.CallExpr) {
if call.Args != nil && len(call.Args) == 1 {
if lit, ok := call.Args[0].(*ast.BasicLit); ok {
if lit.Kind == token.STRING {
cd, err := strconv.Unquote(lit.Value)
if err == nil {
currentDomain = cd
}
}
}
}
}