diff --git a/.github/workflows/pull-compliance.yml b/.github/workflows/pull-compliance.yml
index f6720bf2f6d9d..e8065ce7caea2 100644
--- a/.github/workflows/pull-compliance.yml
+++ b/.github/workflows/pull-compliance.yml
@@ -178,6 +178,16 @@ jobs:
GOOS: linux
GOARCH: 386
+ translations:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version-file: go.mod
+ check-latest: true
+ - run: make check-locales
+
docs:
if: needs.files-changed.outputs.docs == 'true' || needs.files-changed.outputs.actions == 'true'
needs: files-changed
diff --git a/Makefile b/Makefile
index bb70b91bb9b0c..b34ef07b25e37 100644
--- a/Makefile
+++ b/Makefile
@@ -884,6 +884,11 @@ update-translations:
mv ./translations/*.ini ./options/locale/
rmdir ./translations
+.PHONY: check-locales
+check-locales:
+ @echo "Checking translations..."
+ $(GO) run build/check-locales.go
+
.PHONY: generate-gitignore
generate-gitignore: ## update gitignore files
$(GO) run build/generate-gitignores.go
diff --git a/build/check-locales.go b/build/check-locales.go
new file mode 100644
index 0000000000000..6ff17a8f6a1cb
--- /dev/null
+++ b/build/check-locales.go
@@ -0,0 +1,124 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+//go:build ignore
+
+package main
+
+import (
+ "os"
+ "path/filepath"
+ "strings"
+
+ "code.gitea.io/gitea/modules/setting"
+
+ "github.com/gobwas/glob"
+)
+
+func searchTranslationKeyInDirs(keys []string) ([]bool, error) {
+ res := make([]bool, len(keys))
+ for _, dir := range []string{
+ "cmd",
+ "models",
+ "modules",
+ "routers",
+ "services",
+ "templates",
+ } {
+ if err := searchTranslationKeyInDir(dir, keys, &res); err != nil {
+ return nil, err
+ }
+ }
+ return res, nil
+}
+
+func searchTranslationKeyInDir(dir string, keys []string, res *[]bool) error {
+ return filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error {
+ if err != nil {
+ return err
+ }
+ if d.IsDir() ||
+ (!strings.HasSuffix(d.Name(), ".go") && !strings.HasSuffix(d.Name(), ".tmpl")) ||
+ strings.HasSuffix(d.Name(), "_test.go") { // don't search in test files
+ return nil
+ }
+
+ bs, err := os.ReadFile(path)
+ if err != nil {
+ return err
+ }
+ for i, key := range keys {
+ if !(*res)[i] && strings.Contains(string(bs), `"`+key+`"`) {
+ (*res)[i] = true
+ }
+ }
+ return nil
+ })
+}
+
+var whitelist = []string{
+ "repo.signing.wont_sign.*",
+ "repo.issues.role.*",
+ "repo.commitstatus.*",
+ "admin.dashboard.*",
+ "admin.dashboard.cron.*",
+ "admin.dashboard.task.*",
+ "repo.migrate.*.description",
+ "actions.runners.status.*",
+ "projects.*.display_name",
+ "admin.notices.*",
+ "form.NewBranchName", // FIXME: used in integration tests only
+}
+
+func isWhitelisted(key string) bool {
+ for _, w := range whitelist {
+ if glob.MustCompile(w).Match(key) {
+ return true
+ }
+ }
+ return false
+}
+
+func main() {
+ if len(os.Args) != 1 {
+ println("usage: clean-locales")
+ os.Exit(1)
+ }
+
+ iniFile, err := setting.NewConfigProviderForLocale("options/locale/locale_en-US.ini")
+ if err != nil {
+ panic(err)
+ }
+
+ keys := []string{}
+ for _, section := range iniFile.Sections() {
+ for _, key := range section.Keys() {
+ var trKey string
+ if section.Name() == "" || section.Name() == "DEFAULT" {
+ trKey = key.Name()
+ } else {
+ trKey = section.Name() + "." + key.Name()
+ }
+ if isWhitelisted(trKey) {
+ continue
+ }
+ keys = append(keys, trKey)
+ }
+ }
+
+ results, err := searchTranslationKeyInDirs(keys)
+ if err != nil {
+ panic(err)
+ }
+
+ var found bool
+ for i, result := range results {
+ if !result {
+ found = true
+ println("unused locale key:", keys[i])
+ }
+ }
+ if found {
+ os.Exit(1) // exit with error if any unused locale key is found
+ }
+}
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 6d8aaef4cd85e..491f48ae5605a 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -49,7 +49,6 @@ webauthn_error_unable_to_process = The server could not process your request.
webauthn_error_duplicated = The security key is not permitted for this request. Please make sure that the key is not already registered.
webauthn_error_empty = You must set a name for this key.
webauthn_error_timeout = Timeout reached before your key could be read. Please reload this page and retry.
-webauthn_reload = Reload
repository = Repository
organization = Organization
@@ -57,14 +56,10 @@ mirror = Mirror
issue_milestone = Milestone
new_repo = New Repository
new_migrate = New Migration
-new_mirror = New Mirror
new_fork = New Repository Fork
new_org = New Organization
-new_project = New Project
new_project_column = New Column
-manage_org = Manage Organizations
admin_panel = Site Administration
-account_settings = Account Settings
settings = Settings
your_profile = Profile
your_starred = Starred
@@ -368,13 +363,9 @@ config_write_file_prompt = These configuration options will be written into: %s
[home]
nav_menu = Navigation Menu
uname_holder = Username or Email Address
-password_holder = Password
switch_dashboard_context = Switch Dashboard Context
my_repos = Repositories
-show_more_repos = Show more repositories…
-collaborative_repos = Collaborative Repositories
my_orgs = My Organizations
-my_mirrors = My Mirrors
view_home = View %s
filter = Other Filters
filter_by_team_repositories = Filter by team repositories
@@ -435,7 +426,6 @@ resent_limit_prompt = You have already requested an activation email recently. P
has_unconfirmed_mail = Hi %s, you have an unconfirmed email address (%s). If you haven't received a confirmation email or need to resend a new one, please click on the button below.
change_unconfirmed_mail_address = If your registration email address is incorrect, you can change it here and resend a new confirmation email.
resend_mail = Click here to resend your activation email
-email_not_associate = The email address is not associated with any account.
send_reset_mail = Send Account Recovery Email
reset_password = Account Recovery
invalid_code = Your confirmation code is invalid or has expired.
@@ -453,7 +443,6 @@ twofa_passcode_incorrect = Your passcode is incorrect. If you misplaced your dev
twofa_scratch_token_incorrect = Your scratch code is incorrect.
twofa_required = You must setup Two-Factor Authentication to get access to repositories, or try to login again.
login_userpass = Sign In
-login_openid = OpenID
oauth_signup_tab = Register New Account
oauth_signup_title = Complete New Account
oauth_signup_submit = Complete Account
@@ -481,7 +470,6 @@ authorize_application_with_scopes = With scopes: %s
authorize_title = Authorize "%s" to access your account?
authorization_failed = Authorization failed
authorization_failed_desc = The authorization failed because we detected an invalid request. Please contact the maintainer of the app you have tried to authorize.
-sspi_auth_failed = SSPI authentication failed
password_pwned = The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password and consider changing this password elsewhere too.
password_pwned_err = Could not complete request to HaveIBeenPwned
last_admin = You cannot remove the last admin. There must be at least one admin.
@@ -513,8 +501,6 @@ reset_password = Recover your account
reset_password.title = %s, you have requested to recover your account
reset_password.text = Please click the following link to recover your account within %s:
-register_success = Registration successful
-
issue_assigned.pull = @%[1]s assigned you to pull request %[2]s in repository %[3]s.
issue_assigned.issue = @%[1]s assigned you to issue %[2]s in repository %[3]s.
@@ -559,30 +545,12 @@ yes = Yes
no = No
confirm = Confirm
cancel = Cancel
-modify = Update
[form]
-UserName = Username
-RepoName = Repository name
-Email = Email address
-Password = Password
-Retype = Confirm Password
-SSHTitle = SSH key name
-HttpsUrl = HTTPS URL
-PayloadUrl = Payload URL
-TeamName = Team name
-AuthName = Authorization name
-AdminEmail = Admin email
NewBranchName = New branch name
-CommitSummary = Commit summary
-CommitMessage = Commit message
-CommitChoice = Commit choice
-TreeName = File path
-Content = Content
SSPISeparatorReplacement = Separator
-SSPIDefaultLanguage = Default Language
require_error = ` cannot be empty.`
alpha_dash_error = ` should contain only alphanumeric, dash ('-') and underscore ('_') characters.`
@@ -607,7 +575,6 @@ username_been_taken = The username is already taken.
username_change_not_local_user = Non-local users are not allowed to change their username.
change_username_disabled = Changing username is disabled.
change_full_name_disabled = Changing full name is disabled.
-username_has_not_been_changed = Username has not been changed
repo_name_been_taken = The repository name is already used.
repository_force_private = Force Private is enabled: private repositories cannot be made public.
repository_files_already_exist = Files already exist for this repository. Contact the system administrator.
@@ -718,15 +685,11 @@ password = Password
security = Security
avatar = Avatar
ssh_gpg_keys = SSH / GPG Keys
-social = Social Accounts
applications = Applications
orgs = Manage Organizations
repos = Repositories
-delete = Delete Account
twofa = Two-Factor Authentication (TOTP)
-account_link = Linked Accounts
organization = Organizations
-uid = UID
webauthn = Two-Factor Authentication (Security Keys)
public_profile = Public Profile
@@ -744,10 +707,8 @@ update_language = Update Language
update_language_not_found = Language "%s" is not available.
update_language_success = Language has been updated.
update_profile_success = Your profile has been updated.
-change_username = Your username has been changed.
change_username_prompt = Note: Changing your username also changes your account URL.
change_username_redirect_prompt = The old username will redirect until someone claims it.
-continue = Continue
cancel = Cancel
language = Language
ui = Theme
@@ -775,7 +736,6 @@ keep_activity_private = Hide Activity from profile page
keep_activity_private_popup = Makes the activity visible only for you and the admins
lookup_avatar_by_mail = Look Up Avatar by Email Address
-federated_avatar_lookup = Federated Avatar Lookup
enable_custom_avatar = Use Custom Avatar
choose_new_avatar = Choose new avatar
update_avatar = Update Avatar
@@ -794,7 +754,6 @@ password_incorrect = The current password is incorrect.
change_password_success = Your password has been updated. Sign in using your new password from now on.
password_change_disabled = Non-local users cannot update their password through the Gitea web interface.
-emails = Email Addresses
manage_emails = Manage Email Addresses
manage_themes = Select default theme
manage_openid = Manage OpenID Addresses
@@ -839,8 +798,6 @@ principal_desc = These SSH certificate principals are associated with your accou
gpg_desc = These public GPG keys are associated with your account. Keep your private keys safe as they allow commits to be verified.
ssh_helper = Need help? Have a look at GitHub's guide to create your own SSH keys or solve common problems you may encounter using SSH.
gpg_helper = Need help? Have a look at GitHub's guide about GPG.
-add_new_key = Add SSH Key
-add_new_gpg_key = Add GPG Key
key_content_ssh_placeholder = Begins with 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com', or 'sk-ssh-ed25519@openssh.com'
key_content_gpg_placeholder = Begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'
add_new_principal = Add Principal
@@ -904,10 +861,6 @@ hide_openid = Hide from profile
ssh_disabled = SSH Disabled
ssh_signonly = SSH is currently disabled so these keys are only used for commit signature verification.
ssh_externally_managed = This SSH key is externally managed for this user
-manage_social = Manage Associated Social Accounts
-social_desc = These social accounts can be used to sign in to your account. Make sure you recognize all of them.
-unbind = Unlink
-unbind_success = The social account has been removed successfully.
manage_access_token = Manage Access Tokens
generate_new_token = Generate New Token
@@ -918,8 +871,6 @@ generate_token_success = Your new token has been generated. Copy it now as it wi
generate_token_name_duplicate = %s has been used as an application name already. Please use a new one.
delete_token = Delete
access_token_deletion = Delete Access Token
-access_token_deletion_cancel_action = Cancel
-access_token_deletion_confirm_action = Delete
access_token_deletion_desc = Deleting a token will revoke access to your account for applications using it. This cannot be undone. Continue?
delete_token_success = The token has been deleted. Applications using it no longer have access to your account.
repo_and_org_access = Repository and Organization Access
@@ -938,9 +889,7 @@ permissions_list = Permissions:
manage_oauth2_applications = Manage OAuth2 Applications
edit_oauth2_application = Edit OAuth2 Application
-oauth2_applications_desc = OAuth2 applications enables your third-party application to securely authenticate users at this Gitea instance.
remove_oauth2_application = Remove OAuth2 Application
-remove_oauth2_application_desc = Removing an OAuth2 application will revoke access to all signed access tokens. Continue?
remove_oauth2_application_success = The application has been deleted.
create_oauth2_application = Create a new OAuth2 Application
create_oauth2_application_button = Create Application
@@ -955,7 +904,6 @@ oauth2_client_id = Client ID
oauth2_client_secret = Client Secret
oauth2_regenerate_secret = Regenerate Secret
oauth2_regenerate_secret_hint = Lost your secret?
-oauth2_client_secret_hint = The secret will not be shown again after you leave or refresh this page. Please ensure that you have saved it.
oauth2_application_edit = Edit
oauth2_application_create_description = OAuth2 applications gives your third-party application access to user accounts on this instance.
oauth2_application_remove_description = Removing an OAuth2 application will prevent it from accessing authorized user accounts on this instance. Continue?
@@ -997,7 +945,6 @@ webauthn_alternative_tip = You may want to configure an additional authenticatio
manage_account_links = Manage Linked Accounts
manage_account_links_desc = These external accounts are linked to your Gitea account.
-account_links_not_available = There are currently no external accounts linked to your Gitea account.
link_account = Link Account
remove_account_link = Remove Linked Account
remove_account_link_desc = Removing a linked account will revoke its access to your Gitea account. Continue?
@@ -1041,7 +988,6 @@ repo_size = Repository Size
template = Template
template_select = Select a template.
template_helper = Make repository a template
-template_description = Template repositories let users generate new repositories with the same directory structure, files, and optional settings.
visibility = Visibility
visibility_description = Only the owner or the organization members if they have rights, will be able to see it.
visibility_helper = Make repository private
@@ -1064,8 +1010,6 @@ open_with_editor = Open with %s
download_zip = Download ZIP
download_tar = Download TAR.GZ
download_bundle = Download BUNDLE
-generate_repo = Generate Repository
-generate_from = Generate From
repo_desc = Description
repo_desc_helper = Enter short description (optional)
repo_no_desc = No description provided
@@ -1084,11 +1028,6 @@ readme = README
readme_helper = Select a README file template.
readme_helper_desc = This is the place where you can write a complete description for your project.
auto_init = Initialize Repository (Adds .gitignore, License and README)
-trust_model_helper = Select trust model for signature verification. Possible options are:
-trust_model_helper_collaborator = Collaborator: Trust signatures by collaborators
-trust_model_helper_committer = Committer: Trust signatures that match committers
-trust_model_helper_collaborator_committer = Collaborator+Committer: Trust signatures by collaborators which match the committer
-trust_model_helper_default = Default: Use the default trust model for this installation
create_repo = Create Repository
default_branch = Default Branch
default_branch_label = default
@@ -1107,13 +1046,11 @@ mirror_lfs = Large File Storage (LFS)
mirror_lfs_desc = Activate mirroring of LFS data.
mirror_lfs_endpoint = LFS Endpoint
mirror_lfs_endpoint_desc = Sync will attempt to use the clone url to determine the LFS server. You can also specify a custom endpoint if the repository LFS data is stored somewhere else.
-mirror_last_synced = Last Synchronized
mirror_password_placeholder = (Unchanged)
mirror_password_blank_placeholder = (Unset)
mirror_password_help = Change the username to erase a stored password.
watchers = Watchers
stargazers = Stargazers
-stars_remove_warning = This will remove all stars from this repository.
forks = Forks
stars = Stars
reactions_more = and %d more
@@ -1143,7 +1080,6 @@ transfer.no_permission_to_accept = You do not have permission to accept this tra
transfer.no_permission_to_reject = You do not have permission to reject this transfer.
desc.private = Private
-desc.public = Public
desc.public_access = Public Access
desc.template = Template
desc.internal = Internal
@@ -1173,7 +1109,6 @@ form.name_pattern_not_allowed = The pattern "%s" is not allowed in a repository
need_auth = Authorization
migrate_options = Migration Options
-migrate_service = Migration Service
migrate_options_mirror_helper = This repository will be a mirror
migrate_options_lfs = Migrate LFS files
migrate_options_lfs_endpoint.label = LFS Endpoint
@@ -1243,8 +1178,6 @@ unstar = Unstar
star = Star
fork = Fork
action.blocked_user = Cannot perform action because you are blocked by the repository owner.
-download_archive = Download Repository
-more_operations = More Operations
quick_guide = Quick Guide
clone_this_repo = Clone this repository
@@ -1258,7 +1191,6 @@ no_branch = This repository doesn’t have any branches.
code = Code
code.desc = Access source code, files, commits and branches.
branch = Branch
-tree = Tree
clear_ref = `Clear current reference`
filter_branch_and_tag = Filter branch or tag
find_tag = Find tag
@@ -1281,7 +1213,6 @@ release = Release
releases = Releases
tag = Tag
released_this = released this
-tagged_this = tagged this
file.title = %s at %s
file_raw = Raw
file_history = History
@@ -1365,7 +1296,6 @@ editor.propose_file_change = Propose file change
editor.new_branch_name = Name the new branch for this commit
editor.new_branch_name_desc = New branch name…
editor.cancel = Cancel
-editor.filename_cannot_be_empty = The filename cannot be empty.
editor.filename_is_invalid = The filename is invalid: "%s".
editor.commit_email = Commit email
editor.invalid_commit_email = The email for the commit is invalid.
@@ -1399,7 +1329,6 @@ editor.require_signed_commit = Branch requires a signed commit
editor.cherry_pick = Cherry-pick %s onto:
editor.revert = Revert %s onto:
-commits.desc = Browse source code change history.
commits.commits = Commits
commits.no_commits = No commits in common. "%s" and "%s" have entirely different histories.
commits.nothing_to_compare = These branches are equal.
@@ -1409,9 +1338,6 @@ commits.search_all = All Branches
commits.author = Author
commits.message = Message
commits.date = Date
-commits.older = Older
-commits.newer = Newer
-commits.signed_by = Signed by
commits.signed_by_untrusted_user = Signed by untrusted user
commits.signed_by_untrusted_user_unmatched = Signed by untrusted user who does not match committer
commits.gpg_key_id = GPG Key ID
@@ -1464,7 +1390,6 @@ projects.column.set_default = "Set Default"
projects.column.set_default_desc = "Set this column as default for uncategorized issues and pulls"
projects.column.delete = "Delete Column"
projects.column.deletion_desc = "Deleting a project column moves all related issues to the default column. Continue?"
-projects.column.color = "Color"
projects.open = Open
projects.close = Close
projects.column.assigned_to = Assigned to
@@ -1513,8 +1438,6 @@ issues.create = Create Issue
issues.new_label = New Label
issues.new_label_placeholder = Label name
issues.new_label_desc_placeholder = Description
-issues.create_label = Create Label
-issues.label_templates.title = Load a predefined set of labels
issues.label_templates.info = No labels exist yet. Create a label with 'New Label' or use a predefined label set:
issues.label_templates.helper = Select a label set
issues.label_templates.use = Use Label Set
@@ -1626,8 +1549,6 @@ issues.ref_issue_from = `referenced this issue %[4]s referenced this pull request %[4]s %[2]s`
issues.ref_closing_from = `referenced a pull request %[4]s that will close this issue %[2]s`
issues.ref_reopening_from = `referenced a pull request %[4]s that will reopen this issue %[2]s`
-issues.ref_closed_from = `closed this issue %[4]s %[2]s`
-issues.ref_reopened_from = `reopened this issue %[4]s %[2]s`
issues.ref_from = `from %[1]s`
issues.author = Author
issues.author_helper = This user is the author.
@@ -1677,7 +1598,6 @@ issues.label.filter_sort.by_size = Smallest size
issues.label.filter_sort.reverse_by_size = Largest size
issues.num_participants = %d Participants
issues.attachment.open_tab = `Click to see "%s" in a new tab`
-issues.attachment.download = `Click to download "%s"`
issues.subscribe = Subscribe
issues.unsubscribe = Unsubscribe
issues.unpin = Unpin
@@ -1731,28 +1651,21 @@ issues.add_time_manually = Manually Add Time
issues.add_time_hours = Hours
issues.add_time_minutes = Minutes
issues.add_time_sum_to_small = No time was entered.
-issues.time_spent_total = Total Time Spent
issues.time_spent_from_all_authors = `Total Time Spent: %s`
issues.due_date = Due Date
-issues.invalid_due_date_format = "Due date format must be 'yyyy-mm-dd'."
-issues.error_modifying_due_date = "Failed to modify the due date."
-issues.error_removing_due_date = "Failed to remove the due date."
issues.push_commit_1 = "added %d commit %s"
issues.push_commits_n = "added %d commits %s"
issues.force_push_codes = `force-pushed %[1]s from %[2]s
to %[4]s
%[6]s`
issues.force_push_compare = Compare
issues.due_date_form = "yyyy-mm-dd"
-issues.due_date_form_add = "Add due date"
issues.due_date_form_edit = "Edit"
issues.due_date_form_remove = "Remove"
-issues.due_date_not_writer = "You need write access to this repository in order to update the due date of an issue."
issues.due_date_not_set = "No due date set."
issues.due_date_added = "added the due date %s %s"
issues.due_date_modified = "modified the due date from %[2]s to %[1]s %[3]s"
issues.due_date_remove = "removed the due date %s %s"
issues.due_date_overdue = "Overdue"
-issues.due_date_invalid = "The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'."
issues.dependency.title = Dependencies
issues.dependency.issue_no_dependencies = No dependencies set.
issues.dependency.pr_no_dependencies = No dependencies set.
@@ -1793,7 +1706,6 @@ issues.review.dismissed_label = Dismissed
issues.review.left_comment = left a comment
issues.review.content.empty = You need to leave a comment indicating the requested change(s).
issues.review.reject = "requested changes %s"
-issues.review.wait = "was requested for review %s"
issues.review.add_review_request = "requested review from %s %s"
issues.review.remove_review_request = "removed review request for %s %s"
issues.review.remove_review_request_self = "refused to review %s"
@@ -1818,7 +1730,6 @@ issues.review.requested = Review pending
issues.review.rejected = Changes requested
issues.review.stale = Updated since approval
issues.review.unofficial = Uncounted approval
-issues.assignee.error = Not all assignees was added due to an unexpected error.
issues.reference_issue.body = Body
issues.content_history.deleted = deleted
issues.content_history.edited = edited
@@ -2142,7 +2053,6 @@ contributors.contribution_type.additions = Additions
contributors.contribution_type.deletions = Deletions
settings = Settings
-settings.desc = Settings is where you can manage the settings for the repository
settings.options = Repository
settings.public_access = Public Access
settings.public_access_desc = Configure public visitor's access permissions to override the defaults of this repository.
@@ -2171,7 +2081,6 @@ settings.mirror_settings.docs.pull_mirror_instructions = To set up a pull mirror
settings.mirror_settings.docs.more_information_if_disabled = You can find out more about push and pull mirrors here:
settings.mirror_settings.docs.doc_link_title = How do I mirror repositories?
settings.mirror_settings.docs.doc_link_pull_section = the "Pulling from a remote repository" section of the documentation.
-settings.mirror_settings.docs.pulling_remote_title = Pulling from a remote repository
settings.mirror_settings.mirrored_repository = Mirrored repository
settings.mirror_settings.pushed_repository = Pushed repository
settings.mirror_settings.direction = Direction
@@ -2275,13 +2184,10 @@ settings.signing_settings = Signing Verification Settings
settings.trust_model = Signature Trust Model
settings.trust_model.default = Default Trust Model
settings.trust_model.default.desc= Use the default repository trust model for this installation.
-settings.trust_model.collaborator = Collaborator
settings.trust_model.collaborator.long = Collaborator: Trust signatures by collaborators
settings.trust_model.collaborator.desc = Valid signatures by collaborators of this repository will be marked "trusted" - (whether they match the committer or not). Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" if not.
-settings.trust_model.committer = Committer
settings.trust_model.committer.long = Committer: Trust signatures that match committers (This matches GitHub and will force Gitea signed commits to have Gitea as the committer)
settings.trust_model.committer.desc = Valid signatures will only be marked "trusted" if they match the committer, otherwise they will be marked "unmatched". This forces Gitea to be the committer on signed commits with the actual committer marked as Co-authored-by: and Co-committed-by: trailer in the commit. The default Gitea key must match a User in the database.
-settings.trust_model.collaboratorcommitter = Collaborator+Committer
settings.trust_model.collaboratorcommitter.long = Collaborator+Committer: Trust signatures by collaborators which match the committer
settings.trust_model.collaboratorcommitter.desc = Valid signatures by collaborators of this repository will be marked "trusted" if they match the committer. Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" otherwise. This will force Gitea to be marked as the committer on signed commits with the actual committer marked as Co-Authored-By: and Co-Committed-By: trailer in the commit. The default Gitea key must match a User in the database.
settings.wiki_delete = Delete Wiki Data
@@ -2340,7 +2246,6 @@ settings.githook_edit_desc = If the hook is inactive, sample content will be pre
settings.githook_name = Hook Name
settings.githook_content = Hook Content
settings.update_githook = Update Hook
-settings.add_webhook_desc = Gitea will send POST
requests with a specified content type to the target URL. Read more in the webhooks guide.
settings.payload_url = Target URL
settings.http_method = HTTP Method
settings.content_type = POST Content Type
@@ -2418,9 +2323,6 @@ settings.update_webhook = Update Webhook
settings.update_hook_success = The webhook has been updated.
settings.delete_webhook = Remove Webhook
settings.recent_deliveries = Recent Deliveries
-settings.hook_type = Hook Type
-settings.slack_token = Token
-settings.slack_domain = Domain
settings.slack_channel = Channel
settings.add_web_hook_desc = Integrate %s into your repository.
settings.web_hook_name_gitea = Gitea
@@ -2457,12 +2359,7 @@ settings.branches = Branches
settings.protected_branch = Branch Protection
settings.protected_branch.save_rule = Save Rule
settings.protected_branch.delete_rule = Delete Rule
-settings.protected_branch_can_push = Allow push?
-settings.protected_branch_can_push_yes = You can push
-settings.protected_branch_can_push_no = You cannot push
settings.branch_protection = Branch Protection Rules for Branch '%s'
-settings.protect_this_branch = Enable Branch Protection
-settings.protect_this_branch_desc = Prevents deletion and restricts Git pushing and merging to the branch.
settings.protect_disable_push = Disable Push
settings.protect_disable_push_desc = No pushing will be allowed to this branch.
settings.protect_disable_force_push = Disable Force Push
@@ -2514,8 +2411,6 @@ settings.protect_protected_file_patterns = "Protected file patterns (separated u
settings.protect_protected_file_patterns_desc = "Protected files are not allowed to be changed directly even if user has rights to add, edit, or delete files in this branch. Multiple patterns can be separated using semicolon (';'). See %[2]s documentation for pattern syntax. Examples: .drone.yml
, /docs/**/*.txt
."
settings.protect_unprotected_file_patterns = "Unprotected file patterns (separated using semicolon ';'):"
settings.protect_unprotected_file_patterns_desc = "Unprotected files that are allowed to be changed directly if user has write access, bypassing push restriction. Multiple patterns can be separated using semicolon (';'). See %[2]s documentation for pattern syntax. Examples: .drone.yml
, /docs/**/*.txt
."
-settings.add_protected_branch = Enable protection
-settings.delete_protected_branch = Disable protection
settings.update_protect_branch_success = Branch protection for rule "%s" has been updated.
settings.remove_protected_branch_success = Branch protection for rule "%s" has been removed.
settings.remove_protected_branch_failed = Removing branch protection rule "%s" failed.
@@ -2532,7 +2427,6 @@ settings.block_admin_merge_override_desc = Administrators must follow branch pro
settings.default_branch_desc = Select a default repository branch for pull requests and code commits:
settings.merge_style_desc = Merge Styles
settings.default_merge_style_desc = Default Merge Style
-settings.choose_branch = Choose a branch…
settings.no_protected_branch = There are no protected branches.
settings.edit_protected_branch = Edit
settings.protected_branch_required_rule_name = Required rule name
@@ -2609,8 +2503,6 @@ settings.lfs_pointers.associateAccessible=Associate accessible %d OIDs
settings.rename_branch_failed_exist=Cannot rename branch because target branch %s exists.
settings.rename_branch_failed_not_exist=Cannot rename branch %s because it does not exist.
settings.rename_branch_success =Branch %s was successfully renamed to %s.
-settings.rename_branch_from=old branch name
-settings.rename_branch_to=new branch name
settings.rename_branch=Rename branch
diff.browse_source = Browse Source
@@ -2664,7 +2556,6 @@ diff.protected = Protected
diff.image.side_by_side = Side by Side
diff.image.swipe = Swipe
diff.image.overlay = Overlay
-diff.has_escaped = This line has hidden Unicode characters
diff.show_file_tree = Show file tree
diff.hide_file_tree = Hide file tree
diff.submodule_added = Submodule %[1]s added at %[2]s
@@ -2684,7 +2575,6 @@ release.compare = Compare
release.edit = edit
release.ahead.commits = %d commits
release.ahead.target = to %s since this release
-tag.ahead.target = to %s since this tag
release.source_code = Source Code
release.new_subheader = Releases organize project versions.
release.edit_subheader = Releases organize project versions.
@@ -2712,7 +2602,6 @@ release.deletion_tag_success = The tag has been deleted.
release.tag_name_already_exist = A release with this tag name already exists.
release.tag_name_invalid = The tag name is not valid.
release.tag_name_protected = The tag name is protected.
-release.tag_already_exist = This tag name already exists.
release.downloads = Downloads
release.download_count = Downloads: %s
release.add_tag_msg = Use the title and content of release as tag message.
@@ -2722,7 +2611,6 @@ release.tags_for = Tags for %s
branch.name = Branch Name
branch.already_exists = A branch named "%s" already exists.
-branch.delete_head = Delete
branch.delete = Delete Branch "%s"
branch.delete_html = Delete Branch
branch.delete_desc = Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@@ -2750,7 +2638,6 @@ branch.create_new_branch = Create branch from branch:
branch.confirm_create_branch = Create branch
branch.warning_rename_default_branch = You are renaming the default branch.
branch.rename_branch_to = Rename "%s" to:
-branch.confirm_rename_branch = Rename branch
branch.create_branch_operation = Create branch
branch.new_branch = Create new branch
branch.new_branch_from = Create new branch from "%s"
@@ -2766,7 +2653,6 @@ tag.create_tag_from = Create new tag from "%s"
tag.create_success = Tag "%s" has been created.
topic.manage_topics = Manage Topics
-topic.done = Done
topic.count_prompt = You cannot select more than 25 topics
topic.format_prompt = Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
@@ -2816,7 +2702,6 @@ form.create_org_not_allowed = You are not allowed to create an organization.
settings = Settings
settings.options = Organization
-settings.full_name = Full Name
settings.email = Contact Email
settings.website = Website
settings.location = Location
@@ -2841,11 +2726,8 @@ settings.confirm_delete_account = Confirm Deletion
settings.delete_org_title = Delete Organization
settings.delete_org_desc = This organization will be deleted permanently. Continue?
settings.hooks_desc = Add webhooks which will be triggered for all repositories under this organization.
-
settings.labels_desc = Add labels which can be used on issues for all repositories under this organization.
-members.membership_visibility = Membership Visibility:
-members.public = Visible
members.public_helper = make hidden
members.private = Hidden
members.private_helper = make visible
@@ -2856,8 +2738,6 @@ members.remove = Remove
members.remove.detail = Remove %[1]s from %[2]s?
members.leave = Leave
members.leave.detail = Leave %s?
-members.invite_desc = Add a new member to %s:
-members.invite_now = Invite Now
teams.join = Join
teams.leave = Leave
@@ -2877,7 +2757,6 @@ teams.admin_access_helper = Members can pull and push to team repositories and a
teams.no_desc = This team has no description
teams.settings = Settings
teams.owners_permission_desc = Owners have full access to all repositories and have administrator access to the organization.
-teams.members = Team Members
teams.update_settings = Update Settings
teams.delete_team = Delete Team
teams.add_team_member = Add Team Member
@@ -2886,14 +2765,9 @@ teams.invite_team_member.list = Pending Invitations
teams.delete_team_title = Delete Team
teams.delete_team_desc = Deleting a team revokes repository access from its members. Continue?
teams.delete_team_success = The team has been deleted.
-teams.read_permission_desc = This team grants Read access: members can view and clone team repositories.
teams.write_permission_desc = This team grants Write access: members can read from and push to team repositories.
teams.admin_permission_desc = This team grants Admin access: members can read from, push to and add collaborators to team repositories.
-teams.create_repo_permission_desc = Additionally, this team grants Create repository permission: members can create new repositories in organization.
-teams.repositories = Team Repositories
-teams.remove_all_repos_title = Remove all team repositories
teams.remove_all_repos_desc = This will remove all repositories from the team.
-teams.add_all_repos_title = Add all repositories
teams.add_all_repos_desc = This will add all the organization's repositories to the team.
teams.add_nonexistent_repo = "The repository you're trying to add doesn't exist, please create it first."
teams.add_duplicate_users = User is already a team member.
@@ -2904,9 +2778,6 @@ teams.specific_repositories = Specific repositories
teams.specific_repositories_helper = Members will only have access to repositories explicitly added to the team. Selecting this will not automatically remove repositories already added with All repositories.
teams.all_repositories = All repositories
teams.all_repositories_helper = Team has access to all repositories. Selecting this will add all existing repositories to the team.
-teams.all_repositories_read_permission_desc = This team grants Read access to all repositories: members can view and clone repositories.
-teams.all_repositories_write_permission_desc = This team grants Write access to all repositories: members can read from and push to repositories.
-teams.all_repositories_admin_permission_desc = This team grants Admin access to all repositories: members can read from, push to and add collaborators to repositories.
teams.invite.title = You have been invited to join team %s in organization %s.
teams.invite.by = Invited by %s
teams.invite.description = Please click the button below to join the team.
@@ -3120,7 +2991,6 @@ repos.unadopted = Unadopted Repositories
repos.unadopted.no_more = No more unadopted repositories found
repos.owner = Owner
repos.name = Name
-repos.private = Private
repos.issues = Issues
repos.size = Size
repos.lfs_size = LFS Size
@@ -3159,7 +3029,6 @@ auths.updated = Updated
auths.auth_type = Authentication Type
auths.auth_name = Authentication Name
auths.security_protocol = Security Protocol
-auths.domain = Domain
auths.host = Host
auths.port = Port
auths.bind_dn = Bind DN
@@ -3188,7 +3057,6 @@ auths.user_attribute_in_group = User Attribute Listed In Group
auths.map_group_to_team = Map LDAP groups to Organization teams (leave the field empty to skip)
auths.map_group_to_team_removal = Remove users from synchronized teams if user does not belong to corresponding LDAP group
auths.enable_ldap_groups = Enable LDAP groups
-auths.ms_ad_sa = MS AD Search Attributes
auths.smtp_auth = SMTP Authentication Type
auths.smtphost = SMTP Host
auths.smtpport = SMTP Port
@@ -3225,7 +3093,6 @@ auths.oauth2_admin_group = Group Claim value for administrator users. (Optional
auths.oauth2_restricted_group = Group Claim value for restricted users. (Optional - requires claim name above)
auths.oauth2_map_group_to_team = Map claimed groups to Organization teams. (Optional - requires claim name above)
auths.oauth2_map_group_to_team_removal = Remove users from synchronized teams if user does not belong to corresponding group.
-auths.enable_auto_register = Enable Auto Registration
auths.sspi_auto_create_users = Automatically create users
auths.sspi_auto_create_users_helper = Allow SSPI auth method to automatically create new accounts for users that login for the first time
auths.sspi_auto_activate_users = Automatically activate users
@@ -3282,7 +3149,6 @@ config.run_mode = Run Mode
config.git_version = Git Version
config.app_data_path = App Data Path
config.repo_root_path = Repository Root Path
-config.lfs_root_path = LFS Root Path
config.log_file_root_path = Log Path
config.script_type = Script Type
config.reverse_auth_user = Reverse Authentication User
@@ -3357,9 +3223,6 @@ config.send_test_mail_submit = Send
config.test_mail_failed = Failed to send a testing email to "%s": %v
config.test_mail_sent = A testing email has been sent to "%s".
-config.oauth_config = OAuth Configuration
-config.oauth_enabled = Enabled
-
config.cache_config = Cache Configuration
config.cache_adapter = Cache Adapter
config.cache_interval = Cache Interval
@@ -3377,10 +3240,8 @@ config.cookie_name = Cookie Name
config.gc_interval_time = GC Interval Time
config.session_life_time = Session Life Time
config.https_only = HTTPS Only
-config.cookie_life_time = Cookie Life Time
config.picture_config = Picture and Avatar Configuration
-config.picture_service = Picture Service
config.disable_gravatar = Disable Gravatar
config.enable_federated_avatar = Enable Federated Avatars
config.open_with_editor_app_help = The "Open with" editors for the clone menu. If left empty, the default will be used. Expand to see the default.
@@ -3400,7 +3261,6 @@ config.git_gc_timeout = GC Operation Timeout
config.log_config = Log Configuration
config.logger_name_fmt = Logger: %s
config.disabled_logger = Disabled
-config.access_log_mode = Access Log Mode
config.access_log_template = Access Log Template
config.xorm_log_sql = Log SQL
@@ -3420,13 +3280,9 @@ monitor.trace = Trace
monitor.performance_logs = Performance Logs
monitor.processes_count = %d Processes
monitor.download_diagnosis_report = Download diagnosis report
-monitor.desc = Description
-monitor.start = Start Time
-monitor.execute_time = Execution Time
monitor.last_execution_result = Result
monitor.process.cancel = Cancel process
monitor.process.cancel_desc = Cancelling a process may cause data loss
-monitor.process.children = Children
monitor.queues = Queues
monitor.queue = Queue: %s
@@ -3546,7 +3402,6 @@ watching = Watching
no_subscriptions = No subscriptions
[gpg]
-default_key=Signed with default key
error.extract_sign = Failed to extract signature
error.generate_hash = Failed to generate hash of commit
error.no_committer_account = No account linked to committer's email address
@@ -3559,7 +3414,6 @@ error.probable_bad_default_signature = "WARNING! Although the default key has th
[units]
unit = Unit
error.no_unit_allowed_repo = You are not allowed to access any section of this repository.
-error.unit_not_allowed = You are not allowed to access this repository section.
[packages]
title = Packages
@@ -3614,7 +3468,6 @@ composer.registry = Setup this registry in your ~/.composer/config.json.condarc
file:
@@ -3705,7 +3558,6 @@ owner.settings.cleanuprules.none = No cleanup rules available. Please consult th
owner.settings.cleanuprules.preview = Cleanup Rule Preview
owner.settings.cleanuprules.preview.overview = %d packages are scheduled to be removed.
owner.settings.cleanuprules.preview.none = Cleanup rule does not match any packages.
-owner.settings.cleanuprules.enabled = Enabled
owner.settings.cleanuprules.pattern_full_match = Apply pattern to full package name
owner.settings.cleanuprules.keep.title = Versions that match these rules are kept, even if they match a removal rule below.
owner.settings.cleanuprules.keep.count = Keep the most recent
@@ -3841,7 +3693,6 @@ variables.none = There are no variables yet.
variables.deletion = Remove variable
variables.deletion.description = Removing a variable is permanent and cannot be undone. Continue?
variables.description = Variables will be passed to certain actions and cannot be read otherwise.
-variables.id_not_exist = Variable with ID %d does not exist.
variables.edit = Edit Variable
variables.deletion.failed = Failed to remove variable.
variables.deletion.success = The variable has been removed.
diff --git a/routers/web/repo/migrate.go b/routers/web/repo/migrate.go
index ea15e90e5c297..8f4f0a73ab4ef 100644
--- a/routers/web/repo/migrate.go
+++ b/routers/web/repo/migrate.go
@@ -314,7 +314,7 @@ func MigrateStatus(ctx *context.Context) {
var translatableMessage admin_model.TranslatableMessage
if err := json.Unmarshal([]byte(message), &translatableMessage); err != nil {
translatableMessage = admin_model.TranslatableMessage{
- Format: "migrate.migrating_failed.error",
+ Format: "repo.migrate.migrating_failed.error",
Args: []any{task.Message},
}
}
diff --git a/routers/web/user/setting/profile.go b/routers/web/user/setting/profile.go
index 98995cd69c435..622c897cc8b6c 100644
--- a/routers/web/user/setting/profile.go
+++ b/routers/web/user/setting/profile.go
@@ -71,7 +71,7 @@ func ProfilePost(ctx *context.Context) {
if form.Name != "" {
if user_model.IsFeatureDisabledWithLoginType(ctx.Doer, setting.UserFeatureChangeUsername) {
- ctx.Flash.Error(ctx.Tr("user.form.change_username_disabled"))
+ ctx.Flash.Error(ctx.Tr("form.change_username_disabled"))
ctx.Redirect(setting.AppSubURL + "/user/settings")
return
}
@@ -107,7 +107,7 @@ func ProfilePost(ctx *context.Context) {
if form.FullName != "" {
if user_model.IsFeatureDisabledWithLoginType(ctx.Doer, setting.UserFeatureChangeFullName) {
- ctx.Flash.Error(ctx.Tr("user.form.change_full_name_disabled"))
+ ctx.Flash.Error(ctx.Tr("form.change_full_name_disabled"))
ctx.Redirect(setting.AppSubURL + "/user/settings")
return
}