Skip to content

Commit f825f16

Browse files
committed
Merge remote-tracking branch 'upstream/main'
* upstream/main: [skip ci] Updated translations via Crowdin Add username check to doctor (go-gitea#20140) Refactor `i18n` to `locale` (go-gitea#20153) Remove support for sr-SP (go-gitea#20155) Hide notify mail setting ui if not enabled (go-gitea#20138) Fix custom folder name in customization docs (go-gitea#20148) Add missing parameter for error in log message (go-gitea#20144) Show scrollbar when necessary (go-gitea#20142) # Conflicts: # templates/repo/issue/view_content/context_menu.tmpl
2 parents a6e2da9 + cdd6371 commit f825f16

File tree

305 files changed

+3720
-3675
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

305 files changed

+3720
-3675
lines changed

custom/conf/app.example.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2113,7 +2113,7 @@ PATH =
21132113
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
21142114
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
21152115
;; The first locale will be used as the default if user browser's language doesn't match any locale in the list.
2116-
;LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN
2116+
;LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN
21172117
;NAMES = English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം
21182118

21192119
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

docs/content/doc/advanced/config-cheat-sheet.en-us.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,7 @@ Default templates for project boards:
999999

10001000
## i18n (`i18n`)
10011001

1002-
- `LANGS`: **en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN**:
1002+
- `LANGS`: **en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN**:
10031003
List of locales shown in language selector. The first locale will be used as the default if user browser's language doesn't match any locale in the list.
10041004
- `NAMES`: **English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം**: Visible names corresponding to the locales
10051005

docs/content/doc/advanced/customizing-gitea.en-us.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,8 @@ The list of themes a user can choose from can be configured with the `THEMES` va
335335

336336
To make a custom theme available to all users:
337337

338-
1. Add a CSS file to `$GITEA_PUBLIC/public/css/theme-<theme-name>.css`.
339-
The value of `$GITEA_PUBLIC` of your instance can be queried by calling `gitea help` and looking up the value of "CustomPath".
338+
1. Add a CSS file to `$GITEA_CUSTOM/public/css/theme-<theme-name>.css`.
339+
The value of `$GITEA_CUSTOM` of your instance can be queried by calling `gitea help` and looking up the value of "CustomPath".
340340
2. Add `<theme-name>` to the comma-separated list of setting `THEMES` in `app.ini`
341341

342342
Community themes are listed in [gitea/awesome-gitea#themes](https://gitea.com/gitea/awesome-gitea#themes).

modules/context/context.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ func Contexter() func(next http.Handler) http.Handler {
794794
ctx.Data["UnitPullsGlobalDisabled"] = unit.TypePullRequests.UnitGlobalDisabled()
795795
ctx.Data["UnitProjectsGlobalDisabled"] = unit.TypeProjects.UnitGlobalDisabled()
796796

797-
ctx.Data["i18n"] = locale
797+
ctx.Data["locale"] = locale
798798
ctx.Data["AllLangs"] = translation.AllLangs()
799799

800800
next.ServeHTTP(ctx.Resp, ctx.Req)

modules/doctor/breaking.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,29 @@ func checkUserEmail(ctx context.Context, logger log.Logger, _ bool) error {
5858
return nil
5959
}
6060

61+
// From time to time Gitea makes changes to the reserved usernames and which symbols
62+
// are allowed for various reasons. This check helps with detecting users that, according
63+
// to our reserved names, don't have a valid username.
64+
func checkUserName(ctx context.Context, logger log.Logger, _ bool) error {
65+
var invalidUserCount int64
66+
if err := iterateUserAccounts(ctx, func(u *user.User) error {
67+
if err := user.IsUsableUsername(u.Name); err != nil {
68+
invalidUserCount++
69+
logger.Warn("User[id=%d] does not have a valid username: %v", u.ID, err)
70+
}
71+
return nil
72+
}); err != nil {
73+
return fmt.Errorf("iterateUserAccounts: %v", err)
74+
}
75+
76+
if invalidUserCount == 0 {
77+
logger.Info("All users have a valid username.")
78+
} else {
79+
logger.Warn("%d user(s) have a non-valid username.", invalidUserCount)
80+
}
81+
return nil
82+
}
83+
6184
func init() {
6285
Register(&Check{
6386
Title: "Check if users has an valid email address",
@@ -66,4 +89,11 @@ func init() {
6689
Run: checkUserEmail,
6790
Priority: 9,
6891
})
92+
Register(&Check{
93+
Title: "Check if users have a valid username",
94+
Name: "check-user-names",
95+
IsDefault: false,
96+
Run: checkUserName,
97+
Priority: 9,
98+
})
6999
}

modules/setting/i18n.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ var defaultI18nLangNames = []string{
2626
"fi-FI", "Suomi",
2727
"tr-TR", "Türkçe",
2828
"cs-CZ", "Čeština",
29-
"sr-SP", "Српски",
3029
"sv-SE", "Svenska",
3130
"ko-KR", "한국어",
3231
"el-GR", "Ελληνικά",

options/locale/locale_cs-CZ.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ webauthn_error_unable_to_process=Server nemohl zpracovat váš požadavek.
4646
webauthn_error_duplicated=Zabezpečovací klíč není pro tento požadavek povolen. Prosím ujistěte se, zda klíč není již registrován.
4747
webauthn_error_empty=Musíte nastavit název tohoto klíče.
4848
webauthn_error_timeout=Požadavek vypršel dříve, než se podařilo přečíst váš klíč. Znovu načtěte tuto stránku a akci opakujte.
49+
webauthn_u2f_deprecated=Klíč: „%s“ autentifikuje pomocí zastaralého procesu U2F. Měli byste znovu zaregistrovat tento klíč a zrušit starou registraci.
4950
webauthn_reload=Znovu načíst
5051

5152
repository=Repozitář

options/locale/locale_de-DE.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=Der Server konnte deine Anfrage nicht bearbeite
4747
webauthn_error_duplicated=Für diese Anfrage ist der Sicherheitsschlüssel nicht erlaubt. Bitte stell sicher, dass er nicht bereits registriert ist.
4848
webauthn_error_empty=Du musst einen Namen für diesen Schlüssel festlegen.
4949
webauthn_error_timeout=Das Zeitlimit wurde erreicht, bevor dein Schlüssel gelesen werden konnte. Bitte lade die Seite erneut.
50+
webauthn_u2f_deprecated=Der Schlüssel: '%s' authentifiziert sich über den veralteten U2F-Prozess. Bitte registriere den Schlüssel neu und lösche die alte Registrierung.
5051
webauthn_reload=Neu laden
5152

5253
repository=Repository

options/locale/locale_el-GR.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=Ο διακομιστής δεν μπόρεσε
4747
webauthn_error_duplicated=Το κλειδί ασφαλείας δεν επιτρέπεται για αυτό το αίτημα. Βεβαιωθείτε ότι το κλειδί δεν έχει ήδη καταχωρηθεί.
4848
webauthn_error_empty=Πρέπει να ορίσετε ένα όνομα για αυτό το κλειδί.
4949
webauthn_error_timeout=Το χρονικό όριο έφτασε πριν το κλειδί να διαβαστεί. Παρακαλώ ανανεώστε τη σελίδα και προσπαθήστε ξανά.
50+
webauthn_u2f_deprecated=Το κλειδί: '%s' πιστοποιεί χρησιμοποιώντας το παρωχημένο πρωτόκολλο U2F. Θα πρέπει να καταχωρήσετε ξανά αυτό το κλειδί και να καταργήσετε την παλιά εγγραφή.
5051
webauthn_reload=Ανανέωση
5152

5253
repository=Αποθετήριο

options/locale/locale_es-ES.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=El servidor no pudo procesar su solicitud.
4747
webauthn_error_duplicated=La clave de seguridad no está permitida para esta solicitud. Por favor, asegúrese de que la clave no está ya registrada.
4848
webauthn_error_empty=Debe establecer un nombre para esta clave.
4949
webauthn_error_timeout=Tiempo de espera máximo alcanzado antes de que su clave pudiese ser leída. Por favor, cargue la página y vuelva a intentarlo.
50+
webauthn_u2f_deprecated=La clave: '%s' se autentifica usando el proceso U2F obsoleto. Debe volver a registrar esta clave y eliminar el registro antiguo.
5051
webauthn_reload=Recargar
5152

5253
repository=Repositorio

options/locale/locale_is-IS.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ webauthn_error_unable_to_process=Netþjónninn gat ekki ráðið við beiðni þ
4646
webauthn_error_duplicated=Öryggislykillinn er ekki leyfður fyrir þessa beiðni. Gakktu úr skugga um að lykillinn sé ekki þegar skráður.
4747
webauthn_error_empty=Þú verður að setja nafn fyrir þennan lykil.
4848
webauthn_error_timeout=Tímamörk náð áður en hægt var að lesa lykilinn þinn. Vinsamlegast endurhlaðið þessa síðu og reyndu aftur.
49+
webauthn_u2f_deprecated=Lykillinn: „%s“ auðkennir með því að nota úrelta U2F aðferð. Þú ættir að endurskrá þennan lykil og fjarlægja gömlu skráninguna.
4950
webauthn_reload=Endurhlaða
5051

5152
repository=Hugbúnaðarsafn

options/locale/locale_ja-JP.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=サーバーがリクエストを処理でき
4747
webauthn_error_duplicated=このリクエストに対しては、許可されていないセキュリティキーです。 キーが未登録であることを確認してください。
4848
webauthn_error_empty=このキーに名前を設定する必要があります。
4949
webauthn_error_timeout=キーを読み取る前にタイムアウトになりました。 このページをリロードしてもう一度やり直してください。
50+
webauthn_u2f_deprecated=キー: '%s' は非推奨のU2Fプロセスを使用して認証しています。このキーを再登録して古い登録を削除したほうが良いでしょう。
5051
webauthn_reload=リロード
5152

5253
repository=リポジトリ

options/locale/locale_lv-LV.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=Serveris nevar apstrādāt Jūsu pieprasījumu.
4747
webauthn_error_duplicated=Drošības atslēga nav atļauta šim pieprasījumam. Pārliecinieties, ka šī atslēga jau nav reģistrēta.
4848
webauthn_error_empty=Norādiet atslēgas nosaukumu.
4949
webauthn_error_timeout=Iestājusies noildze, mēģinot, nolasīt atslēgu. Pārlādējiet lapu un mēģiniet vēlreiz.
50+
webauthn_u2f_deprecated=Atslēga '%s' izmanto novecojušu U2F procesu. Noņemiet iepriekšējo reģistrāciju un veiciet reģistrācijas procesu no jauna.
5051
webauthn_reload=Pārlādēt
5152

5253
repository=Repozitorijs

options/locale/locale_pl-PL.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ webauthn_error_unable_to_process=Serwer nie mógł obsłużyć Twojego żądania
4646
webauthn_error_duplicated=Klucz bezpieczeństwa nie jest dozwolony dla tego żądania. Upewnij się, że klucz nie jest już zarejestrowany.
4747
webauthn_error_empty=Musisz ustawić nazwę dla tego klucza.
4848
webauthn_error_timeout=Osiągnięto limit czasu zanim Twój klucz może zostać odczytany. Odśwież stronę i spróbuj ponownie.
49+
webauthn_u2f_deprecated=Klucz '%s' uwierzytelnia przy użyciu przestarzałego procesu U2F. Powinieneś ponownie zarejestrować ten klucz i usunąć starą rejestrację.
4950
webauthn_reload=Odśwież
5051

5152
repository=Repozytorium

options/locale/locale_pt-BR.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ webauthn_error_unable_to_process=O servidor não pôde processar sua solicitaç
4646
webauthn_error_duplicated=A chave de segurança não é permitida para esta solicitação. Por favor, certifique-se que a chave já não está registrada.
4747
webauthn_error_empty=Você deve definir um nome para esta chave.
4848
webauthn_error_timeout=Tempo limite atingido antes de sua chave poder ser lida. Por favor, recarregue esta página e tente novamente.
49+
webauthn_u2f_deprecated=A chave: '%s' autentica utilizando o processo U2F descontinuado. Você deve registrar novamente esta chave e remover o registro antigo.
4950
webauthn_reload=Recarregar
5051

5152
repository=Repositório

options/locale/locale_pt-PT.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=O servidor não conseguiu processar o seu pedid
4747
webauthn_error_duplicated=A chave de segurança não é permitida neste pedido. Certifique-se de que a chave não está já registada.
4848
webauthn_error_empty=Você tem que definir um nome para esta chave.
4949
webauthn_error_timeout=O tempo limite foi atingido antes que a sua chave pudesse ser lida. Recarregue esta página e tente novamente.
50+
webauthn_u2f_deprecated=A chave: '%s' autentica usando o processo U2F, mas este foi descontinuado. Você deveria registar novamente esta chave e remover o registo antigo.
5051
webauthn_reload=Recarregar
5152

5253
repository=Repositório

options/locale/locale_zh-CN.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=服务器无法处理您的请求。
4747
webauthn_error_duplicated=此安全密钥未被许可用于这个请求。请确保该密钥尚未注册。
4848
webauthn_error_empty=您必须为此密钥设置一个名称。
4949
webauthn_error_timeout=未能在允许的时限内读取密钥。请重新加载此页面并重试。
50+
webauthn_u2f_deprecated=密钥 '%s' 使用的是已经废弃的 U2F 进行身份验证。您应该重新注册此密钥并删除旧的注册。
5051
webauthn_reload=重新加载
5152

5253
repository=仓库

options/locale/locale_zh-TW.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ webauthn_error_unable_to_process=伺服器無法執行您的請求。
4747
webauthn_error_duplicated=此請求不允許使用這個安全金鑰。請確保該金鑰尚未註冊。
4848
webauthn_error_empty=您必須命名此金鑰。
4949
webauthn_error_timeout=在成功讀取金鑰之前已逾時,請重新載入此頁面並重試。
50+
webauthn_u2f_deprecated=「%s」金鑰使用已廢棄的 U2F 流程進行驗證。您應該重新註冊此金鑰並將先前註冊的移除。
5051
webauthn_reload=重新載入
5152

5253
repository=儲存庫

routers/install/install.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func Init(next http.Handler) http.Handler {
6969
Render: rnd,
7070
Session: session.GetSession(req),
7171
Data: map[string]interface{}{
72-
"i18n": locale,
72+
"locale": locale,
7373
"Title": locale.Tr("install.install"),
7474
"PageIsInstall": true,
7575
"DbTypeNames": dbTypeNames,

routers/install/routes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func installRecovery() func(next http.Handler) http.Handler {
5757
store := dataStore{
5858
"Language": lc.Language(),
5959
"CurrentURL": setting.AppSubURL + req.URL.RequestURI(),
60-
"i18n": lc,
60+
"locale": lc,
6161
"SignedUserID": int64(0),
6262
"SignedUserName": "",
6363
}

routers/private/hook_pre_receive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ func (ctx *preReceiveContext) loadPusherAndPermission() bool {
477477

478478
userPerm, err := access_model.GetUserRepoPermission(ctx, ctx.Repo.Repository, user)
479479
if err != nil {
480-
log.Error("Unable to get Repo permission of repo %s/%s of User %s", ctx.Repo.Repository.OwnerName, ctx.Repo.Repository.Name, user.Name, err)
480+
log.Error("Unable to get Repo permission of repo %s/%s of User %s: %v", ctx.Repo.Repository.OwnerName, ctx.Repo.Repository.Name, user.Name, err)
481481
ctx.JSON(http.StatusInternalServerError, private.Response{
482482
Err: fmt.Sprintf("Unable to get Repo permission of repo %s/%s of User %s: %v", ctx.Repo.Repository.OwnerName, ctx.Repo.Repository.Name, user.Name, err),
483483
})

routers/web/base.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func Recovery() func(next http.Handler) http.Handler {
139139
store := dataStore{
140140
"Language": lc.Language(),
141141
"CurrentURL": setting.AppSubURL + req.URL.RequestURI(),
142-
"i18n": lc,
142+
"locale": lc,
143143
}
144144

145145
user := context.GetContextUser(req)

routers/web/user/setting/account.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func Account(ctx *context.Context) {
3434
ctx.Data["Title"] = ctx.Tr("settings")
3535
ctx.Data["PageIsSettingsAccount"] = true
3636
ctx.Data["Email"] = ctx.Doer.Email
37+
ctx.Data["EnableNotifyMail"] = setting.Service.EnableNotifyMail
3738

3839
loadAccountData(ctx)
3940

services/mailer/mail.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func sendUserMail(language string, u *user_model.User, tpl base.TplName, code, s
8080
"Code": code,
8181
"Language": locale.Language(),
8282
// helper
83-
"i18n": locale,
83+
"locale": locale,
8484
"Str2html": templates.Str2html,
8585
"DotEscape": templates.DotEscape,
8686
}
@@ -131,7 +131,7 @@ func SendActivateEmailMail(u *user_model.User, email *user_model.EmailAddress) {
131131
"Email": email.Email,
132132
"Language": locale.Language(),
133133
// helper
134-
"i18n": locale,
134+
"locale": locale,
135135
"Str2html": templates.Str2html,
136136
"DotEscape": templates.DotEscape,
137137
}
@@ -162,7 +162,7 @@ func SendRegisterNotifyMail(u *user_model.User) {
162162
"Username": u.Name,
163163
"Language": locale.Language(),
164164
// helper
165-
"i18n": locale,
165+
"locale": locale,
166166
"Str2html": templates.Str2html,
167167
"DotEscape": templates.DotEscape,
168168
}
@@ -196,7 +196,7 @@ func SendCollaboratorMail(u, doer *user_model.User, repo *repo_model.Repository)
196196
"Link": repo.HTMLURL(),
197197
"Language": locale.Language(),
198198
// helper
199-
"i18n": locale,
199+
"locale": locale,
200200
"Str2html": templates.Str2html,
201201
"DotEscape": templates.DotEscape,
202202
}
@@ -281,7 +281,7 @@ func composeIssueCommentMessages(ctx *mailCommentContext, lang string, recipient
281281
"ReviewComments": reviewComments,
282282
"Language": locale.Language(),
283283
// helper
284-
"i18n": locale,
284+
"locale": locale,
285285
"Str2html": templates.Str2html,
286286
"DotEscape": templates.DotEscape,
287287
}

services/mailer/mail_release.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func mailNewRelease(ctx context.Context, lang string, tos []string, rel *models.
7575
"Subject": subject,
7676
"Language": locale.Language(),
7777
// helper
78-
"i18n": locale,
78+
"locale": locale,
7979
"Str2html": templates.Str2html,
8080
"DotEscape": templates.DotEscape,
8181
}

services/mailer/mail_repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func sendRepoTransferNotifyMailPerLang(lang string, newOwner, doer *user_model.U
7474
"Language": locale.Language(),
7575
"Destination": destination,
7676
// helper
77-
"i18n": locale,
77+
"locale": locale,
7878
"Str2html": templates.Str2html,
7979
"DotEscape": templates.DotEscape,
8080
}

0 commit comments

Comments
 (0)