From c7e5ee85124e425cd37c9c8ff65f78e113dd9249 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 05:07:09 +0000 Subject: [PATCH] feat(i18n): add template alias for numeric shorthand Co-Authored-By: Virgil --- grammar.go | 1 + grammar_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/grammar.go b/grammar.go index 365f10a..cd91bec 100644 --- a/grammar.go +++ b/grammar.go @@ -843,6 +843,7 @@ func TemplateFuncs() template.FuncMap { "title": Title, "lower": Lower, "upper": Upper, + "n": N, "past": PastTense, "gerund": Gerund, "plural": Pluralize, diff --git a/grammar_test.go b/grammar_test.go index 80350e3..50af1f3 100644 --- a/grammar_test.go +++ b/grammar_test.go @@ -1001,6 +1001,7 @@ func TestTemplateFuncs(t *testing.T) { "title", "lower", "upper", + "n", "past", "gerund", "plural", @@ -1089,6 +1090,31 @@ func TestTemplateFuncs_PromptAndLang(t *testing.T) { } } +func TestTemplateFuncs_NumericAlias(t *testing.T) { + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + SetDefault(svc) + + tmpl, err := template.New("").Funcs(TemplateFuncs()).Parse( + `{{n "number" 1234567}}|{{n "ago" 3 "hours"}}`, + ) + if err != nil { + t.Fatalf("Parse() failed: %v", err) + } + + var buf strings.Builder + if err := tmpl.Execute(&buf, nil); err != nil { + t.Fatalf("Execute() failed: %v", err) + } + + got := buf.String() + if !strings.HasPrefix(got, "1,234,567|3 hours ago") { + t.Fatalf("template numeric alias = %q, want prefix %q", got, "1,234,567|3 hours ago") + } +} + func TestTemplateFuncs_TimeHelpers(t *testing.T) { svc, err := New() if err != nil {