Changes
31 changed files (+75/-75)
-
-
@@ -38,7 +38,6 @@ import ("gitea.com/go-chi/session" chi "github.com/go-chi/chi/v5" "github.com/unknwon/com" "github.com/unknwon/i18n" "github.com/unrolled/render" "golang.org/x/crypto/pbkdf2" )
-
@@ -738,15 +737,7 @@ func Contexter() func(next http.Handler) http.Handler {ctx.Data["UnitProjectsGlobalDisabled"] = unit.TypeProjects.UnitGlobalDisabled() ctx.Data["i18n"] = locale ctx.Data["Tr"] = i18n.Tr ctx.Data["Lang"] = locale.Language() ctx.Data["AllLangs"] = translation.AllLangs() for _, lang := range translation.AllLangs() { if lang.Lang == locale.Language() { ctx.Data["LangName"] = lang.Name break } } next.ServeHTTP(ctx.Resp, ctx.Req)
-
-
-
@@ -25,17 +25,18 @@ type Locale interface {// LangType represents a lang type type LangType struct { Lang, Name string Lang, Name string // these fields are used directly in templates: {{range .AllLangs}}{{.Lang}}{{.Name}}{{end}} } var ( matcher language.Matcher allLangs []LangType allLangs []*LangType allLangMap map[string]*LangType supportedTags []language.Tag ) // AllLangs returns all supported languages sorted by name func AllLangs() []LangType { func AllLangs() []*LangType { return allLangs }
-
@@ -81,14 +82,17 @@ func InitLocales() {} i18n.SetDefaultLang("en-US") allLangs = make([]LangType, 0, i18n.Count()-1) allLangs = make([]*LangType, 0, i18n.Count()) allLangMap = map[string]*LangType{} langs := i18n.ListLangs() names := i18n.ListLangDescs() descs := i18n.ListLangDescs() for i, v := range langs { allLangs = append(allLangs, LangType{v, names[i]}) l := &LangType{v, descs[i]} allLangs = append(allLangs, l) allLangMap[v] = l } // Sort languages case insensitive according to their name - needed for the user settings // Sort languages case-insensitive according to their name - needed for the user settings sort.Slice(allLangs, func(i, j int) bool { return strings.ToLower(allLangs[i].Name) < strings.ToLower(allLangs[j].Name) })
-
@@ -102,13 +106,18 @@ func Match(tags ...language.Tag) language.Tag {// locale represents the information of localization. type locale struct { Lang string Lang, LangName string // these fields are used directly in templates: .i18n.Lang } // NewLocale return a locale func NewLocale(lang string) Locale { langName := "unknown" if l, ok := allLangMap[lang]; ok { langName = l.Name } return &locale{ Lang: lang, Lang: lang, LangName: langName, } }
-
@@ -118,7 +127,16 @@ func (l *locale) Language() string {// Tr translates content to target language. func (l *locale) Tr(format string, args ...interface{}) string { return i18n.Tr(l.Lang, format, args...) if setting.IsProd { return i18n.Tr(l.Lang, format, args...) } // in development, we should show an error if a translation key is missing s, ok := TryTr(l.Lang, format, args...) if !ok { log.Error("missing i18n translation key: %q", format) } return s } // Language specific rules for translating plural texts
-
-
-
@@ -71,25 +71,16 @@ func Init(next http.Handler) http.Handler {Render: rnd, Session: session.GetSession(req), Data: map[string]interface{}{ "i18n": locale, "Title": locale.Tr("install.install"), "PageIsInstall": true, "DbTypeNames": getDbTypeNames(), "i18n": locale, "Language": locale.Language(), "Lang": locale.Language(), "AllLangs": translation.AllLangs(), "CurrentURL": setting.AppSubURL + req.URL.RequestURI(), "PageStartTime": startTime, "PasswordHashAlgorithms": user_model.AvailableHashAlgorithms, }, } for _, lang := range translation.AllLangs() { if lang.Lang == locale.Language() { ctx.Data["LangName"] = lang.Name break } } ctx.Req = context.WithContext(req, &ctx) next.ServeHTTP(resp, ctx.Req) })
-
-
-
@@ -255,7 +255,7 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames mcommitCnt++ // User avatar image commitSince := timeutil.TimeSinceUnix(timeutil.TimeStamp(commit.Author.When.Unix()), ctx.Data["Lang"].(string)) commitSince := timeutil.TimeSinceUnix(timeutil.TimeStamp(commit.Author.When.Unix()), ctx.Locale.Language()) var avatar string if commit.User != nil {
-
-
-
@@ -29,7 +29,7 @@ func GetContentHistoryOverview(ctx *context.Context) {return } lang := ctx.Data["Lang"].(string) lang := ctx.Locale.Language() editedHistoryCountMap, _ := issuesModel.QueryIssueContentHistoryEditedCountMap(db.DefaultContext, issue.ID) ctx.JSON(http.StatusOK, map[string]interface{}{ "i18n": map[string]interface{}{
-
@@ -55,17 +55,17 @@ func GetContentHistoryList(ctx *context.Context) {// render history list to HTML for frontend dropdown items: (name, value) // name is HTML of "avatar + userName + userAction + timeSince" // value is historyId lang := ctx.Data["Lang"].(string) lang := ctx.Locale.Language() var results []map[string]interface{} for _, item := range items { var actionText string if item.IsDeleted { actionTextDeleted := i18n.Tr(lang, "repo.issues.content_history.deleted") actionTextDeleted := ctx.Locale.Tr("repo.issues.content_history.deleted") actionText = "<i data-history-is-deleted='1'>" + actionTextDeleted + "</i>" } else if item.IsFirstCreated { actionText = i18n.Tr(lang, "repo.issues.content_history.created") actionText = ctx.Locale.Tr("repo.issues.content_history.created") } else { actionText = i18n.Tr(lang, "repo.issues.content_history.edited") actionText = ctx.Locale.Tr("repo.issues.content_history.edited") } timeSinceText := timeutil.TimeSinceUnix(item.EditedUnix, lang) results = append(results, map[string]interface{}{
-
-
-
@@ -2,7 +2,7 @@<div class="df ac"> <div class="content f1"> <div class="header">{{.Process.Description}}</div> <div class="description"><span title="{{DateFmtLong .Process.Start}}">{{TimeSince .Process.Start .root.Lang}}</span></div> <div class="description"><span title="{{DateFmtLong .Process.Start}}">{{TimeSince .Process.Start .root.i18n.Lang}}</span></div> </div> <div> <a class="delete-button icon" href="" data-url="{{.root.Link}}/cancel/{{.Process.PID}}" data-id="{{.Process.PID}}" data-name="{{.Process.Description}}">{{svg "octicon-trash" 16 "text-red"}}</a>
-
-
-
@@ -9,10 +9,10 @@{{end}} <div class="ui language bottom floating slide up dropdown link item"> {{svg "octicon-globe"}} <div class="text">{{.LangName}}</div> <div class="text">{{.i18n.LangName}}</div> <div class="menu language-menu"> {{range .AllLangs}} <a lang="{{.Lang}}" data-url="{{AppSubUrl}}/?lang={{.Lang}}" class="item {{if eq $.Lang .Lang}}active selected{{end}}">{{.Name}}</a> <a lang="{{.Lang}}" data-url="{{AppSubUrl}}/?lang={{.Lang}}" class="item {{if eq $.i18n.Lang .Lang}}active selected{{end}}">{{.Name}}</a> {{end}} </div> </div>
-
-
-
@@ -1,5 +1,5 @@<!DOCTYPE html> <html lang="{{.Lang}}" class="theme-{{.SignedUser.Theme}}"> <html lang="{{.i18n.Lang}}" class="theme-{{.SignedUser.Theme}}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1">
-
-
-
@@ -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>
-
-
-
@@ -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>
-
-
-
@@ -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}}
-
-
-
@@ -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>
-
-
-
@@ -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}}
-
-
-
@@ -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}}
-
-
-
@@ -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">
-
-
-
@@ -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">
-
-
-
@@ -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">
-
-
-
@@ -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}}
-
-
-
@@ -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}}
-
-
-
@@ -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}}
-
-
-
@@ -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>
-
-
-
@@ -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}}">
-
-
-
@@ -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>
-
-
-
@@ -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}}
-
-
-
@@ -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>
-
-
-
@@ -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}}
-
-
-
@@ -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>
-
-
-
@@ -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>
-
-
-
@@ -51,7 +51,7 @@#{{.Index}} {{end}} </a> {{ $timeStr := TimeSinceUnix .GetLastEventTimestamp $.Lang }} {{ $timeStr := TimeSinceUnix .GetLastEventTimestamp $.i18n.Lang }} {{if .OriginalAuthor }} {{$.i18n.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} {{else if gt .Poster.ID 0}}
-
-
-
@@ -88,7 +88,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}}
-
-
-
@@ -14,7 +14,7 @@<div class="content"> <strong>{{.Name}}</strong> </div> <span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span> <span class="time">{{TimeSinceUnix .CreatedUnix $.i18n.Lang}}</span> </div> {{end}} </div>
-