go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit c09f1190cbace7b16c8f7f80a7b9972488a1fb93
parent 349bb87d6b9646be56da97cff81a74c03a71362b
Author: lash <dev@holbrook.no>
Date:   Thu,  2 Jan 2025 08:41:43 +0000

Generate separate menu file in walker

Diffstat:
Mdev/walk/main.go | 45+++++++++++++++++++++++++++++++--------------
Mresource/gettext.go | 12++++++------
2 files changed, 37 insertions(+), 20 deletions(-)

diff --git a/dev/walk/main.go b/dev/walk/main.go @@ -19,25 +19,24 @@ import ( var ( logg = logging.NewVanilla() - poFilebase = "default" ) type translator struct { langs []lang.Language ctx context.Context rs resource.Resource - fileBase string d string w map[string]io.WriteCloser + mw map[string]io.WriteCloser } -func newTranslator(ctx context.Context, rs resource.Resource, outPath string, filebase string) *translator { +func newTranslator(ctx context.Context, rs resource.Resource, outPath string) *translator { return &translator{ ctx: ctx, rs: rs, d: outPath, w: make(map[string]io.WriteCloser), - fileBase: filebase, + mw: make(map[string]io.WriteCloser), } } @@ -45,8 +44,8 @@ func(tr *translator) applyLanguage(node *debug.Node) { } -func(tr *translator) ensureFileNameFor(ln lang.Language) (string, error) { - fileName := tr.fileBase + ".po" +func(tr *translator) ensureFileNameFor(ln lang.Language, domain string) (string, error) { + fileName := domain + ".po" p := path.Join(tr.d, ln.Code) err := os.MkdirAll(p, 0700) if err != nil { @@ -63,9 +62,17 @@ func(tr *translator) Close() error { if ok { err = o.Close() if err != nil { - s += fmt.Sprintf("\nclose error %s: %v", v.Code, err) + s += fmt.Sprintf("\ntemplate writer close error %s: %v", v.Code, err) } } + o, ok = tr.mw[v.Code] + if ok { + err = o.Close() + if err != nil { + s += fmt.Sprintf("\nmenu writer close error %s: %v", v.Code, err) + } + } + } if len(s) > 0 { err = fmt.Errorf("%s", s) @@ -80,7 +87,7 @@ func(tr *translator) process(s string) error { func(tr *translator) menuFunc(sym string) error { var v string - for k, w := range(tr.w) { + for k, w := range(tr.mw) { var s string ln, err := lang.LanguageFromCode(k) ctx := context.WithValue(tr.ctx, "Language", ln) @@ -137,19 +144,29 @@ msgstr "" } func(tr *translator) AddLang(ln lang.Language) error { - filePath, err := tr.ensureFileNameFor(ln) - if err != nil { - return err - } - w, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0644) s := fmt.Sprintf(`msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language: %s\n" `, ln.Code) + + filePath, err := tr.ensureFileNameFor(ln, resource.TemplatePoDomain) + if err != nil { + return err + } + w, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0644) w.Write([]byte(s)) tr.w[ln.Code] = w + + filePath, err = tr.ensureFileNameFor(ln, resource.MenuPoDomain) + if err != nil { + return err + } + w, err = os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0644) + w.Write([]byte(s)) + tr.mw[ln.Code] = w + return err } @@ -208,7 +225,7 @@ func main() { rs := resource.NewDbResource(rsStore) - tr := newTranslator(ctx, rs, outDir, poFilebase) + tr := newTranslator(ctx, rs, outDir) defer tr.Close() for _, ln := range(langs.Langs()) { logg.DebugCtxf(ctx, "lang", "lang", ln) diff --git a/resource/gettext.go b/resource/gettext.go @@ -9,8 +9,8 @@ import ( ) const ( - templateDomain = "default" - menuDomain = "menu" + TemplatePoDomain = "default" + MenuPoDomain = "menu" ) type PoResource struct { @@ -30,8 +30,8 @@ func NewPoResource(defaultLanguage lang.Language, path string) *PoResource { func(p *PoResource) WithLanguage(ln lang.Language) *PoResource { o := gotext.NewLocale(p.path, ln.Code) - o.AddDomain(menuDomain) - o.AddDomain(templateDomain) + o.AddDomain(MenuPoDomain) + o.AddDomain(TemplatePoDomain) p.tr[ln.Code] = o return p } @@ -51,9 +51,9 @@ func(p *PoResource) get(ctx context.Context, sym string, domain string) (string, } func(p *PoResource) GetMenu(ctx context.Context, sym string) (string, error) { - return p.get(ctx, sym, menuDomain) + return p.get(ctx, sym, MenuPoDomain) } func(p *PoResource) GetTemplate(ctx context.Context, sym string) (string, error) { - return p.get(ctx, sym, templateDomain) + return p.get(ctx, sym, TemplatePoDomain) }