Refactor i18n, use Locale to provide i18n/translation related functions (#18648)

* remove unnecessary web context data fields, and unify the i18n/translation related functions to `Locale`
* in development, show an error if a translation key is missing
* remove the unnecessary loops `for _, lang := range translation.AllLangs()` for every request, which improves the performance slightly
* use `ctx.Locale.Language()` instead of `ctx.Data["Lang"].(string)`
* add more comments about how the Locale/LangType fields are used
This commit is contained in:
wxiaoguang 2022-02-08 11:02:30 +08:00 committed by GitHub
parent 7b25a010c8
commit a60e8be8d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 75 additions and 75 deletions

View file

@ -131,7 +131,7 @@
{{if not .IsTag}}
<a class="title" href="{{$.RepoLink}}/src/{{.TagName | PathEscapeSegments}}">{{.Title | RenderEmoji}}</a>
{{end}}
{{TimeSinceUnix .CreatedUnix $.Lang}}
{{TimeSinceUnix .CreatedUnix $.i18n.Lang}}
</p>
{{end}}
</div>
@ -150,7 +150,7 @@
<p class="desc">
<span class="ui purple label">{{$.i18n.Tr "repo.activity.merged_prs_label"}}</span>
#{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | RenderEmoji}}</a>
{{TimeSinceUnix .MergedUnix $.Lang}}
{{TimeSinceUnix .MergedUnix $.i18n.Lang}}
</p>
{{end}}
</div>
@ -169,7 +169,7 @@
<p class="desc">
<span class="ui green label">{{$.i18n.Tr "repo.activity.opened_prs_label"}}</span>
#{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | RenderEmoji}}</a>
{{TimeSinceUnix .Issue.CreatedUnix $.Lang}}
{{TimeSinceUnix .Issue.CreatedUnix $.i18n.Lang}}
</p>
{{end}}
</div>
@ -188,7 +188,7 @@
<p class="desc">
<span class="ui red label">{{$.i18n.Tr "repo.activity.closed_issue_label"}}</span>
#{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji}}</a>
{{TimeSinceUnix .ClosedUnix $.Lang}}
{{TimeSinceUnix .ClosedUnix $.i18n.Lang}}
</p>
{{end}}
</div>
@ -207,7 +207,7 @@
<p class="desc">
<span class="ui green label">{{$.i18n.Tr "repo.activity.new_issue_label"}}</span>
#{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji}}</a>
{{TimeSinceUnix .CreatedUnix $.Lang}}
{{TimeSinceUnix .CreatedUnix $.i18n.Lang}}
</p>
{{end}}
</div>
@ -231,7 +231,7 @@
{{else}}
<a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji}}</a>
{{end}}
{{TimeSinceUnix .UpdatedUnix $.Lang}}
{{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}
</p>
{{end}}
</div>

View file

@ -47,7 +47,7 @@
{{avatarByEmail .Commit.Author.Email .Commit.Author.Email 28 "mr-3"}}
<strong>{{.Commit.Author.Name}}</strong>
{{end}}
<span class="text grey ml-3" id="authored-time">{{TimeSince .Commit.Author.When $.Lang}}</span>
<span class="text grey ml-3" id="authored-time">{{TimeSince .Commit.Author.When $.i18n.Lang}}</span>
{{if or (ne .Commit.Committer.Name .Commit.Author.Name) (ne .Commit.Committer.Email .Commit.Author.Email)}}
<span class="text grey mx-3">{{.i18n.Tr "repo.diff.committed_by"}}</span>
{{if ne .Verification.CommittingUser.ID 0}}
@ -169,7 +169,7 @@
{{else}}
<strong>{{.NoteCommit.Author.Name}}</strong>
{{end}}
<span class="text grey" id="note-authored-time">{{TimeSince .NoteCommit.Author.When $.Lang}}</span>
<span class="text grey" id="note-authored-time">{{TimeSince .NoteCommit.Author.When $.i18n.Lang}}</span>
</div>
<div class="ui bottom attached info segment git-notes">
<pre class="commit-body">{{RenderNote $.Context .Note $.RepoLink $.Repository.ComposeMetas}}</pre>

View file

@ -76,9 +76,9 @@
{{end}}
</td>
{{if .Committer}}
<td class="text right aligned">{{TimeSince .Committer.When $.Lang}}</td>
<td class="text right aligned">{{TimeSince .Committer.When $.i18n.Lang}}</td>
{{else}}
<td class="text right aligned">{{TimeSince .Author.When $.Lang}}</td>
<td class="text right aligned">{{TimeSince .Author.When $.i18n.Lang}}</td>
{{end}}
</tr>
{{end}}

View file

@ -1,6 +1,6 @@
{{range .comments}}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.root.Lang }}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.root.i18n.Lang }}
<div class="comment" id="{{.HashTag}}">
{{if .OriginalAuthor }}
<span class="avatar"><img src="{{AppSubUrl}}/assets/img/avatar_default.png"></span>

View file

@ -22,7 +22,7 @@
</div>
<div class="ui one column stackable grid">
<div class="column">
{{ $closedDate:= TimeSinceUnix .Milestone.ClosedDateUnix $.Lang }}
{{ $closedDate:= TimeSinceUnix .Milestone.ClosedDateUnix $.i18n.Lang }}
{{if .IsClosed}}
{{svg "octicon-clock"}} {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}}
{{else}}

View file

@ -68,7 +68,7 @@
</div>
</div>
<div class="meta">
{{ $closedDate:= TimeSinceUnix .ClosedDateUnix $.Lang }}
{{ $closedDate:= TimeSinceUnix .ClosedDateUnix $.i18n.Lang }}
{{if .IsClosed}}
{{svg "octicon-clock"}} {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}}
{{else}}

View file

@ -15,7 +15,7 @@
<input type="hidden" id="issueIndex" value="{{.Issue.Index}}"/>
<input type="hidden" id="type" value="{{.IssueType}}">
{{ $createdStr:= TimeSinceUnix .Issue.CreatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .Issue.CreatedUnix $.i18n.Lang }}
<div class="twelve wide column comment-list prevent-before-timeline">
<ui class="ui timeline">
<div id="{{.Issue.HashTag}}" class="timeline-item comment first">

View file

@ -1,7 +1,7 @@
{{ template "base/alert" }}
{{range .Issue.Comments}}
{{if call $.ShouldShowCommentType .Type}}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.i18n.Lang }}
<!-- 0 = COMMENT, 1 = REOPEN, 2 = CLOSE, 3 = ISSUE_REF, 4 = COMMIT_REF,
5 = COMMENT_REF, 6 = PULL_REF, 7 = COMMENT_LABEL, 12 = START_TRACKING,
@ -146,7 +146,7 @@
{{else if eq .RefAction 2 }}
{{ $refTr = "repo.issues.ref_reopening_from" }}
{{end}}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .CreatedUnix $.i18n.Lang }}
<div class="timeline-item event" id="{{.HashTag}}">
<span class="badge">{{svg "octicon-bookmark"}}</span>
<a href="{{.Poster.HomeLink}}">
@ -557,7 +557,7 @@
<div id="code-comments-{{(index $comms 0).ID}}" class="comment-code-cloud ui segment{{if $resolved}} hide{{end}}">
<div class="ui comments mb-0">
{{range $comms}}
{{ $createdSubStr:= TimeSinceUnix .CreatedUnix $.Lang }}
{{ $createdSubStr:= TimeSinceUnix .CreatedUnix $.i18n.Lang }}
<div class="comment code-comment pb-4" id="{{.HashTag}}">
<div class="content">
<div class="header comment-header">

View file

@ -4,7 +4,7 @@
<div class="ui segment">
<h4>{{$.i18n.Tr "repo.issues.review.reviewers"}}</h4>
{{range .PullReviewers}}
{{ $createdStr:= TimeSinceUnix .Review.UpdatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .Review.UpdatedUnix $.i18n.Lang }}
<div class="ui divider"></div>
<div class="review-item">
<div class="review-item-left">
@ -82,7 +82,7 @@
</div>
{{end}}
{{range .OriginalReviews}}
{{ $createdStr:= TimeSinceUnix .UpdatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .UpdatedUnix $.i18n.Lang }}
<div class="ui divider"></div>
<div class="review-item">
<div class="review-item-left">

View file

@ -40,7 +40,7 @@
{{$baseHref = printf "<a href=\"%s\">%s</a>" (.BaseBranchHTMLURL | Escape) $baseHref}}
{{end}}
{{if .Issue.PullRequest.HasMerged}}
{{ $mergedStr:= TimeSinceUnix .Issue.PullRequest.MergedUnix $.Lang }}
{{ $mergedStr:= TimeSinceUnix .Issue.PullRequest.MergedUnix $.i18n.Lang }}
{{if .Issue.OriginalAuthor }}
{{.Issue.OriginalAuthor}}
<span class="pull-desc">{{$.i18n.Tr "repo.pulls.merged_title_desc" .NumCommits $headHref $baseHref $mergedStr | Safe}}</span>
@ -88,7 +88,7 @@
</span>
{{end}}
{{else}}
{{ $createdStr:= TimeSinceUnix .Issue.CreatedUnix $.Lang }}
{{ $createdStr:= TimeSinceUnix .Issue.CreatedUnix $.i18n.Lang }}
<span class="time-desc">
{{if .Issue.OriginalAuthor }}
{{$.i18n.Tr "repo.issues.opened_by_fake" $createdStr (.Issue.OriginalAuthor|Escape) | Safe}}

View file

@ -42,7 +42,7 @@
<li class="item">
{{svg "octicon-project"}} <a href="{{$.RepoLink}}/projects/{{.ID}}">{{.Title}}</a>
<div class="meta">
{{ $closedDate:= TimeSinceUnix .ClosedDateUnix $.Lang }}
{{ $closedDate:= TimeSinceUnix .ClosedDateUnix $.i18n.Lang }}
{{if .IsClosed }}
{{svg "octicon-clock"}} {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}}
{{end}}

View file

@ -202,7 +202,7 @@
<div class="meta my-2">
<span class="text light grey">
#{{.Index}}
{{ $timeStr := TimeSinceUnix .GetLastEventTimestamp $.Lang }}
{{ $timeStr := TimeSinceUnix .GetLastEventTimestamp $.i18n.Lang }}
{{if .OriginalAuthor }}
{{$.i18n.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}}
{{else if gt .Poster.ID 0}}

View file

@ -65,7 +65,7 @@
<li class="ui grid">
<div class="ui four wide column meta mt-2">
{{if .IsTag}}
{{if .CreatedUnix}}<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>{{end}}
{{if .CreatedUnix}}<span class="time">{{TimeSinceUnix .CreatedUnix $.i18n.Lang}}</span>{{end}}
{{else}}
{{if .IsDraft}}
<span class="ui yellow label">{{$.i18n.Tr "repo.release.draft"}}</span>
@ -132,7 +132,7 @@
{{$.i18n.Tr "repo.released_this"}}
</span>
{{if .CreatedUnix}}
<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>
<span class="time">{{TimeSinceUnix .CreatedUnix $.i18n.Lang}}</span>
{{end}}
{{if not .IsDraft}}
| <span class="ahead"><a href="{{$.RepoLink}}/compare/{{.TagName | PathEscapeSegments}}...{{.Target | PathEscapeSegments}}">{{$.i18n.Tr "repo.release.ahead.commits" .NumCommitsBehind | Str2html}}</a> {{$.i18n.Tr "repo.release.ahead.target" .Target}}</span>

View file

@ -23,7 +23,7 @@
</span>
</td>
<td>{{FileSize .Size}}</td>
<td>{{TimeSince .CreatedUnix.AsTime $.Lang}}</td>
<td>{{TimeSince .CreatedUnix.AsTime $.i18n.Lang}}</td>
<td class="right aligned">
<a class="ui primary show-panel button" href="{{$.Link}}/find?oid={{.Oid}}&size={{.Size}}">{{$.i18n.Tr "repo.settings.lfs_findcommits"}}</a>
<button class="ui basic show-modal icon button" data-modal="#delete-{{.Oid}}">

View file

@ -37,7 +37,7 @@
{{$.i18n.Tr "repo.diff.commit"}}
<a class="ui blue sha label" href="{{$.RepoLink}}/commit/{{.SHA}}">{{ShortSha .SHA}}</a>
</td>
<td>{{TimeSince .When $.Lang}}</td>
<td>{{TimeSince .When $.i18n.Lang}}</td>
</tr>
{{else}}
<tr>

View file

@ -39,7 +39,7 @@
{{$lock.Owner.DisplayName}}
</a>
</td>
<td>{{TimeSince .Created $.Lang}}</td>
<td>{{TimeSince .Created $.i18n.Lang}}</td>
<td class="right aligned">
<form action="{{$.LFSFilesLink}}/locks/{{$lock.ID}}/unlock" method="POST">
{{$.CsrfTokenHtml}}

View file

@ -34,7 +34,7 @@
</span>
{{end}}
</th>
<th class="text grey right age">{{if .LatestCommit}}{{if .LatestCommit.Committer}}{{TimeSince .LatestCommit.Committer.When $.Lang}}{{end}}{{end}}</th>
<th class="text grey right age">{{if .LatestCommit}}{{if .LatestCommit.Committer}}{{TimeSince .LatestCommit.Committer.When $.i18n.Lang}}{{end}}{{end}}</th>
</tr>
</thead>
<tbody>
@ -87,7 +87,7 @@
{{end}}
</span>
</td>
<td class="text right age three wide">{{if $commit}}{{TimeSince $commit.Committer.When $.Lang}}{{end}}</td>
<td class="text right age three wide">{{if $commit}}{{TimeSince $commit.Committer.When $.i18n.Lang}}{{end}}</td>
</tr>
{{end}}
</tbody>

View file

@ -20,7 +20,7 @@
{{svg "octicon-file"}}
<a href="{{$.RepoLink}}/wiki/{{.SubURL}}">{{.Name}}</a>
</td>
{{$timeSince := TimeSinceUnix .UpdatedUnix $.Lang}}
{{$timeSince := TimeSinceUnix .UpdatedUnix $.i18n.Lang}}
<td class="text right grey">{{$.i18n.Tr "repo.wiki.last_updated" $timeSince | Safe}}</td>
</tr>
{{end}}

View file

@ -13,7 +13,7 @@
<a class="file-revisions-btn ui basic button" title="{{.i18n.Tr "repo.wiki.back_to_wiki"}}" href="{{.RepoLink}}/wiki/{{.PageURL}}" ><span>{{.revision}}</span> {{svg "octicon-home"}}</a>
{{$title}}
<div class="ui sub header word-break">
{{$timeSince := TimeSince .Author.When $.Lang}}
{{$timeSince := TimeSince .Author.When $.i18n.Lang}}
{{.i18n.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince | Safe}}
</div>
</div>

View file

@ -40,7 +40,7 @@
<a class="file-revisions-btn ui basic button" title="{{.i18n.Tr "repo.wiki.file_revision"}}" href="{{.RepoLink}}/wiki/{{.PageURL}}?action=_revision" ><span>{{.CommitCount}}</span> {{svg "octicon-history"}}</a>
{{$title}}
<div class="ui sub header">
{{$timeSince := TimeSince .Author.When $.Lang}}
{{$timeSince := TimeSince .Author.When $.i18n.Lang}}
{{.i18n.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince | Safe}}
</div>
</div>