diff --git a/modules/templates/util_string.go b/modules/templates/util_string.go index e86bbe9e70..42d11fc990 100644 --- a/modules/templates/util_string.go +++ b/modules/templates/util_string.go @@ -18,3 +18,7 @@ func (su *StringUtils) HasPrefix(s, prefix string) bool { func (su *StringUtils) Contains(s, substr string) bool { return strings.Contains(s, substr) } + +func (su *StringUtils) Split(s, sep string) []string { + return strings.Split(s, sep) +} diff --git a/modules/translation/translation.go b/modules/translation/translation.go index 56cf1df2d4..49dfa84d1b 100644 --- a/modules/translation/translation.go +++ b/modules/translation/translation.go @@ -13,6 +13,7 @@ import ( "code.gitea.io/gitea/modules/options" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/translation/i18n" + "code.gitea.io/gitea/modules/util" "golang.org/x/text/language" "golang.org/x/text/message" @@ -241,5 +242,12 @@ func (l *locale) TrN(cnt any, key1, keyN string, args ...any) string { func (l *locale) PrettyNumber(v any) string { // TODO: this mechanism is not good enough, the complete solution is to switch the translation system to ICU message format + if s, ok := v.(string); ok { + if num, err := util.ToInt64(s); err == nil { + v = num + } else if num, err := util.ToFloat64(s); err == nil { + v = num + } + } return l.msgPrinter.Sprintf("%v", number.Decimal(v)) } diff --git a/modules/translation/translation_test.go b/modules/translation/translation_test.go index 83a40f1458..464aa32661 100644 --- a/modules/translation/translation_test.go +++ b/modules/translation/translation_test.go @@ -21,7 +21,12 @@ func TestPrettyNumber(t *testing.T) { l := NewLocale("id-ID") assert.EqualValues(t, "1.000.000", l.PrettyNumber(1000000)) + assert.EqualValues(t, "1.000.000,1", l.PrettyNumber(1000000.1)) + assert.EqualValues(t, "1.000.000", l.PrettyNumber("1000000")) + assert.EqualValues(t, "1.000.000", l.PrettyNumber("1000000.0")) + assert.EqualValues(t, "1.000.000,1", l.PrettyNumber("1000000.1")) l = NewLocale("nosuch") assert.EqualValues(t, "1,000,000", l.PrettyNumber(1000000)) + assert.EqualValues(t, "1,000,000.1", l.PrettyNumber(1000000.1)) } diff --git a/templates/repo/sub_menu.tmpl b/templates/repo/sub_menu.tmpl index 2be7d47a1c..def6beccb9 100644 --- a/templates/repo/sub_menu.tmpl +++ b/templates/repo/sub_menu.tmpl @@ -15,7 +15,9 @@ {{end}}