From 945070c0da62af09cc9aa10222e2cedbdda2a20b Mon Sep 17 00:00:00 2001 From: Virgil Date: Wed, 1 Apr 2026 22:30:32 +0000 Subject: [PATCH] feat(i18n): respect subject counts in plural resolution Co-Authored-By: Virgil --- service_test.go | 24 ++++++++++++++++++++++++ transform.go | 5 +++++ 2 files changed, 29 insertions(+) diff --git a/service_test.go b/service_test.go index d564573..ad39154 100644 --- a/service_test.go +++ b/service_test.go @@ -267,6 +267,30 @@ func TestServiceTranslationContextExtrasInTemplates(t *testing.T) { } } +func TestServiceSubjectCountPlurals(t *testing.T) { + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + + if err := svc.loadJSON("en", []byte(`{ + "item_count": { + "one": "{{.Count}} item", + "other": "{{.Count}} items" + } + }`)); err != nil { + t.Fatalf("loadJSON() failed: %v", err) + } + + if got := svc.T("item_count", S("item", "config.yaml").Count(1)); got != "1 item" { + t.Errorf("T(item_count, Count(1)) = %q, want %q", got, "1 item") + } + + if got := svc.T("item_count", S("item", "config.yaml").Count(3)); got != "3 items" { + t.Errorf("T(item_count, Count(3)) = %q, want %q", got, "3 items") + } +} + func TestServiceTemplatesSupportGrammarFuncs(t *testing.T) { svc, err := New() if err != nil { diff --git a/transform.go b/transform.go index 2552ddb..0be9ddd 100644 --- a/transform.go +++ b/transform.go @@ -5,6 +5,11 @@ func getCount(data any) int { return 0 } switch d := data.(type) { + case *Subject: + if d == nil { + return 0 + } + return d.CountInt() case map[string]any: if c, ok := d["Count"]; ok { return toInt(c) -- 2.45.3