loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(i18n): allow different translations of creation links and titles (#4829)

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4829
Reviewed-by: Gusted <gusted@noreply.codeberg.org>

0ko bad3b320 690b63fc

+115 -15
+8 -3
options/locale/locale_en-US.ini
··· 55 55 repository = Repository 56 56 organization = Organization 57 57 mirror = Mirror 58 - new_repo = New repository 59 - new_migrate = New migration 60 58 new_mirror = New mirror 61 59 new_fork = New repository fork 62 - new_org = New organization 63 60 new_project = New project 64 61 new_project_column = New column 65 62 admin_panel = Site administration ··· 67 64 your_profile = Profile 68 65 your_starred = Starred 69 66 your_settings = Settings 67 + 68 + new_repo.title = New repository 69 + new_migrate.title = New migration 70 + new_org.title = New organization 71 + 72 + new_repo.link = New repository 73 + new_migrate.link = New migration 74 + new_org.link = New organization 70 75 71 76 all = All 72 77 sources = Sources
+2 -2
routers/web/org/org.go
··· 26 26 27 27 // Create render the page for create organization 28 28 func Create(ctx *context.Context) { 29 - ctx.Data["Title"] = ctx.Tr("new_org") 29 + ctx.Data["Title"] = ctx.Tr("new_org.title") 30 30 ctx.Data["DefaultOrgVisibilityMode"] = setting.Service.DefaultOrgVisibilityMode 31 31 if !ctx.Doer.CanCreateOrganization() { 32 32 ctx.ServerError("Not allowed", errors.New(ctx.Locale.TrString("org.form.create_org_not_allowed"))) ··· 38 38 // CreatePost response for create organization 39 39 func CreatePost(ctx *context.Context) { 40 40 form := *web.GetForm(ctx).(*forms.CreateOrgForm) 41 - ctx.Data["Title"] = ctx.Tr("new_org") 41 + ctx.Data["Title"] = ctx.Tr("new_org.title") 42 42 43 43 if !ctx.Doer.CanCreateOrganization() { 44 44 ctx.ServerError("Not allowed", errors.New(ctx.Locale.TrString("org.form.create_org_not_allowed")))
+1 -1
routers/web/repo/migrate.go
··· 253 253 } 254 254 255 255 func setMigrationContextData(ctx *context.Context, serviceType structs.GitServiceType) { 256 - ctx.Data["Title"] = ctx.Tr("new_migrate") 256 + ctx.Data["Title"] = ctx.Tr("new_migrate.title") 257 257 258 258 ctx.Data["LFSActive"] = setting.LFS.StartServer 259 259 ctx.Data["IsForcedPrivate"] = setting.Repository.ForcePrivate
+2 -2
routers/web/repo/repo.go
··· 152 152 153 153 // Create render creating repository page 154 154 func Create(ctx *context.Context) { 155 - ctx.Data["Title"] = ctx.Tr("new_repo") 155 + ctx.Data["Title"] = ctx.Tr("new_repo.title") 156 156 157 157 // Give default value for template to render. 158 158 ctx.Data["Gitignores"] = repo_module.Gitignores ··· 223 223 // CreatePost response for creating repository 224 224 func CreatePost(ctx *context.Context) { 225 225 form := web.GetForm(ctx).(*forms.CreateRepoForm) 226 - ctx.Data["Title"] = ctx.Tr("new_repo") 226 + ctx.Data["Title"] = ctx.Tr("new_repo.title") 227 227 228 228 ctx.Data["Gitignores"] = repo_module.Gitignores 229 229 ctx.Data["LabelTemplateFiles"] = repo_module.LabelTemplateFiles
+3 -3
templates/base/head_navbar.tmpl
··· 126 126 </span> 127 127 <div class="menu"> 128 128 <a class="item" href="{{AppSubUrl}}/repo/create"> 129 - {{svg "octicon-plus"}} {{ctx.Locale.Tr "new_repo"}} 129 + {{svg "octicon-plus"}} {{ctx.Locale.Tr "new_repo.link"}} 130 130 </a> 131 131 {{if not .DisableMigrations}} 132 132 <a class="item" href="{{AppSubUrl}}/repo/migrate"> 133 - {{svg "octicon-repo-push"}} {{ctx.Locale.Tr "new_migrate"}} 133 + {{svg "octicon-repo-push"}} {{ctx.Locale.Tr "new_migrate.link"}} 134 134 </a> 135 135 {{end}} 136 136 {{if .SignedUser.CanCreateOrganization}} 137 137 <a class="item" href="{{AppSubUrl}}/org/create"> 138 - {{svg "octicon-organization"}} {{ctx.Locale.Tr "new_org"}} 138 + {{svg "octicon-organization"}} {{ctx.Locale.Tr "new_org.link"}} 139 139 </a> 140 140 {{end}} 141 141 </div><!-- end content create new menu -->
+1 -1
templates/org/create.tmpl
··· 5 5 <form class="ui form" action="{{.Link}}" method="post"> 6 6 {{.CsrfTokenHtml}} 7 7 <h3 class="ui top attached header"> 8 - {{ctx.Locale.Tr "new_org"}} 8 + {{ctx.Locale.Tr "new_org.title"}} 9 9 </h3> 10 10 <div class="ui attached segment"> 11 11 {{template "base/alert" .}}
+2 -2
templates/org/home.tmpl
··· 22 22 <div class="ui five wide column"> 23 23 {{if .CanCreateOrgRepo}} 24 24 <div class="center aligned"> 25 - <a class="ui primary button tw-mb-1" href="{{AppSubUrl}}/repo/create?org={{.Org.ID}}">{{ctx.Locale.Tr "new_repo"}}</a> 25 + <a class="ui primary button tw-mb-1" href="{{AppSubUrl}}/repo/create?org={{.Org.ID}}">{{ctx.Locale.Tr "new_repo.link"}}</a> 26 26 {{if not .DisableNewPullMirrors}} 27 - <a class="ui primary button tw-mb-1" href="{{AppSubUrl}}/repo/migrate?org={{.Org.ID}}&mirror=1">{{ctx.Locale.Tr "new_migrate"}}</a> 27 + <a class="ui primary button tw-mb-1" href="{{AppSubUrl}}/repo/migrate?org={{.Org.ID}}&mirror=1">{{ctx.Locale.Tr "new_migrate.link"}}</a> 28 28 {{end}} 29 29 </div> 30 30 <div class="divider"></div>
+1 -1
templates/repo/create.tmpl
··· 5 5 <form class="ui form" action="{{.Link}}" method="post"> 6 6 {{.CsrfTokenHtml}} 7 7 <h3 class="ui top attached header"> 8 - {{ctx.Locale.Tr "new_repo"}} 8 + {{ctx.Locale.Tr "new_repo.title"}} 9 9 </h3> 10 10 <div class="ui attached segment"> 11 11 {{template "base/alert" .}}
+6
tests/integration/migrate_test.go
··· 1 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 3 // SPDX-License-Identifier: MIT 3 4 4 5 package integration ··· 20 21 user_model "code.gitea.io/gitea/models/user" 21 22 "code.gitea.io/gitea/modules/setting" 22 23 "code.gitea.io/gitea/modules/structs" 24 + "code.gitea.io/gitea/modules/translation" 23 25 "code.gitea.io/gitea/services/migrations" 24 26 "code.gitea.io/gitea/services/repository" 25 27 ··· 88 90 resp := session.MakeRequest(t, req, http.StatusOK) 89 91 // Step 2: load the form 90 92 htmlDoc := NewHTMLParser(t, resp.Body) 93 + // Check form title 94 + title := htmlDoc.doc.Find("title").Text() 95 + assert.Contains(t, title, translation.NewLocale("en-US").TrString("new_migrate.title")) 96 + // Get the link of migration button 91 97 link, exists := htmlDoc.doc.Find(`form.ui.form[action^="/repo/migrate"]`).Attr("action") 92 98 assert.True(t, exists, "The template has changed") 93 99 // Step 4: submit the migration to only migrate issues
+37
tests/integration/new_org_test.go
··· 1 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package integration 5 + 6 + import ( 7 + "net/http" 8 + "net/url" 9 + "strings" 10 + "testing" 11 + 12 + "code.gitea.io/gitea/modules/translation" 13 + 14 + "github.com/stretchr/testify/assert" 15 + ) 16 + 17 + func TestNewOrganizationForm(t *testing.T) { 18 + onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { 19 + session := loginUser(t, "user1") 20 + locale := translation.NewLocale("en-US") 21 + 22 + response := session.MakeRequest(t, NewRequest(t, "GET", "/org/create"), http.StatusOK) 23 + page := NewHTMLParser(t, response.Body) 24 + 25 + // Verify page title 26 + title := page.Find("title").Text() 27 + assert.Contains(t, title, locale.TrString("new_org.title")) 28 + 29 + // Verify page form 30 + _, exists := page.Find("form[action='/org/create']").Attr("method") 31 + assert.True(t, exists) 32 + 33 + // Verify page header 34 + header := strings.TrimSpace(page.Find(".form[action='/org/create'] .header").Text()) 35 + assert.EqualValues(t, locale.TrString("new_org.title"), header) 36 + }) 37 + }
+11
tests/integration/org_nav_test.go
··· 5 5 6 6 import ( 7 7 "net/http" 8 + "strings" 8 9 "testing" 9 10 11 + "code.gitea.io/gitea/modules/translation" 10 12 "code.gitea.io/gitea/tests" 13 + 14 + "github.com/stretchr/testify/assert" 11 15 ) 12 16 13 17 // This test makes sure that organization members are able to navigate between `/<orgname>` and `/org/<orgname>/<section>` freely. ··· 18 22 // owners/admins/members of the organization. 19 23 func TestOrgNavigationDashboard(t *testing.T) { 20 24 defer tests.PrepareTestEnv(t)() 25 + 26 + locale := translation.NewLocale("en-US") 21 27 22 28 // Login as the future organization admin and create an organization 23 29 session1 := loginUser(t, "user2") ··· 32 38 resp := session1.MakeRequest(t, NewRequest(t, "GET", "/org_navigation_test"), http.StatusOK) 33 39 doc := NewHTMLParser(t, resp.Body) 34 40 doc.AssertElement(t, "#org-info a[href='/org/org_navigation_test/dashboard']", true) 41 + 42 + // Verify the "New repository" and "New migration" buttons 43 + links := doc.Find(".organization.profile .grid .column .center") 44 + assert.EqualValues(t, locale.TrString("new_repo.link"), strings.TrimSpace(links.Find("a[href^='/repo/create?org=']").Text())) 45 + assert.EqualValues(t, locale.TrString("new_migrate.link"), strings.TrimSpace(links.Find("a[href^='/repo/migrate?org=']").Text())) 35 46 36 47 // Check if the "View <orgname>" button is available on dashboard for the org admin (member) 37 48 resp = session1.MakeRequest(t, NewRequest(t, "GET", "/org/org_navigation_test/dashboard"), http.StatusOK)
+11
tests/integration/repo_generate_test.go
··· 1 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 3 // SPDX-License-Identifier: MIT 3 4 4 5 package integration ··· 13 14 "code.gitea.io/gitea/models/unittest" 14 15 user_model "code.gitea.io/gitea/models/user" 15 16 "code.gitea.io/gitea/modules/setting" 17 + "code.gitea.io/gitea/modules/translation" 16 18 "code.gitea.io/gitea/tests" 17 19 18 20 "github.com/stretchr/testify/assert" ··· 21 23 func assertRepoCreateForm(t *testing.T, htmlDoc *HTMLDoc, owner *user_model.User, templateID string) { 22 24 _, exists := htmlDoc.doc.Find("form.ui.form[action^='/repo/create']").Attr("action") 23 25 assert.True(t, exists, "Expected the repo creation form") 26 + locale := translation.NewLocale("en-US") 27 + 28 + // Verify page title 29 + title := htmlDoc.doc.Find("title").Text() 30 + assert.Contains(t, title, locale.TrString("new_repo.title")) 31 + 32 + // Verify form header 33 + header := strings.TrimSpace(htmlDoc.doc.Find(".form[action='/repo/create'] .header").Text()) 34 + assert.EqualValues(t, locale.TrString("new_repo.title"), header) 24 35 25 36 htmlDoc.AssertDropdownHasSelectedOption(t, "uid", strconv.FormatInt(owner.ID, 10)) 26 37
+30
tests/integration/user_dashboard_test.go
··· 1 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package integration 5 + 6 + import ( 7 + "net/http" 8 + "strings" 9 + "testing" 10 + 11 + "code.gitea.io/gitea/models/unittest" 12 + "code.gitea.io/gitea/modules/translation" 13 + 14 + "github.com/stretchr/testify/assert" 15 + "github.com/stretchr/testify/require" 16 + ) 17 + 18 + func TestUserDashboardActionLinks(t *testing.T) { 19 + require.NoError(t, unittest.PrepareTestDatabase()) 20 + 21 + session := loginUser(t, "user1") 22 + locale := translation.NewLocale("en-US") 23 + 24 + response := session.MakeRequest(t, NewRequest(t, "GET", "/"), http.StatusOK) 25 + page := NewHTMLParser(t, response.Body) 26 + links := page.Find("#navbar .dropdown[data-tooltip-content='Create…'] .menu") 27 + assert.EqualValues(t, locale.TrString("new_repo.link"), strings.TrimSpace(links.Find("a[href='/repo/create']").Text())) 28 + assert.EqualValues(t, locale.TrString("new_migrate.link"), strings.TrimSpace(links.Find("a[href='/repo/migrate']").Text())) 29 + assert.EqualValues(t, locale.TrString("new_org.link"), strings.TrimSpace(links.Find("a[href='/org/create']").Text())) 30 + }