[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/i18n/RFC.md fully. Find features de... #193

Merged
Virgil merged 1 commit from agent/read---spec-code-core-go-i18n-rfc-md-ful into dev 2026-04-02 10:01:46 +00:00
3 changed files with 44 additions and 0 deletions

View file

@ -123,6 +123,11 @@ func TestCountHandler(t *testing.T) {
t.Errorf("CountHandler.Handle(file, Subject.Count(3)) = %q, want %q", got, "3 files")
}
got = h.Handle("i18n.count.file", []any{map[string]string{"Count": "3"}}, nil)
if got != "3 files" {
t.Errorf("CountHandler.Handle(file, map[string]string[Count:3]) = %q, want %q", got, "3 files")
}
got = h.Handle("i18n.count.file", []any{C("file").Set("Count", 3)}, nil)
if got != "3 files" {
t.Errorf("CountHandler.Handle(file, TranslationContext.Count=3) = %q, want %q", got, "3 files")
@ -249,6 +254,7 @@ func TestNumericHandler(t *testing.T) {
{"i18n.numeric.ordinal", []any{11}, "11th"},
{"i18n.numeric.percent", []any{0.85}, "85%"},
{"i18n.numeric.bytes", []any{int64(1536000)}, "1.46 MB"},
{"i18n.numeric.number", []any{"1234567"}, "1,234,567"},
{"i18n.numeric.ago", []any{5, "minutes"}, "5 minutes ago"},
}

View file

@ -1,5 +1,11 @@
package i18n
import (
"strconv"
"dappco.re/go/core"
)
func getCount(data any) int {
if data == nil {
return 0
@ -40,6 +46,13 @@ func getCount(data any) int {
if c, ok := d["count"]; ok {
return c
}
case map[string]string:
if c, ok := d["Count"]; ok {
return toInt(c)
}
if c, ok := d["count"]; ok {
return toInt(c)
}
}
return toInt(data)
}
@ -73,6 +86,13 @@ func toInt(v any) int {
return int(n)
case float32:
return int(n)
case string:
if n == "" {
return 0
}
if parsed, err := strconv.Atoi(core.Trim(n)); err == nil {
return parsed
}
}
return 0
}
@ -106,6 +126,13 @@ func toInt64(v any) int64 {
return int64(n)
case float32:
return int64(n)
case string:
if n == "" {
return 0
}
if parsed, err := strconv.ParseInt(core.Trim(n), 10, 64); err == nil {
return parsed
}
}
return 0
}
@ -139,6 +166,13 @@ func toFloat64(v any) float64 {
return float64(n)
case uint8:
return float64(n)
case string:
if n == "" {
return 0
}
if parsed, err := strconv.ParseFloat(core.Trim(n), 64); err == nil {
return parsed
}
}
return 0
}

View file

@ -18,6 +18,7 @@ func TestGetCount_Good(t *testing.T) {
{"map_string_any", map[string]any{"Count": 5}, 5},
{"map_string_any_float", map[string]any{"Count": 3.7}, 3},
{"map_string_int", map[string]int{"Count": 42}, 42},
{"map_string_string", map[string]string{"Count": "9"}, 9},
{"no_count_key", map[string]any{"Name": "test"}, 0},
{"wrong_type", "a string", 0},
}
@ -50,6 +51,7 @@ func TestToInt_Good(t *testing.T) {
{"uint8", uint8(50), 50},
{"float64", float64(3.14), 3},
{"float32", float32(2.71), 2},
{"string_int", "123", 123},
{"string", "not a number", 0},
{"bool", true, 0},
}
@ -82,6 +84,7 @@ func TestToInt64_Good(t *testing.T) {
{"uint8", uint8(50), 50},
{"float64", float64(3.14), 3},
{"float32", float32(2.71), 2},
{"string_int64", "123", 123},
{"string", "not a number", 0},
{"bool", true, 0},
}
@ -114,6 +117,7 @@ func TestToFloat64_Good(t *testing.T) {
{"uint32", uint32(30), 30.0},
{"uint16", uint16(40), 40.0},
{"uint8", uint8(50), 50.0},
{"string_float", "3.5", 3.5},
{"string", "not a number", 0},
{"bool", true, 0},
}