commit 349bb87d6b9646be56da97cff81a74c03a71362b
parent 3a212f6626650acab306e2f5568e75f4d2326be9
Author: lash <dev@holbrook.no>
Date: Thu, 2 Jan 2025 08:32:00 +0000
Add separate menu domain in resource gettext
Diffstat:
5 files changed, 49 insertions(+), 12 deletions(-)
diff --git a/dev/walk/main.go b/dev/walk/main.go
@@ -58,12 +58,12 @@ func(tr *translator) ensureFileNameFor(ln lang.Language) (string, error) {
func(tr *translator) Close() error {
var s string
var err error
- for k, v := range(tr.langs) {
+ for _, v := range(tr.langs) {
o, ok := tr.w[v.Code]
if ok {
err = o.Close()
if err != nil {
- s += fmt.Sprintf("\nclose error %s: %v", k, err)
+ s += fmt.Sprintf("\nclose error %s: %v", v.Code, err)
}
}
}
diff --git a/resource/gettext.go b/resource/gettext.go
@@ -8,17 +8,20 @@ import (
"git.defalsify.org/vise.git/lang"
)
+const (
+ templateDomain = "default"
+ menuDomain = "menu"
+)
+
type PoResource struct {
path string
- domain string
defaultLanguage lang.Language
tr map[string]*gotext.Locale
}
-func NewPoResource(defaultLanguage lang.Language, path string, domain string) *PoResource {
+func NewPoResource(defaultLanguage lang.Language, path string) *PoResource {
o := &PoResource {
path: path,
- domain: domain,
defaultLanguage: defaultLanguage,
tr: make(map[string]*gotext.Locale),
}
@@ -27,12 +30,13 @@ func NewPoResource(defaultLanguage lang.Language, path string, domain string) *P
func(p *PoResource) WithLanguage(ln lang.Language) *PoResource {
o := gotext.NewLocale(p.path, ln.Code)
- o.AddDomain(p.domain)
+ o.AddDomain(menuDomain)
+ o.AddDomain(templateDomain)
p.tr[ln.Code] = o
return p
}
-func(p *PoResource) get(ctx context.Context, sym string) (string, error) {
+func(p *PoResource) get(ctx context.Context, sym string, domain string) (string, error) {
s := sym
ln, ok := lang.LanguageFromContext(ctx)
if !ok {
@@ -41,15 +45,15 @@ func(p *PoResource) get(ctx context.Context, sym string) (string, error) {
o, ok := p.tr[ln.Code]
if ok {
logg.TraceCtxf(ctx, "poresource get", "sym", sym, "ln", ln, "path", p.path, "o", o)
- s = o.Get(sym)
+ s = o.GetD(domain, sym)
}
return s, nil
}
func(p *PoResource) GetMenu(ctx context.Context, sym string) (string, error) {
- return p.get(ctx, sym)
+ return p.get(ctx, sym, menuDomain)
}
func(p *PoResource) GetTemplate(ctx context.Context, sym string) (string, error) {
- return p.get(ctx, sym)
+ return p.get(ctx, sym, templateDomain)
}
diff --git a/resource/gettext_test.go b/resource/gettext_test.go
@@ -13,7 +13,7 @@ func TestPoGet(t *testing.T) {
if err != nil {
t.Fatal(err)
}
- rs := NewPoResource(ln, testlocale.LocaleDir, "default")
+ rs := NewPoResource(ln, testlocale.LocaleDir)
ctx := context.WithValue(context.Background(), "Language", ln)
ln, err = lang.LanguageFromCode("eng")
@@ -26,11 +26,19 @@ func TestPoGet(t *testing.T) {
if err != nil {
t.Fatal(err)
}
-
if s != "fu" {
t.Fatalf("expected 'fu', got '%s'", s)
}
+ s, err = rs.GetTemplate(ctx, "foo")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if s != "foo" {
+ t.Fatalf("expected 'foo', got '%s'", s)
+ }
+
+
// eng now
ctx = context.WithValue(context.Background(), "Language", ln)
@@ -46,6 +54,22 @@ func TestPoGet(t *testing.T) {
if err != nil {
t.Fatal(err)
}
+ if s != "bar" {
+ t.Fatalf("expected 'bar', got '%s'", s)
+ }
+
+ s, err = rs.GetMenu(ctx, "inky")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if s != "pinky" {
+ t.Fatalf("expected 'pinky', got '%s'", s)
+ }
+
+ s, err = rs.GetTemplate(ctx, "bar")
+ if err != nil {
+ t.Fatal(err)
+ }
if s != "baz" {
t.Fatalf("expected 'baz', got '%s'", s)
}
diff --git a/testdata/testlocale/eng/menu.po b/testdata/testlocale/eng/menu.po
@@ -0,0 +1,9 @@
+msgid ""
+msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Language: eng\n"
+
+msgid ""
+ "inky"
+msgstr ""
+ "pinky"
diff --git a/testdata/testlocale/nor/default.po b/testdata/testlocale/nor/menu.po