Compare commits
	
		
			18 Commits
		
	
	
		
			02823fd64e
			...
			599815c343
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					599815c343 | ||
| 
						 | 
					462c0d7677 | ||
| 80b96e9bf6 | |||
| b5561decd1 | |||
| 
						 | 
					bb4037e73f | ||
| 
						 | 
					349051b5ef | ||
| 
						 | 
					9013cc3618 | ||
| 
						 | 
					056d056613 | ||
| 
						 | 
					e581ec4771 | ||
| 
						 | 
					e16b7445e8 | ||
| 
						 | 
					1b12f0ba5f | ||
| 
						 | 
					c1e0617bb3 | ||
| 
						 | 
					6723884103 | ||
| 
						 | 
					b888af446d | ||
| 
						 | 
					43b2c3b78d | ||
| 
						 | 
					d67853f6d9 | ||
| 
						 | 
					06230dc557 | ||
| 
						 | 
					6ee2c88fe2 | 
@ -14,3 +14,7 @@ DB_CONN=postgres://postgres:strongpass@localhost:5432/urdt_ussd
 | 
			
		||||
CUSTODIAL_URL_BASE=http://localhost:5003
 | 
			
		||||
BEARER_TOKEN=eyJeSIsInRcCI6IkpXVCJ.yJwdWJsaWNLZXkiOiIwrrrrrr
 | 
			
		||||
DATA_URL_BASE=http://localhost:5006
 | 
			
		||||
 | 
			
		||||
#Language
 | 
			
		||||
DEFAULT_LANGUAGE=eng
 | 
			
		||||
LANGUAGES=eng, swa
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ 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"
 | 
			
		||||
@ -21,6 +22,7 @@ import (
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/http/at"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/remote"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/args"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -45,6 +47,8 @@ func main() {
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	var err error
 | 
			
		||||
	var gettextDir string
 | 
			
		||||
	var langs args.LangVar
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
	flag.StringVar(&connStr, "c", "", "connection string")
 | 
			
		||||
@ -52,6 +56,8 @@ func main() {
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
 | 
			
		||||
	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
 | 
			
		||||
	flag.Var(&langs, "language", "add symbol resolution for language")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	if connStr != "" {
 | 
			
		||||
@ -67,6 +73,13 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	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{
 | 
			
		||||
 | 
			
		||||
@ -12,12 +12,14 @@ 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/remote"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/args"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -55,6 +57,8 @@ func main() {
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	var err error
 | 
			
		||||
	var gettextDir string
 | 
			
		||||
	var langs args.LangVar
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
@ -63,6 +67,8 @@ func main() {
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
 | 
			
		||||
	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
 | 
			
		||||
	flag.Var(&langs, "language", "add symbol resolution for language")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	if connStr != "" {
 | 
			
		||||
@ -78,6 +84,14 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	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{
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ 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"
 | 
			
		||||
@ -21,6 +22,7 @@ import (
 | 
			
		||||
	httpserver "git.grassecon.net/urdt/ussd/internal/http"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/remote"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/args"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -44,6 +46,8 @@ func main() {
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	var err error
 | 
			
		||||
	var gettextDir string
 | 
			
		||||
	var langs args.LangVar
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
	flag.StringVar(&connStr, "c", "", "connection string")
 | 
			
		||||
@ -51,6 +55,8 @@ func main() {
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
 | 
			
		||||
	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
 | 
			
		||||
	flag.Var(&langs, "language", "add symbol resolution for language")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	if connStr != "" {
 | 
			
		||||
@ -66,6 +72,14 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	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{
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -27,6 +29,7 @@ func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: external script automatically generate language handler list from select language vise code OR consider dynamic menu generation script possibility
 | 
			
		||||
func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
@ -37,12 +40,16 @@ func main() {
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	var resourceDir string
 | 
			
		||||
	var err error
 | 
			
		||||
	var gettextDir string
 | 
			
		||||
	var langs args.LangVar
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", scriptDir, "resource dir")
 | 
			
		||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
			
		||||
	flag.StringVar(&connStr, "c", "", "connection string")
 | 
			
		||||
	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()
 | 
			
		||||
 | 
			
		||||
	if connStr != "" {
 | 
			
		||||
@ -56,9 +63,21 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "conn", connData, "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{
 | 
			
		||||
@ -70,6 +89,10 @@ func main() {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
 | 
			
		||||
	
 | 
			
		||||
	if gettextDir != "" {
 | 
			
		||||
		menuStorageService = menuStorageService.WithGettext(gettextDir, langs.Langs())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rs, err := menuStorageService.GetResource(ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ package config
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
)
 | 
			
		||||
@ -18,6 +19,11 @@ const (
 | 
			
		||||
	AliasPrefix                = "api/v1/alias"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	defaultLanguage		   = "eng"
 | 
			
		||||
	languages []string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	custodialURLBase string
 | 
			
		||||
	dataURLBase      string
 | 
			
		||||
@ -35,8 +41,28 @@ var (
 | 
			
		||||
	VoucherDataURL      string
 | 
			
		||||
	CheckAliasURL       string
 | 
			
		||||
	DbConn		string
 | 
			
		||||
	DefaultLanguage	    string
 | 
			
		||||
	Languages	[]string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setLanguage() error {
 | 
			
		||||
	defaultLanguage = initializers.GetEnv("DEFAULT_LANGUAGE", defaultLanguage)
 | 
			
		||||
	languages = strings.Split(initializers.GetEnv("LANGUAGES", defaultLanguage), ",")
 | 
			
		||||
	haveDefaultLanguage := false
 | 
			
		||||
	for i, v := range(languages) {
 | 
			
		||||
		languages[i] = strings.ReplaceAll(v, " ", "")
 | 
			
		||||
		if languages[i] == defaultLanguage {
 | 
			
		||||
			haveDefaultLanguage = true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !haveDefaultLanguage {
 | 
			
		||||
		languages = append([]string{defaultLanguage}, languages...)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setBase() error {
 | 
			
		||||
	var err error
 | 
			
		||||
 | 
			
		||||
@ -71,6 +97,10 @@ func LoadConfig() error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = setLanguage()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	CreateAccountURL, _ = url.JoinPath(custodialURLBase, createAccountPath)
 | 
			
		||||
	TrackStatusURL, _ = url.JoinPath(custodialURLBase, trackStatusPath)
 | 
			
		||||
	BalanceURL, _ = url.JoinPath(custodialURLBase, balancePathPrefix)
 | 
			
		||||
@ -80,6 +110,8 @@ func LoadConfig() error {
 | 
			
		||||
	VoucherTransfersURL, _ = url.JoinPath(dataURLBase, voucherTransfersPathPrefix)
 | 
			
		||||
	VoucherDataURL, _ = url.JoinPath(dataURLBase, voucherDataPathPrefix)
 | 
			
		||||
	CheckAliasURL, _ = url.JoinPath(dataURLBase, AliasPrefix)
 | 
			
		||||
	DefaultLanguage = defaultLanguage
 | 
			
		||||
	Languages = languages
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										126
									
								
								devtools/lang/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								devtools/lang/main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,126 @@
 | 
			
		||||
// create language files from environment
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/lang"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	
 | 
			
		||||
	changeHeadSrc = `LOAD reset_account_authorized 0
 | 
			
		||||
LOAD reset_incorrect 0
 | 
			
		||||
CATCH incorrect_pin flag_incorrect_pin 1
 | 
			
		||||
CATCH pin_entry flag_account_authorized 0
 | 
			
		||||
` 
 | 
			
		||||
 | 
			
		||||
	selectSrc = `LOAD set_language 6
 | 
			
		||||
RELOAD set_language
 | 
			
		||||
CATCH terms flag_account_created 0
 | 
			
		||||
MOVE language_changed
 | 
			
		||||
`
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	logg = logging.NewVanilla()
 | 
			
		||||
	mouts string
 | 
			
		||||
	incmps string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func toLanguageLabel(ln lang.Language) string {
 | 
			
		||||
	s := ln.Name
 | 
			
		||||
	v := strings.Split(s, " (")
 | 
			
		||||
	if len(v) > 1 {
 | 
			
		||||
		s = v[0]
 | 
			
		||||
	}
 | 
			
		||||
	return s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func toLanguageKey(ln lang.Language) string {
 | 
			
		||||
	s := toLanguageLabel(ln)
 | 
			
		||||
	return strings.ToLower(s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	var srcDir string
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&srcDir, "o", ".", "resource dir write to")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "dir", srcDir)
 | 
			
		||||
 | 
			
		||||
	err := config.LoadConfig()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, "config load error: %v", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	logg.Tracef("using languages", "lang", config.Languages)
 | 
			
		||||
 | 
			
		||||
	for i, v := range(config.Languages) {
 | 
			
		||||
		ln, err := lang.LanguageFromCode(v)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Fprintf(os.Stderr, "error parsing language: %s\n", v)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		n := i + 1
 | 
			
		||||
		s := toLanguageKey(ln)
 | 
			
		||||
		mouts += fmt.Sprintf("MOUT %s %v\n", s, n)
 | 
			
		||||
		v = "set_" + ln.Code
 | 
			
		||||
		incmps += fmt.Sprintf("INCMP %s %v\n", v, n)
 | 
			
		||||
 | 
			
		||||
		p := path.Join(srcDir, v)
 | 
			
		||||
		w, err := os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Fprintf(os.Stderr, "failed open language set template output: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		s = toLanguageLabel(ln)
 | 
			
		||||
		defer w.Close()
 | 
			
		||||
		_, err = w.Write([]byte(s))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	src := mouts + "HALT\n" + incmps
 | 
			
		||||
	src += "INCMP . *\n"
 | 
			
		||||
 | 
			
		||||
	p := path.Join(srcDir, "select_language.vis")
 | 
			
		||||
	w, err := os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	defer w.Close()
 | 
			
		||||
	_, err = w.Write([]byte(src))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	src = changeHeadSrc + src
 | 
			
		||||
	p = path.Join(srcDir, "change_language.vis")
 | 
			
		||||
	w, err = os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	defer w.Close()
 | 
			
		||||
	_, err = w.Write([]byte(src))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
@ -28,6 +29,7 @@ type StorageService interface {
 | 
			
		||||
type MenuStorageService struct {
 | 
			
		||||
	conn ConnData
 | 
			
		||||
	resourceDir   string
 | 
			
		||||
	poResource    resource.Resource
 | 
			
		||||
	resourceStore db.Db
 | 
			
		||||
	stateStore    db.Db
 | 
			
		||||
	userDataStore db.Db
 | 
			
		||||
@ -72,6 +74,28 @@ func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.D
 | 
			
		||||
	return newDb, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithGettext triggers use of gettext for translation of templates and menus.
 | 
			
		||||
//
 | 
			
		||||
// The first language in `lns` will be used as default language, to resolve node keys to 
 | 
			
		||||
// language strings.
 | 
			
		||||
//
 | 
			
		||||
// If `lns` is an empty array, gettext will not be used.
 | 
			
		||||
func (ms *MenuStorageService) WithGettext(path string, lns []lang.Language) *MenuStorageService {
 | 
			
		||||
	if len(lns) == 0 {
 | 
			
		||||
		logg.Warnf("Gettext requested but no languages supplied")
 | 
			
		||||
		return ms
 | 
			
		||||
	}
 | 
			
		||||
	rs := resource.NewPoResource(lns[0], path)
 | 
			
		||||
 | 
			
		||||
	for _, ln := range(lns) {
 | 
			
		||||
		rs = rs.WithLanguage(ln)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ms.poResource = rs
 | 
			
		||||
 | 
			
		||||
	return ms
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ms *MenuStorageService) GetPersister(ctx context.Context) (*persist.Persister, error) {
 | 
			
		||||
	stateStore, err := ms.GetStateStore(ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -104,6 +128,11 @@ func (ms *MenuStorageService) GetResource(ctx context.Context) (resource.Resourc
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	rfs := resource.NewDbResource(ms.resourceStore)
 | 
			
		||||
	if ms.poResource != nil {
 | 
			
		||||
		logg.InfoCtxf(ctx, "using poresource for menu and template")
 | 
			
		||||
		rfs.WithMenuGetter(ms.poResource.GetMenu)
 | 
			
		||||
		rfs.WithTemplateGetter(ms.poResource.GetTemplate)
 | 
			
		||||
	}
 | 
			
		||||
	return rfs, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user