Add gettext capability to template and menu resources #239
							
								
								
									
										23
									
								
								cmd/main.go
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								cmd/main.go
									
									
									
									
									
								
							@ -10,10 +10,12 @@ import (
 | 
				
			|||||||
	"git.defalsify.org/vise.git/engine"
 | 
						"git.defalsify.org/vise.git/engine"
 | 
				
			||||||
	"git.defalsify.org/vise.git/logging"
 | 
						"git.defalsify.org/vise.git/logging"
 | 
				
			||||||
	"git.defalsify.org/vise.git/resource"
 | 
						"git.defalsify.org/vise.git/resource"
 | 
				
			||||||
 | 
						"git.defalsify.org/vise.git/lang"
 | 
				
			||||||
	"git.grassecon.net/urdt/ussd/config"
 | 
						"git.grassecon.net/urdt/ussd/config"
 | 
				
			||||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
						"git.grassecon.net/urdt/ussd/initializers"
 | 
				
			||||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
						"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
				
			||||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
						"git.grassecon.net/urdt/ussd/internal/storage"
 | 
				
			||||||
 | 
						"git.grassecon.net/urdt/ussd/internal/args"
 | 
				
			||||||
	"git.grassecon.net/urdt/ussd/remote"
 | 
						"git.grassecon.net/urdt/ussd/remote"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,22 +33,38 @@ func main() {
 | 
				
			|||||||
	config.LoadConfig()
 | 
						config.LoadConfig()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var dbDir string
 | 
						var dbDir string
 | 
				
			||||||
 | 
						var gettextDir string
 | 
				
			||||||
	var size uint
 | 
						var size uint
 | 
				
			||||||
	var sessionId string
 | 
						var sessionId string
 | 
				
			||||||
	var database string
 | 
						var database string
 | 
				
			||||||
	var engineDebug bool
 | 
						var engineDebug bool
 | 
				
			||||||
 | 
						var langs args.LangVar
 | 
				
			||||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
						flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
				
			||||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
						flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
				
			||||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
						flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
				
			||||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
						flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
				
			||||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
						flag.UintVar(&size, "s", 160, "max size of output")
 | 
				
			||||||
 | 
						flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
 | 
				
			||||||
 | 
						flag.Var(&langs, "language", "add symbol resolution for language")
 | 
				
			||||||
	flag.Parse()
 | 
						flag.Parse()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logg.Infof("start command", "dbdir", dbDir, "outputsize", size)
 | 
						logg.Infof("start command", "dbdir", dbDir, "outputsize", size)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(langs.Langs()) == 0 {
 | 
				
			||||||
 | 
							langs.Set(config.DefaultLanguage)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx := context.Background()
 | 
						ctx := context.Background()
 | 
				
			||||||
	ctx = context.WithValue(ctx, "SessionId", sessionId)
 | 
						ctx = context.WithValue(ctx, "SessionId", sessionId)
 | 
				
			||||||
	ctx = context.WithValue(ctx, "Database", database)
 | 
						ctx = context.WithValue(ctx, "Database", database)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ln, err := lang.LanguageFromCode(config.DefaultLanguage)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Fprintf(os.Stderr, "default language set error: %v", err)
 | 
				
			||||||
 | 
							os.Exit(1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ctx = context.WithValue(ctx, "Language", ln)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
						pfp := path.Join(scriptDir, "pp.csv")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cfg := engine.Config{
 | 
						cfg := engine.Config{
 | 
				
			||||||
@ -59,8 +77,11 @@ func main() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	resourceDir := scriptDir
 | 
						resourceDir := scriptDir
 | 
				
			||||||
	menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
 | 
						menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
 | 
				
			||||||
 | 
						if gettextDir != "" {
 | 
				
			||||||
 | 
							menuStorageService = menuStorageService.WithGettext(gettextDir, langs.Langs())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := menuStorageService.EnsureDbDir()
 | 
						err = menuStorageService.EnsureDbDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintf(os.Stderr, err.Error())
 | 
							fmt.Fprintf(os.Stderr, err.Error())
 | 
				
			||||||
		os.Exit(1)
 | 
							os.Exit(1)
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,10 @@ const (
 | 
				
			|||||||
	AliasPrefix                = "api/v1/alias"
 | 
						AliasPrefix                = "api/v1/alias"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						defaultLanguage		   = "eng"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	custodialURLBase string
 | 
						custodialURLBase string
 | 
				
			||||||
	dataURLBase      string
 | 
						dataURLBase      string
 | 
				
			||||||
@ -34,6 +38,7 @@ var (
 | 
				
			|||||||
	VoucherTransfersURL string
 | 
						VoucherTransfersURL string
 | 
				
			||||||
	VoucherDataURL      string
 | 
						VoucherDataURL      string
 | 
				
			||||||
	CheckAliasURL       string
 | 
						CheckAliasURL       string
 | 
				
			||||||
 | 
						DefaultLanguage	    string
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setBase() error {
 | 
					func setBase() error {
 | 
				
			||||||
@ -51,6 +56,8 @@ func setBase() error {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						defaultLanguage = initializers.GetEnv("DEFAULT_LANGUAGE", defaultLanguage)
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -69,6 +76,7 @@ func LoadConfig() error {
 | 
				
			|||||||
	VoucherTransfersURL, _ = url.JoinPath(dataURLBase, voucherTransfersPathPrefix)
 | 
						VoucherTransfersURL, _ = url.JoinPath(dataURLBase, voucherTransfersPathPrefix)
 | 
				
			||||||
	VoucherDataURL, _ = url.JoinPath(dataURLBase, voucherDataPathPrefix)
 | 
						VoucherDataURL, _ = url.JoinPath(dataURLBase, voucherDataPathPrefix)
 | 
				
			||||||
	CheckAliasURL, _ = url.JoinPath(dataURLBase, AliasPrefix)
 | 
						CheckAliasURL, _ = url.JoinPath(dataURLBase, AliasPrefix)
 | 
				
			||||||
 | 
						DefaultLanguage = defaultLanguage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										34
									
								
								internal/args/lang.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								internal/args/lang.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					package args
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.defalsify.org/vise.git/lang"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type LangVar struct {
 | 
				
			||||||
 | 
						v []lang.Language
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func(lv *LangVar) Set(s string) error {
 | 
				
			||||||
 | 
						v, err := lang.LanguageFromCode(s)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						lv.v = append(lv.v, v)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func(lv *LangVar) String() string {
 | 
				
			||||||
 | 
						var s []string
 | 
				
			||||||
 | 
						for _, v := range(lv.v) {
 | 
				
			||||||
 | 
							s = append(s, v.Code)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.Join(s, ",")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func(lv *LangVar) Langs() []lang.Language {
 | 
				
			||||||
 | 
						return lv.v
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
	"git.defalsify.org/vise.git/db"
 | 
						"git.defalsify.org/vise.git/db"
 | 
				
			||||||
	fsdb "git.defalsify.org/vise.git/db/fs"
 | 
						fsdb "git.defalsify.org/vise.git/db/fs"
 | 
				
			||||||
	"git.defalsify.org/vise.git/db/postgres"
 | 
						"git.defalsify.org/vise.git/db/postgres"
 | 
				
			||||||
 | 
						"git.defalsify.org/vise.git/lang"
 | 
				
			||||||
	"git.defalsify.org/vise.git/logging"
 | 
						"git.defalsify.org/vise.git/logging"
 | 
				
			||||||
	"git.defalsify.org/vise.git/persist"
 | 
						"git.defalsify.org/vise.git/persist"
 | 
				
			||||||
	"git.defalsify.org/vise.git/resource"
 | 
						"git.defalsify.org/vise.git/resource"
 | 
				
			||||||
@ -29,6 +30,7 @@ type StorageService interface {
 | 
				
			|||||||
type MenuStorageService struct {
 | 
					type MenuStorageService struct {
 | 
				
			||||||
	dbDir         string
 | 
						dbDir         string
 | 
				
			||||||
	resourceDir   string
 | 
						resourceDir   string
 | 
				
			||||||
 | 
						poResource    resource.Resource
 | 
				
			||||||
	resourceStore db.Db
 | 
						resourceStore db.Db
 | 
				
			||||||
	stateStore    db.Db
 | 
						stateStore    db.Db
 | 
				
			||||||
	userDataStore db.Db
 | 
						userDataStore db.Db
 | 
				
			||||||
@ -57,6 +59,22 @@ func NewMenuStorageService(dbDir string, resourceDir string) *MenuStorageService
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ms *MenuStorageService) WithGettext(path string, lns []lang.Language) *MenuStorageService {
 | 
				
			||||||
 | 
						ln := lang.Language{
 | 
				
			||||||
 | 
							Code: "xxx",
 | 
				
			||||||
 | 
							Name: "Translation key",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rs := resource.NewPoResource(ln, path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, ln = range(lns) {
 | 
				
			||||||
 | 
							rs = rs.WithLanguage(ln)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ms.poResource = rs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ms
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, fileName string) (db.Db, error) {
 | 
					func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, fileName string) (db.Db, error) {
 | 
				
			||||||
	database, ok := ctx.Value("Database").(string)
 | 
						database, ok := ctx.Value("Database").(string)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
@ -119,6 +137,10 @@ func (ms *MenuStorageService) GetResource(ctx context.Context) (resource.Resourc
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rfs := resource.NewDbResource(ms.resourceStore)
 | 
						rfs := resource.NewDbResource(ms.resourceStore)
 | 
				
			||||||
 | 
						if ms.poResource != nil {
 | 
				
			||||||
 | 
							rfs.WithMenuGetter(ms.poResource.GetMenu)
 | 
				
			||||||
 | 
							rfs.WithTemplateGetter(ms.poResource.GetTemplate)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return rfs, nil
 | 
						return rfs, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user