mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-04 13:50:39 +00:00
Refactor locale&string&template related code (#29165)
Clarify when "string" should be used (and be escaped), and when "template.HTML" should be used (no need to escape) And help PRs like #29059 , to render the error messages correctly. (cherry picked from commit f3eb835886031df7a562abc123c3f6011c81eca8) Conflicts: modules/web/middleware/binding.go routers/web/feed/convert.go tests/integration/branches_test.go tests/integration/repo_branch_test.go trivial context conflicts
This commit is contained in:
parent
d565d85160
commit
65248945c9
78 changed files with 359 additions and 286 deletions
|
@ -5,6 +5,7 @@ package translation
|
|||
|
||||
import (
|
||||
"context"
|
||||
"html/template"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
|
@ -27,8 +28,11 @@ var ContextKey any = &contextKey{}
|
|||
// Locale represents an interface to translation
|
||||
type Locale interface {
|
||||
Language() string
|
||||
Tr(string, ...any) string
|
||||
TrN(cnt any, key1, keyN string, args ...any) string
|
||||
TrString(string, ...any) string
|
||||
|
||||
Tr(key string, args ...any) template.HTML
|
||||
TrN(cnt any, key1, keyN string, args ...any) template.HTML
|
||||
|
||||
PrettyNumber(v any) string
|
||||
}
|
||||
|
||||
|
@ -144,6 +148,8 @@ type locale struct {
|
|||
msgPrinter *message.Printer
|
||||
}
|
||||
|
||||
var _ Locale = (*locale)(nil)
|
||||
|
||||
// NewLocale return a locale
|
||||
func NewLocale(lang string) Locale {
|
||||
if lock != nil {
|
||||
|
@ -216,8 +222,12 @@ var trNLangRules = map[string]func(int64) int{
|
|||
},
|
||||
}
|
||||
|
||||
func (l *locale) Tr(s string, args ...any) template.HTML {
|
||||
return l.TrHTML(s, args...)
|
||||
}
|
||||
|
||||
// TrN returns translated message for plural text translation
|
||||
func (l *locale) TrN(cnt any, key1, keyN string, args ...any) string {
|
||||
func (l *locale) TrN(cnt any, key1, keyN string, args ...any) template.HTML {
|
||||
var c int64
|
||||
if t, ok := cnt.(int); ok {
|
||||
c = int64(t)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue