Implement gettext spec in local vm cmd
This commit is contained in:
		
							parent
							
								
									ed1aeecf7d
								
							
						
					
					
						commit
						6ee2c88fe2
					
				
							
								
								
									
										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