jojo/options/locale_next/locale_en-US.json
forgejo-backport-action d76d6f24ce [v15.0/forgejo] Improve repo file list table semantics for screen readers (#12031)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/11846

https://codeberg.org/forgejo/forgejo/issues/11116

To understand the impact of this you really need to listen to the before and after screen recordings attached. https://codeberg.org/forgejo/forgejo/issues/11116 is a really great bug report, and I was surprised by how disorienting this actually was when testing manually compared to my expectation after reading the issue. This is an impactful improvement!

This is my first time adding new translation strings. Excited to learn more about that if I've guessed wrong about how to do it.

To summarise, what we're doing here is as follows.

1. Address the core issue by changing the existing `<th>` elements to `<td>` so that screen readers stop semantically associating them with each row and reading them out for every table cell.
2. Replace them with real `<th>` elements that communicate the true semantic role of each column.
3. Add a `<caption>`. This serves a dual purpose: it gives the table an accessible name which improves the navigability of the page, and it gives us a place to explain to the user that the first row of the table is a little bit different because it's the latest commit rather than a file in the repo.
4. Visually hide the new caption and headings so that only screen reader users get them.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. All work and communication must conform to Forgejo's [AI Agreement](https://codeberg.org/forgejo/governance/src/branch/main/AIAgreement.md). There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for JavaScript changes

- I added test coverage for JavaScript changes...
  - [ ] in `web_src/js/*.test.js` if it can be unit tested.
  - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)).

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [ ] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [x] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [ ] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

*The decision if the pull request will be shown in the release notes is up to the mergers / release team.*

The content of the `release-notes/<pull request number>.md` file will serve as the basis for the release notes. If the file does not exist, the title of the pull request will be used instead.

<!--start release-notes-assistant-->

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Features
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/12031): <!--number 12031 --><!--line 0 --><!--description SW1wcm92ZSByZXBvIGZpbGUgbGlzdCB0YWJsZSBzZW1hbnRpY3MgZm9yIHNjcmVlbiByZWFkZXJz-->Improve repo file list table semantics for screen readers<!--description-->
<!--end release-notes-assistant-->

Co-authored-by: Henry Catalini Smith <henry@catalinismith.se>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12031
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2026-04-08 21:14:39 +02:00

590 lines
42 KiB
JSON

{
"home.welcome.no_activity": "No activity",
"home.welcome.activity_hint": "There is nothing in your feed yet. Your actions and activity from repositories that you watch will show up here.",
"home.explore_repos": "Explore repositories",
"home.explore_users": "Explore users",
"home.explore_orgs": "Explore organizations",
"fork.n_forks": {
"one": "%s fork",
"other": "%s forks"
},
"stars.list.none": "No one starred this repo.",
"stars.n_stars": {
"one": "%s star",
"other": "%s stars"
},
"watch.list.none": "No one is watching this repo.",
"watch.n_watchers": {
"one": "%s watcher",
"other": "%s watchers"
},
"followers.incoming.list.self.none": "No one is following your profile.",
"followers.incoming.list.none": "No one is following this user.",
"followers.outgoing.list.self.none": "You are not following anyone.",
"followers.outgoing.list.none": "%s isn't following anyone.",
"relativetime.now": "now",
"relativetime.future": "in future",
"relativetime.mins": {
"one": "%d minute ago",
"other": "%d minutes ago"
},
"relativetime.hours": {
"one": "%d hour ago",
"other": "%d hours ago"
},
"relativetime.days": {
"one": "%d day ago",
"other": "%d days ago"
},
"relativetime.weeks": {
"one": "%d week ago",
"other": "%d weeks ago"
},
"relativetime.months": {
"one": "%d month ago",
"other": "%d months ago"
},
"relativetime.years": {
"one": "%d year ago",
"other": "%d years ago"
},
"relativetime.1day": "yesterday",
"relativetime.1week": "last week",
"relativetime.1month": "last month",
"relativetime.1year": "last year",
"repo.files.caption": "Repository files (latest commit first)",
"repo.files.filename": "Filename",
"repo.files.last_commit_message": "Latest commit message",
"repo.files.last_commit_date": "Latest commit date",
"repo.issues.filter_poster.hint": "Filter by the author",
"repo.issues.filter_assignee.hint": "Filter by assigned user",
"repo.issues.filter_reviewers.hint": "Filter by user who reviewed",
"repo.issues.filter_mention.hint": "Filter by mentioned user",
"repo.issues.filter_modified.hint": "Filter by last modified date",
"repo.issues.filter_sort.hint_with_placeholder": "Sort by: %s",
"issues.updated": "updated %s",
"issues.filters.labels.exclude": "Exclude label",
"issues.filters.labels.unexclude": "Clear exclusion",
"repo.pulls.auto_merge.no_permission": "You do not have permission to cancel this pull request's auto merge.",
"repo.pulls.poster_manage_approval": "Manage approval",
"repo.pulls.poster_requires_approval": "Some workflows are <a href=\"%[1]s\">waiting to be reviewed</a>.",
"repo.pulls.poster_requires_approval.tooltip": "The author of this pull request is not trusted to run workflows triggered by a pull request created from a forked repository or with AGit. The workflows triggered by a `pull_request` event will not run until they are approved.",
"repo.pulls.poster_is_trusted": "The author of this pull request is <a href=\"%[1]s\">always trusted to run workflows</a>.",
"repo.pulls.poster_is_trusted.tooltip": "The author of this pull request is explicitly trusted to run workflows triggered by `pull_request` events.",
"repo.pulls.poster_trust_deny": "Deny",
"repo.pulls.poster_trust_deny.tooltip": "The workflows waiting approval will be canceled.",
"repo.pulls.poster_trust_once": "Approve once",
"repo.pulls.poster_trust_once.tooltip": "The workflows triggered by a `pull_request` event will run on this commit but will need to be approved for all future commits pushed to this pull request.",
"repo.pulls.poster_trust_always": "Approve always",
"repo.pulls.poster_trust_always.tooltip": "The workflows triggered by a `pull_request` event will run on this commit and there will be no need to approve runs from this pull request or future pull requests authored by the same user.",
"repo.pulls.poster_trust_revoke": "Revoke",
"repo.pulls.poster_trust_revoke.tooltip": "The author of this pull request will no longer be trusted to run workflows triggered by a `pull_request` event, each run will have to be manually approved.",
"repo.pulls.already_merged": "Merge failed: This pull request has already been merged.",
"repo.pulls.merged_title_desc": {
"one": "merged %[1]d commit from <code>%[2]s</code> into <code>%[3]s</code> %[4]s",
"other": "merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s"
},
"repo.pulls.title_desc": {
"one": "wants to merge %[1]d commit from <code>%[2]s</code> into <code id=\"%[4]s\">%[3]s</code>",
"other": "wants to merge %[1]d commits from <code>%[2]s</code> into <code id=\"%[4]s\">%[3]s</code>"
},
"repo.pulls.maintainers_can_edit": "Maintainers can edit this pull request.",
"repo.pulls.maintainers_cannot_edit": "Maintainers cannot edit this pull request.",
"repo.form.cannot_create": "All spaces in which you can create repositories have reached the limit of repositories.",
"repo.view.gitmodules_too_large": "The .gitmodules file is too large and will be ignored (on API calls for instance)",
"migrate.form.error.url_credentials": "The URL contains credentials, put them in the username and password fields respectively",
"migrate.github.description": "Migrate data from github.com or GitHub Enterprise server.",
"migrate.git.description": "Migrate a repository only from any Git service.",
"migrate.gitea.description": "Migrate data from gitea.com or other Gitea instances.",
"migrate.gitlab.description": "Migrate data from gitlab.com or other GitLab instances.",
"migrate.gogs.description": "Migrate data from notabug.org or other Gogs instances.",
"migrate.onedev.description": "Migrate data from code.onedev.io or other OneDev instances.",
"migrate.gitbucket.description": "Migrate data from GitBucket instances.",
"migrate.codebase.description": "Migrate data from codebasehq.com.",
"migrate.forgejo.description": "Migrate data from codeberg.org or other Forgejo instances.",
"repo.issue_indexer.title": "Issue Indexer",
"search.milestone_kind": "Search milestones…",
"search.syntax": "Search syntax",
"search.fuzzy": "Fuzzy",
"search.fuzzy_tooltip": "Include results is an approximate match to the search term",
"repo.settings.push_mirror.branch_filter.label": "Branch filter (optional)",
"repo.settings.push_mirror.branch_filter.description": "Branches to be mirrored. Leave blank to mirror all branches. See <a href=\"%[1]s\">%[2]s documentation</a> for syntax. Examples: <code>main, release/*</code>",
"incorrect_root_url": "This Forgejo instance is configured to be served on \"%s\". You are currently viewing Forgejo through a different URL, which may cause parts of the application to break. The canonical URL is controlled by Forgejo admins via the ROOT_URL setting in the app.ini.",
"themes.names.forgejo-auto": "Forgejo (follow system theme)",
"themes.names.forgejo-light": "Forgejo light",
"themes.names.forgejo-dark": "Forgejo dark",
"error.not_found.title": "Page not found",
"warning.repository.out_of_sync": "The database representation of this repository is out of synchronization. If this warning is still shown after pushing a commit to this repository contact the administrator.",
"alert.asset_load_failed": "Failed to load asset files from {path}. Please make sure the asset files can be accessed.",
"alert.range_error": " must be a number between %[1]s and %[2]s.",
"install.invalid_lfs_path": "Unable to create the LFS root at the specified path: %[1]s",
"install.ssh_authorized_keys_inspection_error": "Failed to inspect existing authorized_keys file: %v",
"install.ssh_authorized_keys_unexpected_key": "Enabling SSH for Forgejo conflicts with the file located at %s that contains existing SSH keys. Suggestions: use a dedicated system user for Forgejo, or disable SSH.",
"profile.actions.tooltip": "More actions",
"profile.edit.link": "Edit profile",
"feed.atom.link": "Atom feed",
"keys.ssh.link": "SSH keys",
"keys.gpg.link": "GPG keys",
"keys.verify.token.hint": "The token is only valid for 1 minute. <a href=\"%[1]s\">Get a new one if it expired</a>.",
"admin.config.moderation_config": "Moderation configuration",
"admin.moderation.moderation_reports": "Moderation reports",
"admin.moderation.reports": "Reports",
"admin.moderation.no_open_reports": "There are currently no open reports.",
"admin.moderation.deleted_content_ref": "Reported content with type %[1]v and id %[2]d no longer exists",
"moderation.report.mark_as_handled": "Mark as handled",
"moderation.report.mark_as_ignored": "Mark as ignored",
"moderation.action.account.delete": "Delete account",
"moderation.action.account.suspend": "Suspend account",
"moderation.action.repo.delete": "Delete repository",
"moderation.action.issue.delete": "Delete issue",
"moderation.action.comment.delete": "Delete comment",
"moderation.unknown_action": "Unknown action",
"moderation.users.cannot_suspend_self": "You cannot suspend yourself.",
"moderation.users.cannot_suspend_admins": "Users with admin privileges cannot be suspended.",
"moderation.users.cannot_suspend_org": "Organizations cannot be suspended.",
"moderation.users.already_suspended": "User account is already suspended.",
"moderation.users.suspend_success": "The user account has been suspended.",
"moderation.users.cannot_delete_admins": "Users with admin privileges cannot be deleted.",
"moderation.issue.deletion_success": "The issue has been deleted.",
"moderation.comment.deletion_success": "The comment has been deleted.",
"moderation.report_abuse": "Report abuse",
"moderation.report_content": "Report content",
"moderation.report_abuse_form.header": "Report abuse to administrator",
"moderation.report_abuse_form.details": "This form should be used to report users who create spam profiles, repositories, issues, comments or behave inappropriately.",
"moderation.report_abuse_form.invalid": "Invalid arguments",
"moderation.report_abuse_form.already_reported": "You've already reported this content",
"moderation.abuse_category": "Category",
"moderation.abuse_category.placeholder": "Select a category",
"moderation.abuse_category.spam": "Spam",
"moderation.abuse_category.malware": "Malware",
"moderation.abuse_category.illegal_content": "Illegal content",
"moderation.abuse_category.other_violations": "Other violations of platform rules",
"moderation.report_remarks": "Remarks",
"moderation.report_remarks.placeholder": "Please provide some details regarding the abuse you are reporting.",
"moderation.submit_report": "Submit report",
"moderation.reporting_failed": "Unable to submit the new abuse report: %v",
"moderation.reported_thank_you": "Thank you for your report. The administration has been made aware of it.",
"mail.actions.successful_run_after_failure_subject": "Workflow %[1]s recovered in repository %[2]s",
"mail.actions.not_successful_run_subject": "Workflow %[1]s failed in repository %[2]s",
"mail.actions.successful_run_after_failure": "Workflow %[1]s recovered in repository %[2]s",
"mail.actions.not_successful_run": "Workflow %[1]s failed in repository %[2]s",
"mail.actions.run_info_cur_status": "This Run's Status: %[1]s (just updated from %[2]s)",
"mail.actions.run_info_previous_status": "Previous Run's Status: %[1]s",
"mail.actions.run_info_sha": "Commit: %[1]s",
"mail.actions.run_info_trigger": "Triggered because: %[1]s by: %[2]s",
"mail.issue.action.close_by_commit": "%[1]s closed %[2]s in commit %[3]s.",
"repo.diff.commit.next-short": "Next",
"repo.diff.commit.previous-short": "Prev",
"discussion.locked": "This discussion has been locked. Commenting is limited to contributors.",
"discussion.sidebar.reference": "Reference",
"editor.textarea.tab_hint": "Line already indented. Press <kbd>Tab</kbd> again or <kbd>Escape</kbd> to leave the editor.",
"editor.textarea.shift_tab_hint": "No indentation on this line. Press <kbd>Shift</kbd> + <kbd>Tab</kbd> again or <kbd>Escape</kbd> to leave the editor.",
"admin.auths.allow_username_change": "Allow username change",
"admin.auths.allow_username_change.description": "Allow users to change their username in the profile settings",
"admin.dashboard.cleanup_offline_runners": "Cleanup offline runners",
"admin.dashboard.remove_resolved_reports": "Remove resolved reports",
"admin.dashboard.actions_action_user": "Revoke Forgejo Actions trust for inactive users",
"admin.dashboard.transfer_lingering_logs": "Transfer actions logs of finished actions jobs from the database to storage",
"admin.config.security": "Security configuration",
"admin.config.global_2fa_requirement.title": "Global two-factor requirement",
"admin.config.global_2fa_requirement.none": "No",
"admin.config.global_2fa_requirement.all": "All users",
"admin.config.global_2fa_requirement.admin": "Administrators",
"settings.visibility.description": "Profile visibility affects others' ability to access your non-private repositories. <a href=\"%s\" target=\"_blank\">Learn more</a>.",
"settings.twofa_unroll_unavailable": "Two-factor authentication is required for your account and cannot be disabled.",
"settings.twofa_reenroll": "Re-enroll two-factor authentication",
"settings.twofa_reenroll.description": "Re-enroll your two-factor authentication",
"settings.must_enable_2fa": "This Forgejo instance requires users to enable two-factor authentication before they can access their accounts.",
"settings.specific_repo_access": "Repository access",
"settings.new_access_token": "New access token",
"settings.permissions_access_specific_repositories": "Specific repositories",
"settings.access_token.selected_repositories": {
"one": "Selected repository (%d)",
"other": "Selected repositories (%d)"
},
"settings.access_token.available_repositories": "Available repositories",
"settings.access_token.no_repositories_selected": "No repositories selected.",
"settings.access_token.no_repositories_found": "No repositories found.",
"settings.access_token.remove": "Remove %s",
"settings.access_token.resource_all_help": "Allow access to all resources.",
"settings.access_token.resource_public_only_help": "Limit access to repositories and organizations that are public.",
"settings.access_token.resource_specific_repo_help": "Limit access to a specific list of repositories. Read-only access is permitted to all public repositories. Only permissions that allow access to repositories and issues can be enabled.",
"settings.access_token.admin_disabled": "Administrative permissions are disabled.",
"error.must_enable_2fa": "This Forgejo instance requires users to enable two-factor authentication before they can access their accounts. Enable it at: %s",
"avatar.constraints_hint": "Custom avatar may not exceed %[1]s in size or be larger than %[2]dx%[3]d pixels",
"user.ghost.tooltip": "This user has been deleted, or cannot be matched.",
"og.repo.summary_card.alt_description": "Summary card of repository %[1]s, described as: %[2]s",
"repo.commit.load_tags_failed": "Load tags failed because of internal error",
"compare.branches.title": "Compare branches",
"migrate.pagure.description": "Migrate data from pagure.io or other Pagure instances.",
"migrate.pagure.incorrect_url": "Incorrect source repository URL has been provided",
"migrate.pagure.project_url": "Pagure project URL",
"migrate.pagure.project_example": "The Pagure project URL, e.g. https://pagure.io/pagure",
"migrate.pagure.token_label": "Pagure API Token",
"migrate.pagure.private_issues.summary": "Private Issues (Optional)",
"migrate.pagure.private_issues.description": "This feature is designed to create a second repository containing only private issues from your Pagure project for archive purposes. First, perform a normal migration (without a token) to import all public content. Then, if you have private issues to preserve, create a separate repository using this token option to archive those private issues.",
"migrate.pagure.private_issues.warning": "Be sure to set the repository visibility above to Private if you are using the API key to import private issues. This prevents accidentally exposing private content in a public repository.",
"migrate.pagure.token.placeholder": "Only for creating private issues archive",
"release.n_downloads": {
"one": "%s download",
"other": "%s downloads"
},
"gpg.default_key": "Signed with default key",
"gpg.error.extract_sign": "Failed to extract signature",
"gpg.error.generate_hash": "Failed to generate hash of commit",
"gpg.error.no_committer_account": "No account linked to committer's email address",
"gpg.error.no_gpg_keys_found": "No known key found for this signature in database",
"gpg.error.not_signed_commit": "Not a signed commit",
"gpg.error.failed_retrieval_gpg_keys": "Failed to retrieve any key attached to the committer's account",
"gpg.error.probable_bad_signature": "WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.",
"gpg.error.probable_bad_default_signature": "WARNING! Although the default key has this ID it does not verify this commit! This commit is SUSPICIOUS.",
"notification.notifications": "Notifications",
"notification.unread": "Unread",
"notification.read": "Read",
"notification.no_unread": "No unread notifications.",
"notification.no_read": "No read notifications.",
"notification.pin": "Pin notification",
"notification.mark_as_read": "Mark as read",
"notification.mark_as_unread": "Mark as unread",
"notification.mark_all_as_read": "Mark all as read",
"notification.subscriptions": "Subscriptions",
"notification.watching": "Watching",
"notification.no_subscriptions": "You have no subscriptions.",
"dropzone.default_message": "Drop files or click here to upload.",
"dropzone.invalid_input_type": "Files of this type cannot be uploaded.",
"dropzone.file_too_big": "File size ({{filesize}} MB) exceeds the maximum size of ({{maxFilesize}} MB).",
"dropzone.remove_file": "Remove file",
"munits.data.b": "B",
"munits.data.kib": "KiB",
"munits.data.mib": "MiB",
"munits.data.gib": "GiB",
"munits.data.tib": "TiB",
"munits.data.pib": "PiB",
"munits.data.eib": "EiB",
"packages.title": "Packages",
"packages.empty": "There are no packages yet.",
"packages.empty.documentation": "For more information on the package registry, see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">the documentation</a>.",
"packages.empty.repo": "Did you upload a package, but it's not shown here? Go to <a href=\"%[1]s\">package settings</a> and link it to this repo.",
"packages.registry.documentation": "For more information on the %s registry, see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">the documentation</a>.",
"packages.filter.type": "Type",
"packages.filter.type.all": "All",
"packages.filter.no_result": "Your filter produced no results.",
"packages.filter.container.tagged": "Tagged",
"packages.filter.container.untagged": "Untagged",
"packages.published_by": "Published %[1]s by <a href=\"%[2]s\">%[3]s</a>",
"packages.published_by_in": "Published %[1]s by <a href=\"%[2]s\">%[3]s</a> in <a href=\"%[4]s\"><strong>%[5]s</strong></a>",
"packages.pub.install": "To install the package using Dart, run the following command:",
"packages.installation": "Installation",
"packages.about": "About this package",
"packages.requirements": "Requirements",
"packages.dependencies": "Dependencies",
"packages.keywords": "Keywords",
"packages.details": "Details",
"packages.details.author": "Author",
"packages.details.project_site": "Project website",
"packages.details.repository_site": "Repository website",
"packages.details.documentation_site": "Documentation website",
"packages.details.license": "License",
"packages.assets": "Assets",
"packages.versions": "Versions",
"packages.versions.view_all": "View all",
"packages.dependency.id": "ID",
"packages.dependency.version": "Version",
"packages.search_in_external_registry": "Search in %s",
"packages.common.install": "To install the package, run the following command:",
"packages.common.registry": "Setup this registry from the command line:",
"packages.common.repository": "Repository info",
"packages.alpine.registry": "Setup this registry by adding the url in your <code>/etc/apk/repositories</code> file:",
"packages.alpine.registry.key": "Download the registry public RSA key into the <code>/etc/apk/keys/</code> folder to verify the index signature:",
"packages.alpine.registry.info": "Choose $branch and $repository from the list below.",
"packages.alpine.repository.branches": "Branches",
"packages.alpine.repository.repositories": "Repositories",
"packages.alpine.repository.architectures": "Architectures",
"packages.arch.pacman.helper.gpg": "Add trust certificate for pacman:",
"packages.arch.pacman.repo.multi": "%s has the same version in different distributions.",
"packages.arch.pacman.repo.multi.item": "Configuration for %s",
"packages.arch.pacman.conf": "Add server with related distribution and architecture to <code>/etc/pacman.conf</code> :",
"packages.arch.pacman.sync": "Sync package with pacman:",
"packages.arch.version.properties": "Version properties",
"packages.arch.version.description": "Description",
"packages.arch.version.provides": "Provides",
"packages.arch.version.groups": "Group",
"packages.arch.version.optdepends": "Optional dependencies",
"packages.arch.version.makedepends": "Make dependencies",
"packages.arch.version.checkdepends": "Check dependencies",
"packages.arch.version.conflicts": "Conflicts",
"packages.arch.version.replaces": "Replaces",
"packages.arch.version.backup": "Backup",
"packages.cargo.registry": "Setup this registry in the Cargo configuration file (for example <code>~/.cargo/config.toml</code>):",
"packages.cargo.install": "To install the package using Cargo, run the following command:",
"packages.chef.registry": "Setup this registry in your <code>~/.chef/config.rb</code> file:",
"packages.composer.registry": "Setup this registry in your <code>~/.composer/config.json</code> file:",
"packages.composer.install": "To install the package using Composer, run the following command:",
"packages.composer.dependencies.development": "Development dependencies",
"packages.conan.install": "To install the package using Conan, run the following command:",
"packages.conda.registry": "Setup this registry as a Conda repository in your <code>.condarc</code> file:",
"packages.conda.install": "To install the package using Conda, run the following command:",
"packages.container.images.title": "Images",
"packages.container.details.type": "Image type",
"packages.container.details.platform": "Platform",
"packages.container.pull": "Pull the image from the command line:",
"packages.container.digest": "Digest",
"packages.container.multi_arch": "OS / Arch",
"packages.container.layers": "Image layers",
"packages.container.labels": "Labels",
"packages.container.labels.key": "Key",
"packages.container.labels.value": "Value",
"packages.cran.registry": "Setup this registry in your <code>Rprofile.site</code> file:",
"packages.debian.registry.info": "Choose $distribution and $component from the list below.",
"packages.debian.repository.distributions": "Distributions",
"packages.debian.repository.components": "Components",
"packages.debian.repository.architectures": "Architectures",
"packages.generic.download": "Download package from the command line:",
"packages.go.install": "Install the package from the command line:",
"packages.maven.registry": "Setup this registry in your project <code>pom.xml</code> file:",
"packages.maven.install": "To use the package include the following in the <code>dependencies</code> block in the <code>pom.xml</code> file:",
"packages.maven.install2": "Run via command line:",
"packages.maven.download": "To download the dependency, run via command line:",
"packages.nuget.install": "To install the package using NuGet, run the following command:",
"packages.nuget.dependency.framework": "Target Framework",
"packages.npm.registry": "Setup this registry in your project <code>.npmrc</code> file:",
"packages.npm.install": "To install the package using npm, run the following command:",
"packages.npm.install2": "or add it to the package.json file:",
"packages.npm.dependencies.development": "Development dependencies",
"packages.npm.dependencies.bundle": "Bundled dependencies",
"packages.npm.dependencies.peer": "Peer dependencies",
"packages.npm.dependencies.optional": "Optional dependencies",
"packages.npm.details.tag": "Tag",
"packages.pypi.requires": "Requires Python",
"packages.pypi.install": "To install the package using pip, run the following command:",
"packages.rpm.distros.redhat": "on RedHat based distributions",
"packages.rpm.distros.suse": "on SUSE based distributions",
"packages.rpm.repository.architectures": "Architectures",
"packages.rpm.repository.multiple_groups": "This package is available in multiple groups.",
"packages.alt.install": "Install package",
"packages.alt.setup": "Add a repository to the list of connected repositories (choose the necessary architecture instead of \"_arch_\"):",
"packages.alt.repository.architectures": "Architectures",
"packages.alt.repository.multiple_groups": "This package is available in multiple groups.",
"packages.rubygems.install": "To install the package using gem, run the following command:",
"packages.rubygems.install2": "or add it to the Gemfile:",
"packages.rubygems.dependencies.runtime": "Runtime dependencies",
"packages.rubygems.dependencies.development": "Development dependencies",
"packages.rubygems.required.ruby": "Requires Ruby version",
"packages.rubygems.required.rubygems": "Requires RubyGem version",
"packages.swift.install": "Add the package in your <code>Package.swift</code> file:",
"packages.swift.install2": "and run the following command:",
"packages.vagrant.install": "To add a Vagrant box, run the following command:",
"packages.settings.link": "Link this package to a repository",
"packages.settings.link.description": "If you link a package with a repository, the package is listed in the repository's package list.",
"packages.settings.link.select": "Select repository",
"packages.settings.link.button": "Update repository link",
"packages.settings.link.success": "Repository link was successfully updated.",
"packages.settings.link.error": "Failed to update repository link.",
"packages.settings.delete": "Delete package",
"packages.settings.delete.description": "Deleting a package is permanent and cannot be undone.",
"packages.settings.delete.notice": "You are about to delete %s (%s). This operation is irreversible, are you sure?",
"packages.settings.delete.success": "The package has been deleted.",
"packages.settings.delete.error": "Failed to delete the package.",
"packages.owner.settings.cargo.title": "Cargo registry index",
"packages.owner.settings.cargo.initialize": "Initialize index",
"packages.owner.settings.cargo.initialize.description": "A special index Git repository is needed to use the Cargo registry. Using this option will (re-)create the repository and configure it automatically.",
"packages.owner.settings.cargo.initialize.error": "Failed to initialize Cargo index: %v",
"packages.owner.settings.cargo.initialize.success": "The Cargo index was successfully created.",
"packages.owner.settings.cargo.rebuild": "Rebuild index",
"packages.owner.settings.cargo.rebuild.description": "Rebuilding can be useful if the index is not synchronized with the stored Cargo packages.",
"packages.owner.settings.cargo.rebuild.error": "Failed to rebuild Cargo index: %v",
"packages.owner.settings.cargo.rebuild.success": "The Cargo index was successfully rebuilt.",
"packages.owner.settings.cargo.rebuild.no_index": "Cannot rebuild, no index is initialized.",
"packages.owner.settings.cleanuprules.title": "Cleanup rules",
"packages.owner.settings.cleanuprules.add": "Add cleanup rule",
"packages.owner.settings.cleanuprules.edit": "Edit cleanup rule",
"packages.owner.settings.cleanuprules.none": "There are no cleanup rules yet.",
"packages.owner.settings.cleanuprules.preview": "Cleanup rule preview",
"packages.owner.settings.cleanuprules.preview.overview": "%d packages are scheduled to be removed.",
"packages.owner.settings.cleanuprules.preview.none": "Cleanup rule does not match any packages.",
"packages.owner.settings.cleanuprules.pattern_full_match": "Apply pattern to full package name",
"packages.owner.settings.cleanuprules.keep.title": "Versions that match these rules are kept, even if they match a removal rule below.",
"packages.owner.settings.cleanuprules.keep.count": "Keep the most recent",
"packages.owner.settings.cleanuprules.keep.pattern": "Keep versions matching",
"packages.owner.settings.cleanuprules.keep.pattern.container": "The <code>latest</code> version is always kept for Container packages.",
"packages.owner.settings.cleanuprules.remove.title": "Versions that match these rules are removed, unless a rule above says to keep them.",
"packages.owner.settings.cleanuprules.remove.days": "Remove versions older than",
"packages.owner.settings.cleanuprules.remove.pattern": "Remove versions matching",
"packages.owner.settings.cleanuprules.success.update": "Cleanup rule has been updated.",
"packages.owner.settings.cleanuprules.success.delete": "Cleanup rule has been deleted.",
"packages.owner.settings.chef.title": "Chef registry",
"packages.owner.settings.chef.keypair": "Generate key pair",
"packages.owner.settings.chef.keypair.description": "Requests sent to the Chef registry must be cryptographically signed as a means of authentication. When generating a keypair, only the public key is stored on Forgejo. The private key is provided to you to be used with knife. Generating a new keypair will overwrite the previous one.",
"access_token.error.specified_repos_none": "Access tokens with specified repositories must have at least one repository.",
"access_token.error.specified_repos_and_public_only": "Access tokens with specified repositories cannot be combined with the public-only scope.",
"access_token.error.specified_repos_and_invalid_scope": "Access tokens with specified repositories can only be used with the read:issue, write:issue, read:repository, and write:repository scopes.",
"actions.status.diagnostics.waiting": {
"one": "Waiting for a runner with the following label: %s",
"other": "Waiting for a runner with the following labels: %s"
},
"actions.status.unknown": "Unknown",
"actions.status.waiting": "Waiting",
"actions.status.running": "Running",
"actions.status.success": "Success",
"actions.status.failure": "Failure",
"actions.status.cancelled": "Canceled",
"actions.status.skipped": "Skipped",
"actions.status.blocked": "Blocked",
"actions.actions": "Actions",
"actions.runners": "Runners",
"actions.runners.runner_manage_panel": "Manage runners",
"actions.runners.new": "Create new runner",
"actions.runners.new_notice": "How to start a runner",
"actions.runners.status": "Status",
"actions.runners.status.unspecified": "Unknown",
"actions.runners.status.idle": "Idle",
"actions.runners.status.active": "Active",
"actions.runners.status.offline": "Offline",
"actions.runners.uuid": "UUID",
"actions.runners.name": "Name",
"actions.runners.owner_type": "Type",
"actions.runners.description": "Description",
"actions.runners.token": "Token",
"actions.runners.ephemeral": "Ephemeral",
"actions.runners.labels": "Labels",
"actions.runners.last_online": "Last online time",
"actions.runners.list_runners.details_column": "Details",
"actions.runners.list_runners.edit_column": "Edit",
"actions.runners.list_runners.delete_column": "Delete",
"actions.runners.list_runners.details_button": "Details",
"actions.runners.list_runners.details_button_aria": "Show details of %s",
"actions.runners.list_runners.delete_button": "Delete",
"actions.runners.list_runners.delete_button_aria": "Delete %s",
"actions.runners.list_runners.edit_button": "Edit",
"actions.runners.list_runners.edit_button_aria": "Edit %s",
"actions.runners.runner_title": "Runner %s",
"actions.runners.ephemeral.yes": "yes",
"actions.runners.ephemeral.no": "no",
"actions.runners.task_list_repo": "Recent tasks of this repository on this runner",
"actions.runners.task_list_org": "Recent tasks on this runner within this organization",
"actions.runners.task_list_admin": "Recent tasks on this runner",
"actions.runners.task_list_user": "Recent tasks of this user on this runner",
"actions.runners.task_list.no_tasks": "There are no tasks yet.",
"actions.runners.task_list.run": "Run",
"actions.runners.task_list.status": "Status",
"actions.runners.task_list.repository": "Repository",
"actions.runners.task_list.commit": "Commit",
"actions.runners.task_list.done_at": "Done at",
"actions.runners.edit_runner_button": "Edit runner",
"actions.runners.create_runner.page_title": "Create new runner",
"actions.runners.create_runner.title": "Create new runner",
"actions.runners.create_runner.properties_fieldset": "Properties",
"actions.runners.create_runner.name_label": "Name",
"actions.runners.create_runner.description_label": "Description",
"actions.runners.create_runner.create_button": "Create",
"actions.runners.create_runner.cancel_button": "Cancel",
"actions.runners.edit_runner.page_title": "Edit runner %s",
"actions.runners.edit_runner.title": "Edit runner %s",
"actions.runners.edit_runner.properties_fieldset": "Properties",
"actions.runners.edit_runner.properties_options": "Options",
"actions.runners.edit_runner.name_label": "Name",
"actions.runners.edit_runner.description_label": "Description",
"actions.runners.edit_runner.regenerate_token_label": "Regenerate token",
"actions.runners.edit_runner.regenerate_token_help": "The existing token will be invalidated immediately. You will receive a new token on the next page.",
"actions.runners.edit_runner.save_button": "Save",
"actions.runners.edit_runner.cancel_button": "Cancel",
"actions.runners.runner_setup.title": "Set up runner %s",
"actions.runners.show_registration_token": "Show registration token",
"actions.runners.update_runner.success": "Runner edited successfully",
"actions.runners.update_runner.failed": "Failed to edit runner",
"actions.runners.delete_runner.header": "Confirm to delete this runner",
"actions.runners.delete_runner.notice": "If a task is running on this runner, it will be terminated and marked as failed. It may break building workflow.",
"actions.runners.delete_runner.success": "Runner deleted successfully",
"actions.runners.delete_runner.failed": "Failed to delete runner",
"actions.runners.runner_details.page_title": "Runner %s",
"actions.runners.runner_details.labels_note": "The runner's labels are defined in the configuration file of Forgejo Runner or passed as command line option. They are updated every time Forgejo Runner establishes a connection to Forgejo.",
"actions.runners.runner_setup.page_title": "Set up runner %s",
"actions.runners.runner_setup.list_of_runners_link": "List of runners",
"actions.runners.runner_setup.last_chance_copying_token": "Copy the token now as you will not be able to see it again!",
"actions.runners.runner_setup.button_copy_uuid_aria": "Copy runner UUID",
"actions.runners.runner_setup.button_copy_token_aria": "Copy runner token",
"actions.runners.runner_setup.heading_using_configuration": "Using the runner configuration file",
"actions.runners.runner_setup.configuration_snippet_aria": "Snippet to insert into the runner configuration",
"actions.runners.runner_setup.program_options_snippet_aria": "How to invoke forgejo-runner",
"actions.runners.runner_setup.instruction_replace_connection_name": "Replace the connection name (<code>forgejo</code> in the example) with a value of your liking.",
"actions.runners.runner_setup.heading_using_options": "Using program options",
"actions.runners.runner_setup.instruction_advanced_configurations": "For configuring Forgejo Runner running in containers or advanced configurations, see the <a href=\"https://TO-BE-REPLACED.COM\">documentation</a>.",
"actions.runners.none": "No runners available",
"actions.runners.reset_registration_token.token": "Registration Token (Deprecated)",
"actions.runners.reset_registration_token.button": "Reset registration token",
"actions.runners.reset_registration_token.success": "Runner registration token reset successfully",
"actions.runs.run_attempt_label": "Run attempt #%[1]s (%[2]s)",
"actions.runs.viewing_out_of_date_run": "You are viewing an out-of-date run of this job that was executed %[1]s.",
"actions.runs.view_most_recent_run": "View most recent run",
"actions.runs.all_workflows": "All workflows",
"actions.runs.scheduled_description": "Scheduled run of commit <a href=\"%[1]s\">%[2]s</a>",
"actions.runs.workflow_dispatch_description": "Run of commit <a href=\"%[1]s\">%[2]s</a> triggered by <a href=\"%[3]s\">%[4]s</a>",
"actions.runs.on_push_description": "Commit <a href=\"%[1]s\">%[2]s</a> pushed by <a href=\"%[3]s\">%[4]s</a>",
"actions.runs.workflow": "Workflow",
"actions.runs.invalid_workflow_helper": "Workflow config file is invalid. Please check your config file: %s",
"actions.runs.no_matching_online_runner.helper": "No matching online runner with label: %s",
"actions.runs.no_job_without_needs": "The workflow must contain at least one job without dependencies.",
"actions.runs.no_job": "The workflow must contain at least one job",
"actions.runs.actor": "Actor",
"actions.runs.status": "Status",
"actions.runs.actors_no_select": "All actors",
"actions.runs.status_no_select": "All status",
"actions.runs.no_results": "No results matched.",
"actions.runs.no_workflows": "There are no workflows yet.",
"actions.runs.all_runs_link": "all runs",
"actions.workflow.job_parsing_error": "Unable to parse jobs in workflow: %v",
"actions.workflow.event_detection_error": "Unable to parse supported events in workflow: %v",
"actions.workflow.persistent_incomplete_matrix": "Unable to evaluate `strategy.matrix` of job %[1]s due to a `needs` expression that was invalid. It may reference a job that is not in it's 'needs' list (%[2]s), or an output that doesn't exist on one of those jobs.",
"actions.workflow.incomplete_matrix_missing_job": "Unable to evaluate `strategy.matrix` of job %[1]s: job %[2]s is not in the `needs` list of job %[1]s (%[3]s).",
"actions.workflow.incomplete_matrix_missing_output": "Unable to evaluate `strategy.matrix` of job %[1]s: job %[2]s is missing output %[3]s.",
"actions.workflow.incomplete_matrix_unknown_cause": "Unable to evaluate `strategy.matrix` of job %[1]s: unknown error.",
"actions.workflow.incomplete_runson_missing_job": "Unable to evaluate `runs-on` of job %[1]s: job %[2]s is not in the `needs` list of job %[1]s (%[3]s).",
"actions.workflow.incomplete_runson_missing_output": "Unable to evaluate `runs-on` of job %[1]s: job %[2]s is missing output %[3]s.",
"actions.workflow.incomplete_runson_missing_matrix_dimension": "Unable to evaluate `runs-on` of job %[1]s: matrix dimension %[2]s does not exist.",
"actions.workflow.incomplete_runson_unknown_cause": "Unable to evaluate `runs-on` of job %[1]s: unknown error.",
"actions.workflow.incomplete_with_missing_job": "Unable to evaluate `with` of job %[1]s: job %[2]s is not in the `needs` list of job %[1]s (%[3]s).",
"actions.workflow.incomplete_with_missing_output": "Unable to evaluate `with` of job %[1]s: job %[2]s is missing output %[3]s.",
"actions.workflow.incomplete_with_missing_matrix_dimension": "Unable to evaluate `with` of job %[1]s: matrix dimension %[2]s does not exist.",
"actions.workflow.incomplete_with_unknown_cause": "Unable to evaluate `with` of job %[1]s: unknown error.",
"actions.workflow.pre_execution_error": "Workflow was not executed due to an error that blocked the execution attempt.",
"actions.secrets.creation.name_description": "The name of a secret can only contain letters, numbers, and underscores. It cannot start with FORGEJO_, GITEA_, GITHUB_, or a number. Forgejo will automatically convert it to uppercase.",
"actions.secrets.creation.value_description": "The value of a secret can be any text. Special characters are retained. CRLF (Windows-style line breaks) is automatically converted to LF. Encode the value with Base64 if linebreaks should be retained.",
"actions.variables.mutation.name_description": "The name of a variable can only contain letters, numbers, and underscores. It cannot be named CI or start with FORGEJO_, GITEA_, GITHUB_, or a number. Forgejo will automatically convert it to uppercase.",
"actions.variables.mutation.value_description": "A variable's value can be any text. Special characters are retained. CRLF (Windows-style line breaks) is automatically converted to LF. Encode the value with Base64 if linebreaks should be retained.",
"actions.secrets.edit_button": "Edit secret \"%s\"",
"actions.secrets.mutation.header": "Edit secret \"%s\"",
"actions.secrets.mutation.success_message": "The secret \"%s\" has been updated.",
"actions.secrets.mutation.failure_message": "The secret \"%s\" could not be updated.",
"actions.secrets.mutation.name_description": "The name of a secret can only contain letters, numbers, and underscores. It cannot start with FORGEJO_, GITEA_, GITHUB_, or a number. Forgejo will automatically convert it to uppercase.",
"actions.secrets.mutation.value_description": "The existing value will not be shown. Leave the field empty if you do not want to modify it. Special characters are retained. CRLF (Windows-style line breaks) is automatically converted to LF. Encode the value with Base64 if linebreaks should be retained.",
"pulse.n_active_issues": {
"one": "%s active issue",
"other": "%s active issues"
},
"pulse.n_active_prs": {
"one": "%s active pull request",
"other": "%s active pull requests"
},
"teams.add_all_repos.modal.header": "Add all repositories",
"teams.remove_all_repos.modal.header": "Remove all repositories",
"pulls.manual_merge.helper": "Manual merge helper",
"pulls.manual_merge.helpder.description": "Use this merge commit message when completing the merge manually.",
"pulls.manual_merge.commit.title": "Merge commit title",
"pulls.manual_merge.commit.body": "Merge commit body",
"pulls.manual_merge.copy.button": "Copy merge commit message",
"admin.auths.oauth2_quota_group_claim_name": "Claim name providing group names for this source to be used for quota management. (Optional)",
"admin.auths.oauth2_quota_group_map": "Map claimed groups to quota groups. (Optional - requires claim name above)",
"admin.auths.oauth2_quota_group_map_removal": "Remove users from synchronized quota groups if user does not belong to corresponding group.",
"editor.search": "Search",
"editor.find_previous": "Previous find",
"editor.find_next": "Next find",
"editor.replace": "Replace",
"editor.replace_all": "Replace all",
"editor.toggle_case": "Toggle case sensitivity",
"editor.toggle_regex": "Toggle using regular expressions",
"editor.toggle_whole_word": "Toggle matching whole words",
"form.RunnerName": "Name",
"graphs.recent_commits.title": "Number of commits in the past year",
"graphs.code_frequency.title": "Code frequency over the history of {0}",
"meta.last_line": "Thank you for translating Forgejo! This line isn't seen by the users but it serves other purposes in the translation management. You can place a fun fact in the translation instead of translating it."
}