Compare commits

...

85 commits

Author SHA1 Message Date
Matthias Riße
c5b3812553 Use annexed content for comparison in diffs (#57)
Some checks failed
/ build-oci-image (rootful) (push) Has been cancelled
/ build-oci-image (rootless) (push) Has been cancelled
Integration tests for the release process / release-simulation (push) Has been cancelled
/ release (push) Has been cancelled
testing / backend-checks (push) Has been cancelled
testing / frontend-checks (push) Has been cancelled
testing / test-unit (push) Has been cancelled
testing / test-e2e (push) Has been cancelled
testing / test-remote-cacher (redis) (push) Has been cancelled
testing / test-remote-cacher (valkey) (push) Has been cancelled
testing / test-remote-cacher (garnet) (push) Has been cancelled
testing / test-remote-cacher (redict) (push) Has been cancelled
testing / test-mysql (push) Has been cancelled
testing / test-pgsql (push) Has been cancelled
testing / test-sqlite (push) Has been cancelled
testing / security-check (push) Has been cancelled
This makes it such that annexed files are treated like plain git files
in comparisons (e.g. the diff of a commit).

It also changes the image diff viewer to show a more reasonable error
message when one of the annexed files under comparison is missing.

Fixes #56.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/57
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
0ee62840ff Invalidate outdated annex UUID cache entries (#60)
The previous implementation could lead to errors e.g. when a repository
was removed and a new one with a new UUID was created under the same
name. This now checks the validity of the retrieved cache entry every
time and invalidates the cache if necessary.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/60
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
efe77599e6 Pre-populate the git-annex UUID cache at startup (#59)
This eliminates the wait time for the first p2phttp connection since
server startup at the cost of adding that time to the startup itself.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/59
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
22855c6238 Cache git-annex UUID to repository path mappings (#54)
Always walking the filesystem and searching for UUIDs slowed p2phttp
operations down significantly on a production server with more than a
handful of repositories. This caching strategy ensures that only the
first call is rather slow, and subsequent ones should be much faster.

This should better be implemented as a background job, but for now this
is a simple solution to the problem.

Fixes #53.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/54
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
aa683cb1e2 Explicitly set http(s) default ports in annex.url (#55)
Otherwise, git-annex tries to use its own default port (9417) and fails.

Fixes #52.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/55
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
99d2de8956 Fix Forgejo version in published OCI images (#51)
The Forgejo version is derived from the git history, so the image build
needs to happen in the context of a full repository clone.

Also, the post-processing of the version string needs to remove the
second occurrence of "-g", as the first one is now part of the added
"-git-annex" part.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/51
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
4b75d40853 Add an OCI image build and publish workflow (#50)
Fixes #49.

Reviewed-on: https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo/pulls/50
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
aa6674de6e Simplify git blob to annex key lookup (#43)
Fixes #27.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/43
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:15 +01:00
Matthias Riße
971f6f7bab Add git-annex p2phttp support (#42)
This adds a new endpoint under `/git-annex-p2phttp` which acts as an
authenticating proxy to git-annex' p2phttp server. This makes it
possible to set `annex+<server-url>/git-annex-p2phttp` as
`remote.<name>.annexurl` and use git-annex fully over http(s) with the
normal credentials and access tokens provided by Forgejo.

Fixes #25.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/42
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
1dd3a341a7 Add tests for git annex drop (#47)
This adds some rudimentary tests that drop files in a repository's clone
as well as from a repository on Forgejo.

Fixes #4.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/47
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
592b23f5cd Add git-annex' testremote to the test suite (#48)
The `git annex testremote` command runs a built-in set of tests against
a remote. It cannot hurt to check our implementation of a git-annex
remote against it too.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/48
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
4d65d593ad Only upload to annex in doAnnexUploadTest (#46)
The previous implementation both uploaded to the annex and pushed to the
git repository. This meant that the tests checking that uploads without
permission fail actually could pass when the git push failed but the
git-annex upload didn't. The tests didn't catch the situation where
unauthorized users could modify the annex.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/46
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
3cf2111dbf Use PATH when looking for git commands (#44)
This fixes some issues when using a git-annex that is installed in a
different location than where git is installed, e.g. when using the
git-annex-standalone release or one installed with nix.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/44
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
cdc80b9fe6 Allow anonymous HEAD requests to annex/objects (#41)
Git-annex emits HEAD requests for keys while trying to drop them from a
repository that was cloned via http. Forgejo asked for authentication
for these HEAD requests. This meant that cloning and getting files was
possible without authentication, but dropping was not.

Since the response to a HEAD request is a subset of the response to a
GET request it is safe to make those unauthenticated as well. That is
what this change does, although limited to the
:username/:reponame/annex/objects endpoint.

Fixes #40.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/41
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Michael Hanke
8065657151 Elevate external markup renderer interface for annexed file content (#36)
Previously, an external renderer that matched on an annexed file would
only see its content streamed via `STDIN`, or a temporary file with a copy
of its content would be generated and passed-by-filepath (with
`IS_INPUT_FILE=true`). Whether that happens, is also subject to
`MAX_DISPLAY_FILE_SIZE` (which defaults to 8MB).

This was problematic, because annexed files tend to be large. Moreover,
if present, they already exist as write-protected files on the
file-system. Creating a copy is both expensive and serves no particular
purpose.

This commit changes how external renderers are called.

1) With `IS_INPUT_FILE=true`, the renderer is passed the true location
   of an annex key, if present, and an empty path, if not.
2) The original, repository-relative path of the rendering target is
   made available to the renderer via the `GITEA_RELATIVE_PATH`
   environment variable.

To achieve a lean implementation, the `Blob` of the rendering target
is passed on to the `RenderContext` (because the implementation of
the annex-related functionality is centered on this dtype.

This change makes it less costly to increase `MAX_DISPLAY_FILE_SIZE`,
in order to make large, annexed files eligible for markup rendering,
because no content copies will be made any longer.

External renderers can now use the original file path, with the full
original filename, including extensions, for decision making. For
example, to detect particular compression formats based in a file name
extension, or to alter the rendering based on contextual information
encoded in the file path (e.g., a multi-file data structure with a
particular organization pattern).

Apart from the additional environment variable, there is no change to
the handling of renderers that take their input via `STDIN` (i.e.,
`IS_INPUT_FILE=false`).

Fixes #35.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/36
Reviewed-by: matrss <matrss@noreply.codeberg.org>
Co-authored-by: Michael Hanke <michael.hanke@gmail.com>
Co-committed-by: Michael Hanke <michael.hanke@gmail.com>
2025-02-08 16:52:14 +01:00
Matthias Riße
78ff09f63d Change the icon for annexed files to file-binary (#29)
Fixes #26.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/29
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
4c60dfb6f0 Improve views for annexed but missing files (#28)
Previously, trying to view files that were annexed, but missing, just
led to an uninformative error 500. This was rather confusing.

With these changes it now shows the pointer target instead of the
(missing) content of the file, and also indicates this situation in the
"stored with git-annex" message. For semantic correctness views for
missing files return a 404 instead of a 200, as they would with the
content present.

Fixes #7, fixes #13.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/28
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Michael Hanke
5b2ae61a12 Add git-annex also to the rootless container (#24)
Same as 89f8aa0bf5, but for the rootless container.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/24
Reviewed-by: matrss <matrss@noreply.codeberg.org>
Co-authored-by: Michael Hanke <michael.hanke@gmail.com>
Co-committed-by: Michael Hanke <michael.hanke@gmail.com>
2025-02-08 16:52:14 +01:00
Matthias Riße
e83f575da5 Git-annex web uploads (#21)
This implements support for uploading files into the annex using the web
interface.

If a repository is a git-annex-enabled repository all files will be
added to it using git annex add. This means that the repository's
configuration for what to put into the annex (annex.largefiles in
gitattributes) will be respected.

Plain git repositories without git-annex will work as before, directly
uploading to git.

Fixes #5.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/21
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
246131cc69 Error if git-annex is enabled but missing (#16)
Copied from https://github.com/neuropoly/gitea/pull/47

This adds a check so that if `setting.Annex.Enabled` is true and git-annex is not in the PATH Forgejo will abort on startup with a reasonable error message.

Fixes #15.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/16
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
Co-committed-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:14 +01:00
Matthias Riße
e97e20427d Add git-annex to docker image 2025-02-08 16:52:14 +01:00
Matthias Riße
5ff7951560 Adapt patch to upstream changes
Test with different objectFormats.
2025-02-08 16:52:14 +01:00
Nick
56a9ea1fc3 git-annex: views for annex files
This updates the repo index/file view endpoints so annex files match the way
LFS files are rendered, making annexed files accessible via the web instead of
being black boxes only accessible by git clone.

This mostly just duplicates the existing LFS logic. It doesn't try to combine itself
with the existing logic, to make merging with upstream easier. If upstream ever
decides to accept, I would like to try to merge the redundant logic.

The one bit that doesn't directly copy LFS is my choice to hide annex-symlinks.
LFS files are always _pointer files_ and therefore always render with the "file"
icon and no special label, but annex files come in two flavours: symlinks or
pointer files. I've conflated both kinds to try to give a consistent experience.

The tests in here ensure the correct download link (/media, from the last PR)
renders in both the toolbar and, if a binary file (like most annexed files will be),
in the main pane, but it also adds quite a bit of code to make sure text files
that happen to be annexed are dug out and rendered inline like LFS files are.
2025-02-08 16:52:14 +01:00
Matthias Riße
82c9a86e83 Adapt patch to upstream changes
Use tests.FileCmp instead of util.FileCmp.
2025-02-08 16:52:14 +01:00
Matthias Riße
2845a75cbe Adapt patch to upstream changes
Test with different objectFormats.
2025-02-08 16:52:14 +01:00
Nick
2c0cb04776 git-annex: make /media/ download annexed content
Previously, Gitea's LFS support allowed direct-downloads of LFS content,
via http://$HOSTNAME:$PORT/$USER/$REPO/media/branch/$BRANCH/$FILE
Expand that grace to git-annex too. Now /media should provide the
relevant *content* from the .git/annex/objects/ folder.

This adds tests too. And expands the tests to try symlink-based annexing,
since /media implicitly supports both that and pointer-file-based annexing.
2025-02-08 16:52:14 +01:00
Matthias Riße
635770f8a4 Adapt patch to upstream changes
The git repository must be closed after using it. Without this change
some tests started to fail due to the lingering repository running into
a timeout.
2025-02-08 16:52:14 +01:00
Nick
0831aeccd1 git-annex: create modules/annex
This moves the `annexObjectPath()` helper out of the tests and into a
dedicated sub-package as `annex.ContentLocation()`, and expands it with
`.Pointer()` (which validates using `git annex examinekey`),
`.IsAnnexed()` and `.Content()` to make it a more useful module.

The tests retain their own wrapper version of `ContentLocation()`
because I tried to follow close to the API modules/lfs uses, which in
terms of abstract `git.Blob` and `git.TreeEntry` objects, not in terms
of `repoPath string`s which are more convenient for the tests.
2025-02-08 16:52:14 +01:00
Matthias Riße
0c81519d4e Adapt patch to upstream changes
The "context_service" import was changed to use the default name of just
"context". The patch set had to be adapted for that.
2025-02-08 16:52:14 +01:00
Matthias Riße
3c11eb1e26 Adapt patch to upstream changes
Usage of `path` was replaced by `path/filepath` in upstream forgejo, and
it made sense to use that as well where `path` was previously used. The
`setHeaderCacheForever` function and the `sendFile` method had their
signature changed.
2025-02-08 16:52:14 +01:00
Matthias Riße
24264cb45f Fix exit code check for git command
The err.IsExitCode method was changed to a function IsErrorExitCode
taking err as its first argument in
1e7a6483b8.
2025-02-08 16:52:14 +01:00
Matthias Riße
f0da2f268a Replace m.GetOptions with m.Methods
This applies the same changes that were done in
265cd70bdb to the git-annex specific
routes as well.
2025-02-08 16:52:13 +01:00
Nick
d8bf745749 git-annex: support downloading over HTTP
This makes HTTP symmetric with SSH clone URLs.

This gives us the fancy feature of _anonymous_ downloads,
so people can access datasets without having to set up an
account or manage ssh keys.

Previously, to access "open access" data shared this way,
users would need to:

  1. Create an account on gitea.example.com
  2. Create ssh keys
  3. Upload ssh keys (and make sure to find and upload the correct file)
  4. `git clone git@gitea.example.com:user/dataset.git`
  5. `cd dataset`
  6. `git annex get`

This cuts that down to just the last three steps:

  1. `git clone https://gitea.example.com/user/dataset.git`
  2. `cd dataset`
  3. `git annex get`

This is significantly simpler for downstream users, especially for those
unfamiliar with the command line.

Unfortunately there's no uploading. While git-annex supports uploading
over HTTP to S3 and some other special remotes, it seems to fail on a
_plain_ HTTP remote. See https://github.com/neuropoly/gitea/issues/7
and https://git-annex.branchable.com/forum/HTTP_uploads/#comment-ce28adc128fdefe4c4c49628174d9b92.

This is not a major loss since no one wants uploading to be anonymous anyway.

To support private repos, I had to hunt down and patch a secret extra security
corner that Gitea only applies to HTTP for some reason (services/auth/basic.go).

This was guided by https://git-annex.branchable.com/tips/setup_a_public_repository_on_a_web_site/

Fixes https://github.com/neuropoly/gitea/issues/3

Co-authored-by: Mathieu Guay-Paquet <mathieu.guaypaquet@polymtl.ca>
2025-02-08 16:52:13 +01:00
Nick
f42432a9e4 git-annex: add configuration setting [annex].ENABLED
Fixes https://github.com/neuropoly/gitea/issues/8

Co-authored-by: Mathieu Guay-Paquet <mathieu.guaypaquet@gmail.com>
2025-02-08 16:52:13 +01:00
Matthias Riße
cc193ec4ef Fix failing tests
Multiple tests that worked fine on v1.20.4-1 started to fail after the
rebase onto v1.20.5-1. These tests are:
- TestGitAnnexPermissions/Private/Owner/HTTP/Init
- TestGitAnnexPermissions/Private/Owner/HTTP/Download
- TestGitAnnexPermissions/Private/Writer/HTTP/Init
- TestGitAnnexPermissions/Private/Writer/HTTP/Download
- TestGitAnnexPermissions/Private/Reader/HTTP/Init
- TestGitAnnexPermissions/Private/Reader/HTTP/Download

What these tests have in common is that they all operate on a private
repository via http with authentication.

They broke at some point between v1.20.4-1 and v1.20.5-1, so I did a
bisect between these two points running the offending tests. This
brought me to the conclusion that
ee48c0d5ea introduced the issue.

The thing is, this commit does not change any code, it only changes the
test environment. Among other things that didn't look as suspicious, it
changes the container image from a bespoke test_env image based on
debian bullseye to a node image based on debian bookworm. Obviously,
this means that there are many version differences between the two.

The first one I looked at was git. The previous bullseye image used a
manually installed git version 2.40.0, while the bookworm image has
2.39.2 installed. Updating git in the new image did not fix the issue,
however.

The next thing I looked at was the git-annex version. Bullseye had
8.20210223 installed and worked, while bookworm used 10.20230126 when
the tests broke. So I tried my luck upgrading to a more recent version
via neurodebian (10.20240227-1~ndall+1). This still worked fine on
bullseye and now also works fine on bookworm.

I have no idea why this specific version of git-annex broke the tests,
but at least there was a commit to pinpoint this to, which isn't always
the case with docker images silently changing beneath you...

Below are the versions as they are reported by git and git-annex:

bullseye (works):

    git version 2.30.2
    git-annex version: 8.20210223
    build flags: Assistant Webapp Pairing Inotify DBus DesktopNotify TorrentParser MagicMime Feeds Testsuite S3 WebDAV
    dependency versions: aws-0.22 bloomfilter-2.0.1.0 cryptonite-0.26 DAV-1.3.4 feed-1.3.0.1 ghc-8.8.4 http-client-0.6.4.1 persistent-sqlite-2.10.6.2 torrent-10000.1.1 uuid-1.3.13 yesod-1.6.1.0
    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2BP512E BLAKE2BP512 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL X*
    remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar git-lfs httpalso borg hook external
    operating system: linux x86_64
    supported repository versions: 8
    upgrade supported from repository versions: 0 1 2 3 4 5 6 7

bullseye + git-annex from neurodebian (works):

    git version 2.30.2
    git-annex version: 10.20240227-1~ndall+1
    build flags: Assistant Webapp Pairing Inotify DBus DesktopNotify TorrentParser MagicMime Benchmark Feeds Testsuite S3 WebDAV
    dependency versions: aws-0.22.1 bloomfilter-2.0.1.0 cryptonite-0.29 DAV-1.3.4 feed-1.3.2.1 ghc-9.0.2 http-client-0.7.13.1 persistent-sqlite-2.13.1.0 torrent-10000.1.1 uuid-1.3.15 yesod-1.6.2.1
    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2BP512E BLAKE2BP512 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL X*
    remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar git-lfs httpalso borg hook external
    operating system: linux x86_64
    supported repository versions: 8 9 10
    upgrade supported from repository versions: 0 1 2 3 4 5 6 7 8 9 10

bookworm (fails):

    git version 2.39.2
    git-annex version: 10.20230126
    build flags: Assistant Webapp Pairing Inotify DBus DesktopNotify TorrentParser MagicMime Benchmark Feeds Testsuite S3 WebDAV
    dependency versions: aws-0.22.1 bloomfilter-2.0.1.0 cryptonite-0.29 DAV-1.3.4 feed-1.3.2.1 ghc-9.0.2 http-client-0.7.13.1 persistent-sqlite-2.13.1.0 torrent-10000.1.1 uuid-1.3.15 yesod-1.6.2.1
    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2BP512E BLAKE2BP512 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL X*
    remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar git-lfs httpalso borg hook external
    operating system: linux x86_64
    supported repository versions: 8 9 10
    upgrade supported from repository versions: 0 1 2 3 4 5 6 7 8 9 10

bookworm + git-annex from neurodebian (works):

    git version 2.39.2
    git-annex version: 10.20240227-1~ndall+1
    build flags: Assistant Webapp Pairing Inotify DBus DesktopNotify TorrentParser MagicMime Benchmark Feeds Testsuite S3 WebDAV
    dependency versions: aws-0.22.1 bloomfilter-2.0.1.0 cryptonite-0.29 DAV-1.3.4 feed-1.3.2.1 ghc-9.0.2 http-client-0.7.13.1 persistent-sqlite-2.13.1.0 torrent-10000.1.1 uuid-1.3.15 yesod-1.6.2.1
    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2BP512E BLAKE2BP512 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL X*
    remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar git-lfs httpalso borg hook external
    operating system: linux x86_64
    supported repository versions: 8 9 10
    upgrade supported from repository versions: 0 1 2 3 4 5 6 7 8 9 10
2025-02-08 16:52:13 +01:00
Matthias Riße
3d7458b8cc Install git-annex in the testing workflow 2025-02-08 16:52:13 +01:00
Matthias Riße
37a8fa9b5c Adapt patch to upstream changes 2025-02-08 16:52:13 +01:00
Matthias Riße
d13faeccaa Adapt patch to upstream changes
A dead code check started to complain because FileCmp was only used in
tests. Moved the function to test_utils.
2025-02-08 16:52:13 +01:00
Matthias Riße
57de00e5b9 Adapt patch to upstream changes
Repository creation now expects an objectFormat to be specified for git.
2025-02-08 16:52:13 +01:00
Nick
52485edf64 git-annex tests
Fixes https://github.com/neuropoly/gitea/issues/11

Tests:

* `git annex init`
* `git annex copy --from origin`
* `git annex copy --to origin`

over:

* ssh

for:

* the owner
* a collaborator
* a read-only collaborator
* a stranger

in a

* public repo
* private repo

And then confirms:

* Deletion of the remote repo (to ensure lockdown isn't messing with us: https://git-annex.branchable.com/internals/lockdown/#comment-0cc5225dc5abe8eddeb843bfd2fdc382)

------

To support all this:

* Add util.FileCmp()
* Patch withKeyFile() so it can be nested in other copies of itself

-------

Many thanks to Mathieu for giving style tips and catching several bugs,
including a subtle one in util.filecmp() which neutered it.

Co-authored-by: Mathieu Guay-Paquet <mathieu.guay-paquet@polymtl.ca>
Co-authored-by: Matthias Riße <m.risse@fz-juelich.de>
2025-02-08 16:52:13 +01:00
Nick Guenther
1d01b58227 git-annex support
[git-annex](https://git-annex.branchable.com/) is a more complicated cousin to
git-lfs, storing large files in an optional-download side content.  Unlike lfs,
it allows mixing and matching storage remotes, so the content remote(s) doesn't
need to be on the same server as the git remote, making it feasible to scatter
a collection across cloud storage, old harddrives, or anywhere else storage can
be scavenged.  Since this can get complicated, fast, it has a content-tracking
database (`git annex whereis`) to help find everything later.

The use-case we imagine for including it in Gitea is just the simple case, where
we're primarily emulating git-lfs: each repo has its large content at the same URL.

Our motivation is so we can self-host https://www.datalad.org/ datasets, which
currently are only hostable by fragilely scrounging together cloud storage --
and having to manage all the credentials associated with all the pieces -- or at
https://openneuro.org which is fragile in its own ways.

Supporting git-annex also allows multiple Gitea instance to be annex remotes for
each other, mirroring the content or otherwise collaborating the split up the
hosting costs.

Enabling
--------

TODO

HTTP
----

TODO

Permission Checking
-------------------

This tweaks the API in routers/private/serv.go to expose the calling user's
computed permission, instead of just returning HTTP 403.

This doesn't fit in super well. It's the opposite from how the git-lfs support is
done, where there's a complete list of possible subcommands and their matching
permission levels, and then the API compares the requested with the actual level
and returns HTTP 403 if the check fails.

But it's necessary. The main git-annex verbs, 'git-annex-shell configlist' and
'git-annex-shell p2pstdio' are both either read-only or read-write operations,
depending on the state on disk on either end of the connection and what the user
asked it to ask for, with no way to know before git-annex examines the situation.
So tell the level via GIT_ANNEX_READONLY and trust it to handle itself.

In the older Gogs version, the permission was directly read in cmd/serv.go:

```
mode, err = db.UserAccessMode(user.ID, repo)
```
- 966e925cf3/internal/cmd/serv.go (L334)

but in Gitea permission enforcement has been centralized in the API layer.
(perhaps so the cmd layer can avoid making direct DB connections?)

Deletion
--------

git-annex has this "lockdown" feature where it tries
really quite very hard to prevent you deleting its
data, to the point that even an rm -rf won't do it:
each file in annex/objects/ is nested inside a
folder with read-only permissions.

The recommended workaround is to run chmod -R +w when
you're sure you actually want to delete a repo. See
https://git-annex.branchable.com/internals/lockdown

So we edit util.RemoveAll() to do just that, so now
it's `chmod -R +w && rm -rf` instead of just `rm -rf`.
2025-02-08 16:52:13 +01:00
Matthias Riße
2771c2e591 Fix name in package-lock.json
The frontend-checks job started failing because the declared name does
not match the repository name.
2025-02-08 16:52:13 +01:00
Matthias Riße
3c7f598230 Run testing workflow unconditionally 2025-02-08 16:52:13 +01:00
Earl Warren
6ef900899e fix(sec): Forgejo Actions web routes (#6839)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6839
2025-02-08 06:21:18 +00:00
Earl Warren
a9f0bb9f68 fix(sec): permission check for project issue (#6838)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6838
2025-02-08 06:20:29 +00:00
Gusted
3b4f1b3469
fix(sec): add tests for private issues on projects
- Add integration and unit tests to ensure that private issues on
projects are not shown in any way, shape or form when the doer has no
access to it.

(cherry picked from commit 55dcc1d06cb12ddb750a0289fbb6e212f93957a8)
2025-02-08 06:06:06 +00:00
Gusted
77fc232e5b
fix(sec): permission check for project issue
- Do an access check when loading issues for a project column, currently
this is not done and exposes the title, labels and existence of a
private issue that the viewer of the project board may not have access
to.
- The number of issues cannot be calculated in a efficient manner
and stored in the database because their number may vary depending on
the visibility of the repositories participating in the project. The
previous implementation used the pre-calculated numbers stored in each
project, which did not reflect that potential variation.
- The code is derived from https://github.com/go-gitea/gitea/pull/22865

(cherry picked from commit 2193afaeb9954a5778f5a47aafd0e6fbbf48d000)
2025-02-08 06:06:03 +00:00
Gusted
5a7d70658d
fix(sec): web route test edit and delete variable
Exhaustively test each combination of deleting and updating a action
action variable via the web route.
2025-02-08 06:04:14 +00:00
Gusted
5046a10aec
fix(sec): add tests for web route delete runner
Exhaustively test each combination of deleting and updating a action
runner via the web route. Although updating an action runner was not
impacted, its good to have a test nonetheless.
2025-02-08 06:04:14 +00:00
Gusted
77db7655e0
fix(sec): web route update and delete runner variables
The web route to update and delete variables of runners did not check if
the ID that was given belonged to the context it was requested in, this
made it possible to update and delete every existing runner variable of
a instance for any authenticated user.

The code has been reworked to always take into account the context of
the request (owner and repository ID).
2025-02-08 06:04:14 +00:00
Gusted
c324910c31
fix(sec): web route delete runner
The web route to delete action runners did not check if the ID that was
given belonged to the context it was requested in, this made it possible
to delete every existing runner of a instance by a authenticated user.

The code was reworked to ensure that the caller of the delete
runner function retrieved the runner by ID and then checks if it belongs
to the context it was requested in, although this is not an optimal
solution it is consistent with the context checking of other code for
runners.
2025-02-08 06:04:14 +00:00
0ko
57ad0b868d [v10.0/forgejo] i18n: update of translations from Codeberg Translate (#6834)
Backport: https://codeberg.org/forgejo/forgejo/pulls/6745

Feel free to leave merge to me. My strategy is to use squash-merge, but copy the description of the actual commit into squash description, so attribution is preserved.

https://codeberg.org/forgejo/forgejo/pulls/6745 was quite large, so I decided it will be ok to backport just one PR before a new release.

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

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Localization
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/6834): <!--number 6834 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6834
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-02-08 00:01:24 +00:00
forgejo-backport-action
34d2a8531c [v10.0/forgejo] fix(ui): display verified icon for default gpg key (#6833)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6803

## Description
Thank you for this amazing project!

I recently noticed that the icon next to the GPG key reference appears to be incorrect for commits signed by the default GPG key:

| Default GPG Key  | User GPG Key  |
|---------|---------|
| ![image](/attachments/ff27597a-d38c-48fc-8284-e16d4fd3ea2d) | ![image](/attachments/3c8c5540-dd29-45c9-a9f0-dc3b69677ef3) |

Looking into the commit history of the template file, I noticed that Forgejo-signed commits originally had a distinct icon:
[gitea-unlock-cog](b918609acc) --> [octicon-shield-lock](12ddc48c5c) --> octicon-unverified (current)

Since `octicon-unverified` is also used when a commit cannot be verified (.Verification.Warning), I find it misleading for successfully signed commits. This PR changes the icon to the verified variant for better clarity.

### Tests

1. Set up automatic commit signing by Forgejo ([guide](https://forgejo.org/docs/latest/admin/signing/#automatic-signing))
2. Trigger automatic commit signing in any of the following scenarios:
    - Repository Initialisation (should be the easiest)
    - Wiki Changes
    - CRUD actions using the editor or the API
    - Merges from Pull Requests
3. Open the commit signed by Forgejo
4. Verify that the icon next to the GPG key id is `octicon-verified`:
![image](/attachments/7b4eb81c-d33c-4daf-84dd-9f99ebb0b99d)

### Documentation

- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [x] I want the title to show in the release notes with a link to this pull request.

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

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- User Interface bug fixes
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/6803): <!--number 6803 --><!--line 0 --><!--description Zml4KHVpKTogZGlzcGxheSB2ZXJpZmllZCBpY29uIGZvciBkZWZhdWx0IGdwZyBrZXk=-->fix(ui): display verified icon for default gpg key<!--description-->
<!--end release-notes-assistant-->

Co-authored-by: shgew <shgew@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6833
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-02-07 13:16:23 +00:00
forgejo-backport-action
d260013a51 [v10.0/forgejo] fix: avoid y-axis clipping for branch name (#6832)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6817

- `gt-ellipsis` is set on elements to avoid overflowing its text contents and in the case of overflowing it would show an ellipsis. To force it to not overflow `overflow: hidden` is set, however this also hides the overflow on the y-axis, `overflow-x: hidden` has the same behavior.
- To avoid avoid the branch name from being clipped, add a very small amount of padding on the y-axis. This is a workaround and not a proper solution. There does not seem a good cross-platform solution available to fix this in a proper way.
- Resolves forgejo/forgejo#6811

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6832
Reviewed-by: Gusted <gusted@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>
2025-02-07 10:46:08 +00:00
forgejo-backport-action
3168330425 [v10.0/forgejo] chore(i18n): lint errors (#6809)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6808

settings.hidden_comment_types_description: Rodzaje komentarzy zaznaczone tutaj nie będą wyświetlały się na stronach zgłoszeń. Zaznaczenie "Etykieta" na przykład usunie wszystkie komentarze "<użytkownik> dodał/usunął <etykieta>".
repo.settings.add_web_hook_desc: Zintegruj <a target="_black" rel="noreferrer" href="https://TO-BE-REPLACED.COM">%s</a> ze swoim repozytorium.

Add user & label in Polish.

Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6809
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-02-06 12:37:53 +00:00
forgejo-backport-action
2491bbfa69 [v10.0/forgejo] ci: fix go version check (#6810)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6646

Allow ci go version to be higher than the tool chain. This will fix the current build issues on forgejo branch

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6810
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-02-06 08:15:36 +00:00
forgejo-backport-action
ac01c7a384 [v10.0/forgejo] fix: make author search case insenstive (#6783)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6782

- Make the author search in the issues and pull request list case
insenstive.
- Background: Forgejo mandates that all columns are case senstive and
only SQLite ignores this for ASCII characters with the `LIKE` operator
any other database will indeed do case senstive searching. Codeberg
recently made all columns case senstive, hence why this issue now surfaces.
- Added integration test.
- Resolves forgejo/forgejo#6744

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6783
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@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>
2025-02-04 17:06:20 +00:00
forgejo-backport-action
b615d41457 [v10.0/forgejo] fix(ui): add triangle down octicon to code search options dropdown (#6770)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6620

This adds the triangle down oction to the code search options dropdown to match the other search option dropdowns (issue, pull).

Co-authored-by: Beowulf <beowulf@beocode.eu>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6770
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-by: Otto <otto@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>
2025-02-03 08:35:41 +00:00
0ko
184bdef340 [v10.0/forgejo] i18n: backport of translation updates 6565 and 6665 (#6764)
Translation updates that are applicable to v10 strings were picked from these commits:
* dac7d5e73b
* 7678386138

Changes to strings that are only present in the v11 branch were not picked.

Below is a list of co-authors of the ported commits. It may contain co-authors who's changes were not picked due to being v11-only.

Co-authored-by: 0ko <0ko@users.noreply.translate.codeberg.org>
Co-authored-by: artnay <artnay@users.noreply.translate.codeberg.org>
Co-authored-by: Atul_Eterno <atul_eterno@users.noreply.translate.codeberg.org>
Co-authored-by: Dirk <dirk@users.noreply.translate.codeberg.org>
Co-authored-by: earl-warren <earl-warren@users.noreply.translate.codeberg.org>
Co-authored-by: Edgarsons <edgarsons@users.noreply.translate.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fjuro <fjuro@users.noreply.translate.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-authored-by: Ikuyo Mita <searinminecraft@outlook.ph>
Co-authored-by: jedik <jedik@users.noreply.translate.codeberg.org>
Co-authored-by: Juno Takano <jutty@users.noreply.translate.codeberg.org>
Co-authored-by: justbispo <justbispo@users.noreply.translate.codeberg.org>
Co-authored-by: killawabbit <killawabbit@users.noreply.translate.codeberg.org>
Co-authored-by: Kita Ikuyo <searinminecraft@courvix.com>
Co-authored-by: mahlzahn <mahlzahn@posteo.de>
Co-authored-by: Miguel P.L <miguel_pl@users.noreply.translate.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@users.noreply.translate.codeberg.org>
Co-authored-by: Ricky-Tigg <ricky-tigg@users.noreply.translate.codeberg.org>
Co-authored-by: SomeTr <sometr@users.noreply.translate.codeberg.org>
Co-authored-by: tacaly <frederick@tacaly.com>
Co-authored-by: Wuzzy <wuzzy@disroot.org>
Co-authored-by: xtex <xtexchooser@duck.com>

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6764
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2025-02-02 18:38:07 +00:00
forgejo-backport-action
27276ff26e [v10.0/forgejo] fix: set explore pages to configurable default sort (#6749)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6708

- Currently, the explore/organizations page always defaults to using "newest" as its sort. Instead, use the pre-existing config option (`setting.UI.ExploreDefaultSort`) so server administrators can change the default sort order.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. 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

(Sorry, not sure how to add a test for this change)

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.

### Documentation

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

### Release notes

I don't mind either way.

- [ ] I do not want this change to show in the release notes.
- [x] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Co-authored-by: John Moon <john.moon@vts-i.com>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6749
Reviewed-by: Gusted <gusted@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>
2025-01-31 11:12:01 +00:00
forgejo-backport-action
1b00bf2d26 [v10.0/forgejo] fix: Remove autofocus on the dashboard repository search box (#6748)
- No longer autofocus on the searchbox for the repository list that is on the dashboard. There is no justification for doing so.
- Fixes #6653
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-01-31 10:40:23 +00:00
forgejo-backport-action
69bc17ea35 [v10.0/forgejo] fix inline file preview for files with encoded URL, fix #5069 (#6739)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6525

### Screenshot
#### Before
See #5069.
#### After
![image](/attachments/d57c2ff8-d29e-41b8-9280-c884ac43f12e)
### Tests

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- 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)).
- Manual testing: see https://codeberg.org/forgejo/forgejo/pulls/6525#issuecomment-2578814. Thanks @earl-warren.

### Documentation

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

### Release notes

- [ ] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Co-authored-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6739
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-01-30 11:49:16 +00:00
forgejo-backport-action
0db9a24a4b [v10.0/forgejo] fix: check for webauthn in 2fa user search (#6730)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6726

- Check for webauthn credentials in the user search when the two factor
filter is enabled.
- Resolves forgejo/forgejo#6524

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6730
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Gusted <gusted@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>
2025-01-29 19:28:12 +00:00
forgejo-backport-action
4016f2890d [v10.0/forgejo] fix: disallow blame on directories (#6720)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6716

- Don't allow the blame operation on directories.
- Added integration test.
- Resolves forgejo/forgejo#6533

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6720
Reviewed-by: Gusted <gusted@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>
2025-01-29 09:34:03 +00:00
forgejo-backport-action
c198cb6e65 [v10.0/forgejo] fix(i18n): add forgotten translatable string (#6718)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6701

- Regression of 75ce1e2ac1

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6718
Reviewed-by: Gusted <gusted@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>
2025-01-29 08:28:25 +00:00
forgejo-backport-action
114d8975b5 [v10.0/forgejo] fix: render issue titles consistently (#6717)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6715

- Render the issue titles in dashboard feed in consistent manner, by using the existing `RenderIssueTitle`.
- Added integration tests (not exhaustive for all comment types, but exhaustive enough for the current code where some comment types are grouped together).
- Resolves forgejo/forgejo#6705

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6717
Reviewed-by: Gusted <gusted@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>
2025-01-29 08:24:37 +00:00
Michael Kriese
7ee19b4c6c chore: consistent docker image and action references (#6704)
backport of #6703
- replace `code.forgejo.org` ->`data.forgejo.org` on docker images
- add `https://data.forgejo.org/` to actions where missing

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6704
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-committed-by: Michael Kriese <michael.kriese@visualon.de>
2025-01-28 15:46:07 +00:00
Renovate Bot
faa263d54a Update dependency katex to v0.16.21 [SECURITY] (v10.0/forgejo) (#6694)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [katex](https://katex.org) ([source](https://github.com/KaTeX/KaTeX)) | dependencies | patch | [`0.16.18` -> `0.16.21`](https://renovatebot.com/diffs/npm/katex/0.16.18/0.16.21) |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### KaTeX \htmlData does not validate attribute names
[CVE-2025-23207](https://nvd.nist.gov/vuln/detail/CVE-2025-23207) / [GHSA-cg87-wmx4-v546](https://github.com/advisories/GHSA-cg87-wmx4-v546)

<details>
<summary>More information</summary>

#### Details
##### Impact
KaTeX users who render untrusted mathematical expressions with `renderToString` could encounter malicious input using `\htmlData` that runs arbitrary JavaScript, or generate invalid HTML.

##### Patches
Upgrade to KaTeX v0.16.21 to remove this vulnerability.

##### Workarounds
- Avoid use of or turn off the `trust` option, or set it to forbid `\htmlData` commands.
- Forbid inputs containing the substring `"\\htmlData"`.
- Sanitize HTML output from KaTeX.

##### Details
`\htmlData` did not validate its attribute name argument, allowing it to generate invalid or malicious HTML that runs scripts.

##### For more information
If you have any questions or comments about this advisory:

- Open an issue or security advisory in the [KaTeX repository](https://github.com/KaTeX/KaTeX/)
- Email us at [katex-security@mit.edu](mailto:katex-security@mit.edu)

#### Severity
- CVSS Score: 6.3 / 10 (Medium)
- Vector String: `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L`

#### References
- [https://github.com/KaTeX/KaTeX/security/advisories/GHSA-cg87-wmx4-v546](https://github.com/KaTeX/KaTeX/security/advisories/GHSA-cg87-wmx4-v546)
- [https://nvd.nist.gov/vuln/detail/CVE-2025-23207](https://nvd.nist.gov/vuln/detail/CVE-2025-23207)
- [ff289955e8)
- [https://github.com/KaTeX/KaTeX](https://github.com/KaTeX/KaTeX)

This data is provided by [OSV](https://osv.dev/vulnerability/GHSA-cg87-wmx4-v546) and the [GitHub Advisory Database](https://github.com/github/advisory-database) ([CC-BY 4.0](https://github.com/github/advisory-database/blob/main/LICENSE.md)).
</details>

---

### Release Notes

<details>
<summary>KaTeX/KaTeX (katex)</summary>

### [`v0.16.21`](https://github.com/KaTeX/KaTeX/blob/HEAD/CHANGELOG.md#01621-2025-01-17)

[Compare Source](https://github.com/KaTeX/KaTeX/compare/v0.16.20...v0.16.21)

##### Bug Fixes

-   escape \htmlData attribute name ([57914ad](57914ad91e))

### [`v0.16.20`](https://github.com/KaTeX/KaTeX/blob/HEAD/CHANGELOG.md#01620-2025-01-12)

[Compare Source](https://github.com/KaTeX/KaTeX/compare/v0.16.19...v0.16.20)

##### Bug Fixes

-   \providecommand does not overwrite existing macro ([#&#8203;4000](https://github.com/KaTeX/KaTeX/issues/4000)) ([6d30fe4](6d30fe47b0)), closes [#&#8203;3928](https://github.com/KaTeX/KaTeX/issues/3928)

### [`v0.16.19`](https://github.com/KaTeX/KaTeX/blob/HEAD/CHANGELOG.md#01619-2024-12-29)

[Compare Source](https://github.com/KaTeX/KaTeX/compare/v0.16.18...v0.16.19)

##### Bug Fixes

-   **types:** improve `strict` function type ([#&#8203;4009](https://github.com/KaTeX/KaTeX/issues/4009)) ([4228b4e](4228b4eb52))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoidjEwLjAvZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6694
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-01-28 11:34:32 +00:00
forgejo-backport-action
0ecf28f37f [v10.0/forgejo] Fix inline file preview for rendered files (#6685)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6572

### What?

This fixes the inline file preview for rendered files (e.g., markdown). [Here, a live issue in v11](https://v11.next.forgejo.org/mahlzahn/test-inline-file-preview/issues/1) and [the same in v7 (with even more bugs)](https://v7.next.forgejo.org/mahlzahn/test-inline-file-preview/issues/1).

It fixes
1. the inline preview for possibly rendered files, when the link is specified with `?display=source`. This happens, e.g., if you are watching a (e.g., markdown) file in source and then want to link some of its lines.
2. the link to the source file inside the inline preview for possible rendered files (currently it links to the rendered version and then the `#L…` cannot point to the correct lines). This is done by always adding `?display=source` to the link.

### Screenshots
<details><summary>

#### Before

</summary>

![image](/attachments/898f82d5-d116-465a-89e2-ed83da189762)

</details>
<details><summary>

#### After

</summary>

![image](/attachments/41058620-47f3-4f6a-b427-66ef33c1a07f)

</details>

### Tests

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- 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)).

I think that this minor edit does not need special tests. Some backend tests have been updated to reflect the addition of URL parameters.

#### Manual testing
- create a repository with a file that can be rendered with couple of lines inside, e.g., a markdown README.md
- go to the source of this file (e.g., `…/src/branch/main/README.md`)
- click on the `<> View Source` button (or add `?display=source` to the URL)
- click on one of the lines, then on the three dots, then on ”Reference in a new issue“
- continue creating the issue

### Documentation

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

### Release notes

- [ ] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Co-authored-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6685
Reviewed-by: Gusted <gusted@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>
2025-01-25 11:38:02 +00:00
forgejo-backport-action
d10034f4d8 [v10.0/forgejo] fix: add non allowed domain translation (#6684)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6677

- Was added in 2559c80bec and accidentally removed in 5a16c9d9c0.
- Reworded for clarity.
- Resolves #6661

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6684
Reviewed-by: Otto <otto@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>
2025-01-25 01:15:27 +00:00
forgejo-backport-action
553fc3cc42 [v10.0/forgejo] fix: load settings for valid user and email check (#6678)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6674

- The doctor commands to check the validity of existing usernames and
email addresses depend on functionality that have configurable behavior
depending on the values of the `[service]` settings, so load them when
running the doctor command.
- Resolves #6664
- No unit test due to the architecture of doctor commands.

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6678
Reviewed-by: Gusted <gusted@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>
2025-01-24 12:25:00 +00:00
Earl Warren
6d7bf7369d [v10.0/forgejo] chore(security): update security.txt with new expiration date (#6668)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6668
2025-01-23 17:28:46 +00:00
Earl Warren
eb83b05430 chore(security): update security.txt with new expiration date
Same as https://forgejo.org/.well-known/security.txt

(cherry picked from commit 955f99b6a4)
2025-01-23 16:20:44 +00:00
forgejo-backport-action
61e345cd36 [v10.0/forgejo] fix: teach the doctor about orphaned two_factor rows (#6651)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6639

If a row in the two_factor table references a non existent user, it may contain a secret that has an invalid format. Such an orphaned row is never used and should be removed.

Improve the error message to suggest using the doctor to remove it.

Fixes: https://codeberg.org/forgejo/forgejo/issues/6637

## Testing

- make TAGS='sqlite sqlite_unlock_notify' watch
- make TAGS='sqlite  sqlite_unlock_notify' forgejo
- sqlite3 data/gitea.db 'INSERT INTO two_factor VALUES( 0, 500, "", "", "", "", 0, 0)'
- ./forgejo doctor check --run check-db-consistency
  ```
   [1] Check consistency of database
    - [W] Found 1 Orphaned TwoFactor without existing User
   OK

   All done (checks: 1).
   ```
-  ./forgejo doctor check --run check-db-consistency --fix
   ```
   [1] Check consistency of database
    - [I] Deleted 1 Orphaned TwoFactor without existing User
   OK

   All done (checks: 1).
   ```

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. 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

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- 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.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] I do not want this change to show in the release notes.
- [x] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

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

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Bug fixes
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/6651): <!--number 6651 --><!--line 0 --><!--description Zml4OiB0ZWFjaCB0aGUgZG9jdG9yIGFib3V0IG9ycGhhbmVkIHR3b19mYWN0b3Igcm93cw==-->fix: teach the doctor about orphaned two_factor rows<!--description-->
<!--end release-notes-assistant-->

Co-authored-by: Earl Warren <contact@earl-warren.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6651
Reviewed-by: Earl Warren <earl-warren@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>
2025-01-22 07:47:34 +00:00
forgejo-backport-action
5c5e1c87ba [v10.0/forgejo] fix: listing tokens must not require basic auth (#6643)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6633

When the change is reverted, the test fails as follows:

```sh
=== TestAPIGetTokens (tests/integration/api_token_test.go:34)
--- FAIL: TestAPIGetTokens (0.17s)
    testlogger.go:405: 2025/01/20 14:05:22 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /home/earl-warren/software/forgejo/tests/gitea-lfs-meta
    testlogger.go:405: 2025/01/20 14:05:22 ...eb/routing/logger.go:102:func1() [I] router: completed GET /api/v1/users/user2/tokens for test-mock:12345, 200 OK in 2.5ms @ user/app.go:24(user.ListAccessTokens)
    testlogger.go:405: 2025/01/20 14:05:22 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/v1/users/user1/tokens for test-mock:12345, 201 Created in 4.7ms @ user/app.go:75(user.CreateAccessToken)
    testlogger.go:405: 2025/01/20 14:05:22 ...eb/routing/logger.go:102:func1() [I] router: completed GET /api/v1/users/user2/tokens for test-mock:12345, 401 Unauthorized in 4.9ms @ v1/api.go:413(v1.Routes.func2.5.1.reqBasicOrRevProxyAuth.6)
    api_token_test.go:46:
        	Error Trace:	/home/earl-warren/software/forgejo/tests/integration/integration_test.go:556
        	            				/home/earl-warren/software/forgejo/tests/integration/api_token_test.go:46
        	Error:      	Not equal:
        	            	expected: 200
        	            	actual  : 401
        	Test:       	TestAPIGetTokens
        	Messages:   	Request: GET /api/v1/users/user2/tokens
    api_token_test.go:46: Response:  {"message":"auth required","url":"http://localhost:3003/api/swagger"}

    testlogger.go:405: 2025/01/20 14:05:22 ...eb/routing/logger.go:102:func1() [I] router: completed DELETE /api/v1/users/user1/tokens/94 for test-mock:12345, 204 No Content in 1.4ms @ user/app.go:145(user.DeleteAccessToken)
```

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. 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

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- 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.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [x] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

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

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Bug fixes
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/6633): <!--number 6633 --><!--line 0 --><!--description bGlzdGluZyB0b2tlbnMgbXVzdCBub3QgcmVxdWlyZSBiYXNpYyBhdXRo-->listing tokens must not require basic auth<!--description-->
<!--end release-notes-assistant-->

Co-authored-by: Earl Warren <contact@earl-warren.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6643
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-01-21 10:40:00 +00:00
Renovate Bot
7546c4acf3 Update dependency go to v1.23.5 (v10.0/forgejo) (#6644)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/) ([source](https://github.com/golang/go)) | toolchain | patch | `1.23.4` -> `1.23.5` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDYuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNi4wIiwidGFyZ2V0QnJhbmNoIjoidjEwLjAvZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6644
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-01-21 09:32:40 +00:00
Otto
25e81d05f0 [v10.0/forgejo] Fix mention and emoji expansion & Improve leaving list completion (#6632)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6632
Reviewed-by: Beowulf <beowulf@beocode.eu>
2025-01-20 20:34:31 +00:00
forgejo-backport-action
054537989f [v10.0/forgejo] fix(ui): prevent overflow of branch selector in commit graph (#6636)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6617

Fix that the branch selector in the commit graph can overflow

| Previous | Now |
| :----: | :----: |
| ![grafik](/attachments/ab303490-2abc-46d8-8715-0750886fd111) | ![grafik](/attachments/63f919a9-bcc2-4969-8c8c-d265c1917e07) |
| ![grafik](/attachments/c0e6636f-52eb-4bf0-bf07-0139ec407e33) | ![grafik](/attachments/752aef87-9250-4bf6-b74a-5a1813394dbe) |
| ![grafik](/attachments/e61842dd-29c1-4517-86db-f068de9ff6e8) | ![grafik](/attachments/bf251b43-80fa-4e1a-9fbe-fd27e5f8d195) |

Fixes #6615

Co-authored-by: Beowulf <beowulf@beocode.eu>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6636
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-01-20 20:28:39 +00:00
Beowulf
348e0e1fac Leave list/quote expanison with double enter
When editing a list or similar syntax elements, pressing enter starts a
new line with the line introducer (e.g. `- ` for a plain list).
But currently it's uncomfortable when someone wants to leave the list.
Pressing enter again simply adds more and more lines with the prefix.

With this change the list is terminated if enter is pressed on a line
which contains the introducer but nothing else. This behavior is known
from other markdown editors like the on used by GitLab or GitHub.

Additionally I changed the regex for detecting a prefix.
- Why: With the change you can add a single whitespace at the end if you
  want to keep an "empty" line. So if you want to write:
  ```
  - First
  -
  - Third
  ```
  You just need to add a whitespace in the second line to prevent that
  the prefix will be removed.
- Changes in detail:
  - ordered bullet list prefix detection:
    nothing changed
  - todo list and unordered list prefix detection:
    have been split up:
    - todo list: Changed that only 1 to 4 whitespaces can be between the
      list char (`-`,`*`,`+`) and the checkbox (`[ ]`,`[x]`) - Why? If
      more then 4 spaces are between the list char and the checkbox,
      this is no longer detected as a prefix for a todo item based on
      the markdown standard. Due to the amount of spaces it is instead
      parsed as code.
    - unordered list: The prefix now needs to have exactly one space
      after the list char (`-`,`*`,`+`). More spaces will not be taken
      into account for detecting the prefix.
  - quote prefix detection:
    nothing changed

The current e2e-tests where simplified and duplicated tests where
removed. Test cases for the new functionality where added.

(cherry picked from commit 7ea62c5ce4)
2025-01-20 12:52:20 +00:00
Beowulf
627634a76e Prevent prefix continuation if currently a text expander popup is open
This fixes that mentions and emoji autocompletion was broken in e.g. a
list, because the list handling take presidency over the text expansion.

(cherry picked from commit 276ef10dd5)
2025-01-20 12:52:20 +00:00
forgejo-backport-action
28db11f2e7 [v10.0/forgejo] fix(ui): hide git note add button for commit if commit already has a note (#6614)
Backport: https://codeberg.org/forgejo/forgejo/pulls/6613

Regression from f5c0570533

Co-authored-by: Beowulf <beowulf@beocode.eu>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6614
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: 0ko <0ko@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>
2025-01-18 19:43:08 +00:00
forgejo-backport-action
6d0bf55f05 [v10.0/forgejo] fix: Reset content of comment edit field on cancel (#6601)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6595

Currently, the content of the text field is not reset when you cancel editing. This change resets the content of the text field when editing is canceled.

If this is not done and you click on cancel and then on edit again, you can no longer return to the initial content without completely reloading the page.

Co-authored-by: Beowulf <beowulf@beocode.eu>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6601
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
2025-01-17 20:48:35 +00:00
forgejo-backport-action
2d1e163913 [v10.0/forgejo] fix: reduce noise for the v303 migration (#6594)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6591

Using SELECT `%s` FROM `%s` WHERE 0 = 1 to assert the existence of a column is simple but noisy: it shows errors in the migrations that are confusing for Forgejo admins because they are not actual errors.

Use introspection instead, which is more complicated but leads to the same result.

Add a test that ensures it works as expected, for all database types. Although the migration is run for all database types, it does not account for various scenarios and is never tested in the case a column does not exist.

Refs: https://codeberg.org/forgejo/forgejo/issues/6583

Co-authored-by: Earl Warren <contact@earl-warren.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6594
Reviewed-by: Earl Warren <earl-warren@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>
2025-01-17 08:15:16 +00:00
forgejo-backport-action
26b7c6b86a [v10.0/forgejo] tests(e2e): Various fixes to visual testing (#6587)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6569

Co-authored-by: Otto Richter <git@otto.splvs.net>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6587
Reviewed-by: Otto <otto@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>
2025-01-17 01:07:22 +00:00
forgejo-backport-action
05056b8aa2 [v10.0/forgejo] Refactor e2e tests to simplify authentication setup (#6585)
**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6400

Replaced manual login and context loading across tests with Playwright's `test.use` configuration for user authentication. This simplifies test setup, improves readability, and reduces repetition.

#6362 first part

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. 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

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- 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

- [x] 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] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Co-authored-by: Julian Schlarb <julian.schlarb@denktmit.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6585
Reviewed-by: Otto <otto@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>
2025-01-16 13:37:06 +00:00
196 changed files with 8024 additions and 1200 deletions

View file

@ -13,6 +13,8 @@ runs:
run: |
export DEBIAN_FRONTEND=noninteractive
echo "deb http://deb.debian.org/debian/ ${RELEASE} main" > "/etc/apt/sources.list.d/${RELEASE}.list"
wget -O- http://neuro.debian.net/lists/bookworm.de-fzj.libre | tee /etc/apt/sources.list.d/neurodebian.sources.list
apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com 0xA5D32F012649A5A9
env:
RELEASE: ${{inputs.release}}
- name: install packages
@ -24,6 +26,7 @@ runs:
- name: remove temporary package list to prevent using it in other steps
run: |
rm "/etc/apt/sources.list.d/${RELEASE}.list"
rm "/etc/apt/sources.list.d/neurodebian.sources.list"
apt-get update -qq
env:
RELEASE: ${{inputs.release}}

View file

@ -3,7 +3,7 @@ runs:
steps:
- run: |
su forgejo -c 'make deps-backend'
- uses: actions/cache@v4
- uses: https://data.forgejo.org/actions/cache@v4
id: cache-backend
with:
path: ${{github.workspace}}/gitea

View file

@ -48,7 +48,7 @@ runs:
- name: "Restore Go dependencies from cache or mark for later caching"
id: cache-deps
uses: actions/cache@v4
uses: https://data.forgejo.org/actions/cache@v4
with:
key: setup-cache-go-deps-${{ runner.os }}-${{ inputs.username }}-${{ steps.go-version.outputs.go_version }}-${{ hashFiles('go.sum', 'go.mod') }}
restore-keys: |

View file

@ -19,7 +19,7 @@ runs:
set -ex
toolchain=$(grep -oP '(?<=toolchain ).+' go.mod)
version=$(go version | cut -d' ' -f3)
if [ "$toolchain" != "$version" ]; then
echo "go version mismatch: $toolchain <> $version"
if dpkg --compare-versions ${version#go} lt ${toolchain#go}; then
echo "go version too low: $toolchain >= $version"
exit 1
fi

View file

@ -0,0 +1,41 @@
on:
push:
branches:
- 'forgejo'
tags:
- '*-git-annex*'
jobs:
build-oci-image:
runs-on: docker
strategy:
matrix:
type: ["rootful", "rootless"]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # fetch the full history so that the Forgejo version is determined properly
- name: Determine registry and username
id: determine-registry-and-username
run: |
echo "registry=${GITHUB_SERVER_URL#https://}" >> "$GITHUB_OUTPUT"
echo "username=${GITHUB_REPOSITORY%/*}" >> "$GITHUB_OUTPUT"
- name: Install Docker
run: curl -fsSL https://get.docker.com | sh
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ steps.determine-registry-and-username.outputs.registry }}
username: ${{ steps.determine-registry-and-username.outputs.username }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ${{ (matrix.type == 'rootful' && 'Dockerfile') || (matrix.type == 'rootless' && 'Dockerfile.rootless') }}
push: true
tags: ${{ steps.determine-registry-and-username.outputs.registry }}/${{ github.repository }}:${{ github.ref_name }}${{ (matrix.type == 'rootful' && ' ') || (matrix.type == 'rootless' && '-rootless') }}

View file

@ -25,7 +25,7 @@ jobs:
if: vars.ROLE == 'forgejo-coding'
runs-on: lxc-bookworm
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
- id: forgejo
uses: https://data.forgejo.org/actions/setup-forgejo@v2.0.4

View file

@ -33,7 +33,7 @@ jobs:
# root is used for testing, allow it
if: vars.ROLE == 'forgejo-integration' || github.repository_owner == 'root'
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
with:
fetch-depth: 0

View file

@ -37,11 +37,11 @@ jobs:
container:
image: data.forgejo.org/oci/node:20-bookworm
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
with:
fetch-depth: '0'
show-progress: 'false'
- uses: https://code.forgejo.org/actions/cascading-pr@v2.2.0
- uses: https://data.forgejo.org/actions/cascading-pr@v2.2.0
with:
origin-url: ${{ env.GITHUB_SERVER_URL }}
origin-repo: ${{ github.repository }}

View file

@ -39,7 +39,7 @@ jobs:
runs-on: lxc-bookworm
if: vars.DOER != '' && vars.FORGEJO != '' && vars.TO_OWNER != '' && vars.FROM_OWNER != '' && secrets.TOKEN != ''
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
- name: copy & sign
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.3.1

View file

@ -10,7 +10,6 @@ on:
jobs:
backend-checks:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
container:
image: 'data.forgejo.org/oci/node:20-bookworm'
@ -27,7 +26,6 @@ jobs:
- run: su forgejo -c 'make --always-make -j$(nproc) lint-backend tidy-check swagger-check fmt-check swagger-validate' # ensure the "go-licenses" make target runs
- uses: ./.forgejo/workflows-composite/build-backend
frontend-checks:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
container:
image: 'data.forgejo.org/oci/node:20-bookworm'
@ -46,7 +44,7 @@ jobs:
apt-get update -qq
apt-get -q install -qq -y zstd
- name: "Cache frontend build for playwright testing"
uses: actions/cache/save@v4
uses: https://data.forgejo.org/actions/cache/save@v4
with:
path: ${{github.workspace}}/public/assets
key: frontend-build-${{ github.sha }}
@ -104,7 +102,7 @@ jobs:
fetch-depth: 20
- uses: ./.forgejo/workflows-composite/setup-env
- name: "Restore frontend build"
uses: actions/cache/restore@v4
uses: https://data.forgejo.org/actions/cache/restore@v4
id: cache-frontend
with:
path: ${{github.workspace}}/public/assets
@ -176,7 +174,6 @@ jobs:
TAGS: bindata
TEST_REDIS_SERVER: cacher:${{ matrix.cacher.port }}
test-mysql:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
needs: [backend-checks, frontend-checks]
container:
@ -199,15 +196,13 @@ jobs:
- name: install dependencies & git >= 2.42
uses: ./.forgejo/workflows-composite/apt-install-from
with:
packages: git git-lfs
packages: git git-annex-standalone git-lfs
- uses: ./.forgejo/workflows-composite/build-backend
- run: |
su forgejo -c 'make test-mysql-migration test-mysql'
timeout-minutes: 120
env:
USE_REPO_TEST_DIR: 1
test-pgsql:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
needs: [backend-checks, frontend-checks]
container:
@ -236,17 +231,15 @@ jobs:
- name: install dependencies & git >= 2.42
uses: ./.forgejo/workflows-composite/apt-install-from
with:
packages: git git-lfs
packages: git git-annex-standalone git-lfs
- uses: ./.forgejo/workflows-composite/build-backend
- run: |
su forgejo -c 'make test-pgsql-migration test-pgsql'
timeout-minutes: 120
env:
RACE_ENABLED: true
USE_REPO_TEST_DIR: 1
TEST_LDAP: 1
test-sqlite:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
needs: [backend-checks, frontend-checks]
container:
@ -258,25 +251,21 @@ jobs:
- name: install dependencies & git >= 2.42
uses: ./.forgejo/workflows-composite/apt-install-from
with:
packages: git git-lfs
packages: git git-annex-standalone git-lfs
- uses: ./.forgejo/workflows-composite/build-backend
- run: |
su forgejo -c 'make test-sqlite-migration test-sqlite'
timeout-minutes: 120
env:
TAGS: sqlite sqlite_unlock_notify
RACE_ENABLED: true
TEST_TAGS: sqlite sqlite_unlock_notify
USE_REPO_TEST_DIR: 1
security-check:
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
runs-on: docker
needs:
- test-sqlite
- test-pgsql
- test-mysql
- test-remote-cacher
- test-unit
container:
image: 'data.forgejo.org/oci/node:20-bookworm'
options: --tmpfs /tmp:exec,noatime

1
.gitignore vendored
View file

@ -72,6 +72,7 @@ cpu.out
/tests/e2e/reports
/tests/e2e/test-artifacts
/tests/e2e/test-snapshots
/tests/e2e/.auth
/tests/*.ini
/tests/**/*.git/**/*.sample
/node_modules

View file

@ -1,6 +1,6 @@
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.23-alpine3.20 as build-env
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/golang:1.23-alpine3.20 as build-env
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
@ -51,7 +51,7 @@ RUN chmod 755 /tmp/local/usr/bin/entrypoint \
/go/src/code.gitea.io/gitea/environment-to-ini
RUN chmod 644 /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete
FROM code.forgejo.org/oci/alpine:3.20
FROM data.forgejo.org/oci/alpine:3.20
ARG RELEASE_VERSION
LABEL maintainer="contact@forgejo.org" \
org.opencontainers.image.authors="Forgejo" \
@ -78,6 +78,7 @@ RUN apk --no-cache add \
sqlite \
su-exec \
gnupg \
git-annex \
&& rm -rf /var/cache/apk/*
RUN addgroup \

View file

@ -1,6 +1,6 @@
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.23-alpine3.20 as build-env
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/golang:1.23-alpine3.20 as build-env
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
@ -49,7 +49,7 @@ RUN chmod 755 /tmp/local/usr/local/bin/docker-entrypoint.sh \
/go/src/code.gitea.io/gitea/environment-to-ini
RUN chmod 644 /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete
FROM code.forgejo.org/oci/alpine:3.20
FROM data.forgejo.org/oci/alpine:3.20
LABEL maintainer="contact@forgejo.org" \
org.opencontainers.image.authors="Forgejo" \
org.opencontainers.image.url="https://forgejo.org" \
@ -71,6 +71,7 @@ RUN apk --no-cache add \
git \
curl \
gnupg \
git-annex \
&& rm -rf /var/cache/apk/*
RUN addgroup \

View file

@ -8,7 +8,7 @@ self := $(location)
@tmpdir=`mktemp --tmpdir -d` ; \
echo Using temporary directory $$tmpdir for test repositories ; \
USE_REPO_TEST_DIR= $(MAKE) -f $(self) --no-print-directory REPO_TEST_DIR=$$tmpdir/ $@ ; \
STATUS=$$? ; rm -r "$$tmpdir" ; exit $$STATUS
STATUS=$$? ; chmod -R +w "$$tmpdir" && rm -r "$$tmpdir" ; exit $$STATUS
else
@ -104,7 +104,7 @@ else
FORGEJO_VERSION_API ?= $(GITEA_VERSION)+${GITEA_COMPATIBILITY}
else
# drop the "g" prefix prepended by git describe to the commit hash
FORGEJO_VERSION ?= $(shell git describe --exclude '*-test' --tags --always | sed 's/^v//' | sed 's/\-g/-/')+${GITEA_COMPATIBILITY}
FORGEJO_VERSION ?= $(shell git describe --exclude '*-test' --tags --always | sed 's/^v//' | sed 's/\-g/-/2')+${GITEA_COMPATIBILITY}
endif
endif
FORGEJO_VERSION_MAJOR=$(shell echo $(FORGEJO_VERSION) | sed -e 's/\..*//')

View file

@ -59,9 +59,9 @@ func initRemoveTags() {
oldnew := []string{}
for _, el := range []string{
"email@example.com", "correu@example.com", "epasts@domens.lv", "email@exemplo.com", "eposta@ornek.com", "email@példa.hu", "email@esempio.it",
"user", "utente", "lietotājs", "gebruiker", "usuário", "Benutzer", "Bruker", "bruger",
"user", "utente", "lietotājs", "gebruiker", "usuário", "Benutzer", "Bruker", "bruger", "użytkownik",
"server", "servidor", "kiszolgáló", "serveris",
"label", "etichetta", "etiķete", "rótulo", "Label", "utilizador", "etiket", "iezīme",
"label", "etichetta", "etiķete", "rótulo", "Label", "utilizador", "etiket", "iezīme", "etykieta",
} {
oldnew = append(oldnew, "<"+el+">", "REPLACED-TAG")
}

View file

@ -38,6 +38,7 @@ import (
const (
lfsAuthenticateVerb = "git-lfs-authenticate"
gitAnnexShellVerb = "git-annex-shell"
)
// CmdServ represents the available serv sub-command.
@ -79,6 +80,7 @@ var (
"git-upload-archive": perm.AccessModeRead,
"git-receive-pack": perm.AccessModeWrite,
lfsAuthenticateVerb: perm.AccessModeNone,
gitAnnexShellVerb: perm.AccessModeNone, // annex permissions are enforced by GIT_ANNEX_SHELL_READONLY, rather than the Gitea API
}
alphaDashDotPattern = regexp.MustCompile(`[^\w-\.]`)
)
@ -212,6 +214,28 @@ func runServ(c *cli.Context) error {
}
}
if verb == gitAnnexShellVerb {
if !setting.Annex.Enabled {
return fail(ctx, "Unknown git command", "git-annex request over SSH denied, git-annex support is disabled")
}
if len(words) < 3 {
return fail(ctx, "Too few arguments", "Too few arguments in cmd: %s", cmd)
}
// git-annex always puts the repo in words[2], unlike most other
// git subcommands; and it sometimes names repos like /~/, as if
// $HOME should get expanded while also being rooted. e.g.:
// git-annex-shell 'configlist' '/~/user/repo'
// git-annex-shell 'sendkey' '/user/repo 'key'
repoPath = words[2]
repoPath = strings.TrimPrefix(repoPath, "/")
repoPath = strings.TrimPrefix(repoPath, "~/")
}
// prevent directory traversal attacks
repoPath = filepath.Clean("/" + repoPath)[1:]
rr := strings.SplitN(repoPath, "/", 2)
if len(rr) != 2 {
return fail(ctx, "Invalid repository path", "Invalid repository path: %v", repoPath)
@ -225,6 +249,18 @@ func runServ(c *cli.Context) error {
// so that username and reponame are not affected.
repoPath = strings.ToLower(strings.TrimSpace(repoPath))
// put the sanitized repoPath back into the argument list for later
if verb == gitAnnexShellVerb {
// git-annex-shell demands an absolute path
absRepoPath, err := filepath.Abs(filepath.Join(setting.RepoRootPath, repoPath))
if err != nil {
return fail(ctx, "Error locating repoPath", "%v", err)
}
words[2] = absRepoPath
} else {
words[1] = repoPath
}
if alphaDashDotPattern.MatchString(reponame) {
return fail(ctx, "Invalid repo name", "Invalid repo name: %s", reponame)
}
@ -303,21 +339,45 @@ func runServ(c *cli.Context) error {
return nil
}
var gitcmd *exec.Cmd
gitBinPath := filepath.Dir(git.GitExecutable) // e.g. /usr/bin
gitBinVerb := filepath.Join(gitBinPath, verb) // e.g. /usr/bin/git-upload-pack
if _, err := os.Stat(gitBinVerb); err != nil {
gitBinVerb, err := exec.LookPath(verb)
if err != nil {
// if the command "git-upload-pack" doesn't exist, try to split "git-upload-pack" to use the sub-command with git
// ps: Windows only has "git.exe" in the bin path, so Windows always uses this way
// ps: git-annex-shell and other extensions may not necessarily be in gitBinPath,
// but '{gitBinPath}/git annex-shell' should be able to find them on $PATH.
verbFields := strings.SplitN(verb, "-", 2)
if len(verbFields) == 2 {
// use git binary with the sub-command part: "C:\...\bin\git.exe", "upload-pack", ...
gitcmd = exec.CommandContext(ctx, git.GitExecutable, verbFields[1], repoPath)
gitBinVerb = git.GitExecutable
words = append([]string{verbFields[1]}, words...)
}
}
if gitcmd == nil {
// by default, use the verb (it has been checked above by allowedCommands)
gitcmd = exec.CommandContext(ctx, gitBinVerb, repoPath)
// by default, use the verb (it has been checked above by allowedCommands)
gitcmd := exec.CommandContext(ctx, gitBinVerb, words[1:]...)
if verb == gitAnnexShellVerb {
// This doesn't get its own isolated section like LFS does, because LFS
// is handled by internal Gitea routines, but git-annex has to be shelled out
// to like other git subcommands, so we need to build up gitcmd.
// TODO: does this work on Windows?
gitcmd.Env = append(gitcmd.Env,
// "If set, disallows running git-shell to handle unknown commands."
// - git-annex-shell(1)
"GIT_ANNEX_SHELL_LIMITED=True",
// "If set, git-annex-shell will refuse to run commands
// that do not operate on the specified directory."
// - git-annex-shell(1)
fmt.Sprintf("GIT_ANNEX_SHELL_DIRECTORY=%s", words[2]),
)
if results.UserMode < perm.AccessModeWrite {
// "If set, disallows any action that could modify the git-annex repository."
// - git-annex-shell(1)
// We set this when the backend API has told us that we don't have write permission to this repo.
log.Debug("Setting GIT_ANNEX_SHELL_READONLY=True")
gitcmd.Env = append(gitcmd.Env, "GIT_ANNEX_SHELL_READONLY=True")
}
}
process.SetSysProcAttribute(gitcmd)

View file

@ -9,6 +9,7 @@ import (
"net"
"net/http"
"os"
"os/exec"
"path/filepath"
"strconv"
"strings"
@ -247,6 +248,12 @@ func runWeb(ctx *cli.Context) error {
createPIDFile(ctx.String("pid"))
}
if setting.Annex.Enabled {
if _, err := exec.LookPath("git-annex"); err != nil {
log.Fatal("You have enabled git-annex support but git-annex is not installed. Please make sure that Forgejo's PATH contains the git-annex executable.")
}
}
if !setting.InstallLock {
if err := serveInstall(ctx); err != nil {
return err
@ -311,6 +318,10 @@ func listen(m http.Handler, handleRedirector bool) error {
log.Info("LFS server enabled")
}
if setting.Annex.Enabled {
log.Info("git-annex enabled")
}
var err error
switch setting.Protocol {
case setting.HTTP:

View file

@ -2678,6 +2678,17 @@ LEVEL = Info
;; Limit the number of concurrent upload/download operations within a batch
;BATCH_OPERATION_CONCURRENCY = 8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;[annex]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Whether git-annex is enabled; defaults to false
;ENABLED = false
;; Whether to disable p2phttp support; default is the same as repository.DISABLE_HTTP_GIT
;DISABLE_P2PHTTP = false
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; settings for packages, will override storage setting

2
go.mod
View file

@ -2,7 +2,7 @@ module code.gitea.io/gitea
go 1.23
toolchain go1.23.4
toolchain go1.23.5
require (
code.forgejo.org/f3/gof3/v3 v3.10.2

View file

@ -282,27 +282,22 @@ func UpdateRunner(ctx context.Context, r *ActionRunner, cols ...string) error {
}
// DeleteRunner deletes a runner by given ID.
func DeleteRunner(ctx context.Context, id int64) error {
runner, err := GetRunnerByID(ctx, id)
if err != nil {
return err
}
func DeleteRunner(ctx context.Context, r *ActionRunner) error {
// Replace the UUID, which was either based on the secret's first 16 bytes or an UUIDv4,
// with a sequence of 8 0xff bytes followed by the little-endian version of the record's
// identifier. This will prevent the deleted record's identifier from colliding with any
// new record.
b := make([]byte, 8)
binary.LittleEndian.PutUint64(b, uint64(id))
runner.UUID = fmt.Sprintf("ffffffff-ffff-ffff-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x",
binary.LittleEndian.PutUint64(b, uint64(r.ID))
r.UUID = fmt.Sprintf("ffffffff-ffff-ffff-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x",
b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7])
err = UpdateRunner(ctx, runner, "UUID")
err := UpdateRunner(ctx, r, "UUID")
if err != nil {
return err
}
_, err = db.DeleteByID[ActionRunner](ctx, id)
_, err = db.DeleteByID[ActionRunner](ctx, r.ID)
return err
}

View file

@ -34,7 +34,7 @@ func TestDeleteRunner(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
before := unittest.AssertExistsAndLoadBean(t, &ActionRunner{ID: recordID})
err := DeleteRunner(db.DefaultContext, recordID)
err := DeleteRunner(db.DefaultContext, &ActionRunner{ID: recordID})
require.NoError(t, err)
var after ActionRunner

View file

@ -86,7 +86,7 @@ func FindVariables(ctx context.Context, opts FindVariablesOpts) ([]*ActionVariab
}
func UpdateVariable(ctx context.Context, variable *ActionVariable) (bool, error) {
count, err := db.GetEngine(ctx).ID(variable.ID).Cols("name", "data").
count, err := db.GetEngine(ctx).ID(variable.ID).Where("owner_id = ? AND repo_id = ?", variable.OwnerID, variable.RepoID).Cols("name", "data").
Update(&ActionVariable{
Name: variable.Name,
Data: variable.Data,
@ -94,11 +94,9 @@ func UpdateVariable(ctx context.Context, variable *ActionVariable) (bool, error)
return count != 0, err
}
func DeleteVariable(ctx context.Context, id int64) error {
if _, err := db.DeleteByID[ActionVariable](ctx, id); err != nil {
return err
}
return nil
func DeleteVariable(ctx context.Context, variableID, ownerID, repoID int64) (bool, error) {
count, err := db.GetEngine(ctx).Table("action_variable").Where("id = ? AND owner_id = ? AND repo_id = ?", variableID, ownerID, repoID).Delete()
return count != 0, err
}
func GetVariablesOfRun(ctx context.Context, run *ActionRun) (map[string]string, error) {

View file

@ -0,0 +1,23 @@
-
id: 1001
title: Org project that contains private issues
owner_id: 3
repo_id: 0
is_closed: false
creator_id: 2
board_type: 1
type: 3
created_unix: 1738000000
updated_unix: 1738000000
-
id: 1002
title: User project that contains private issues
owner_id: 2
repo_id: 0
is_closed: false
creator_id: 2
board_type: 1
type: 1
created_unix: 1738000000
updated_unix: 1738000000

View file

@ -0,0 +1,17 @@
-
id: 1001
project_id: 1001
title: Triage
creator_id: 2
default: true
created_unix: 1738000000
updated_unix: 1738000000
-
id: 1002
project_id: 1002
title: Triage
creator_id: 2
default: true
created_unix: 1738000000
updated_unix: 1738000000

View file

@ -0,0 +1,11 @@
-
id: 1001
issue_id: 6
project_id: 1001
project_board_id: 1001
-
id: 1002
issue_id: 7
project_id: 1002
project_board_id: 1002

View file

@ -1,42 +1,49 @@
-
id: 1
team_id: 1
org_id: 3
type: 1
access_mode: 4
-
id: 2
team_id: 1
org_id: 3
type: 2
access_mode: 4
-
id: 3
team_id: 1
org_id: 3
type: 3
access_mode: 4
-
id: 4
team_id: 1
org_id: 3
type: 4
access_mode: 4
-
id: 5
team_id: 1
org_id: 3
type: 5
access_mode: 4
-
id: 6
team_id: 1
org_id: 3
type: 6
access_mode: 4
-
id: 7
team_id: 1
org_id: 3
type: 7
access_mode: 4

View file

@ -7,8 +7,10 @@ import (
"context"
"code.gitea.io/gitea/models/db"
org_model "code.gitea.io/gitea/models/organization"
project_model "code.gitea.io/gitea/models/project"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/optional"
"code.gitea.io/gitea/modules/util"
)
@ -48,22 +50,29 @@ func (issue *Issue) ProjectColumnID(ctx context.Context) int64 {
}
// LoadIssuesFromColumn load issues assigned to this column
func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column) (IssueList, error) {
issueList, err := Issues(ctx, &IssuesOptions{
func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column, doer *user_model.User, org *org_model.Organization, isClosed optional.Option[bool]) (IssueList, error) {
issueOpts := &IssuesOptions{
ProjectColumnID: b.ID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
IsClosed: isClosed,
}
if doer != nil {
issueOpts.User = doer
issueOpts.Org = org
} else {
issueOpts.AllPublic = true
}
issueList, err := Issues(ctx, issueOpts)
if err != nil {
return nil, err
}
if b.Default {
issues, err := Issues(ctx, &IssuesOptions{
ProjectColumnID: db.NoConditionID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
issueOpts.ProjectColumnID = db.NoConditionID
issues, err := Issues(ctx, issueOpts)
if err != nil {
return nil, err
}
@ -78,10 +87,10 @@ func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column) (IssueLi
}
// LoadIssuesFromColumnList load issues assigned to the columns
func LoadIssuesFromColumnList(ctx context.Context, bs project_model.ColumnList) (map[int64]IssueList, error) {
func LoadIssuesFromColumnList(ctx context.Context, bs project_model.ColumnList, doer *user_model.User, org *org_model.Organization, isClosed optional.Option[bool]) (map[int64]IssueList, error) {
issuesMap := make(map[int64]IssueList, len(bs))
for i := range bs {
il, err := LoadIssuesFromColumn(ctx, bs[i])
il, err := LoadIssuesFromColumn(ctx, bs[i], doer, org, isClosed)
if err != nil {
return nil, err
}
@ -160,3 +169,36 @@ func IssueAssignOrRemoveProject(ctx context.Context, issue *Issue, doer *user_mo
})
})
}
// NumIssuesInProjects returns the amount of issues assigned to one of the project
// in the list which the doer can access.
func NumIssuesInProjects(ctx context.Context, pl []*project_model.Project, doer *user_model.User, org *org_model.Organization, isClosed optional.Option[bool]) (map[int64]int, error) {
numMap := make(map[int64]int, len(pl))
for _, p := range pl {
num, err := NumIssuesInProject(ctx, p, doer, org, isClosed)
if err != nil {
return nil, err
}
numMap[p.ID] = num
}
return numMap, nil
}
// NumIssuesInProject returns the amount of issues assigned to the project which
// the doer can access.
func NumIssuesInProject(ctx context.Context, p *project_model.Project, doer *user_model.User, org *org_model.Organization, isClosed optional.Option[bool]) (int, error) {
numIssuesInProject := int(0)
bs, err := p.GetColumns(ctx)
if err != nil {
return 0, err
}
im, err := LoadIssuesFromColumnList(ctx, bs, doer, org, isClosed)
if err != nil {
return 0, err
}
for _, il := range im {
numIssuesInProject += len(il)
}
return numIssuesInProject, nil
}

View file

@ -0,0 +1,100 @@
// Copyright 2025 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: GPL-3.0-or-later
package issues_test
import (
"testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/models/organization"
"code.gitea.io/gitea/models/project"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/optional"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPrivateIssueProjects(t *testing.T) {
defer tests.AddFixtures("models/fixtures/PrivateIssueProjects/")()
require.NoError(t, unittest.PrepareTestDatabase())
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
t.Run("Organization project", func(t *testing.T) {
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
orgProject := unittest.AssertExistsAndLoadBean(t, &project.Project{ID: 1001, OwnerID: org.ID})
column := unittest.AssertExistsAndLoadBean(t, &project.Column{ID: 1001, ProjectID: orgProject.ID})
t.Run("Authenticated user", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
issueList, err := issues.LoadIssuesFromColumn(db.DefaultContext, column, user2, org, optional.None[bool]())
require.NoError(t, err)
assert.Len(t, issueList, 1)
assert.EqualValues(t, 6, issueList[0].ID)
issuesNum, err := issues.NumIssuesInProject(db.DefaultContext, orgProject, user2, org, optional.None[bool]())
require.NoError(t, err)
assert.EqualValues(t, 1, issuesNum)
issuesNum, err = issues.NumIssuesInProject(db.DefaultContext, orgProject, user2, org, optional.Some(true))
require.NoError(t, err)
assert.EqualValues(t, 0, issuesNum)
issuesNum, err = issues.NumIssuesInProject(db.DefaultContext, orgProject, user2, org, optional.Some(false))
require.NoError(t, err)
assert.EqualValues(t, 1, issuesNum)
})
t.Run("Anonymous user", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
issueList, err := issues.LoadIssuesFromColumn(db.DefaultContext, column, nil, org, optional.None[bool]())
require.NoError(t, err)
assert.Empty(t, issueList)
issuesNum, err := issues.NumIssuesInProject(db.DefaultContext, orgProject, nil, org, optional.None[bool]())
require.NoError(t, err)
assert.EqualValues(t, 0, issuesNum)
})
})
t.Run("User project", func(t *testing.T) {
userProject := unittest.AssertExistsAndLoadBean(t, &project.Project{ID: 1002, OwnerID: user2.ID})
column := unittest.AssertExistsAndLoadBean(t, &project.Column{ID: 1002, ProjectID: userProject.ID})
t.Run("Authenticated user", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
issueList, err := issues.LoadIssuesFromColumn(db.DefaultContext, column, user2, nil, optional.None[bool]())
require.NoError(t, err)
assert.Len(t, issueList, 1)
assert.EqualValues(t, 7, issueList[0].ID)
issuesNum, err := issues.NumIssuesInProject(db.DefaultContext, userProject, user2, nil, optional.None[bool]())
require.NoError(t, err)
assert.EqualValues(t, 1, issuesNum)
issuesNum, err = issues.NumIssuesInProject(db.DefaultContext, userProject, user2, nil, optional.Some(true))
require.NoError(t, err)
assert.EqualValues(t, 0, issuesNum)
issuesNum, err = issues.NumIssuesInProject(db.DefaultContext, userProject, user2, nil, optional.Some(false))
require.NoError(t, err)
assert.EqualValues(t, 1, issuesNum)
})
t.Run("Anonymous user", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
issueList, err := issues.LoadIssuesFromColumn(db.DefaultContext, column, nil, nil, optional.None[bool]())
require.NoError(t, err)
assert.Empty(t, issueList)
issuesNum, err := issues.NumIssuesInProject(db.DefaultContext, userProject, nil, nil, optional.None[bool]())
require.NoError(t, err)
assert.EqualValues(t, 0, issuesNum)
})
})
}

View file

@ -1,23 +1,27 @@
// Copyright 2024 The Forgejo Authors.
// SPDX-License-Identifier: MIT
// Copyright 2025 The Forgejo Authors.
// SPDX-License-Identifier: GPL-3.0-or-later
package v1_23 //nolint
import (
"fmt"
"code.gitea.io/gitea/models/migrations/base"
"xorm.io/xorm"
"xorm.io/xorm/schemas"
)
func GiteaLastDrop(x *xorm.Engine) error {
tables, err := x.DBMetas()
if err != nil {
return err
}
sess := x.NewSession()
defer sess.Close()
for _, drop := range []struct {
table string
field string
table string
column string
}{
{"badge", "slug"},
{"oauth2_application", "skip_secondary_authorization"},
@ -29,10 +33,25 @@ func GiteaLastDrop(x *xorm.Engine) error {
{"protected_branch", "force_push_allowlist_team_i_ds"},
{"protected_branch", "force_push_allowlist_deploy_keys"},
} {
if _, err := sess.Exec(fmt.Sprintf("SELECT `%s` FROM `%s` WHERE 0 = 1", drop.field, drop.table)); err != nil {
var table *schemas.Table
found := false
for _, table = range tables {
if table.Name == drop.table {
found = true
break
}
}
if !found {
continue
}
if err := base.DropTableColumns(sess, drop.table, drop.field); err != nil {
if table.GetColumn(drop.column) == nil {
continue
}
if err := base.DropTableColumns(sess, drop.table, drop.column); err != nil {
return err
}
}

View file

@ -0,0 +1,41 @@
// Copyright 2025 The Forgejo Authors.
// SPDX-License-Identifier: GPL-3.0-or-later
package v1_23 //nolint
import (
"testing"
migration_tests "code.gitea.io/gitea/models/migrations/test"
"github.com/stretchr/testify/require"
"xorm.io/xorm/schemas"
)
func Test_GiteaLastDrop(t *testing.T) {
type Badge struct {
ID int64 `xorm:"pk autoincr"`
Slug string
}
x, deferable := migration_tests.PrepareTestEnv(t, 0, new(Badge))
defer deferable()
if x == nil || t.Failed() {
return
}
getColumn := func() *schemas.Column {
tables, err := x.DBMetas()
require.NoError(t, err)
require.Len(t, tables, 1)
table := tables[0]
require.Equal(t, "badge", table.Name)
return table.GetColumn("slug")
}
require.NotNil(t, getColumn(), "slug column exists")
require.NoError(t, GiteaLastDrop(x))
require.Nil(t, getColumn(), "slug column was deleted")
// idempotent
require.NoError(t, GiteaLastDrop(x))
}

View file

@ -57,20 +57,6 @@ func (Column) TableName() string {
return "project_board" // TODO: the legacy table name should be project_column
}
// NumIssues return counter of all issues assigned to the column
func (c *Column) NumIssues(ctx context.Context) int {
total, err := db.GetEngine(ctx).Table("project_issue").
Where("project_id=?", c.ProjectID).
And("project_board_id=?", c.ID).
GroupBy("issue_id").
Cols("issue_id").
Count()
if err != nil {
return 0
}
return int(total)
}
func (c *Column) GetIssues(ctx context.Context) ([]*ProjectIssue, error) {
issues := make([]*ProjectIssue, 0, 5)
if err := db.GetEngine(ctx).Where("project_id=?", c.ProjectID).

View file

@ -34,20 +34,6 @@ func deleteProjectIssuesByProjectID(ctx context.Context, projectID int64) error
return err
}
// NumIssues return counter of all issues assigned to a project
func (p *Project) NumIssues(ctx context.Context) int {
c, err := db.GetEngine(ctx).Table("project_issue").
Where("project_id=?", p.ID).
GroupBy("issue_id").
Cols("issue_id").
Count()
if err != nil {
log.Error("NumIssues: %v", err)
return 0
}
return int(c)
}
// NumClosedIssues return counter of closed issues assigned to a project
func (p *Project) NumClosedIssues(ctx context.Context) int {
c, err := db.GetEngine(ctx).Table("project_issue").

View file

@ -166,9 +166,9 @@ func GetReviewers(ctx context.Context, repo *Repository, doerID, posterID int64)
// If isShowFullName is set to true, also include full name prefix search
func GetIssuePostersWithSearch(ctx context.Context, repo *Repository, isPull bool, search string, isShowFullName bool) ([]*user_model.User, error) {
users := make([]*user_model.User, 0, 30)
var prefixCond builder.Cond = builder.Like{"name", search + "%"}
prefixCond := db.BuildCaseInsensitiveLike("name", search+"%")
if isShowFullName {
prefixCond = prefixCond.Or(builder.Like{"full_name", "%" + search + "%"})
prefixCond = db.BuildCaseInsensitiveLike("full_name", "%"+search+"%")
}
cond := builder.In("`user`.id",

View file

@ -126,17 +126,15 @@ func (opts *SearchUserOptions) toSearchQueryBase(ctx context.Context) *xorm.Sess
return e.Where(cond)
}
// 2fa filter uses LEFT JOIN to check whether a user has a 2fa record
// While using LEFT JOIN, sometimes the performance might not be good, but it won't be a problem now, such SQL is seldom executed.
// There are some possible methods to refactor this SQL in future when we really need to optimize the performance (but not now):
// (1) add a column in user table (2) add a setting value in user_setting table (3) use search engines (bleve/elasticsearch)
// Check if the user has two factor enabled, which is TOTP or Webauthn.
if opts.IsTwoFactorEnabled.Value() {
cond = cond.And(builder.Expr("two_factor.uid IS NOT NULL"))
cond = cond.And(builder.Expr("two_factor.uid IS NOT NULL OR webauthn_credential.user_id IS NOT NULL"))
} else {
cond = cond.And(builder.Expr("two_factor.uid IS NULL"))
cond = cond.And(builder.Expr("two_factor.uid IS NULL AND webauthn_credential.user_id IS NULL"))
}
return e.Join("LEFT OUTER", "two_factor", "two_factor.uid = `user`.id").
Join("LEFT OUTER", "webauthn_credential", "webauthn_credential.user_id = `user`.id").
Where(cond)
}

View file

@ -222,7 +222,7 @@ func TestSearchUsers(t *testing.T) {
[]int64{1041, 37})
testUserSuccess(&user_model.SearchUserOptions{ListOptions: db.ListOptions{Page: 1}, IsTwoFactorEnabled: optional.Some(true)},
[]int64{24})
[]int64{24, 32})
}
func TestEmailNotificationPreferences(t *testing.T) {

192
modules/annex/annex.go Normal file
View file

@ -0,0 +1,192 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
// Unlike modules/lfs, which operates mainly on git.Blobs, this operates on git.TreeEntrys.
// The motivation for this is that TreeEntrys have an easy pointer to the on-disk repo path,
// while blobs do not (in fact, if building with TAGS=gogit, blobs might exist only in a mock
// filesystem, living only in process RAM). We must have the on-disk path to do anything
// useful with git-annex because all of its interesting data is on-disk under .git/annex/.
package annex
import (
"errors"
"fmt"
"io/fs"
"os"
"path"
"path/filepath"
"regexp"
"strings"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/typesniffer"
)
// ErrBlobIsNotAnnexed occurs if a blob does not contain a valid annex key
var ErrBlobIsNotAnnexed = errors.New("not a git-annex pointer")
func LookupKey(blob *git.Blob) (string, error) {
stdout, _, err := git.NewCommand(git.DefaultContext, "annex", "lookupkey", "--ref").AddDynamicArguments(blob.ID.String()).RunStdString(&git.RunOpts{Dir: blob.Repo().Path})
if err != nil {
return "", ErrBlobIsNotAnnexed
}
key := strings.TrimSpace(stdout)
return key, nil
}
func ContentLocationFromKey(repoPath, key string) (string, error) {
contentLocation, _, err := git.NewCommandContextNoGlobals(git.DefaultContext, "annex", "contentlocation").AddDynamicArguments(key).RunStdString(&git.RunOpts{Dir: repoPath})
if err != nil {
return "", fmt.Errorf("in %s: %s does not seem to be a valid annexed file: %w", repoPath, key, err)
}
contentLocation = strings.TrimSpace(contentLocation)
contentLocation = path.Clean("/" + contentLocation)[1:] // prevent directory traversals
contentLocation = path.Join(repoPath, contentLocation)
return contentLocation, nil
}
// return the absolute path of the content pointed to by the annex pointer stored in the git object
// errors if the content is not found in this repo
func ContentLocation(blob *git.Blob) (string, error) {
key, err := LookupKey(blob)
if err != nil {
return "", err
}
return ContentLocationFromKey(blob.Repo().Path, key)
}
// returns a stream open to the annex content
func Content(blob *git.Blob) (*os.File, error) {
contentLocation, err := ContentLocation(blob)
if err != nil {
return nil, err
}
return os.Open(contentLocation)
}
// whether the object appears to be a valid annex pointer
// does *not* verify if the content is actually in this repo;
// for that, use ContentLocation()
func IsAnnexed(blob *git.Blob) (bool, error) {
if !setting.Annex.Enabled {
return false, nil
}
// LookupKey is written to only return well-formed keys
// so the test is just to see if it errors
_, err := LookupKey(blob)
if err != nil {
if errors.Is(err, ErrBlobIsNotAnnexed) {
return false, nil
}
return false, err
}
return true, nil
}
// IsAnnexRepo determines if repo is a git-annex enabled repository
func IsAnnexRepo(repo *git.Repository) bool {
_, _, err := git.NewCommand(repo.Ctx, "config", "annex.uuid").RunStdString(&git.RunOpts{Dir: repo.Path})
return err == nil
}
var repoConfigFileRe = regexp.MustCompile("[^/]+/[^/]+.git/config$")
var (
uuid2repoPathCache = make(map[string]string)
repoPath2uuidCache = make(map[string]string)
)
func Init() error {
if !setting.Annex.Enabled {
return nil
}
log.Info("Populating the git-annex UUID cache with existing repositories")
return updateUUID2RepoPathCache()
}
func updateUUID2RepoPathCache() error {
return filepath.WalkDir(setting.RepoRootPath, func(path string, d fs.DirEntry, err error) error {
if err == nil && repoConfigFileRe.MatchString(path) {
thisRepoPath := strings.TrimSuffix(path, "/config")
_, ok := repoPath2uuidCache[thisRepoPath]
if ok {
return nil
}
stdout, _, err := git.NewCommand(git.DefaultContext, "config", "annex.uuid").RunStdString(&git.RunOpts{Dir: thisRepoPath})
if err != nil {
return nil
}
repoUUID := strings.TrimSpace(stdout)
if repoUUID != "" {
uuid2repoPathCache[repoUUID] = thisRepoPath
repoPath2uuidCache[thisRepoPath] = repoUUID
}
}
return nil
})
}
func repoPathFromUUIDCache(uuid string) (string, error) {
if repoPath, ok := uuid2repoPathCache[uuid]; ok {
return repoPath, nil
}
// If the cache didn't contain an entry for the UUID then update the cache and try again
if err := updateUUID2RepoPathCache(); err != nil {
return "", err
}
if repoPath, ok := uuid2repoPathCache[uuid]; ok {
return repoPath, nil
}
return "", fmt.Errorf("no repository known for UUID '%s'", uuid)
}
func checkValidity(uuid, repoPath string) (bool, error) {
stdout, _, err := git.NewCommand(git.DefaultContext, "config", "annex.uuid").RunStdString(&git.RunOpts{Dir: repoPath})
if err != nil {
return false, err
}
repoUUID := strings.TrimSpace(stdout)
return uuid == repoUUID, nil
}
func removeCachedEntries(uuid, repoPath string) {
delete(uuid2repoPathCache, uuid)
delete(repoPath2uuidCache, repoPath)
}
func UUID2RepoPath(uuid string) (string, error) {
// Get the current cache entry for the UUID
repoPath, err := repoPathFromUUIDCache(uuid)
if err != nil {
return "", err
}
// Check if it is still up-to-date
valid, err := checkValidity(uuid, repoPath)
if err != nil {
return "", err
}
if !valid {
// If it isn't, remove the cache entry and try again
removeCachedEntries(uuid, repoPath)
return UUID2RepoPath(uuid)
}
// Otherwise just return the cached entry
return repoPath, nil
}
// GuessContentType guesses the content type of the annexed blob.
func GuessContentType(blob *git.Blob) (typesniffer.SniffedType, error) {
r, err := Content(blob)
if err != nil {
return typesniffer.SniffedType{}, err
}
defer r.Close()
return typesniffer.DetectContentTypeFromReader(r)
}

View file

@ -16,6 +16,7 @@ import (
"strings"
"unicode/utf8"
"code.gitea.io/gitea/modules/annex"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
@ -101,6 +102,12 @@ func Int64sToStrings(ints []int64) []string {
// EntryIcon returns the octicon class for displaying files/directories
func EntryIcon(entry *git.TreeEntry) string {
isAnnexed, _ := annex.IsAnnexed(entry.Blob())
if isAnnexed {
// Show git-annex files as binary files to differentiate them from non-annexed files
// TODO: find a more suitable icon, maybe something related to git-annex
return "file-binary"
}
switch {
case entry.IsLink():
te, _, err := entry.FollowLink()

View file

@ -126,6 +126,10 @@ func (b *blobReader) Close() error {
return nil
}
func (b *Blob) Repo() *Repository {
return b.repo
}
// Name returns name of the tree entry this blob object was created from (or empty string)
func (b *Blob) Name() string {
return b.name

View file

@ -457,12 +457,13 @@ func (c *Command) RunStdBytes(opts *RunOpts) (stdout, stderr []byte, runErr RunS
}
// AllowLFSFiltersArgs return globalCommandArgs with lfs filter, it should only be used for tests
// It also re-enables git-credential(1), which is used to test git-annex's HTTP support
func AllowLFSFiltersArgs() TrustedCmdArgs {
// Now here we should explicitly allow lfs filters to run
filteredLFSGlobalArgs := make(TrustedCmdArgs, len(globalCommandArgs))
j := 0
for _, arg := range globalCommandArgs {
if strings.Contains(string(arg), "lfs") {
if strings.Contains(string(arg), "lfs") || strings.Contains(string(arg), "credential") {
j--
} else {
filteredLFSGlobalArgs[j] = arg

View file

@ -12,6 +12,7 @@ import (
"runtime"
"strings"
"code.gitea.io/gitea/modules/annex"
"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
@ -86,8 +87,22 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
commands = strings.Fields(command)
args = commands[1:]
)
if p.IsInputFile {
isAnnexed, _ := annex.IsAnnexed(ctx.Blob)
// if a renderer wants to read a file, and we have annexed content, we can
// provide the annex key file location directly to the renderer. git-annex
// takes care of having that location be read-only, so no critical
// protection layer is needed. Moreover, the file readily exists, and
// expensive temporary files can be avoided, also allowing an operator
// to raise MAX_DISPLAY_FILE_SIZE without much negative impact.
if p.IsInputFile && isAnnexed {
// look for annexed content, will be empty, if there is none
annexContentLocation, _ := annex.ContentLocation(ctx.Blob)
// we call the renderer, even if there is no annex content present.
// showing the pointer file content is not much use, and a topical
// renderer might be able to produce something useful from the
// filename alone (present in ENV)
args = append(args, annexContentLocation)
} else if p.IsInputFile {
// write to temp file
f, err := os.CreateTemp("", "gitea_input")
if err != nil {
@ -130,6 +145,12 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
os.Environ(),
"GITEA_PREFIX_SRC="+ctx.Links.SrcLink(),
"GITEA_PREFIX_RAW="+ctx.Links.RawLink(),
// also communicate the relative path of the to-be-rendered item.
// this enables the renderer to make use of the original file name
// and path, e.g., to make rendering or dtype-detection decisions
// that go beyond the originally matched extension. Even if the
// content is directly streamed to STDIN
"GITEA_RELATIVE_PATH="+ctx.RelativePath,
)
if !p.IsInputFile {
cmd.Stdin = input

View file

@ -8,6 +8,7 @@ import (
"bytes"
"html/template"
"io"
"net/url"
"regexp"
"slices"
"strconv"
@ -77,6 +78,16 @@ func newFilePreview(ctx *RenderContext, node *html.Node, locale translation.Loca
commitSha := node.Data[m[4]:m[5]]
filePath := node.Data[m[6]:m[7]]
urlFullSource := urlFull
if strings.HasSuffix(filePath, "?display=source") {
filePath = strings.TrimSuffix(filePath, "?display=source")
} else if Type(filePath) != "" {
urlFullSource = node.Data[m[0]:m[6]] + filePath + "?display=source#" + node.Data[m[8]:m[1]]
}
filePath, err := url.QueryUnescape(filePath)
if err != nil {
return nil
}
hash := node.Data[m[8]:m[9]]
preview.start = m[0]
@ -113,7 +124,7 @@ func newFilePreview(ctx *RenderContext, node *html.Node, locale translation.Loca
titleBuffer.WriteString(" &ndash; ")
}
err = html.Render(titleBuffer, createLink(urlFull, filePath, "muted"))
err = html.Render(titleBuffer, createLink(urlFullSource, filePath, "muted"))
if err != nil {
log.Error("failed to render filepathLink: %v", err)
}

View file

@ -1026,4 +1026,138 @@ func TestRender_FilePreview(t *testing.T) {
localMetas,
)
})
commitFileURL := util.URLJoin(markup.TestRepoURL, "src", "commit", "c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be", "path", "to", "file.md")
t.Run("rendered file with ?display=source", func(t *testing.T) {
testRender(
commitFileURL+"?display=source"+"#L1-L2",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/src/commit/c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be/path/to/file.md?display=source#L1-L2" class="muted" rel="nofollow">path/to/file.md</a>`+
`</div>`+
`<span class="text small grey">`+
`Lines 1 to 2 in <a href="http://localhost:3000/gogits/gogs/src/commit/c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be" class="text black" rel="nofollow">c991312</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="1"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="gh"># A`+"\n"+`</span></code></td>`+
`</tr>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="2"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="gh"></span>B`+"\n"+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
localMetas,
)
})
t.Run("rendered file without ?display=source", func(t *testing.T) {
testRender(
commitFileURL+"#L1-L2",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/src/commit/c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be/path/to/file.md?display=source#L1-L2" class="muted" rel="nofollow">path/to/file.md</a>`+
`</div>`+
`<span class="text small grey">`+
`Lines 1 to 2 in <a href="http://localhost:3000/gogits/gogs/src/commit/c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be" class="text black" rel="nofollow">c991312</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="1"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="gh"># A`+"\n"+`</span></code></td>`+
`</tr>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="2"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="gh"></span>B`+"\n"+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
localMetas,
)
})
commitFileURL = util.URLJoin(markup.TestRepoURL, "src", "commit", "190d9492934af498c3f669d6a2431dc5459e5b20", "path", "to", "file.go")
t.Run("normal file with ?display=source", func(t *testing.T) {
testRender(
commitFileURL+"?display=source"+"#L2-L3",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20/path/to/file.go?display=source#L2-L3" class="muted" rel="nofollow">path/to/file.go</a>`+
`</div>`+
`<span class="text small grey">`+
`Lines 2 to 3 in <a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20" class="text black" rel="nofollow">190d949</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="2"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="nx">B</span>`+"\n"+`</code></td>`+
`</tr>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="3"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner"><span class="nx">C</span>`+"\n"+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
localMetas,
)
})
commitFileURL = util.URLJoin(markup.TestRepoURL, "src", "commit", "eeb243c3395e1921c5d90e73bd739827251fc99d", "path", "to", "file%20%23.txt")
t.Run("file with strange characters in name", func(t *testing.T) {
testRender(
commitFileURL+"#L1",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/src/commit/eeb243c3395e1921c5d90e73bd739827251fc99d/path/to/file%20%23.txt#L1" class="muted" rel="nofollow">path/to/file #.txt</a>`+
`</div>`+
`<span class="text small grey">`+
`Line 1 in <a href="http://localhost:3000/gogits/gogs/src/commit/eeb243c3395e1921c5d90e73bd739827251fc99d" class="text black" rel="nofollow">eeb243c</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="1"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner">A`+"\n"+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
localMetas,
)
})
}

View file

@ -67,14 +67,18 @@ type Header struct {
// RenderContext represents a render context
type RenderContext struct {
Ctx context.Context
RelativePath string // relative path from tree root of the branch
Type string
IsWiki bool
Links Links
Metas map[string]string
DefaultLink string
GitRepo *git.Repository
Ctx context.Context
RelativePath string // relative path from tree root of the branch
Type string
IsWiki bool
Links Links
Metas map[string]string
DefaultLink string
GitRepo *git.Repository
// reporting the target blob that is to-be-rendered enables
// deeper inspection in the handler for external renderer
// (i.e., more targeted handling of annexed files)
Blob *git.Blob
ShaExistCache map[string]bool
cancelFn func()
SidebarTocNode ast.Node

View file

@ -0,0 +1 @@
x•ŽANÃ0EYû³GB;a U=D9€=þ&–ÚÙÓr} 7èê­ÞÓÓëåÒŒBœ^¬´¤˜yY8Ï:AІ X}<7D>R×XkÎs­"î;uìFº®9x” Œ ÊEdÐ’%Í~**Zß3\ºÙvíô9Й>nÿ8Žfxkû=<3D>[9K”%L>®ôêÙ{§<>7Ãs;aÕvý4ÛhXOûH·Ô“þÕ†ûð`KÑ

View file

@ -0,0 +1 @@
x•ŽKŠ1@]çµ$¿J¥aæz€JRÁ@w+éØsýõ®ÞâñàåÛ²´ÖÛÃè"@VL&J3%f-ÑGDÒq2>FçjBOEݹË:ÀgÃ\1¤œ¦ê¦kÀêªEM6DÔ,Ÿ\‚âǸÞ:\6é¾OülmÈ©­;Ï­|ƒ!GäŒE£6Z«üzòY¥Î² ¨m¸üÂÿi.x-o³ò"›úŒLÌ

View file

@ -1 +1 @@
4c1aaf56bcb9f39dcf65f3f250726850aed13cd6
eeb243c3395e1921c5d90e73bd739827251fc99d

View file

@ -40,6 +40,7 @@ type ServCommandResults struct {
UserName string
UserEmail string
UserID int64
UserMode perm.AccessMode
OwnerName string
RepoName string
RepoID int64

View file

@ -47,7 +47,7 @@ func AesDecrypt(key, text []byte) ([]byte, error) {
cfb.XORKeyStream(text, text)
data, err := base64.StdEncoding.DecodeString(string(text))
if err != nil {
return nil, fmt.Errorf("AesDecrypt invalid decrypted base64 string: %w", err)
return nil, fmt.Errorf("AesDecrypt invalid decrypted base64 string: %w - it can be caused by a change of the [security].SECRET_KEY setting or a database corruption - `forgejo doctor check --run check-db-consistency --fix` will get rid of orphaned rows found in the `two_factor` table and may fix this problem if they are the one with the invalid content", err)
}
return data, nil
}

25
modules/setting/annex.go Normal file
View file

@ -0,0 +1,25 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package setting
import (
"code.gitea.io/gitea/modules/log"
)
// Annex represents the configuration for git-annex
var Annex = struct {
Enabled bool `ini:"ENABLED"`
DisableP2PHTTP bool `ini:"DISABLE_P2PHTTP"`
}{}
func loadAnnexFrom(rootCfg ConfigProvider) {
sec := rootCfg.Section("annex")
if err := sec.MapTo(&Annex); err != nil {
log.Fatal("Failed to map Annex settings: %v", err)
}
if !sec.HasKey("DISABLE_P2PHTTP") {
// If DisableP2PHTTP is not explicitly set then use DisableHTTPGit as its default
Annex.DisableP2PHTTP = Repository.DisableHTTPGit
}
}

View file

@ -138,6 +138,11 @@ func CompileEmailGlobList(sec ConfigSection, keys ...string) (globs []glob.Glob)
return globs
}
// LoadServiceSetting loads the service settings
func LoadServiceSetting() {
loadServiceFrom(CfgProvider)
}
func loadServiceFrom(rootCfg ConfigProvider) {
sec := rootCfg.Section("service")
Service.ActiveCodeLives = sec.Key("ACTIVE_CODE_LIVE_MINUTES").MustInt(180)

View file

@ -153,6 +153,7 @@ func loadCommonSettingsFrom(cfg ConfigProvider) error {
loadCamoFrom(cfg)
loadI18nFrom(cfg)
loadGitFrom(cfg)
loadAnnexFrom(cfg)
loadMirrorFrom(cfg)
loadMarkupFrom(cfg)
loadQuotaFrom(cfg)

View file

@ -4,7 +4,9 @@
package util
import (
"io/fs"
"os"
"path/filepath"
"runtime"
"syscall"
"time"
@ -41,10 +43,48 @@ func Remove(name string) error {
return err
}
// RemoveAll removes the named file or (empty) directory with at most 5 attempts.
// MakeWritable recursively makes the named directory writable.
func MakeWritable(name string) error {
return filepath.WalkDir(name, func(path string, d fs.DirEntry, err error) error {
// NB: this is called WalkDir but it works on a single file too
if err == nil {
info, err := d.Info()
if err != nil {
return err
}
// Don't try chmod'ing symlinks (will fail with broken symlinks)
if info.Mode()&os.ModeSymlink != os.ModeSymlink {
// 0200 == u+w, in octal unix permission notation
err = os.Chmod(path, info.Mode()|0o200)
if err != nil {
return err
}
}
}
return nil
})
}
// RemoveAll removes the named file or directory with at most 5 attempts.
func RemoveAll(name string) error {
var err error
for i := 0; i < 5; i++ {
// Do chmod -R +w to help ensure the removal succeeds.
// In particular, in the git-annex case, this handles
// https://git-annex.branchable.com/internals/lockdown/ :
//
// > (The only bad consequence of this is that rm -rf .git
// > doesn't work unless you first run chmod -R +w .git)
err = MakeWritable(name)
if err != nil {
// try again
<-time.After(100 * time.Millisecond)
continue
}
err = os.RemoveAll(name)
if err == nil {
break

View file

@ -4,7 +4,7 @@ dashboard=Přehled
explore=Procházet
help=Nápověda
logo=Logo
sign_in=Přihlášení
sign_in=Přihlásit se
sign_in_with_provider = Přihlásit se přes %s
sign_in_or=nebo
sign_out=Odhlásit se
@ -517,8 +517,8 @@ issue_assigned.issue=@%[1]s vás přiřadil/a k problému %[2]s v repozitáři %
issue.x_mentioned_you=<b>@%s</b> vás zmínil/a:
issue.action.force_push=<b>%[1]s</b> vynutil/a nahrání <b>%[2]s</b> z %[3]s do %[4]s.
issue.action.push_1=<b>@%[1]s</b> nahrál/a %[3]d commit do %[2]s
issue.action.push_n=<b>@%[1]s</b> nahrál/a %[3]d commity do %[2]s
issue.action.push_1=Uživatel <b>@%[1]s</b> nahrál %[3]d revizi do %[2]s
issue.action.push_n=Uživatel <b>@%[1]s</b> nahrál %[3]d revizí do %[2]s
issue.action.close=<b>@%[1]s</b> uzavřel/a #%[2]d.
issue.action.reopen=<b>@%[1]s</b> znovu otevřel/a #%[2]d.
issue.action.merge=<b>@%[1]s</b> sloučil/a #%[2]d do %[3]s.
@ -590,9 +590,9 @@ AuthName=Název ověření
AdminEmail=E-mailová adresa správce
NewBranchName=Název nové větve
CommitSummary=Shrnutí commity
CommitMessage=Zpráva commitu
CommitChoice=Výběr commitu
CommitSummary=Shrnutí revize
CommitMessage=Zpráva revize
CommitChoice=Výběr revize
TreeName=Cesta k souboru
Content=Obsah
@ -681,6 +681,8 @@ To = Název větve
Biography = Životopis
AccessToken = Přístupový token
email_domain_is_not_allowed = Doména uživatelské e-mailové adresy <b>%s</b> je v rozporu se seznamem EMAIL_DOMAIN_ALLOWLIST nebo EMAIL_DOMAIN_BLOCKLIST. Ujistěte se, že je vaše adresa správně nastavena.
[user]
change_avatar=Změnit váš avatar…
joined_on=Přidal/a se %s
@ -767,7 +769,7 @@ language=Jazyk
ui=Motiv vzhledu
hidden_comment_types=Skryté typy komentářů
hidden_comment_types_description=Zde zkontrolované typy komentářů nebudou zobrazeny na stránkách problémů. Zaškrtnutí „Štítek“ například odstraní všechny komentáře „<user> přidal/odstranil <label>“.
hidden_comment_types.ref_tooltip=Komentáře, kde byl tento problém odkázán u jiného problému/commitu/…
hidden_comment_types.ref_tooltip=Komentáře, kde byl tento problém odkázán z jiného problému/revize/…
hidden_comment_types.issue_ref_tooltip=Komentáře, kde uživatel změní větev/značku spojenou s problémem
comment_type_group_reference=Reference
comment_type_group_label=Štítek
@ -780,7 +782,7 @@ comment_type_group_deadline=Uzávěrka
comment_type_group_dependency=Závislost
comment_type_group_lock=Stav zámku
comment_type_group_review_request=Žádost o posouzení
comment_type_group_pull_request_push=Přidané commity
comment_type_group_pull_request_push=Přidané revize
comment_type_group_project=Projekt
comment_type_group_issue_ref=Referenční číslo problému
saved_successfully=Vaše nastavení bylo úspěšně uloženo.
@ -822,7 +824,7 @@ activations_pending=Čekající aktivace
can_not_add_email_activations_pending=Existuje čekající aktivace, zkuste to znovu za pár minut, pokud chcete přidat nový e-mail.
delete_email=Smazat
email_deletion=Odstranit e-mailovou adresu
email_deletion_desc=E-mailová adresa a přidružené informace budou z vašeho účtu odstraněny. Commity Gitu s touto e-mailovou adresou zůstanou nezměněny. Pokračovat?
email_deletion_desc=E-mailová adresa a přidružené informace budou z vašeho účtu odstraněny. Revize Gitu s touto e-mailovou adresou zůstanou nezměněny. Pokračovat?
email_deletion_success=E-mailová adresa byla odstraněna.
theme_update_success=Váš motiv vzhledu byl aktualizován.
theme_update_error=Vybraný motiv vzhledu neexistuje.
@ -838,16 +840,16 @@ add_email_success=Nová e-mailová adresa byla přidána.
email_preference_set_success=Nastavení e-mailu bylo úspěšně nastaveno.
add_openid_success=Nová OpenID adresa byla přidána.
keep_email_private=Skrýt e-mailovou adresu
keep_email_private_popup=Vaše e-mailová adresa nebude zobrazena na vašem profilu a nebude výchozí adresou pro commity provedené skrze webové rozhraní, jako nahrávání, úpravy a sloučení. Namísto toho lze použít speciální adresu %s pro propojení commitů s vaším účtem. Tato možnost neovlivní existující commity.
keep_email_private_popup=Vaše e-mailová adresa nebude zobrazena na vašem profilu a nebude výchozí adresou pro revize provedené skrze webové rozhraní, jako nahrávání, úpravy a slučování. Namísto toho lze použít speciální adresu %s pro propojení revizí s vaším účtem. Tato možnost neovlivní existující revize.
openid_desc=OpenID vám umožní delegovat ověřování na externího poskytovatele.
manage_ssh_keys=Správa klíčů SSH
manage_ssh_principals=Spravovat SSH Principal certifikáty
manage_gpg_keys=Správa klíčů GPG
add_key=Přidat klíč
ssh_desc=Tyto veřejné klíče SSH jsou propojeny s vaším účtem. Odpovídající soukromé klíče umožní plný přístup k vašim repozitářům. Klíče SSH, které byly ověřeny, mohou být použity pro ověření Git commitů podepsaných přes SSH.
ssh_desc=Tyto veřejné klíče SSH jsou propojeny s vaším účtem. Odpovídající soukromé klíče umožní plný přístup k vašim repozitářům. Klíče SSH, které byly ověřeny, mohou být použity pro ověření Git revizí podepsaných přes SSH.
principal_desc=Tyto SSH Principal certifikáty jsou přidruženy k vašemu účtu a umožňují plný přístup do vašich repozitářů.
gpg_desc=Tyto veřejné klíče GPG jsou propojeny s vaším účtem a používají se k ověření vašich commitů. Uložte je na bezpečné místo, jelikož umožňují podepsat commity vaší identitou.
gpg_desc=Tyto veřejné klíče GPG jsou propojeny s vaším účtem a používají se k ověření vašich revizí. Uložte je na bezpečné místo, jelikož umožňují podepsat revize vaší identitou.
ssh_helper=<strong>Potřebujete pomoct?</strong> Podívejte se do příručky, jak <a href="%s">vytvořit vlastní klíče SSH</a> nebo vyřešte <a href="%s">běžné problémy</a>, se kterými se můžete potkat při použití SSH.
gpg_helper=<strong>Potřebujete pomoct?</strong> Podívejte se do příručky <a href="%s">o GPG</a>.
add_new_key=Přidat klíč SSH
@ -861,9 +863,9 @@ ssh_principal_been_used=Tento SSH Principal certifikát již byl přidán na ser
gpg_key_id_used=Veřejný GPG klíč se stejným ID již existuje.
gpg_no_key_email_found=Tento GPG klíč neodpovídá žádné aktivované e-mailové adrese spojené s vaším účtem. Může být stále přidán, pokud podepíšete zadaný token.
gpg_key_matched_identities=Odpovídající identity:
gpg_key_matched_identities_long=Vložené identity v tomto klíči odpovídají následujícím aktivovaným e-mailovým adresám tohoto uživatele. Commity odpovídající těmto e-mailovým adresám lze ověřit pomocí tohoto klíče.
gpg_key_matched_identities_long=Vložené identity v tomto klíči odpovídají následujícím aktivovaným e-mailovým adresám tohoto uživatele. Revize odpovídající těmto e-mailovým adresám lze ověřit pomocí tohoto klíče.
gpg_key_verified=Ověřený klíč
gpg_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření commitů shodujících se s libovolnou aktivovanou e-mailovou adresou pro tohoto uživatele navíc k jakékoli odpovídající identitě tohoto klíče.
gpg_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření revizí shodujících se s libovolnou aktivovanou e-mailovou adresou pro tohoto uživatele navíc k jakékoli odpovídající identitě tohoto klíče.
gpg_key_verify=Ověřit
gpg_invalid_token_signature=Zadaný GPG klíč, podpis a token se neshodují nebo je token zastaralý.
gpg_token_required=Musíte zadat podpis pro níže uvedený token
@ -874,7 +876,7 @@ gpg_token_signature=Zakódovaný podpis GPG
key_signature_gpg_placeholder=Začíná textem „-----BEGIN PGP SIGNATURE-----“
verify_gpg_key_success=GPG klíč „%s“ byl ověřen.
ssh_key_verified=Ověřený klíč
ssh_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření commitů shodujících se s libovolnou vaší aktivovanou e-mailovou adresou pro tohoto uživatele.
ssh_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření revizí shodujících se s libovolnou vaší aktivovanou e-mailovou adresou pro tohoto uživatele.
ssh_key_verify=Ověřit
ssh_invalid_token_signature=Zadaný SSH klíč, podpis nebo token se neshodují nebo je token zastaralý.
ssh_token_required=Musíte zadat podpis pro níže uvedený token
@ -896,7 +898,7 @@ ssh_key_deletion=Odebrat klíč SSH
gpg_key_deletion=Odebrat klíč GPG
ssh_principal_deletion=Odstranit SSH Principal certifikát
ssh_key_deletion_desc=Odstranění SSH klíče zruší jeho přístup k vašemu účtu. Pokračovat?
gpg_key_deletion_desc=Odstraněním klíče GPG zneplatníte ověření commitů, které jsou jím podepsány. Pokračovat?
gpg_key_deletion_desc=Odstraněním klíče GPG zneplatníte ověření revizí, které jsou jím podepsány. Pokračovat?
ssh_principal_deletion_desc=Odstranění SSH Principal certifikátu zruší jeho přístup k vašemu účtu. Pokračovat?
ssh_key_deletion_success=SSH klíč byl odstraněn.
gpg_key_deletion_success=GPG klíč byl odstraněn.
@ -914,7 +916,7 @@ principal_state_desc=Tento SSH Principal certifikát byl použit během posledn
show_openid=Zobrazit na profilu
hide_openid=Odstranit z profilu
ssh_disabled=SSH je zakázáno
ssh_signonly=SSH je v současné době zakázáno, proto jsou tyto klíče použity pouze pro ověření podpisu.
ssh_signonly=SSH je v současné době zakázáno, proto jsou tyto klíče použity pouze pro ověření podpisu revizí.
ssh_externally_managed=Tento SSH klíč je spravován externě pro tohoto uživatele
manage_social=Správa propojených účtů sociálních sítí
social_desc=Tyto účty sociálních sítí lze použít k přihlášení k vašemu účtu. Ujistěte se, že jsou všechny vaše.
@ -966,7 +968,7 @@ oauth2_client_secret_hint=Tajný klíč se znovu nezobrazí po opuštění nebo
oauth2_application_edit=Upravit
oauth2_application_create_description=Aplikace OAuth2 poskytují přístup vašim aplikacím třetích stran k uživatelským účtům na této instanci.
oauth2_application_remove_description=Odebráním OAuth2 aplikace zabrání přístupu ověřeným uživatelům na této instanci. Pokračovat?
oauth2_application_locked=Gitea předregistruje některé OAuth2 aplikace při spuštění, pokud je to povoleno v konfiguraci. Aby se zabránilo neočekávanému chování, nelze je upravovat ani odstranit. Více informací naleznete v dokumentaci OAuth2.
oauth2_application_locked=Forgejo předem zaregistruje některé OAuth2 aplikace při spuštění, pokud je to povoleno v konfiguraci. Aby se zabránilo neočekávanému chování, nelze je upravovat ani odstranit. Více informací naleznete v dokumentaci OAuth2.
authorized_oauth2_applications=Autorizované aplikace OAuth2
authorized_oauth2_applications_description=Těmto aplikacím třetích stran jste udělili přístup ke svému osobnímu účtu Forgejo. Zrušte prosím přístup aplikacím, které již nejsou používány.
@ -1113,12 +1115,12 @@ trust_model_helper_default=Výchozí: Použít výchozí model důvěry pro tuto
create_repo=Vytvořit repozitář
default_branch=Výchozí větev
default_branch_label=výchozí
default_branch_helper=Výchozí větev je základní větev pro žádosti o sloučení a commity kódu.
default_branch_helper=Výchozí větev je základní větev pro žádosti o sloučení a revize kódu.
mirror_prune=Vyčistit
mirror_prune_desc=Odstranit zastaralé reference na vzdálené sledování
mirror_interval=Interval zrcadlení (platné časové jednotky jsou „h“, „m“ a „s“). Nastavením na 0 zakážete periodickou synchronizaci. (Minimální interval: %s)
mirror_interval_invalid=Interval zrcadlení není platný.
mirror_sync_on_commit=Synchronizovat při nahrávání commitů
mirror_sync_on_commit=Synchronizovat při nahrávání revizí
mirror_address=Klonovat z URL
mirror_address_desc=Zadejte požadované přístupové údaje do sekce Ověření.
mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny části musíte správně nahradit escape sekvencí.
@ -1151,7 +1153,7 @@ blame_prior=Zobrazit blame před touto změnou
blame.ignore_revs.failed=Nepodařilo se ignorovat revize v <a href="%s">.git-blame-ignore-revs</a>.
author_search_tooltip=Zobrazí maximálně 30 uživatelů
tree_path_not_found_commit=Cesta %[1]s v commitu %[2]s neexistuje
tree_path_not_found_commit=Cesta %[1]s v revizi %[2]s neexistuje
tree_path_not_found_branch=Cesta %[1]s ve větvi %[2]s neexistuje
tree_path_not_found_tag=Cesta %[1]s ve značce %[2]s neexistuje
@ -1267,7 +1269,7 @@ empty_message=Tento repozitář nemá žádný obsah.
broken_message=Data gitu, která jsou základem tohoto repozitáře, nelze číst. Kontaktujte správce této instance nebo smažte tento repositář.
code=Zdrojový kód
code.desc=Přístup ke zdrojovým kódům, souborům, commitům a větvím.
code.desc=Přístup ke zdrojovým kódům, souborům, revizím a větvím.
branch=Větev
tree=Strom
clear_ref=Vymazat aktuální referenci
@ -1285,8 +1287,8 @@ org_labels_desc=Štítky na úrovni organizace, které mohou být použity se <s
org_labels_desc_manage=spravovat
milestones=Milníky
commits=Commity
commit=Commit
commits=Revize
commit=Revize
release=Vydání
releases=Vydání
tag=Značka
@ -1315,18 +1317,19 @@ view_git_blame=Zobrazit git blame
video_not_supported_in_browser=Váš prohlížeč nepodporuje značku HTML5 „video“.
audio_not_supported_in_browser=Váš prohlížeč nepodporuje značku HTML5 „audio“.
stored_lfs=Uloženo pomocí Git LFS
stored_annex=Uloženo pomocí Git Annex
symbolic_link=Symbolický odkaz
executable_file=Spustitelný soubor
vendored = Vendorováno
generated = Generováno
commit_graph=Graf commitů
commit_graph=Graf revizí
commit_graph.select=Vybrat větve
commit_graph.hide_pr_refs=Skrýt žádosti o sloučení
commit_graph.monochrome=Černobílé
commit_graph.color=Barva
commit.contained_in=Tento commit je obsažen v:
commit.contained_in_default_branch=Tento commit je součástí výchozí větve
commit.load_referencing_branches_and_tags=Načíst větve a značky odkazující na tento commit
commit.contained_in=Tato revize je obsažena v:
commit.contained_in_default_branch=Tato revize je součástí výchozí větve
commit.load_referencing_branches_and_tags=Načíst větve a značky odkazující na tuto revizi
blame=Blame
download_file=Stáhnout soubor
normal_view=Normální zobrazení
@ -1340,6 +1343,7 @@ editor.upload_file=Nahrát soubor
editor.edit_file=Upravit soubor
editor.preview_changes=Náhled změn
editor.cannot_edit_lfs_files=LFS soubory nemohou být upravovány přes webové rozhraní.
editor.cannot_edit_annex_files=Annex soubory nemohou být upravovány přes webové rozhraní.
editor.cannot_edit_non_text_files=Binární soubory nemohou být upravovány přes webové rozhraní.
editor.edit_this_file=Upravit soubor
editor.this_file_locked=Soubor je uzamčen
@ -1363,12 +1367,12 @@ editor.patching=Záplatování:
editor.fail_to_apply_patch=Nelze použít záplatu „%s“
editor.new_patch=Nová záplata
editor.commit_message_desc=Přidat volitelný rozšířený popis…
editor.signoff_desc=Přidat Signed-off-by podpis přispěvatele na konec zprávy o commitu.
editor.signoff_desc=Přidat podpis přispěvatele „Signed-off-by“ na konec zprávy revize.
editor.commit_directly_to_this_branch=Odeslat přímo do větve <strong class="%[2]s">%[1]s</strong>.
editor.create_new_branch=Vytvořit <strong>novou větev</strong> pro tento commit a vytvořit žádost o sloučení.
editor.create_new_branch_np=Vytvořte <strong>novou větev</strong> z tohoto commitu.
editor.create_new_branch=Vytvořit <strong>novou větev</strong> pro tuto revizi a vytvořit žádost o sloučení.
editor.create_new_branch_np=Vytvořit <strong>novou větev</strong> z této revize.
editor.propose_file_change=Navrhnout změnu souboru
editor.new_branch_name=Pojmenujte novou větev pro tento commit
editor.new_branch_name=Pojmenujte novou větev pro tuto revizi
editor.new_branch_name_desc=Název nové větve…
editor.cancel=Zrušit
editor.filename_cannot_be_empty=Jméno nemůže být prázdné.
@ -1380,7 +1384,7 @@ editor.file_is_a_symlink=`„%s“ je symbolický odkaz. Symbolické odkazy nemo
editor.filename_is_a_directory=Jméno souboru „%s“ je již použito jako jméno adresáře v tomto repozitáři.
editor.file_editing_no_longer_exists=Upravovaný soubor „%s“ již není součástí tohoto repozitáře.
editor.file_deleting_no_longer_exists=Odstraňovaný soubor „%s“ již není součástí tohoto repozitáře.
editor.file_changed_while_editing=Obsah souboru se od zahájení úprav změnil. <a target="_blank" rel="noopener noreferrer" href="%s">Klikněte sem</a> pro jejich zobrazení nebo <strong>proveďte commit změn ještě jednou</strong> pro jejich přepsání.
editor.file_changed_while_editing=Obsah souboru se od zahájení úprav změnil. <a target="_blank" rel="noopener noreferrer" href="%s">Klikněte sem</a> pro jeho zobrazení nebo <strong>odešlete změny ještě jednou</strong> pro jeho přepsání.
editor.file_already_exists=Soubor „%s“ již existuje v tomto repozitáři.
editor.commit_empty_file_header=Odeslat prázdný soubor
editor.commit_empty_file_text=Soubor, který se chystáte odeslat, je prázdný. Pokračovat?
@ -1394,16 +1398,16 @@ editor.add_subdir=Přidat adresář…
editor.unable_to_upload_files=Nepodařilo se nahrát soubory do „%s“. Chyba: %v
editor.upload_file_is_locked=Soubor „%s“ je uzamčen uživatelem %s.
editor.upload_files_to_dir=Nahrány soubory do „%s“
editor.cannot_commit_to_protected_branch=Nelze vytvořit commit v chráněné větvi „%s“.
editor.cannot_commit_to_protected_branch=Nelze vytvořit revizi v chráněné větvi „%s“.
editor.no_commit_to_branch=Nepodařilo se odeslat přímo do větve:
editor.user_no_push_to_branch=Uživatel nemůže nahrávat do větve
editor.require_signed_commit=Větev vyžaduje podepsaný commit
editor.require_signed_commit=Větev vyžaduje podepsanou revizi
editor.cherry_pick=Cherry-pick %s na:
editor.revert=Vrátit %s na:
commits.desc=Procházet historii změn zdrojového kódu.
commits.commits=Commity
commits.no_commits=Žádné společné commity. „%s“ a „%s“ mají zcela odlišnou historii.
commits.commits=Revize
commits.no_commits=Žádné společné revize. „%s“ a „%s“ mají zcela odlišnou historii.
commits.nothing_to_compare=Tyto větve jsou stejné.
commits.search=Hledání commitů…
commits.search.tooltip=Můžete předřadit klíčová slova s „author:“, „committer:“, „after:“ nebo „before:“, např. „revert author:Alice before:2019-01-03“.
@ -1416,21 +1420,21 @@ commits.older=Starší
commits.newer=Novější
commits.signed_by=Podepsáno
commits.signed_by_untrusted_user=Podepsáno nedůvěryhodným uživatelem
commits.signed_by_untrusted_user_unmatched=Podepsáno nedůvěryhodným uživatelem, který nesouhlasí s přispěvatelem
commits.signed_by_untrusted_user_unmatched=Podepsáno nedůvěryhodným uživatelem, který neodpovídá přispěvateli
commits.gpg_key_id=ID klíče GPG
commits.ssh_key_fingerprint=Otisk klíče SSH
commits.view_path=Zobrazit v tomto bodě v historii
commits.view_path=Zobrazit tento bod v historii
commit.operations=Operace
commit.revert=Vrátit
commit.revert-header=Vrátit: %s
commit.revert-content=Vyberte větev pro návrat na:
commit.revert-content=Vyberte větev pro návrat:
commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Vyberte větev pro Cherry-pick na:
commit.cherry-pick-content=Vyberte větev pro Cherry-pick:
commitstatus.error=Chyba
commitstatus.failure=Chyba
commitstatus.failure=Selhání
commitstatus.pending=Čekající
commitstatus.success=Úspěch
@ -1613,15 +1617,15 @@ issues.context.edit=Upravit
issues.context.delete=Smazat
issues.no_content=K dispozici není žádný popis.
issues.close=Zavřít problém
issues.comment_pull_merged_at=sloučený commit %[1]s do %[2]s %[3]s
issues.comment_manually_pull_merged_at=ručně sloučený commit %[1]s do %[2]s %[3]s
issues.comment_pull_merged_at=sloučena revize %[1]s do %[2]s %[3]s
issues.comment_manually_pull_merged_at=ručně sloučena revize %[1]s do %[2]s %[3]s
issues.close_comment_issue=Zavřít s komentářem
issues.reopen_issue=Znovu otevřít
issues.reopen_comment_issue=Znovu otevřít s komentářem
issues.create_comment=Okomentovat
issues.closed_at=`uzavřel/a tento problém <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`znovu otevřel/a tento problém <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`odkázal/a na tento problém z commitu <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`odkázal/a na tento problém z revize <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_issue_from=`<a href="%[3]s">odkázal/a na tento problém %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_pull_from=`<a href="%[3]s">odkázal/a na tuto žádost o sloučení %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closing_from=`<a href="%[3]s">odkazoval/a na tento problém ze žádosti o sloučení %[4]s, která jej uzavře</a>, <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@ -1727,8 +1731,8 @@ issues.due_date=Termín dokončení
issues.invalid_due_date_format=Termín dokončení musí být ve formátu „rrrr-mm-dd“.
issues.error_modifying_due_date=Změna termínu dokončení selhala.
issues.error_removing_due_date=Odstranění termínu dokončení selhalo.
issues.push_commit_1=přidal/a %d commit %s
issues.push_commits_n=přidal/a %d commity %s
issues.push_commit_1=přidal/a %d revizi %s
issues.push_commits_n=přidal/a %d revize %s
issues.force_push_codes=`vynucené nahrání %[1]s od <a class="%[7]s" href="%[3]s"><code>%[2]s</code></a> do <a class="%[7]s" href="%[5]s"><code>%[4]s</code></a> %[6]s`
issues.force_push_compare=Porovnat
issues.due_date_form=rrrr-mm-dd
@ -1833,13 +1837,13 @@ pulls.switch_comparison_type=Přepnout typ porovnání
pulls.switch_head_and_base=Prohodit hlavní a základní větev
pulls.filter_branch=Filtrovat větev
pulls.no_results=Nebyly nalezeny žádné výsledky.
pulls.show_all_commits=Zobrazit všechny commity
pulls.show_all_commits=Zobrazit všechny revize
pulls.show_changes_since_your_last_review=Zobrazit změny od vašeho posledního posouzení
pulls.showing_only_single_commit=Zobrazuji pouze změny commitu %[1]s
pulls.showing_only_single_commit=Zobrazuji pouze změny revize %[1]s
pulls.showing_specified_commit_range=Zobrazují se pouze změny mezi %[1]s..%[2]s
pulls.select_commit_hold_shift_for_range=Vyberte commit. Podržte klávesu shift + klepněte pro výběr rozsahu
pulls.select_commit_hold_shift_for_range=Vyberte revizi. Podržte klávesu Shift a klikněte pro výběr rozsahu
pulls.review_only_possible_for_full_diff=Posouzení je možné pouze při zobrazení plného rozlišení
pulls.filter_changes_by_commit=Filtrovat podle commitu
pulls.filter_changes_by_commit=Filtrovat podle revize
pulls.nothing_to_compare=Tyto větve jsou stejné. Není třeba vytvářet žádost o sloučení.
pulls.nothing_to_compare_have_tag = Vybraná větev a značka jsou shodné.
pulls.nothing_to_compare_and_allow_empty_pr=Tyto větve jsou stejné. Tato žádost o sloučení bude prázdná.
@ -1849,7 +1853,7 @@ pulls.title_desc_few=chce sloučit %[1]d commity z větve <code>%[2]s</code> do
pulls.merged_title_desc_few=sloučil %[1]d commity z větve <code>%[2]s</code> do větve <code>%[3]s</code> před %[4]s
pulls.change_target_branch_at=`změnil/a cílovou větev z <b>%s</b> na <b>%s</b> %s`
pulls.tab_conversation=Konverzace
pulls.tab_commits=Commity
pulls.tab_commits=Revize
pulls.tab_files=Změněné soubory
pulls.reopen_to_merge=Otevřete znovu tuto žádost pro provedení sloučení.
pulls.cant_reopen_deleted_branch=Tuto žádost o sloučení nelze znovu otevřít, protože větev byla smazána.
@ -1868,7 +1872,7 @@ pulls.data_broken=Tato žádost o sloučení je rozbitá kvůli chybějícím in
pulls.files_conflicted=Tato žádost o sloučení obsahuje změny, které jsou v rozporu s cílovou větví.
pulls.is_checking=Právě probíhá kontrola konfliktů při sloučení. Zkuste to za chvíli.
pulls.is_ancestor=Tato větev je již součástí cílové větve. Není co sloučit.
pulls.is_empty=Změny na této větvi jsou již na cílové větvi. Toto bude prázdný commit.
pulls.is_empty=Změny na této větvi se již nacházejí na cílové větvi. Tato revize bude prázdná.
pulls.required_status_check_failed=Některé požadované kontroly nebyly úspěšné.
pulls.required_status_check_missing=Některé požadované kontroly chybí.
pulls.required_status_check_administrator=Jako administrátor stále můžete sloučit tuto žádost.
@ -1889,25 +1893,25 @@ pulls.reject_count_1=%d žádost o změnu
pulls.reject_count_n=%d žádostí o změnu
pulls.waiting_count_1=%d čekající posouzení
pulls.waiting_count_n=%d čekajících posouzení
pulls.wrong_commit_id=id commitu musí být id commitu v cílové větvi
pulls.wrong_commit_id=id revize musí být id revize v cílové větvi
pulls.no_merge_desc=Tato žádost nemůže být sloučena, protože všechny možnosti repozitáře na sloučení jsou zakázány.
pulls.no_merge_helper=Povolte možnosti sloučení v nastavení repozitáře nebo proveďte sloučení žádosti ručně.
pulls.no_merge_wip=Tato žádost nemůže být sloučena, protože je označena jako rozpracovaná.
pulls.no_merge_not_ready=Tento žádost není připravena na sloučení, zkontrolujte stav posouzení a kontroly stavu.
pulls.no_merge_access=Nemáte oprávnění sloučit tuto žádost.
pulls.merge_pull_request=Vytvořit slučovací commit
pulls.merge_pull_request=Vytvořit slučovací revizi
pulls.rebase_merge_pull_request=Rebase pak fast-forward
pulls.rebase_merge_commit_pull_request=Rebase a poté vytvořit slučovací commit
pulls.squash_merge_pull_request=Vytvořit squash commit
pulls.rebase_merge_commit_pull_request=Provést rebase a poté vytvořit slučovací revizi
pulls.squash_merge_pull_request=Vytvořit squash revizi
pulls.merge_manually=Sloučeno ručně
pulls.merge_commit_id=ID slučovacího commitu
pulls.require_signed_wont_sign=Větev vyžaduje podepsané commity, ale toto sloučení nebude podepsáno
pulls.merge_commit_id=ID slučovací revize
pulls.require_signed_wont_sign=Větev vyžaduje podepsané revize, ale toto sloučení nebude podepsáno
pulls.invalid_merge_option=Pro tuto žádost nemůžete použít tuto možnost sloučení.
pulls.merge_conflict=Sloučení selhalo: při slučování došlo ke konfliktu. Tip: zkuste jinou strategii
pulls.merge_conflict_summary=Chybové hlášení
pulls.rebase_conflict=Sloučení selhalo: došlo ke konfliktu při rebase commitu: %[1]s. Tip: zkuste jinou strategii
pulls.rebase_conflict=Sloučení selhalo: došlo ke konfliktu při provádění rebase revize %[1]s. Tip: zkuste jinou strategii
pulls.rebase_conflict_summary=Chybové hlášení
pulls.unrelated_histories=Sloučení selhalo: hlava a základ revize nesdílí společnou historii. Tip: zkuste jinou strategii
pulls.merge_out_of_date=Sloučení selhalo: základ byl aktualizován při generování sloučení. Tip: zkuste to znovu.
@ -1937,7 +1941,7 @@ pulls.reopened_at=`znovu otevřel/a tuto žádost o sloučení <a id="%[1]s" hre
pulls.cmd_instruction_hint=Zobrazit instrukce příkazové řádky
pulls.cmd_instruction_checkout_desc=Z vašeho repositáře projektu se podívejte na novou větev a vyzkoušejte změny.
pulls.cmd_instruction_merge_title=Sloučit
pulls.cmd_instruction_merge_desc=Slučte změny a aktualizujte je na Gitea.
pulls.cmd_instruction_merge_desc=Slučte změny a aktualizujte je na Forgeju.
pulls.clear_merge_message=Vymazat zprávu o sloučení
pulls.auto_merge_button_when_succeed=(Když kontroly uspějí)
@ -1959,7 +1963,7 @@ pulls.delete.text=Opravdu chcete odstranit tuto žádost o sloučení? (Tímto t
pull.deleted_branch=(odstraněno):%s
milestones.new=Nový milník
milestones.closed=Zavřen dne %s
milestones.closed=Uzavřeno %s
milestones.update_ago=Aktualizováno %s
milestones.no_due_date=Bez lhůty dokončení
milestones.open=Otevřít
@ -1988,15 +1992,15 @@ milestones.filter_sort.most_complete=Nejvíce dokončené
milestones.filter_sort.most_issues=Nejvíce problémů
milestones.filter_sort.least_issues=Nejméně problémů
signing.will_sign=Tento commit bude podepsána klíčem „%s“.
signing.wont_sign.error=Došlo k chybě při kontrole, zda může být commit podepsán.
signing.wont_sign.nokey=Tato instance nemá žádný klíč k podepsání tohoto commitu.
signing.wont_sign.never=Commity nejsou nikdy podepsány.
signing.wont_sign.always=Commity jsou vždy podepsány.
signing.wont_sign.pubkey=Commit nebude podepsán, protože nemáte veřejný klíč spojený s vaším účtem.
signing.wont_sign.twofa=Pro podepisování commitů musíte mít zapnuto dvoufázové ověření.
signing.wont_sign.parentsigned=Commit nebude podepsán, protože nadřazený commit není podepsán.
signing.wont_sign.basesigned=Sloučení nebude podepsáno, protože základní commit není podepsaný.
signing.will_sign=Tato revize bude podepsána klíčem „%s“.
signing.wont_sign.error=Došlo k chybě při kontrole, zda může být revize podepsána.
signing.wont_sign.nokey=Tato instance nemá žádný klíč k podepsání této revize.
signing.wont_sign.never=Revize nebudou nikdy podepsány.
signing.wont_sign.always=Revize budou vždy podepsány.
signing.wont_sign.pubkey=Reviz nebude podepsána, protože nemáte veřejný klíč spojený s vaším účtem.
signing.wont_sign.twofa=Pro podepisování revizí musíte mít zapnuto dvoufázové ověření.
signing.wont_sign.parentsigned=Revize nebude podepsána, protože nadřazená revize není podepsána.
signing.wont_sign.basesigned=Revize nebude podepsána, protože základní revize není podepsána.
signing.wont_sign.headsigned=Sloučení nebude podepsáno, protože hlavní revize není podepsána.
signing.wont_sign.commitssigned=Sloučení nebude podepsáno, protože všechny přidružené revize nejsou podepsány.
signing.wont_sign.approved=Sloučení nebude podepsáno, protože žádost o sloučení není schválena.
@ -2015,9 +2019,9 @@ wiki.filter_page=Filtr stránky
wiki.new_page=Stránka
wiki.page_title=Název stránky
wiki.page_content=Obsah stránky
wiki.default_commit_message=Napište poznámku k této aktualizaci stránky (nepovinný).
wiki.default_commit_message=Napište poznámku k této aktualizaci stránky (nepovinné).
wiki.save_page=Uložit stránku
wiki.last_commit_info=%s upravil tuto stránku %s
wiki.last_commit_info=Uživatel %s upravil tuto stránku %s
wiki.edit_page_button=Změnit stránku
wiki.new_page_button=Nová stránka
wiki.file_revision=Revize stránky
@ -2076,14 +2080,14 @@ activity.title.releases_1=%d vydání
activity.title.releases_n=%d vydání
activity.title.releases_published_by=%s publikoval %s
activity.published_release_label=Vydání
activity.no_git_activity=V tomto období nebyla žádná aktivita při odevzdání.
activity.no_git_activity=V tomto období nebyla žádná aktivita přispěvatelů.
activity.git_stats_exclude_merges=Při vyloučení slučování,
activity.git_stats_author_1=%d autor
activity.git_stats_author_n=%d autoři
activity.git_stats_pushed_1=nahrál
activity.git_stats_pushed_n=nahrály
activity.git_stats_commit_1=%d commit
activity.git_stats_commit_n=%d commity
activity.git_stats_commit_1=%d revize
activity.git_stats_commit_n=%d revizí
activity.git_stats_push_to_branch=do %s a
activity.git_stats_push_to_all_branches=do všech větví.
activity.git_stats_on_default_branch=Na %s,
@ -2099,7 +2103,7 @@ activity.git_stats_deletion_1=%d odebrání
activity.git_stats_deletion_n=%d odebrání
contributors.contribution_type.filter_label = Typ přispění:
contributors.contribution_type.commits=Commity
contributors.contribution_type.commits=Revize
search=Vyhledat
search.search_repo=Hledat repozitář
@ -2125,9 +2129,9 @@ settings.hooks=Webhooky
settings.githooks=Git hooky
settings.basic_settings=Základní nastavení
settings.mirror_settings=Nastavení zrcadel
settings.mirror_settings.docs=Nastavte repozitář pro automatickou synchronizaci commitů, značek a větví s jiným repozitářem.
settings.mirror_settings.docs.disabled_pull_mirror.instructions=Nastavte váš projekt pro automatické nahrávání commitů, značek a větví do jiného repozitáře. Správce webu zakázal zrcadla pro natažení.
settings.mirror_settings.docs.disabled_push_mirror.instructions=Nastavte svůj projekt pro automatické natažení commitů, značek a větví z jiného repozitáře.
settings.mirror_settings.docs=Nastavte repozitář pro automatickou synchronizaci revizí, značek a větví s jiným repozitářem.
settings.mirror_settings.docs.disabled_pull_mirror.instructions=Nastavte váš projekt pro automatické nahrávání revizí, značek a větví do jiného repozitáře. Správce webu zakázal nahrávání ze zrcadel.
settings.mirror_settings.docs.disabled_push_mirror.instructions=Nastavte svůj projekt pro automatické nahrávání revizí, značek a větví z jiného repozitáře.
settings.mirror_settings.docs.no_new_mirrors=Váš repozitář zrcadlí změny do nebo z jiného repozitáře. Mějte prosím na paměti, že v tuto chvíli nemůžete vytvořit žádná nová zrcadla.
settings.mirror_settings.docs.can_still_use=I když nemůžete upravit stávající zrcadla nebo vytvořit nová, stále můžete použít své stávající zrcadlo.
settings.mirror_settings.docs.more_information_if_disabled=Více informací o zrcadlech pro nahrání a natažení naleznete zde:
@ -2188,11 +2192,11 @@ settings.admin_settings=Administrátorská nastavení
settings.admin_enable_health_check=Povolit kontrolu stavu repozitáře (git fsck)
settings.admin_code_indexer=Indexování kódu
settings.admin_stats_indexer=Index statistiky kódu
settings.admin_indexer_commit_sha=Poslední indexovaný commit
settings.admin_indexer_commit_sha=Poslední indexovaná revize
settings.admin_indexer_unindexed=Neindexováno
settings.reindex_button=Přidat do fronty reindexace
settings.reindex_requested=Požadováno reindexování
settings.admin_enable_close_issues_via_commit_in_any_branch=Zavřít problém pomocí commitu v jiné než výchozí větvi
settings.admin_enable_close_issues_via_commit_in_any_branch=Zavřít problém pomocí revize provedené v jiné než výchozí větvi
settings.danger_zone=Nebezpečná zóna
settings.new_owner_has_same_repo=Nový vlastník již repozitář se stejným názvem má. Vyberte prosím jiné jméno.
settings.convert=Převést na běžný repozitář
@ -2229,11 +2233,11 @@ settings.trust_model.collaborator=Spolupracovník
settings.trust_model.collaborator.long=Spolupracovník: Důvěřovat podpisům spolupracovníků
settings.trust_model.collaborator.desc=Platné podpisy spolupracovníků tohoto repozitáře budou označeny jako „důvěryhodné“ - (ať se shodují s autorem, či nikoli). V opačném případě budou platné podpisy označeny jako „nedůvěryhodné“, pokud se podpis shoduje s přispěvatelem a „neodpovídající“, pokud ne.
settings.trust_model.committer=Přispěvatel
settings.trust_model.committer.long=Přispěvatel: Důvěřovat podpisům, které odpovídají autorům (což odpovídá GitHub a přinutí Giteu nastavit jako tvůrce pro Giteou podepsané revize)
settings.trust_model.committer.desc=Platné podpisy budou označeny jako „důvěryhodné“ pouze, pokud se shodují s přispěvatelem, v opačném případě budou označeny jako „neodpovídající“. To přinutí Forgejo, aby bylo přispěvatelem podepsaných commitů se skutečným přispěvatelem označeným jako Co-authored-by: a Co-committed-by: na konci commitu. Výchozí klíč Forgejo musí odpovídat uživateli v databázi.
settings.trust_model.committer.long=Přispěvatel: Důvěřovat podpisům, které odpovídají autorům (což odpovídá GitHubu a přinutí Forgejo nastavit se jako autora pro Forgejem podepsané revize)
settings.trust_model.committer.desc=Platné podpisy budou označeny jako „důvěryhodné“ pouze, pokud se shodují s přispěvatelem, v opačném případě budou označeny jako „neodpovídající“. To přinutí Forgejo, aby bylo přispěvatelem podepsaných revizí se skutečným přispěvatelem označeným jako Co-authored-by: a Co-committed-by: na konci revize. Výchozí klíč Forgejo musí odpovídat uživateli v databázi.
settings.trust_model.collaboratorcommitter=Spolupracovník+Přispěvatel
settings.trust_model.collaboratorcommitter.long=Spolupracovník+Přispěvatel: Důvěřovat podpisům od spolupracovníků, které odpovídají tvůrci revize
settings.trust_model.collaboratorcommitter.desc=Platné podpisy spolupracovníků tohoto repozitáře budou označeny jako „důvěryhodné“, pokud se shodují s přispěvatelem. V opačném případě budou platné podpisy označeny jako "nedůvěryhodné", pokud se podpis shoduje s přispěvatelem a „neodpovídajícím“ v opačném případě. To přinutí Giteu, aby byla označena jako přispěvatel podepsaných commitů se skutečným přispěvatelem označeným jako Co-Authored-By: a Co-Committed-By: na konci commitu. Výchozí klíč Forgejo musí odpovídat uživateli v databázi.
settings.trust_model.collaboratorcommitter.desc=Platné podpisy spolupracovníků tohoto repozitáře budou označeny jako „důvěryhodné“, pokud se shodují s přispěvatelem. V opačném případě budou platné podpisy označeny jako "nedůvěryhodné", pokud se podpis shoduje s přispěvatelem a „neodpovídajícím“ v opačném případě. To přinutí Forgejo, aby bylo označeno jako autor podepsaných revizí se skutečným přispěvatelem označeným jako Co-Authored-By: a Co-Committed-By: na konci revize. Výchozí klíč Forgejo musí odpovídat uživateli v databázi.
settings.wiki_delete=Odstranit data wiki
settings.wiki_delete_desc=Smazání Wiki dat repozitáře je trvalé a nemůže být vráceno zpět.
settings.wiki_delete_notices_1=- Natrvalo odstraní a zakáže wiki repozitáře pro %s.
@ -2412,14 +2416,14 @@ settings.protect_enable_push=Povolit nahrávání
settings.protect_enable_push_desc=Každý, kdo má přístup k zápisu, bude moci nahrávat do této větve (ale ne vynucená nahrávání).
settings.protect_enable_merge=Povolit sloučení
settings.protect_whitelist_committers=Povolit omezené nahrání
settings.protect_whitelist_committers_desc=Pouze povolení uživatelé budou moci nahrávat do této větve (ale ne vynucení nahrávání).
settings.protect_whitelist_committers_desc=Pouze povolení uživatelé budou moci nahrávat do této větve (ale ne vynutit nahrání).
settings.protect_whitelist_deploy_keys=Povolit nahrání klíčům pro nasazení s přístupem pro zápis.
settings.protect_whitelist_users=Povolení uživatelé pro nahrávání
settings.protect_whitelist_search_users=Hledat uživatele…
settings.protect_whitelist_teams=Povolené týmy pro nahrávání
settings.protect_whitelist_search_teams=Vyhledat týmy…
settings.protect_merge_whitelist_committers=Povolit whitelist pro slučování
settings.protect_merge_whitelist_committers_desc=Povolit pouze vyjmenovaným uživatelům nebo týmům slučovat požadavky na natažení do této větve.
settings.protect_merge_whitelist_committers_desc=Povolit slučování požadavků na sloučení do této větve pouze vyjmenovaným uživatelům nebo týmům.
settings.protect_merge_whitelist_users=Povolení uživatelé pro slučování
settings.protect_merge_whitelist_teams=Povolené týmy pro slučování
settings.protect_check_status_contexts=Povolit kontrolu stavu
@ -2437,8 +2441,8 @@ settings.protect_approvals_whitelist_users=Povolení posuzovatelé
settings.protect_approvals_whitelist_teams=Povolené týmy pro posuzování
settings.dismiss_stale_approvals=Odmítnout nekvalitní schválení
settings.dismiss_stale_approvals_desc=Pokud budou do větve nahrány nové revize, které mění obsah tohoto požadavku na natažení, všechna stará schválení budou zamítnuta.
settings.require_signed_commits=Vyžadovat podepsané commity
settings.require_signed_commits_desc=Odmítnout nahrání do této větve pokud nejsou podepsaná nebo jsou neověřitelná.
settings.require_signed_commits=Vyžadovat podepsané revize
settings.require_signed_commits_desc=Odmítnout nahrání do této větve, pokud nejsou podepsaná nebo jsou neověřitelná.
settings.protect_branch_name_pattern=Vzor jména chráněné větve
settings.protect_branch_name_pattern_desc=Vzory názvů chráněných větví. Pro vzorovou syntaxi viz <a href="%s">dokumentace</a>. Příklady: main, release/**
settings.protect_patterns=Vzory
@ -2459,7 +2463,7 @@ settings.block_on_official_review_requests=Blokovat sloučení při oficiální
settings.block_on_official_review_requests_desc=Slučování nebude možné, pokud mají oficiální požadavek na posouzení, i když mají k dispozici dostatek schválení.
settings.block_outdated_branch=Blokovat sloučení, pokud je požadavek na natažení zastaralý
settings.block_outdated_branch_desc=Slučování nebude možné, pokud je hlavní větev za základní větví.
settings.default_branch_desc=Vybrat výchozí větev repozitáře pro požadavky na natažení a revize kódu:
settings.default_branch_desc=Vybrat výchozí větev repozitáře pro žádosti o sloučení a příspěvky kódu:
settings.merge_style_desc=Sloučit styly
settings.default_merge_style_desc=Výchozí styl sloučení
settings.choose_branch=Vyberte větev…
@ -2486,7 +2490,7 @@ settings.matrix.room_id=ID místnosti
settings.matrix.message_type=Typ zprávy
settings.archive.button=Archivovat repozitář
settings.archive.header=Archivovat tento repozitář
settings.archive.text = Archivováním repozitáře jej celý převedete do stavu pouze pro čtení. Bude skryt z nástěnky. Nikdo (ani vy!) nebude moci vytvářet nové commity ani otevírat problémy a žádosti o sloučení.
settings.archive.text = Archivováním repozitáře jej celý převedete do stavu pouze pro čtení. Bude skryt z nástěnky. Nikdo (ani vy!) nebude moci vytvářet nové revize ani otevírat problémy a žádosti o sloučení.
settings.archive.success=Repozitář byl úspěšně archivován.
settings.archive.error=Nastala chyba při archivování repozitáře. Prohlédněte si záznam pro více detailů.
settings.archive.error_ismirror=Nemůžete archivovat zrcadlený repozitář.
@ -2494,7 +2498,7 @@ settings.archive.branchsettings_unavailable=Nastavení větví není v archivova
settings.archive.tagsettings_unavailable=Nastavení značek nejsou v archivovaných repozitářích k dispozici.
settings.unarchive.button=Zrušit archivaci repozitáře
settings.unarchive.header=Obnovit tento repozitář
settings.unarchive.text=Obnovení repozitáře vrátí možnost přijímání commitů a nahrávání. Stejně tak se obnoví i možnost vytváření nových problémů a žádostí o sloučení.
settings.unarchive.text=Obnovení repozitáře vrátí možnost přijímání revizí a nahrávání. Stejně tak se obnoví i možnost vytváření nových problémů a žádostí o sloučení.
settings.unarchive.success=Repozitář byl úspěšně obnoven.
settings.unarchive.error=Nastala chyba při obnovování repozitáře. Prohlédněte si záznam pro více detailů.
settings.update_avatar_success=Avatar repozitáře byl aktualizován.
@ -2502,7 +2506,7 @@ settings.lfs=LFS
settings.lfs_filelist=LFS soubory uložené v tomto repozitáři
settings.lfs_no_lfs_files=V tomto repozitáři nejsou uloženy žádné LFS soubory
settings.lfs_findcommits=Najít revize
settings.lfs_lfs_file_no_commits=Pro tento soubor LFS nebyly nalezeny žádné commity
settings.lfs_lfs_file_no_commits=Pro tento soubor LFS nebyly nalezeny žádné revize
settings.lfs_noattribute=Tato cesta nemá uzamykatelný atribut ve výchozí větvi
settings.lfs_delete=Odstranit LFS soubor s OID %s
settings.lfs_delete_warning=Odstranění souboru LFS může při kontrole způsobit chybu „objekt neexistuje“. Jste si jisti?
@ -2578,7 +2582,7 @@ diff.review.approve=Schválit
diff.review.self_reject=Autoři požadavků na natažení nemohou požadovat změny na svém vlastním požadavku na natažení
diff.review.reject=Požadovat změny
diff.review.self_approve=Autoři požadavku na natažení nemohou schválit svůj vlastní požadavek na natažení
diff.committed_by=odevzdal
diff.committed_by=autor:
diff.protected=Chráněno
diff.image.side_by_side=Vedle sebe
diff.image.swipe=Posunout
@ -2620,7 +2624,7 @@ release.edit_release=Aktualizovat vydání
release.delete_release=Smazat vydání
release.delete_tag=Smazat značku
release.deletion=Smazat vydání
release.deletion_desc=Smazání vydání jej pouze odebere z Gitea. Nebude to mít vliv na značku Git, obsah vašeho repozitáře nebo jeho historii. Pokračovat?
release.deletion_desc=Smazáním vydání jej pouze odeberete z Forgeja. Nebude to mít vliv na značku Gitu, obsah vašeho repozitáře nebo jeho historii. Pokračovat?
release.deletion_success=Vydání bylo odstraněno.
release.deletion_tag_desc=Odstraní tuto značku z repozitáře. Obsah repozitáře a historie zůstanou nezměněny. Pokračovat?
release.deletion_tag_success=Značka byla odstraněna.
@ -2643,7 +2647,7 @@ branch.delete_html=Odstranit větev
branch.delete_desc=Smazání větve je trvalé. Přestože zrušená větev může existovat i po krátkou dobu, než bude skutečně odstraněna, NELZE ji většinou vrátit. Pokračovat?
branch.deletion_success=Větev „%s“ byla smazána.
branch.deletion_failed=Nepodařilo se odstranit větev „%s“.
branch.delete_branch_has_new_commits=Větev „%s“ nemůže být smazána, protože byly přidány nové commity po sloučení.
branch.delete_branch_has_new_commits=Větev „%s“ nelze odstranit, protože byly po sloučení přidány nové revize.
branch.create_branch=Vytvořit větev %s
branch.create_from=z „%s“
branch.create_success=Větev „%s“ byla vytvořena.
@ -2710,12 +2714,12 @@ mirror_sync = synchronizováno
blame.ignore_revs = Ignorování revizí v souboru <a href="%s">.git-blame-ignore-revs</a>. Klikněte <a href="%s">sem pro udělení výjimky</a> a zobrazení normálního přehledu blame.
commits.browse_further = Procházet dále
issues.role.first_time_contributor = První přispěvatel
editor.invalid_commit_mail = Neplatný e-mail pro vytvoření commitu.
editor.invalid_commit_mail = Neplatný e-mail pro vytvoření revize.
commits.renamed_from = Přejmenováno z %s
activity.navbar.recent_commits = Nedávné commity
activity.navbar.recent_commits = Nedávné revize
settings.units.units = Jednotky
pulls.blocked_by_user = V tomto repozitáři nemůžete vytvořit žádost o sloučení, protože jste byli zablokováni jeho majitelem.
pulls.clear_merge_message_hint = Vymazáním zprávy o sloučení pouze odstraníte obsah zprávy commitu a ponecháte vygenerované git trailery, jako „Co-Authored-By …“.
pulls.clear_merge_message_hint = Vymazáním zprávy o sloučení pouze odstraníte obsah zprávy revize a ponecháte vygenerované git trailery, jako „Co-Authored-By …“.
pulls.agit_explanation = Vytvořeno pomocí workflow AGit. AGit umožňuje přispěvatelům navrhovat změny pomocí „git push“ bez vytváření forku nebo nové větve.
contributors.contribution_type.deletions = Odstranění
settings.pull_mirror_sync_in_progress = Probíhá načítání změn ze vzdáleného %s.
@ -2724,7 +2728,7 @@ settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning = Tuto ak
settings.new_owner_blocked_doer = Nový majitel vás zablokoval.
settings.mirror_settings.pushed_repository = Odeslaný repozitář
settings.add_collaborator_blocked_our = Nepodařilo se přidat spolupracovníka, jelikož byl zablokován majitelem repozitáře.
pulls.commit_ref_at = `se odkázal na tuto žádost o sloučení z commitu <a id="%[1]s" href="#%[1]s">%[2]s</a>`
pulls.commit_ref_at = `se odkázal/a na tuto žádost o sloučení z revize <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.wiki_rename_branch_main = Normalizovat název větve Wiki
settings.wiki_rename_branch_main_desc = Přejmenovat větev interně používanou pro Wiki na „%s“. Tato změna je trvalá a nelze ji vrátit.
pulls.fast_forward_only_merge_pull_request = Pouze zrychlené
@ -2748,24 +2752,24 @@ settings.add_collaborator_blocked_them = Nepodařilo se přidat spolupracovníka
settings.ignore_stale_approvals = Ignorovat zastaralá schválení
settings.event_pull_request_merge = Sloučení žádosti o sloučení
settings.event_pull_request_approvals = Schválení žádostí o sloučení
settings.ignore_stale_approvals_desc = Nepočítat schválení udělená u starších commitů (zastaralá schválení) do celkového počtu schválení u ŽS. Není relevantní, pokud byla zastaralá schválení již zrušena.
settings.ignore_stale_approvals_desc = Nepočítat schválení udělená u starších revizí (zastaralá schválení) do celkového počtu schválení u žádosti o sloučení. Není relevantní, pokud byla zastaralá schválení již zrušena.
file_follow = Následovat symbolický odkaz
settings.protect_status_check_patterns_desc = Zadejte vzorce pro upřesnění kontrol, které musí projít před sloučením větví do větve, která se shoduje s tímto pravidlem. Na každý řádek zadejte jeden vzorec. Vzorce nesmí být prázdné.
settings.archive.mirrors_unavailable = Zrcadla nejsou v archivovaných repozitářích k dispozici.
settings.protect_enable_merge_desc = Kdokoli s přístupem k zápisu bude moci slučovat žádosti o sloučení do této větve.
settings.event_pull_request_review_request_desc = Bylo požádáno o posouzení žádosti o sloučení nebo bylo toto požádání odstraněno.
error.broken_git_hook = Zdá se, že u tohoto repozitáře jsou rozbité Git hooks. Pro jejich opravení se prosím řiďte pokyny v <a target="_blank" rel="noreferrer" href="%s">dokumentaci</a> a poté odešlete několik commitů pro obnovení stavu.
error.broken_git_hook = Zdá se, že u tohoto repozitáře jsou rozbité Git webhooky. Pro jejich opravení se prosím řiďte pokyny v <a target="_blank" rel="noreferrer" href="%s">dokumentaci</a> a poté odešlete pár revizí pro obnovení stavu.
pulls.title_desc_one = žádá o sloučení %[1]d commitu z <code>%[2]s</code> do <code id="%[4]s">%[3]s</code>
pulls.merged_title_desc_one = sloučil %[1]d commit z <code>%[2]s</code> do <code>%[3]s</code> %[4]s
open_with_editor = Otevřít pomocí %s
commits.search_branch = Tato větev
editor.commit_id_not_matching = Tento soubor se během úpravy změnil. Proveďte commit do nové větve a poté je slučte.
editor.commit_id_not_matching = Tento soubor se během úpravy změnil. Odešlete změny do nové větve a poté je slučte.
pulls.ready_for_review = Připraveni na posouzení?
settings.rename_branch_failed_protected = Nepodařilo se přejmenovat větev %s, jelikož se jedná o chráněnou větev.
editor.push_out_of_date = Push je nejspíše zastaralý.
stars = Oblíbení
n_commit_one = %s commit
n_commit_few = %s commitů
n_commit_one = %s revize
n_commit_few = %s revizí
n_branch_one = %s větev
n_tag_one = %s značka
n_tag_few = %s značek
@ -2811,7 +2815,7 @@ subscribe.issue.guest.tooltip = Přihlaste se pro odebírání tohoto problému.
subscribe.pull.guest.tooltip = Přihlaste se pro odebírání této žádosti o sloučení.
issues.author.tooltip.pr = Tento uživatel je autorem této žádosti o sloučení.
issues.author.tooltip.issue = Tento uživatel je autorem tohoto problému.
activity.commit = Aktivita commitů
activity.commit = Aktivita revizí
milestones.filter_sort.name = Název
release.type_attachment = Příloha
release.type_external_asset = Externí příloha
@ -2867,12 +2871,14 @@ issues.context.menu = Nabídka komentáře
issues.reaction.alt_remove = Odstranit %[1]s reakci z komentáře.
issues.reaction.alt_add = Přidat %[1]s reakci na komentář.
editor.commit_email = E-mail revize
[graphs]
component_loading_info = Tohle může chvíli trvat…
component_failed_to_load = Došlo k neočekávané chybě.
code_frequency.what = frekvence kódu
contributors.what = příspěvky
recent_commits.what = nedávné commity
recent_commits.what = nedávné revize
component_loading = Načítání %s...
component_loading_failed = Nepodařilo se načíst %s
@ -3020,7 +3026,7 @@ last_page=Poslední
total=Celkem: %d
settings=Nastavení správce
dashboard.new_version_hint=Gitea %s je nyní k dispozici, právě u vás běži %s. Podívej se na <a target="_blank" rel="noreferrer" href="%s">blogu</a> pro více informací.
dashboard.new_version_hint=Forgejo %s je nyní k dispozici, aktuálně používáte verzi %s. Pro více informací viz <a target="_blank" rel="noreferrer" href="%s">blog</a>.
dashboard.statistic=Souhrn
dashboard.operations=Operace údržby
dashboard.system_status=Stav systému
@ -3533,7 +3539,7 @@ self_check.database_collation_mismatch=Očekávejte, že databáze použije coll
self_check.database_inconsistent_collation_columns=Databáze používá collation %s, ale tyto sloupce používají chybné collation. To může způsobit neočekávané problémy.
self_check.database_fix_mysql=Pro uživatele MySQL/MariaDB můžete použít příkaz „forgejo doctor convert“, který opraví problémy s porovnáním. Problém také můžete ručně vyřešit příkazem „ALTER ... COLLATE ...“ SQL.
self_check = Vlastní kontrola
self_check.database_collation_case_insensitive=Databáze používá collation %s, což je collation nerozlišující velká a malá písmena. Ačkoli s ní Gitea může pracovat, mohou se vyskytnout vzácné případy, kdy nebude fungovat podle očekávání.
self_check.database_collation_case_insensitive=Databáze používá collation %s, což je collation nerozlišující velká a malá písmena. Ačkoli s ní Forgejo může pracovat, mohou se vyskytnout vzácné případy, kdy nebude fungovat podle očekávání.
auths.oauth2_map_group_to_team = Zmapovat zabrané skupiny u týmů organizací (volitelné - vyžaduje název claimu výše)
monitor.queue.settings.desc = Pooly dynamicky rostou podle blokování fronty jejich workerů.
@ -3580,7 +3586,7 @@ delete_branch=smazal/a větev %[2]s z <a href="%[1]s">%[3]s</a>
compare_branch=Porovnat
compare_commits=Porovnat %d revizí
compare_commits_general=Porovnat revize
mirror_sync_push=synchronizoval/a commity do <a href="%[2]s">%[3]s</a> v <a href="%[1]s">%[4]s</a> ze zrcadla
mirror_sync_push=synchronizoval/a revize do <a href="%[2]s">%[3]s</a> v <a href="%[1]s">%[4]s</a> ze zrcadla
mirror_sync_create=synchronizoval/a novou referenci <a href="%[2]s">%[3]s</a> do <a href="%[1]s">%[4]s</a> ze zrcadla
mirror_sync_delete=synchronizoval/a a smazal/a referenci <code>%[2]s</code> v <a href="%[1]s">%[3]s</a> ze zrcadla
approve_pull_request=`schválil/a <a href="%[1]s">%[3]s#%[2]s</a>`
@ -3635,13 +3641,13 @@ no_subscriptions=Žádné odběry
[gpg]
default_key=Podepsáno výchozím klíčem
error.extract_sign=Selhalo získání podpisu
error.generate_hash=Selhalo vygenerování hash revize
error.generate_hash=Selhalo vygenerování hashe revize
error.no_committer_account=Žádný účet není propojen s e-mailovou adresou přispěvatele
error.no_gpg_keys_found=V databázi nebyl nalezen žádný známý klíč pro tento podpis
error.not_signed_commit=Nepodepsaný commit
error.not_signed_commit=Nepodepsaná revize
error.failed_retrieval_gpg_keys=Nepodařilo se získat žádný klíč propojený s účtem přispěvatele
error.probable_bad_signature=VAROVÁNÍ! Přestože v databázi existuje klíč s tímto ID, tento commit neověřuje! Tento commit je PODEZŘELÝ.
error.probable_bad_default_signature=VAROVÁNÍ! Ačkoli výchozí klíč má toto ID, neověřuje tento commit! Tento commit je PODEZŘELÝ.
error.probable_bad_signature=VAROVÁNÍ! Přestože v databázi existuje klíč s tímto ID, tato revize jím není ověřena! Tato revize je PODEZŘELÁ.
error.probable_bad_default_signature=VAROVÁNÍ! Přestože má výchozí klíč toto ID, tato revize jím není ověřena! Tato revize je PODEZŘELÁ.
[units]
unit=Jednotka
@ -3863,7 +3869,7 @@ runners.task_list.no_tasks=Zatím zde nejsou žádné úlohy.
runners.task_list.run=Spustit
runners.task_list.status=Status
runners.task_list.repository=Repozitář
runners.task_list.commit=Commit
runners.task_list.commit=Revize
runners.task_list.done_at=Dokončeno v
runners.edit_runner=Upravit Runner
runners.update_runner=Aktualizovat změny
@ -3883,7 +3889,7 @@ runners.reset_registration_token=Resetovat registrační token
runners.reset_registration_token_success=Registrační token runneru byl úspěšně obnoven
runs.all_workflows=Všechny workflowy
runs.commit=Commit
runs.commit=Revize
runs.scheduled=Naplánováno
runs.invalid_workflow_helper=Konfigurační soubor pracovního postupu je neplatný. Zkontrolujte prosím konfigurační soubor: %s
runs.no_matching_online_runner_helper=Žádný odpovídající online runner s popiskem: %s
@ -3896,7 +3902,7 @@ runs.no_workflows=Zatím neexistují žádné pracovní postupy.
runs.no_workflows.quick_start = Nevíte jak začít s Gitea Action? Podívejte se na <a target="_blank" rel="noopener noreferrer" href="%s">průvodce rychlým startem</a>.
runs.no_workflows.documentation = Další informace o Gitea Action, viz <a target="_blank" rel="noopener noreferrer" href="%s">dokumentace</a>.
runs.no_runs=Pracovní postup zatím nebyl spuštěn.
runs.empty_commit_message=(prázdná zpráva commitu)
runs.empty_commit_message=(prázdná zpráva revize)
workflow.disable=Zakázat workflow
workflow.disable_success=Workflow „%s“ byl úspěšně deaktivován.
@ -3969,7 +3975,7 @@ code_kind = Hledat kód...
package_kind = Hledat balíčky...
project_kind = Hledat projekty...
branch_kind = Hledat větve...
commit_kind = Hledat commity...
commit_kind = Hledat revize...
runner_kind = Hledat runnery...
no_results = Nenalezeny žádné odpovídající výsledky.
fuzzy_tooltip = Zahrnout také výsledky, které úzce odpovídají hledanému výrazu

View file

@ -627,6 +627,8 @@ unsupported_login_type = Login typen understøttes ikke for at slette kontoen.
cannot_add_org_to_team = En organisation kan ikke tilføjes som et holdmedlem.
must_use_public_key = Nøglen du har angivet er en privat nøgle. Lad være med at uploade din private nøgle nogen steder. Brug din offentlige nøgle i stedet.
email_domain_is_not_allowed = Domænet for brugerens e-mailadresse <b>%s</b> er i konflikt med EMAIL_DOMAIN_ALLOWLIST eller EMAIL_DOMAIN_BLOCKLIST. Sørg for, at du har indstillet e-mailadressen korrekt.
[user]
change_avatar = Skift din avatar…
joined_on = Tilmeldte sig den %s
@ -1120,7 +1122,7 @@ migrate_items_pullrequests = Pull-anmodninger
migrate_items_merge_requests = Flet anmodninger
migrate_items_releases = Udgivelser
migrate_repo = Migrer depot
migrate.clone_address_desc = HTTP(S) eller Git "klone" URL'en for et eksisterende lager
migrate.clone_address_desc = HTTP(S) eller Git "klone" URL'en for et eksisterende depot
migrate.clone_local_path = eller en lokal serversti
migrate.permission_denied = Du har ikke tilladelse til at importere lokale depoter.
migrate.permission_denied_blocked = Du kan ikke importere fra ikke-tilladte værter. Bed venligst administratoren om at kontrollere ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS indstillingerne.
@ -1157,7 +1159,7 @@ migrated_from = Migreret fra <a href="%[1]s">%[2]s</a>
migrate.gitea.description = Migrer data fra gitea.com eller andre Gitea-instanser.
migrate.gitbucket.description = Migrer data fra GitBucket-instanser.
migrate.github_token_desc = Du kan sætte et eller flere tokens med kommasepareret her for at gøre migreringen hurtigere på grund af GitHub API-hastighedsgrænsen. ADVARSEL: Misbrug af denne funktion kan overtræde tjenesteudbyderens politik og føre til kontoblokering.
migrate_options_lfs_endpoint.description = Migration vil forsøge at bruge din fjern-Git til at <a target="_blank" rel="noopener noreferrer" href="%s">bestemme LFS-serveren</a>. Du kan også angive et brugerdefineret slutpunkt, hvis lagerets LFS-data er gemt et andet sted.
migrate_options_lfs_endpoint.description = Migration vil forsøge at bruge din fjern-Git til at <a target="_blank" rel="noopener noreferrer" href="%s">bestemme LFS-serveren</a>. Du kan også angive et brugerdefineret slutpunkt, hvis depots LFS-data er gemt et andet sted.
form.name_pattern_not_allowed = Mønsteret "%s" er ikke tilladt i et depotnavn.
migrate_options_lfs_endpoint.placeholder = Hvis det efterlades tomt, vil endepunktet blive afledt fra klonens URL
migrate.clone_address = Migrer / Klon fra URL
@ -1627,6 +1629,203 @@ issues.lock_confirm = Lås
issues.unlock_confirm = Lås op
issues.lock.notice_1 = - Andre brugere kan ikke tilføje nye kommentarer til dette problem.
issues.unpin_issue = Frigør problemet
issues.max_pinned = Du kan ikke fastgøre flere problemer
issues.pin_comment = fastgjort dette %s
issues.unpin_comment = frigjorde dette %s
issues.lock = Lås samtale
issues.unlock = Lås samtale op
issues.lock.unknown_reason = Kan ikke låse et problem med en ukendt årsag.
issues.lock.notice_2 = - Du og andre samarbejdspartnere med adgang til dette depot kan stadig efterlade kommentarer, som andre kan se.
issues.lock.notice_3 = - Du kan altid låse op for dette problem igen i fremtiden.
issues.unlock.notice_1 = - Alle ville kunne udtale sig om dette spørgsmål endnu en gang.
issues.unlock.notice_2 = - Du kan altid låse dette problem igen i fremtiden.
issues.lock.reason = Årsag til låsning
issues.lock.title = Lås samtale om dette problem.
issues.unlock.title = Lås op for samtale om dette problem.
issues.comment_on_locked = Du kan ikke kommentere på et låst problem.
issues.delete = Slet
issues.delete.title = Slet dette problem?
issues.delete.text = Vil du virkelig slette dette problem? (Dette fjerner alt indhold permanent. Overvej at lukke det i stedet, hvis du har til hensigt at holde det arkiveret)
issues.tracker = Tidsregistrering
issues.start_tracking_short = Start timer
issues.start_tracking = Start tidsregistrering
issues.start_tracking_history = `begyndte at arbejde %s`
issues.tracker_auto_close = Timeren stoppes automatisk, når dette problem lukkes
issues.tracking_already_started = `Du har allerede startet tidsregistrering på <a href="%s">et andet problem</a>!`
issues.stop_tracking = Stop timer
issues.stop_tracking_history = "stoppede med at arbejde %s`
issues.cancel_tracking = Kassér
issues.cancel_tracking_history = `annulleret tidssporing %s`
issues.add_time = Tilføj tid manuelt
issues.del_time = Slet denne tidslog
issues.add_time_short = Tilføj tid
issues.add_time_cancel = Annuller
issues.add_time_history = `tilført brugt tid %s`
issues.del_time_history = `slettet brugt tid %s`
issues.add_time_hours = Timer
issues.add_time_minutes = Minutter
issues.add_time_sum_to_small = Ingen tid blev indtastet.
issues.time_spent_total = Samlet tid brugt
issues.time_spent_from_all_authors = `Samlet tid brugt: %s`
issues.due_date = Forfaldsdato
issues.push_commit_1 = tilføjet %d commit %s
issues.push_commits_n = tilføjet %d commits %s
issues.force_push_codes = `force-pushed %[1]s fra <a class="%[7]s" href="%[3]s"><code>%[2]s</code></a> til <a class="%[7]s" href="%[5]s"><code>%[4]s</code></a> %[6]s`
issues.force_push_compare = Sammenlign
issues.due_date_form = yyyy-mm-dd
issues.due_date_form_edit = Redigere
issues.due_date_form_remove = Slet
issues.due_date_not_set = Ingen forfaldsdato fastsat.
issues.due_date_added = tilføjede forfaldsdatoen %s %s
issues.due_date_modified = ændrede forfaldsdatoen fra %[2]s til %[1]s %[3]s
issues.due_date_remove = fjernede forfaldsdatoen %s %s
issues.due_date_overdue = Forfalden
issues.due_date_invalid = Forfaldsdatoen er ugyldig eller uden for intervallet. Brug venligst formatet "yyyy-mm-dd".
issues.dependency.title = Afhængigheder
issues.dependency.issue_no_dependencies = Ingen afhængigheder angivet.
issues.dependency.pr_no_dependencies = Ingen afhængigheder angivet.
issues.dependency.no_permission_1 = Du har ikke tilladelse til at læse %d afhængighed
issues.dependency.no_permission_n = Du har ikke tilladelse til at læse %d afhængigheder
issues.dependency.no_permission.can_remove = Du har ikke tilladelse til at læse denne afhængighed, men du kan fjerne denne afhængighed
issues.dependency.add = Tilføj afhængighed…
issues.dependency.cancel = Annuller
issues.dependency.remove = Slet
issues.dependency.remove_info = Fjern denne afhængighed
issues.dependency.added_dependency = `tilføjede en ny afhængighed %s`
issues.dependency.removed_dependency = `fjernede en afhængighed %s`
issues.dependency.pr_closing_blockedby = Lukning af denne pull-anmodning er blokeret af følgende problemer
issues.dependency.issue_closing_blockedby = Lukning af dette problem er blokeret af følgende problemer
issues.dependency.issue_close_blocks = Dette problem blokerer for lukning af følgende problemer
issues.dependency.pr_close_blocks = Denne pull-anmodning blokerer lukning af følgende problemer
issues.dependency.issue_close_blocked = Du skal lukke alle problemer, der blokerer dette problem, før du kan lukke det.
issues.dependency.issue_batch_close_blocked = Kan ikke batchlukke valgte problemer, fordi problem #%d stadig har åbne afhængigheder
issues.dependency.pr_close_blocked = Du skal lukke alle problemer, der blokerer denne pull-anmodning, før du kan flette den.
issues.dependency.blocks_short = Blockere
issues.dependency.blocked_by_short = Afhænger af
issues.dependency.remove_header = Fjern afhængighed
issues.dependency.issue_remove_text = Dette vil fjerne afhængigheden af dette problem. Vil du fortsætte?
issues.dependency.pr_remove_text = Dette vil fjerne afhængigheden fra denne pull-anmodning. Vil du fortsætte?
issues.dependency.setting = Aktiver afhængigheder for problemer og pull-anmodninger
issues.dependency.add_error_same_issue = Du kan ikke få et problem til at afhænge af sig selv.
issues.dependency.add_error_dep_issue_not_exist = Afhængigt problem eksisterer ikke.
issues.dependency.add_error_dep_not_exist = Afhængighed eksisterer ikke.
issues.dependency.add_error_dep_exists = Afhængighed eksisterer allerede.
issues.dependency.add_error_cannot_create_circular = Du kan ikke oprette en afhængighed med to problemer, der blokerer hinanden.
issues.dependency.add_error_dep_not_same_repo = Begge problemer skal være i samme depot.
issues.review.self.approval = Du kan ikke godkende din egen pull-anmodning.
issues.review.self.rejection = Du kan ikke anmode om ændringer på din egen pull-anmodning.
issues.review.approve = godkendte disse ændringer %s
issues.review.comment = gennemgået %s
issues.review.dismissed = afviste %s's gennemgang %s
issues.review.dismissed_label = Afvist
issues.review.left_comment = efterladt en kommentar
issues.review.content.empty = Du skal efterlade en kommentar, der angiver de ønskede ændringer.
issues.review.reject = anmodende ændringer %s
issues.review.wait = blev anmodet om gennemgang %s
issues.review.add_review_request = anmodet om gennemgang fra %[1]s %[2]s
issues.review.add_review_requests = anmodet om gennemgange fra %[1]s %[2]s
issues.review.remove_review_request = fjernet anmodning om gennemgang for %[1]s %[2]s
issues.review.remove_review_requests = fjernet anmodning om gennemgange for %[1]s %[2]s
issues.review.remove_review_request_self = nægtede at gennemgå %s
issues.review.add_remove_review_requests = anmodede om gennemgang fra %[1]s og fjernede gennemgangsanmodninger for %[2]s %[3]s
issues.review.pending = Afventer
issues.review.pending.tooltip = Denne kommentar er i øjeblikket ikke synlig for andre brugere. For at indsende dine afventende kommentarer, vælg "%s" -> "%s/%s/%s" øverst på siden.
issues.review.review = Gennemgå
issues.review.reviewers = Gemmengåer
issues.review.outdated = Forældet
issues.review.outdated_description = Indholdet er ændret siden denne kommentar blev lavet
issues.review.option.show_outdated_comments = Vis forældede kommentarer
issues.review.option.hide_outdated_comments = Skjul forældede kommentarer
issues.review.show_outdated = Vis forældet
issues.review.hide_outdated = Skjul forældede
issues.review.show_resolved = Vis løst
issues.review.hide_resolved = Skjul løst
issues.review.resolve_conversation = Løs samtale
issues.review.un_resolve_conversation = Uafklaret samtale
issues.review.resolved_by = markerede denne samtale som løst
issues.reference_issue.body = Body
issues.content_history.deleted = slettet
issues.content_history.edited = redigeret
issues.content_history.created = oprettet
issues.content_history.delete_from_history = Slet fra historikken
issues.content_history.delete_from_history_confirm = Slet fra historikken?
issues.content_history.options = Valgmuligheder
issues.reference_link = Reference: %s
issues.blocked_by_user = Du kan ikke oprette et problem på dette depot, fordi du er blokeret af depotes ejer.
issues.comment.blocked_by_user = Du kan ikke oprette en kommentar til dette problem, fordi du er blokeret af depotes ejer eller anmelder af problemet.
issues.summary_card_alt = Oversigtskort over et problem med titlen "%s" i depotet %s
compare.compare_base = base
compare.compare_head = sammenlign
pulls.desc = Aktiver pull-anmodninger og kodegennemgange.
pulls.new = Ny pull anmodning
pulls.view = Se pull-anmodning
pulls.edit.already_changed = Kunne ikke gemme ændringer af pull-anmodningen. Det ser ud til, at indholdet allerede er blevet ændret af en anden bruger. Opdater siden, og prøv at redigere igen for at undgå at overskrive deres ændringer
pulls.compare_changes = Ny pull-anmodning
pulls.sign_in_require = <a href="%s">Log ind</a> for at oprette en ny pull-anmodning.
pulls.allow_edits_from_maintainers = Tillad redigeringer fra vedligeholdere
pulls.allow_edits_from_maintainers_desc = Brugere med skriveadgang til basisgrenen kan også trykke til denne gren
pulls.allow_edits_from_maintainers_err = Opdatering mislykkedes
pulls.compare_changes_desc = Vælg den gren, der skal flettes ind i, og den gren, der skal trækkes fra.
pulls.has_viewed_file = Set
pulls.has_changed_since_last_review = Ændret siden din sidste gennemgang
pulls.viewed_files_label = %[1]d / %[2]d filer set
pulls.expand_files = Udvid alle filer
pulls.collapse_files = Skjul alle filer
pulls.compare_base = flet ind i
pulls.compare_compare = pull fra
pulls.switch_comparison_type = Skift sammenligningstype
pulls.switch_head_and_base = Skift hoved og base
pulls.filter_branch = Filter gren
pulls.no_results = Ingen resultater fundet.
pulls.show_all_commits = Vis alle commits
pulls.show_changes_since_your_last_review = Vis ændringer siden din sidste gennemgang
pulls.showing_only_single_commit = Viser kun ændringer af commit %[1]s
pulls.showing_specified_commit_range = Viser kun ændringer mellem %[1]s..%[2]s
pulls.select_commit_hold_shift_for_range = Vælg commit. Hold Shift + klik for at vælge et område
pulls.review_only_possible_for_full_diff = Gennemgang er kun mulig, når du ser den fulde diff
pulls.filter_changes_by_commit = Filtrer efter commit
editor.commit_email = Commit email
pulls.nothing_to_compare = Disse grene er lige store. Der er ingen grund til at oprette en pull-anmodning.
pulls.nothing_to_compare_have_tag = Den valgte gren/tag er ens.
pulls.nothing_to_compare_and_allow_empty_pr = Disse grene er lige store. Denne PR vil være tom.
pulls.has_pull_request = `Der findes allerede en pull-anmodning mellem disse grene: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create = Opret pull-anmodning
pulls.change_target_branch_at = `ændrede målgren fra <b>%s</b> til <b>%s</b> %s`
pulls.tab_conversation = Samtale
pulls.tab_commits = Commits
pulls.tab_files = Filer ændret
pulls.reopen_to_merge = Genåbn denne pull-anmodning for at udføre en fletning.
pulls.cant_reopen_deleted_branch = Denne pull-anmodning kan ikke genåbnes, fordi grenen blev slettet.
pulls.merged = Flettet
pulls.merged_success = Pull-anmodning blev flettet og lukket
pulls.closed = Pull-anmodning lukket
pulls.manually_merged = Manuelt flettet
pulls.merged_info_text = Grenen %s kan nu slettes.
pulls.is_closed = Pull-anmodningen er blevet lukket.
pulls.title_wip_desc = `<a href="#">Start titlen med <strong>%s</strong></a> for at forhindre pull-anmodningen i at blive flettet ved et uheld.`
pulls.cannot_merge_work_in_progress = Denne pull-anmodning er markeret som et igangværende arbejde.
pulls.still_in_progress = Stadig i gang?
pulls.add_prefix = Tilføj <strong>%s</strong> præfiks
pulls.ready_for_review = Klar til gennemgang?
pulls.remove_prefix = Fjern <strong>%s</strong> præfiks
pulls.data_broken = Denne pull-anmodning er ødelagt på grund af manglende fork-information.
pulls.files_conflicted = Denne pull-anmodning har ændringer, der er i konflikt med målgrenen.
pulls.is_checking = Kontrol af fletkonflikt er i gang. Prøv igen om få øjeblikke.
pulls.is_ancestor = Denne gren er allerede inkluderet i målgrenen. Der er ikke noget at flette sammen.
pulls.is_empty = Ændringerne på denne gren er allerede på målgrenen. Dette vil være en tom commit.
pulls.required_status_check_failed = Nogle påkrævede checks lykkedes ikke.
pulls.required_status_check_missing = Nogle påkrævede checks mangler.
pulls.required_status_check_administrator = Som administrator kan du stadig flette denne pull-anmodning.
pulls.blocked_by_approvals = Denne pull-anmodning har endnu ikke nok godkendelser. %d af %d godkendte godkendelser.
pulls.blocked_by_rejection = Denne pull-anmodning har ændringer anmodet af en officiel anmelder.
pulls.blocked_by_official_review_requests = Denne pull-anmodning er blokeret, fordi den mangler godkendelse fra en eller flere officielle anmeldere.
pulls.blocked_by_outdated_branch = Denne pull-anmodning er blokeret, fordi den er forældet.
pulls.blocked_by_changed_protected_files_1 = Denne pull-anmodning er blokeret, fordi den ændrer en beskyttet fil:
pulls.blocked_by_changed_protected_files_n = Denne pull-anmodning er blokeret, fordi den ændrer beskyttede filer:
pulls.can_auto_merge_desc = Denne pull-anmodning kan flettes automatisk.
[notification]
watching = Overvåger

View file

@ -683,6 +683,8 @@ To = Branchname
AccessToken = Zugangstoken
email_domain_is_not_allowed = Die Domain der E-Mail-Adresse des Benutzers <b>%s</b> steht in Konflikt mit EMAIL_DOMAIN_ALLOWLIST oder EMAIL_DOMAIN_BLOCKLIST. Bitte stelle sicher, dass du die E-Mail-Adresse richtig gesetzt hast.
[user]
change_avatar=Profilbild ändern …
joined_on=Beigetreten am %s
@ -1315,6 +1317,8 @@ view_git_blame=„git blame“ ansehen
video_not_supported_in_browser=Dein Browser unterstützt das HTML5-„video“-Tag nicht.
audio_not_supported_in_browser=Dein Browser unterstützt das HTML5-„audio“-Tag nicht.
stored_lfs=Gespeichert mit Git LFS
stored_annex=Gespeichert mit Git Annex
stored_annex_not_present = hier nicht vorhanden, versuche git annex whereis
symbolic_link=Softlink
executable_file=Ausführbare Datei
commit_graph=Commit-Graph
@ -1338,6 +1342,7 @@ editor.upload_file=Datei hochladen
editor.edit_file=Datei bearbeiten
editor.preview_changes=Vorschau der Änderungen
editor.cannot_edit_lfs_files=LFS-Dateien können im Webinterface nicht bearbeitet werden.
editor.cannot_edit_annex_files=Annex-Dateien können im Webinterface nicht bearbeitet werden.
editor.cannot_edit_non_text_files=Binärdateien können nicht im Webinterface bearbeitet werden.
editor.edit_this_file=Datei bearbeiten
editor.this_file_locked=Datei ist gesperrt
@ -2869,6 +2874,8 @@ issues.reaction.alt_remove = Entferne %[1]s Reaktion von diesem Kommentar.
summary_card_alt = Zusammenfassungskarte des Repositorys %s
release.summary_card_alt = Übersichtskarte eines Releases mit dem Titel „%s“ im Repository %s
editor.commit_email = Commit-E-Mail
[graphs]
component_loading_failed = Konnte %s nicht laden
component_loading_info = Dies könnte einen Moment dauern …
@ -3109,7 +3116,7 @@ dashboard.sync_branch.started=Synchronisierung der Branches gestartet
dashboard.rebuild_issue_indexer=Issue-Indexer neu bauen
users.user_manage_panel=Benutzerkonten verwalten
users.new_account=Benutzerkonto erstellen
users.new_account=Benutzeraccount erstellen
users.name=Benutzername
users.full_name=Vollständiger Name
users.activated=Aktiviert
@ -3578,7 +3585,7 @@ comment_pull=`hat den Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> kommentiert`
merge_pull_request=`führte Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> zusammen`
auto_merge_pull_request=`führte Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> automatisch zusammen`
transfer_repo=hat Repository <code>%s</code> übertragen zu <a href="%s">%s</a>
push_tag=Tag <a href="%[2]s">%[3]s</a> nach <a href="%[1]s">%[4]s</a> wurde gepusht
push_tag=hat Tag <a href="%[2]s">%[3]s</a> auf <a href="%[1]s">%[4]s</a> gepusht
delete_tag=hat Tag %[2]s in <a href="%[1]s">%[3]s</a> gelöscht
delete_branch=hat Branch %[2]s in <a href="%[1]s">%[3]s</a> gelöscht
compare_branch=Vergleichen
@ -3975,7 +3982,7 @@ package_kind = Pakete suchen …
project_kind = Projekte suchen …
branch_kind = Branches suchen …
commit_kind = Commits suchen …
runner_kind = Runners suchen …
runner_kind = Runner suchen …
no_results = Keine passenden Ergebnisse gefunden.
code_search_unavailable = Die Code-Suche ist momentan nicht verfügbar. Bitte kontaktiere den Webseitenadministrator.
keyword_search_unavailable = Die Suche mittels Schlüsselwort ist momentan nicht verfügbar. Bitte kontaktiere den Webseitenadministrator.

View file

@ -1226,7 +1226,7 @@ migrate.migrating_failed_no_addr=Η μεταφορά απέτυχε.
migrate.github.description=Μεταφορά δεδομένων από το github.com ή διακομιστές GitHub Enterprise.
migrate.git.description=Μεταφορά μόνο του αποθετηρίου από μια οποιαδήποτε υπηρεσία Git.
migrate.gitlab.description=Μεταφορά δεδομένων από το gitlab.com ή άλλες εγκαταστάσεις GitLab.
migrate.gitea.description=Μεταφορά δεδομένων από το gitea.com ή άλλες εγκαταστάσεις Gitea/Forgejo.
migrate.gitea.description=Μεταφορά δεδομένων από το gitea.com ή άλλες εγκαταστάσεις Gitea.
migrate.gogs.description=Μεταφορά δεδομένων από το notabug.org ή άλλες εγκαταστάσεις Gogs.
migrate.onedev.description=Μεταφορά δεδομένων από το code.onedev.io ή άλλες εγκαταστάσεις OneDev.
migrate.codebase.description=Μεταφορά δεδομένων από το codebasehq.com.
@ -1314,6 +1314,7 @@ view_git_blame=Προβολή git blame
video_not_supported_in_browser=Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την ετικέτα HTML5 «video».
audio_not_supported_in_browser=Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την ετικέτα HTML5 «audio».
stored_lfs=Αποθηκεύτηκε με το Git LFS
stored_annex=Αποθηκεύτηκε με το Git Annex
symbolic_link=Symbolic link
executable_file=Εκτελέσιμο αρχείο
commit_graph=Γράφημα υποβολών
@ -1337,6 +1338,7 @@ editor.upload_file=Ανέβασμα αρχείου
editor.edit_file=Επεξεργασία αρχείου
editor.preview_changes=Προεπισκόπηση αλλαγών
editor.cannot_edit_lfs_files=Τα αρχεία LFS δεν μπορούν να επεξεργαστούν στη διεπαφή web.
editor.cannot_edit_annex_files=Τα αρχεία Annex δεν μπορούν να επεξεργαστούν στη διεπαφή web.
editor.cannot_edit_non_text_files=Τα δυαδικά αρχεία δεν μπορούν να επεξεργαστούν στη διεπαφή web.
editor.edit_this_file=Επεξεργασία αρχείου
editor.this_file_locked=Το αρχείο είναι κλειδωμένο
@ -1935,7 +1937,7 @@ pulls.cmd_instruction_hint=Προβολή οδηγιών γραμμής εντο
pulls.cmd_instruction_checkout_title=Έλεγχος
pulls.cmd_instruction_checkout_desc=Από το repository του έργου σας, ελέγξτε έναν νέο κλάδο και δοκιμάστε τις αλλαγές.
pulls.cmd_instruction_merge_title=Συγχώνευση
pulls.cmd_instruction_merge_desc=Συγχώνευση των αλλαγών και ενημέρωση στο Gitea.
pulls.cmd_instruction_merge_desc=Συγχώνευση των αλλαγών και ενημέρωση στο Forgejo.
pulls.clear_merge_message=Εκκαθάριση μηνύματος συγχώνευσης
pulls.clear_merge_message_hint=Η εκκαθάριση του μηνύματος συγχώνευσης θα αφαιρέσει μόνο το περιεχόμενο του μηνύματος υποβολής και θα διατηρήσει τα παραγόμενα git trailers όπως "Co-Authored-By …".
@ -2630,7 +2632,7 @@ release.edit_release=Ενημέρωση κυκλοφορίας
release.delete_release=Διαγραφή κυκλοφορίας
release.delete_tag=Διαγραφή ετικέτας
release.deletion=Διαγραφή κυκλοφορίας
release.deletion_desc=Διαγράφοντας μια κυκλοφορία, αυτή αφαιρείται μόνο από το Gitea. Δε θα επηρεάσει την ετικέτα Git, τα περιεχόμενα του αποθετηρίου σας ή το ιστορικό της. Συνέχεια;
release.deletion_desc=Διαγράφοντας μια κυκλοφορία, αυτή αφαιρείται μόνο από το Forgejo. Δε θα επηρεάσει την ετικέτα Git, τα περιεχόμενα του αποθετηρίου σας ή το ιστορικό της. Συνέχεια;
release.deletion_success=Η κυκλοφορία έχει διαγραφεί.
release.deletion_tag_desc=Θα διαγράψει αυτή την ετικέτα από το repository. Τα περιεχόμενα του repository και το ιστορικό δεν θα πειραχτούν. Να γίνει συνέχεια;
release.deletion_tag_success=Η ετικέτα έχει διαγραφεί.
@ -3172,12 +3174,12 @@ packages.size=Μέγεθος
packages.published=Δημοσιευμένα
defaulthooks=Προεπιλεγμένα webhooks
defaulthooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν ενεργοποιούν ορισμένα γεγονότα στο Gitea. Τα Webhooks που ορίζονται εδώ είναι προκαθορισμένα και θα αντιγραφούν σε όλα τα νέα αποθετήρια. Διαβάστε περισσότερα στον οδηγό <a target="_blank" rel="noopener" href="%s">webhooks</a>.
defaulthooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν ενεργοποιούν ορισμένα γεγονότα στο Forgejo. Τα Webhooks που ορίζονται εδώ είναι προκαθορισμένα και θα αντιγραφούν σε όλα τα νέα αποθετήρια. Διαβάστε περισσότερα στον οδηγό <a target="_blank" rel="noopener" href="%s">webhooks</a>.
defaulthooks.add_webhook=Προσθήκη Προεπιλεγμένου Webhook
defaulthooks.update_webhook=Ενημέρωση Προεπιλεγμένου Webhook
systemhooks=Webhooks συστήματος
systemhooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν ενεργοποιούνται ορισμένα γεγονότα στο Gitea. Τα Webhooks που ορίζονται εδώ θα ενεργούν σε όλα τα αποθετήρια του συστήματος, γι 'αυτό παρακαλώ εξετάστε τυχόν επιπτώσεις απόδοσης που μπορεί να έχει. Διαβάστε περισσότερα στον οδηγό <a target="_blank" rel="noopener" href="%s">webhooks</a>.
systemhooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν ενεργοποιούνται ορισμένα γεγονότα στο Forgejo. Τα Webhooks που ορίζονται εδώ θα ενεργούν σε όλα τα αποθετήρια του συστήματος, γι 'αυτό παρακαλώ εξετάστε τυχόν επιπτώσεις απόδοσης που μπορεί να έχει. Διαβάστε περισσότερα στον οδηγό <a target="_blank" rel="noopener" href="%s">webhooks</a>.
systemhooks.add_webhook=Προσθήκη Webhook Συστήματος
systemhooks.update_webhook=Ενημέρωση Webhook Συστήματος

View file

@ -644,6 +644,7 @@ team_name_been_taken = The team name is already taken.
team_no_units_error = Allow access to at least one repository section.
email_been_used = The email address is already used.
email_invalid = The email address is invalid.
email_domain_is_not_allowed = The domain of the user's email address <b>%s</b> conflicts with EMAIL_DOMAIN_ALLOWLIST or EMAIL_DOMAIN_BLOCKLIST. Make sure you have set the email address correctly.
openid_been_used = The OpenID address "%s" is already used.
username_password_incorrect = Username or password is incorrect.
password_complexity = Password does not pass complexity requirements:
@ -1336,6 +1337,8 @@ view_git_blame = View git blame
video_not_supported_in_browser = Your browser does not support the HTML5 "video" tag.
audio_not_supported_in_browser = Your browser does not support the HTML5 "audio" tag.
stored_lfs = Stored with Git LFS
stored_annex = Stored with Git Annex
stored_annex_not_present = not present here, try using git annex whereis
symbolic_link = Symbolic link
executable_file = Executable file
vendored = Vendored
@ -1363,6 +1366,7 @@ editor.upload_file = Upload file
editor.edit_file = Edit file
editor.preview_changes = Preview changes
editor.cannot_edit_lfs_files = LFS files cannot be edited in the web interface.
editor.cannot_edit_annex_files = Annex files cannot be edited in the web interface.
editor.cannot_edit_non_text_files = Binary files cannot be edited in the web interface.
editor.edit_this_file = Edit file
editor.this_file_locked = File is locked
@ -1427,6 +1431,7 @@ editor.user_no_push_to_branch = User cannot push to branch
editor.require_signed_commit = Branch requires a signed commit
editor.cherry_pick = Cherry-pick %s onto:
editor.revert = Revert %s onto:
editor.commit_email = Commit email
commits.desc = Browse source code change history.
commits.commits = Commits
@ -3892,6 +3897,7 @@ variables.deletion.description = Removing a variable is permanent and cannot be
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.not_found = Failed to find the variable.
variables.deletion.failed = Failed to remove variable.
variables.deletion.success = The variable has been removed.
variables.creation.failed = Failed to add variable.

View file

@ -56,7 +56,7 @@ mirror=Réplica
new_repo=Nuevo repositorio
new_migrate=Nueva migración
new_mirror=Nueva réplica
new_fork=Nuevo fork de repositorio
new_fork=Nueva bifurcación del repositorio
new_org=Nueva organización
new_project=Nuevo proyecto
new_project_column=Nueva columna
@ -75,7 +75,7 @@ collaborative=Colaborativo
forks=Forks
activities=Actividades
pull_requests=Pull requests
pull_requests=Solicitudes de incorporación de cambios
issues=Incidencias
milestones=Hitos
@ -156,8 +156,8 @@ invalid_data = Datos inválidos: %v
confirm_delete_artifact = ¿Estás seguro de que deseas eliminar el artefacto "%s"?
more_items = Mas cosas
copy_generic = Copiar al portapapeles
filter.not_fork = No forks
filter.is_fork = Forks
filter.not_fork = No hay bifurcaciones
filter.is_fork = Bifurcaciones
test = Test
error413 = Has agotado tu cuota.
new_repo.title = Nuevo repositorio
@ -229,7 +229,7 @@ platform_desc=Se ha confirmado que Forgejo funciona en sistemas operativos libre
lightweight=Ligero
lightweight_desc=Forgejo tiene pocos requisitos y puede funcionar en una Raspberry Pi barata. ¡Ahorra energía!
license=Código abierto
license_desc=¡Está todo en < <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Únase <a target="_blank" rel="noopener noreferrer" href="%[2]s">contribuyendo</a> a hacer este proyecto todavía mejor. ¡No sea tímido y colabore!
license_desc=¡Pasa a conseguir <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Únete a nosotros y <a target="_blank" rel="noopener noreferrer" href="%[2]s">colabora</a> para mejorar este proyecto. ¡No seas tímido y colabora!
[install]
install=Instalación
@ -397,8 +397,8 @@ code_search_results=Resultados de búsqueda para «%s»
code_last_indexed_at=Indexado por última vez %s
relevant_repositories_tooltip=Repositorios que son bifurcaciones o que no tienen ningún tema, ningún icono, y ninguna descripción están ocultos.
relevant_repositories=Solo se muestran repositorios relevantes, <a href="%s">mostrar resultados sin filtrar</a>.
forks_few = %d forks
forks_one = %d fork
forks_few = %d bifurcaciones
forks_one = %d bifurcación
stars_few = %d estrellas
stars_one = %d estrella
@ -746,7 +746,7 @@ webauthn=Autenticación de dos factores (claves de seguridad)
public_profile=Perfil público
biography_placeholder=¡Cuenta a otros un poco sobre ti! (Se admite Markdown)
location_placeholder=Comparte tu ubicación aproximada con otros
profile_desc=Controla cómo se muestra su perfil a otros usuarios. Tu dirección de correo electrónico principal se utilizará para notificaciones, recuperación de contraseña y operaciones de Git basadas en la web.
profile_desc=Acerca de ti
password_username_disabled=Usuarios no locales no tienen permitido cambiar su nombre de usuario. Por favor, contacta con el administrador del sistema para más detalles.
full_name=Nombre completo
website=Página web
@ -811,7 +811,7 @@ manage_emails=Administrar direcciones de correo electrónico
manage_themes=Tema por defecto
manage_openid=Direcciones OpenID
email_desc=Su dirección de correo electrónico principal se utilizará para notificaciones, recuperación de contraseña y, siempre y cuando no esté oculto, operaciones de Git basadas en la web.
theme_desc=Este será su tema por defecto en todo el sitio.
theme_desc=Este tema será usado en la interfaz web cuando hayas iniciado sesión.
primary=Principal
activated=Activado
requires_activation=Requiere activación
@ -837,14 +837,14 @@ add_email_success=La nueva dirección de correo electrónico ha sido añadida.
email_preference_set_success=La preferencia de correo electrónico se ha establecido correctamente.
add_openid_success=La nueva dirección OpenID ha sido añadida.
keep_email_private=Ocultar dirección de correo electrónico
keep_email_private_popup=Esto ocultará tu dirección de correo electrónico de tu perfil. Ya no será la dirección predeterminada para los commits realizados a través de la interfaz web, como las subidas y ediciones de archivos, y no se utilizará para los commits de fusión. En su lugar, se utilizará una dirección especial %s para asociar los commits a tu cuenta. Ten en cuenta que cambiar esta opción no afectará a los commits existentes.
keep_email_private_popup=Esto ocultará tu dirección de correo electrónico de tu perfil. Ya no será la dirección predeterminada para los confirmaciones realizadas a través de la interfaz web, como las subidas y ediciones de archivos, y no se utilizará para las confirmaciones de fusión. En su lugar, se utilizará una dirección especial %s para asociar las confirmaciones a tu cuenta. Ten en cuenta que cambiar esta opción no afectará a las confirmaciones existentes.
openid_desc=OpenID le permite delegar la autenticación a un proveedor externo.
manage_ssh_keys=Gestionar claves SSH
manage_ssh_principals=Administrar Principales de Certificado SSH
manage_gpg_keys=Gestionar claves GPG
add_key=Añadir clave
ssh_desc=Estas claves SSH públicas están asociadas a tu cuenta. Las correspondientes claves privadas permiten el acceso total a tus repositorios. Las claves SSH que han sido verificadas pueden utilizarse para verificar commits de Git firmados por SSH.
ssh_desc=Estas claves SSH públicas están asociadas a tu cuenta. Las correspondientes claves privadas permiten el acceso total a tus repositorios. Las claves SSH que han sido verificadas pueden utilizarse para verificar confirmaciones de Git firmadas por SSH.
principal_desc=Estos principales de certificado SSH están asociados con su cuenta y permiten el acceso completo a sus repositorios.
gpg_desc=Estas claves GPG públicas están asociadas a tu cuenta y se utilizan para verificar tus commits. Mantén a salvo tus claves privadas, ya que permiten firmar commits con tu identidad.
ssh_helper=<strong>¿Necesitas ayuda?</strong> Echa un vistazo en la guía de GitHub para <a href="%s">crear tus propias claves SSH</a> o resolver <a href="%s">problemas comunes</a> que puede encontrar al usar SSH.
@ -1054,6 +1054,8 @@ keep_activity_private.description = Tu <a href="%s">actividad pública</a> solo
language.description = Este idioma se guardará en tu cuenta y se utilizará como predeterminado cuando te conectes.
language.localization_project = ¡Ayúdanos a traducir Forgejo a tu idioma! <a href="%s">Más información</a>.
pronouns_custom_label = Pronombres personalizados
[repo]
owner=Propietario
owner_helper=Algunas organizaciones pueden no aparecer en el menú desplegable debido a un límite máximo de recuento de repositorios.
@ -1068,10 +1070,10 @@ visibility=Visibilidad
visibility_description=Sólo el propietario o los miembros de la organización -si tienen derechos- podrán verlo.
visibility_helper=Hacer el repositorio privado
visibility_helper_forced=El administrador de su sitio obliga a nuevos repositorios a ser privados.
visibility_fork_helper=(Cambiar esto afectará a la visibilidad de todos los forks.)
visibility_fork_helper=(Cambiar esto afectará a la visibilidad de todas las bifurcaciones.)
clone_helper=¿Necesita ayuda para clonar? Visite <a target="_blank" rel="noopener noreferrer" href="%s">Ayuda</a>.
fork_repo=Hacer fork del repositorio
fork_from=Crear un fork desde
fork_repo=Hacer una bifurcación del repositorio
fork_from=Crear una bifurcación desde
already_forked=Ya ha forkeado %s
fork_to_different_account=Forkear a una cuenta diferente
fork_visibility_helper=La visibilidad de un repositorio del cual se ha hecho fork no puede ser cambiada.
@ -1094,11 +1096,11 @@ issue_labels=Etiquetas
issue_labels_helper=Selecciona un conjunto de etiquetas
license=Licencia
license_helper=Selecciona un archivo de licencia
license_helper_desc=Una licencia regula lo que otros pueden y no pueden hacer con tu código. ¿No está seguro de cuál es el adecuado para su proyecto? Vea <a target="_blank" rel="noopener noreferrer" href="%s">Elija una licencia.</a>
license_helper_desc=Una licencia regula lo que otros pueden y no pueden hacer con tu código. ¿No está seguro de cuál es el adecuado para su proyecto? Vea <a target="_blank" rel="noopener noreferrer" href="%s">Elija una licencia</a>.
readme=LÉAME
readme_helper=Selecciona una plantilla de archivo README
readme_helper_desc=Este es el lugar donde puedes escribir una descripción completa de su proyecto.
auto_init=Inicializar el repositorio (añade .gitignore, licencia y README)
auto_init=Inicializar el repositorio
trust_model_helper=Seleccionar modelo de confianza para la verificación de la firma. Las opciones posibles son:
trust_model_helper_collaborator=Colaborador: Confiar en firmas de colaboradores
trust_model_helper_committer=Comitter: Firmas de confianza que coinciden con los committers
@ -1222,7 +1224,7 @@ migrate.migrating_failed_no_addr=Migración fallida.
migrate.github.description=Migrar datos desde github.com o un servidor GitHub Enterprise.
migrate.git.description=Migrar un repositorio sólo desde cualquier servicio Git.
migrate.gitlab.description=Migrar datos de gitlab.com u otra instancia de GitLab.
migrate.gitea.description=Migrar datos de gitea.com u otra instancia de Gitea/Forgejo.
migrate.gitea.description=Migrar datos de gitea.com u otra instancia de Gitea.
migrate.gogs.description=Migrar datos de notabug.org u otra instancia de Gogs.
migrate.onedev.description=Migrar datos desde code.onedev.io u otra instancia de OneDev.
migrate.codebase.description=Migrar datos desde codebasehq.com.
@ -1233,7 +1235,7 @@ migrate.migrating_milestones=Migrando hitos
migrate.migrating_labels=Migrando etiquetas
migrate.migrating_releases=Migrando lanzamientos
migrate.migrating_issues=Migrando incidencias
migrate.migrating_pulls=Migrando pull requests
migrate.migrating_pulls=Migrando solicitudes de incorporación de cambios
migrate.cancel_migrating_title=Cancelar la migración
migrate.cancel_migrating_confirm=¿Quiere cancelar esta migración?
@ -1310,6 +1312,7 @@ view_git_blame=Ver Git blame
video_not_supported_in_browser=Su navegador no soporta el tag "video" de HTML5.
audio_not_supported_in_browser=Su navegador no soporta el tag "audio" de HTML5.
stored_lfs=Almacenados con Git LFS
stored_annex=Almacenados con Git Annex
symbolic_link=Enlace simbólico
executable_file=Archivo ejecutable
commit_graph=Gráfico de commits
@ -1333,6 +1336,7 @@ editor.upload_file=Subir archivo
editor.edit_file=Editar archivo
editor.preview_changes=Vista previa de los cambios
editor.cannot_edit_lfs_files=Los archivos LFS no se pueden editar en la interfaz web.
editor.cannot_edit_annex_files=Los archivos Annex no se pueden editar en la interfaz web.
editor.cannot_edit_non_text_files=Los archivos binarios no se pueden editar en la interfaz web.
editor.edit_this_file=Editar archivo
editor.this_file_locked=El archivo está bloqueado
@ -1859,7 +1863,7 @@ pulls.add_prefix=Añadir prefijo <strong>%s</strong>
pulls.remove_prefix=Eliminar prefijo <strong>%s</strong>
pulls.data_broken=Este pull request está rota debido a que falta información del fork.
pulls.files_conflicted=Este pull request tiene cambios en conflicto con la rama de destino.
pulls.is_checking=La comprobación de conflicto de fusión está en progreso. Inténtalo de nuevo en unos momentos.
pulls.is_checking=La comprobación de conflicto de fusión está en progreso. Inténtelo de nuevo en unos momentos.
pulls.is_ancestor=Esta rama ya está incluida en la rama de destino. No hay nada que fusionar.
pulls.is_empty=Los cambios en esta rama ya están en la rama de destino. Esto será un commit vacío.
pulls.required_status_check_failed=Algunos controles requeridos no han tenido éxito.
@ -2039,8 +2043,8 @@ activity.opened_prs_count_1=Pull request propuesta
activity.opened_prs_count_n=Pull requests propuestas
activity.title.user_1=%d usuario
activity.title.user_n=%d usuarios
activity.title.prs_1=%d pull request
activity.title.prs_n=%d pull requests
activity.title.prs_1=%d solicitud de incorporación de cambios
activity.title.prs_n=%d solicitudes de incorporación de cambios
activity.title.prs_merged_by=%s fusionado por %s
activity.title.prs_opened_by=%s propuesto por %s
activity.merged_prs_label=Fusionado
@ -2087,7 +2091,7 @@ activity.git_stats_and_deletions=y
activity.git_stats_deletion_1=%d eliminación
activity.git_stats_deletion_n=%d eliminaciones
contributors.contribution_type.commits=Commits
contributors.contribution_type.commits=Confirmaciones
search=Buscar
search.search_repo=Buscar repositorio
@ -2331,7 +2335,7 @@ settings.event_pull_request_desc=Pull request abierto, cerrado, reabierto o edit
settings.event_pull_request_assign=Asignación
settings.event_pull_request_assign_desc=Pull Request asignado o no asignado.
settings.event_pull_request_label=Etiquetas
settings.event_pull_request_label_desc=Etiqueta de pull request actualizada o borrada.
settings.event_pull_request_label_desc=Etiquetas de pull request actualizadas o borradas.
settings.event_pull_request_milestone=Hitos
settings.event_pull_request_milestone_desc=Hitos añadidos, eliminados o modificados.
settings.event_pull_request_comment=Comentarios
@ -2436,7 +2440,7 @@ settings.protect_approvals_whitelist_users=Lista blanca de usuarios revisores
settings.protect_approvals_whitelist_teams=Lista blanca de equipos revisores
settings.dismiss_stale_approvals=Descartar aprobaciones obsoletas
settings.dismiss_stale_approvals_desc=Cuando los nuevos commits que cambien el contenido de la pull request sean empujados a la rama, se descartarán las aprobaciones antiguas.
settings.require_signed_commits=Exigir commits firmados
settings.require_signed_commits=Exigir confirmaciones firmadas
settings.require_signed_commits_desc=Rechazar push en esta rama si los commits no están firmados o no son verificables.
settings.protect_branch_name_pattern=Patrón de nombre de ramas protegidas
settings.protect_patterns=Patrones
@ -2464,7 +2468,7 @@ settings.choose_branch=Elija una rama…
settings.no_protected_branch=No hay ramas protegidas.
settings.edit_protected_branch=Editar
settings.protected_branch_required_rule_name=Nombre de regla requerido
settings.protected_branch_duplicate_rule_name=Nombre de regla duplicado
settings.protected_branch_duplicate_rule_name=Ya hay una regla para este conjunto de ramas
settings.protected_branch_required_approvals_min=Las aprobaciones necesarias no pueden ser negativas.
settings.tags=Etiquetas
settings.tags.protection=Protección de etiquetas
@ -2488,11 +2492,11 @@ settings.archive.text=Archivar el repositorio lo hará de sólo lectura. Se ocul
settings.archive.success=El repositorio ha sido archivado exitosamente.
settings.archive.error=Ha ocurrido un error al intentar archivar el repositorio. Vea el registro para más detalles.
settings.archive.error_ismirror=No puede archivar un repositorio replicado.
settings.archive.branchsettings_unavailable=Los ajustes de rama no están disponibles si el repositorio está archivado.
settings.archive.branchsettings_unavailable=Los ajustes de rama no están disponibles en repositorios archivados.
settings.archive.tagsettings_unavailable=Los ajustes de las etiquetas no están disponibles si el repositorio está archivado.
settings.unarchive.button=Desarchivar repositorio
settings.unarchive.header=Desarchivar este repositorio
settings.unarchive.text=La desarchivación del repositorio restablecerá su capacidad de recibir commits y pushes, así como nuevas incidencias y pull requests.
settings.unarchive.text=La desarchivación del repositorio restablecerá su capacidad de recibir confirmaciones y subidos, así como nuevas incidencias y solicitudes de incorporación de cambios.
settings.unarchive.success=El repositorio se ha desarchivado correctamente.
settings.unarchive.error=Ocurrió un error mientras se trataba de des-archivar el repositorio. Revisa el registro para más detalles.
settings.update_avatar_success=El avatar del repositorio ha sido actualizado.
@ -2563,7 +2567,7 @@ diff.generated=generado
diff.vendored=vendido
diff.comment.add_line_comment=Añadir comentario en línea
diff.comment.placeholder=Deja un comentario
diff.comment.markdown_info=Es posible estilizar con markdown.
diff.comment.markdown_info=Es posible dar estilos con Markdown.
diff.comment.add_single_comment=Añadir solo comentario
diff.comment.add_review_comment=Añadir comentario
diff.comment.start_review=Comenzar revisión
@ -2718,7 +2722,7 @@ size_format = %[1]s: %[2]s, %[3]s: %[4]s
admin.update_flags = Actualizar indicadores
admin.flags_replaced = Indicadores del repositorio sustituidos
admin.failed_to_replace_flags = Fallo al substituir los indicadores del repositorio
new_repo_helper = Un repositorio contiene todos los archivos del proyecto, incluido el historial de revisiones. ¿Ya tienes uno en otro sitio? <a href="%s">Migrar repositorio.</a>
new_repo_helper = Un repositorio contiene todos los archivos del proyecto, incluido el historial de revisiones. ¿Ya tienes uno en otro sitio? <a href="%s">Migrar repositorio</a>.
object_format_helper = Formato de objeto del repositorio. No puede ser modificado más tarde. SHA1 es el más compatible.
commits.browse_further = Seguir explorando
subscribe.issue.guest.tooltip = Inicia sesión para suscribirte a esta incidencia.
@ -2796,7 +2800,7 @@ settings.confirmation_string = Cadena de confirmación
issues.filter_sort.relevance = Relevancia
settings.transfer_quota_exceeded = El nuevo propietario (%s) ha sobrepasado la cuota. El repositorio no ha sido transferido.
settings.web_hook_name_sourcehut_builds = Builds de SourceHut
settings.wiki_rename_branch_main_notices_2 =
settings.wiki_rename_branch_main_notices_2 =Se va a renombrar de forma permanente la rama interna de la wiki del repositorio %s. Se actualizaran los checkouts existentes.
settings.wiki_rename_branch_main = Normalizar el nombre de la rama de la wiki
settings.wiki_rename_branch_main_desc = Renombrar la rama interna usada por la wiki a "%s". Este cambio es permanente y no se puede deshacer.
settings.confirm_wiki_branch_rename = Renombrar la rama de la wiki
@ -2813,7 +2817,32 @@ release.download_count_one = %s descarga
diff.git-notes.add = Añadir nota
diff.git-notes.remove-header = Eliminar nota
release.download_count_few = %s descargas
diff.git-notes.remove-body = Esta nota se eliminará.
diff.git-notes.remove-body = Esta nota será eliminada.
new_from_template = Usa una plantilla
new_from_template_description = Puedes seleccionar una plantilla de repositorio ya existente en esta instancia y aplicar sus ajustes.
new_advanced = Ajustes avanzados
new_advanced_expand = Click para expandir
auto_init_description = Empieza el historial Git con un README y opcionalmente añade una Licencia y archivos .gitignore.
editor.add_tmpl.filename = nombre de fichero
issues.num_reviews_one = %d revisión
issues.num_reviews_few = %d revisiones
issues.reaction.add = Añadir reacción
issues.reaction.alt_remove = Quitar %[1]s reacción de comentario.
issues.reaction.alt_add = Añadir %[1]s reacción al comentario.
issues.review.add_review_requests = solicitada revisiones de %[1]s %[2]s
issues.review.remove_review_requests = eliminada la solicitud de revisiones para %[1]s %[2]s
editor.commit_email = Correo electrónico del commit
issues.context.menu = Menú de comentarios
issues.review.add_remove_review_requests = Revisiones solicitadas de %[1]s y revisiones eliminadas para %[2]s %[3]s
pulls.sign_in_require = <a href="%s">Inicia sesión</a> para crear un nuevo pull request.
pulls.cmd_instruction_checkout_title = Cambiar rama
settings.protect_new_rule = Crear una nueva regla de protección de rama
settings.enforce_on_admins_desc = Los administradores del repositorio no pueden saltarse esta regla.
release.type_external_asset = Recurso externo
release.asset_name = Nombre del recurso
release.add_external_asset = Añadir un recurso externo
[graphs]
component_loading = Cargando %s...
@ -2822,6 +2851,9 @@ contributors.what = contribuciones
recent_commits.what = commits recientes
code_frequency.what = frecuencia de código
component_loading_info = Esto puede tomar un tiempo…
component_failed_to_load = Ocurrió un error inesperado.
[org]
org_name_holder=Nombre de la organización
org_full_name_holder=Nombre completo de la organización
@ -2947,6 +2979,8 @@ teams.invite.by=Invitado por %s
teams.invite.description=Por favor, haga clic en el botón de abajo para unirse al equipo.
follow_blocked_user = No puedes seguir a esta organización porque esta organización te ha bloqueado.
open_dashboard = Abrir panel de control
[admin]
dashboard=Panel de control
identity_access=Identidad y acceso
@ -3474,6 +3508,20 @@ notices.op=Operación
notices.delete_success=Los avisos del sistema se han eliminado.
config_summary = Resumen
config_settings = Ajustes
users.activated.description = Finalización de la verificación del correo electrónico. El propietario de una cuenta sin activar no podrá iniciar sesión hasta que la verificación se complete.
users.organization_creation.description = Permitir la creación de nuevas organizaciones.
emails.change_email_text = ¿Estás seguro que quieres actualizar esta dirección de correo electrónico?
emails.delete = Eliminar correo electrónico
emails.delete_desc = ¿Estás seguro que quieres eliminar esta dirección de correo electrónico?
emails.deletion_success = El correo electrónico ha sido eliminado.
emails.delete_primary_email_error = No puedes eliminar el correo electrónico principal.
auths.tips.gmail_settings = Ajustes de Gmail:
auths.tip.gitlab_new = Registrar una nueva aplicación en %s
config.cache_test = Caché de prueba
self_check.no_problem_found = Aún no se encontró un problema.
[action]
create_repo=creó el repositorio <a href="%s">%s</a>
rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a>
@ -3617,7 +3665,7 @@ conda.install=Para instalar el paquete usando Conda, ejecute el siguiente comand
container.details.type=Tipo de imagen
container.details.platform=Plataforma
container.pull=Arrastra la imagen desde la línea de comandos:
container.digest=Resumen:
container.digest=Resumen
container.multi_arch=SO / Arquitectura
container.layers=Capas de imagen
container.labels=Etiquetas
@ -3714,6 +3762,19 @@ owner.settings.chef.title=Registro de Chef
owner.settings.chef.keypair=Generar par de claves
owner.settings.chef.keypair.description=Un par de claves es necesario para autenticarse en el registro del Chef. Si ha generado un par de claves antes, generar un nuevo par de claves descartará el par de claves antiguo.
arch.pacman.repo.multi = %s tiene la misma versión en diferentes distribuciones.
arch.pacman.repo.multi.item = Configuración para %s
arch.pacman.conf = Añadir servidor con distribución y arquitectura relacionadas a <code>/etc/pacman.conf</code> :
arch.pacman.sync = Sincronizar el paquete con pacman:
arch.version.properties = Propiedades de la versión
arch.version.groups = Grupo
arch.version.depends = Depende
arch.version.conflicts = Conflictos
arch.version.replaces = Reemplazos
arch.version.backup = Copia de seguridad
container.images.title = Imágenes
rpm.repository.multiple_groups = Este paquete está disponible en múltiples grupos.
[secrets]
secrets=Secretos
description=Los secretos pasarán a ciertas acciones y no se podrán leer de otro modo.
@ -3732,7 +3793,7 @@ management=Gestión de secretos
[actions]
actions=Acciones
unit.desc=Gestionar acciones
unit.desc=Gestione procesos CI/CD integrados con Forgejo Actions.
status.unknown=Desconocido
status.waiting=Esperando
@ -3816,6 +3877,9 @@ variables.update.failed=Error al editar la variable.
variables.update.success=La variable ha sido editada.
variables.id_not_exist = Variable con id %d no existe.
runs.empty_commit_message = (mensaje de commit vacío)
runs.expire_log_message = Los registros han sido eliminados porque eran demasiado antiguos.
[projects]
type-1.display_name=Proyecto individual
type-2.display_name=Proyecto repositorio
@ -3837,7 +3901,7 @@ search = Buscar...
type_tooltip = Tipo de búsqueda
project_kind = Buscar proyectos...
branch_kind = Buscar ramas...
commit_kind = Buscar commits...
commit_kind = Buscar confirmaciones...
repo_kind = Buscar repositorios...
user_kind = Buscar usuarios...
org_kind = Buscar organizaciones...
@ -3860,6 +3924,8 @@ fuzzy = Difusa
runner_kind = Buscar ejecutores…
regexp_tooltip = Interpretar los términos de búsqueda como una expresión regular
regexp = Expresión Regular
[markup]
filepreview.lines = Líneas %[1]d a %[2]d en %[3]s
filepreview.line = Línea %[1]d en %[2]s
@ -3870,7 +3936,7 @@ releases.write = <b>Write:</b> Publicar, editar y eliminar lanzamientos y sus ar
packages.read = <b>Lectura:</b> Ver y descargar paquetes asignados al repositorio.
wiki.read = <b>Lectura:</b> Leer la wiki integrada y su historial.
issues.read = <b>Lectura:</b> Leer y crear incidencias y comentarios.
pulls.write = <b>Escritura:</b> Cerrar pull requests y gestionar metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias.
pulls.write = <b>Escritura:</b> Cerrar solicitudes de incorporación de cambios y gestionar metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias.
releases.read = <b>Lectura:</b> Ver y descagar lanzamientos.
wiki.write = <b>Escritura:</b> Crear, actualizar y eliminar páginas en la wiki integrada.
projects.read = <b>Lectura:</b> Acceso a las tablas de proyecto del repositorio.

View file

@ -881,7 +881,7 @@ migrate.migrating_failed=مهاجرت از <b>%s</b> ناموفق بود.
migrate.migrating_failed_no_addr=مهاجرت ناموفق بود.
migrate.git.description=کوچ یک مخزن فقط از یک سرویس Git.
migrate.gitlab.description=مهاجرت داده از gitlabb.com یا پیاده‌سازی‌های دیگر GitLab.
migrate.gitea.description=مهاجرت داده از gitea.com یا پیاده‌سازی‌های دیگر Gitea/Forgejo.
migrate.gitea.description=مهاجرت داده از gitea.com یا پیاده‌سازی‌های دیگر Gitea.
migrate.gogs.description=مهاجرت داده از notabug.com یا پیاده‌سازی‌های دیگر Gogs.
migrate.onedev.description=مهاجرت داده از code.onedev.io یا پیاده‌سازی‌های دیگر OneDev.
migrate.codebase.description=مهاجر داده ها از codebasehq.com.
@ -951,6 +951,7 @@ file_copy_permalink=پرمالینک را کپی کنید
video_not_supported_in_browser=مرورگر شما از تگ video که در HTML5 تعریف شده است، پشتیبانی نمی کند.
audio_not_supported_in_browser=مرورگر شما از تگ audio که در HTML5 تعریف شده است، پشتیبانی نمی کند.
stored_lfs=ذخیره شده با GIT LFS
stored_annex=ذخیره شده با GIT Annex
symbolic_link=پیوند نمادین
commit_graph=نمودار کامیت
commit_graph.select=انتخاب برنچها
@ -968,6 +969,7 @@ editor.upload_file=بارگذاری پرونده
editor.edit_file=ویرایش پرونده
editor.preview_changes=پیش نمایش تغییرات
editor.cannot_edit_lfs_files=پرونده های LFS در صحفه وب قابل تغییر نیست.
editor.cannot_edit_annex_files=پرونده های Annex در صحفه وب قابل تغییر نیست.
editor.cannot_edit_non_text_files=پرونده‎های دودویی در صفحه وب قابل تغییر نیست.
editor.edit_this_file=ویرایش پرونده
editor.this_file_locked=پرونده قفل شده است
@ -2291,7 +2293,7 @@ auths.bind_password=اتصال گذرواژه
auths.user_base=پایگاه جستجوی کاربر
auths.user_dn=کاربر DN
auths.attribute_username=ویژگی نام کاربری
auths.attribute_username_placeholder=نام کاربری را خالی بگذارید برای انتخاب نام کاربری gitea انتخاب شود.
auths.attribute_username_placeholder=نام کاربری را خالی بگذارید برای انتخاب نام کاربری Forgejo انتخاب شود.
auths.attribute_name=ویژگی نام
auths.attribute_surname=ویژگی نام خانوادگی
auths.attribute_mail=ویژگی ایمیل

View file

@ -1766,7 +1766,7 @@ issues.close = Sulje ongelma
issues.no_content = Ei kuvausta.
pulls.reject_count_1 = %d muutospyyntö
pulls.update_branch_success = Haarapäivitys onnistui
milestones.completeness = <strong>%d%%</strong> valmiina
milestones.completeness = <strong>%d% %</strong> valmiina
contributors.contribution_type.additions = Lisäykset
contributors.contribution_type.deletions = Poistot
settings.webhook_deletion_success = Webkoukku on poistettu.
@ -2097,6 +2097,16 @@ settings.archive.text = Repon arkistointi asettaa sen pelkkään lukutilaan. Se
no_eol.text = Ei EOL:ää
pulls.compare_changes_desc = Valitse haara, johon yhdistetään, ja haara, josta vedetään.
new_from_template = Käytä mallipohjaa
new_from_template_description = Voit valita olemassa olevan repon mallipohjan ja toteuttaa sen asetukset.
new_advanced = Lisäasetukset
new_advanced_expand = Laajenna napsauttamalla
template_description = Repojen mallipohjat mahdollistavat uusien repojen luomisen halutulla hakemistorakenteella, tiedostoilla ja valinnaisilla asetuksilla.
auto_init_description = Aloita Git-historia README-tiedostolla ja valinnaisesti License- ja .gitignore-tiedostoilla.
settings.enter_repo_name = Kirjoita omistajan ja repon nimi täsmälleen kuten esitetty:
settings.confirmation_string = Vahvistusteksti
settings.delete_notices_2 = - Tämä toiminto poistaa pysyvästi repon <strong>%s</strong> mukaan lukien koodin, ongelmat, kommentit, wikidatan ja avustaja-asetukset.
[graphs]
component_loading_info = Tämä saattaa kestää hetken…
component_failed_to_load = Odottamaton virhe.
@ -2582,6 +2592,16 @@ compare_branch = Vertaa
review_dismissed_reason = Syy:
commit_repo = työnsi haaraan <a href="%[2]s">%[3]s</a> repossa <a href="%[1]s">%[4]s</a>
create_issue = `avasi ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue = `sulki ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue = `avasi uudelleen ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request = `loi vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request = `sulki vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request = `avasi uudelleen vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue = `kommentoi ongelmaa <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull = `kommentoi vetopyyntöä <a href="%[1]s">%[3]s#%[2]s</a>`
merge_pull_request = `yhdisti vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
[tool]
now=nyt
1s=1 sekunti
@ -2628,6 +2648,8 @@ error.extract_sign = Allekirjoituksen purkaminen epäonnistui
default_key = Allekirjoitettu oletusavaimella
error.failed_retrieval_gpg_keys = Ei saatu yhtäkään kommitin tekijän tiliin liitettyä avainta
error.generate_hash = Tiivisteen luominen kommitista epäonnistui
[units]
unit = Yksikkö
@ -2768,6 +2790,10 @@ owner.settings.cargo.rebuild.error = Cargo-indeksin rakentaminen uudelleen epäo
owner.settings.cargo.rebuild.success = Cargo-indeksi rakennettiin uudelleen.
owner.settings.cleanuprules.preview.none = Siivoussääntö ei vastaa yhtäkään pakettia.
settings.link.error = Repositorion linkin päivittäminen epäonnistui.
owner.settings.cargo.initialize = Alusta indeksi
owner.settings.cargo.initialize.description = Erityinen Git-repoindeksi vaaditaan Cargo-rekisterin käyttämiseksi. Tämän valinnan käyttäminen luo (tarvittaessa uudelleen) repon ja määrittää sen asetukset automaattisesti.
[secrets]
creation.failed = Salaisuuden lisääminen epäonnistui.
deletion = Poista salaisuus

View file

@ -641,6 +641,8 @@ Biography = Byograpya
Location = Lokasyon
visit_rate_limit = Natugunan ang limitasyon sa rate ng malayuang pagbisita.
email_domain_is_not_allowed = Sumasalungat ang domain ng email address ng user <b>%s</b> sa EMAIL_DOMAIN_ALLOWLIST o EMAIL_DOMAIN_BLOCKLIST. Siguraduhing natakda mo ang email address nang tama.
[user]
joined_on = Sumali noong %s
repositories = Mga Repositoryo
@ -2725,6 +2727,8 @@ issues.context.menu = Menu ng komento
summary_card_alt = Pangkalahatang-ideyang card ng repositoryo na %s
release.summary_card_alt = Pangkalahatang-ideyang card ng isang release na nakapamagat na "%s" sa repositoryo na %s
editor.commit_email = Email ng commit
[search]
commit_kind = Maghanap ng mga commit…
keyword_search_unavailable = Kasalukuyang hindi available ang paghahanap sa pamamagitan ng keyword. Mangyaring makipag-ugnayan sa tagapangasiwa ng site.
@ -2911,7 +2915,7 @@ dashboard.delete_old_system_notices = Burahin ang lahat ng mga lumang paunawa ng
dashboard.gc_lfs = I-garbage collect ang mga LFS meta object
dashboard.stop_zombie_tasks = Itigil ang mga zombie action task
users.user_manage_panel = Ipamahala ang mga user account
users.new_account = Gumawa ng User Account
users.new_account = Gumawa ng user account
users.auth_login_name = Pangalan ng sign-in authentication
users.password_helper = Iwanang walang laman ang password upang panatilihing hindi nabago.
users.max_repo_creation = Pinakamataas na numero ng mga repositoryo
@ -3684,7 +3688,7 @@ approve_pull_request = `inaprubahan ang <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed_reason = Dahilan:
compare_branch = Ikumpara
reject_pull_request = `nagmungkahi ng mga pagbabago para sa <a href="%[1]s">%[3]s#%[2]s</a>`
rename_repo = pinalitan ang pangalan ng repositoryo mula <code>%[1]s</code> sa <a href="%[2]s">%[3]#</a>
rename_repo = pinalitan ang pangalan ng repositoryo mula <code>%[1]s</code> sa <a href="%[2]s">%[3]s</a>
close_issue = `sinara ang isyu na <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed = `na-dismiss ang pagsusuri mula <b>%[4]s</b> para sa <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request = `sinara ang hiling sa paghila na <a href="%[1]s">%[3]s#%[2]s</a>`

View file

@ -681,6 +681,8 @@ Website = Site web
Location = Emplacement
To = Nom de la branche
email_domain_is_not_allowed = Le domaine <b>%s</b> du courriel utilisateur entre en conflit avec EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Veuillez vous assurer le courriel est renseigné.
[user]
change_avatar=Changer votre avatar…
joined_on=Inscrit le %s
@ -1228,7 +1230,7 @@ migrate.migrating_failed_no_addr=Échec de la migration.
migrate.github.description=Migrer les données depuis github.com ou GitHub Enterprise Server.
migrate.git.description=Migrer uniquement un dépôt depuis nimporte quel service Git.
migrate.gitlab.description=Migrer les données depuis gitlab.com ou dautres instances de GitLab.
migrate.gitea.description=Migrer les données depuis gitea.com ou dautres instances de Gitea/Forgejo.
migrate.gitea.description=Migrer les données depuis gitea.com ou dautres instances de Gitea.
migrate.gogs.description=Migrer les données depuis notabug.org ou dautres instances de Gogs.
migrate.onedev.description=Migrer les données depuis code.onedev.io ou dautre instance de OneDev.
migrate.codebase.description=Migrer les données depuis codebasehq.com.
@ -1316,6 +1318,7 @@ view_git_blame=Voir Git blame
video_not_supported_in_browser=Votre navigateur ne supporte pas la balise « vidéo » HTML5.
audio_not_supported_in_browser=Votre navigateur ne supporte pas la balise « audio » HTML5.
stored_lfs=Stocké avec Git LFS
stored_annex=Stocké avec Git Annex
symbolic_link=Lien symbolique
executable_file=Fichier exécutable
vendored = Vendored
@ -1341,6 +1344,7 @@ editor.upload_file=Téléverser un fichier
editor.edit_file=Modifier le fichier
editor.preview_changes=Aperçu des modifications
editor.cannot_edit_lfs_files=Les fichiers LFS ne peuvent pas être modifiés dans l'interface web.
editor.cannot_edit_annex_files=Les fichiers Annex ne peuvent pas être modifiés dans l'interface web.
editor.cannot_edit_non_text_files=Les fichiers binaires ne peuvent pas être édités dans l'interface web.
editor.edit_this_file=Modifier le fichier
editor.this_file_locked=Le fichier est verrouillé
@ -2868,6 +2872,8 @@ issues.context.menu = Menu commentaire
pulls.sign_in_require = <a href="%s">Identifiez vous</a> pour créer une nouvelle demande d'ajout.
release.summary_card_alt = Carte résumé de la publication dont le titre est "%s" dans le dépôt %s
editor.commit_email = Courriel de commit
[graphs]
component_loading = Chargement %s...
component_loading_failed = Échec de chargement de %s

View file

@ -0,0 +1,239 @@
[common]
home = בית
dashboard = מבט על
help = עזרה
logo = לוגו
sign_in = כניסה
sign_in_with_provider = כניסה דרך %s
sign_in_or = או
sign_out = יציאה מהחשבון
sign_up = הרשמה
link_account = חיבור חשבון
register = הרשמה
version = גרסה
powered_by = רץ על %s
page = דף
template = תבנית
language = שפה
notifications = הודעות
active_stopwatch = סטופר
create_new = חדש…
user_profile_and_more = פרופיל והגדרות…
signed_in_as = שלום
enable_javascript = אתר זה משתמש בJavaScript.
toc = תוכן הענינים
licenses = רישיונות
return_to_forgejo = חזרה לפורג'ו
more_items = עוד אפשרויות
username = שם משתמש
email = כתובת אימייל
password = סיסמה
access_token = קוד גישה
captcha = CAPTCHA
twofa = אימות דו־שלבי
twofa_scratch = קוד אימות דו־שלבי
passcode = קוד כניסה
webauthn_insert_key = יש להכניס את מפתח אבטחך
webauthn_sign_in = יש ללחוץ על הכפתור שעל מפתח האבטחה. אם אין כפתור, אפשר להוציא את המפתח ולחבר אותו שוב.
webauthn_press_button = נא ללחוץ על הכפתור שעל מפתח האבטחה…
webauthn_error = קריאת מפתח האבטחה נכשלה.
webauthn_unsupported_browser = הדפדפן שלך לא תומך בWebAuthn.
webauthn_error_unknown = שגיאה לא ידועה, אפשר לנסות שוב.
webauthn_error_insecure = הפרוטוקול WebAuthn לא תומך בחיבורים לא מאובטחים, למעט דרך "localhost" או "127.0.0.1"
webauthn_error_unable_to_process = שרת זה נכשל בעיבוד בקשתך.
webauthn_error_duplicated = מפתח האבטחה לא יכול לשמש לבקשה זו. נא לוודא שהמפתח לא רשום.
webauthn_error_empty = שם המפתח הוא שדה חובה.
webauthn_error_timeout = קריאת מפתחך לקחה יותר מדי זמן. אפשר לטעון מחדש את הדף ולנסות שוב.
repository = קרפיף
organization = ארגון
mirror = מראה
new_mirror = מראה חדשה
new_fork = מזלוג חדש של קרפיף זה
new_project = פרויקט חדש
new_project_column = עמודה חדשה
admin_panel = לוח ניהול מערכת
settings = הגדרות
your_profile = פרופיל
your_starred = כיכבת
your_settings = הגדרות
new_repo.title = קרפיף חדש
new_migrate.title = יבוא קרפיף
new_org.title = ארגון חדש
new_repo.link = קרפיף חדש
new_migrate.link = יבוא קרפיף
new_org.link = ארגון חדש
all = הכל
sources = מקורות
mirrors = מראות
collaborative = שיתופי
forks = מזלוגים
activities = פעילויות
pull_requests = בקשות מיזוג
issues = סוגיות
milestones = מטרות
ok = אישור
cancel = ביטול
retry = לנסות שוב
rerun = הרצה חוזרת
save = שמירה
add = הוספה
add_all = הוספת הכל
remove = הסרה
remove_all = הסרת הכל
remove_label_str = הסרת "%s"
edit = עריכה
test = בדיקה
enabled = מופעל
disabled = כבוי
locked = נעול
copy = העתקה
copy_generic = העתקה לCtrl + C
copy_url = העתקת קישור
copy_hash = העתקת קוד גיבוב
copy_path = העתקת מיקום קובץ
copy_content = העתקת תוכן
copy_branch = העתקת שם ענף
copy_success = הועתק!
copy_error = העתקה נכשלה
copy_type_unsupported = אי אפשר להעתיק קבצים מסוג זה
write = כתיבה
preview = תצוגה מקדימה
loading = נטען…
error = שגיאה
error404 = דף זה <strong>לא קיים</strong> או ש<strong>אין לך אילו גישה</strong>.
go_back = אחורה
invalid_data = הבנת הקלט נכשלה: %v
never = אף פעם
unknown = לא ידוע
rss_feed = פיד RSS
pin = הצמדה
unpin = ביטול הצמדה
archived = ארכיון
concept_system_global = גלובלי
concept_user_individual = אישי
concept_code_repository = קרפיף
concept_user_organization = ארגון
show_timestamps = הצגת זמנים
show_log_seconds = הצגת שניות
show_full_screen = מסך מלא
download_logs = הורדת לוגים
confirm_delete_selected = למחוק את כל הפריטים המסומנים?
name = שם
value = ערך
filter = מסנן
filter.clear = ניקוי מסננים
filter.is_archived = בארכיון
filter.not_archived = מחוץ לארכיון
filter.is_fork = רק מזלוגים
filter.not_fork = להוציא מזלוגים
filter.is_mirror = רק מראות
filter.not_mirror = להוציא מראות
filter.is_template = רק תבניות
filter.not_template = להוציא תבניות
filter.public = ציבורי
filter.private = פרטי
[search]
search = חיפוש...
type_tooltip = סוג חיפוש
fuzzy = מקורב
fuzzy_tooltip = תוצאות יתאימו לתוכן תיבת החיפוש בקירוב; מומלץ כנגד שגיאות כתיב
union = מילות מפתח
union_tooltip = תוצאות יכללו לפחות מילת מפתח אחת; אפשר להפריד מילות מפתח עם רווחים
exact = מדויק
exact_tooltip = תוצאות יתאימו במדויק לתוכן תיבת החיפוש
regexp = רג'קס
repo_kind = חיפוש קרפיפים...
user_kind = חיפוש אנשים...
org_kind = חיפוש ארגונים...
team_kind = חיפוש צוותים...
code_kind = חיפוש קוד...
code_search_unavailable = חיפוש קוד לא זמין. נא לדווח למנהלי המערכת.
package_kind = חיפוש חבילות...
project_kind = חיפוש פרוייקטים...
branch_kind = חיפוש ענפים...
commit_kind = חיפוש קומיטים...
runner_kind = חיפוש מריצים...
no_results = לא נמצאו תוצאות.
issue_kind = חיפוש סוגיות...
keyword_search_unavailable = חיפוש מילות מפתח לא זמין. נא לדווח למנהלי המערכת.
[aria]
navbar = סרגל הניווט
footer.software = על תוכנה זו
footer.links = קישורים
[heatmap]
number_of_contributions_in_the_last_12_months = % תרומות ב־12 החודשים האחרונים
contributions_zero = אפס תרומות
contributions_format = {contributions} ב{day} ל{month} {year}
contributions_one = תרומה
contributions_few = תרומות
less = פחות
more = יותר
[editor]
buttons.heading.tooltip = הוספת כותרת
buttons.bold.tooltip = הדגשת טקסט
buttons.italic.tooltip = הטיית טקסט
buttons.quote.tooltip = ציטוט
buttons.code.tooltip = הוספת קוד
buttons.link.tooltip = הוספת קישור
buttons.list.unordered.tooltip = הוספת רשימה לא ממוספרת
buttons.list.ordered.tooltip = הוספת רשימה ממוספרת
buttons.list.task.tooltip = הוספת רשימת משימות
buttons.mention.tooltip = תיוג אדם או צוות
buttons.ref.tooltip = ריפרור לסוגיה או בקשת מיזוג
buttons.switch_to_legacy.tooltip = מעבר לעורך הישן
buttons.enable_monospace_font = הפעלת גופן קבוע־רוחב
buttons.disable_monospace_font = כיבוי גופן קבוע־רוחב
buttons.new_table.tooltip = הוספת טבלה
table_modal.header = הוספת טבלה
table_modal.placeholder.header = כותרת
table_modal.placeholder.content = תוכן
table_modal.label.rows = שורות
table_modal.label.columns = עמודות
[filter]
string.asc = סדר אלפבתי עולה
string.desc = סדר אלפבתי יורד
[error]
occurred = קרתה שגיאה
not_found = המטרה לא נמצאה.
network_error = שגיאת אינטרנט
server_internal = שגיאת שרת פנימית
[startpage]
install = קל להתקנה
lightweight = קל
license = קוד פתוח
[install]
install = התקנה
title = הגדרה ראשונית
db_title = הגדרות מסד מידע
db_type = סוג מסד מידע
user = שם משתמש
password = סיסמה
db_name = שם מסד המידע
db_schema = סכימה
db_schema_helper = תוכן ריק משמע ערך ברירת המחדל ("public") של מסד המידע.
ssl_mode = SSL
err_empty_admin_password = סיסמה של מנהל מערכת לא יכולה להיות ריקה.
err_empty_admin_email = כתובת אימייל של מנהל מערכת היא חובה.
general_title = הגדרות כלליות
app_name = שם שרת זה
[mail]
issue_assigned.pull = @%[1]s שייך אותך לבקשת המיזוג %[2]s בקרפיף %[3]s.
issue_assigned.issue = @%[1]s שייך אותך לסוגיה %[2]s בקרפיף %[3]s.
repo.transfer.subject_to = %s רוצה להעביר את הקרפיף "%s" ל־%s
repo.transfer.subject_to_you = %s רוצה להעביר את הקרפיף "%s" אליך
repo.collaborator.added.text = הוספת בתור פועל לקרפיף:
[form]
RepoName = שם קרפיף
repo_name_been_taken = כבר יש קרפיף בשם זה.
repository_force_private = פרטיות כפויה מופעלת: קרפיפים פרטיים לא יכולים להעשות ציבוריים.
repository_files_already_exist = כבר יש קבצים בקרפיף זה. יש לדבר עם מנהל המערכת כדי לתקן את הבעיה.

View file

@ -787,6 +787,7 @@ file_too_large=Ez a fájl túl nagy ahhoz, hogy megjelenítsük.
video_not_supported_in_browser=A böngésző nem támogatja a HTML5 video tag-et.
audio_not_supported_in_browser=A böngésző nem támogatja a HTML5 audio tag-et.
stored_lfs=Git LFS-el eltárolva
stored_annex=Git Annex-el eltárolva
symbolic_link=Szimbolikus hivatkozás
commit_graph=Commit gráf
commit_graph.hide_pr_refs=Pull request-ek elrejtése
@ -799,6 +800,7 @@ editor.upload_file=Fájl feltöltése
editor.edit_file=Fájl szerkesztése
editor.preview_changes=Változások előnézete
editor.cannot_edit_lfs_files=LFS fájlok nem szerkeszthetőek a webes felületen.
editor.cannot_edit_annex_files=Annex fájlok nem szerkeszthetőek a webes felületen.
editor.cannot_edit_non_text_files=Bináris fájlok nem szerkeszthetőek a webes felületen.
editor.edit_this_file=Fájl szerkesztése
editor.this_file_locked=Zárolt állomány

View file

@ -596,6 +596,7 @@ file_permalink=Permalink
file_too_large=Berkas terlalu besar untuk ditampilkan.
stored_lfs=Tersimpan dengan GIT LFS
stored_annex=Tersimpan dengan GIT Annex
commit_graph=Grafik Komit
blame=Salahkan
normal_view=Pandangan Normal
@ -607,6 +608,7 @@ editor.upload_file=Unggah Berkas
editor.edit_file=Sunting Berkas
editor.preview_changes=Tinjau Perubahan
editor.cannot_edit_lfs_files=Berkas LFS tidak dapat disunting dalam antarmuka web.
editor.cannot_edit_annex_files=Berkas Annex tidak dapat disunting dalam antarmuka web.
editor.cannot_edit_non_text_files=Berkas biner tidak dapat disunting dalam antarmuka web.
editor.edit_this_file=Sunting Berkas
editor.this_file_locked=Berkas terkunci

View file

@ -680,6 +680,7 @@ file_view_rendered=Skoða Unnið
file_copy_permalink=Afrita Varanlega Slóð
stored_lfs=Geymt með Git LFS
stored_annex=Geymt með Git Annex
commit_graph.hide_pr_refs=Fela Sameiningarbeiðnir
commit_graph.monochrome=Einlitað
commit_graph.color=Litað

View file

@ -220,7 +220,7 @@ platform=Multipiattaforma
lightweight=Leggero
lightweight_desc=Forgejo ha requisiti minimi bassi e può funzionare su un economico Raspberry Pi. Risparmia l'energia della tua macchina!
license=Open Source
license_desc=Ottieni <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Partecipa per <a target="_blank" rel="noopener noreferrer" href="%[2]s">contribuire</a> a rendere questo progetto ancora migliore. Non aver paura di diventare un collaboratore!
license_desc=Ottieni <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Partecipa per <a target="_blank" rel="noopener noreferrer" href="%[2]s">contribuire</a> a rendere questo progetto ancora più bello. Non aver paura di diventare collaborante!
install_desc = Semplicemente <a target="_blank" rel="noopener noreferrer" href="%[1]s">avvia l'eseguibile</a> per la tua piattaforma, distribuiscilo con <a target="_blank" rel="noopener noreferrer" href="%[2]s">Docker</a>, oppure scarica il <a target="_blank" rel="noopener noreferrer" href="%[3]s">pacchetto</a>.
[install]
@ -511,11 +511,11 @@ issue.action.push_n=<b>@%[1]s</b> ha immesso %[3]d commit presso %[2]s
issue.action.close=<b>@%[1]s</b> chiuso #%[2]d.
issue.action.reopen=<b>@%[1]s</b> riaperto #%[2]d.
issue.action.merge=<b>@%[1]s</b> unito #%[2]d in %[3]s.
issue.action.approve=<b>@%[1]s</b> ha approvato questa pull request.
issue.action.reject=<b>@%[1]s</b> ha richiesto modifiche su questa pull request.
issue.action.review=<b>@%[1]s</b> ha commentato questa pull request.
issue.action.review_dismissed=<b>@%[1]s</b> ha respinto l'ultima recensione da %[2]s per questa pull request.
issue.action.ready_for_review=<b>@%[1]s</b> ha contrassegnato questa pull request pronta per la revisione.
issue.action.approve=<b>@%[1]s</b> ha approvato questa richiesta di modifica.
issue.action.reject=<b>@%[1]s</b> ha richiesto modifiche su questa richiesta.
issue.action.review=<b>@%[1]s</b> ha commentato questa richiesta di modifica.
issue.action.review_dismissed=<b>@%[1]s</b> ha respinto l'ultima revisione di %[2]s per questa richiesta di modifica.
issue.action.ready_for_review=<b>@%[1]s</b> ha contrassegnato questa richiesta di modifica come pronta per la revisione.
issue.action.new=<b>@%[1]s</b> creato #%[2]d.
issue.in_tree_path=In %s:
@ -532,8 +532,8 @@ repo.transfer.subject_to_you=%s ti vorrebbe trasferire il repositorio "%s"
repo.transfer.to_you=tu
repo.transfer.body=Per accettare o respingerla visita %s o semplicemente ignorarla.
repo.collaborator.added.subject=%s ti ha aggiunto a %s come collaboratorə
repo.collaborator.added.text=Sei statə aggiuntə come collaboratorə al repositorio:
repo.collaborator.added.subject=%s ti ha aggiunto a %s come collaborante
repo.collaborator.added.text=Sei statə aggiuntə come collaborante al repositorio:
reply = o rispondi direttamente a questa email
admin.new_user.subject = Il nuovo utente %s si è appena registrato
admin.new_user.user_info = Informazioni utente
@ -690,7 +690,7 @@ joined_on = Membro dal %s
block_user = Blocca utente
block_user.detail_1 = Questo utente non ti seguirà più.
block_user.detail_2 = Quest'utente non potrà interagire né con i tuoi repositori, né con le segnalazioni che hai aperto, né con i tuoi commenti.
block_user.detail_3 = Non sarete in grado di aggiungervi come collaboratorɜ del repositorio.
block_user.detail_3 = Non sarete in grado di aggiungervi come collaboranti del repositorio.
code = Codice
block = Blocca
unblock = Sblocca
@ -762,7 +762,7 @@ comment_type_group_lock=Stato blocco
comment_type_group_review_request=Richiesta di revisione
comment_type_group_pull_request_push=Commit aggiunti
comment_type_group_project=Progetto
comment_type_group_issue_ref=Riferimento del problema
comment_type_group_issue_ref=Riferimento alla segnalazione
saved_successfully=Le impostazioni sono state salvate correttamente.
privacy=Privacy
keep_activity_private_popup=La tua attività sarà visibile solo a te e agli amministratori dell'istanza
@ -1029,7 +1029,7 @@ oauth2_application_locked = Forgejo preregistra alcune applicazioni OAuth2 all'a
hooks.desc = Aggiungi richiami HTTP che saranno innescati per <strong>tutti i progetti</strong> che possiedi.
repos_none = Non possiedi alcun progetto.
blocked_users_none = Non ci sono utenti bloccati.
keep_email_private_popup = Questo nasconderà il tuo indirizzo e-mail nel tuo profilo, nelle pull request e quando modifichi un file usando l'interfaccia web. I commit inoltrati non saranno modificati. Usa %s nei commit per associarli al tuo profilo.
keep_email_private_popup = Questo nasconderà il tuo indirizzo e-mail nel tuo profilo, nelle richieste di modifica e quando modifichi un file usando l'interfaccia web. I commit inoltrati non saranno modificati. Usa %s nei commit per associarli al tuo profilo.
verify_gpg_key_success = La chiave GPG "%s" è stata verificata.
added_on = Aggiunto su %s
additional_repo_units_hint = Suggerisci l'attivazione di unità aggiuntive nel repositorio
@ -1189,7 +1189,7 @@ migrate.migrating_failed_no_addr=Migrazione non riuscita.
migrate.github.description=Migrare i dati da github.com o da server GitHub Enterprise.
migrate.git.description=Migra un repositorio solo da qualsiasi servizio Git.
migrate.gitlab.description=Migrare i dati da gitlab.com o da altre istanze di GitLab.
migrate.gitea.description=Migrare i dati da gitea.com o altre istanze di Gitea/Forgejo.
migrate.gitea.description=Migrare i dati da gitea.com o altre istanze di Gitea.
migrate.gogs.description=Migrare i dati da notabug.org o da altre istanze Gogs.
migrate.onedev.description=Migrare i dati da code.onedev.io o da altre istanze OneDev.
migrate.codebase.description=Migrare i dati da codebasehq.com.
@ -1267,6 +1267,7 @@ view_git_blame=Visualizza git incolpa
video_not_supported_in_browser=Il tuo browser non supporta le etichette "video" di HTML5.
audio_not_supported_in_browser=Il tuo browser non supporta le etichette "audio" di HTML5.
stored_lfs=Memorizzati con Git LFS
stored_annex=Memorizzati con Git Annex
symbolic_link=Link Simbolico
commit_graph=Grafico dei commit
commit_graph.select=Seleziona rami
@ -1285,6 +1286,7 @@ editor.upload_file=Carica file
editor.edit_file=Modifica file
editor.preview_changes=Anteprima modifiche
editor.cannot_edit_lfs_files=I file LFS non possono essere modificati nell'interfaccia web.
editor.cannot_edit_annex_files=I file Annex non possono essere modificati nell'interfaccia web.
editor.cannot_edit_non_text_files=I file binari non possono essere modificati tramite interfaccia web.
editor.edit_this_file=Modifica file
editor.this_file_locked=Il file è bloccato
@ -1338,8 +1340,8 @@ commits.date=Data
commits.older=Più vecchio
commits.newer=Più recente
commits.signed_by=Firmato da
commits.signed_by_untrusted_user=Firmato da un utente non attendibile
commits.signed_by_untrusted_user_unmatched=Firmato da un utente non attendibile che non corrisponde al committer
commits.signed_by_untrusted_user=Firmato da un*utente non attendibile
commits.signed_by_untrusted_user_unmatched=Firmato da un*utente non attendibile che non corrisponde al committente
commits.gpg_key_id=ID chiave GPG
commits.ssh_key_fingerprint=Impronta chiave SSH
@ -1411,7 +1413,7 @@ issues.new.no_reviewers=Nessun revisore
issues.choose.get_started=Cominciare
issues.choose.open_external_link=Apri
issues.choose.blank=Default
issues.choose.blank_about=Crea un problema dal modello predefinito.
issues.choose.blank_about=Crea una segnalazione dal modello predefinito.
issues.no_ref=Nessun ramo/etichetta specificati
issues.create=Crea segnalazione
issues.new_label=Nuova etichetta
@ -1482,8 +1484,8 @@ issues.action_milestone_no_select=Nessuna pietra miliare
issues.action_assignee=Assegnatario
issues.action_assignee_no_select=Nessun assegnatario
issues.opened_by=aperta %[1]s da <a href="%[2]s">%[3]s</a>
pulls.merged_by=di <a href="%[2]s">%[3]s</a> è stato fuso %[1]s
pulls.merged_by_fake=di %[2]s è stato fuso %[1]s
pulls.merged_by=di <a href="%[2]s">%[3]s</a> è stata fusa %[1]s
pulls.merged_by_fake=di %[2]s è stata fusa %[1]s
issues.closed_by=di <a href="%[2]s">%[3]s</a> è stato chiuso %[1]s
issues.opened_by_fake=aperta %[1]s da %[2]s
issues.closed_by_fake=di %[2]s è stato chiuso %[1]s
@ -1511,7 +1513,7 @@ issues.ref_issue_from=`<a href="%[3]s">ha fatto riferimento a questa segnalazion
issues.ref_pull_from=`<a href="%[3]s">ha fatto riferimento a questa richiesta di modifica %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closing_from=`<a href="%[3]s">ha fatto riferimento a questa segnalazione da una richiesta di modifica %[4]s che la chiuderà</a>, <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopening_from=`<a href="%[3]s">ha fatto riferimento a questa segnalazione da una richiesta di modifica %[4]s che la riaprirà</a>, <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closed_from=`<a href="%[3]s">chiuso questo problema %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closed_from=`<a href="%[3]s">chiuso questa segnalazione %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">ha riaperto questa segnalazione %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`da %[1]s`
issues.author=Autore
@ -1549,32 +1551,32 @@ issues.subscribe=Iscriviti
issues.unsubscribe=Annulla iscrizione
issues.lock=Blocca conversazione
issues.unlock=Sblocca conversazione
issues.lock.unknown_reason=Impossibile bloccare un problema con un motivo sconosciuto.
issues.lock.unknown_reason=Impossibile bloccare una segnalazione senza un motivo.
issues.lock_duplicate=Un issue non può essere bloccato due volte.
issues.unlock_error=Impossibile sbloccare un problema che non è bloccato.
issues.lock_with_reason=ha bloccato come <strong>%s</strong> e limitato la conversazione ai collaboratori %s
issues.lock_no_reason=ha bloccato e limitato la conversazione ai collaboratori %s
issues.unlock_error=Impossibile sbloccare una segnalazione che non è bloccata.
issues.lock_with_reason=ha bloccato come <strong>%s</strong> e limitato la conversazione allɜ collaboranti %s
issues.lock_no_reason=ha bloccato e limitato la conversazione allɜ collaboranti %s
issues.unlock_comment=ha sbloccato questa conversazione %s
issues.lock_confirm=Blocca
issues.unlock_confirm=Sblocca
issues.lock.notice_1=- Altri utenti non possono aggiungere nuovi commenti a questa segnalazione.
issues.lock.notice_2=- Tu e altri collaboratori con accesso a questo repository potete ancora lasciare commenti che altri possono vedere.
issues.lock.notice_3=- Puoi sempre sbloccare questo problema in futuro.
issues.unlock.notice_1=- Tutti potranno commentare nuovamente questo problema.
issues.unlock.notice_2=- Puoi sempre chiudere nuovamente questo problema in futuro.
issues.lock.notice_2=- Tu e altrɜ collaboranti con accesso a questo repositorio potete ancora lasciare commenti visibili da altre persone.
issues.lock.notice_3=- Puoi sempre sbloccare questa segnalazione in futuro.
issues.unlock.notice_1=- Tuttɜ potranno commentare nuovamente questa segnalazione.
issues.unlock.notice_2=- Puoi sempre chiudere nuovamente questa segnalazione in futuro.
issues.lock.reason=Motivo per il blocco
issues.lock.title=Blocca la conversazione su questa issue.
issues.unlock.title=Sblocca la conversazione su questa issue.
issues.comment_on_locked=Non puoi commentare un problema bloccato.
issues.comment_on_locked=Non puoi commentare una segnalazione bloccata.
issues.delete=Elimina
issues.delete.title=Eliminare questo problema?
issues.delete.text=Vuoi davvero eliminare questo problema? (Questo rimuoverà permanentemente tutti i contenuti. Considera invece di chiuderlo, se vuoi tenerlo archiviato)
issues.delete.title=Eliminare la segnalazione?
issues.delete.text=Vuoi davvero eliminare la segnalazione? (Questo rimuoverà permanentemente tutti i contenuti. Considera invece di chiuderla, se vuoi tenerla archiviata)
issues.tracker=Cronografo
issues.start_tracking_short=Avvia timer
issues.start_tracking=Avvia cronografo
issues.start_tracking_history=ha iniziato a lavorare %s
issues.tracker_auto_close=Il timer verrà interrotto automaticamente una volta che il problema verrá chiuso
issues.tracking_already_started=`Hai già avviato il monitoraggio del tempo su <a href="%s">un altro problema</a>!`
issues.tracker_auto_close=Il timer verrà fermato automaticamente quando questa segnalazione verrà chiusa
issues.tracking_already_started=`Hai già avviato il monitoraggio del tempo su <a href="%s">un'altra segnalazione</a>!`
issues.stop_tracking=Ferma timer
issues.stop_tracking_history=`ha smesso di funzionare %s`
issues.cancel_tracking=Scarta
@ -1620,7 +1622,7 @@ issues.dependency.pr_closing_blockedby=Questa richiesta di modifica non può ess
issues.dependency.issue_closing_blockedby=Questa segnalazione non può essere chiusa per via delle seguenti segnalazioni
issues.dependency.issue_close_blocks=Questa segnalazione impedisce la chiusura delle seguenti segnalazioni
issues.dependency.pr_close_blocks=Questa richiesta di modifica impedisce la chiusura delle seguenti segnalazioni
issues.dependency.issue_close_blocked=Devi chiudere tutte le anomalie che bloiccano questo problema prima di chiudelo.
issues.dependency.issue_close_blocked=Vanno chiuse tutte le segnalazioni che bloccano quest'ultima, prima di poterla chiudere.
issues.dependency.pr_close_blocked=Chiudere tutte le anomalie che bloccano la richiesta di pull prima di effettaure il merge.
issues.dependency.blocks_short=Blocchi
issues.dependency.blocked_by_short=Dipende da
@ -1628,8 +1630,8 @@ issues.dependency.remove_header=Rimuovi Dipendenza
issues.dependency.issue_remove_text=Questo rimuoverà la dipendenza da questa issue. Continuare?
issues.dependency.pr_remove_text=Questo rimuoverà la dipendenza da questa pull request. Continuare?
issues.dependency.setting=Abilita le dipendenze per segnalazioni e richieste di modifica
issues.dependency.add_error_same_issue=Non si può fare dipendere un problema da se stesso.
issues.dependency.add_error_dep_issue_not_exist=Il problema dipendente non esiste.
issues.dependency.add_error_same_issue=Non si può fare dipendere una segnalazione da se stessa.
issues.dependency.add_error_dep_issue_not_exist=La segnalazione dalla quale dipende non esiste.
issues.dependency.add_error_dep_not_exist=La dipendenza non esiste.
issues.dependency.add_error_dep_exists=La dipendenza esiste già.
issues.dependency.add_error_cannot_create_circular=Non puoi creare una dipendenza con due segnalazioni che si bloccano a vicenda.
@ -1782,7 +1784,7 @@ pulls.auto_merge_newly_scheduled_comment=`ha programmato questa pull request per
pulls.auto_merge_canceled_schedule_comment=`cancella l'auto-merging di questa pull request quando tutti i testi sono superati %[1]s`
pulls.delete.title=Eliminare questa pull request?
pulls.delete.text=Vuoi davvero eliminare questo problema? (Questo rimuoverà permanentemente tutti i contenuti. Considera invece di chiuderlo, se vuoi tenerlo archiviato)
pulls.delete.text=Vuoi davvero eliminare questa richiesta di modifica? (Ciò rimuoverà permanentemente tutti i contenuti. Considera invece di chiuderla, se vuoi tenerla archiviata)
@ -1816,8 +1818,8 @@ ext_wiki.desc=Collegamento a una wiki esterna.
wiki=Wiki
wiki.welcome=Benvenuti nella Wiki.
wiki.welcome_desc=La wiki ti permette di scrivere e condividere documentazione con i collaboratori.
wiki.desc=Scrivi e condividi documentazione con i collaboratori.
wiki.welcome_desc=La wiki ti permette di scrivere e condividere documentazione con lɜ collaboranti.
wiki.desc=Scrivi e condividi documentazione con lɜ collaboranti.
wiki.create_first_page=Crea la prima pagina
wiki.page=Pagina
wiki.filter_page=Filtra pagina
@ -1915,7 +1917,7 @@ search.code_search_unavailable=Attualmente la ricerca di codice non è disponibi
settings=Impostazioni
settings.desc=Impostazioni ti permette di gestire le impostazioni del repository
settings.options=Repository
settings.collaboration=Collaboratori
settings.collaboration=Collaboranti
settings.collaboration.admin=Amministratore
settings.collaboration.write=Scrittura
settings.collaboration.read=Lettura
@ -2009,14 +2011,14 @@ settings.signing_settings=Impostazioni verifica firma
settings.trust_model=Modello di fiducia per la firma
settings.trust_model.default=Modello di fiducia predefinito
settings.trust_model.default.desc=Usa il modello di trust del repository predefinito per questa installazione.
settings.trust_model.collaborator=Collaboratore
settings.trust_model.collaborator.long=Collaboratore: Firme di fiducia da parte dei collaboratori
settings.trust_model.collaborator.desc=Le firme valide da parte dei collaboratori di questo repository saranno contrassegnate con "trusted" (sia che corrispondano al committer o meno). Altrimenti, le firme valide saranno contrassegnate con "untrusted" se la firma corrisponde al committer e "unmatched" se non.
settings.trust_model.collaborator=Collaborante
settings.trust_model.collaborator.long=Collaborante: firme di fiducia da parte dellɜ collaboranti
settings.trust_model.collaborator.desc=Le firme valide da parte dellɜ collaboranti di questo repositorio saranno contrassegnate con "fidate" (sia che corrispondano a chi ha fatto il commit o meno). Altrimenti saranno contrassegnate con "non fidate" se la firma corrisponde a chi ha fatto il commit e "senza riscontro" se non.
settings.trust_model.committer=Autorə
settings.trust_model.committer.long=Committer: firme affidabili che corrispondono ai committer (questo corrisponde a GitHub e costringerà i commit firmati di Forgejo ad avere Forgejo come committer)
settings.trust_model.collaboratorcommitter=Collaboratore+Committer
settings.trust_model.collaboratorcommitter.long=Collaboratore+Committer: Firme di fiducia da parte dei collaboratori che corrispondono al committer
settings.trust_model.collaboratorcommitter.desc=Le firme valide da parte dei collaboratori di questa repository saranno contrassegnate "fidate" se corrispondono al committer. Altrimenti le firme saranno contrassegnate con "untrusted" se la firma corrisponde al committer non corrisponde. Questo costringerà Forgejo a essere contrassegnato come committer su impegni firmati con l'effettivo committer contrassegnato come Co-Authored-By: e Co-Committed-By: nel commit. La chiave Forgejo predefinita deve corrispondere a un utente nel database.
settings.trust_model.collaboratorcommitter=Collaborante+Committente
settings.trust_model.collaboratorcommitter.long=Collaborante+Committente: firme di fiducia da parte dellɜ collaboranti che corrispondono allə committente
settings.trust_model.collaboratorcommitter.desc=Le firme valide da parte dellɜ collaboranti di questo repositorio saranno contrassegnate "fidate" se corrispondono a chi fa il commit. Altrimenti saranno contrassegnate con "non fidate" se la firma corrisponde a chi fa il commit, e "senza riscontro" se non corrisponde. Questo costringerà Forgejo a essere contrassegnato come committente sui commit firmati, con l'effettivə committente contrassegnatə come Co-Authored-By: e Co-Committed-By: nel commit. La chiave Forgejo predefinita deve corrispondere a un*utente nella base dati.
settings.wiki_delete=Elimina dati wiki
settings.wiki_delete_desc=L'eliminazione dei dati della wiki del repository è permanente e non può essere annullata.
settings.wiki_delete_notices_1=-Questa operazione eliminerà permanentemente e disabiliterà la wiki repository per %s.
@ -2025,21 +2027,21 @@ settings.wiki_deletion_success=I dati della repository wiki sono stati eliminati
settings.delete=Elimina questo progetto
settings.delete_desc=L'eliminazione di un repository è un'operazione permanente e non può essere annullata.
settings.delete_notices_1=-Questa operazione <strong>NON PUÒ</strong> essere annullata.
settings.delete_notices_2=-Questa operazione eliminerà definitivamente il repository <strong>%s</strong> inclusi codice, issue, commenti, dati wiki e impostazioni collaboratore.
settings.delete_notices_2=-Questa operazione eliminerà definitivamente il repositorio <strong>%s</strong>, inclusi codice, segnalazioni commenti, dati della wiki e impostazioni collaboranti.
settings.delete_notices_fork_1=-I fork di questo repository diventeranno indipendenti dopo la cancellazione.
settings.deletion_success=Il repository è stato eliminato.
settings.update_settings_success=Le impostazioni del repository sono state aggiornate.
settings.confirm_delete=Elimina progetto
settings.add_collaborator=Aggiungi collaboratore
settings.add_collaborator_success=Il collaboratore è stato aggiunto.
settings.add_collaborator_inactive_user=Non posso aggiungere un utente inattivo come collaboratore.
settings.add_collaborator_duplicate=Il collaboratore è già stato aggiunto a questo repository.
settings.add_collaborator=Aggiungi collaborante
settings.add_collaborator_success=Lə collaborante è statə aggiuntə.
settings.add_collaborator_inactive_user=Non posso aggiungere un*utente inattivə come collaborante.
settings.add_collaborator_duplicate=Lə collaborante è già statə aggiuntə a questo repositorio.
settings.delete_collaborator=Rimuovi
settings.collaborator_deletion=Rimuovi collaboratore
settings.collaborator_deletion_desc=Rimuovere un collaboratore revocherà l'accesso a questo repository. Continuare?
settings.remove_collaborator_success=Il collaboratore è stato rimosso.
settings.collaborator_deletion=Rimuovi collaborante
settings.collaborator_deletion_desc=Rimuovere unə collaborante ne revocherà l'accesso a questo repositorio. Continuare?
settings.remove_collaborator_success=Lə collaborante è statə rimossə.
settings.search_user_placeholder=Ricerca utente…
settings.org_not_allowed_to_be_collaborator=Le organizzazioni non possono essere aggiunte come un collaboratore.
settings.org_not_allowed_to_be_collaborator=Le organizzazioni non possono essere aggiunte come collaborante.
settings.change_team_access_not_allowed=La modifica dell'accesso al team per il repository è stato limitato al solo proprietario dell'organizzazione
settings.team_not_in_organization=Il team non è nella stessa organizzazione del repository
settings.teams=Gruppi
@ -2409,7 +2411,7 @@ actions = Azioni
commit.operations = Operazioni
issues.action_check = Seleziona/Deseleziona
issues.close = Chiudi segnalazione
issues.role.collaborator = Collaboratore
issues.role.collaborator = Collaborante
desc.sha256 = SHA256
editor.add = Aggiungi %s
editor.update = Aggiorna %s
@ -2452,7 +2454,7 @@ settings.units.overview = Panoramica
all_branches = Tutti i rami
projects.column.assigned_to = Assegnato a
pulls.cmd_instruction_hint = `Visualizza istruzioni per la riga di comando.`
settings.add_collaborator_blocked_them = Non si può aggiungere il collaboratore perché ha bloccato il proprietario del progetto.
settings.add_collaborator_blocked_them = Non si può aggiungere lə collaborante perché ha bloccato lə proprietariə del progetto.
branch.protected_deletion_failed = Il ramo "%s" è protetto. Non può essere eliminato.
branch.default_deletion_failed = Il ramo "%s" è il ramo predefinito. Non può essere eliminato.
branch.tag_collision = Il ramo "%s" non può essere creato perché esiste già un'etichetta con lo stesso nome nel repositorio.
@ -2566,7 +2568,7 @@ settings.wiki_branch_rename_success = Il nome del ramo della wiki della repo è
settings.wiki_branch_rename_failure = Impossibile normalizzare il nome del ramo della wiki della repo.
settings.confirm_wiki_branch_rename = Rinomina il ramo della wiki
settings.wiki_rename_branch_main_notices_2 = Ciò rinominerà permanentemente il ramo interno della wiki della repo di %s. Passaggi esistenti dovranno essere aggiornati.
settings.add_collaborator_blocked_our = Non si può aggiungere il collaboratore perché il proprietario del progetto lo ha bloccato.
settings.add_collaborator_blocked_our = Non si può aggiungere lə collaborante perché lə proprietariə del progetto l'ha bloccatə.
settings.webhook.replay.description_disabled = Per riprodurre questo richiamo HTTP, attivalo.
settings.event_wiki_desc = Pagina wiki creata, rinominata, modificata o rimossa.
settings.event_pull_request_review_request = Richiesta di modifica revisionata
@ -2609,7 +2611,7 @@ invisible_runes_description = `Questo file contiene caratteri Unicode invisibili
issues.filter_type.reviewed_by_you = Revisionati da te
projects.edit_success = Il progetto "%s" è stato aggiornato.
issues.keyword_search_unavailable = La ricerca per parola chiave non è attualmente disponibile. Contatta l'amministratore del sito.
issues.role.collaborator_helper = Questo utente è stato invitato a collaborare sul progetto.
issues.role.collaborator_helper = Quest*utente è statə invitatə a collaborare al progetto.
pulls.commit_ref_at = `ha fatto riferimento a questa richiesta di modifica da un commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.thread_id = ID della discussione
release.title = Titolo del rilascio
@ -2661,7 +2663,7 @@ settings.branches.add_new_rule = Aggiungi una nuova regola
settings.actions_desc = Abilita azioni del progetto
settings.new_owner_blocked_doer = Il nuovo proprietario ti ha bloccato.
settings.update_settings_no_unit = Ili progetto dovrebbe consentire almeno qualche tipo di interazione.
settings.add_collaborator_owner = Non si può aggiungere un proprietario come collaboratore.
settings.add_collaborator_owner = Non si può aggiungere unə proprietariə come collaborante.
branch.delete_desc = L'eliminazione di un ramo è definitiva. Nonostante il ramo eliminato potrebbe continuare ad esistere per un breve periodo di tempo prima di essere realmente eliminato, l'eliminazione NON PUÒ essere annullata in molti casi. Continuare?
editor.invalid_commit_mail = Email invalida per creare un commit.
editor.branch_does_not_exist = Non esiste nessun ramo "%s" nel repositorio.
@ -2780,9 +2782,9 @@ settings.matrix.access_token_helper = È consigliata l'impostazione di un accoun
issues.author.tooltip.issue = Questo utente è l'autore di questa segnalazione.
form.string_too_long = La stringa data è più lunga di %d caratteri.
project = Progetti
issues.edit.already_changed = Impossibile salvare le modifiche al problema. Sembra che il contenuto sia già stato modificato da un altro utente. Aggiornare la pagina e provare a modificare nuovamente per evitare di sovrascrivere le modifiche
issues.edit.already_changed = Impossibile salvare le modifiche alla segnalazione. Sembra che il contenuto sia già stato modificato da un*altrə utente. Aggiornare la pagina e provare a modificare nuovamente per evitare di sovrascrivere le modifiche
subscribe.pull.guest.tooltip = Accedi per iscriverti a questa richiesta di modifica.
subscribe.issue.guest.tooltip = Accedere per sottoscrivere questo problema.
subscribe.issue.guest.tooltip = Accedere per seguire questa segnalazione.
n_release_one = rilascio %s
n_release_few = rilasci %s
issues.author.tooltip.pr = Quest'utente è l'autorə di questa richiesta di modifica.
@ -2889,7 +2891,7 @@ teams.read_access_helper=I membri possono visualizzare e clonare i repository de
teams.write_access=Scrittura
teams.write_access_helper=I membri possono leggere e pushare sui repository del team.
teams.admin_access=Accesso amministratore
teams.admin_access_helper=I membri possono pullare e pushare sulle repository del team e anche aggiungere collaboratori.
teams.admin_access_helper=I membri possono prelevare e immettere sui repositori del team e aggiungere collaboranti.
teams.no_desc=Questo team non ha alcuna descrizione
teams.settings=Impostazioni
teams.owners_permission_desc=I proprietari hanno pieno accesso a <strong>tutti i repository</strong> e hanno <strong>diritti di amministratore</strong> nell'organizzazione.
@ -2902,7 +2904,7 @@ teams.delete_team_desc=Eliminare un team revocherà l'accesso al repository da p
teams.delete_team_success=Il team è stato eliminato.
teams.read_permission_desc=Questo team concede l'accesso di <strong>lettura</strong>: i membri possono visualizzare e clonare i repository del team.
teams.write_permission_desc=Questo team concede l'accesso di <strong>Scrittura</strong>: i membri possono leggere da e pushare sui repository del team.
teams.admin_permission_desc=Questo team concede l'accesso di <strong>Amministratore</strong>: i membri possono leggere da, pushare su e aggiungere collaboratori ai repository del team.
teams.admin_permission_desc=Questo team concede l'accesso di <strong>Amministrante</strong>: i membri possono leggere da, immettere in e aggiungere collaboranti ai repositori del team.
teams.create_repo_permission_desc=Inoltre, questo team concede il permesso di <strong>Creare repository</strong>: i membri possono creare nuove repository nell'organizzazione.
teams.repositories=Progetti della squadra
teams.search_repo_placeholder=Ricerca repository…
@ -3463,7 +3465,7 @@ auths.tips.gmail_settings = Impostazioni Gmail:
config.test_mail_failed = Impossibile inviare email di prova a "%s": %v
users.details = Dettagli dell'utente
monitor.queue.review_add = Revisiona / aggiungi lavoratori
self_check.no_problem_found = Nessun problema trovato.
self_check.no_problem_found = Non c'è ancora nessuna segnalazione.
self_check.database_inconsistent_collation_columns = La base di dati sta usando la collazione %s ma queste colonne usano una collazione diversa. Potrebbe causare problemi imprevisti.
monitor.queue.settings.remove_all_items = Rimuovi tutto
monitor.queue.settings.desc = Le piscine crescono dinamicamente in risposta al blocco dei lavoratori in coda.
@ -3483,11 +3485,13 @@ config.app_slogan = Slogan dell'istanza
auths.default_domain_name = Nome di dominio predefinito utilizzato per l'indirizzo e-mail
users.restricted.description = Permetti di interagire solo con i repositori e le organizzazioni in cui l'utente è aggiuntə come collaborante. Ciò evita l'accesso ai repositori pubblici di quest'istanza.
[action]
create_repo=ha creato il repository <a href="%s">%s</a>
rename_repo=repository rinominato da <code>%[1]s</code> a <a href="%[2]s">[3]s</a>
create_issue=`ha aperto la segnalazione <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`ha chiuso il problema <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`ha chiuso la segnalazione <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`ha riaperto la segnalazione <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request=`ha creato la pull request <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request=`ha chiuso la pull request <a href="%[1]s">%[3]s#%[2]s</a>`

View file

@ -1217,7 +1217,7 @@ migrate.migrating_failed_no_addr=移行に失敗しました。
migrate.github.description=github.com やその他の GitHub エンタープライズサーバーからデータを移行します。
migrate.git.description=Git サービスからリポジトリのみを移行します。
migrate.gitlab.description=gitlab.com やその他の GitLab インスタンスからデータを移行します。
migrate.gitea.description=gitea.com やその他の Gitea/Forgejo インスタンスからデータを移行します。
migrate.gitea.description=gitea.com やその他の Gitea インスタンスからデータを移行します。
migrate.gogs.description=notabug.org やその他の Gogs インスタンスからデータを移行します。
migrate.onedev.description=code.onedev.io やその他の OneDev インスタンスからデータを移行します。
migrate.codebase.description=codebasehq.com からデータを移行します。
@ -1305,6 +1305,7 @@ view_git_blame=Git Blameを表示
video_not_supported_in_browser=このブラウザはHTML5のvideoタグをサポートしていません。
audio_not_supported_in_browser=このブラウザーはHTML5のaudioタグをサポートしていません。
stored_lfs=Git LFSで保管されています
stored_annex=Git Annexで保管されています
symbolic_link=シンボリック リンク
executable_file=実行ファイル
commit_graph=コミットグラフ
@ -1328,6 +1329,7 @@ editor.upload_file=ファイルをアップロード
editor.edit_file=ファイルを編集
editor.preview_changes=変更をプレビュー
editor.cannot_edit_lfs_files=LFSのファイルはWebインターフェースで編集できません。
editor.cannot_edit_annex_files=AnnexのファイルはWebインターフェースで編集できません。
editor.cannot_edit_non_text_files=バイナリファイルはWebインターフェースで編集できません。
editor.edit_this_file=ファイルを編集
editor.this_file_locked=ファイルはロックされています

View file

@ -821,6 +821,7 @@ file_too_large=보여주기에는 파일이 너무 큽니다.
video_not_supported_in_browser=당신의 브라우저가 HTML5의 "video" 태그를 지원하지 않습니다.
audio_not_supported_in_browser=당신의 브라우저가 HTML5의 "audio" 태그를 지원하지 않습니다.
stored_lfs=Git LFS에 저장되어 있습니다
stored_annex=Git Annex에 저장되어 있습니다
commit_graph=커밋 그래프
editor.new_file=새 파일
@ -1435,6 +1436,8 @@ issues.cancel_tracking_history = `취소된 시간 기록 %s`
settings.enter_repo_name = 표시된 소유자와 저장소명을 정확하게 입력하세요:
settings.packagist_username = Packagist 사용자명
archive.title_date = 이 저장소는 %s에 보관처리되었습니다. 파일을 볼 수 있고 복제할 수도 있지만, 푸시하거나 이슈를 열거나 풀 리퀘스트를 만들 수 없습니다.
[graphs]
[org]

View file

@ -40,7 +40,7 @@ passcode=Kods
webauthn_insert_key=Jāievieto sava drošības atslēga
webauthn_sign_in=Jānospiež poga uz drošības. Ja drošības atslēgai nav pogas, tā ir atkārtoti jāievieto.
webauthn_press_button=Lūgums nospiest pogu uz savas drošības atslēgas…
webauthn_use_twofa=Izmantot divfaktoru kodu no tālruņa
webauthn_use_twofa=Izmantot divpakāpju kodu no sava tālruņa
webauthn_error=Nevar nolasīt drošības atslēgu.
webauthn_unsupported_browser=Pārlūks pašlaik nenodrošina WebAuthn.
webauthn_error_unknown=Atgadījās nezināma kļūda. Lūgums mēģināt vēlreiz.
@ -75,7 +75,7 @@ mirrors=Spoguļglabātavas
collaborative=Līdzdarbošanās
forks=Atzarojumi
activities=Aktivitāte
activities=Darbības
pull_requests=Izmaiņu pieprasījumi
issues=Pieteikumi
milestones=Atskaites punkti
@ -83,8 +83,8 @@ milestones=Atskaites punkti
ok=Labi
cancel=Atcelt
retry=Mēģināt vēlreiz
rerun=Palaist atkārtoti
rerun_all=Palaist atkārtoti visus darbus
rerun=Atkārtoti izpildīt
rerun_all=Atkārtoti izpildīt visus darbus
save=Saglabāt
add=Pievienot
add_all=Pievienot visus
@ -213,7 +213,7 @@ string.desc=Z - A
[error]
occurred=Radusies kļūda
report_message=Ja ir pārliecība, ka šī ir Forgejo nepilnība, lūgums pārbaudīt <a href="%s" target="_blank">GitHub</a>, vai tā jau nav zināma, vai izveidot jaunu pieteikumu, ja nepieciešams.
report_message=Ja ir pārliecība, ka šī ir Forgejo nepilnība, lūgums pārbaudīt <a href="%s" target="_blank">Codeberg</a>, vai tā jau nav zināma, vai izveidot jaunu pieteikumu, ja nepieciešams.
missing_csrf=Kļūdains pieprasījums: netika iesūtīta drošības pilnvara
invalid_csrf=Kļūdains pieprasījums: iesūtīta kļūdaina drošības pilnvara
not_found=Pieprasītie dati netika atrasti.
@ -221,18 +221,18 @@ network_error=Tīkla kļūda
server_internal = Iekšēja servera kļūda
[startpage]
app_desc=Viegli uzstādāms Git serviss
install=Vienkārši instalējams
app_desc=Pašmitināms Git pakalpojums bez galvassāpēm
install=Viegli uzstādīt
install_desc=Vienkārši <a target="_blank" rel="noopener noreferrer" href="%[1]s">jāpalaiž izpildāmā datne</a> vajadzīgajai sistēmai, jāizmanto <a target="_blank" rel="noopener noreferrer" href="%[2]s">Docker</a> vai jāiegūst <a target="_blank" rel="noopener noreferrer" href="%[3]s">pakotne</a>.
platform=Pieejama dažādām platformām
lightweight=Viegla
lightweight_desc=Forgejo ir miminālas prasības un to var darbināt uz nedārga Raspberry Pi datora. Ietaupi savai ierīcei resursus!
lightweight_desc=Forgejo ir zemas tehniskās prasības, un tas var darboties nedārgā Raspberry Pi. Taupām savu ierīču patērēto enerģiju!
license=Atvērtā pirmkoda
license_desc=Iegūsti <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Pievienojies mums <a target="_blank" rel="noopener noreferrer" href="%[2]s">līdzdarbojoties</a>, lai padarītu šo projektu vēl labāku! Nekautrējies un līdzdarbojies!
platform_desc = Ir apstiprināts, ka Forgejo darbojas brīvās operētājsistēmāš, piemēram, GNU/Linux un FreeBSD, kā arī ar dažādām procesoru arhitektūrām. Izvēlies to, kas patīk!
platform_desc = Ir apstiprināts, ka Forgejo darbojas brīvās operētājsistēmās, piemēram, GNU/Linux un FreeBSD, kā arī ar dažādām procesoru arhitektūrām. Izvēlies to, kas patīk!
[install]
install=Instalācija
install=Uzstādīšana
title=Sākotnējā konfigurācija
docker_helper=Ja Forgejo ir uzstādīts Docker konteinerā, lūgums izlasīt <a target="_blank" rel="noopener noreferrer" href="%s">vadlīnijas</a>, pirms tiek mainīti iestatījumi.
require_db_desc=Forgejo nepieciešams MySQL, PostgreSQL, SQLite3 vai TiDB (ar MySQL protokolu).
@ -247,11 +247,11 @@ db_schema_helper=Atstāt tukšu, lai izmantotu datubāzes noklusējumu ("public"
ssl_mode=SSL
path=Ceļš
sqlite_helper=SQLite3 datubāzes datnes ceļš.<br>Jāievada pilns ceļš, ja Forgejo tiek palaists kā sistēmas pakalpojums.
reinstall_error=Nevar instalēt datubāzē, kura jau satur Forgejo datus
reinstall_error=Tiek mēģināts uzstādīt esošā Forgejo datubāzē
reinstall_confirm_message=Atkārtota uzstādīšana ar esošu Forgejo datubāzi var izraisīt vairākas nebūšanas. Vairumā gadījumu vajadzētu izmantot esošo "app.ini", lai palaistu Forgejo. Jāapstiprina zemāk esošais, ja ir skaidrs, kas tiek darīts:
reinstall_confirm_check_1=Dati, kas šifrēti ar SECRET_KEY, kas ir norādīta app.ini datnē, var tikt pazaudēti: lietotāji nevarēs pieteikties ar 2FA/OTP, kā arī spoguļglabātavas var pārstāt darboties. Ar šīs izvēles rūtiņas atzīmēšanu tiek apstiprināts, ka pašreizējā app.ini datne satur pareizu SECRET_KEY vērtību.
reinstall_confirm_check_2=Glabātavas un iestatījumus var būt nepieciešams atkārtoti sinhronizēt. Ar šīs izvēles rūtiņas atzīmēšanu tiek apstiprināts, ka pašrocīgi tiks veikta glabātavu aizķeru un authorized_keys datnes atkārtota sinhronizēšana, kā arī tiek apstiprināts, ka tiks nodrošināts, ka glabātavas un spoguļošanas iestatījumi ir pareizi.
reinstall_confirm_check_3=Ar šo tiek apstiprināts, ka ir pilnīga pārliecība, ka Forgejo darbojas ar pareizu app.ini atrašanāš vietu un ka tiešām ir nepieciešama atkārtota uzstādīšana. Tiek apliecināts, ka iepriekšminētais var novest pie kļūmēm.
reinstall_confirm_check_3=Ar šo tiek apstiprināts, ka ir pilnīga pārliecība, ka Forgejo darbojas ar pareizu app.ini atrašanās vietu un ka tiešām ir nepieciešama atkārtota uzstādīšana. Tiek apliecināts, ka iepriekšminētais var novest pie kļūmēm.
err_empty_db_path=Nav norādīts SQLite3 datu bāzes ceļš.
no_admin_and_disable_registration=Lietotāju reģistrēšanos nevar atspējot bez pārvaldītāja konta izveidošanas.
err_empty_admin_password=Pārvaldītāja parole nevar būt tukša.
@ -267,7 +267,7 @@ repo_path=Glabātavu atrašanās vieta
repo_path_helper=Attālās Git glabātavas tiks saglabātas šajā mapē.
lfs_path=Git LFS atrašanās vieta
lfs_path_helper=Datnes, kas pievienotas Git LFS, tiks glabātas šajā mapē. Atstāt tukšu, lai atspējotu.
run_user=Lietotājus, ar kuru palaist
run_user=Lietotājs, ar kuru palaist
run_user_helper=Operētājsistēms lietotājs, ar kuru tiks palaists Forgejo. Jāņem vērā, ka šim lietotājam ir jābūt piekļuvei glabātavas atrašanās vietai.
domain=Servera domēna vārds
domain_helper=Domēns vai servera adrese.
@ -314,19 +314,19 @@ admin_name=Pārvaldītāja lietotājvārds
admin_password=Parole
confirm_password=Apstiprināt paroli
admin_email=E-pasta adrese
install_btn_confirm=Instalēt Forgejo
install_btn_confirm=Uzstādīt Forgejo
test_git_failed=Nevarēja pārbaudīt "git" komandu: %v
sqlite3_not_available=Šī Forgejo versija neatbalsta SQLite3. Lūgums lejupielādēt oficiālo bināro versiju no %s (ne 'gobuild' versiju).
invalid_db_setting=Nederīgi datu bāzes iestatījumi: %v
invalid_db_table=Datubāzes tabula "%s" ir kļūdaina: %v
invalid_repo_path=Nederīga glabātavu atrašanās vieta: %v
invalid_app_data_path=Lietojumprogrammas datu ceļš ir kļūdains: %v
run_user_not_match="Izpildīt kā lietotājam" lietotājvārds neatbilst pašreizējam lietotājam: %s -> %s
invalid_app_data_path=Lietotnes datu ceļš ir kļūdains: %v
run_user_not_match="Lietotājs, ar kuru palaist" lietotājvārds neatbilst pašreizējam lietotājam: %s -> %s
internal_token_failed=Neizdevās izveidot iekšējo pilnvaru: %v
secret_key_failed=Neizdevās izveidot drošības atslēgu: %v
save_config_failed=Neizdevās saglabāt konfigurāciju: %v
invalid_admin_setting=Pārvaldītāja konta iestatījums ir nederīgs: %v
invalid_log_root_path=Nederīgs žurnalizēšanas ceļš: %v
invalid_log_root_path=Žurnāla atrašanās vieta ir nederīga: %v
default_keep_email_private=Pēc noklusējuma slēpt e-pasta adreses
default_keep_email_private.description=Pēc noklusējuma iespējot e-pasta adreses slēpšanu jauniem lietotājiem, lai šī informāciju nenoplūstu uzreiz pēc reģistrēšanās.
default_allow_create_organization=Pēc noklusējuma ļaut apvienību izveidošanu
@ -424,7 +424,7 @@ account_activated=Konts ir aktivēts
prohibit_login=Konta darbība ir apturēta
prohibit_login_desc=Kontam ir liegts mijiedarboties ar serveri. Jāsazinās ar tā pārvaldītāju, lai atgūtu piekļuvi.
resent_limit_prompt=Nesen jau tika pieprasīts aktivēšanas e-pasta ziņojums. Lūgums uzgaidīt 3 minūtes un mēģināt vēlreiz.
has_unconfirmed_mail=Sveiciens, %s! Tev ir neapstiprināta e-pasta adrese (<b>%s</b>). Ja neesi saņēmis apstiprinājuma e-pasta ziņojumu vai ir nepieciešams nosūtīt jaunu, lūgums klikšķināt uz zemāk esošās pogas.
has_unconfirmed_mail=Sveiciens, %s! Tev ir neapstiprināta e-pasta adrese (<b>%s</b>). Ja nav saņemts apstiprinājuma e-pasta ziņojums vai ir nepieciešams nosūtīt jaunu, lūgums klikšķināt uz zemāk esošās pogas.
resend_mail=Klikšķināt šeit, lai atkārtoti nosūtītu aktivēšanas e-pasta ziņojumu
email_not_associate=Šī e-pasta adrese nav saistīta ar nevienu kontu.
send_reset_mail=Nosūtīt atkopes e-pasta ziņojumu
@ -680,6 +680,8 @@ AccessToken = Piekļuves pilnvara
To = Zara nosaukums
email_domain_is_not_allowed = Lietotāja e-pasta adreses <b>%s</b> domēna vārds ir pretrunāt ar EMAIL_DOMAIN_ALLOWLIST vai EMAIL_DOMAIN_BLOCKLIST. Jāpārliecinās, ka e-pasta adrese ir norādīta pareizi.
[user]
change_avatar=Mainīt profila attēlu…
joined_on=Pievienojās %s
@ -695,7 +697,7 @@ following_few=%d seko
follow=Sekot
unfollow=Nesekot
user_bio=Biogrāfija
disabled_public_activity=Šis lietotājs ir atslēdzies iespēju aplūkot tā aktivitāti.
disabled_public_activity=Šis lietotājs ir atspējojis darbību redzamību visiem.
email_visibility.limited=E-pasta adrese ir redzama visiem autentificētajiem lietotājiem
email_visibility.private=E-pasta adrese ir redzama tikai administratoriem
show_on_map=Rādīt šo vietu kartē
@ -736,7 +738,7 @@ social=Sociālie konti
applications=Lietotnes
orgs=Apvienības
repos=Glabātavas
delete=Dzēst kontu
delete=Izdzēst kontu
twofa=Divpakāpju pieteikšanās (TOTP)
account_link=Saistītie konti
organization=Apvienības
@ -780,7 +782,7 @@ comment_type_group_dependency=Atkarības
comment_type_group_lock=Aizslēgšanas stāvoklis
comment_type_group_review_request=Izskatīšanas pieprasījums
comment_type_group_pull_request_push=Pievienotie iesūtījumi
comment_type_group_project=Projektus
comment_type_group_project=Projekts
comment_type_group_issue_ref=Pieteikumu atsauces
saved_successfully=Iestatījumi tika sekmīgi saglabāti.
privacy=Privātums
@ -804,15 +806,15 @@ new_password=Jaunā parole
retype_new_password=Apstiprināt jauno paroli
password_incorrect=Ievadīta nepareiza pašreizējā parole.
change_password_success=Parole tika sekmīgi nomainīta. Turpmāk jāpiesakās ar savu jauno paroli.
password_change_disabled=Ārējie konti nevar mainīt paroli, izmantojot, Forgejo saskarni.
password_change_disabled=Ārējie lietotāji nevar mainīt savu paroli Forgejo tīmekļa saskarnē.
emails=E-pasta adreses
manage_emails=Pārvaldīt e-pasta adreses
manage_themes=Noklusējuma izskats
manage_openid=OpenID adreses
email_desc=Galvenā e-pasta adrese tiks izmantota paziņojumiem, paroļu atkopšanai un, ja tā nav paslēpta, Git tīmekļa darbībām.
email_desc=Galvenā e-pasta adrese tiks izmantota paziņojumiem, paroļu atkopei un, ja tā nav paslēpta, Git tīmekļa darbībām.
theme_desc=Šis izskats tiks izmantots tīmekļa saskarnei pēc pieteikšanās.
primary=Primārā
primary=Galvenā
activated=Aktivēts
requires_activation=Nepieciešama aktivēšana
primary_email=Padarīt par galveno
@ -904,7 +906,7 @@ added_on=Pievienots %s
valid_until_date=Derīgs līdz %s
valid_forever=Derīgs mūžīgi
last_used=Pēdējo reizi izmantota
no_activity=Nav nesenas aktivitātes
no_activity=Nav nesenu darbību
can_read_info=Lasīt
can_write_info=Rakstīt
key_state_desc=Šī atslēga ir izmantota pēdējo 7 dienu laikā
@ -922,17 +924,17 @@ unbind_success=Sociālā tīkla konts tika veiksmīgi noņemts.
manage_access_token=Piekļuves pilnvaras
generate_new_token=Izveidot jaunu pilnvaru
tokens_desc=Šīs pilnvaras nodrošina piekļuvi kontam ar Gitea API.
tokens_desc=Šīs pilnvaras nodrošina piekļuvi kontam ar Forgejo API.
token_name=Pilnvaras nosaukums
generate_token=Izveidot pilnvaru
generate_token_success=Jaunā pilnvara tika izveidota. Tā ir jāievieto starpliktuvē, jo tā vairs netiks rādīta.
generate_token_name_duplicate=Lietotnes nosaukums <strong>%s</strong> jau tiek izmantots. Lūgums izmantot citu.
delete_token=Dzēst
delete_token=Izdzēst
access_token_deletion=Izdzēst piekļuves pilnvaru
access_token_deletion_cancel_action=Atcelt
access_token_deletion_confirm_action=Dzēst
access_token_deletion_desc=Izdzēšot pilnvaru, lietojumprogrammām, kas to izmanto, tiks liegta piekļuve šim kontam. Šī darbība ir neatgriezeniska. Vai turpināt?
delete_token_success=Pilnvara tika izdzēsta. Lietojumprogrammām, kas izmantoja šo pilnvaru, vairs nav piekļuves kontam.
access_token_deletion_desc=Pilnvaras izdzēšana atsauks lietotņu, kas to izmanto, piekļuvi kontam. Šo darbību nevar atsaukt. Turpināt?
delete_token_success=Pilnvara tika izdzēsta. Lietotnēm, kas to izmanto, vairs nav piekļuves kontam.
repo_and_org_access=Glabātavas un apvienības piekļuve
permissions_public_only=Tikai publiskie
permissions_access_all=Visi (publiskie, privātie un ierobežotie)
@ -975,18 +977,18 @@ revoke_oauth2_grant=Atsaukt piekļuvi
revoke_oauth2_grant_description=Šīs trešās puses lietotnes piekļuves atsaukšana liegs tai piekļūt Taviem datiem. Turpināt?
revoke_oauth2_grant_success=Piekļuve sekmīgi atsaukta.
twofa_desc=Divfaktoru autentifikācija uzlabo konta drošību.
twofa_desc=Lai aizsargātu savu kontu no paroļu zādzības, var izmantot viedtālruni vai citu ierīci, lai saņemtu laikā balstītas vienreiz izmantojamas paroles ("TOTP").
twofa_recovery_tip=Ja ierīce tiks pazaudēta, būs iespējams izmantot vienreizējas izmantošanas atkopšanas atslēgu, lai atgūtu piekļuvi savam kontam.
twofa_is_enrolled=Kontam ir <strong>ieslēgta</strong> divfaktoru autentifikācija.
twofa_not_enrolled=Kontam šobrīd nav ieslēgta divfaktoru autentifikācija.
twofa_is_enrolled=Kontam šobrīd ir <strong>ieslēgta</strong> divpakāpju pieteikšanās.
twofa_not_enrolled=Kontam šobrīd nav ieslēgta divpakāpju pieteikšanās.
twofa_disable=Atspējot divpakāpju pieteikšanos
twofa_scratch_token_regenerate=Atkārtoti izveidot vienreizējas izmantošanas atkopes atslēgu
twofa_scratch_token_regenerated=Vienreizējā pilnvara tagad ir %s. Tā ir jāglabā drošā vietā, tā vairs nekad netiks rādīta.
twofa_enroll=Ieslēgt divpakāpju pieteikšanos
twofa_disable_note=Nepieciešamības gadījumā divfaktoru autentifikāciju ir iespējams atslēgt.
twofa_disable_desc=Atslēdzot divfaktoru autentifikāciju, konts vairs nebūs tik drošs. Vai turpināt?
twofa_disable_note=Ja nepieciešams, divpakāpju pieteikšanos var atslēgt.
twofa_disable_desc=Divpakāpju pieteikšanās atspējošana padarīs kontu mazāk drošu. Turpināt?
regenerate_scratch_token_desc=Ja atkopšanas atslēga ir pazaudēta vai tā jau ir izmantota, lai pieteiktos, to var atiestatīt šeit.
twofa_disabled=Divfaktoru autentifikācija tika atslēgta.
twofa_disabled=Divpakāpju pieteikšanās tika atspējota.
scan_this_image=Šis attēls ir jānolasa ar autentificēšanās lietotni:
or_enter_secret=Vai jāievada noslēpums: %s
then_enter_passcode=Pēc tam jāievada lietotnē attēlotais piekļuves kods:
@ -1007,7 +1009,7 @@ manage_account_links_desc=Šie ārējie konti ir sasaistīti ar Tavu Forgejo kon
account_links_not_available=Pašlaik nav neviena ārējā konta piesaistīta šim kontam.
link_account=Sasaistīt kontu
remove_account_link=Noņemt sasaistīto kontu
remove_account_link_desc=Sasaistītā konta noņemšana atsauks tā piekļuvi Tavam Gitea kontam. Turpināt?
remove_account_link_desc=Sasaistītā konta noņemšana atsauks tā piekļuvi Tavam Forgejo kontam. Turpināt?
remove_account_link_success=Sasaistītais konts tika noņemts.
hooks.desc=Pievienot tīmekļa aizķeres, kas izpildīsies <strong>visās piederošajās glabātavās</strong>.
@ -1016,7 +1018,7 @@ orgs_none=Nav dalības nevienā apvienībā.
repos_none=Tev nav nevienas glabātavas.
delete_account=Izdzēst savu kontu
delete_prompt=Šī darbība neatgriezeniski izdzēsīs lietotāja kontu. To <strong>NEVAR</strong> atdarīt.
delete_prompt=Šī darbība neatgriezeniski izdzēsīs lietotāja kontu. To <strong>NEVAR</strong> atsaukt.
delete_with_all_comments=Konts ir jaunāks kā %s. Lai izvairītos no spoku piebildēm, visas pieteikumu/izmaiņu pieprasījumu piebildes tiks izdzēstas kopā ar to.
confirm_delete_account=Apstiprināt izdzēšanu
delete_account_title=Izdzēst lietotāja kontu
@ -1129,7 +1131,7 @@ mirror_password_placeholder=(bez izmaiņām)
mirror_password_blank_placeholder=(nav uzstādīts)
mirror_password_help=Jānomaina lietotājvārds, lai izdzēstu saglabāto paroli.
watchers=Novērotāji
stargazers=Zvaigžņdevēji
stargazers=Zvaigžņu vērotāji
stars_remove_warning=Šī glabātava tiks izņemta no visām izlasēm.
forks=Atzarojumi
reactions_more=un vēl %d
@ -1226,7 +1228,7 @@ migrate.migrating_failed_no_addr=Pārcelšana neizdevās.
migrate.github.description=Pārcelt datus no github.com vai GitHub Enterprise servera.
migrate.git.description=Pārcelt tikai glabātavu no jebkura Git pakalpojuma.
migrate.gitlab.description=Pārcelt datus no gitlab.com vai citiem GitLab serveriem.
migrate.gitea.description=Pārcelt datus no gitea.com vai citiem Gitea/Forgejo serveriem.
migrate.gitea.description=Pārcelt datus no gitea.com vai citiem Gitea serveriem.
migrate.gogs.description=Pārcelt datus no notabug.org vai citiem Gogs serveriem.
migrate.onedev.description=Pārcelt datus no code.onedev.io vai citiem OneDev serveriem.
migrate.codebase.description=Pārcelt datus no codebasehq.com.
@ -1273,7 +1275,7 @@ clear_ref=`Notīrīt pašreizējo atsauci`
filter_branch_and_tag=Atlasīt zaru vai birku
find_tag=Atrast birku
branches=Zari
tags=Tagi
tags=Birkas
issues=Pieteikumi
pulls=Izmaiņu pieprasījumi
project_board=Projekti
@ -1291,7 +1293,7 @@ releases=Laidieni
tag=Tags
released_this=izveidoja šo laidienu
tagged_this=izveidoja tagu revīzijai
file.title=%s atzarā %s
file.title=%s zarā %s
file_raw=Neapstrādāts
file_history=Vēsture
file_view_source=Skatīt avotu
@ -1314,6 +1316,7 @@ view_git_blame=Apskatīt Git izmaiņu veicējus
video_not_supported_in_browser=Pārlūks neatbalsta HTML5 tagu "video".
audio_not_supported_in_browser=Pārlūks neatbalsta HTML5 tagu "audio".
stored_lfs=Saglabāts Git LFS
stored_annex=Saglabāts Git Annex
symbolic_link=Simboliska saite
executable_file=Izpildāma datne
commit_graph=Iesūtījumu karte
@ -1337,6 +1340,7 @@ editor.upload_file=Augšupielādēt datni
editor.edit_file=Labot datni
editor.preview_changes=Priekšskatīt izmaiņas
editor.cannot_edit_lfs_files=LFS datnes tīmekļa saskarnē nevar labot.
editor.cannot_edit_annex_files=Annex datnes tīmekļa saskarnē nevar labot.
editor.cannot_edit_non_text_files=Binārās datnes tīmekļa saskarnē nevar labot.
editor.edit_this_file=Labot datni
editor.this_file_locked=Datne ir slēgta
@ -1346,7 +1350,7 @@ editor.delete_this_file=Izdzēst datni
editor.must_have_write_access=Ir jābūt rakstīšanas piekļuvei, lai šajā datnē veiktu vai ierosinātu izmaiņas.
editor.file_delete_success=Datne "%s" tika izdzēsta.
editor.name_your_file=Jāpiešķir datnei nosaukums…
editor.filename_help=Mapi var pievienot, ja ieraksta tās nosaukumu, aiz kura ir slīpsvītra ('/'). Mapi var noņemt ar atpakaļatkāpes taustiņa nospiešanu ievades lauka sākumā.
editor.filename_help=Mapi var pievienot, ja ieraksta tās nosaukumu, aiz kura ir slīpsvītra ("/"). Mapi var noņemt ar atpakaļatkāpes taustiņa nospiešanu ievades lauka sākumā.
editor.or=vai
editor.cancel_lower=Atcelt
editor.commit_signed_changes=Iesūtīt parakstītas izmaiņas
@ -1360,7 +1364,7 @@ editor.patch=Pielietot ielāpu
editor.patching=Pielieto ielāpu:
editor.fail_to_apply_patch=`Neizdevās pielietot ielāpu "%s"`
editor.new_patch=Jauns ielāps
editor.commit_message_desc=Pievienot neobligātu paplašinātu aprakstu…
editor.commit_message_desc=Pēc izvēles var pievienot paplašinātu aprakstu…
editor.signoff_desc=Iesūtījuma žurnāla ziņojumam pievienot noslēgumu Signed-off-by ar iesūtītāju.
editor.commit_directly_to_this_branch=Iesūtīt uzreiz zarā <strong class="%[2]s">%[1]s</strong>.
editor.create_new_branch=Izveidot šim iesūtījumam <strong>jaunu zaru</strong> un uzsākt izmaiņu pieprasījumu.
@ -1437,7 +1441,7 @@ ext_issues.desc=Saite uz ārējo problēmu sekotāju.
projects=Projekti
projects.desc=Pārvaldīt pieteikumus un izmaiņu pieprasījumus projektos.
projects.description=Apraksts (neobligāts)
projects.description=Apraksts (pēc izvēles)
projects.description_placeholder=Apraksts
projects.create=Izveidot projektu
projects.title=Nosaukums
@ -1597,8 +1601,8 @@ issues.opened_by_fake=%[2]s atvēra %[1]s
issues.closed_by_fake=%[2]s aizvēra %[1]s
issues.previous=Iepriekšējā
issues.next=Nākamā
issues.open_title=Atvērta
issues.closed_title=Slēgta
issues.open_title=Atvērti
issues.closed_title=Aizvērti
issues.draft_title=Melnraksts
issues.num_comments_1=%d piebilde
issues.num_comments=%d piebildes
@ -1652,7 +1656,7 @@ issues.save=Saglabāt
issues.label_title=Nosaukums
issues.label_description=Apraksts
issues.label_color=Krāsa
issues.label_exclusive=Ekskluzīvs
issues.label_exclusive=Sevišķa
issues.label_archive=Arhivēt iezīmi
issues.label_archived_filter=Rādīt arhivētās iezīmes
issues.label_archive_tooltip=Arhivētās iezīmes pēc noklusējuma netiek iekļautas ieteikumos, kad meklē pēc iezīmes.
@ -1728,7 +1732,7 @@ issues.error_modifying_due_date=Neizdevās izmainīt izpildes termiņu.
issues.error_removing_due_date=Neizdevās noņemt izpildes termiņu.
issues.push_commit_1=pievienoja %d iesūtījumu %s
issues.push_commits_n=pievienoja %d iesūtījumus %s
issues.force_push_codes=`veica uzspiestu aizgādāšanu zarā %[1]s no <a class="%[7]s" href="%[3]s"><code>%[2]s</code></a> to <a class="%[7]s" href="%[5]s"><code>%[4]s</code></a> %[6]s`
issues.force_push_codes=`veica uzspiestu aizgādāšanu zarā %[1]s no <a class="%[7]s" href="%[3]s"><code>%[2]s</code></a> uz <a class="%[7]s" href="%[5]s"><code>%[4]s</code></a> %[6]s`
issues.force_push_compare=Salīdzināt
issues.due_date_form=dd.mm.gggg.
issues.due_date_form_add=Pievienot izpildes termiņu
@ -1868,7 +1872,7 @@ pulls.is_checking=Notiek apvienošanas nesaderību pārbaude. Pēc brīža jām
pulls.is_ancestor=Zars jau ir pilnībā iekļauts mērķa zarā. Nav izmaiņu, ko apvienot.
pulls.is_empty=Šī zara izmaiņas jau ir mērķa zarā. Šis būs tukšs iesūtījums.
pulls.required_status_check_failed=Dažas no nepieciešamajām pārbaudēm bija nesekmīgas.
pulls.required_status_check_missing=Trūkst dažu obligāto pārbaužu.
pulls.required_status_check_missing=Trūkst dažu nepieciešamo pārbaužu.
pulls.required_status_check_administrator=Kā pārvaldītājs joprojām vari iekļaut šo izmaiņu pieprasījumu.
pulls.blocked_by_approvals=Šim izmaiņu pieprasījumam vēl nav pietiekami daudz apstiprinājumu. Nodrošināti %d no %d apstiprinājumiem.
pulls.blocked_by_rejection=Šim izmaiņu pieprasījumam oficiālais izskatītājs ir pieprasījis labojumus.
@ -1895,7 +1899,7 @@ pulls.no_merge_wip=Šo izmaiņu pieprasījumu nav iespējams iekļaut, jo tas ir
pulls.no_merge_not_ready=Šis izmaiņu pieprasījums nav gatavs apvienošanai, jāpārbauda izskatīšanas stāvoklis un stāvokļa pārbaudes.
pulls.no_merge_access=Nav pilnvaru, lai iekļautu šo izmaiņu pieprasījumu.
pulls.merge_pull_request=Izveidot apvienošanas iesūtījumu
pulls.rebase_merge_pull_request=Pārbāzēt un pārtīt uz priekšu
pulls.rebase_merge_pull_request=Pārbāzēt, tad pārlēkt
pulls.rebase_merge_commit_pull_request=Pārbāzēt, tad izveidot apvienošanas iesūtījumu
pulls.squash_merge_pull_request=Izveidot saspiešanas iesūtījumu
pulls.merge_manually=Pašrocīgi apvienots
@ -1920,7 +1924,7 @@ pulls.status_checks_success=Visas pārbaudes bija sekmīgas
pulls.status_checks_warning=Dažas pārbaudes ziņoja brīdinājumus
pulls.status_checks_failure=Dažas pārbaudes neizdevās izpildīt
pulls.status_checks_error=Dažu pārbaužu izpildes laikā, radās kļūdas
pulls.status_checks_requested=Obligāts
pulls.status_checks_requested=Nepieciešama
pulls.status_checks_details=Papildu informācija
pulls.status_checks_hide_all=Paslēpt visas pārbaudes
pulls.status_checks_show_all=Parādīt visas pārbaudes
@ -1963,7 +1967,7 @@ milestones.new=Jauns atskaites punkts
milestones.closed=Aizvērts %s
milestones.update_ago=Atjaunināts %s
milestones.no_due_date=Bez termiņa
milestones.open=Atvērta
milestones.open=Atvērts
milestones.close=Aizvērt
milestones.new_subheader=Atskaites punkti var palīdzēt pārvaldīt pieteikumus un sekot to attīstībai.
milestones.completeness=Pabeigtni <strong>%d%%</strong>
@ -2033,7 +2037,7 @@ wiki.last_updated=Pēdējo reizi labota %s
wiki.page_name_desc=Jāievada šīs vikivietnes lapas nosaukums. Daži īpašie nosaukumi ir: "Home", "_Sidebar" un "_Footer".
wiki.original_git_entry_tooltip=Rādīt sākotnējo Git datni, nevis izmantot draudzīgo saiti.
activity=Aktivitāte
activity=Notikumi
activity.period.filter_label=Laika periods:
activity.period.daily=1 diena
activity.period.halfweekly=3 dienas
@ -2065,10 +2069,10 @@ activity.title.issues_1=%d pieteikumu
activity.title.issues_n=%d pieteikumus
activity.title.issues_closed_from=%s aizvērts no %s
activity.title.issues_created_by=%s izveidoja %s
activity.closed_issue_label=Slēgta
activity.closed_issue_label=Aizvēra
activity.new_issues_count_1=Jauns pieteikums
activity.new_issues_count_n=Jauni pieteikumi
activity.new_issue_label=Atvērta
activity.new_issue_label=Atvēra
activity.title.unresolved_conv_1=%d neatrisināta saruna
activity.title.unresolved_conv_n=%d neatrisinātu apspriešanu
activity.unresolved_conv_desc=Šie nesen mainītie pieteikumi un izmaiņu pieprasījumi vēl nav atrisināti.
@ -2085,9 +2089,9 @@ activity.git_stats_pushed_1=aizgādāja
activity.git_stats_pushed_n=aizgādāja
activity.git_stats_commit_1=%d iesūtījumu
activity.git_stats_commit_n=%d iesūtījumus
activity.git_stats_push_to_branch=atzarā %s un
activity.git_stats_push_to_branch=zarā %s un
activity.git_stats_push_to_all_branches=visos zaros.
activity.git_stats_on_default_branch=Atzarā %s,
activity.git_stats_on_default_branch=Zarā %s,
activity.git_stats_file_1=%d datne
activity.git_stats_file_n=%d datnes
activity.git_stats_files_changed_1=tika izmainīts
@ -2207,7 +2211,7 @@ settings.convert_notices_1=Šī darbība pārveidos spoguļglabātavu par parast
settings.convert_confirm=Pārveidot glabātavu
settings.convert_succeed=Spoguļglabātava tika pārveidota par parastu glabātavu.
settings.convert_fork=Pārveidot par parastu glabātavu
settings.convert_fork_desc=Šo atzarojumu var pārveidot par parastu glabātavu. To nevar atdarīt.
settings.convert_fork_desc=Šo atzarojumu var pārveidot par parastu glabātavu. To nevar atsaukt.
settings.convert_fork_notices_1=Šī darbība pārveidos atzarojumu par parastu glabātavu, un tā nav atsaucama.
settings.convert_fork_confirm=Pārveidot glabātavu
settings.convert_fork_succeed=Atzarojums tika pārveidots par parastu glabātavu.
@ -2406,13 +2410,13 @@ settings.deploy_key_deletion=Noņemt izvietošanas atslēgu
settings.deploy_key_deletion_desc=Izvietošanas atslēgas noņemšana atsauks tās piekļuvi šai glabātavai. Turpināt?
settings.deploy_key_deletion_success=Izvietošanas atslēga tika noņemta.
settings.branches=Zari
settings.protected_branch=Zaru aizsardzība
settings.protected_branch=Zaru aizsargāšana
settings.protected_branch.save_rule=Saglabāt kārtulu
settings.protected_branch.delete_rule=Izdzēst kārtulu
settings.protected_branch_can_push=Atļaut izmaiņu nosūtīšanu?
settings.protected_branch_can_push_yes=Jūs varat nosūtīt izmaiņas
settings.protected_branch_can_push_no=Jūs nevarat nosūtīt izmaiņas
settings.branch_protection=Zara "<b>%s</b>" aizsardzības kārtulas
settings.branch_protection=Zara "<b>%s</b>" aizsargāšanas kārtulas
settings.protect_this_branch=Iespējot atzara aizsardzību
settings.protect_this_branch_desc=Neļauj atzara dzēšanu, kā arī ierobežo izmaiņu iesūtīšanu un sapludināšanu šajā atzarā.
settings.protect_disable_push=Atspējot aizgādāšanu
@ -2433,7 +2437,7 @@ settings.protect_merge_whitelist_committers_desc=Atļaut tikai noteiktiem lietot
settings.protect_merge_whitelist_users=Lietotāji, kuri var veikt apvienošanu
settings.protect_merge_whitelist_teams=Komandas, kuras var veikt apvienošanu
settings.protect_check_status_contexts=Iespējot stāvokļa pārbaudi
settings.protect_status_check_patterns=Stāvokļa pārbaudes paraugi
settings.protect_status_check_patterns=Stāvokļa pārbaužu paraugi
settings.protect_status_check_patterns_desc=Jāievada paraugi, lai norādītu, kurām stāvokļa pārbaudēm sekmīgi jāizpildās, pirms zari var tikt iekļauti zarā, kas atbilst šai kārtulai. Katrā rindā ir norādāms viens paraugs. Paraugi nevar būt tukši.
settings.protect_check_status_contexts_desc=Pirms apvienošanas ir nepieciešama sekmīga stāvokļa pārbaužu izpilde. Kad iespējots, iesūtījumiem vispirms jābūt aizgādātiem citā zarā, tad pēc stāvokļa pārbaužu sekmīgas izpildes iekļautiem vai aizgādātiem tieši zarā, kas atbilst šai kārtulai. Ja nav atbilstošu kontekstu, pēdējam iesūtījumam jābūt sekmīgam neatkarīgi no konteksta.
settings.protect_check_status_contexts_list=Stāvokļa pārbaudes, kas šajā glabātavā atrastas pēdējās nedēļas laikā
@ -2459,11 +2463,11 @@ settings.protect_unprotected_file_patterns=Neaizsargāto datņu paraugs (vairāk
settings.protect_unprotected_file_patterns_desc=Neaizsargātās datnes, kuras ir ļauts izmainīt tiešā veidā, apejot aizgādāšanas ierobežojumu, ja lietotājam ir rakstīšanas piekļuve. Vairāki paraugi ir atdalāmi ar semikolu (";"). Paraugu pierakstu skatīt <a href='%[1]s'>%[2]s</a> dokumentācijā. Piemēri: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.add_protected_branch=Iespējot aizsargāšanu
settings.delete_protected_branch=Atspējot aizsargāšanu
settings.update_protect_branch_success=Zara aizsardzības kārtula "%s" tika atjaunināta.
settings.remove_protected_branch_success=Zara aizsardzības kārtula "%s" tika noņemta.
settings.remove_protected_branch_failed=Zara aizsardzības kārtulas "%s" noņemšana neizdevās.
settings.protected_branch_deletion=Izdzēst zara aizsardzību
settings.protected_branch_deletion_desc=Zara aizsardzības atspējošana ļauj lietotājiem ar rakstīšanas atļauju aizgādāt izmaiņas uz zaru. Turpināt?
settings.update_protect_branch_success=Zara aizsargāšanas kārtula "%s" tika atjaunināta.
settings.remove_protected_branch_success=Zara aizsargāšanas kārtula "%s" tika noņemta.
settings.remove_protected_branch_failed=Zara aizsargāšanas kārtulas "%s" noņemšana neizdevās.
settings.protected_branch_deletion=Izdzēst zara aizsargāšanu
settings.protected_branch_deletion_desc=Zara aizsargāšanas atspējošana ļauj lietotājiem ar rakstīšanas atļauju aizgādāt zarā izmaiņas. Turpināt?
settings.block_rejected_reviews=Liegt apvienošanu, ja izskatīšana ir beigusies ar noraidīšanu
settings.block_rejected_reviews_desc=Apvienošana nebūs iespējama, kad oficiālie izskatītāji ir pieprasījuši izmaiņas, pat ja ir pietiekami daudz apstiprinājumu.
settings.block_on_official_review_requests=Liegt apvienošanu, ja ir oficiāli izskatīšanas pieprasījumi
@ -2479,7 +2483,7 @@ settings.edit_protected_branch=Labot
settings.protected_branch_required_rule_name=Jānorāda kārtulas nosaukums
settings.protected_branch_duplicate_rule_name=Šai zaru kopai jau pastāv kārtula
settings.protected_branch_required_approvals_min=Pieprasīto izskatīšanu skaits nevar būt mazāks par nulli.
settings.tags=Tagi
settings.tags=Birkas
settings.tags.protection=Birku aizsargāšana
settings.tags.protection.pattern=Birku paraugs
settings.tags.protection.allowed=Atļauts
@ -2601,7 +2605,7 @@ diff.hide_file_tree=Paslēpt datņu koku
releases.desc=Projekta versiju un lejupielāžu pārraudzīšana.
release.releases=Laidieni
release.detail=Informācija par laidienu
release.tags=Tagi
release.tags=Birkas
release.new_release=Jauns laidiens
release.draft=Melnraksts
release.prerelease=Pirmsizlaide
@ -2843,7 +2847,7 @@ pulls.fast_forward_only_merge_pull_request = Tikai pārlēkšana
settings.federation_apapiurl = Šīs glabātavas federācijas URL. Tas ir jāievieto starpliktuvē un jāielīmē citas glabātavas federācijas iestatījumos kā sekojošas glabātavas URL.
settings.federation_following_repos = Sekojošu glabātavu URL. Atdalīti ar ";", bez atstarpes.
settings.add_webhook.invalid_path = Ceļš nedrīkst saturēt daļu, kas ir "." vai "..", vai tukša virkne. Tas nevar sākties vai beigties ar slīpsvītru.
settings.protect_new_rule = Izveidot jaunu zaru aizsardzības kārtulu
settings.protect_new_rule = Izveidot jaunu zaru aizsargāšanas kārtulu
settings.sourcehut_builds.secrets_helper = Dot darbam piekļuvi būvēšanas noslēpumiem (nepieciešams nodrošināt SECRETS:RO)
release.asset_external_url = Ārējais URL
release.add_external_asset = Pievienot ārēju līdzekli
@ -2866,6 +2870,8 @@ issues.reaction.alt_add = Pievienot piebildei %[1] reakcijas.
issues.context.menu = Piebildes izvēlne
release.summary_card_alt = Laidiena "%s" apkopojuma kartīte glabātavā %s
editor.commit_email = Iesūtījuma e-pasta adrese
[graphs]
component_loading=Ielādē %s...
component_loading_failed=Nevarēja ielādēt %s
@ -3039,7 +3045,7 @@ dashboard.task.unknown=Nezināms uzdevums: %[1]s
dashboard.cron.started=Uzsākts Cron: %[1]s
dashboard.cron.process=Cron: %[1]s
dashboard.cron.cancelled=Cron: %[1]s atcelts: %[3]s
dashboard.cron.error=Kļūda Cron: %s: %[3]s
dashboard.cron.error=Cron kļūda: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s pabeigts
dashboard.delete_inactive_accounts=Izdzēst visus neaktivētos kontus
dashboard.delete_inactive_accounts.started=Ir uzsākts visu neaktivēto kontu izdzēšanas uzdevums.
@ -3113,7 +3119,7 @@ users.activated=Aktivēts
users.admin=Pārvaldītājs
users.restricted=Ierobežots
users.reserved=Aizņemts
users.bot=Bots
users.bot=Robotprogrammatūra
users.remote=Attāls
users.2fa=2FA
users.repos=Glabātavas
@ -3164,7 +3170,7 @@ users.list_status_filter.not_2fa_enabled=2FA atspējota
users.details=Lietotāja informācija
emails.email_manage_panel=Pārvaldīt lietotāju e-pasta adreses
emails.primary=Primārais
emails.primary=Galvenā
emails.activated=Aktivēta
emails.filter_sort.email=E-pasts
emails.filter_sort.email_reverse=E-pasta adrese (pretēji alfabētiski)
@ -3237,7 +3243,7 @@ auths.bind_password=Saistīšanas parole
auths.user_base=Lietotāju meklēšanas pamatnosacījumi
auths.user_dn=Lietotāja DN
auths.attribute_username=Lietotājvārda atribūts
auths.attribute_username_placeholder=Atstāt tukšu, lai izmantotu Gitea ievadīto lietotājvārdu.
auths.attribute_username_placeholder=Atstāt tukšu, lai izmantotu Forgejo ievadīto lietotājvārdu.
auths.attribute_name=Vārda atribūts
auths.attribute_surname=Uzvārda atribūts
auths.attribute_mail=E-pasta atribūts
@ -3290,7 +3296,7 @@ auths.oauth2_required_claim_name=Nepieciešamās prasības nosaukums
auths.oauth2_required_claim_name_helper=Šis nosaukums ir iestatāms, lai ierobežotu pieteikšanos no šī avota lietotājiem, kuriem ir prasība ar šādu nosaukumu
auths.oauth2_required_claim_value=Nepieciešamās prasības vērtība
auths.oauth2_required_claim_value_helper=Šī vērtība ir iestatāma, lai ierobežotu pieteikšanos no šī avota lietotājiem, kuriem ir prasība ar šādu nosaukumu un vērtību
auths.oauth2_group_claim_name=Prasības nosaukums, kas nodrošina grupu nosaukumus šim avotam. (Neobligāts)
auths.oauth2_group_claim_name=Prasības nosaukums, kas šim avotam nodrošina grupu nosaukumus. (Pēc izvēles)
auths.oauth2_admin_group=Kopas prasības vērtība pārvaldītājiem. (Izvēles - nepieciešams augstāk esošais prasības nosaukums)
auths.oauth2_restricted_group=Grupas prasības vērtība ierobežotajiem lietotājiem. (Izvēles - nepieciešams augstāk esošais prasības nosaukums)
auths.oauth2_map_group_to_team=Sasaistīt pieprasītās kopas ar apvienības komandām. (Izvēles - nepieciešams augstāk esošais prasības nosaukums)
@ -3308,7 +3314,7 @@ auths.sspi_default_language=Lietotāju noklusējuma valoda
auths.sspi_default_language_helper=Noklusējuma valoda lietotājiem, kurus automātiski izveido SSPI autentificēšanās veids. Atstāt tukšu, ja ir vēlams, lai valoda tiktu noteikta automātiski.
auths.tips=Padomi
auths.tips.oauth2.general=OAuth2 autentificēšanās
auths.tips.oauth2.general.tip=Kad tiek reģistrēta jauna OAuth2 autentifikācija, atzvanīšanas/pārvirzīšanas URL vajadzētu būt:
auths.tips.oauth2.general.tip=Kad tiek reģistrēta jauna OAuth2 autentificēšana, atzvanīšanas/pārvirzīšanas URL vajadzētu būt:
auths.tip.oauth2_provider=OAuth2 nodrošinātājs
auths.tip.bitbucket=Jāizveido jauns OAuth patērētājs %s un jāpievieno atļauja "Account" - "Read"
auths.tip.nextcloud=Reģistrēt jaunu OAuth patērētāju savā serverī var izvēlnē "Iestatījumi -> Drošība -> OAuth 2.0 klients"
@ -3320,7 +3326,7 @@ auths.tip.google_plus=OAuth2 klienta piekļuves dati ir iegūstami Google API ko
auths.tip.openid_connect=Jāizmanto OpenID savienošanās atklāšanas URL (<server>/.well-known/openid-configuration), lai norādītu galapunktus
auths.tip.twitter=Jādodas uz %s, jāizveido lietotne un jānodrošina, ka iespēja "Allow this application to be used to Sign in with Twitter" ir iespējota
auths.tip.discord=Jāizveido jauna lietotne %s
auths.tip.gitea=Pievienot jaunu OAuth2 lietojumprogrammu. Dokumentācija ir pieejama %s
auths.tip.gitea=Pievienot jaunu OAuth2 lietotni. Norādes ir atrodamas %s
auths.tip.yandex=%s jāizveido jauna lietotne. Sadaļā "Yandex.Passport API" jāatlasa šīs atļaujas: "Access to email address", "Access to user avatar" un "Access to username, first name and surname, gender"
auths.tip.mastodon=Jāievada pielāgota Mastodon servera URL, ar kuru vēlies autentificēties (vai jāizmanto noklusējuma)
auths.edit=Labot autentificēšanas avotu
@ -3347,7 +3353,7 @@ config.custom_file_root_path=Pielāgoto datņu pamata ceļš
config.domain=Servera domēna vārds
config.offline_mode=Bezsaistes režīms
config.disable_router_log=Atspējot maršrutētāja žurnālu
config.run_user=Lietotājs, ar kuru palaists
config.run_user=Lietotājs, ar kuru palaist
config.run_mode=Palaišanas veids
config.git_version=Git versija
config.app_data_path=Lietotnes datu ceļš
@ -3605,7 +3611,7 @@ future=nākotnē
1y=1 gada
seconds=%d sekundēm
minutes=%d minūtēm
hours=%d stundām
hours=%d stundās
days=%d dienas
weeks=%d nedēļām
months=%d mēnešiem
@ -3655,7 +3661,7 @@ desc=Pārvaldīt glabātavas pakotnes.
empty=Pašlaik šeit nav nevienas pakotnes.
empty.documentation=Papildu informācija par pakotņu reģistru ir pieejama <a target="_blank" rel="noopener noreferrer" href="%s">dokumentācijā</a>.
empty.repo=Šeit netiek parādīta augšupielādēta pakotne? Jādodas uz <a href="%[1]s">pakotņu iestatījumiem</a> un jāsasaista tā ar šo glabātavu.
registry.documentation=Vairāk informācija par %s reģistru ir pieejama <a target="_blank" rel="noopener noreferrer" href="%s">dokumentācijā</a>.
registry.documentation=Vairāk informācijas par %s reģistru ir <a target="_blank" rel="noopener noreferrer" href="%s">dokumentācijā</a>.
filter.type=Veids
filter.type.all=Visas
filter.no_result=Pēc norādītajiem kritērijiem nekas netika atrasts.
@ -3663,7 +3669,7 @@ filter.container.tagged=Ar atzīmi
filter.container.untagged=Bez atzīmes
published_by=Publicēja <a href="%[2]s">%[3]s</a> %[1]s
published_by_in=<a href="%[2]s">%[3]s</a> laida klajā %[1]s <a href="%[4]s"><strong>%[5]s</strong></a>
installation=Instalācija
installation=Uzstādīšana
about=Par šo pakotni
requirements=Prasības
dependencies=Atkarības
@ -3696,7 +3702,7 @@ composer.install=Lai uzstādīt pakotni ar Composer, jāizpilda šī komanda:
composer.dependencies=Atkarības
composer.dependencies.development=Izstrādes atkarības
conan.details.repository=Glabātava
conan.registry=Šis reģistrs ir uzstādāms komandrindā:
conan.registry=Šis reģistra uzstādīšana komandrindā:
conan.install=Lai uzstādītu pakotni ar Conan, jāizpilda šī komanda:
conda.registry=Izveidot šo reģistru kā Conda glabātavu datnē <code>.condarc</code>:
conda.install=Lai uzstādītu pakotni ar Conda, jāizpilda šī komanda:
@ -3711,7 +3717,7 @@ container.labels.key=Atslēga
container.labels.value=Vērtība
cran.registry=Iestatīt šo reģistru datnē <code>Rprofile.site</code>:
cran.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
debian.registry=Šis reģistrs ir uzstādāms komandrindā:
debian.registry=Šis reģistra uzstādīšana komandrindā:
debian.registry.info=No zemāk esošā saraksta jāizvēlas $distribution un $component.
debian.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
debian.repository=Glabātavas informācija
@ -3719,14 +3725,14 @@ debian.repository.distributions=Distribūcijas
debian.repository.components=Komponentes
debian.repository.architectures=Arhitektūras
generic.download=Lejupielādēt pakotni, izmantojot, komandrindu:
go.install=Instalēt pakotni no komandrindas:
helm.registry=Šis reģistrs ir uzstādāms komandrindā:
helm.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu:
go.install=Uzstādīt pakotni komandrindā:
helm.registry=Šī reģistra uzstādīšana komandrindā:
helm.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
maven.registry=Iestatīt šo reģistru sava projekta datnē <code>pom.xml</code>:
maven.install=Lai izmantotu pakotni, datnes <code>pom.xml</code> sadaļā <code>dependencies</code> jāievieto šīs rindas:
maven.install2=Jāizpilda komandrindā:
maven.download=Jāizpilda komandrindā, lai lejupielādētu šo atkarību:
nuget.registry=Šis reģistrs ir uzstādāms komandrindā:
nuget.registry=Šī reģistra uzstādīšana komandrindā:
nuget.install=Lai uzstādītu pakotni ar NuGet, jāizpilda šī komanda:
nuget.dependency.framework=Mērķa ietvars
npm.registry=Iestatīt šo reģistru sava projekta datnē <code>.npmrc</code>:
@ -3740,7 +3746,7 @@ npm.details.tag=Tags
pub.install=Lai uzstādītu pakotni ar Dart, jāizpilda šī komanda:
pypi.requires=Nepieciešams Python
pypi.install=Lai uzstādītu pakotni ar pip, jāizpilda šī komanda:
rpm.registry=Šis reģistrs ir uzstādāms komandrindā:
rpm.registry=Šī reģistra uzstādīšana komandrindā:
rpm.distros.redhat=uz RedHat balstītās operētājsistēmās
rpm.distros.suse=uz SUSE balstītās operētājsistēmās
rpm.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
@ -3752,7 +3758,7 @@ rubygems.dependencies.runtime=Izpildlaika atkarības
rubygems.dependencies.development=Izstrādes atkarības
rubygems.required.ruby=Nepieciešamā Ruby versija
rubygems.required.rubygems=Nepieciešamā RubyGem versija
swift.registry=Šis reģistrs ir uzstādāms komandrindā:
swift.registry=Šī reģistra uzstādīšana komandrindā:
swift.install=Pakotne jāpievieno datnē <code>Package.swift</code>:
swift.install2=vai jāpievieno tā Gemfile:
vagrant.install=Lai pievienotu Vagrant kasti, jāizpilda šī komanda:
@ -3762,7 +3768,7 @@ settings.link.select=Atlasīt glabātavu
settings.link.button=Atjaunināt glabātavas saiti
settings.link.success=Glabātavas saite tika sekmīgi atjaunināta.
settings.link.error=Neizdevās atjaunināt glabātavas saiti.
settings.delete=Dzēst pakotni
settings.delete=Izdzēst pakotni
settings.delete.description=Pakotne tiks neatgriezeniski izdzēsta.
settings.delete.notice=Tiks izdzēsta pakotne %s (%s). Šī darbība ir neatgriezeniska. Tiešām turpināt?
settings.delete.success=Pakotne tika izdzēsta.
@ -3888,14 +3894,14 @@ runners.reset_registration_token=Atiestatīt reģistrācijas pilnvaru
runners.reset_registration_token_success=Izpildītāja reģistrācijas pilnvara tika sekmīgi atiestatīta
runs.all_workflows=Visas darbplūsmas
runs.commit=Iesūtījums
runs.commit=Iesūtījumu
runs.scheduled=Ieplānots
runs.pushed_by=aizgādāja
runs.invalid_workflow_helper=Darbplūsmas konfigurācijas datne ir nederīga. Lūgums pārbaudīt konfigurācijas datni: %s
runs.no_matching_online_runner_helper=Nav pieejami izpildītāji, kas atbilstu šai iezīmei: %s
runs.actor=Aktors
runs.no_matching_online_runner_helper=Nav tiešsaistē esošu izpildītāju, kas atbilstu iezīmei: %s
runs.actor=Izraisītājs
runs.status=Statuss
runs.actors_no_select=Visi aktori
runs.actors_no_select=Visi izraisītāji
runs.status_no_select=Visi stāvokļi
runs.no_results=Netika atrasts nekas atbilstošs.
runs.no_workflows=Vēl nav nevienas darbplūsmas.
@ -3915,7 +3921,7 @@ variables.management=Pārvaldīt mainīgos
variables.creation=Pievienot mainīgo
variables.none=Vēl nav neviena mainīgā.
variables.deletion=Noņemt mainīgo
variables.deletion.description=Mainīgā noņemšana ir neatgriezeniska un nav atsaucama. Vai turpināt?
variables.deletion.description=Mainīgā noņemšana ir neatgriezeniska un nav atsaucama. Turpināt?
variables.description=Mainīgie tiks padoti noteiktām darbībām, un citādāk tos nevar nolasīt.
variables.id_not_exist=Mainīgais ar identifikatoru %d nepastāv.
variables.edit=Labot mainīgo
@ -3929,7 +3935,7 @@ variables.update.success=Mainīgais tika labots.
runs.workflow = Darbplūsma
runs.no_job_without_needs = Darbplūsmā ir jābūt vismaz vienam darbam bez atkarībām.
runs.no_job = Darbplūsmā ir jābūt vismaz vienam darbam
runs.no_workflows.help_write_access = Nav skaidrs, kā sākt izmantot Forgejo Actions? Jāieskatās <a target="_blank" rel="noopener noreferrer" href="%s">ātro ievadu lietotāja dokumentācijā</a>, lai uzrakstītu savu pirmo darbplūsmu, tad <a target="_blank" rel="noopener noreferrer" href="%s">jāiestata Forgejo izpildītājs</a>, lai izpildītu savus darbus.
runs.no_workflows.help_write_access = Nav skaidrs, kā sākt izmantot Forgejo Actions? Jāieskatās <a target="_blank" rel="noopener noreferrer" href="%s">ātrajā ievadā lietotāja dokumentācijā</a>, lai uzrakstītu savu pirmo darbplūsmu, tad <a target="_blank" rel="noopener noreferrer" href="%s">jāiestata Forgejo izpildītājs</a>, lai izpildītu savus darbus.
runs.no_workflows.help_no_write_access = Lai uzzinātu par Forgejo Acties, jāieskatās <a target="_blank" rel="noopener noreferrer" href="%s">dokumentācijā</a>.
runs.expire_log_message = Žurnāli tika iztīrīti, jo tie bija pārāk veci.
workflow.dispatch.trigger_found = Šai darbplūsmai ir <c>workflow_dispatch</c> notikuma izraisītājs.
@ -4023,4 +4029,4 @@ filepreview.lines = %[1]d. līdz %[2]d. rinda %[3]s
filepreview.truncated = Priekšskatījums tika saīsināts
[translation_meta]
test = Šī ir pārbaudes virkne. Tā netiek attēlota Forgejo saskarnē, bet tiek izmantota pārbaudes nolūkiem. Droši var ievadīt "ok", lai ietaupītu laiku (vai kādu jautru faktu pēc izvēles), lai sasniegtu to saldo 100% pabeigšanas atzīmi.
test = Šī ir pārbaudes virkne. Tā netiek attēlota Forgejo saskarnē, bet tiek izmantota pārbaudes nolūkiem. Droši var ievadīt "ok", lai ietaupītu laiku (vai kādu jautru faktu pēc izvēles), lai sasniegtu to saldo 100% pabeigšanas atzīmi.

View file

@ -1,5 +1,5 @@
[common]
enable_javascript = Denne nettsiden behøver JavaScript.
enable_javascript = Denne nettsiden krever JavaScript.
toc = Innholdsfortegnelse
licenses = Lisenser
return_to_forgejo = Tilbake til Forgejo
@ -128,6 +128,14 @@ webauthn_error_unable_to_process = Tjeneren kunne ikke behandle forespørselen d
webauthn_error_empty = Du må gi nøkkelen et navn.
copy_path = Kopier sti
toggle_menu = Åpne/lukke meny
twofa_scratch = To-faktor skrapekode
webauthn_press_button = Vennligst trykk på knappen på sikkerhetsnøkkelen…
webauthn_error_duplicated = Sikkerhetsnøkkelen er ikke tillatt for denne forespørselen. Vennligst sørg for at nøkkelen ikke allerede er registrert.
webauthn_error_timeout = Et tidsavbrudd oppsto før nøkkelen din kunne leses. Vennligst last inn siden på nytt og prøv igjen.
new_fork = Ny fork av repository
collaborative = Samarbeidende
[search]
search = Søk...
type_tooltip = Søketype

View file

@ -511,6 +511,8 @@ PayloadUrl = Ladung-URL
visit_rate_limit = Frömd-Togriep hett Togrieps-Begrenz troffen.
2fa_auth_required = Frömd-Togriep bruukt Twee-Faktooren-Anmellen.
email_domain_is_not_allowed = De Domään vun de Bruker-E-Mail-Adress <b>%s</b> passt nich mit EMAIL_DOMAIN_ALLOWLIST of EMAIL_DOMAIN_BLOCKLIST. Wees wiss, dat du de E-Mail-Adress recht sett hest.
[user]
change_avatar = Änner dien Kontobill …
joined_on = Am %s bitreden
@ -2566,6 +2568,8 @@ issues.reaction.alt_remove = De %[1]s-Reageren vun de Kommentaar wegdoon.
issues.context.menu = Kommentaar-Menü
release.summary_card_alt = Tosamenfatens-Kaart vun eenem Publizeren mit de Naam »%s« im Repositorium %s
editor.commit_email = Kommitterens-E-Mail
[repo.permissions]
code.read = <b>Lesen:</b> De Quelltext vun deesem Repositorium ankieken un klonen.
code.write = <b>Schrieven:</b> Schuuv to de Repositorium un maak Twiegen un Markens.

View file

@ -234,7 +234,7 @@ install_desc = Draai gewoon <a target="_blank" rel="noopener noreferrer" href="%
[install]
install=Installatie
title=Initiële configuratie
docker_helper=Als je gitea draait in Docker, Lees eerst de <a target="_blank" rel="noopener noreferrer" href="%s">documentatie</a> voordat je een instelling aanpast.
docker_helper=Als je Forgejo draait in Docker, Lees eerst de <a target="_blank" rel="noopener noreferrer" href="%s">documentatie</a> voordat je een instelling aanpast.
require_db_desc=Forgejo vereist MySQL, PostgreSQL, SQLite3 of TiDB (MySQL protocol).
db_title=Database-instellingen
db_type=Database-type
@ -683,6 +683,8 @@ AccessToken = Toegangstoken
Pronouns = Voornaamwoorden
email_domain_is_not_allowed = Het domein van het e-mailadres van de gebruiker <b>%s</b> is in strijd met EMAIL_DOMAIN_ALLOWLIST of EMAIL_DOMAIN_BLOCKLIST. Controleer of u het e-mailadres correct hebt ingesteld.
[user]
change_avatar=Wijzig je profielfoto…
repositories=repositories
@ -1205,7 +1207,7 @@ migrate.migrating_failed_no_addr=Migratie is mislukt.
migrate.github.description=Migreer gegevens van github.com of GitHub Enterprise server.
migrate.git.description=Migreer een repositorie van elke Git service.
migrate.gitlab.description=Gegevens migreren van gitlab.com of andere GitLab-instanties.
migrate.gitea.description=Gegevens overzetten van gitea.com of andere Gitea/Forgejo instanties.
migrate.gitea.description=Gegevens overzetten van gitea.com of andere Gitea instanties.
migrate.gogs.description=Gegevens overzetten van notabug.org of andere Gogs instanties.
migrate.onedev.description=Gegevens overzetten van code.onedev.io of andere OneDev instanties.
migrate.codebase.description=Gegevens migreren van codebasehq.com.
@ -1283,6 +1285,7 @@ view_git_blame=Bekijk git blame
video_not_supported_in_browser=Uw browser ondersteunt de HTML5 "video" element niet.
audio_not_supported_in_browser=Uw browser ondersteunt de HTML5 "audio" element niet.
stored_lfs=Opgeslagen met Git LFS
stored_annex=Opgeslagen met Git Annex
symbolic_link=Symbolische link
commit_graph=Commit grafiek
commit_graph.select=Selecteer branches
@ -1301,6 +1304,7 @@ editor.upload_file=Upload bestand
editor.edit_file=Bewerk bestand
editor.preview_changes=Voorbeeld tonen
editor.cannot_edit_lfs_files=LFS-bestanden kunnen niet worden bewerkt in de webinterface.
editor.cannot_edit_annex_files=Annex-bestanden kunnen niet worden bewerkt in de webinterface.
editor.cannot_edit_non_text_files=Binaire bestanden kunnen niet worden bewerkt in de webinterface.
editor.edit_this_file=Bewerk bestand
editor.this_file_locked=Bestand is vergrendeld
@ -2868,6 +2872,8 @@ issues.reaction.alt_add = Voeg %[1]s reactie toe aan commentaar.
issues.context.menu = Commentaar menu
release.summary_card_alt = Samenvattende kaart van een release met de titel "%s" in repository %s
editor.commit_email = Commit e-mail
[graphs]
component_loading_info = Dit kan even duren…
component_failed_to_load = Er is een onverwachte fout opgetreden.
@ -3085,7 +3091,7 @@ dashboard.gc_times=GC verwerkingen
dashboard.delete_old_system_notices=Verwijder alle oude systeemmededelingen uit de database
users.user_manage_panel=Gebruikersaccounts beheren
users.new_account=Nieuw account aanmaken
users.new_account=Gebruikersaccount aanmaken
users.name=Gebruikersnaam
users.full_name=Volledige naam
users.activated=Geactiveerd

File diff suppressed because it is too large Load diff

View file

@ -682,6 +682,8 @@ Description = Descrição
unset_password = O usuário de login não definiu a senha.
email_domain_is_not_allowed = O domínio do endereço de email da conta <b>%s</b> está em conflito com EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Certifique-se de que você colocou o endereço de email correto.
[user]
change_avatar=Altere seu avatar...
joined_on=Inscreveu-se em %s
@ -1220,7 +1222,7 @@ migrate.migrating_failed_no_addr=A migração falhou.
migrate.github.description=Migre dados do servidor github.com ou GitHub Enterprise.
migrate.git.description=Migrar um repositório somente de qualquer serviço Git.
migrate.gitlab.description=Migrar dados de gitlab.com ou de outras instâncias do GitLab.
migrate.gitea.description=Migrar dados de gitea.com ou de outras instâncias do Gitea/Forgejo.
migrate.gitea.description=Migrar dados de gitea.com ou de outras instâncias do Gitea.
migrate.gogs.description=Migrar dados de notabug.org ou de outras instâncias do Gogs.
migrate.onedev.description=Migrar dados de code.onedev.io ou de outras instâncias do OneDev.
migrate.codebase.description=Migrar dados de codebasehq.com.
@ -1308,6 +1310,7 @@ view_git_blame=Ver git blame
video_not_supported_in_browser=Seu navegador não tem suporte para a tag "video" do HTML5.
audio_not_supported_in_browser=Seu navegador não tem suporte para a tag "audio" do HTML5.
stored_lfs=Armazenado com Git LFS
stored_annex=Armazenado com Git Annex
symbolic_link=Link simbólico
executable_file=Arquivo executável
commit_graph=Gráfico de commits
@ -1331,6 +1334,7 @@ editor.upload_file=Enviar arquivo
editor.edit_file=Editar arquivo
editor.preview_changes=Pré-visualizar alterações
editor.cannot_edit_lfs_files=Arquivos LFS não podem ser editados na interface web.
editor.cannot_edit_annex_files=Arquivos Annex não podem ser editados na interface web.
editor.cannot_edit_non_text_files=Arquivos binários não podem ser editados na interface web.
editor.edit_this_file=Editar arquivo
editor.this_file_locked=Arquivo está bloqueado
@ -2620,7 +2624,7 @@ tag.create_tag_from=`Criar nova tag a partir de "%s"`
tag.create_success=Tag "%s" criada.
topic.manage_topics=Gerenciar Tópicos
topic.manage_topics=Gerenciar tópicos
topic.done=Feito
topic.count_prompt=Você não pode selecionar mais de 25 tópicos
@ -2867,6 +2871,8 @@ issues.reaction.alt_add = Adicionar reação %[1]s ao comentário.
issues.context.menu = Menu de comentário
release.summary_card_alt = Cartão de resumo de um release intitulado "%s" no repositório %s
editor.commit_email = Email de commit
[graphs]
component_loading = Carregando %s...
component_loading_failed = Não foi possível carregar o(a) %s

View file

@ -682,6 +682,8 @@ FullName = Nome completo
Description = Descrição
Pronouns = Pronomes
email_domain_is_not_allowed = O domínio do endereço de email <b>%s</b> do utilizador entra em conflito com EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Certifique-se de que definiu corretamente o endereço de email.
[user]
change_avatar=Mude o seu avatar…
joined_on=Inscreveu-se em %s
@ -1231,7 +1233,7 @@ migrate.migrating_failed_no_addr=A migração falhou.
migrate.github.description=Migrar dados do github.com ou do GitHub Enterprise server.
migrate.git.description=Migrar um repositório somente de qualquer serviço Git.
migrate.gitlab.description=Migrar dados de gitlab.com ou de outras instâncias do GitLab.
migrate.gitea.description=Migrar dados de gitea.com ou de outras instâncias do Gitea/Forgejo.
migrate.gitea.description=Migrar dados de gitea.com ou de outras instâncias do Gitea.
migrate.gogs.description=Migrar dados de notabug.org ou de outras instâncias do Gogs.
migrate.onedev.description=Migrar dados de code.onedev.io ou de outras instâncias do OneDev.
migrate.codebase.description=Migrar dados de codebasehq.com.
@ -1319,6 +1321,7 @@ view_git_blame=Ver git blame
video_not_supported_in_browser=O seu navegador não suporta a etiqueta "video" do HTML5.
audio_not_supported_in_browser=O seu navegador não suporta a etiqueta "audio" do HTML5.
stored_lfs=Armazenado com Git LFS
stored_annex=Armazenado com Git Annex
symbolic_link=Ligação simbólica
executable_file=Ficheiro executável
vendored=Externo
@ -1344,6 +1347,7 @@ editor.upload_file=Carregar ficheiro
editor.edit_file=Editar ficheiro
editor.preview_changes=Pré-visualizar modificações
editor.cannot_edit_lfs_files=Ficheiros LFS não podem ser editados na interface web.
editor.cannot_edit_annex_files=Ficheiros Annex não podem ser editados na interface web.
editor.cannot_edit_non_text_files=Ficheiros binários não podem ser editados na interface da web.
editor.edit_this_file=Editar ficheiro
editor.this_file_locked=Ficheiro bloqueado
@ -2868,6 +2872,8 @@ pulls.sign_in_require = <a href="%s">Inicie sessão</a> para criar um novo pedid
settings.default_update_style_desc = Estilo de atualização predefinido utilizado para atualizar pedidos de integração que estão atrasados em relação ao ramo base.
release.summary_card_alt = Cartão de resumo de um lançamento com o título "%s" no repositório %s
editor.commit_email = Endereço de email do cometimento
[graphs]
component_loading=A carregar %s...
component_loading_failed=Não foi possível carregar %s
@ -3535,7 +3541,7 @@ notices.delete_success=As notificações do sistema foram eliminadas.
self_check.no_problem_found=Nenhum problema encontrado até agora.
self_check.database_collation_mismatch=Supor que a base de dados usa a colação: %s
self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Gitea possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado.
self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Forgejo possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado.
self_check.database_inconsistent_collation_columns=A base de dados está a usar a colação %s, mas estas colunas estão a usar colações diferentes. Isso poderá causar alguns problemas inesperados.
self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "forgejo doctor convert" para resolver os problemas de colação. Também pode resolver o problema com comandos SQL "ALTER ... COLLATE ..." aplicados manualmente.
config_summary = Resumo

View file

@ -341,7 +341,7 @@ password_algorithm_helper=Задайте алгоритм хеширования
enable_update_checker=Проверка обновлений
env_config_keys=Настройка окружения
env_config_keys_prompt=Следующие переменные окружения также будут применены к вашему конфигурационному файлу:
enable_update_checker_helper_forgejo = Периодически проверять наличие новых версий Forgejo через DNS-запись TXT на release.forgejo.org.
enable_update_checker_helper_forgejo = Периодически проверять наличие новых версий Forgejo через «TXT» DNS-запись домена release.forgejo.org.
allow_dots_in_usernames = Разрешить точки в именах пользователей. Это не повлияет на уже созданные учётные записи.
smtp_from_invalid = Адрес для отправки писем некорректен
config_location_hint = Эти настройки конфигурации будут сохранены в:
@ -682,6 +682,8 @@ Location = Местоположение
To = Название ветви
email_domain_is_not_allowed = Домен адреса эл. почты <b>%s</b> не разрешён к использованию. Убедитесь, что он введён правильно или попробуйте другой адрес.
[user]
change_avatar=Изменить изображение профиля…
joined_on=Регистрация %s
@ -761,7 +763,7 @@ update_language_success=Язык обновлён.
update_profile_success=Ваш профиль успешно обновлён.
change_username=Ваше имя пользователя было изменено.
change_username_prompt=Обратите внимание: изменение имени пользователя также меняет URL вашей учётной записи.
change_username_redirect_prompt=Старое имя пользователя будет перенаправлять на новое до тех пор, пока его не займут.
change_username_redirect_prompt=Старое имя будет перенаправлять на новое до тех пор, пока оно не будет занято.
continue=Далее
cancel=Отмена
language=Язык
@ -1302,6 +1304,7 @@ view_git_blame=Показать git blame
video_not_supported_in_browser=Ваш браузер не поддерживает тэг HTML5 «video».
audio_not_supported_in_browser=Ваш браузер не поддерживает тэг HTML5 «audio».
stored_lfs=Хранится Git LFS
stored_annex=Хранится Git Annex
symbolic_link=Символическая ссылка
executable_file=Исполняемый файл
commit_graph=Граф коммитов
@ -1325,6 +1328,7 @@ editor.upload_file=Загрузить файл
editor.edit_file=Редактировать файл
editor.preview_changes=Просмотр изменений
editor.cannot_edit_lfs_files=LFS файлы невозможно редактировать в веб-интерфейсе.
editor.cannot_edit_annex_files=Annex файлы невозможно редактировать в веб-интерфейсе.
editor.cannot_edit_non_text_files=Двоичные файлы нельзя редактировать в веб-интерфейсе.
editor.edit_this_file=Редактировать файл
editor.this_file_locked=Файл заблокирован
@ -2650,7 +2654,7 @@ tag.create_tag_from=Создать новый тег из «%s»
tag.create_success=Тег «%s» создан.
topic.manage_topics=Редактировать тематические метки
topic.manage_topics=Изменить темы
topic.done=Сохранить
topic.count_prompt=Нельзя выбрать более 25 тем
topic.format_prompt=Темы должны начинаться с буквы или цифры и могут содержать дефисы («-») и точки («.»). Длина темы не должна превышать 35 символов. Все буквы должны быть строчными.
@ -2869,6 +2873,8 @@ issues.reaction.alt_add = Добавить реакцию %[1]s к этому к
issues.context.menu = Меню комментария
release.summary_card_alt = Карточка со сводкой о выпуске «%s» в репозитории %s
editor.commit_email = Эл. почта автора
[graphs]
component_loading_failed = Не удалось загрузить %s
component_failed_to_load = Случилась непредвиденная ошибка.
@ -3694,7 +3700,7 @@ dependency.version=Версия
alpine.registry=Настройте этот реестр, добавив URL в файл <code>/etc/apk/repositories</code>:
alpine.registry.key=Загрузите публичный ключ RSA реестра в каталог <code>/etc/apk/keys/</code> для проверки подписи индекса:
alpine.registry.info=Выберите $branch и $repository из списка ниже.
alpine.install=Чтобы установить пакет, выполните следующую команду:
alpine.install=Для установки пакета выполните следующую команду:
alpine.repository=О репозитории
alpine.repository.branches=Ветви
alpine.repository.repositories=Репозитории
@ -3702,13 +3708,13 @@ alpine.repository.architectures=Архитектуры
cargo.registry=Настройте этот реестр в файле конфигурации Cargo (например, <code>~/.cargo/config.toml</code>):
cargo.install=Чтобы установить пакет с помощью Cargo, выполните следующую команду:
chef.registry=Настройте этот реестр в своём файле <code>~/.chef/config.rb</code>:
chef.install=Чтобы установить пакет, выполните следующую команду:
chef.install=Для установки пакета выполните следующую команду:
composer.registry=Настройте этот реестр в файле <code>~/.composer/config.json</code>:
composer.install=Чтобы установить пакет с помощью Composer, выполните следующую команду:
composer.dependencies=Зависимости
composer.dependencies.development=Зависимости для разработки
conan.details.repository=Репозиторий
conan.registry=Настроить реестр из командной строки:
conan.registry=Добавьте реестр командой:
conan.install=Чтобы установить пакет с помощью Conan, выполните следующую команду:
conda.registry=Пропишите этот реестр в качестве репозитория Conda в своём файле <code>.condarc</code>:
conda.install=Чтобы установить пакет с помощью Conda, выполните следующую команду:
@ -3722,23 +3728,23 @@ container.labels=Метки
container.labels.key=Ключ
container.labels.value=Значение
cran.registry=Настройте этот реестр в файле <code>Rprofile.site</code>:
cran.install=Чтобы установить пакет, выполните следующую команду:
debian.registry=Настроить реестр из командной строки:
cran.install=Для установки пакета выполните следующую команду:
debian.registry=Добавьте реестр командой:
debian.registry.info=Выберите $distribution и $component из списка ниже.
debian.install=Чтобы установить пакет, выполните следующую команду:
debian.install=Для установки пакета выполните следующую команду:
debian.repository=О репозитории
debian.repository.distributions=Дистрибутивы
debian.repository.components=Компоненты
debian.repository.architectures=Архитектуры
generic.download=Скачать пакет из командной строки:
go.install=Установите пакет из командной строки:
helm.registry=Настроить реестр из командной строки:
helm.install=Чтобы установить пакет, выполните следующую команду:
helm.registry=Добавьте реестр командой:
helm.install=Для установки пакета выполните следующую команду:
maven.registry=Настройте реестр в файле <code>pom.xml</code> вашего проекта:
maven.install=Чтобы использовать пакет, включите в блок <code>dependencies</code> в файле <code>pom.xml</code> следующее:
maven.install2=Выполнить через командную строку:
maven.download=Чтобы скачать зависимость, запустите в командной строке:
nuget.registry=Настроить реестр из командной строки:
nuget.registry=Добавьте реестр командой:
nuget.install=Чтобы установить пакет с помощью NuGet, выполните следующую команду:
nuget.dependency.framework=Целевой фреймворк
npm.registry=Настройте реестр в файле <code>.npmrc</code> вашего проекта:
@ -3752,10 +3758,10 @@ npm.details.tag=Тег
pub.install=Чтобы установить пакет с помощью Dart, выполните следующую команду:
pypi.requires=Требуется Python
pypi.install=Чтобы установить пакет с помощью pip, выполните следующую команду:
rpm.registry=Настроить реестр из командной строки:
rpm.registry=Добавьте реестр командой:
rpm.distros.redhat=на дистрибутивах семейства RedHat
rpm.distros.suse=на дистрибутивах семейства SUSE
rpm.install=Чтобы установить пакет, выполните следующую команду:
rpm.install=Для установки пакета выполните следующую команду:
rpm.repository = О репозитории
rpm.repository.architectures = Архитектуры
rubygems.install=Чтобы установить пакет с помощью gem, выполните следующую команду:
@ -3764,7 +3770,7 @@ rubygems.dependencies.runtime=Зависимости времени выполн
rubygems.dependencies.development=Зависимости для разработки
rubygems.required.ruby=Требуется версия Ruby
rubygems.required.rubygems=Требуется версия RubyGem
swift.registry=Настроить реестр из командной строки:
swift.registry=Добавьте реестр командой:
swift.install=Добавьте пакет в свой файл <code>Package.swift</code>:
swift.install2=и запустите следующую команду:
vagrant.install=Чтобы добавить бокс Vagrant, выполните следующую команду:

View file

@ -821,7 +821,7 @@ migrate.migrating_failed=<b>%s</b> සිට සංක්රමණය වීම
migrate.migrating_failed_no_addr=සංක්රමණය අසාර්ථකයි.
migrate.git.description=ඕනෑම Git සේවාවකින් පමණක් ගබඩාවක් සංක්රමණය කරන්න.
migrate.gitlab.description=gitlab.com හෝ වෙනත් GitLab අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
migrate.gitea.description=Gitea.com හෝ වෙනත් Gitea/Forgejo අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
migrate.gitea.description=Gitea.com හෝ වෙනත් Gitea අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
migrate.gogs.description=notabug.org හෝ වෙනත් Gogs අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
migrate.onedev.description=code.onedev.io හෝ වෙනත් OnedeV අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
migrate.gitbucket.description=GitBucket අවස්ථා වලින් දත්ත සංක්රමණය කරන්න.
@ -889,6 +889,7 @@ file_copy_permalink=පිටපත් මාමලින්ක්
video_not_supported_in_browser=ඔබගේ බ්රව්සරය HTML5 'වීඩියෝ' ටැගය සඳහා සහය නොදක්වයි.
audio_not_supported_in_browser=ඔබගේ බ්රව්සරය HTML5 'ශ්රව්ය' ටැගය සඳහා සහය නොදක්වයි.
stored_lfs=Git LFS සමඟ ගබඩා
stored_annex=Git Annex සමඟ ගබඩා
symbolic_link=සංකේතාත්මක සබැඳිය
commit_graph=ප්රස්තාරය කැප
commit_graph.select=ශාඛා තෝරන්න
@ -906,6 +907,7 @@ editor.upload_file=ගොනුව උඩුගත කරන්න
editor.edit_file=ගොනුව සංස්කරණය
editor.preview_changes=වෙනස්කම් පෙරදසුන
editor.cannot_edit_lfs_files=LFS ගොනු වෙබ් අතුරු මුහුණත තුළ සංස්කරණය කළ නොහැක.
editor.cannot_edit_annex_files=Annex ගොනු වෙබ් අතුරු මුහුණත තුළ සංස්කරණය කළ නොහැක.
editor.cannot_edit_non_text_files=ද්විමය ගොනු වෙබ් අතුරු මුහුණත තුළ සංස්කරණය කළ නොහැක.
editor.edit_this_file=ගොනුව සංස්කරණය
editor.this_file_locked=ගොනුවට අගුළු ලා ඇත

View file

@ -176,7 +176,7 @@ string.desc=Z - A
[error]
occurred=Vyskytla sa chyba
report_message=Ak si myslíte, že ide o chybu Gitea, vyhľadajte problémy na <a href="%s" target="_blank">GitHub-e</a> alebo v prípade potreby otvorte nový problém.
report_message=Ak si myslíte, že ide o chybu Forgejo, vyhľadajte problémy na <a href="%s" target="_blank">Codeberg-e</a> alebo v prípade potreby otvorte nový problém.
missing_csrf=Nesprávna žiadosť: neprítomný CSFR token
invalid_csrf=Nesprávna žiadosť: nesprávny CSFR token
not_found=Nebolo možné nájsť cieľ.
@ -1010,6 +1010,7 @@ view_git_blame=Zobraziť Git Blame
video_not_supported_in_browser=Váš prehliadač nepodporuje HTML5 tag 'video'.
audio_not_supported_in_browser=Váš prehliadač nepodporuje HTML5 tag 'audio'.
stored_lfs=Uložené pomocou Git LFS
stored_annex=Uložené pomocou Git Annex
symbolic_link=Symbolický odkaz
commit_graph=Graf commitov
line=riadok

View file

@ -62,7 +62,7 @@ federated_avatar_lookup_popup=Омогућите federated avatars lookup да
enable_captcha_popup=Тражи Captcha приликом регистрације корисника.
admin_password=Лозинка
confirm_password=Потврдите лозинку
install_btn_confirm=Успостави Gitea
install_btn_confirm=Успостави Forgejo
test_git_failed=Команда 'git' није успела: %v
[home]

Some files were not shown because too many files have changed in this diff Show more