From bc4e06109dae33edc0a9a918f244563f05a1a353 Mon Sep 17 00:00:00 2001
From: wxiaoguang <wxiaoguang@gmail.com>
Date: Sat, 29 Apr 2023 05:23:19 +0800
Subject: [PATCH] Make repo size style matches others (commits/branches/tags)
 (#24408)

The "unit" part shouldn't have bold style.
---
 modules/templates/util_string.go        | 4 ++++
 modules/translation/translation.go      | 8 ++++++++
 modules/translation/translation_test.go | 5 +++++
 templates/repo/sub_menu.tmpl            | 4 +++-
 4 files changed, 20 insertions(+), 1 deletion(-)

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 @@
 					</div>
 				{{end}}
 				<div class="item">
-					<span>{{svg "octicon-database"}} <b>{{FileSize .Repository.Size}}</b></span>
+					{{$fileSizeFormatted := FileSize .Repository.Size}}{{/* the formatted string is always "{val} {unit}" */}}
+					{{$fileSizeFields := StringUtils.Split $fileSizeFormatted " "}}
+					<span>{{svg "octicon-database"}} <b>{{.locale.PrettyNumber (index $fileSizeFields 0)}}</b> {{index $fileSizeFields 1}}</span>
 				</div>
 			{{end}}
 		</div>