Skip to content

Deduplicate frequent translation strings #29823

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 22 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion models/shared/types/ownertype.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func (o OwnerType) LocaleString(locale translation.Locale) string {
case OwnerTypeRepository:
return locale.TrString("concept_code_repository")
case OwnerTypeOrganization:
return locale.TrString("concept_user_organization")
return locale.TrString("organization")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why I used concept_user_organization here, the reason is the same as the previous discussion: I believe we should clearly define the concepts with context. I think "organization" could have different means in different contexts in different languages.

  • One context, one concept, one translation.
  • Different context, different concept, different translation.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I increasingly think we need to restructure translations completely. Not group them by usage (new issue page, admin user table, installation page) but by context or meaning ([permissions], [operations], [repo_units] and so on)

}
return locale.TrString("unknown")
}
2 changes: 1 addition & 1 deletion modules/private/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ type GitPushOptions map[string]string
// GitPushOptions keys
const (
GitPushOptionRepoPrivate = "repo.private"
GitPushOptionRepoTemplate = "repo.template"
GitPushOptionRepoTemplate = "template"
)

// Bool checks for a key in the map and parses as a boolean
Expand Down
187 changes: 19 additions & 168 deletions options/locale/locale_en-US.ini

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions routers/web/admin/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func prepareDeprecatedWarningsAlert(ctx *context.Context) {

// Dashboard show admin panel dashboard
func Dashboard(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.dashboard")
ctx.Data["Title"] = ctx.Tr("dashboard")
ctx.Data["PageIsAdminDashboard"] = true
ctx.Data["NeedUpdate"] = updatechecker.GetNeedUpdate(ctx)
ctx.Data["RemoteVersion"] = updatechecker.GetRemoteVersion(ctx)
Expand All @@ -149,7 +149,7 @@ func SystemStatus(ctx *context.Context) {
// DashboardPost run an admin operation
func DashboardPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.AdminDashboardForm)
ctx.Data["Title"] = ctx.Tr("admin.dashboard")
ctx.Data["Title"] = ctx.Tr("dashboard")
ctx.Data["PageIsAdminDashboard"] = true
updateSystemStatus()
ctx.Data["SysStatus"] = sysStatus
Expand Down
2 changes: 1 addition & 1 deletion routers/web/admin/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ func Config(ctx *context.Context) {
}

func ConfigSettings(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.config_settings")
ctx.Data["Title"] = ctx.Tr("settings")
ctx.Data["PageIsAdminConfig"] = true
ctx.Data["PageIsAdminConfigSettings"] = true
ctx.Data["DefaultOpenWithEditorAppsString"] = setting.DefaultOpenWithEditorApps().ToTextareaString()
Expand Down
2 changes: 1 addition & 1 deletion routers/web/admin/orgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const (

// Organizations show all the organizations
func Organizations(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.organizations")
ctx.Data["Title"] = ctx.Tr("organizations")
ctx.Data["PageIsAdminOrganizations"] = true

if ctx.FormString("sort") == "" {
Expand Down
4 changes: 2 additions & 2 deletions routers/web/admin/repos.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const (

// Repos show all the repositories
func Repos(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.repositories")
ctx.Data["Title"] = ctx.Tr("repositories")
ctx.Data["PageIsAdminRepositories"] = true

explore.RenderRepoSearch(ctx, &explore.RepoSearchOptions{
Expand Down Expand Up @@ -62,7 +62,7 @@ func DeleteRepo(ctx *context.Context) {

// UnadoptedRepos lists the unadopted repositories
func UnadoptedRepos(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.repositories")
ctx.Data["Title"] = ctx.Tr("repositories")
ctx.Data["PageIsAdminRepositories"] = true

opts := db.ListOptions{
Expand Down
4 changes: 2 additions & 2 deletions routers/web/auth/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ func SignOut(ctx *context.Context) {

// SignUp render the register page
func SignUp(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("sign_up")
ctx.Data["Title"] = ctx.Tr("register")

ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"

Expand Down Expand Up @@ -445,7 +445,7 @@ func SignUp(ctx *context.Context) {
// SignUpPost response for sign up information submission
func SignUpPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.RegisterForm)
ctx.Data["Title"] = ctx.Tr("sign_up")
ctx.Data["Title"] = ctx.Tr("register")

ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"

Expand Down
2 changes: 1 addition & 1 deletion routers/web/org/org_labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func RetrieveLabels(ctx *context.Context) {
// NewLabel create new label for organization
func NewLabel(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.CreateLabelForm)
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["Title"] = ctx.Tr("labels")
ctx.Data["PageIsLabels"] = true
ctx.Data["PageIsOrgSettings"] = true

Expand Down
2 changes: 1 addition & 1 deletion routers/web/org/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func DeleteWebhook(ctx *context.Context) {

// Labels render organization labels page
func Labels(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["Title"] = ctx.Tr("labels")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsOrgSettingsLabels"] = true
ctx.Data["LabelTemplateFiles"] = repo_module.LabelTemplateFiles
Expand Down
4 changes: 2 additions & 2 deletions routers/web/repo/issue_label.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const (

// Labels render issue's labels page
func Labels(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["Title"] = ctx.Tr("labels")
ctx.Data["PageIsIssueList"] = true
ctx.Data["PageIsLabels"] = true
ctx.Data["LabelTemplateFiles"] = repo_module.LabelTemplateFiles
Expand Down Expand Up @@ -101,7 +101,7 @@ func RetrieveLabels(ctx *context.Context) {
// NewLabel create new label for repository
func NewLabel(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.CreateLabelForm)
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["Title"] = ctx.Tr("labels")
ctx.Data["PageIsLabels"] = true

if ctx.HasError() {
Expand Down
2 changes: 1 addition & 1 deletion routers/web/repo/milestone.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const (

// Milestones render milestones page
func Milestones(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.milestones")
ctx.Data["Title"] = ctx.Tr("milestones")
ctx.Data["PageIsIssueList"] = true
ctx.Data["PageIsMilestones"] = true

Expand Down
2 changes: 1 addition & 1 deletion routers/web/repo/setting/collaboration.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (

// Collaboration render a repository's collaboration page
func Collaboration(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.collaboration")
ctx.Data["Title"] = ctx.Tr("collaborators")
ctx.Data["PageIsSettingsCollaboration"] = true

users, _, err := repo_model.GetCollaborators(ctx, &repo_model.FindCollaborationOptions{RepoID: ctx.Repo.Repository.ID})
Expand Down
2 changes: 1 addition & 1 deletion routers/web/repo/setting/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ const (
// SettingsCtxData is a middleware that sets all the general context data for the
// settings template.
func SettingsCtxData(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.options")
ctx.Data["Title"] = ctx.Tr("repository")
ctx.Data["PageIsSettingsOptions"] = true
ctx.Data["ForcePrivate"] = setting.Repository.ForcePrivate
ctx.Data["MirrorsEnabled"] = setting.Mirror.Enabled
Expand Down
6 changes: 3 additions & 3 deletions routers/web/repo/wiki.go
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ func WikiRaw(ctx *context.Context) {

// NewWiki render wiki create page
func NewWiki(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.wiki.new_page")
ctx.Data["Title"] = ctx.Tr("page")

if !ctx.Repo.Repository.HasWiki() {
ctx.Data["title"] = "Home"
Expand All @@ -709,7 +709,7 @@ func NewWiki(ctx *context.Context) {
// NewWikiPost response for wiki create request
func NewWikiPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.NewWikiForm)
ctx.Data["Title"] = ctx.Tr("repo.wiki.new_page")
ctx.Data["Title"] = ctx.Tr("page")

if ctx.HasError() {
ctx.HTML(http.StatusOK, tplWikiNew)
Expand Down Expand Up @@ -765,7 +765,7 @@ func EditWiki(ctx *context.Context) {
// EditWikiPost response for wiki modify request
func EditWikiPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.NewWikiForm)
ctx.Data["Title"] = ctx.Tr("repo.wiki.new_page")
ctx.Data["Title"] = ctx.Tr("page")

if ctx.HasError() {
ctx.HTML(http.StatusOK, tplWikiNew)
Expand Down
2 changes: 1 addition & 1 deletion routers/web/repo/wiki_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func TestNewWiki(t *testing.T) {
contexttest.LoadRepo(t, ctx, 1)
NewWiki(ctx)
assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
assert.EqualValues(t, ctx.Tr("repo.wiki.new_page"), ctx.Data["Title"])
assert.EqualValues(t, ctx.Tr("page"), ctx.Data["Title"])
}

func TestNewWikiPost(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions routers/web/user/setting/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func DeleteAvatar(ctx *context.Context) {

// Organization render all the organization of the user
func Organization(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("settings.organization")
ctx.Data["Title"] = ctx.Tr("organizations")
ctx.Data["PageIsSettingsOrganization"] = true

opts := organization.FindOrgOptions{
Expand Down Expand Up @@ -210,7 +210,7 @@ func Organization(ctx *context.Context) {

// Repos display a list of all repositories of the user
func Repos(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("settings.repos")
ctx.Data["Title"] = ctx.Tr("repositories")
ctx.Data["PageIsSettingsRepos"] = true
ctx.Data["allowAdopt"] = ctx.IsUserSiteAdmin() || setting.Repository.AllowAdoptionOfUnadoptedRepositories
ctx.Data["allowDelete"] = ctx.IsUserSiteAdmin() || setting.Repository.AllowDeleteOfUnadoptedRepositories
Expand Down
4 changes: 2 additions & 2 deletions services/forms/repo_form.go
Original file line number Diff line number Diff line change
Expand Up @@ -566,10 +566,10 @@ func (f *CreateMilestoneForm) Validate(req *http.Request, errs binding.Errors) b
// CreateLabelForm form for creating label
type CreateLabelForm struct {
ID int64
Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"`
Title string `binding:"Required;MaxSize(50)" locale:"name"`
Exclusive bool `form:"exclusive"`
IsArchived bool `form:"is_archived"`
Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"`
Description string `binding:"MaxSize(200)" locale:"description"`
Color string `binding:"Required;MaxSize(7)" locale:"repo.issues.label_color"`
}

Expand Down
4 changes: 2 additions & 2 deletions services/forms/user_form.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ type InstallForm struct {
PasswordAlgorithm string

AdminName string `binding:"OmitEmpty;Username;MaxSize(30)" locale:"install.admin_name"`
AdminPasswd string `binding:"OmitEmpty;MaxSize(255)" locale:"install.admin_password"`
AdminPasswd string `binding:"OmitEmpty;MaxSize(255)" locale:"password"`
AdminConfirmPasswd string
AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"`
AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"email"`

// ReinstallConfirmFirst we can not use 1/2/3 or A/B/C here, there is a framework bug, can not parse "reinstall_confirm_1" or "reinstall_confirm_a"
ReinstallConfirmFirst bool
Expand Down
6 changes: 3 additions & 3 deletions templates/admin/auth/list.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
<tr>
<th>ID</th>
<th>{{ctx.Locale.Tr "admin.auths.name"}}</th>
<th>{{ctx.Locale.Tr "admin.auths.type"}}</th>
<th>{{ctx.Locale.Tr "admin.auths.enabled"}}</th>
<th>{{ctx.Locale.Tr "type"}}</th>
<th>{{ctx.Locale.Tr "enabled"}}</th>
<th>{{ctx.Locale.Tr "admin.auths.updated"}}</th>
<th>{{ctx.Locale.Tr "admin.users.created"}}</th>
<th>{{ctx.Locale.Tr "admin.users.edit"}}</th>
<th>{{ctx.Locale.Tr "edit"}}</th>
</tr>
</thead>
<tbody>
Expand Down
16 changes: 8 additions & 8 deletions templates/admin/config.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
</h4>
<div class="ui attached table segment">
<dl class="admin-dl-horizontal">
<dt>{{ctx.Locale.Tr "admin.config.ssh_enabled"}}</dt>
<dt>{{ctx.Locale.Tr "enabled"}}</dt>
<dd>{{if not .SSH.Disabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}</dd>
{{if not .SSH.Disabled}}
<dt>{{ctx.Locale.Tr "admin.config.ssh_start_builtin_server"}}</dt>
Expand Down Expand Up @@ -89,7 +89,7 @@
</h4>
<div class="ui attached table segment">
<dl class="admin-dl-horizontal">
<dt>{{ctx.Locale.Tr "admin.config.lfs_enabled"}}</dt>
<dt>{{ctx.Locale.Tr "enabled"}}</dt>
<dd>{{if .LFS.StartServer}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}</dd>
{{if .LFS.StartServer}}
<dt>{{ctx.Locale.Tr "admin.config.lfs_content_path"}}</dt>
Expand All @@ -105,14 +105,14 @@
</h4>
<div class="ui attached table segment">
<dl class="admin-dl-horizontal">
<dt>{{ctx.Locale.Tr "admin.config.db_type"}}</dt>
<dt>{{ctx.Locale.Tr "type"}}</dt>
<dd>{{.DbCfg.Type}}</dd>
{{if not (eq .DbCfg.Type "sqlite3")}}
<dt>{{ctx.Locale.Tr "admin.config.db_host"}}</dt>
<dd>{{if .DbCfg.Host}}{{.DbCfg.Host}}{{else}}-{{end}}</dd>
<dt>{{ctx.Locale.Tr "admin.config.db_name"}}</dt>
<dt>{{ctx.Locale.Tr "name"}}</dt>
<dd>{{if .DbCfg.Name}}{{.DbCfg.Name}}{{else}}-{{end}}</dd>
<dt>{{ctx.Locale.Tr "admin.config.db_user"}}</dt>
<dt>{{ctx.Locale.Tr "username"}}</dt>
<dd>{{if .DbCfg.User}}{{.DbCfg.User}}{{else}}-{{end}}</dd>
{{end}}
{{if eq .DbCfg.Type "postgres"}}
Expand Down Expand Up @@ -199,10 +199,10 @@
</h4>
<div class="ui attached table segment">
<dl class="admin-dl-horizontal">
<dt>{{ctx.Locale.Tr "admin.config.mailer_enabled"}}</dt>
<dt>{{ctx.Locale.Tr "enabled"}}</dt>
<dd>{{if .MailerEnabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}</dd>
{{if .MailerEnabled}}
<dt>{{ctx.Locale.Tr "admin.config.mailer_name"}}</dt>
<dt>{{ctx.Locale.Tr "name"}}</dt>
<dd>{{.Mailer.Name}}</dd>
{{if eq .Mailer.Protocol "sendmail"}}
<dt>{{ctx.Locale.Tr "admin.config.mailer_use_sendmail"}}</dt>
Expand Down Expand Up @@ -334,7 +334,7 @@
{{if $loggerDetail.IsEnabled}}
<dd><pre class="gt-m-0">{{$loggerDetail.EventWriters | JsonUtils.EncodeToString | JsonUtils.PrettyIndent}}</pre></dd>
{{else}}
<dd>{{ctx.Locale.Tr "admin.config.disabled_logger"}}</dd>
<dd>{{ctx.Locale.Tr "disabled"}}</dd>
{{end}}
{{end}}
</dl>
Expand Down
2 changes: 1 addition & 1 deletion templates/admin/cron.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<thead>
<tr>
<th></th>
<th>{{ctx.Locale.Tr "admin.monitor.name"}}</th>
<th>{{ctx.Locale.Tr "name"}}</th>
<th>{{ctx.Locale.Tr "admin.monitor.schedule"}}</th>
<th>{{ctx.Locale.Tr "admin.monitor.next"}}</th>
<th>{{ctx.Locale.Tr "admin.monitor.previous"}}</th>
Expand Down
2 changes: 1 addition & 1 deletion templates/admin/emails/list.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<thead>
<tr>
<th data-sortt-asc="username" data-sortt-desc="reverseusername">
{{ctx.Locale.Tr "admin.users.name"}}
{{ctx.Locale.Tr "username"}}
{{SortArrow "username" "reverseusername" $.SortType false}}
</th>
<th>{{ctx.Locale.Tr "admin.users.full_name"}}</th>
Expand Down
8 changes: 4 additions & 4 deletions templates/admin/navbar.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="ui fluid vertical menu">
<div class="header item">{{ctx.Locale.Tr "admin.settings"}}</div>
<a class="{{if .PageIsAdminDashboard}}active {{end}}item" href="{{AppSubUrl}}/admin">
{{ctx.Locale.Tr "admin.dashboard"}}
{{ctx.Locale.Tr "dashboard"}}
</a>
<a class="{{if .PageIsAdminSelfCheck}}active {{end}}item" href="{{AppSubUrl}}/admin/self_check">
{{ctx.Locale.Tr "admin.self_check"}}
Expand All @@ -14,7 +14,7 @@
{{ctx.Locale.Tr "admin.authentication"}}
</a>
<a class="{{if .PageIsAdminOrganizations}}active {{end}}item" href="{{AppSubUrl}}/admin/orgs">
{{ctx.Locale.Tr "admin.organizations"}}
{{ctx.Locale.Tr "organizations"}}
</a>
<a class="{{if .PageIsAdminUsers}}active {{end}}item" href="{{AppSubUrl}}/admin/users">
{{ctx.Locale.Tr "admin.users"}}
Expand All @@ -33,7 +33,7 @@
</a>
{{end}}
<a class="{{if .PageIsAdminRepositories}}active {{end}}item" href="{{AppSubUrl}}/admin/repos">
{{ctx.Locale.Tr "admin.repositories"}}
{{ctx.Locale.Tr "repositories"}}
</a>
</div>
</details>
Expand Down Expand Up @@ -82,7 +82,7 @@
{{ctx.Locale.Tr "admin.config_summary"}}
</a>
<a class="{{if .PageIsAdminConfigSettings}}active {{end}}item" href="{{AppSubUrl}}/admin/config/settings">
{{ctx.Locale.Tr "admin.config_settings"}}
{{ctx.Locale.Tr "settings"}}
</a>
</div>
</details>
Expand Down
4 changes: 2 additions & 2 deletions templates/admin/notice.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<tr>
<th></th>
<th>ID</th>
<th>{{ctx.Locale.Tr "admin.notices.type"}}</th>
<th>{{ctx.Locale.Tr "admin.notices.desc"}}</th>
<th>{{ctx.Locale.Tr "type"}}</th>
<th>{{ctx.Locale.Tr "description"}}</th>
<th>{{ctx.Locale.Tr "admin.users.created"}}</th>
<th>{{ctx.Locale.Tr "admin.notices.op"}}</th>
</tr>
Expand Down
6 changes: 3 additions & 3 deletions templates/admin/org/list.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@
<tr>
<th data-sortt-asc="oldest" data-sortt-desc="newest">ID{{SortArrow "oldest" "newest" $.SortType false}}</th>
<th data-sortt-asc="alphabetically" data-sortt-desc="reversealphabetically" data-sortt-default="true">
{{ctx.Locale.Tr "admin.orgs.name"}}
{{ctx.Locale.Tr "name"}}
{{SortArrow "alphabetically" "reversealphabetically" $.SortType true}}
</th>
<th>{{ctx.Locale.Tr "admin.orgs.teams"}}</th>
<th>{{ctx.Locale.Tr "admin.orgs.members"}}</th>
<th>{{ctx.Locale.Tr "admin.users.repos"}}</th>
<th>{{ctx.Locale.Tr "members"}}</th>
<th>{{ctx.Locale.Tr "repositories"}}</th>
<th data-sortt-asc="recentupdate" data-sortt-desc="leastupdate">
{{ctx.Locale.Tr "admin.users.created"}}
{{SortArrow "recentupdate" "leastupdate" $.SortType false}}
Expand Down
Loading