2026-02-16 19:51:27 +00:00
|
|
|
package i18n
|
|
|
|
|
|
2026-04-02 10:01:33 +00:00
|
|
|
import (
|
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
|
|
"dappco.re/go/core"
|
|
|
|
|
)
|
|
|
|
|
|
2026-02-16 19:51:27 +00:00
|
|
|
func getCount(data any) int {
|
|
|
|
|
if data == nil {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
switch d := data.(type) {
|
2026-04-01 22:30:32 +00:00
|
|
|
case *Subject:
|
|
|
|
|
if d == nil {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
return d.CountInt()
|
2026-04-02 02:58:46 +00:00
|
|
|
case *TranslationContext:
|
2026-04-02 07:59:58 +00:00
|
|
|
if d == nil {
|
2026-04-02 02:58:46 +00:00
|
|
|
return 0
|
|
|
|
|
}
|
2026-04-02 07:59:58 +00:00
|
|
|
if count, ok := d.countValue(); ok {
|
|
|
|
|
return count
|
2026-04-02 02:58:46 +00:00
|
|
|
}
|
2026-04-02 07:59:58 +00:00
|
|
|
if d.Extra != nil {
|
|
|
|
|
if c, ok := d.Extra["Count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
|
|
|
|
if c, ok := d.Extra["count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
2026-04-02 02:58:46 +00:00
|
|
|
}
|
2026-04-02 13:41:48 +00:00
|
|
|
return d.count
|
2026-02-16 19:51:27 +00:00
|
|
|
case map[string]any:
|
|
|
|
|
if c, ok := d["Count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
2026-04-02 02:58:46 +00:00
|
|
|
if c, ok := d["count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
2026-02-16 19:51:27 +00:00
|
|
|
case map[string]int:
|
|
|
|
|
if c, ok := d["Count"]; ok {
|
|
|
|
|
return c
|
|
|
|
|
}
|
2026-04-02 02:58:46 +00:00
|
|
|
if c, ok := d["count"]; ok {
|
|
|
|
|
return c
|
|
|
|
|
}
|
2026-04-02 10:01:33 +00:00
|
|
|
case map[string]string:
|
|
|
|
|
if c, ok := d["Count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
|
|
|
|
if c, ok := d["count"]; ok {
|
|
|
|
|
return toInt(c)
|
|
|
|
|
}
|
2026-02-16 19:51:27 +00:00
|
|
|
}
|
2026-04-02 01:41:43 +00:00
|
|
|
return toInt(data)
|
2026-02-16 19:51:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func toInt(v any) int {
|
|
|
|
|
if v == nil {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
switch n := v.(type) {
|
|
|
|
|
case int:
|
|
|
|
|
return n
|
|
|
|
|
case int64:
|
|
|
|
|
return int(n)
|
|
|
|
|
case int32:
|
|
|
|
|
return int(n)
|
|
|
|
|
case int16:
|
|
|
|
|
return int(n)
|
|
|
|
|
case int8:
|
|
|
|
|
return int(n)
|
|
|
|
|
case uint:
|
|
|
|
|
return int(n)
|
|
|
|
|
case uint64:
|
|
|
|
|
return int(n)
|
|
|
|
|
case uint32:
|
|
|
|
|
return int(n)
|
|
|
|
|
case uint16:
|
|
|
|
|
return int(n)
|
|
|
|
|
case uint8:
|
|
|
|
|
return int(n)
|
|
|
|
|
case float64:
|
|
|
|
|
return int(n)
|
|
|
|
|
case float32:
|
|
|
|
|
return int(n)
|
2026-04-02 10:01:33 +00:00
|
|
|
case string:
|
|
|
|
|
if n == "" {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
if parsed, err := strconv.Atoi(core.Trim(n)); err == nil {
|
|
|
|
|
return parsed
|
|
|
|
|
}
|
2026-02-16 19:51:27 +00:00
|
|
|
}
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func toInt64(v any) int64 {
|
|
|
|
|
if v == nil {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
switch n := v.(type) {
|
|
|
|
|
case int:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case int64:
|
|
|
|
|
return n
|
|
|
|
|
case int32:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case int16:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case int8:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case uint:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case uint64:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case uint32:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case uint16:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case uint8:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case float64:
|
|
|
|
|
return int64(n)
|
|
|
|
|
case float32:
|
|
|
|
|
return int64(n)
|
2026-04-02 10:01:33 +00:00
|
|
|
case string:
|
|
|
|
|
if n == "" {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
if parsed, err := strconv.ParseInt(core.Trim(n), 10, 64); err == nil {
|
|
|
|
|
return parsed
|
|
|
|
|
}
|
2026-02-16 19:51:27 +00:00
|
|
|
}
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func toFloat64(v any) float64 {
|
|
|
|
|
if v == nil {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
switch n := v.(type) {
|
|
|
|
|
case float64:
|
|
|
|
|
return n
|
|
|
|
|
case float32:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case int:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case int64:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case int32:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case int16:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case int8:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case uint:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case uint64:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case uint32:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case uint16:
|
|
|
|
|
return float64(n)
|
|
|
|
|
case uint8:
|
|
|
|
|
return float64(n)
|
2026-04-02 10:01:33 +00:00
|
|
|
case string:
|
|
|
|
|
if n == "" {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
if parsed, err := strconv.ParseFloat(core.Trim(n), 64); err == nil {
|
|
|
|
|
return parsed
|
|
|
|
|
}
|
2026-02-16 19:51:27 +00:00
|
|
|
}
|
|
|
|
|
return 0
|
|
|
|
|
}
|