diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index c5434b7c632ed..8f166af28611c 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -49,6 +49,8 @@ import (
"code.gitea.io/gitea/services/gitdiff"
"github.com/editorconfig/editorconfig-core-go/v2"
+ "golang.org/x/text/language"
+ "golang.org/x/text/message"
)
// Used from static.go && dynamic.go
@@ -170,6 +172,7 @@ func NewFuncMap() []template.FuncMap {
"RenderEmojiPlain": emoji.ReplaceAliases,
"ReactionToEmoji": ReactionToEmoji,
"RenderNote": RenderNote,
+ "RenderNumber": RenderNumber,
"RenderMarkdownToHtml": func(input string) template.HTML {
output, err := markdown.RenderString(&markup.RenderContext{
URLPrefix: setting.AppSubURL,
@@ -782,6 +785,13 @@ func RenderCodeBlock(htmlEscapedTextToRender template.HTML) template.HTML {
return template.HTML(htmlWithCodeTags)
}
+// RenderNumber render any number according to the given language code (e.g. 1234 -> 1,234)
+// Should RenderNumber, JsPrettyNumber, and CountFmt coexist on this codebase? RenderNumber is server-rendered and localized
+func RenderNumber(number int64, languageCode string) template.HTML {
+ formatter := message.NewPrinter(language.MustParse(languageCode))
+ return template.HTML(formatter.Sprintf("%d", number))
+}
+
// RenderIssueTitle renders issue/pull title with defined post processors
func RenderIssueTitle(ctx context.Context, text, urlPrefix string, metas map[string]string) template.HTML {
renderedText, err := markup.RenderIssueTitle(&markup.RenderContext{
diff --git a/templates/code/searchresults.tmpl b/templates/code/searchresults.tmpl
index e21a50e1f12df..4651263139bac 100644
--- a/templates/code/searchresults.tmpl
+++ b/templates/code/searchresults.tmpl
@@ -3,7 +3,7 @@
{{$term.Language}}
-