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/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
	"git.defalsify.org/vise.git/lang"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/args"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/remote"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -31,22 +33,38 @@ func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
	var dbDir string
 | 
			
		||||
	var gettextDir string
 | 
			
		||||
	var size uint
 | 
			
		||||
	var sessionId string
 | 
			
		||||
	var database string
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	var langs args.LangVar
 | 
			
		||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
			
		||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
			
		||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
			
		||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug 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()
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "dbdir", dbDir, "outputsize", size)
 | 
			
		||||
 | 
			
		||||
	if len(langs.Langs()) == 0 {
 | 
			
		||||
		langs.Set(config.DefaultLanguage)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "SessionId", sessionId)
 | 
			
		||||
	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")
 | 
			
		||||
 | 
			
		||||
	cfg := engine.Config{
 | 
			
		||||
@ -59,8 +77,11 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	resourceDir := scriptDir
 | 
			
		||||
	menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
 | 
			
		||||
	if gettextDir != "" {
 | 
			
		||||
		menuStorageService = menuStorageService.WithGettext(gettextDir, langs.Langs())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := menuStorageService.EnsureDbDir()
 | 
			
		||||
	err = menuStorageService.EnsureDbDir()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, err.Error())
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,10 @@ const (
 | 
			
		||||
	AliasPrefix                = "api/v1/alias"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	defaultLanguage		   = "eng"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	custodialURLBase string
 | 
			
		||||
	dataURLBase      string
 | 
			
		||||
@ -34,6 +38,7 @@ var (
 | 
			
		||||
	VoucherTransfersURL string
 | 
			
		||||
	VoucherDataURL      string
 | 
			
		||||
	CheckAliasURL       string
 | 
			
		||||
	DefaultLanguage	    string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setBase() error {
 | 
			
		||||
@ -51,6 +56,8 @@ func setBase() error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	defaultLanguage = initializers.GetEnv("DEFAULT_LANGUAGE", defaultLanguage)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -69,6 +76,7 @@ func LoadConfig() error {
 | 
			
		||||
	VoucherTransfersURL, _ = url.JoinPath(dataURLBase, voucherTransfersPathPrefix)
 | 
			
		||||
	VoucherDataURL, _ = url.JoinPath(dataURLBase, voucherDataPathPrefix)
 | 
			
		||||
	CheckAliasURL, _ = url.JoinPath(dataURLBase, AliasPrefix)
 | 
			
		||||
	DefaultLanguage = defaultLanguage
 | 
			
		||||
 | 
			
		||||
	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"
 | 
			
		||||
	fsdb "git.defalsify.org/vise.git/db/fs"
 | 
			
		||||
	"git.defalsify.org/vise.git/db/postgres"
 | 
			
		||||
	"git.defalsify.org/vise.git/lang"
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/persist"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
@ -29,6 +30,7 @@ type StorageService interface {
 | 
			
		||||
type MenuStorageService struct {
 | 
			
		||||
	dbDir         string
 | 
			
		||||
	resourceDir   string
 | 
			
		||||
	poResource    resource.Resource
 | 
			
		||||
	resourceStore db.Db
 | 
			
		||||
	stateStore    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) {
 | 
			
		||||
	database, ok := ctx.Value("Database").(string)
 | 
			
		||||
	if !ok {
 | 
			
		||||
@ -119,6 +137,10 @@ func (ms *MenuStorageService) GetResource(ctx context.Context) (resource.Resourc
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	rfs := resource.NewDbResource(ms.resourceStore)
 | 
			
		||||
	if ms.poResource != nil {
 | 
			
		||||
		rfs.WithMenuGetter(ms.poResource.GetMenu)
 | 
			
		||||
		rfs.WithTemplateGetter(ms.poResource.GetTemplate)
 | 
			
		||||
	}
 | 
			
		||||
	return rfs, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user