Merge remote-tracking branch 'upstream/v12.0/forgejo' into v12.0/forgejo
This commit is contained in:
commit
613c73f256
360 changed files with 8083 additions and 2629 deletions
|
@ -28,7 +28,7 @@ jobs:
|
|||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
|
||||
- id: forgejo
|
||||
uses: https://data.forgejo.org/actions/setup-forgejo@v2.0.4
|
||||
uses: https://data.forgejo.org/actions/setup-forgejo@v3.0.1
|
||||
with:
|
||||
user: root
|
||||
password: admin1234
|
||||
|
|
|
@ -164,7 +164,7 @@ jobs:
|
|||
|
||||
- name: build container & release
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.5
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.4.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
@ -183,7 +183,7 @@ jobs:
|
|||
|
||||
- name: build rootless container
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.5
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.4.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
|
|
@ -44,7 +44,7 @@ jobs:
|
|||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
|
||||
- name: copy & sign
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.3.5
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.4.1
|
||||
with:
|
||||
from-forgejo: ${{ vars.FORGEJO }}
|
||||
to-forgejo: ${{ vars.FORGEJO }}
|
||||
|
@ -80,7 +80,7 @@ jobs:
|
|||
label: trigger
|
||||
|
||||
- name: upgrade v*.next.forgejo.org
|
||||
uses: https://data.forgejo.org/infrastructure/next-digest@v1.1.0
|
||||
uses: https://data.forgejo.org/infrastructure/next-digest@v1.2.0
|
||||
with:
|
||||
url: https://placeholder:${{ secrets.TOKEN_NEXT_DIGEST }}@invisible.forgejo.org/infrastructure/next-digest
|
||||
ref_name: '${{ github.ref_name }}'
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#
|
||||
# Additional integration tests designed to run once a day when
|
||||
# `mirror.yml` pushes to https://codeberg.org/forgejo-integration/forgejo
|
||||
# and send a notification via email should they fail.
|
||||
# and send a notification via email to the contact email of the
|
||||
# organization should they fail.
|
||||
#
|
||||
# For debug purposes:
|
||||
#
|
||||
|
@ -22,6 +23,8 @@ on:
|
|||
- 'forgejo'
|
||||
- 'v*/forgejo'
|
||||
|
||||
enable-email-notifications: true
|
||||
|
||||
jobs:
|
||||
test-unit:
|
||||
# if: vars.ROLE == 'forgejo-coding'
|
||||
|
|
|
@ -15,6 +15,7 @@ import (
|
|||
"forgejo.org/modules/graceful"
|
||||
"forgejo.org/modules/log"
|
||||
"forgejo.org/modules/process"
|
||||
"forgejo.org/modules/proxy"
|
||||
"forgejo.org/modules/setting"
|
||||
|
||||
"github.com/caddyserver/certmagic"
|
||||
|
@ -76,6 +77,12 @@ func runACME(listenAddr string, m http.Handler) error {
|
|||
ListenHost: setting.HTTPAddr,
|
||||
AltTLSALPNPort: altTLSALPNPort,
|
||||
AltHTTPPort: altHTTPPort,
|
||||
HTTPProxy: proxy.Proxy(),
|
||||
}
|
||||
|
||||
// Preserve behavior to use Let's encrypt test CA when Let's encrypt is CA.
|
||||
if certmagic.DefaultACME.CA == certmagic.LetsEncryptProductionCA {
|
||||
certmagic.DefaultACME.TestCA = certmagic.LetsEncryptStagingCA
|
||||
}
|
||||
|
||||
magic := certmagic.NewDefault()
|
||||
|
|
4
go.mod
4
go.mod
|
@ -2,7 +2,7 @@ module forgejo.org
|
|||
|
||||
go 1.24
|
||||
|
||||
toolchain go1.24.4
|
||||
toolchain go1.24.6
|
||||
|
||||
require (
|
||||
code.forgejo.org/f3/gof3/v3 v3.11.0
|
||||
|
@ -91,7 +91,7 @@ require (
|
|||
github.com/sergi/go-diff v1.4.0
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/syndtr/goleveldb v1.0.0
|
||||
github.com/ulikunitz/xz v0.5.12
|
||||
github.com/ulikunitz/xz v0.5.15
|
||||
github.com/urfave/cli/v3 v3.3.3
|
||||
github.com/valyala/fastjson v1.6.4
|
||||
github.com/yohcop/openid-go v1.0.1
|
||||
|
|
4
go.sum
4
go.sum
|
@ -527,8 +527,8 @@ github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww=
|
|||
github.com/tinylib/msgp v1.3.0/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0=
|
||||
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
|
||||
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
|
||||
github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/urfave/cli/v3 v3.3.3 h1:byCBaVdIXuLPIDm5CYZRVG6NvT7tv1ECqdU4YzlEa3I=
|
||||
github.com/urfave/cli/v3 v3.3.3/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
|
||||
github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
|
||||
|
|
|
@ -132,6 +132,13 @@ func (opts FindArtifactsOptions) ToConds() builder.Cond {
|
|||
return cond
|
||||
}
|
||||
|
||||
var _ db.FindOptionsOrder = FindArtifactsOptions{}
|
||||
|
||||
// ToOrders implements db.FindOptionsOrder, to have a stable order
|
||||
func (opts FindArtifactsOptions) ToOrders() string {
|
||||
return "id"
|
||||
}
|
||||
|
||||
// ActionArtifactMeta is the meta data of an artifact
|
||||
type ActionArtifactMeta struct {
|
||||
ArtifactName string
|
||||
|
|
|
@ -473,8 +473,11 @@ func GetFeeds(ctx context.Context, opts GetFeedsOptions) (ActionList, int64, err
|
|||
return nil, 0, err
|
||||
}
|
||||
|
||||
sess := db.GetEngine(ctx).Where(cond).
|
||||
Select("`action`.*"). // this line will avoid select other joined table's columns
|
||||
Join("INNER", "repository", "`repository`.id = `action`.repo_id")
|
||||
|
||||
opts.SetDefaultValues()
|
||||
sess := db.GetEngine(ctx).Where(cond)
|
||||
sess = db.SetSessionPagination(sess, &opts)
|
||||
|
||||
actions := make([]*Action, 0, opts.PageSize)
|
||||
|
|
|
@ -227,6 +227,24 @@ func TestNotifyWatchers(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestGetFeedsCorrupted(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{
|
||||
ID: 8,
|
||||
RepoID: 1700,
|
||||
})
|
||||
|
||||
actions, count, err := activities_model.GetFeeds(db.DefaultContext, activities_model.GetFeedsOptions{
|
||||
RequestedUser: user,
|
||||
Actor: user,
|
||||
IncludePrivate: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, actions)
|
||||
assert.Equal(t, int64(0), count)
|
||||
}
|
||||
|
||||
func TestConsistencyUpdateAction(t *testing.T) {
|
||||
if !setting.Database.Type.IsSQLite3() {
|
||||
t.Skip("Test is only for SQLite database.")
|
||||
|
|
|
@ -141,7 +141,7 @@ func TxContext(parentCtx context.Context) (*Context, Committer, error) {
|
|||
return nil, nil, err
|
||||
}
|
||||
|
||||
return newContext(DefaultContext, sess, true), sess, nil
|
||||
return newContext(parentCtx, sess, true), sess, nil
|
||||
}
|
||||
|
||||
// WithTx represents executing database operations on a transaction, if the transaction exist,
|
||||
|
|
|
@ -84,4 +84,16 @@ func TestTxContext(t *testing.T) {
|
|||
return nil
|
||||
}))
|
||||
}
|
||||
|
||||
t.Run("Reuses parent context", func(t *testing.T) {
|
||||
type unique struct{}
|
||||
|
||||
ctx := context.WithValue(db.DefaultContext, unique{}, "yes!")
|
||||
assert.False(t, db.InTransaction(ctx))
|
||||
|
||||
require.NoError(t, db.WithTx(ctx, func(ctx context.Context) error {
|
||||
assert.Equal(t, "yes!", ctx.Value(unique{}))
|
||||
return nil
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -121,6 +121,7 @@ type ErrInvalidCloneAddr struct {
|
|||
IsInvalidPath bool
|
||||
IsProtocolInvalid bool
|
||||
IsPermissionDenied bool
|
||||
HasCredentials bool
|
||||
LocalPath bool
|
||||
}
|
||||
|
||||
|
@ -143,6 +144,9 @@ func (err *ErrInvalidCloneAddr) Error() string {
|
|||
if err.IsURLError {
|
||||
return fmt.Sprintf("migration/cloning from '%s' is not allowed: the provided url is invalid", err.Host)
|
||||
}
|
||||
if err.HasCredentials {
|
||||
return fmt.Sprintf("migration/cloning from '%s' is not allowed: the provided url contains credentials", err.Host)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("migration/cloning from '%s' is not allowed", err.Host)
|
||||
}
|
||||
|
|
21
models/fixtures/ModerationFeatures/abuse_report.yml
Normal file
21
models/fixtures/ModerationFeatures/abuse_report.yml
Normal file
|
@ -0,0 +1,21 @@
|
|||
-
|
||||
id: 1
|
||||
status: 1
|
||||
reporter_id: 2 # @user2
|
||||
content_type: 4 # Comment
|
||||
content_id: 18 # user2/repo2/issues/2#issuecomment-18
|
||||
category: 2 # Spam
|
||||
remarks: The comment I'm reporting is pure SPAM.
|
||||
shadow_copy_id: null
|
||||
created_unix: 1752697980 # 2025-07-16 20:33:00
|
||||
|
||||
-
|
||||
id: 2
|
||||
status: 1 # Open
|
||||
reporter_id: 2 # @user2
|
||||
content_type: 1 # User (users or organizations)
|
||||
content_id: 1002 # @alexsmith
|
||||
category: 2 # Spam
|
||||
remarks: This user just posted a spammy comment on my issue.
|
||||
shadow_copy_id: null
|
||||
created_unix: 1752698010 # 2025-07-16 20:33:30
|
7
models/fixtures/ModerationFeatures/comment.yml
Normal file
7
models/fixtures/ModerationFeatures/comment.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
- # This is a spam comment (abusive content), created for testing moderation functionalities.
|
||||
id: 18
|
||||
type: 0 # Standard comment
|
||||
poster_id: 1002 # @alexsmith
|
||||
issue_id: 7 # user2/repo2#2
|
||||
content: If anyone needs help for promoting their business online using SEO, just contact me (check my profile page).
|
||||
created_unix: 1752697860 # 2025-07-16 20:31:00
|
22
models/fixtures/ModerationFeatures/user.yml
Normal file
22
models/fixtures/ModerationFeatures/user.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
- # This user is a spammer and will create abusive content (for testing moderation functionalities).
|
||||
id: 1002
|
||||
lower_name: alexsmith
|
||||
name: alexsmith
|
||||
full_name: Alex Smith
|
||||
email: alexsmith@example.org
|
||||
keep_email_private: false
|
||||
passwd: passwdSalt:password
|
||||
passwd_hash_algo: dummy
|
||||
type: 0
|
||||
location: '@master@seo.net'
|
||||
website: http://promote-your-business.biz
|
||||
pronouns: SEO
|
||||
salt: passwdSalt
|
||||
description: I can help you promote your business online using SEO.
|
||||
created_unix: 1752697800 # 2025-07-16 20:30:00
|
||||
is_active: true
|
||||
is_admin: false
|
||||
is_restricted: false
|
||||
avatar: avatar-hash-1002
|
||||
avatar_email: alexsmith@example.org
|
||||
use_custom_avatar: false
|
16
models/fixtures/TestAddTeamReviewRequest/issue.yml
Normal file
16
models/fixtures/TestAddTeamReviewRequest/issue.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
-
|
||||
id: 23
|
||||
repo_id: 2
|
||||
index: 3
|
||||
poster_id: 2
|
||||
original_author_id: 0
|
||||
name: protected branch pull
|
||||
content: pull request to a protected branch
|
||||
milestone_id: 0
|
||||
priority: 0
|
||||
is_pull: true
|
||||
is_closed: false
|
||||
num_comments: 0
|
||||
created_unix: 1707270422
|
||||
updated_unix: 1707270422
|
||||
is_locked: false
|
|
@ -0,0 +1,28 @@
|
|||
- id: 1
|
||||
repo_id: 2
|
||||
branch_name: protected-main
|
||||
can_push: false
|
||||
enable_whitelist: true
|
||||
whitelist_user_i_ds: [1]
|
||||
whitelist_team_i_ds: []
|
||||
enable_merge_whitelist: true
|
||||
whitelist_deploy_keys: false
|
||||
merge_whitelist_user_i_ds: [1]
|
||||
merge_whitelist_team_i_ds: []
|
||||
enable_status_check: false
|
||||
status_check_contexts: []
|
||||
enable_approvals_whitelist: true
|
||||
approvals_whitelist_user_i_ds: []
|
||||
approvals_whitelist_team_i_ds: [1]
|
||||
required_approvals: 1
|
||||
block_on_rejected_reviews: true
|
||||
block_on_official_review_requests: true
|
||||
block_on_outdated_branch: true
|
||||
dismiss_stale_approvals: true
|
||||
ignore_stale_approvals: false
|
||||
require_signed_commits: false
|
||||
protected_file_patterns: ""
|
||||
unprotected_file_patterns: ""
|
||||
apply_to_admins: true
|
||||
created_unix: 1752513073
|
||||
updated_unix: 1752513073
|
12
models/fixtures/TestAddTeamReviewRequest/pull_request.yml
Normal file
12
models/fixtures/TestAddTeamReviewRequest/pull_request.yml
Normal file
|
@ -0,0 +1,12 @@
|
|||
-
|
||||
id: 11
|
||||
type: 0 # gitea pull request
|
||||
status: 2 # mergeable
|
||||
issue_id: 23
|
||||
index: 3
|
||||
head_repo_id: 2
|
||||
base_repo_id: 2
|
||||
head_branch: feature/protected-branch-pr
|
||||
base_branch: protected-main
|
||||
merge_base: 4a357436d925b5c974181ff12a994538ddc5a269
|
||||
has_merged: false
|
|
@ -59,6 +59,14 @@
|
|||
created_unix: 1603011540 # grouped with id:7
|
||||
|
||||
- id: 8
|
||||
user_id: 1
|
||||
op_type: 12 # close issue
|
||||
act_user_id: 1
|
||||
repo_id: 1700 # dangling intentional
|
||||
is_private: false
|
||||
created_unix: 1603011541
|
||||
|
||||
- id: 9
|
||||
user_id: 34
|
||||
op_type: 12 # close issue
|
||||
act_user_id: 34
|
||||
|
|
|
@ -3,3 +3,9 @@
|
|||
owner_id: 2
|
||||
lower_name: oldrepo1
|
||||
redirect_repo_id: 1
|
||||
|
||||
-
|
||||
id: 2
|
||||
owner_id: 17
|
||||
lower_name: oldrepo24
|
||||
redirect_repo_id: 24
|
||||
|
|
|
@ -3,3 +3,15 @@
|
|||
lower_name: olduser1
|
||||
redirect_user_id: 1
|
||||
created_unix: 1730000000
|
||||
|
||||
-
|
||||
id: 2
|
||||
lower_name: oldorg22
|
||||
redirect_user_id: 22
|
||||
created_unix: 1730000000
|
||||
|
||||
-
|
||||
id: 3
|
||||
lower_name: oldorg23
|
||||
redirect_user_id: 23
|
||||
created_unix: 1730000000
|
||||
|
|
|
@ -109,6 +109,8 @@ var migrations = []*Migration{
|
|||
NewMigration("Add `notify-email` column to `action_run` table", AddNotifyEmailToActionRun),
|
||||
// v34 -> v35
|
||||
NewMigration("Noop because of https://codeberg.org/forgejo/forgejo/issues/8373", NoopAddIndexToActionRunStopped),
|
||||
// v35 -> v36
|
||||
NewMigration("Fix wiki unit default permission", FixWikiUnitDefaultPermission),
|
||||
}
|
||||
|
||||
// GetCurrentDBVersion returns the current Forgejo database version.
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
|
||||
"forgejo.org/models/db"
|
||||
"forgejo.org/models/packages"
|
||||
"forgejo.org/modules/json"
|
||||
"forgejo.org/modules/log"
|
||||
|
@ -52,55 +53,50 @@ type mavenPackageResult struct {
|
|||
// ChangeMavenArtifactConcatenation resolves old dash-concatenated Maven coordinates and regenerates metadata.
|
||||
// Note: runs per-owner in a single transaction; failures roll back all owners.
|
||||
func ChangeMavenArtifactConcatenation(x *xorm.Engine) error {
|
||||
sess := x.NewSession()
|
||||
defer sess.Close()
|
||||
|
||||
if err := sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// get unique owner IDs of Maven packages
|
||||
var ownerIDs []*int64
|
||||
if err := sess.
|
||||
Table("package").
|
||||
Select("package.owner_id").
|
||||
Where("package.type = 'maven'").
|
||||
GroupBy("package.owner_id").
|
||||
OrderBy("package.owner_id DESC").
|
||||
Find(&ownerIDs); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, id := range ownerIDs {
|
||||
if err := fixMavenArtifactPerOwner(sess, id); err != nil {
|
||||
log.Error("owner %d migration failed: %v", id, err)
|
||||
return err // rollback all
|
||||
return db.WithTx(db.DefaultContext, func(ctx context.Context) error {
|
||||
// get unique owner IDs of Maven packages
|
||||
var ownerIDs []*int64
|
||||
if err := db.GetEngine(ctx).
|
||||
Table("package").
|
||||
Select("package.owner_id").
|
||||
Where("package.type = 'maven'").
|
||||
GroupBy("package.owner_id").
|
||||
OrderBy("package.owner_id DESC").
|
||||
Find(&ownerIDs); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return sess.Commit()
|
||||
for _, id := range ownerIDs {
|
||||
if err := fixMavenArtifactPerOwner(ctx, id); err != nil {
|
||||
log.Error("owner %d migration failed: %v", id, err)
|
||||
return err // rollback all
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func fixMavenArtifactPerOwner(sess *xorm.Session, ownerID *int64) error {
|
||||
results, err := getMavenPackageResultsToUpdate(sess, ownerID)
|
||||
func fixMavenArtifactPerOwner(ctx context.Context, ownerID *int64) error {
|
||||
results, err := getMavenPackageResultsToUpdate(ctx, ownerID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = resolvePackageCollisions(results, sess); err != nil {
|
||||
if err = resolvePackageCollisions(ctx, results); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = processPackageVersions(results, sess); err != nil {
|
||||
if err = processPackageVersions(ctx, results); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return processPackageFiles(results, sess)
|
||||
return processPackageFiles(ctx, results)
|
||||
}
|
||||
|
||||
// processPackageFiles updates Maven package files and versions in the database
|
||||
// Returns an error if any database or processing operation fails.
|
||||
func processPackageFiles(results []*mavenPackageResult, sess *xorm.Session) error {
|
||||
func processPackageFiles(ctx context.Context, results []*mavenPackageResult) error {
|
||||
processedVersion := make(map[string][]*mavenPackageResult)
|
||||
|
||||
for _, r := range results {
|
||||
|
@ -113,7 +109,7 @@ func processPackageFiles(results []*mavenPackageResult, sess *xorm.Session) erro
|
|||
if r.PackageVersion.ID != r.PackageFile.VersionID {
|
||||
pattern := strings.TrimSuffix(r.PackageFile.Name, ".pom") + "%"
|
||||
// Per routers/api/packages/maven/maven.go:338, POM files already have the `IsLead`, so no update needed for this prop
|
||||
if _, err := sess.Exec("UPDATE package_file SET version_id = ? WHERE version_id = ? and name like ?", r.PackageVersion.ID, r.PackageFile.VersionID, pattern); err != nil {
|
||||
if _, err := db.GetEngine(ctx).Exec("UPDATE package_file SET version_id = ? WHERE version_id = ? and name like ?", r.PackageVersion.ID, r.PackageFile.VersionID, pattern); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -128,14 +124,14 @@ func processPackageFiles(results []*mavenPackageResult, sess *xorm.Session) erro
|
|||
|
||||
rs := packageResults[0]
|
||||
|
||||
pf, md, err := parseMetadata(sess, rs)
|
||||
pf, md, err := parseMetadata(ctx, rs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if pf != nil && md != nil && md.GroupID == rs.GroupID && md.ArtifactID == rs.ArtifactID {
|
||||
if pf.VersionID != rs.PackageFile.VersionID {
|
||||
if _, err := sess.ID(pf.ID).Cols("version_id").Update(pf); err != nil {
|
||||
if _, err := db.GetEngine(ctx).ID(pf.ID).Cols("version_id").Update(pf); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -150,11 +146,9 @@ func processPackageFiles(results []*mavenPackageResult, sess *xorm.Session) erro
|
|||
|
||||
// parseMetadata retrieves metadata for a Maven package file from the database and decodes it into a Metadata object.
|
||||
// Returns the associated PackageFile, Metadata, and any error encountered during processing.
|
||||
func parseMetadata(sess *xorm.Session, snapshot *mavenPackageResult) (*packages.PackageFile, *Metadata, error) {
|
||||
ctx := context.Background()
|
||||
|
||||
func parseMetadata(ctx context.Context, snapshot *mavenPackageResult) (*packages.PackageFile, *Metadata, error) {
|
||||
var pf packages.PackageFile
|
||||
found, err := sess.Table(pf).
|
||||
found, err := db.GetEngine(ctx).Table(pf).
|
||||
Where("version_id = ?", snapshot.PackageFile.VersionID). // still the old id
|
||||
And("lower_name = ?", "maven-metadata.xml").
|
||||
Get(&pf)
|
||||
|
@ -183,7 +177,7 @@ func parseMetadata(sess *xorm.Session, snapshot *mavenPackageResult) (*packages.
|
|||
|
||||
// processPackageVersions processes Maven package versions by updating metadata or inserting new records as necessary.
|
||||
// It avoids redundant updates by tracking already processed versions using a map. Returns an error on failure.
|
||||
func processPackageVersions(results []*mavenPackageResult, sess *xorm.Session) error {
|
||||
func processPackageVersions(ctx context.Context, results []*mavenPackageResult) error {
|
||||
processedVersion := make(map[string]int64)
|
||||
|
||||
for _, r := range results {
|
||||
|
@ -196,14 +190,14 @@ func processPackageVersions(results []*mavenPackageResult, sess *xorm.Session) e
|
|||
|
||||
// for non collisions, just update the metadata
|
||||
if r.PackageVersion.PackageID == r.Package.ID {
|
||||
if _, err := sess.ID(r.PackageVersion.ID).Cols("metadata_json").Update(r.PackageVersion); err != nil {
|
||||
if _, err := db.GetEngine(ctx).ID(r.PackageVersion.ID).Cols("metadata_json").Update(r.PackageVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
log.Info("Create new maven package version for %s:%s", r.PackageName, r.PackageVersion.Version)
|
||||
r.PackageVersion.ID = 0
|
||||
r.PackageVersion.PackageID = r.Package.ID
|
||||
if _, err := sess.Insert(r.PackageVersion); err != nil {
|
||||
if _, err := db.GetEngine(ctx).Insert(r.PackageVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -216,10 +210,9 @@ func processPackageVersions(results []*mavenPackageResult, sess *xorm.Session) e
|
|||
|
||||
// getMavenPackageResultsToUpdate retrieves Maven package results that need updates based on the owner ID.
|
||||
// It processes POM metadata, fixes package inconsistencies, and filters corrupted package versions.
|
||||
func getMavenPackageResultsToUpdate(sess *xorm.Session, ownerID *int64) ([]*mavenPackageResult, error) {
|
||||
ctx := context.Background()
|
||||
func getMavenPackageResultsToUpdate(ctx context.Context, ownerID *int64) ([]*mavenPackageResult, error) {
|
||||
var candidates []*mavenPackageResult
|
||||
if err := sess.
|
||||
if err := db.GetEngine(ctx).
|
||||
Table("package_file").
|
||||
Select("package_file.*, package_version.*, package.*").
|
||||
Join("INNER", "package_version", "package_version.id = package_file.version_id").
|
||||
|
@ -265,7 +258,7 @@ func getMavenPackageResultsToUpdate(sess *xorm.Session, ownerID *int64) ([]*mave
|
|||
|
||||
// resolvePackageCollisions handles name collisions by keeping the first existing record and inserting new Package records for subsequent collisions.
|
||||
// Returns a map from PackageName to its resolved Package.ID.
|
||||
func resolvePackageCollisions(results []*mavenPackageResult, sess *xorm.Session) error {
|
||||
func resolvePackageCollisions(ctx context.Context, results []*mavenPackageResult) error {
|
||||
// Group new names by lowerName
|
||||
collisions := make(map[string][]string)
|
||||
for _, r := range results {
|
||||
|
@ -292,7 +285,7 @@ func resolvePackageCollisions(results []*mavenPackageResult, sess *xorm.Session)
|
|||
} else if list[0] == r.PackageName {
|
||||
pkgIDByName[r.PackageName] = r.Package.ID
|
||||
|
||||
if _, err = sess.ID(r.Package.ID).Cols("name", "lower_name").Update(r.Package); err != nil {
|
||||
if _, err = db.GetEngine(ctx).ID(r.Package.ID).Cols("name", "lower_name").Update(r.Package); err != nil {
|
||||
return err
|
||||
}
|
||||
// create a new entry
|
||||
|
@ -300,7 +293,7 @@ func resolvePackageCollisions(results []*mavenPackageResult, sess *xorm.Session)
|
|||
log.Info("Create new maven package for %s", r.Package.Name)
|
||||
|
||||
r.Package.ID = 0
|
||||
if _, err = sess.Insert(r.Package); err != nil {
|
||||
if _, err = db.GetEngine(ctx).Insert(r.Package); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
55
models/forgejo_migrations/v36.go
Normal file
55
models/forgejo_migrations/v36.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package forgejo_migrations //nolint:revive
|
||||
|
||||
import (
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func FixWikiUnitDefaultPermission(x *xorm.Engine) error {
|
||||
// Type is Unit's Type
|
||||
type Type int
|
||||
|
||||
// Enumerate all the unit types
|
||||
const (
|
||||
TypeInvalid Type = iota // 0 invalid
|
||||
TypeCode // 1 code
|
||||
TypeIssues // 2 issues
|
||||
TypePullRequests // 3 PRs
|
||||
TypeReleases // 4 Releases
|
||||
TypeWiki // 5 Wiki
|
||||
TypeExternalWiki // 6 ExternalWiki
|
||||
TypeExternalTracker // 7 ExternalTracker
|
||||
TypeProjects // 8 Projects
|
||||
TypePackages // 9 Packages
|
||||
TypeActions // 10 Actions
|
||||
)
|
||||
|
||||
// RepoUnitAccessMode specifies the users access mode to a repo unit
|
||||
type UnitAccessMode int
|
||||
|
||||
const (
|
||||
// UnitAccessModeUnset - no unit mode set
|
||||
UnitAccessModeUnset UnitAccessMode = iota // 0
|
||||
// UnitAccessModeNone no access
|
||||
UnitAccessModeNone // 1
|
||||
// UnitAccessModeRead read access
|
||||
UnitAccessModeRead // 2
|
||||
// UnitAccessModeWrite write access
|
||||
UnitAccessModeWrite // 3
|
||||
)
|
||||
_ = UnitAccessModeNone
|
||||
_ = UnitAccessModeWrite
|
||||
|
||||
type RepoUnit struct {
|
||||
DefaultPermissions UnitAccessMode `xorm:"NOT NULL DEFAULT 0"`
|
||||
}
|
||||
_, err := x.Where("type = ?", TypeWiki).
|
||||
Where("default_permissions = ?", UnitAccessModeRead).
|
||||
Cols("default_permissions").
|
||||
Update(RepoUnit{
|
||||
DefaultPermissions: UnitAccessModeUnset,
|
||||
})
|
||||
return err
|
||||
}
|
|
@ -1156,7 +1156,7 @@ func UpdateComment(ctx context.Context, c *Comment, contentVersion int, doer *us
|
|||
defer committer.Close()
|
||||
|
||||
// If the comment was reported as abusive, a shadow copy should be created before first update.
|
||||
if err := IfNeededCreateShadowCopyForComment(ctx, c); err != nil {
|
||||
if err := IfNeededCreateShadowCopyForComment(ctx, c, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -1197,7 +1197,7 @@ func DeleteComment(ctx context.Context, comment *Comment) error {
|
|||
e := db.GetEngine(ctx)
|
||||
|
||||
// If the comment was reported as abusive, a shadow copy should be created before deletion.
|
||||
if err := IfNeededCreateShadowCopyForComment(ctx, comment); err != nil {
|
||||
if err := IfNeededCreateShadowCopyForComment(ctx, comment, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
@ -87,13 +87,19 @@ func IfNeededCreateShadowCopyForIssue(ctx context.Context, issue *Issue) error {
|
|||
// IfNeededCreateShadowCopyForComment checks if for the given comment there are any reports of abusive content submitted
|
||||
// and if found a shadow copy of relevant comment fields will be stored into DB and linked to the above report(s).
|
||||
// This function should be called before a comment is deleted or updated.
|
||||
func IfNeededCreateShadowCopyForComment(ctx context.Context, comment *Comment) error {
|
||||
func IfNeededCreateShadowCopyForComment(ctx context.Context, comment *Comment, forUpdates bool) error {
|
||||
shadowCopyNeeded, err := moderation.IsShadowCopyNeeded(ctx, moderation.ReportedContentTypeComment, comment.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if shadowCopyNeeded {
|
||||
if forUpdates {
|
||||
// get the unaltered comment fields (for updates the provided variable is already altered but not yet saved)
|
||||
if comment, err = GetCommentByID(ctx, comment.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
commentData := newCommentData(comment)
|
||||
content, err := json.Marshal(commentData)
|
||||
if err != nil {
|
||||
|
|
|
@ -781,10 +781,6 @@ func AddTeamReviewRequest(ctx context.Context, issue *Issue, reviewer *organizat
|
|||
official, err := IsOfficialReviewerTeam(ctx, issue, reviewer)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("isOfficialReviewerTeam(): %w", err)
|
||||
} else if !official {
|
||||
if official, err = IsOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
return nil, fmt.Errorf("isOfficialReviewer(): %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if review, err = CreateReview(ctx, CreateReviewOptions{
|
||||
|
@ -797,12 +793,6 @@ func AddTeamReviewRequest(ctx context.Context, issue *Issue, reviewer *organizat
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if official {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_team_id=?", false, issue.ID, reviewer.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
comment, err := CreateComment(ctx, &CreateCommentOptions{
|
||||
Type: CommentTypeReviewRequest,
|
||||
Doer: doer,
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
|
||||
"forgejo.org/models/db"
|
||||
issues_model "forgejo.org/models/issues"
|
||||
organization_model "forgejo.org/models/organization"
|
||||
repo_model "forgejo.org/models/repo"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
|
@ -319,3 +320,80 @@ func TestAddReviewRequest(t *testing.T) {
|
|||
require.Error(t, err)
|
||||
assert.True(t, issues_model.IsErrReviewRequestOnClosedPR(err))
|
||||
}
|
||||
|
||||
func TestAddTeamReviewRequest(t *testing.T) {
|
||||
defer unittest.OverrideFixtures("models/fixtures/TestAddTeamReviewRequest")()
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
setupForProtectedBranch := func() (*issues_model.Issue, *user_model.User) {
|
||||
// From override models/fixtures/TestAddTeamReviewRequest/issue.yml; issue #23 is a PR into a protected branch
|
||||
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 23})
|
||||
require.NoError(t, issue.LoadRepo(db.DefaultContext))
|
||||
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
return issue, doer
|
||||
}
|
||||
|
||||
t.Run("Protected branch, not official team", func(t *testing.T) {
|
||||
issue, doer := setupForProtectedBranch()
|
||||
// Team 2 is not part of the whitelist for this protected branch
|
||||
team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 2})
|
||||
|
||||
comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, comment)
|
||||
|
||||
review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, review)
|
||||
assert.Equal(t, issues_model.ReviewTypeRequest, review.Type)
|
||||
assert.Equal(t, team.ID, review.ReviewerTeamID)
|
||||
// This review request should not be marked official because it is not a request for a team in the branch
|
||||
// protection rule's whitelist...
|
||||
assert.False(t, review.Official)
|
||||
})
|
||||
|
||||
t.Run("Protected branch, official team", func(t *testing.T) {
|
||||
issue, doer := setupForProtectedBranch()
|
||||
// Team 1 is part of the whitelist for this protected branch
|
||||
team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 1})
|
||||
|
||||
comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, comment)
|
||||
|
||||
review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, review)
|
||||
assert.Equal(t, issues_model.ReviewTypeRequest, review.Type)
|
||||
assert.Equal(t, team.ID, review.ReviewerTeamID)
|
||||
// Expected to be considered official because team 1 is in the review whitelist for this protected branch
|
||||
assert.True(t, review.Official)
|
||||
})
|
||||
|
||||
t.Run("Unprotected branch, official team", func(t *testing.T) {
|
||||
// Working on a PR into a branch that is not protected, issue #2
|
||||
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
|
||||
require.NoError(t, issue.LoadRepo(db.DefaultContext))
|
||||
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
// team is a team that has write perms against the repo
|
||||
team := unittest.AssertExistsAndLoadBean(t, &organization_model.Team{ID: 1})
|
||||
|
||||
comment, err := issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, comment)
|
||||
|
||||
review, err := issues_model.GetTeamReviewerByIssueIDAndTeamID(db.DefaultContext, issue.ID, team.ID)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, review)
|
||||
assert.Equal(t, issues_model.ReviewTypeRequest, review.Type)
|
||||
assert.Equal(t, team.ID, review.ReviewerTeamID)
|
||||
// Will not be marked as official because PR #2 there's no branch protection rule that enables whitelist
|
||||
// approvals (verifying logic in `IsOfficialReviewerTeam` indirectly)
|
||||
assert.False(t, review.Official)
|
||||
|
||||
// Adding the same team review request again should be a noop
|
||||
comment, err = issues_model.AddTeamReviewRequest(db.DefaultContext, issue, team, doer)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, comment)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ func (pt Type) Name() string {
|
|||
case TypeRpm:
|
||||
return "RPM"
|
||||
case TypeAlt:
|
||||
return "Alt"
|
||||
return "ALT"
|
||||
case TypeRubyGems:
|
||||
return "RubyGems"
|
||||
case TypeSwift:
|
||||
|
|
|
@ -14,8 +14,9 @@ import (
|
|||
|
||||
// ErrRedirectNotExist represents a "RedirectNotExist" kind of error.
|
||||
type ErrRedirectNotExist struct {
|
||||
OwnerID int64
|
||||
RepoName string
|
||||
OwnerID int64
|
||||
RepoName string
|
||||
MissingPermission bool
|
||||
}
|
||||
|
||||
// IsErrRedirectNotExist check if an error is an ErrRepoRedirectNotExist.
|
||||
|
@ -49,8 +50,8 @@ func init() {
|
|||
db.RegisterModel(new(Redirect))
|
||||
}
|
||||
|
||||
// LookupRedirect look up if a repository has a redirect name
|
||||
func LookupRedirect(ctx context.Context, ownerID int64, repoName string) (int64, error) {
|
||||
// GetRedirect returns the redirect for a given pair of ownerID and repository name.
|
||||
func GetRedirect(ctx context.Context, ownerID int64, repoName string) (int64, error) {
|
||||
repoName = strings.ToLower(repoName)
|
||||
redirect := &Redirect{OwnerID: ownerID, LowerName: repoName}
|
||||
if has, err := db.GetEngine(ctx).Get(redirect); err != nil {
|
||||
|
|
|
@ -10,21 +10,9 @@ import (
|
|||
repo_model "forgejo.org/models/repo"
|
||||
"forgejo.org/models/unittest"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestLookupRedirect(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
repoID, err := repo_model.LookupRedirect(db.DefaultContext, 2, "oldrepo1")
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, 1, repoID)
|
||||
|
||||
_, err = repo_model.LookupRedirect(db.DefaultContext, unittest.NonexistentID, "doesnotexist")
|
||||
assert.True(t, repo_model.IsErrRedirectNotExist(err))
|
||||
}
|
||||
|
||||
func TestNewRedirect(t *testing.T) {
|
||||
// redirect to a completely new name
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
|
|
@ -41,27 +41,30 @@ func (err ErrUnitTypeNotExist) Unwrap() error {
|
|||
}
|
||||
|
||||
// RepoUnitAccessMode specifies the users access mode to a repo unit
|
||||
// Only UnitAccessModeWrite is used by the wiki, to mark it as instance-writable
|
||||
type UnitAccessMode int
|
||||
|
||||
const (
|
||||
// UnitAccessModeUnset - no unit mode set
|
||||
UnitAccessModeUnset UnitAccessMode = iota // 0
|
||||
|
||||
// UnitAccessModeNone no access
|
||||
UnitAccessModeNone // 1
|
||||
// UnitAccessModeNone UnitAccessMode = 1
|
||||
// UnitAccessModeRead read access
|
||||
UnitAccessModeRead // 2
|
||||
// UnitAccessModeRead UnitAccessMode = 2
|
||||
|
||||
// UnitAccessModeWrite write access
|
||||
UnitAccessModeWrite // 3
|
||||
UnitAccessModeWrite UnitAccessMode = 3
|
||||
)
|
||||
|
||||
func (mode UnitAccessMode) ToAccessMode(modeIfUnset perm.AccessMode) perm.AccessMode {
|
||||
switch mode {
|
||||
case UnitAccessModeUnset:
|
||||
return modeIfUnset
|
||||
case UnitAccessModeNone:
|
||||
return perm.AccessModeNone
|
||||
case UnitAccessModeRead:
|
||||
return perm.AccessModeRead
|
||||
// case UnitAccessModeNone:
|
||||
// return perm.AccessModeNone
|
||||
// case UnitAccessModeRead:
|
||||
// return perm.AccessModeRead
|
||||
case UnitAccessModeWrite:
|
||||
return perm.AccessModeWrite
|
||||
default:
|
||||
|
@ -333,5 +336,8 @@ func getUnitsByRepoID(ctx context.Context, repoID int64) (units []*RepoUnit, err
|
|||
// UpdateRepoUnit updates the provided repo unit
|
||||
func UpdateRepoUnit(ctx context.Context, unit *RepoUnit) error {
|
||||
_, err := db.GetEngine(ctx).ID(unit.ID).Update(unit)
|
||||
return err
|
||||
if err != nil {
|
||||
return fmt.Errorf("UpdateRepoUnit: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -34,8 +34,8 @@ func TestActionsConfig(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRepoUnitAccessMode(t *testing.T) {
|
||||
assert.Equal(t, perm.AccessModeNone, UnitAccessModeNone.ToAccessMode(perm.AccessModeAdmin))
|
||||
assert.Equal(t, perm.AccessModeRead, UnitAccessModeRead.ToAccessMode(perm.AccessModeAdmin))
|
||||
// assert.Equal(t, perm.AccessModeNone, UnitAccessModeNone.ToAccessMode(perm.AccessModeAdmin))
|
||||
// assert.Equal(t, perm.AccessModeRead, UnitAccessModeRead.ToAccessMode(perm.AccessModeAdmin))
|
||||
assert.Equal(t, perm.AccessModeWrite, UnitAccessModeWrite.ToAccessMode(perm.AccessModeAdmin))
|
||||
assert.Equal(t, perm.AccessModeRead, UnitAccessModeUnset.ToAccessMode(perm.AccessModeRead))
|
||||
}
|
||||
|
|
|
@ -41,6 +41,10 @@ func NewMockWebServer(t *testing.T, liveServerBaseURL, testDataDir string, liveM
|
|||
log.Info("Mock HTTP Server: got request for path %s", r.URL.Path)
|
||||
// TODO check request method (support POST?)
|
||||
fixturePath := fmt.Sprintf("%s/%s_%s", testDataDir, r.Method, url.PathEscape(path))
|
||||
if strings.Contains(path, "test_repo.git") {
|
||||
// We got a git clone request against our mock server
|
||||
fixturePath = fmt.Sprintf("%s/%s", testDataDir, strings.TrimLeft(r.URL.Path, "/"))
|
||||
}
|
||||
if liveMode {
|
||||
liveURL := fmt.Sprintf("%s%s", liveServerBaseURL, path)
|
||||
|
||||
|
|
|
@ -73,16 +73,20 @@ var userDataColumnNames = sync.OnceValue(func() []string {
|
|||
// and if found a shadow copy of relevant user fields will be stored into DB and linked to the above report(s).
|
||||
// This function should be called before a user is deleted or updated.
|
||||
//
|
||||
// In case the User object was already altered before calling this method, just provide the userID and
|
||||
// nil for unalteredUser; when it is decided that a shadow copy should be created and unalteredUser is nil,
|
||||
// the user will be retrieved from DB based on the provided userID.
|
||||
//
|
||||
// For deletions alteredCols argument must be omitted.
|
||||
//
|
||||
// In case of updates it will first checks whether any of the columns being updated (alteredCols argument)
|
||||
// is relevant for moderation purposes (i.e. included in the UserData struct).
|
||||
func IfNeededCreateShadowCopyForUser(ctx context.Context, user *User, alteredCols ...string) error {
|
||||
func IfNeededCreateShadowCopyForUser(ctx context.Context, userID int64, unalteredUser *User, alteredCols ...string) error {
|
||||
// TODO: this can be triggered quite often (e.g. by routers/web/repo/middlewares.go SetDiffViewStyle())
|
||||
|
||||
shouldCheckIfNeeded := len(alteredCols) == 0 // no columns being updated, therefore a deletion
|
||||
if !shouldCheckIfNeeded {
|
||||
// for updates we need to go further only if certain column are being changed
|
||||
// for updates we need to go further only if certain columns are being changed
|
||||
for _, colName := range userDataColumnNames() {
|
||||
if shouldCheckIfNeeded = slices.Contains(alteredCols, colName); shouldCheckIfNeeded {
|
||||
break
|
||||
|
@ -94,18 +98,23 @@ func IfNeededCreateShadowCopyForUser(ctx context.Context, user *User, alteredCol
|
|||
return nil
|
||||
}
|
||||
|
||||
shadowCopyNeeded, err := moderation.IsShadowCopyNeeded(ctx, moderation.ReportedContentTypeUser, user.ID)
|
||||
shadowCopyNeeded, err := moderation.IsShadowCopyNeeded(ctx, moderation.ReportedContentTypeUser, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if shadowCopyNeeded {
|
||||
userData := newUserData(user)
|
||||
if unalteredUser == nil {
|
||||
if unalteredUser, err = GetUserByID(ctx, userID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
userData := newUserData(unalteredUser)
|
||||
content, err := json.Marshal(userData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return moderation.CreateShadowCopyForUser(ctx, user.ID, string(content))
|
||||
return moderation.CreateShadowCopyForUser(ctx, userID, string(content))
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -40,8 +40,8 @@ func GetUserOpenIDs(ctx context.Context, uid int64) ([]*UserOpenID, error) {
|
|||
return openids, nil
|
||||
}
|
||||
|
||||
// isOpenIDUsed returns true if the openid has been used.
|
||||
func isOpenIDUsed(ctx context.Context, uri string) (bool, error) {
|
||||
// IsOpenIDUsed returns true if the openid has been used.
|
||||
func IsOpenIDUsed(ctx context.Context, uri string) (bool, error) {
|
||||
if len(uri) == 0 {
|
||||
return true, nil
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ func (err ErrOpenIDAlreadyUsed) Unwrap() error {
|
|||
// AddUserOpenID adds an pre-verified/normalized OpenID URI to given user.
|
||||
// NOTE: make sure openid.URI is normalized already
|
||||
func AddUserOpenID(ctx context.Context, openid *UserOpenID) error {
|
||||
used, err := isOpenIDUsed(ctx, openid.URI)
|
||||
used, err := IsOpenIDUsed(ctx, openid.URI)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if used {
|
||||
|
|
|
@ -21,7 +21,8 @@ import (
|
|||
|
||||
// ErrUserRedirectNotExist represents a "UserRedirectNotExist" kind of error.
|
||||
type ErrUserRedirectNotExist struct {
|
||||
Name string
|
||||
Name string
|
||||
MissingPermission bool
|
||||
}
|
||||
|
||||
// IsErrUserRedirectNotExist check if an error is an ErrUserRedirectNotExist.
|
||||
|
@ -81,15 +82,6 @@ func GetUserRedirect(ctx context.Context, userName string) (*Redirect, error) {
|
|||
return redirect, nil
|
||||
}
|
||||
|
||||
// LookupUserRedirect look up userID if a user has a redirect name
|
||||
func LookupUserRedirect(ctx context.Context, userName string) (int64, error) {
|
||||
redirect, err := GetUserRedirect(ctx, userName)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return redirect.RedirectUserID, nil
|
||||
}
|
||||
|
||||
// NewUserRedirect create a new user redirect
|
||||
func NewUserRedirect(ctx context.Context, ID int64, oldUserName, newUserName string) error {
|
||||
oldUserName = strings.ToLower(oldUserName)
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package user_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"forgejo.org/models/db"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestLookupUserRedirect(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
userID, err := user_model.LookupUserRedirect(db.DefaultContext, "olduser1")
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, 1, userID)
|
||||
|
||||
_, err = user_model.LookupUserRedirect(db.DefaultContext, "doesnotexist")
|
||||
assert.True(t, user_model.IsErrUserRedirectNotExist(err))
|
||||
}
|
|
@ -927,7 +927,9 @@ func UpdateUserCols(ctx context.Context, u *User, cols ...string) error {
|
|||
|
||||
// If the user was reported as abusive and any of the columns being updated is relevant
|
||||
// for moderation purposes a shadow copy should be created before first update.
|
||||
if err := IfNeededCreateShadowCopyForUser(ctx, u, cols...); err != nil {
|
||||
// Since u is already altered at this point we are sending nil instead as an argument
|
||||
// so that the unaltered version will be retrieved from DB.
|
||||
if err := IfNeededCreateShadowCopyForUser(ctx, u.ID, nil, cols...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -1161,8 +1163,8 @@ func GetUserByEmail(ctx context.Context, email string) (*User, error) {
|
|||
|
||||
email = strings.ToLower(email)
|
||||
// Otherwise, check in alternative list for activated email addresses
|
||||
emailAddress := &EmailAddress{LowerEmail: email, IsActivated: true}
|
||||
has, err := db.GetEngine(ctx).Get(emailAddress)
|
||||
emailAddress := &EmailAddress{}
|
||||
has, err := db.GetEngine(ctx).Where("lower_email = ? AND is_activated = ?", email, true).Get(emailAddress)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -835,3 +835,25 @@ func TestPronounsPrivacy(t *testing.T) {
|
|||
assert.Equal(t, "any", user.GetPronouns(true))
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetUserByEmail(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
t.Run("Normal", func(t *testing.T) {
|
||||
u, err := user_model.GetUserByEmail(t.Context(), "user2@example.com")
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, 2, u.ID)
|
||||
})
|
||||
|
||||
t.Run("Not activated", func(t *testing.T) {
|
||||
u, err := user_model.GetUserByEmail(t.Context(), "user11@example.com")
|
||||
require.ErrorIs(t, err, user_model.ErrUserNotExist{Name: "user11@example.com"})
|
||||
assert.Nil(t, u)
|
||||
})
|
||||
|
||||
t.Run("Not primary", func(t *testing.T) {
|
||||
u, err := user_model.GetUserByEmail(t.Context(), "user1-3@example.com")
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, 1, u.ID)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -56,14 +56,7 @@ func Local(name, base string, sub ...string) *Layer {
|
|||
panic(fmt.Sprintf("Unable to get absolute path for %q: %v", base, err))
|
||||
}
|
||||
root := util.FilePathJoinAbs(base, sub...)
|
||||
fsRoot, err := os.OpenRoot(root)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
return nil
|
||||
}
|
||||
panic(fmt.Sprintf("Unable to open layer %q", err))
|
||||
}
|
||||
return &Layer{name: name, fs: fsRoot.FS(), localPath: root}
|
||||
return &Layer{name: name, fs: os.DirFS(root), localPath: root}
|
||||
}
|
||||
|
||||
// Bindata returns a new Layer with the given name, it serves files from the given bindata asset.
|
||||
|
@ -80,7 +73,7 @@ type LayeredFS struct {
|
|||
|
||||
// Layered returns a new LayeredFS with the given layers. The first layer is the top layer.
|
||||
func Layered(layers ...*Layer) *LayeredFS {
|
||||
return &LayeredFS{layers: slices.DeleteFunc(layers, func(layer *Layer) bool { return layer == nil })}
|
||||
return &LayeredFS{layers: layers}
|
||||
}
|
||||
|
||||
// Open opens the named file. The caller is responsible for closing the file.
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package assetfs
|
||||
|
@ -108,3 +109,30 @@ func TestLayered(t *testing.T) {
|
|||
assert.Equal(t, "l1", assets.GetFileLayerName("f1"))
|
||||
assert.Equal(t, "l2", assets.GetFileLayerName("f2"))
|
||||
}
|
||||
|
||||
// Allow layers to read symlink outside the layer root.
|
||||
func TestLayeredSymlink(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
dirl1 := filepath.Join(dir, "l1")
|
||||
require.NoError(t, os.MkdirAll(dirl1, 0o755))
|
||||
|
||||
// Open layer in dir/l1
|
||||
layer := Local("l1", dirl1)
|
||||
|
||||
// Create a file in dir/outside
|
||||
fileContents := []byte("I am outside the layer")
|
||||
require.NoError(t, os.WriteFile(filepath.Join(dir, "outside"), fileContents, 0o600))
|
||||
// Symlink dir/l1/outside to dir/outside
|
||||
require.NoError(t, os.Symlink(filepath.Join(dir, "outside"), filepath.Join(dirl1, "outside")))
|
||||
|
||||
// Open dir/l1/outside.
|
||||
f, err := layer.Open("outside")
|
||||
require.NoError(t, err)
|
||||
defer f.Close()
|
||||
|
||||
// Confirm it contains the output of dir/outside
|
||||
contents, err := io.ReadAll(f)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, fileContents, contents)
|
||||
}
|
||||
|
|
|
@ -10,8 +10,6 @@ import (
|
|||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"forgejo.org/modules/log"
|
||||
)
|
||||
|
||||
// ParseTreeEntries parses the output of a `git ls-tree -l` command.
|
||||
|
@ -55,19 +53,9 @@ func parseTreeEntries(data []byte, ptree *Tree) ([]*TreeEntry, error) {
|
|||
entry.sized = true
|
||||
}
|
||||
|
||||
switch string(entryMode) {
|
||||
case "100644":
|
||||
entry.entryMode = EntryModeBlob
|
||||
case "100755":
|
||||
entry.entryMode = EntryModeExec
|
||||
case "120000":
|
||||
entry.entryMode = EntryModeSymlink
|
||||
case "160000":
|
||||
entry.entryMode = EntryModeCommit
|
||||
case "040000", "040755": // git uses 040000 for tree object, but some users may get 040755 for unknown reasons
|
||||
entry.entryMode = EntryModeTree
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown type: %v", string(entryMode))
|
||||
entry.entryMode, err = parseMode(string(entryMode))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
entry.ID, err = NewIDFromString(string(entryObjectID))
|
||||
|
@ -108,23 +96,10 @@ loop:
|
|||
sz -= int64(count)
|
||||
entry := new(TreeEntry)
|
||||
entry.ptree = ptree
|
||||
|
||||
switch string(mode) {
|
||||
case "100644":
|
||||
entry.entryMode = EntryModeBlob
|
||||
case "100755":
|
||||
entry.entryMode = EntryModeExec
|
||||
case "120000":
|
||||
entry.entryMode = EntryModeSymlink
|
||||
case "160000":
|
||||
entry.entryMode = EntryModeCommit
|
||||
case "40000", "40755": // git uses 40000 for tree object, but some users may get 40755 for unknown reasons
|
||||
entry.entryMode = EntryModeTree
|
||||
default:
|
||||
log.Debug("Unknown mode: %v", string(mode))
|
||||
return nil, fmt.Errorf("unknown mode: %v", string(mode))
|
||||
entry.entryMode, err = parseMode(string(mode))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
entry.ID = objectFormat.MustID(sha)
|
||||
entry.name = string(fname)
|
||||
entries = append(entries, entry)
|
||||
|
@ -135,3 +110,31 @@ loop:
|
|||
|
||||
return entries, nil
|
||||
}
|
||||
|
||||
// Parse the file mode, we cannot hardcode the modes that we expect for
|
||||
// a variety of reasons (that is not known to us) the permissions bits
|
||||
// of files can vary, usually the result because of tooling that uses Git in
|
||||
// a funny way. So we have to parse the mode as a integer and do bit tricks.
|
||||
func parseMode(modeStr string) (EntryMode, error) {
|
||||
mode, err := strconv.ParseUint(modeStr, 8, 64)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("cannot parse mode: %v", err)
|
||||
}
|
||||
|
||||
switch mode & 0o170000 {
|
||||
case 0o040000:
|
||||
return EntryModeTree, nil
|
||||
case 0o120000:
|
||||
return EntryModeSymlink, nil
|
||||
case 0o160000:
|
||||
return EntryModeCommit, nil
|
||||
case 0o100000:
|
||||
// Check for the permission bit on the owner.
|
||||
if mode&0o100 == 0o100 {
|
||||
return EntryModeExec, nil
|
||||
}
|
||||
return EntryModeBlob, nil
|
||||
}
|
||||
|
||||
return 0, fmt.Errorf("unknown mode: %o", mode)
|
||||
}
|
||||
|
|
|
@ -101,3 +101,38 @@ func TestParseTreeEntriesInvalid(t *testing.T) {
|
|||
require.Error(t, err)
|
||||
assert.Empty(t, entries)
|
||||
}
|
||||
|
||||
func TestParseMode(t *testing.T) {
|
||||
ok := func(t *testing.T, mode string, entry EntryMode) {
|
||||
t.Helper()
|
||||
actualEntry, err := parseMode(mode)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, entry, actualEntry)
|
||||
}
|
||||
|
||||
fail := func(t *testing.T, mode string) {
|
||||
t.Helper()
|
||||
entry, err := parseMode(mode)
|
||||
require.Error(t, err)
|
||||
assert.Zero(t, entry)
|
||||
}
|
||||
|
||||
ok(t, "100644", EntryModeBlob)
|
||||
ok(t, "100755", EntryModeExec)
|
||||
ok(t, "100754", EntryModeExec)
|
||||
ok(t, "100700", EntryModeExec)
|
||||
ok(t, "100744", EntryModeExec)
|
||||
ok(t, "120000", EntryModeSymlink)
|
||||
ok(t, "120644", EntryModeSymlink)
|
||||
ok(t, "160000", EntryModeCommit)
|
||||
ok(t, "160644", EntryModeCommit)
|
||||
ok(t, "040000", EntryModeTree)
|
||||
ok(t, "040755", EntryModeTree)
|
||||
ok(t, "040775", EntryModeTree)
|
||||
ok(t, "040754", EntryModeTree)
|
||||
|
||||
fail(t, "not-a-number")
|
||||
fail(t, "000000")
|
||||
fail(t, "400000")
|
||||
fail(t, "111111")
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"forgejo.org/modules/log"
|
||||
"forgejo.org/modules/proxy"
|
||||
"forgejo.org/modules/setting"
|
||||
"forgejo.org/modules/util"
|
||||
|
@ -160,24 +161,89 @@ func CloneWithArgs(ctx context.Context, args TrustedCmdArgs, from, to string, op
|
|||
if len(opts.Branch) > 0 {
|
||||
cmd.AddArguments("-b").AddDynamicArguments(opts.Branch)
|
||||
}
|
||||
cmd.AddDashesAndList(from, to)
|
||||
|
||||
if strings.Contains(from, "://") && strings.Contains(from, "@") {
|
||||
cmd.SetDescription(fmt.Sprintf("clone branch %s from %s to %s (shared: %t, mirror: %t, depth: %d)", opts.Branch, util.SanitizeCredentialURLs(from), to, opts.Shared, opts.Mirror, opts.Depth))
|
||||
} else {
|
||||
cmd.SetDescription(fmt.Sprintf("clone branch %s from %s to %s (shared: %t, mirror: %t, depth: %d)", opts.Branch, from, to, opts.Shared, opts.Mirror, opts.Depth))
|
||||
envs := os.Environ()
|
||||
parsedFromURL, err := url.Parse(from)
|
||||
if err == nil {
|
||||
envs = proxy.EnvWithProxy(parsedFromURL)
|
||||
}
|
||||
|
||||
fromURL := from
|
||||
sanitizedFrom := from
|
||||
|
||||
// If the clone URL has credentials, sanitize it and store the credentials in
|
||||
// a temporary file that git will access.
|
||||
if strings.Contains(from, "://") && strings.Contains(from, "@") {
|
||||
sanitizedFrom = util.SanitizeCredentialURLs(from)
|
||||
if parsedFromURL != nil {
|
||||
if pwd, has := parsedFromURL.User.Password(); has {
|
||||
parsedFromURL.User = url.User(parsedFromURL.User.Username())
|
||||
fromURL = parsedFromURL.String()
|
||||
|
||||
credentialsFile, err := os.CreateTemp(os.TempDir(), "forgejo-clone-credentials")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
credentialsPath := credentialsFile.Name()
|
||||
|
||||
defer func() {
|
||||
_ = credentialsFile.Close()
|
||||
if err := util.Remove(credentialsPath); err != nil {
|
||||
log.Warn("Unable to remove temporary file %q: %v", credentialsPath, err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Make it read-write.
|
||||
if err := credentialsFile.Chmod(0o600); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write the password.
|
||||
if _, err := fmt.Fprint(credentialsFile, pwd); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
askpassFile, err := os.CreateTemp(os.TempDir(), "forgejo-askpass")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
askpassPath := askpassFile.Name()
|
||||
|
||||
defer func() {
|
||||
_ = askpassFile.Close()
|
||||
if err := util.Remove(askpassPath); err != nil {
|
||||
log.Warn("Unable to remove temporary file %q: %v", askpassPath, err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Make it executable.
|
||||
if err := askpassFile.Chmod(0o700); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write the password script.
|
||||
if _, err := fmt.Fprintf(askpassFile, "exec cat %s", credentialsPath); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Close it, so that Git can use it and no busy errors arise.
|
||||
_ = askpassFile.Close()
|
||||
_ = credentialsFile.Close()
|
||||
|
||||
// Use environments to specify that git should ask for credentials, this
|
||||
// takes precedences over anything else https://git-scm.com/docs/gitcredentials#_requesting_credentials.
|
||||
envs = append(envs, "GIT_ASKPASS="+askpassPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cmd.SetDescription(fmt.Sprintf("clone branch %s from %s to %s (shared: %t, mirror: %t, depth: %d)", opts.Branch, sanitizedFrom, to, opts.Shared, opts.Mirror, opts.Depth))
|
||||
cmd.AddDashesAndList(fromURL, to)
|
||||
|
||||
if opts.Timeout <= 0 {
|
||||
opts.Timeout = -1
|
||||
}
|
||||
|
||||
envs := os.Environ()
|
||||
u, err := url.Parse(from)
|
||||
if err == nil {
|
||||
envs = proxy.EnvWithProxy(u)
|
||||
}
|
||||
|
||||
stderr := new(bytes.Buffer)
|
||||
if err = cmd.Run(&RunOpts{
|
||||
Timeout: opts.Timeout,
|
||||
|
|
|
@ -183,6 +183,17 @@ func (repo *Repository) GetDiffShortStat(base, head string) (numFiles, totalAddi
|
|||
return numFiles, totalAdditions, totalDeletions, err
|
||||
}
|
||||
|
||||
// GetCommitStat returns the number of files, total additions and total deletions the commit has.
|
||||
func (repo *Repository) GetCommitShortStat(commitID string) (numFiles, totalAdditions, totalDeletions int, err error) {
|
||||
cmd := NewCommand(repo.Ctx, "diff-tree", "--shortstat", "--no-commit-id", "--root").AddDynamicArguments(commitID)
|
||||
stdout, _, err := cmd.RunStdString(&RunOpts{Dir: repo.Path})
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
}
|
||||
|
||||
return parseDiffStat(stdout)
|
||||
}
|
||||
|
||||
// GetDiffShortStat counts number of changed files, number of additions and deletions
|
||||
func GetDiffShortStat(ctx context.Context, repoPath string, trustedArgs TrustedCmdArgs, dynamicArgs ...string) (numFiles, totalAdditions, totalDeletions int, err error) {
|
||||
// Now if we call:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package git
|
||||
|
@ -162,3 +163,83 @@ func TestGetCommitFilesChanged(t *testing.T) {
|
|||
assert.ElementsMatch(t, tc.files, changedFiles)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetCommitShortStat(t *testing.T) {
|
||||
t.Run("repo1_bare", func(t *testing.T) {
|
||||
repo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare"))
|
||||
if err != nil {
|
||||
require.NoError(t, err)
|
||||
return
|
||||
}
|
||||
defer repo.Close()
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err := repo.GetCommitShortStat("ce064814f4a0d337b333e646ece456cd39fab612")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, numFiles)
|
||||
assert.Equal(t, 0, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("feaf4ba6bc635fec442f46ddd4512416ec43c2c2")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, numFiles)
|
||||
assert.Equal(t, 0, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("37991dec2c8e592043f47155ce4808d4580f9123")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 1, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("6fbd69e9823458e6c4a2fc5c0f6bc022b2f2acd1")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, numFiles)
|
||||
assert.Equal(t, 2, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("8006ff9adbf0cb94da7dad9e537e53817f9fa5c0")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, numFiles)
|
||||
assert.Equal(t, 2, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("8d92fc957a4d7cfd98bc375f0b7bb189a0d6c9f2")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 1, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("95bb4d39648ee7e325106df01a621c530863a653")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 1, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
})
|
||||
|
||||
t.Run("repo6_blame_sha256", func(t *testing.T) {
|
||||
repo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo6_blame_sha256"))
|
||||
if err != nil {
|
||||
require.NoError(t, err)
|
||||
return
|
||||
}
|
||||
defer repo.Close()
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err := repo.GetCommitShortStat("e2f5660e15159082902960af0ed74fc144921d2b0c80e069361853b3ece29ba3")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 1, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("9347b0198cd1f25017579b79d0938fa89dba34ad2514f0dd92f6bc975ed1a2fe")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 1, totalAddition)
|
||||
assert.Equal(t, 1, totalDeletions)
|
||||
|
||||
numFiles, totalAddition, totalDeletions, err = repo.GetCommitShortStat("ab2b57a4fa476fb2edb74dafa577caf918561abbaa8fba0c8dc63c412e17a7cc")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, numFiles)
|
||||
assert.Equal(t, 6, totalAddition)
|
||||
assert.Equal(t, 0, totalDeletions)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -4,7 +4,15 @@
|
|||
package git
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -54,3 +62,80 @@ func TestRepoGetDivergingCommits(t *testing.T) {
|
|||
Behind: 2,
|
||||
}, do)
|
||||
}
|
||||
|
||||
func TestCloneCredentials(t *testing.T) {
|
||||
calledWithoutPassword := false
|
||||
askpassFile := ""
|
||||
credentialsFile := ""
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
if req.URL.Path != "/info/refs" {
|
||||
return
|
||||
}
|
||||
|
||||
// Get basic authorization.
|
||||
auth, ok := strings.CutPrefix(req.Header.Get("Authorization"), "Basic ")
|
||||
if !ok {
|
||||
w.Header().Set("WWW-Authenticate", `Basic realm="Forgejo"`)
|
||||
http.Error(w, "require credentials", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
rawAuth, err := base64.StdEncoding.DecodeString(auth)
|
||||
require.NoError(t, err)
|
||||
|
||||
user, password, ok := bytes.Cut(rawAuth, []byte{':'})
|
||||
assert.True(t, ok)
|
||||
|
||||
// First time around Git tries without password (that's specified in the clone URL).
|
||||
// It demonstrates it doesn't immediately uses askpass.
|
||||
if len(password) == 0 {
|
||||
assert.EqualValues(t, "oauth2", user)
|
||||
calledWithoutPassword = true
|
||||
|
||||
w.Header().Set("WWW-Authenticate", `Basic realm="Forgejo"`)
|
||||
http.Error(w, "require credentials", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
assert.EqualValues(t, "oauth2", user)
|
||||
assert.EqualValues(t, "some_token", password)
|
||||
|
||||
tmpDir := os.TempDir()
|
||||
|
||||
// Verify that the askpass implementation was used.
|
||||
files, err := fs.Glob(os.DirFS(tmpDir), "forgejo-askpass*")
|
||||
require.NoError(t, err)
|
||||
for _, fileName := range files {
|
||||
fileContent, err := os.ReadFile(filepath.Join(tmpDir, fileName))
|
||||
require.NoError(t, err)
|
||||
|
||||
credentialsPath, ok := bytes.CutPrefix(fileContent, []byte(`exec cat `))
|
||||
assert.True(t, ok)
|
||||
|
||||
fileContent, err = os.ReadFile(string(credentialsPath))
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, "some_token", fileContent)
|
||||
|
||||
askpassFile = filepath.Join(tmpDir, fileName)
|
||||
credentialsFile = string(credentialsPath)
|
||||
}
|
||||
}))
|
||||
|
||||
serverURL, err := url.Parse(server.URL)
|
||||
require.NoError(t, err)
|
||||
|
||||
serverURL.User = url.UserPassword("oauth2", "some_token")
|
||||
|
||||
require.NoError(t, Clone(t.Context(), serverURL.String(), t.TempDir(), CloneRepoOptions{}))
|
||||
|
||||
assert.True(t, calledWithoutPassword)
|
||||
assert.NotEmpty(t, askpassFile)
|
||||
assert.NotEmpty(t, credentialsFile)
|
||||
|
||||
// Check that the helper files are gone.
|
||||
_, err = os.Stat(askpassFile)
|
||||
require.ErrorIs(t, err, fs.ErrNotExist)
|
||||
_, err = os.Stat(credentialsFile)
|
||||
require.ErrorIs(t, err, fs.ErrNotExist)
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ func HighlightSearchResultCode(filename string, lineNums []int, highlightRanges
|
|||
conv := hcd.ConvertToPlaceholders(string(hl))
|
||||
convLines := strings.Split(conv, "\n")
|
||||
|
||||
// each highlightRange is of the form [line number, start pos, end pos]
|
||||
// each highlightRange is of the form [line number, start byte offset, end byte offset]
|
||||
for _, highlightRange := range highlightRanges {
|
||||
ln, start, end := highlightRange[0], highlightRange[1], highlightRange[2]
|
||||
line := convLines[ln]
|
||||
|
@ -105,15 +105,18 @@ func HighlightSearchResultCode(filename string, lineNums []int, highlightRanges
|
|||
continue
|
||||
}
|
||||
|
||||
sr := strings.NewReader(line)
|
||||
sb := strings.Builder{}
|
||||
count := -1
|
||||
isOpen := false
|
||||
for _, r := range line {
|
||||
for r, size, err := sr.ReadRune(); err == nil; r, size, err = sr.ReadRune() {
|
||||
if token, ok := hcd.PlaceholderTokenMap[r];
|
||||
// token was not found
|
||||
!ok ||
|
||||
// token was marked as used
|
||||
token == "" ||
|
||||
!ok {
|
||||
count += size
|
||||
} else if
|
||||
// token was marked as used
|
||||
token == "" ||
|
||||
// the token is not an valid html tag emitted by chroma
|
||||
!(len(token) > 6 && (token[0:5] == "<span" || token[0:6] == "</span")) {
|
||||
count++
|
||||
|
@ -132,15 +135,15 @@ func HighlightSearchResultCode(filename string, lineNums []int, highlightRanges
|
|||
continue
|
||||
}
|
||||
|
||||
switch count {
|
||||
case end:
|
||||
switch {
|
||||
case count >= end:
|
||||
// if tag is not open, no need to close
|
||||
if !isOpen {
|
||||
break
|
||||
}
|
||||
sb.WriteRune(endTag)
|
||||
isOpen = false
|
||||
case start:
|
||||
case count >= start:
|
||||
// if tag is open, do not open again
|
||||
if isOpen {
|
||||
break
|
||||
|
@ -161,7 +164,7 @@ func HighlightSearchResultCode(filename string, lineNums []int, highlightRanges
|
|||
highlightedLines := strings.Split(hcd.Recover(conv), "\n")
|
||||
// The lineNums outputted by highlight.Code might not match the original lineNums, because "highlight" removes the last `\n`
|
||||
lines := make([]ResultLine, min(len(highlightedLines), len(lineNums)))
|
||||
for i := 0; i < len(lines); i++ {
|
||||
for i := range len(lines) {
|
||||
lines[i].Num = lineNums[i]
|
||||
lines[i].FormattedContent = template.HTML(highlightedLines[i])
|
||||
}
|
||||
|
|
122
modules/indexer/code/search_test.go
Normal file
122
modules/indexer/code/search_test.go
Normal file
|
@ -0,0 +1,122 @@
|
|||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package code
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHighlightSearchResultCode(t *testing.T) {
|
||||
opts := []struct {
|
||||
Title string
|
||||
File string
|
||||
Lines []int
|
||||
Range [][3]int
|
||||
Code string
|
||||
Result []template.HTML
|
||||
}{
|
||||
{
|
||||
Title: "One Match Text",
|
||||
File: "test.txt",
|
||||
Range: [][3]int{{1, 5, 9}},
|
||||
Code: "First Line\nMark this only\nThe End",
|
||||
Result: []template.HTML{
|
||||
"First Line",
|
||||
"Mark <span class=\"search-highlight\">this</span> only",
|
||||
"The End",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Two Match Text",
|
||||
File: "test.txt",
|
||||
Range: [][3]int{
|
||||
{1, 5, 9},
|
||||
{2, 5, 9},
|
||||
},
|
||||
Code: "First Line\nMark this only\nMark this too\nThe End",
|
||||
Result: []template.HTML{
|
||||
"First Line",
|
||||
"Mark <span class=\"search-highlight\">this</span> only",
|
||||
"Mark <span class=\"search-highlight\">this</span> too",
|
||||
"The End",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Unicode Before",
|
||||
File: "test.txt",
|
||||
Range: [][3]int{{1, 10, 14}},
|
||||
Code: "First Line\nMark 👉 this only\nThe End",
|
||||
Result: []template.HTML{
|
||||
"First Line",
|
||||
"Mark 👉 <span class=\"search-highlight\">this</span> only",
|
||||
"The End",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Unicode Between",
|
||||
File: "test.txt",
|
||||
Range: [][3]int{{1, 5, 14}},
|
||||
Code: "First Line\nMark this 😊 only\nThe End",
|
||||
Result: []template.HTML{
|
||||
"First Line",
|
||||
"Mark <span class=\"search-highlight\">this 😊</span> only",
|
||||
"The End",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Unicode Before And Between",
|
||||
File: "test.txt",
|
||||
Range: [][3]int{{1, 10, 19}},
|
||||
Code: "First Line\nMark 👉 this 😊 only\nThe End",
|
||||
Result: []template.HTML{
|
||||
"First Line",
|
||||
"Mark 👉 <span class=\"search-highlight\">this 😊</span> only",
|
||||
"The End",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Golang",
|
||||
File: "test.go",
|
||||
Range: [][3]int{{1, 14, 23}},
|
||||
Code: "func main() {\n\tfmt.Println(\"mark this\")\n}",
|
||||
Result: []template.HTML{
|
||||
"<span class=\"kd\">func</span> <span class=\"nf\">main</span><span class=\"p\">(</span><span class=\"p\">)</span> <span class=\"p\">{</span>",
|
||||
"\t<span class=\"nx\">fmt</span><span class=\"p\">.</span><span class=\"nf\">Println</span><span class=\"p\">(</span><span class=\"s\">"<span class=\"search-highlight\">mark this</span>"</span><span class=\"p\">)</span>",
|
||||
"<span class=\"p\">}</span>",
|
||||
},
|
||||
},
|
||||
{
|
||||
Title: "Golang Unicode",
|
||||
File: "test.go",
|
||||
Range: [][3]int{{1, 14, 28}},
|
||||
Code: "func main() {\n\tfmt.Println(\"mark this 😊\")\n}",
|
||||
Result: []template.HTML{
|
||||
"<span class=\"kd\">func</span> <span class=\"nf\">main</span><span class=\"p\">(</span><span class=\"p\">)</span> <span class=\"p\">{</span>",
|
||||
"\t<span class=\"nx\">fmt</span><span class=\"p\">.</span><span class=\"nf\">Println</span><span class=\"p\">(</span><span class=\"s\">"<span class=\"search-highlight\">mark this 😊</span>"</span><span class=\"p\">)</span>",
|
||||
"<span class=\"p\">}</span>",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, o := range opts {
|
||||
t.Run(o.Title, func(t *testing.T) {
|
||||
lines := []int{}
|
||||
for i := range strings.Count(strings.TrimSuffix(o.Code, "\n"), "\n") + 1 {
|
||||
lines = append(lines, i+1)
|
||||
}
|
||||
res := HighlightSearchResultCode(o.File, lines, o.Range, o.Code)
|
||||
assert.Len(t, res, len(o.Result))
|
||||
assert.Len(t, res, len(lines))
|
||||
|
||||
for i, r := range res {
|
||||
require.Equal(t, lines[i], r.Num)
|
||||
require.Equal(t, o.Result[i], r.FormattedContent)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -46,7 +46,7 @@ var (
|
|||
// https://www.debian.org/doc/debian-policy/ch-controlfields.html#source
|
||||
namePattern = regexp.MustCompile(`\A[a-z0-9][a-z0-9+-.]+\z`)
|
||||
// https://www.debian.org/doc/debian-policy/ch-controlfields.html#version
|
||||
versionPattern = regexp.MustCompile(`\A(?:[0-9]:)?[a-zA-Z0-9.+~]+(?:-[a-zA-Z0-9.+-~]+)?\z`)
|
||||
versionPattern = regexp.MustCompile(`\A(?:[1-9]?[0-9]:)?[a-zA-Z0-9.+~]+(?:-[a-zA-Z0-9.+-~]+)?\z`)
|
||||
)
|
||||
|
||||
type Package struct {
|
||||
|
|
|
@ -167,6 +167,14 @@ func TestParseControlFile(t *testing.T) {
|
|||
require.ErrorIs(t, err, ErrInvalidArchitecture)
|
||||
})
|
||||
|
||||
t.Run("ValidVersionEpoch", func(t *testing.T) {
|
||||
for _, version := range []string{"0:1.2.3-test", "1:1.2.3-test", "9:1.2.3-test", "10:1.2.3-test", "37:1.2.3-test", "99:1.2.3-test"} {
|
||||
p, err := ParseControlFile(buildContent(packageName, version, packageArchitecture))
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, p)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Valid", func(t *testing.T) {
|
||||
content := buildContent(packageName, packageVersion, packageArchitecture)
|
||||
full := content.String()
|
||||
|
|
|
@ -232,9 +232,10 @@ func getEntries(h *rpmutils.RpmHeader, namesTag, versionsTag, flagsTag int, repo
|
|||
case "alt":
|
||||
for i := range names {
|
||||
e := &Entry{
|
||||
Name: names[i],
|
||||
AltFlags: uint32(flags[i]),
|
||||
Version: versions[i],
|
||||
}
|
||||
e.Version = versions[i]
|
||||
entries = append(entries, e)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ var (
|
|||
PasswordHashAlgo string
|
||||
PasswordCheckPwn bool
|
||||
SuccessfulTokensCacheSize int
|
||||
DisableQueryAuthToken bool
|
||||
CSRFCookieName = "_csrf"
|
||||
CSRFCookieHTTPOnly = true
|
||||
)
|
||||
|
@ -159,4 +160,14 @@ func loadSecurityFrom(rootCfg ConfigProvider) {
|
|||
PasswordComplexity = append(PasswordComplexity, name)
|
||||
}
|
||||
}
|
||||
|
||||
sectionHasDisableQueryAuthToken := sec.HasKey("DISABLE_QUERY_AUTH_TOKEN")
|
||||
|
||||
// TODO: default value should be true in future releases
|
||||
DisableQueryAuthToken = sec.Key("DISABLE_QUERY_AUTH_TOKEN").MustBool(false)
|
||||
|
||||
// warn if the setting is set to false explicitly
|
||||
if sectionHasDisableQueryAuthToken && !DisableQueryAuthToken {
|
||||
log.Warn("Enabling Query API Auth tokens is not recommended. DISABLE_QUERY_AUTH_TOKEN will be removed in Forgejo v13.0.0.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ import (
|
|||
"forgejo.org/modules/json"
|
||||
"forgejo.org/modules/log"
|
||||
"forgejo.org/modules/util"
|
||||
|
||||
"github.com/caddyserver/certmagic"
|
||||
)
|
||||
|
||||
// Scheme describes protocol types
|
||||
|
@ -206,7 +208,7 @@ func loadServerFrom(rootCfg ConfigProvider) {
|
|||
EnableAcme = sec.Key("ENABLE_LETSENCRYPT").MustBool(false)
|
||||
}
|
||||
if EnableAcme {
|
||||
AcmeURL = sec.Key("ACME_URL").MustString("")
|
||||
AcmeURL = sec.Key("ACME_URL").MustString(certmagic.LetsEncryptProductionCA)
|
||||
AcmeCARoot = sec.Key("ACME_CA_ROOT").MustString("")
|
||||
|
||||
if sec.HasKey("ACME_ACCEPTTOS") {
|
||||
|
|
|
@ -76,8 +76,13 @@ var getBucketVersioning = func(ctx context.Context, minioClient *minio.Client, b
|
|||
return err
|
||||
}
|
||||
|
||||
var initializationTimeout = 30 * time.Second
|
||||
|
||||
// NewMinioStorage returns a minio storage
|
||||
func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage, error) {
|
||||
initCtx, cancel := context.WithTimeout(ctx, initializationTimeout)
|
||||
defer cancel()
|
||||
|
||||
config := cfg.MinioConfig
|
||||
if config.ChecksumAlgorithm != "" && config.ChecksumAlgorithm != "default" && config.ChecksumAlgorithm != "md5" {
|
||||
return nil, fmt.Errorf("invalid minio checksum algorithm: %s", config.ChecksumAlgorithm)
|
||||
|
@ -112,7 +117,7 @@ func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage,
|
|||
// Otherwise even if the request itself fails (403, 404, etc), the code should still continue because the parameters seem "good" enough.
|
||||
// Keep in mind that GetBucketVersioning requires "owner" to really succeed, so it can't be used to check the existence.
|
||||
// Not using "BucketExists (HeadBucket)" because it doesn't include detailed failure reasons.
|
||||
err = getBucketVersioning(ctx, minioClient, config.Bucket)
|
||||
err = getBucketVersioning(initCtx, minioClient, config.Bucket)
|
||||
if err != nil {
|
||||
errResp, ok := err.(minio.ErrorResponse)
|
||||
if !ok {
|
||||
|
@ -125,13 +130,13 @@ func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage,
|
|||
}
|
||||
|
||||
// Check to see if we already own this bucket
|
||||
exists, err := minioClient.BucketExists(ctx, config.Bucket)
|
||||
exists, err := minioClient.BucketExists(initCtx, config.Bucket)
|
||||
if err != nil {
|
||||
return nil, convertMinioErr(err)
|
||||
}
|
||||
|
||||
if !exists {
|
||||
if err := minioClient.MakeBucket(ctx, config.Bucket, minio.MakeBucketOptions{
|
||||
if err := minioClient.MakeBucket(initCtx, config.Bucket, minio.MakeBucketOptions{
|
||||
Region: config.Location,
|
||||
}); err != nil {
|
||||
return nil, convertMinioErr(err)
|
||||
|
|
|
@ -9,8 +9,10 @@ import (
|
|||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"forgejo.org/modules/setting"
|
||||
"forgejo.org/modules/test"
|
||||
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -217,3 +219,41 @@ func TestMinioCredentials(t *testing.T) {
|
|||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestNewMinioStorageInitializationTimeout(t *testing.T) {
|
||||
defer test.MockVariableValue(&getBucketVersioning, func(ctx context.Context, minioClient *minio.Client, bucket string) error {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-time.After(1 * time.Millisecond):
|
||||
return minio.ErrorResponse{
|
||||
StatusCode: http.StatusBadRequest,
|
||||
Code: "TestError",
|
||||
Message: "Mocked error for testing",
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
settings := &setting.Storage{
|
||||
MinioConfig: setting.MinioStorageConfig{
|
||||
Endpoint: "localhost",
|
||||
AccessKeyID: "123456",
|
||||
SecretAccessKey: "12345678",
|
||||
Bucket: "bucket",
|
||||
Location: "us-east-1",
|
||||
},
|
||||
}
|
||||
|
||||
// Verify that we reach `getBucketVersioning` and return the error from our mock.
|
||||
storage, err := NewMinioStorage(t.Context(), settings)
|
||||
require.ErrorContains(t, err, "Mocked error for testing")
|
||||
assert.Nil(t, storage)
|
||||
|
||||
defer test.MockVariableValue(&initializationTimeout, 1*time.Nanosecond)()
|
||||
|
||||
// Now that the timeout is super low, verify that we get a context deadline exceeded error from our mock.
|
||||
storage, err = NewMinioStorage(t.Context(), settings)
|
||||
require.Error(t, err)
|
||||
require.ErrorIs(t, err, context.DeadlineExceeded, "err must be a context deadline exceeded error, but was %v", err)
|
||||
assert.Nil(t, storage)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,11 @@
|
|||
|
||||
package util
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestShellEscape(t *testing.T) {
|
||||
tests := []struct {
|
||||
|
@ -79,13 +83,23 @@ func TestShellEscape(t *testing.T) {
|
|||
"Single quotes don't need to escape except for '...",
|
||||
"~/<gitea> ${gitea} `gitea` (gitea) !gitea! \"gitea\" \\gitea\\ 'gitea'",
|
||||
"~/'<gitea> ${gitea} `gitea` (gitea) !gitea! \"gitea\" \\gitea\\ '\\''gitea'\\'",
|
||||
}, {
|
||||
"Inline command",
|
||||
"some`echo foo`thing",
|
||||
"\"some\\`echo foo\\`thing\"",
|
||||
}, {
|
||||
"Substitution",
|
||||
`;${HOME}`,
|
||||
`";\${HOME}"`,
|
||||
}, {
|
||||
"ANSI Escape codes (not escaped)",
|
||||
"\033[31;1;4mHello\033[0m",
|
||||
"\"\x1b[31;1;4mHello\x1b[0m\"",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := ShellEscape(tt.toEscape); got != tt.want {
|
||||
t.Errorf("ShellEscape(%q):\nGot: %s\nWanted: %s", tt.toEscape, got, tt.want)
|
||||
}
|
||||
assert.Equal(t, tt.want, ShellEscape(tt.toEscape))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,3 +95,25 @@ func UnsafeBytesToString(b []byte) string {
|
|||
func UnsafeStringToBytes(s string) []byte {
|
||||
return unsafe.Slice(unsafe.StringData(s), len(s))
|
||||
}
|
||||
|
||||
// AsciiEqualFold is taken from Golang, but reimplemented here, since the original is not exposed to public
|
||||
// Taken from: https://cs.opensource.google/go/go/+/refs/tags/go1.24.4:src/net/http/internal/ascii/print.go
|
||||
func ASCIIEqualFold(s, t string) bool {
|
||||
if len(s) != len(t) {
|
||||
return false
|
||||
}
|
||||
for i := 0; i < len(s); i++ {
|
||||
if ASCIILower(s[i]) != ASCIILower(t[i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// AsciiLower returns the ASCII lowercase version of b.
|
||||
func ASCIILower(b byte) byte {
|
||||
if 'A' <= b && b <= 'Z' {
|
||||
return b + ('a' - 'A')
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
|
|
@ -45,3 +45,29 @@ func TestToSnakeCase(t *testing.T) {
|
|||
assert.Equal(t, expected, ToSnakeCase(input))
|
||||
}
|
||||
}
|
||||
|
||||
func TestASCIIEqualFold(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
First string
|
||||
Second string
|
||||
Expected bool
|
||||
}{
|
||||
"Empty String": {First: "", Second: "", Expected: true},
|
||||
"Single Letter Ident": {First: "h", Second: "h", Expected: true},
|
||||
"Single Letter Equal": {First: "h", Second: "H", Expected: true},
|
||||
"Single Letter Unequal": {First: "h", Second: "g", Expected: false},
|
||||
"Simple Match Ident": {First: "someString", Second: "someString", Expected: true},
|
||||
"Simple Match Equal": {First: "someString", Second: "someSTRIng", Expected: true},
|
||||
"Simple Match Unequal": {First: "someString", Second: "sameString", Expected: false},
|
||||
"Different Length": {First: "abcdef", Second: "abcdefg", Expected: false},
|
||||
"Unicode Kelvin": {First: "ghijklm", Second: "GHIJ\u212ALM", Expected: false},
|
||||
}
|
||||
|
||||
for name := range cases {
|
||||
c := cases[name]
|
||||
t.Run(name, func(t *testing.T) {
|
||||
Actual := ASCIIEqualFold(c.First, c.Second)
|
||||
assert.Equal(t, c.Expected, Actual)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,16 +72,23 @@ func validateEmailBasic(email string) error {
|
|||
}
|
||||
|
||||
func validateEmailDomain(email string) error {
|
||||
if !IsEmailDomainAllowed(email) {
|
||||
if _, ok := IsEmailDomainAllowed(email); !ok {
|
||||
return ErrEmailInvalid{email}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func IsEmailDomainAllowed(email string) bool {
|
||||
return isEmailDomainAllowedInternal(
|
||||
email,
|
||||
func IsEmailDomainAllowed(email string) (validEmail, ok bool) {
|
||||
// Normalized the address. This strips for example comments which could be
|
||||
// used to smuggle a different domain
|
||||
parsedAddress, err := mail.ParseAddress(email)
|
||||
if err != nil {
|
||||
return false, false
|
||||
}
|
||||
|
||||
return true, isEmailDomainAllowedInternal(
|
||||
parsedAddress.Address,
|
||||
setting.Service.EmailDomainAllowList,
|
||||
setting.Service.EmailDomainBlockList)
|
||||
}
|
||||
|
|
|
@ -67,8 +67,3 @@ func TestEmailAddressValidate(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmailDomainAllowList(t *testing.T) {
|
||||
res := IsEmailDomainAllowed("someuser@localhost.localdomain")
|
||||
assert.True(t, res)
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,10 +7,20 @@ sign_in = Увайсці
|
|||
sign_in_or = або
|
||||
sign_out = Выйсці
|
||||
sign_up = Зарэгістравацца
|
||||
link_account = Звязаць Уліковы запіс
|
||||
link_account = Звязаць уліковы запіс
|
||||
register = Рэгістрацыя
|
||||
version = Версія
|
||||
powered_by = Працуе на ℅s
|
||||
page = Старонка
|
||||
home = Галоўная Старонка
|
||||
sign_in_with_provider = Увайсці з %s
|
||||
sign_in_with_provider = Увайсці з %s
|
||||
template = Шаблон
|
||||
language = Мова
|
||||
notifications = Апавяшчэнні
|
||||
create_new = Стварыць…
|
||||
user_profile_and_more = Профіль і налады…
|
||||
signed_in_as = Увайшоў як
|
||||
enable_javascript = Гэты вэб-сайт патрабуе JavaScript.
|
||||
toc = Змест
|
||||
licenses = Ліцэнзіі
|
||||
return_to_forgejo = Вярнуцца да Forgejo
|
|
@ -142,6 +142,8 @@ webauthn_error = Неуспешно прочитане на вашия ключ
|
|||
webauthn_unsupported_browser = Вашият браузър в момента не поддържа WebAuthn.
|
||||
webauthn_error_duplicated = Ключът за сигурност не е разрешен за тази заявка. Моля, уверете се, че ключът не е вече регистриран.
|
||||
|
||||
tracked_time_summary = Обобщение на проследеното време въз основа на филтрите в списъка със задачи
|
||||
|
||||
[settings]
|
||||
ui = Тема
|
||||
delete_key = Премахване
|
||||
|
@ -324,7 +326,7 @@ permissions_list = Разрешения:
|
|||
edit_oauth2_application = Редактиране на OAuth2 приложение
|
||||
remove_oauth2_application = Премахване на OAuth2 приложение
|
||||
twofa_recovery_tip = Ако загубите устройството си, ще можете да използвате ключ за еднократно възстановяване, за да си върнете достъпа до акаунта.
|
||||
visibility.private_tooltip = Видим само за членове на организации, в които участвате
|
||||
visibility.private_tooltip = Видим само за участници в организации, в които участвате
|
||||
quota.applies_to_user = Следните правила за квота се прилагат за вашия акаунт
|
||||
quota.rule.no_limit = Неограничена
|
||||
hints = Подсказки
|
||||
|
@ -381,6 +383,20 @@ comment_type_group_lock = Състояние на заключване
|
|||
can_not_add_email_activations_pending = Има чакаща активация, опитайте отново след няколко минути, ако искате да добавите нова ел. поща.
|
||||
storage_overview = Преглед на съхранението
|
||||
|
||||
webauthn = Двуфакторно удостоверяване (Ключове за сигурност)
|
||||
quota.sizes.all = Всички
|
||||
quota.sizes.repos.all = Хранилища
|
||||
quota.sizes.repos.public = Публични хранилища
|
||||
quota.sizes.repos.private = Частни хранилища
|
||||
quota.sizes.git.all = Git съдържание
|
||||
quota.sizes.git.lfs = Git LFS
|
||||
quota.sizes.assets.attachments.all = Прикачени файлове
|
||||
quota.sizes.assets.attachments.issues = Прикачени файлове към задачи
|
||||
quota.sizes.assets.attachments.releases = Прикачени файлове към издания
|
||||
quota.sizes.assets.artifacts = Артефакти
|
||||
quota.sizes.assets.packages.all = Пакети
|
||||
quota.sizes.wiki = Уики
|
||||
|
||||
[packages]
|
||||
container.labels.value = Стойност
|
||||
alpine.repository.repositories = Хранилища
|
||||
|
@ -439,6 +455,113 @@ arch.version.conflicts = В конфликт
|
|||
alpine.repository.branches = Клонове
|
||||
arch.pacman.repo.multi.item = Конфигурация за %s
|
||||
|
||||
desc = Управление на пакетите на хранилището.
|
||||
alpine.registry = Настройте този регистър, като добавите URL адреса във вашия файл <code>/etc/apk/repositories</code>:
|
||||
alpine.registry.key = Изтеглете публичния RSA ключ на регистъра в папката <code>/etc/apk/keys/</code>, за да проверите подписа на индекса:
|
||||
alpine.registry.info = Изберете $branch и $repository от списъка по-долу.
|
||||
alpine.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
arch.version.properties = Свойства на версията
|
||||
arch.version.makedepends = Зависимости за изграждането
|
||||
arch.version.checkdepends = Зависимости за проверката
|
||||
chef.registry = Настройте този регистър във вашия файл <code>~/.chef/config.rb</code>:
|
||||
chef.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
composer.registry = Настройте този регистър във вашия файл <code>~/.composer/config.json</code>:
|
||||
composer.install = За да инсталирате пакета с Composer, изпълнете следната команда:
|
||||
composer.dependencies = Зависимости
|
||||
conan.details.repository = Хранилище
|
||||
conan.registry = Настройте този регистър от командния ред:
|
||||
conan.install = За да инсталирате пакета с Conan, изпълнете следната команда:
|
||||
conda.registry = Настройте този регистър като Conda хранилище във вашия файл <code>.condarc</code>:
|
||||
conda.install = За да инсталирате пакета с Conda, изпълнете следната команда:
|
||||
container.pull = Издърпайте образа от командния ред:
|
||||
container.multi_arch = ОС / Архитектура
|
||||
container.layers = Слоеве на образа
|
||||
cran.registry = Настройте този регистър във вашия файл <code>Rprofile.site</code>:
|
||||
cran.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
debian.registry = Настройте този регистър от командния ред:
|
||||
debian.registry.info = Изберете $distribution и $component от списъка по-долу.
|
||||
debian.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
debian.repository = Информация за хранилището
|
||||
debian.repository.distributions = Дистрибуции
|
||||
debian.repository.components = Компоненти
|
||||
debian.repository.architectures = Архитектури
|
||||
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.install = За да инсталирате пакета с NuGet, изпълнете следната команда:
|
||||
nuget.dependency.framework = Целева платформа
|
||||
npm.registry = Настройте този регистър във файла на вашия проект <code>.npmrc</code>:
|
||||
npm.install = За да инсталирате пакета с npm, изпълнете следната команда:
|
||||
npm.install2 = или го добавете във файла package.json:
|
||||
npm.dependencies.optional = Опционални зависимости
|
||||
npm.details.tag = Маркер
|
||||
pub.install = За да инсталирате пакета с Dart, изпълнете следната команда:
|
||||
pypi.requires = Изисква Python
|
||||
pypi.install = За да инсталирате пакета с pip, изпълнете следната команда:
|
||||
rpm.registry = Настройте този регистър от командния ред:
|
||||
rpm.distros.redhat = на дистрибуции, базирани на RedHat
|
||||
rpm.distros.suse = на дистрибуции, базирани на SUSE
|
||||
rpm.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
rpm.repository = Информация за хранилището
|
||||
rpm.repository.architectures = Архитектури
|
||||
rpm.repository.multiple_groups = Този пакет е наличен в няколко групи.
|
||||
alt.registry = Настройте този регистър от командния ред:
|
||||
alt.registry.install = За да инсталирате пакета, изпълнете следната команда:
|
||||
alt.install = Инсталиране на пакет
|
||||
alt.setup = Добавете хранилище към списъка със свързани хранилища (изберете необходимата архитектура вместо „_arch_“):
|
||||
alt.repository = Информация за хранилището
|
||||
alt.repository.architectures = Архитектури
|
||||
alt.repository.multiple_groups = Този пакет е наличен в няколко групи.
|
||||
swift.registry = Настройте този регистър от командния ред:
|
||||
swift.install = Добавете пакета във вашия файл <code>Package.swift</code>:
|
||||
swift.install2 = и изпълнете следната команда:
|
||||
vagrant.install = За да добавите Vagrant box, изпълнете следната команда:
|
||||
settings.link = Свързване на този пакет с хранилище
|
||||
settings.link.description = Ако свържете пакет с хранилище, пакетът се изброява в списъка с пакети на хранилището.
|
||||
settings.link.select = Изберете хранилище
|
||||
settings.link.button = Обновяване на връзката на хранилището
|
||||
settings.link.success = Връзката на хранилището беше успешно обновена.
|
||||
settings.link.error = Неуспешно обновяване на връзката на хранилището.
|
||||
settings.delete.description = Изтриването на пакет е трайно и не може да бъде отменено.
|
||||
settings.delete.notice = На път сте да изтриете %s (%s). Тази операция е необратима, сигурни ли сте?
|
||||
owner.settings.cargo.title = Индекс на регистъра на Cargo
|
||||
owner.settings.cargo.initialize = Инициализиране на индекс
|
||||
owner.settings.cargo.initialize.description = Необходимо е специално Git хранилище за индекс, за да се използва регистърът на Cargo. Използването на тази опция ще (пре)създаде хранилището и ще го конфигурира автоматично.
|
||||
owner.settings.cargo.initialize.error = Неуспешно инициализиране на индекса на Cargo: %v
|
||||
owner.settings.cargo.initialize.success = Индексът на Cargo беше успешно създаден.
|
||||
owner.settings.cargo.rebuild = Преизграждане на индекс
|
||||
owner.settings.cargo.rebuild.description = Преизграждането може да бъде полезно, ако индексът не е синхронизиран със съхранените Cargo пакети.
|
||||
owner.settings.cargo.rebuild.error = Неуспешно преизграждане на индекса на Cargo: %v
|
||||
owner.settings.cargo.rebuild.success = Индексът на Cargo беше успешно преизграден.
|
||||
owner.settings.cargo.rebuild.no_index = Не може да се преизгради, няма инициализиран индекс.
|
||||
owner.settings.cleanuprules.title = Правила за почистване
|
||||
owner.settings.cleanuprules.add = Добавяне на правило за почистване
|
||||
owner.settings.cleanuprules.edit = Редактиране на правилото за почистване
|
||||
owner.settings.cleanuprules.none = Все още няма правила за почистване.
|
||||
owner.settings.cleanuprules.preview = Преглед на правило за почистване
|
||||
owner.settings.cleanuprules.preview.overview = %d пакета са насрочени за премахване.
|
||||
owner.settings.cleanuprules.preview.none = Правилото за почистване не съвпада с нито един пакет.
|
||||
owner.settings.cleanuprules.enabled = Включено
|
||||
owner.settings.cleanuprules.pattern_full_match = Прилагане на шаблона към пълното име на пакета
|
||||
owner.settings.cleanuprules.keep.title = Версиите, които съответстват на тези правила, се запазват, дори ако съответстват на правило за премахване по-долу.
|
||||
owner.settings.cleanuprules.keep.count = Запазване на най-новите
|
||||
owner.settings.cleanuprules.keep.count.1 = 1 версия на пакет
|
||||
owner.settings.cleanuprules.keep.count.n = %d версии на пакет
|
||||
owner.settings.cleanuprules.keep.pattern = Запазване на версии, съответстващи на
|
||||
owner.settings.cleanuprules.keep.pattern.container = Версията <code>latest</code> винаги се запазва за Container пакети.
|
||||
owner.settings.cleanuprules.remove.title = Версиите, които съответстват на тези правила, се премахват, освен ако правило по-горе не казва да се запазят.
|
||||
owner.settings.cleanuprules.remove.days = Премахване на версии, по-стари от
|
||||
owner.settings.cleanuprules.remove.pattern = Премахване на версии, съответстващи на
|
||||
owner.settings.cleanuprules.success.update = Правилото за почистване е обновено.
|
||||
owner.settings.cleanuprules.success.delete = Правилото за почистване е изтрито.
|
||||
owner.settings.chef.title = Регистър на Chef
|
||||
owner.settings.chef.keypair = Генериране на двойка ключове
|
||||
owner.settings.chef.keypair.description = Заявките, изпратени до регистъра на Chef, трябва да бъдат криптографски подписани като средство за удостоверяване. При генериране на двойка ключове, само публичният ключ се съхранява във Forgejo. Частният ключ ви се предоставя, за да се използва с knife. Генерирането на нова двойка ключове ще презапише предишната.
|
||||
|
||||
[tool]
|
||||
hours = %d часа
|
||||
now = сега
|
||||
|
@ -940,9 +1063,9 @@ editor.no_changes_to_show = Няма промени за показване.
|
|||
issues.choose.get_started = Първи стъпки
|
||||
issues.change_milestone_at = `промени етапа от <b>%s</b> на <b>%s</b> %s`
|
||||
issues.change_project_at = `промени проекта от <b>%s</b> на <b>%s</b> %s`
|
||||
issues.self_assign_at = `си само-възложи това %s`
|
||||
issues.self_assign_at = `си самовъзложи това %s`
|
||||
issues.remove_assignee_at = `е премахнат като изпълнител от <b>%s</b> %s`
|
||||
issues.remove_self_assignment = `се само-премахна като изпълнител %s`
|
||||
issues.remove_self_assignment = `се самопремахна като изпълнител %s`
|
||||
issues.add_assignee_at = `му бе възложено това от <b>%s</b> %s`
|
||||
pulls.merged_by = от <a href="%[2]s">%[3]s</a> бе слята %[1]s
|
||||
pulls.merged_by_fake = от %[2]s бе слята %[1]s
|
||||
|
@ -1272,7 +1395,7 @@ issues.review.show_resolved = Показване на решено
|
|||
issues.review.hide_resolved = Скриване на решено
|
||||
issues.review.resolve_conversation = Решаване на обсъждането
|
||||
diff.comment.markdown_info = Поддържа се стилизиране с Маркдаун.
|
||||
diff.file_suppressed = Разликите не са показани, защото са твърде много
|
||||
diff.file_suppressed = Разликите във файла са потиснати, защото са твърде много
|
||||
pulls.reject_count_n = %d поискани промени
|
||||
settings.pulls.default_allow_edits_from_maintainers = Позволяване на редакции от поддържащите по подразбиране
|
||||
fork_branch = Клон за клониране в разклонението
|
||||
|
@ -1347,7 +1470,7 @@ settings.default_branch_desc = Изберете стандартен клон з
|
|||
settings.transfer.button = Прехвърляне на притежанието
|
||||
settings.transfer.modal.title = Прехвърляне на притежанието
|
||||
ambiguous_runes_line = `Този ред съдържа двусмислени Уникод знаци`
|
||||
ambiguous_character = `%[1]c [U+%04[1]X] може да бъде объркан с %[2]c [U+%04[2]X]`
|
||||
ambiguous_character = `%[1]c [U+%04[1]X] може да бъде объркан със %[2]c [U+%04[2]X]`
|
||||
invisible_runes_header = `Този файл съдържа невидими Уникод знаци`
|
||||
issues.all_title = Общо
|
||||
issues.new.assign_to_me = Възлагане на мен
|
||||
|
@ -1446,7 +1569,7 @@ generated_from = генерирано от
|
|||
clear_ref = `Изчистване на текущата препратка`
|
||||
file_follow = Последване на символната връзка
|
||||
commitstatus.failure = Неуспех
|
||||
issues.filter_label_exclude = `Използвайте <code>alt</code> + <code>click/enter</code>, за да изключите етикети`
|
||||
issues.filter_label_exclude = Използвайте <kbd>Alt</kbd> + <kbd>Click</kbd>, за да изключите етикети
|
||||
migrate.migrating_failed = Мигрирането от <b>%s</b> е неуспешно.
|
||||
migrate.migrating_issues = Мигриране на задачи
|
||||
mirror_from = огледално на
|
||||
|
@ -1576,6 +1699,178 @@ issues.force_push_compare = Сравняване
|
|||
pulls.status_checking = Някои проверки са в очакване
|
||||
pulls.nothing_to_compare = Тези клонове са равни. Не е нужно да създавате заявка за сливане.
|
||||
|
||||
rss.must_be_on_branch = Трябва да сте на клон, за да имате RSS емисия.
|
||||
admin.manage_flags = Управление на флаговете
|
||||
admin.enabled_flags = Флагове, включени за хранилището:
|
||||
admin.update_flags = Обновяване на флаговете
|
||||
admin.failed_to_replace_flags = Неуспешна замяна на флаговете на хранилището
|
||||
admin.flags_replaced = Флаговете на хранилището са заменени
|
||||
fork_to_different_account = Разклоняване в друг акаунт
|
||||
mirror_interval = Интервал на огледалото (валидни единици за време са „h“, „m“, „s“). 0 за изключване на периодичната синхронизация. (Минимален интервал: %s)
|
||||
mirror_interval_invalid = Интервалът на огледалото не е валиден.
|
||||
mirror_use_ssh.text = Използване на SSH удостоверяване
|
||||
mirror_use_ssh.helper = Forgejo ще създаде огледало на хранилището чрез Git през SSH и ще генерира двойка ключове за вас, когато изберете тази опция. Трябва да се уверите, че генерираният публичен ключ е упълномощен да изтласква към целевото хранилище. Не можете да използвате удостоверяване, базирано на парола, когато избирате това.
|
||||
mirror_use_ssh.not_available = SSH удостоверяването не е налично.
|
||||
mirror_denied_combination = Не може да се използва удостоверяване с публичен ключ и парола едновременно.
|
||||
mirror_sync_on_commit = Синхронизиране при изтласкване на подавания
|
||||
mirror_address_desc = Поставете всички необходими данни за удостоверяване в секцията „Упълномощаване“.
|
||||
mirror_address_url_invalid = Предоставеният URL е невалиден. Трябва да екранирате правилно всички компоненти на URL адреса.
|
||||
mirror_address_protocol_invalid = Предоставеният URL е невалиден. Само http(s):// или git:// адреси могат да се използват за огледални хранилища.
|
||||
mirror_lfs = Съхранение на големи файлове (LFS)
|
||||
mirror_password_help = Променете потребителското име, за да изтриете запазена парола.
|
||||
unit_disabled = Администраторът на сайта е изключил тази секция на хранилището.
|
||||
summary_card_alt = Карта с обобщение на хранилище %s
|
||||
template.items = Елементи на шаблона
|
||||
template.git_content = Git съдържание (стандартен клон)
|
||||
template.git_hooks = Git куки
|
||||
template.git_hooks_tooltip = В момента не можете да променяте или премахвате Git куки, след като са добавени. Изберете това само ако се доверявате на шаблонното хранилище.
|
||||
template.one_item = Трябва да изберете поне един елемент от шаблона
|
||||
template.invalid = Трябва да изберете шаблонно хранилище
|
||||
migrate.cancel_migrating_title = Отказ от миграцията
|
||||
migrate.cancel_migrating_confirm = Искате ли да откажете тази миграция?
|
||||
invisible_runes_description = `Този файл съдържа невидими Уникод знаци, които са неразличими за хората, но могат да бъдат обработени по различен начин от компютър. Ако смятате, че това е умишлено, можете спокойно да пренебрегнете това предупреждение. Използвайте бутона „Екраниране“, за да ги разкриете.`
|
||||
ambiguous_runes_header = `Този файл съдържа двусмислени Уникод знаци`
|
||||
ambiguous_runes_description = `Този файл съдържа Уникод знаци, които могат да бъдат объркани с други знаци. Ако смятате, че това е умишлено, можете спокойно да пренебрегнете това предупреждение. Използвайте бутона „Екраниране“, за да ги разкриете.`
|
||||
file_copy_permalink = Копиране на постоянна връзка
|
||||
view_git_blame = Преглед на git blame
|
||||
video_not_supported_in_browser = Вашият браузър не поддържа HTML5 тага „video“.
|
||||
audio_not_supported_in_browser = Вашият браузър не поддържа HTML5 тага „audio“.
|
||||
stored_lfs = Съхранено с Git LFS
|
||||
commit_graph.select = Изберете клонове
|
||||
editor.cannot_edit_lfs_files = LFS файлове не могат да се редактират в уеб интерфейса.
|
||||
editor.filename_help = Добавете директория, като въведете името ѝ, последвано от наклонена черта („/“). Премахнете директория, като натиснете backspace в началото на полето за въвеждане.
|
||||
editor.commit_signed_changes = Подаване на подписани промени
|
||||
editor.require_signed_commit = Клонът изисква подписано подаване
|
||||
editor.commit_email = Ел. поща на подаването
|
||||
commits.desc = Разглеждане на историята на промените в програмния код.
|
||||
commits.search.tooltip = Можете да добавите префикс към ключовите думи с „author:“, „committer:“, „after:“ или „before:“, напр. „revert author:Alice before:2019-01-13“.
|
||||
commits.signed_by = Подписано от
|
||||
commits.signed_by_untrusted_user = Подписано от недоверен потребител
|
||||
commits.signed_by_untrusted_user_unmatched = Подписано от недоверен потребител, който не съвпада с подаващия
|
||||
commits.ssh_key_fingerprint = Отпечатък на SSH ключ
|
||||
commits.view_single_diff = Преглед на промените в този файл, въведени в това подаване
|
||||
commit.revert = Връщане
|
||||
commit.revert-header = Връщане: %s
|
||||
commit.revert-content = Изберете клон, върху който да се върне:
|
||||
issues.desc = Организирайте доклади за грешки, задачи и етапи.
|
||||
issues.choose.ignore_invalid_templates = Невалидните шаблони са игнорирани
|
||||
issues.choose.invalid_config = Конфигурацията на задачите съдържа грешки:
|
||||
issues.filter_type.all_pull_requests = Всички заявки за сливане
|
||||
issues.role.member_helper = Този потребител е участник в организацията, притежаваща това хранилище.
|
||||
issues.lock.unknown_reason = Не може да се заключи задача с неизвестна причина.
|
||||
issues.lock_duplicate = Задача не може да бъде заключена два пъти.
|
||||
issues.unlock_error = Не може да се отключи задача, която не е заключена.
|
||||
issues.lock.notice_1 = - Други потребители не могат да добавят нови коментари към тази задача.
|
||||
issues.lock.notice_2 = - Вие и други сътрудници с достъп до това хранилище все още можете да оставяте коментари, които другите да виждат.
|
||||
issues.lock.notice_3 = - Винаги можете да отключите тази задача отново в бъдеще.
|
||||
issues.unlock.notice_1 = - Всеки ще може отново да коментира тази задача.
|
||||
issues.unlock.notice_2 = - Винаги можете да заключите тази задача отново в бъдеще.
|
||||
issues.lock.title = Заключване на обсъждането по тази задача.
|
||||
issues.unlock.title = Отключване на обсъждането по тази задача.
|
||||
issues.comment_on_locked = Не можете да коментирате заключена задача.
|
||||
issues.delete.text = Наистина ли искате да изтриете тази задача? (Това ще премахне трайно цялото съдържание. Помислете дали вместо това да не я затворите, ако възнамерявате да я запазите архивирана)
|
||||
issues.cancel_tracking_history = `отмени проследяването на времето %s`
|
||||
issues.add_time_sum_to_small = Не е въведено време.
|
||||
issues.due_date_form = гггг-мм-дд
|
||||
issues.due_date_invalid = Крайният срок е невалиден или извън обхвата. Моля, използвайте формата „гггг-мм-дд“.
|
||||
issues.dependency.no_permission_1 = Нямате разрешение да прочетете %d зависимост
|
||||
issues.dependency.no_permission_n = Нямате разрешение да прочетете %d зависимости
|
||||
issues.dependency.no_permission.can_remove = Нямате разрешение да прочетете тази зависимост, но можете да я премахнете
|
||||
issues.dependency.issue_batch_close_blocked = Не могат да бъдат затворени групово избраните задачи, защото задача #%d все още има отворени зависимости
|
||||
issues.dependency.blocked_by_short = Зависи от
|
||||
issues.dependency.setting = Включване на зависимости за задачи и заявки за сливане
|
||||
issues.dependency.add_error_same_issue = Не можете да направите задача зависима от самата нея.
|
||||
issues.dependency.add_error_dep_issue_not_exist = Зависимата задача не съществува.
|
||||
issues.dependency.add_error_cannot_create_circular = Не можете да създадете зависимост с две задачи, които се блокират взаимно.
|
||||
issues.dependency.add_error_dep_not_same_repo = И двете задачи трябва да са в едно и също хранилище.
|
||||
issues.review.self.rejection = Не можете да поискате промени в собствената си заявка за сливане.
|
||||
issues.review.dismissed = отхвърли рецензията на %s %s
|
||||
issues.review.content.empty = Трябва да оставите коментар, посочващ исканите промени.
|
||||
issues.review.add_review_requests = поиска рецензии от %[1]s %[2]s
|
||||
issues.review.remove_review_request = премахна заявката за рецензия за %[1]s %[2]s
|
||||
issues.review.remove_review_requests = премахна заявките за рецензия за %[1]s %[2]s
|
||||
issues.review.remove_review_request_self = отказа да рецензира %s
|
||||
issues.review.pending.tooltip = Този коментар в момента не е видим за други потребители. За да изпратите изчакващите си коментари, изберете „%s“ -> „%s/%s/%s“ в горната част на страницата.
|
||||
issues.review.outdated = Остарял
|
||||
issues.review.outdated_description = Съдържанието е променено, след като е направен този коментар
|
||||
issues.review.show_outdated = Показване на остарели
|
||||
issues.review.hide_outdated = Скриване на остарели
|
||||
issues.content_history.options = Опции
|
||||
issues.blocked_by_user = Не можете да създавате задачи в това хранилище, защото сте блокирани от притежателя на хранилището.
|
||||
comment.blocked_by_user = Коментирането не е възможно, защото сте блокирани от притежателя на хранилището или от автора.
|
||||
issues.reopen.blocked_by_user = Не можете да отворите наново тази задача, защото сте блокирани от притежателя на хранилището или от автора на тази задача.
|
||||
compare.compare_base = основа
|
||||
compare.compare_head = сравняване
|
||||
pulls.desc = Включване на заявки за сливане и рецензии на код.
|
||||
pulls.view = Преглед на заявката за сливане
|
||||
pulls.allow_edits_from_maintainers_desc = Потребители с право на запис в основния клон могат също да изтласкват към този клон
|
||||
pulls.allow_edits_from_maintainers_err = Обновяването е неуспешно
|
||||
pulls.has_changed_since_last_review = Променено след последната ви рецензия
|
||||
pulls.switch_comparison_type = Превключване на типа сравнение
|
||||
pulls.filter_branch = Филтриране на клон
|
||||
pulls.review_only_possible_for_full_diff = Рецензирането е възможно само при преглед на пълните разлики
|
||||
pulls.wrong_commit_id = ID на подаването трябва да бъде ID на подаване в целевия клон
|
||||
pulls.blocked_by_user = Не можете да създадете заявка за сливане в това хранилище, защото сте блокирани от притежателя на хранилището.
|
||||
pulls.no_merge_desc = Тази заявка за сливане не може да бъде слята, защото всички опции за сливане в хранилището са изключени.
|
||||
pulls.no_merge_helper = Включете опциите за сливане в настройките на хранилището или слейте заявката за сливане ръчно.
|
||||
pulls.no_merge_wip = Тази заявка за сливане не може да бъде слята, защото е отбелязана като в процес на работа.
|
||||
pulls.squash_merge_pull_request = Създаване на сплескано подаване
|
||||
pulls.merge_manually = Ръчно слята
|
||||
pulls.merge_commit_id = ID на подаването със сливане
|
||||
pulls.require_signed_wont_sign = Клонът изисква подписани подавания, но това сливане няма да бъде подписано
|
||||
pulls.merge_conflict = Сливането е неуспешно: Възникна конфликт по време на сливането. Подсказка: Опитайте различна стратегия
|
||||
pulls.merge_conflict_summary = Съобщение за грешка
|
||||
pulls.rebase_conflict_summary = Съобщение за грешка
|
||||
pulls.has_merged = Неуспешно: Заявката за сливане е слята, не можете да слеете отново или да промените целевия клон.
|
||||
pulls.push_rejected = Изтласкването е неуспешно: Изтласкването е отхвърлено. Прегледайте Git куките за това хранилище.
|
||||
pulls.push_rejected_no_message = Изтласкването е неуспешно: Изтласкването е отхвърлено, но няма отдалечено съобщение. Прегледайте Git куките за това хранилище
|
||||
pulls.update_not_allowed = Нямате разрешение да обновявате клона
|
||||
pulls.outdated_with_base_branch = Този клон е остарял спрямо основния клон
|
||||
pulls.cmd_instruction_merge_warning = <b>Предупреждение:</b> Настройката „Автоматично откриване на ръчно сливане“ не е включена за това хранилище, ще трябва да отбележите тази заявка за сливане като ръчно слята след това.
|
||||
pulls.editable_explanation = Тази заявка за сливане позволява редакции от поддържащите. Можете да допринесете директно към нея.
|
||||
pulls.auto_merge_button_when_succeed = (Когато проверките са успешни)
|
||||
pulls.auto_merge_when_succeed = Автоматично сливане, когато всички проверки са успешни
|
||||
pulls.auto_merge_newly_scheduled = Заявката за сливане е насрочена за сливане, когато всички проверки са успешни.
|
||||
pulls.auto_merge_has_pending_schedule = %[1]s насрочи тази заявка за сливане за автоматично сливане, когато всички проверки са успешни %[2]s.
|
||||
pulls.auto_merge_cancel_schedule = Отмяна на автоматичното сливане
|
||||
pulls.auto_merge_not_scheduled = Тази заявка за сливане не е насрочена за автоматично сливане.
|
||||
pulls.auto_merge_canceled_schedule = Автоматичното сливане е отменено за тази заявка за сливане.
|
||||
pulls.auto_merge_newly_scheduled_comment = `насрочи тази заявка за сливане за автоматично сливане, когато всички проверки са успешни %[1]s`
|
||||
pulls.auto_merge_canceled_schedule_comment = `отмени автоматичното сливане на тази заявка за сливане, когато всички проверки са успешни %[1]s`
|
||||
pulls.delete.title = Да се изтрие ли тази заявка за сливане?
|
||||
pulls.delete.text = Наистина ли искате да изтриете тази заявка за сливане? (Това ще премахне трайно цялото съдържание. Помислете дали вместо това да не я затворите, ако възнамерявате да я запазите архивирана)
|
||||
diff.data_not_available = Съдържанието на разликите не е налично
|
||||
diff.bin = ДВОИЧЕН
|
||||
diff.file_suppressed_line_too_long = Разликите във файла са потиснати, защото един или повече редове са твърде дълги
|
||||
diff.too_many_files = Някои файлове не бяха показани, защото твърде много файлове имат промени в тези разлики
|
||||
diff.show_more = Показване на още
|
||||
diff.generated = генериран
|
||||
diff.comment.add_line_comment = Добавяне на коментар към ред
|
||||
diff.comment.add_review_comment = Добавяне на коментар
|
||||
diff.review.self_reject = Авторите на заявки за сливане не могат да поискват промени в собствените си заявки
|
||||
diff.review.self_approve = Авторите на заявки за сливане не могат да одобряват собствените си заявки
|
||||
diff.image.side_by_side = Едно до друго
|
||||
diff.image.swipe = Плъзгане
|
||||
diff.image.overlay = Наслагване
|
||||
diff.has_escaped = Този ред има скрити Уникод знаци
|
||||
release.tag_name_protected = Името на маркера е защитено.
|
||||
release.add_tag_msg = Използване на заглавието и съдържанието на изданието като съобщение на маркера.
|
||||
release.hide_archive_links = Скриване на автоматично генерираните архиви
|
||||
release.hide_archive_links_helper = Скрийте автоматично генерираните архиви с програмен код за това издание. Например, ако качвате свои собствени.
|
||||
release.asset_external_url = Външен URL адрес
|
||||
release.summary_card_alt = Карта с обобщение на издание със заглавие „%s“ в хранилище %s
|
||||
branch.protected_deletion_failed = Клонът „%s“ е защитен. Не може да бъде изтрит.
|
||||
branch.default_deletion_failed = Клонът „%s“ е стандартният клон. Не може да бъде изтрит.
|
||||
branch.included_desc = Този клон е част от стандартния клон
|
||||
branch.included = Включен
|
||||
branch.warning_rename_default_branch = Преименувате стандартния клон.
|
||||
topic.count_prompt = Не можете да изберете повече от 25 теми
|
||||
find_file.no_matching = Не е намерен съвпадащ файл
|
||||
error.csv.too_large = Не може да се визуализира този файл, защото е твърде голям.
|
||||
error.csv.unexpected = Не може да се визуализира този файл, защото съдържа неочакван знак на ред %d и колона %d.
|
||||
error.csv.invalid_field_count = Не може да се визуализира този файл, защото има грешен брой полета на ред %d.
|
||||
error.broken_git_hook = Git куките на това хранилище изглеждат повредени. Моля, последвайте <a target="_blank" rel="noreferrer" href="%s">документацията</a>, за да ги поправите, след което изтласкайте подавания, за да обновите статуса.
|
||||
|
||||
[modal]
|
||||
confirm = Потвърждаване
|
||||
no = Не
|
||||
|
@ -1663,18 +1958,18 @@ follow_blocked_user = Не можете да следвате тази орга
|
|||
settings.delete_prompt = Организацията ще бъде премахната завинаги. Това <strong>НЕ МОЖЕ</strong> да бъде отменено!
|
||||
settings.labels_desc = Добавете етикети, които могат да се използват за задачи за <strong>всички хранилища</strong> в тази организация.
|
||||
teams.none_access = Без достъп
|
||||
teams.members.none = Няма членове в този екип.
|
||||
teams.members.none = Няма участници в този екип.
|
||||
repo_updated = Обновено %s
|
||||
teams.delete_team_success = Екипът е изтрит.
|
||||
teams.search_repo_placeholder = Потърсете хранилище…
|
||||
teams.delete_team_title = Изтриване на екипа
|
||||
teams.add_team_member = Добавяне на член на екипа
|
||||
teams.add_team_member = Добавяне на участник в екипа
|
||||
teams.read_access_helper = Членовете могат да преглеждат и клонират хранилищата на екипа.
|
||||
teams.invite.description = Моля, щракнете върху бутона по-долу, за да се присъедините към екипа.
|
||||
teams.invite.title = Поканени сте да се присъедините към екип <strong>%s</strong> в организация <strong>%s</strong>.
|
||||
team_permission_desc = Разрешение
|
||||
members.public_helper = Да е скрит
|
||||
teams.members = Членове на екипа
|
||||
teams.members = Участници в екипа
|
||||
teams.delete_team = Изтриване на екипа
|
||||
members.owner = Притежател
|
||||
members.member_role = Роля на участника:
|
||||
|
@ -1685,6 +1980,38 @@ settings.delete_org_desc = Тази организация ще бъде изт
|
|||
open_dashboard = Отваряне на таблото
|
||||
settings.change_orgname_prompt = Бележка: Промяната на името на организацията ще промени и URL адреса на вашата организация и ще освободи старото име.
|
||||
|
||||
team_access_desc = Достъп до хранилище
|
||||
team_unit_desc = Разрешаване на достъп до секции на хранилището
|
||||
team_unit_disabled = (Изключено)
|
||||
form.name_reserved = Името на организацията „%s“ е резервирано.
|
||||
form.name_pattern_not_allowed = Шаблонът „%s“ не е разрешен в име на организация.
|
||||
form.create_org_not_allowed = Нямате разрешение да създавате организация.
|
||||
settings.update_setting_success = Настройките на организацията са обновени.
|
||||
settings.change_orgname_redirect_prompt = Старото име ще се пренасочва, докато не бъде взето.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Старото име на организацията ще бъде достъпно за всички след период на изчакване от %[1]d ден. Все още можете да си върнете старото име по време на периода на изчакване.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Старото име на организацията ще бъде достъпно за всички след период на изчакване от %[1]d дни. Все още можете да си върнете старото име по време на периода на изчакване.
|
||||
settings.update_avatar_success = Профилната снимка на организацията е обновена.
|
||||
settings.hooks_desc = Добавете уеб-куки, които ще се задействат за <strong>всички хранилища</strong> в тази организация.
|
||||
members.membership_visibility = Видимост на участничеството:
|
||||
members.public = Видим
|
||||
members.private = Скрит
|
||||
members.invite_desc = Добавяне на нов участник към %s:
|
||||
members.invite_now = Поканване сега
|
||||
teams.admin_access = Администраторски достъп
|
||||
teams.invite_team_member = Поканване в %s
|
||||
teams.invite_team_member.list = Чакащи покани
|
||||
teams.delete_team_desc = Изтриването на екип отнема достъпа до хранилището от неговите участници. Продължаване?
|
||||
teams.remove_all_repos_desc = Това ще премахне всички хранилища от екипа.
|
||||
teams.add_all_repos_title = Добавяне на всички хранилища
|
||||
teams.add_all_repos_desc = Това ще добави всички хранилища на организацията към екипа.
|
||||
teams.add_nonexistent_repo = Хранилището, което се опитвате да добавите, не съществува, моля, първо го създайте.
|
||||
teams.add_duplicate_users = Потребителят вече е участник в екипа.
|
||||
teams.repos.none = Няма хранилища, до които този екип да има достъп.
|
||||
teams.specific_repositories = Конкретни хранилища
|
||||
teams.specific_repositories_helper = Участниците ще имат достъп само до хранилища, изрично добавени към екипа. Избирането на това <strong>няма</strong> автоматично да премахне хранилища, вече добавени с <i>Всички хранилища</i>.
|
||||
teams.all_repositories_helper = Екипът има достъп до всички хранилища. Избирането на това ще <strong>добави всички съществуващи</strong> хранилища към екипа.
|
||||
teams.invite.by = Поканен от %s
|
||||
|
||||
[install]
|
||||
admin_password = Парола
|
||||
user = Потребителско име
|
||||
|
@ -1978,14 +2305,14 @@ Pronouns = Местоимения
|
|||
Biography = Биография
|
||||
Website = Уебсайт
|
||||
Location = Местоположение
|
||||
cannot_add_org_to_team = Организация не може да бъде добавена като член на екип.
|
||||
cannot_add_org_to_team = Организация не може да бъде добавена като участник в екип.
|
||||
auth_failed = Неуспешно удостоверяване: %v
|
||||
team_no_units_error = Разрешете достъп до поне една секция на хранилището.
|
||||
password_uppercase_one = Поне един голям знак
|
||||
CommitSummary = Обобщение на подаването
|
||||
username_error = ` може да съдържа само буквено-цифрови знаци („0-9“, „a-z“, „A-Z“), тире („-“), долна черта („_“) и точка („.“). Не може да започва или завършва с не-буквено-цифрови знаци, като също така са забранени и последователни не-буквено-цифрови знаци.`
|
||||
username_error_no_dots = ` може да съдържа само буквено-цифрови знаци („0-9“, „a-z“, „A-Z“), тире („-“) и долна черта („_“). Не може да започва или завършва с не-буквено-цифрови знаци, като също така са забранени и последователни не-буквено-цифрови знаци.`
|
||||
duplicate_invite_to_team = Потребителят вече е поканен като член на екипа.
|
||||
duplicate_invite_to_team = Потребителят вече е поканен като участник в екипа.
|
||||
must_use_public_key = Ключът, който предоставихте, е частен ключ. Моля, не качвайте частния си ключ никъде. Вместо това използвайте публичния си ключ.
|
||||
org_still_own_packages = Тази организация все още притежава един или повече пакети, първо ги изтрийте.
|
||||
admin_cannot_delete_self = Не можете да изтриете себе си, когато сте администратор. Моля, първо премахнете администраторските си привилегии.
|
||||
|
@ -2006,7 +2333,7 @@ enterred_invalid_repo_name = Името на хранилището, което
|
|||
enterred_invalid_org_name = Името на организацията, което въведохте, е неправилно.
|
||||
enterred_invalid_password = Паролата, която въведохте, е неправилна.
|
||||
organization_leave_success = Успешно напуснахте организацията %s.
|
||||
still_has_org = Вашият акаунт е член на една или повече организации, първо ги напуснете.
|
||||
still_has_org = Вашият акаунт е участник в една или повече организации, първо ги напуснете.
|
||||
org_still_own_repo = Тази организация все още притежава едно или повече хранилища, първо ги изтрийте или прехвърлете.
|
||||
target_branch_not_exist = Целевият клон не съществува.
|
||||
glob_pattern_error = ` glob шаблонът е невалиден: %s.`
|
||||
|
@ -2017,6 +2344,18 @@ AdminEmail = Администраторски адрес за ел. поща
|
|||
email_domain_is_not_allowed = Домейнът на адреса за ел. поща на потребителя <b>%s</b> е в конфликт с EMAIL_DOMAIN_ALLOWLIST или EMAIL_DOMAIN_BLOCKLIST. Уверете се, че сте въвели правилно адреса за ел. поща.
|
||||
email_been_used = Адресът за ел. поща вече се използва.
|
||||
|
||||
NewBranchName = Име на новия клон
|
||||
git_ref_name_error = ` трябва да е правилно форматирано име на Git препратка.`
|
||||
regex_pattern_error = ` шаблонът на регулярния израз е невалиден: %s.`
|
||||
repository_files_already_exist = Вече съществуват файлове за това хранилище. Свържете се със системния администратор.
|
||||
repository_files_already_exist.delete = Вече съществуват файлове за това хранилище. Трябва да ги изтриете.
|
||||
enterred_invalid_owner_name = Името на новия притежател не е валидно.
|
||||
last_org_owner = Не можете да премахнете последния потребител от екипа на „притежателите“. Трябва да има поне един притежател за организация.
|
||||
invalid_ssh_key = Не може да се потвърди вашият SSH ключ: %s
|
||||
invalid_gpg_key = Не може да се потвърди вашият GPG ключ: %s
|
||||
unable_verify_ssh_key = Не може да се потвърди SSH ключът, проверете го отново за грешки.
|
||||
required_prefix = Въведеният текст трябва да започва с „%s“
|
||||
|
||||
[action]
|
||||
close_issue = `затвори задача <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
rename_repo = преименува хранилище от <code>%[1]s</code> на <a href="%[2]s">%[3]s</a>
|
||||
|
@ -2045,6 +2384,12 @@ compare_branch = Сравняване
|
|||
compare_commits_general = Сравняване на подавания
|
||||
compare_commits = Сравнете %d подавания
|
||||
|
||||
transfer_repo = прехвърли хранилище <code>%s</code> към <a href="%s">%s</a>
|
||||
mirror_sync_push = синхронизира подавания към <a href="%[2]s">%[3]s</a> на <a href="%[1]s">%[4]s</a> от огледало
|
||||
mirror_sync_create = синхронизира нова препратка <a href="%[2]s">%[3]s</a> към <a href="%[1]s">%[4]s</a> от огледало
|
||||
mirror_sync_delete = синхронизира и изтри препратка <code>%[2]s</code> на <a href="%[1]s">%[3]s</a> от огледало
|
||||
review_dismissed = `отхвърли рецензия от <b>%[4]s</b> за <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
|
||||
[auth]
|
||||
tab_openid = OpenID
|
||||
openid_connect_submit = Свързване
|
||||
|
@ -2178,6 +2523,15 @@ variables.not_found = Променливата не е открита.
|
|||
variables.id_not_exist = Променлива с идентификатор %d не съществува.
|
||||
runners.owner_type = Тип
|
||||
|
||||
unit.desc = Управление на интегрирани CI/CD pipelines с Forgejo Actions.
|
||||
status.unknown = Неизвестно
|
||||
status.waiting = Изчаква се
|
||||
status.running = Изпълнява се
|
||||
status.success = Успешно
|
||||
status.failure = Неуспешно
|
||||
status.cancelled = Отменено
|
||||
status.skipped = Пропуснато
|
||||
|
||||
[heatmap]
|
||||
less = По-малко
|
||||
number_of_contributions_in_the_last_12_months = %s приноса през последните 12 месеца
|
||||
|
@ -2258,3 +2612,32 @@ eib = ЕиБ
|
|||
|
||||
[translation_meta]
|
||||
test = окей
|
||||
|
||||
[repo.permissions]
|
||||
code.read = <b>Четене:</b> Достъп и клониране на кода на хранилището.
|
||||
code.write = <b>Писане:</b> Изтласкване към хранилището, създаване на клонове и маркери.
|
||||
issues.read = <b>Четене:</b> Четене и създаване на задачи и коментари.
|
||||
issues.write = <b>Писане:</b> Затваряне на задачи и управление на метаданни като етикети, етапи, изпълнители, крайни срокове и зависимости.
|
||||
pulls.read = <b>Четене:</b> Четене и създаване на заявки за сливане.
|
||||
pulls.write = <b>Писане:</b> Затваряне на заявки за сливане и управление на метаданни като етикети, етапи, изпълнители, крайни срокове и зависимости.
|
||||
releases.read = <b>Четене:</b> Преглед и изтегляне на издания.
|
||||
wiki.read = <b>Четене:</b> Четене на интегрираното уики и неговата история.
|
||||
wiki.write = <b>Писане:</b> Създаване, обновяване и изтриване на страници в интегрираното уики.
|
||||
projects.read = <b>Четене:</b> Достъп до проектните табла на хранилището.
|
||||
projects.write = <b>Писане:</b> Създаване и редактиране на проекти и колони.
|
||||
|
||||
[gpg]
|
||||
default_key = Подписано с ключ по подразбиране
|
||||
error.extract_sign = Неуспешно извличане на подпис
|
||||
error.generate_hash = Неуспешно генериране на хеш на подаването
|
||||
error.no_committer_account = Няма акаунт, свързан с адреса за ел. поща на подаващия
|
||||
error.no_gpg_keys_found = Не е намерен известен ключ за този подпис в базата данни
|
||||
error.not_signed_commit = Не е подписано подаване
|
||||
error.failed_retrieval_gpg_keys = Неуспешно извличане на ключ, свързан с акаунта на подаващия
|
||||
error.probable_bad_signature = ВНИМАНИЕ! Въпреки че има ключ с това ID в базата данни, той не потвърждава това подаване! Това подаване е ПОДОЗРИТЕЛНО.
|
||||
error.probable_bad_default_signature = ВНИМАНИЕ! Въпреки че ключът по подразбиране има това ID, той не потвърждава това подаване! Това подаване е ПОДОЗРИТЕЛНО.
|
||||
|
||||
[units]
|
||||
unit = Елемент
|
||||
error.no_unit_allowed_repo = Нямате разрешение за достъп до никоя секция на това хранилище.
|
||||
error.unit_not_allowed = Нямате разрешение за достъп до тази секция на хранилището.
|
||||
|
|
|
@ -153,26 +153,26 @@ fuzzy = Difusa
|
|||
search = Cerca...
|
||||
type_tooltip = Tipus de cerca
|
||||
fuzzy_tooltip = Inclou resultats que s'assemblen al terme de la cerca
|
||||
repo_kind = Cerca repos...
|
||||
user_kind = Cerca usuaris...
|
||||
repo_kind = Cerca repos…
|
||||
user_kind = Cerca usuaris…
|
||||
code_search_unavailable = La cerca de codi no està disponible actualment. Si us plau concteu amb l'administrador del lloc.
|
||||
code_search_by_git_grep = Els resultats actuals de la cerca de codi són proporcionats per "git grep". Podríen haver-hi millors resultats si l'administrador del lloc habilita l'indexador de codi.
|
||||
package_kind = Cerca paquets...
|
||||
project_kind = Cerca projectes...
|
||||
branch_kind = Cerca branques...
|
||||
commit_kind = Cerca commits...
|
||||
runner_kind = Cerca executors...
|
||||
package_kind = Cerca paquets…
|
||||
project_kind = Cerca projectes…
|
||||
branch_kind = Cerca branques…
|
||||
commit_kind = Cerca commits…
|
||||
runner_kind = Cerca executors…
|
||||
no_results = Cap resultat coincident trobat.
|
||||
keyword_search_unavailable = La cerca per paraula clau no està disponible ara mateix. Si us plau contacteu amb l'administrador del lloc.
|
||||
union = Paraules clau
|
||||
union_tooltip = Inclou resultats que encaixen amb qualsevol paraula clau separada per espais
|
||||
org_kind = Cerca organitzacions...
|
||||
team_kind = Cerca teams...
|
||||
code_kind = Cerca codi...
|
||||
pull_kind = Cerca "pulls"...
|
||||
org_kind = Cerca organitzacions…
|
||||
team_kind = Cerca teams…
|
||||
code_kind = Cerca codi…
|
||||
pull_kind = Cerca "pulls"…
|
||||
exact = Exacte
|
||||
exact_tooltip = Inclou només resultats que són exactament el terme de cerca
|
||||
issue_kind = Cerca problemes...
|
||||
issue_kind = Cerca problemes…
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Interpreta el terme de cerca com una expressió regular
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ link_account=Propojit účet
|
|||
register=Registrace
|
||||
version=Verze
|
||||
powered_by=Běží na %s
|
||||
page=Strana
|
||||
page=Stránka
|
||||
template=Šablona
|
||||
language=Jazyk
|
||||
notifications=Oznámení
|
||||
|
@ -724,7 +724,7 @@ following_one = %d sledovaný
|
|||
followers.title.one = Sledující
|
||||
followers.title.few = Sledující
|
||||
following.title.one = Sleduje
|
||||
following.title.few = Sleudje
|
||||
following.title.few = Sleduje
|
||||
public_activity.visibility_hint.self_private = Vaše aktivita je viditelná pouze vám a správcům instance. <a href="%s">Nastavení</a>.
|
||||
public_activity.visibility_hint.admin_private = Tato aktivita je pro vás viditelná, protože jste administrátor, ale uživatel chce, aby zůstala soukromá.
|
||||
public_activity.visibility_hint.self_public = Vaše aktivita je viditelná všem, mimo interakcí v soukromých prostorech. <a href="%s">Nastavení</a>.
|
||||
|
@ -1063,7 +1063,7 @@ language.localization_project = Pomozte nám s překladem Forgejo do vašeho jaz
|
|||
user_block_yourself = Nemůžete zablokovat sami sebe.
|
||||
pronouns_custom_label = Vlastní zájmena
|
||||
change_username_redirect_prompt.with_cooldown.few = Staré uživatelské jméno bude dostupné ostatním po %[1]d dnech. Do té doby budete moci své staré uživatelské jméno znovu získat.
|
||||
change_username_redirect_prompt.with_cooldown.one = Staré uživatelské jméno bude dostupné ostatním po %[1]d dni. Do té doby budete moci své staré uživatelské jméno znovu získat.
|
||||
change_username_redirect_prompt.with_cooldown.one = Staré uživatelské jméno bude dostupné ostatním po %[1]d dnu. Do té doby budete moci své staré uživatelské jméno znovu získat.
|
||||
keep_pronouns_private = Zobrazovat zájmena pouze přihlášeným uživatelům
|
||||
keep_pronouns_private.description = Toto nastavení skryje vaše zájmena před návštěvníky, kteří nejsou přihlášeni.
|
||||
quota = Kvóta
|
||||
|
@ -1091,6 +1091,8 @@ regenerate_token = Resetovat
|
|||
access_token_regeneration = Znovu vygenerovat přístupový token
|
||||
access_token_regeneration_desc = Opětovným vygenerováním tokenu znemožníte přístup k vašemu účtu aplikacím, které jej používají. Tato akce je nevratná. Chcete pokračovat?
|
||||
|
||||
ssh_token_help_ssh_agent = nebo, pokud používáte agenta SSH (s nastavenou proměnnou SSH_AUTH_SOCK):
|
||||
|
||||
[repo]
|
||||
new_repo_helper=Repozitář obsahuje všechny soubory projektu, včetně historie revizí. Už jej hostujete jinde? <a href="%s">Migrovat repozitář</a>.
|
||||
owner=Vlastník
|
||||
|
@ -1556,7 +1558,7 @@ issues.label_templates.info=Zatím nebyly vytvořeny žádné štítky. Vytvořt
|
|||
issues.label_templates.helper=Vyberte přednastavené značky
|
||||
issues.label_templates.use=Použít přednastavené štítky
|
||||
issues.label_templates.fail_to_load_file=Nepodařilo se načíst soubor šablony popisku „%s“: %v
|
||||
issues.add_label=přidal/a %s štítek %s
|
||||
issues.add_label=přidal/a štítek %s %s
|
||||
issues.add_labels=přidal/a %s štítky %s
|
||||
issues.remove_label=odstranil/a %s štítek %s
|
||||
issues.remove_labels=odstranil/a %s štítky %s
|
||||
|
@ -1579,7 +1581,7 @@ issues.remove_ref_at=`odstranil/a referenci <b>%s</b> %s`
|
|||
issues.add_ref_at=`přidal/a referenci <b>%s</b> %s`
|
||||
issues.delete_branch_at=`odstranil/a větev <b>%s</b> %s`
|
||||
issues.filter_label=Štítek
|
||||
issues.filter_label_exclude=`Chcete-li vyloučit štítky, použijte <code>alt</code> + <code>click/enter</code>`
|
||||
issues.filter_label_exclude=Chcete-li vyloučit štítky, použijte <kbd>Alt</kbd> + <kbd>kliknutí</kbd>
|
||||
issues.filter_label_no_select=Všechny štítky
|
||||
issues.filter_label_select_no_label=Bez štítku
|
||||
issues.filter_milestone=Milník
|
||||
|
@ -1763,7 +1765,7 @@ 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 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_codes=`vynutil/a 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
|
||||
issues.due_date_form_add=Přidat termín dokončení
|
||||
|
@ -1813,7 +1815,7 @@ issues.review.approve=schválil/a tyto změny %s
|
|||
issues.review.comment=posoudil/a %s
|
||||
issues.review.dismissed=zamítl/a posouzení uživatele %s %s
|
||||
issues.review.dismissed_label=Zamítnuto
|
||||
issues.review.left_comment=zanechal komentář
|
||||
issues.review.left_comment=zanechal/a komentář
|
||||
issues.review.content.empty=Je potřeba zanechat poznámku s uvedením požadované změny (požadovaných změn).
|
||||
issues.review.reject=požádal/a o změny %s
|
||||
issues.review.wait=byl/a požádán/a o posouzení %s
|
||||
|
@ -3058,7 +3060,7 @@ teams.invite.by=Pozvání od %s
|
|||
teams.invite.description=Pro připojení k týmu klikněte na tlačítko níže.
|
||||
follow_blocked_user = Tuto organizaci nemůžete sledovat, protože jste v ní zablokováni.
|
||||
open_dashboard = Otevřít nástěnku
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Starý název organizace bude dostupný ostatním po %[1]d dni. Do té doby budete moci staré jméno znovu získat.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Starý název organizace bude dostupný ostatním po %[1]d dnu. Do té doby budete moci staré jméno znovu získat.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Starý název organizace bude dostupný ostatním po %[1]d dnech. Do té doby budete moci starý název znovu získat.
|
||||
|
||||
[admin]
|
||||
|
@ -3991,7 +3993,7 @@ variables.update.success=Proměnná byla upravena.
|
|||
runners.none = Nejsou dostupné žádné runnery
|
||||
runs.workflow = Workflow
|
||||
runners = Runnery
|
||||
runs.pushed_by = pushnuto uživatelem
|
||||
runs.pushed_by = pushnuta uživatelem
|
||||
need_approval_desc = Potřebovat schválení pro spouštění workflowů pro žádosti o sloučení forků.
|
||||
runners.runner_manage_panel = Správa runnerů
|
||||
runs.no_job_without_needs = Workflow musí obsahovat alespoň jednu práci bez závislostí.
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
|
||||
|
||||
[common]
|
||||
home = Hjem
|
||||
dashboard = Instrumentpanel
|
||||
|
@ -978,8 +975,8 @@ delete_with_all_comments = Din konto er yngre end %s. For at undgå spøgelsesko
|
|||
delete_account_title = Slet brugerkonto
|
||||
user_block_yourself = Du kan ikke blokere dig selv.
|
||||
pronouns_custom_label = Brugerdefinerede stedord
|
||||
change_username_redirect_prompt.with_cooldown.one = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
|
||||
change_username_redirect_prompt.with_cooldown.few = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
|
||||
change_username_redirect_prompt.with_cooldown.one = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, år. Du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
|
||||
change_username_redirect_prompt.with_cooldown.few = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, år. Du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
|
||||
keep_pronouns_private = Vis kun stedord til godkendte brugere
|
||||
keep_pronouns_private.description = Dette vil skjule dine stedord for besøgende, der ikke er logget ind.
|
||||
quota.applies_to_user = Følgende kvoteregler gælder for din konto
|
||||
|
@ -1520,13 +1517,13 @@ issues.add_labels = tilføjede %s etiketterne %s
|
|||
issues.add_remove_labels = tilføjede %s og fjernede %s etiketter %s
|
||||
issues.add_milestone_at = `føjede dette til <b>%s</b> milepælen %s`
|
||||
issues.add_project_at = `føjede dette til <b>%s</b>- projektet %s`
|
||||
issues.ref_reopening_from = `<a href="%[2]s">henviste til dette problem fra en pull-anmodning %[3]s, der vil genåbne den</a>, %[1]s`
|
||||
issues.ref_reopening_from = `<a href="%[2]s">henviste til dette problem fra en pull-anmodning %[3]s, der vil genåbne det</a>, %[1]s`
|
||||
issues.ref_closed_from = `<a href="%[3]s">lukkede dette problem %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2 ]s</a>`
|
||||
issues.ref_reopened_from = `<a href="%[3]s">genåbnede dette problem %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2 ]s</a>`
|
||||
issues.ref_from = `fra %[1]s`
|
||||
issues.author = Forfatter
|
||||
issues.commit_ref_at = `henviste til dette problem fra en commit %s`
|
||||
issues.ref_issue_from = `<a href="%[2]s">henviste til dette problem %[3]s</a> <a id="%[1]s" href="#%[1]s">%[2 ]s</a>`
|
||||
issues.ref_issue_from = `<a href="%[2]s">henviste til dette problem %[3]s</a> %[1]s`
|
||||
issues.ref_pull_from = `<a href="%[2]s">henviste til denne pull-anmodning %[3]s</a> %[1]s`
|
||||
issues.ref_closing_from = `<a href="%[2]s">henviste til dette problem fra en pull-anmodning %[3]s, der vil lukke det</a>, %[1]s`
|
||||
issues.author.tooltip.issue = Denne bruger er forfatteren til dette problem.
|
||||
|
@ -1582,7 +1579,7 @@ issues.change_ref_at = `ændret reference fra <b><strike>%s</strike></b> til <b>
|
|||
issues.remove_ref_at = `fjernet reference <b>%s</b> %s`
|
||||
issues.add_ref_at = `tilføjet reference <b>%s</b> %s`
|
||||
issues.delete_branch_at = `slettet gren <b>%s</b> %s`
|
||||
issues.filter_label_exclude = `Brug <code>alt</code> + <code>klik/enter</code> for at ekskludere etiketter`
|
||||
issues.filter_label_exclude = Brug <kbd>Alt</kbd> + <kbd>klik</kbd> for at ekskludere etiketter
|
||||
issues.filter_milestone = Milepæl
|
||||
issues.filter_milestone_all = Alle milepæle
|
||||
issues.filter_milestone_none = Ingen milepæle
|
||||
|
@ -2833,8 +2830,8 @@ team_permission_desc = Tilladelse
|
|||
members.member = Medlem
|
||||
settings.change_orgname_prompt = Bemærk: Ændring af organisationens navn vil også ændre din organisations URL og frigøre det gamle navn.
|
||||
settings.change_orgname_redirect_prompt = Det gamle navn vil omdirigere, indtil det gøres krav på.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, du kan stadig kræve det gamle navn tilbage i nedkølingsperioden.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, du kan stadig kræve det gamle navn tilbage i .
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, år. Du kan stadig kræve det gamle navn tilbage i nedkølingsperioden.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, år. Du kan stadig kræve det gamle navn tilbage i.
|
||||
settings.update_avatar_success = Organisationens avatar er blevet opdateret.
|
||||
members.public_helper = Gør skjult
|
||||
members.private = Skjult
|
||||
|
|
|
@ -251,12 +251,12 @@ db_schema_helper=Leer lassen, um den Datenbank-Standardwert („public“) zu ve
|
|||
ssl_mode=SSL
|
||||
path=Pfad
|
||||
sqlite_helper=Dateipfad zur SQLite3-Datenbank.<br>Gib einen absoluten Pfad an, wenn Forgejo als Service gestartet wird.
|
||||
reinstall_error=Du versuchst, in eine bereits existierende Forgejo Datenbank zu installieren
|
||||
reinstall_error=Du versuchst, in eine bereits existierende Forgejo-Datenbank zu installieren
|
||||
reinstall_confirm_message=Eine Neuinstallation mit einer bestehenden Forgejo-Datenbank kann mehrere Probleme verursachen. In den meisten Fällen solltest du deine vorhandene „app.ini“ verwenden, um Forgejo auszuführen. Wenn du weißt, was du tust, bestätige die folgenden Angaben:
|
||||
reinstall_confirm_check_1=Die von der SECRET_KEY in app.ini verschlüsselten Daten können verloren gehen: Benutzer können sich unter Umständen nicht mit 2FA/OTP einloggen und Spiegel könnten nicht mehr richtig funktionieren. Mit der Ankreuzung dieses Kästchens bestätigst du, dass die aktuelle app.ini-Datei den korrekten SECRET_KEY enthält.
|
||||
reinstall_confirm_check_2=Die Repositorys und Einstellungen müssen eventuell neu synchronisiert werden. Durch das Ankreuzen dieses Kästchens bestätigst du, dass du die Hooks für die Repositorys und die authorized_keys-Datei manuell neu synchronisierst. Du bestätigst, dass du sicherstellst, dass die Repository- und Spiegeleinstellungen korrekt sind.
|
||||
reinstall_confirm_check_3=Du bestätigst, dass du absolut sicher bist, dass diese Forgejo mit der richtigen app.ini läuft, und du sicher bist, dass du neu installieren musst. Du bestätigst, dass du die oben genannten Risiken anerkennst.
|
||||
err_empty_db_path=Der SQLite3 Datenbankpfad darf nicht leer sein.
|
||||
err_empty_db_path=Der SQLite3-Datenbankpfad darf nicht leer sein.
|
||||
no_admin_and_disable_registration=Du kannst Selbst-Registrierungen nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
|
||||
err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein.
|
||||
err_empty_admin_email=Die Administrator-E-Mail darf nicht leer sein.
|
||||
|
@ -463,7 +463,7 @@ openid_register_title=Neues Konto einrichten
|
|||
openid_register_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu.
|
||||
openid_signin_desc=Gib deine OpenID-URI ein, zum Beispiel alice.openid.example.org oder https://openid.example.org/alice.
|
||||
disable_forgot_password_mail=Die Kontowiederherstellung ist deaktiviert, da keine E-Mail eingerichtet ist. Bitte kontaktiere den zuständigen Administrator.
|
||||
disable_forgot_password_mail_admin=Die Kontowiederherstellung ist nur verfügbar, wenn eine E-Mail eingerichtet wurde. Bitte richte eine E-Mail Adresse ein, um die Kontowiederherstellung freizuschalten.
|
||||
disable_forgot_password_mail_admin=Die Kontowiederherstellung ist nur verfügbar, wenn eine E-Mail eingerichtet wurde. Bitte richte eine E-Mail-Adresse ein, um die Kontowiederherstellung freizuschalten.
|
||||
email_domain_blacklisted=Du kannst dich nicht mit deiner E-Mail-Adresse registrieren.
|
||||
authorize_application=Anwendung autorisieren
|
||||
authorize_redirect_notice=Du wirst zu %s weitergeleitet, wenn du diese Anwendung autorisierst.
|
||||
|
@ -530,8 +530,8 @@ issue.action.merge=<b>@%[1]s</b> hat #%[2]d in %[3]s zusammengeführt.
|
|||
issue.action.approve=<b>@%[1]s</b> hat diesen Pull-Request genehmigt.
|
||||
issue.action.reject=<b>@%[1]s</b> hat Änderungen auf diesem Pull-Request angefordert.
|
||||
issue.action.review=<b>@%[1]s</b> hat diesen Pull-Request kommentiert.
|
||||
issue.action.review_dismissed=<b>@%[1]s</b> hat das letzte Review von %[2]s für diesen Pull-Request verworfen.
|
||||
issue.action.ready_for_review=<b>@%[1]s</b> hat diesen Pull-Request zum Review freigegeben.
|
||||
issue.action.review_dismissed=<b>@%[1]s</b> hat die letzte Sichtung von %[2]s für diesen Pull-Request verworfen.
|
||||
issue.action.ready_for_review=<b>@%[1]s</b> hat diesen Pull-Request für die Sichtung freigegeben.
|
||||
issue.action.new=<b>@%[1]s</b> hat #%[2]d geöffnet.
|
||||
issue.in_tree_path=In %s:
|
||||
|
||||
|
@ -540,8 +540,8 @@ release.new.text=<b>@%[1]s</b> hat %[2]s in %[3]s released
|
|||
release.title=Titel: %s
|
||||
release.note=Anmerkung:
|
||||
release.downloads=Downloads:
|
||||
release.download.zip=Quellcode (ZIP Datei)
|
||||
release.download.targz=Quellcode (TAR.GZ Datei)
|
||||
release.download.zip=Quellcode (ZIP)
|
||||
release.download.targz=Quellcode (TAR.GZ)
|
||||
|
||||
repo.transfer.subject_to=%s möchte „%s“ an %s übertragen
|
||||
repo.transfer.subject_to_you=%s möchte dir „%s“ übertragen
|
||||
|
@ -633,7 +633,7 @@ repository_files_already_exist=Dateien für dieses Repository sind bereits vorha
|
|||
repository_files_already_exist.adopt=Dateien für dieses Repository existieren bereits und können nur übernommen werden.
|
||||
repository_files_already_exist.delete=Dateien für dieses Repository sind bereits vorhanden. Du must sie löschen.
|
||||
repository_files_already_exist.adopt_or_delete=Dateien für dieses Repository existieren bereits. Du musst sie entweder übernehmen oder löschen.
|
||||
visit_rate_limit=Das Rate-Limit bei der Gegenseite wurde erreicht.
|
||||
visit_rate_limit=Die Ratenbegrenzung bei der Gegenseite wurde erreicht.
|
||||
2fa_auth_required=Die Gegenseite benötigt Zweifaktorauthentifikation.
|
||||
org_name_been_taken=Der Organisationsname ist bereits vergeben.
|
||||
team_name_been_taken=Der Teamname ist bereits vergeben.
|
||||
|
@ -750,9 +750,9 @@ twofa=Zwei-Faktor-Authentifizierung (TOTP)
|
|||
account_link=Verknüpfte Benutzerkonten
|
||||
organization=Organisationen
|
||||
uid=UID
|
||||
webauthn=Hardware-Sicherheitsschlüssel
|
||||
webauthn=Zwei-Faktor-Authentifizierung (Sicherheitsschlüssel)
|
||||
|
||||
public_profile=Öffentliches Profil
|
||||
public_profile=Öffentliches profil
|
||||
biography_placeholder=Erzähle anderen ein wenig über dich selbst! (Markdown wird unterstützt)
|
||||
location_placeholder=Teile deinen ungefähren Standort mit anderen
|
||||
profile_desc=Über dich
|
||||
|
@ -787,7 +787,7 @@ comment_type_group_time_tracking=Zeiterfassung
|
|||
comment_type_group_deadline=Frist
|
||||
comment_type_group_dependency=Abhängigkeit
|
||||
comment_type_group_lock=Sperrstatus
|
||||
comment_type_group_review_request=Angeforderte Reviews
|
||||
comment_type_group_review_request=Angeforderte Sichtungen
|
||||
comment_type_group_pull_request_push=Hinzugefügte Commits
|
||||
comment_type_group_project=Projekt
|
||||
comment_type_group_issue_ref=Issue-Referenz
|
||||
|
@ -873,7 +873,7 @@ gpg_key_matched_identities_long=Die eingebetteten Identitäten in diesem Schlüs
|
|||
gpg_key_verified=Verifizierter Schlüssel
|
||||
gpg_key_verified_long=Der Schlüssel wurde mit einem Token verifiziert. Er kann verwendet werden, um Commits zu verifizieren, die mit irgendeiner für diesen Nutzer aktivierten E-Mail-Adresse und irgendeiner Identität dieses Schlüssels übereinstimmen.
|
||||
gpg_key_verify=Verifizieren
|
||||
gpg_invalid_token_signature=Der GPG-Key, die Signatur, und das Token stimmen nicht überein, oder das Token ist veraltet.
|
||||
gpg_invalid_token_signature=Der GPG-Key, die Signatur und das Token stimmen nicht überein, oder das Token ist veraltet.
|
||||
gpg_token_required=Du musst eine Signatur für das folgende Token angeben
|
||||
gpg_token=Token
|
||||
gpg_token_help=Du kannst eine Signatur wie folgt generieren:
|
||||
|
@ -885,9 +885,9 @@ ssh_key_verified=Verifizierter Schlüssel
|
|||
ssh_key_verified_long=Der Schlüssel wurde mit einem Token verifiziert. Er kann verwendet werden, um Commits zu verifizieren, die mit irgendeiner für diesen Nutzer aktivierten E-Mail-Adresse und irgendeiner Identität dieses Schlüssels übereinstimmen.
|
||||
ssh_key_verify=Verifizieren
|
||||
ssh_invalid_token_signature=Der gegebene SSH-Schlüssel, Signatur oder Token stimmen nicht überein oder der Token ist veraltet.
|
||||
ssh_token_required=Du musst eine Signatur für den Token unten angeben
|
||||
ssh_token_required=Sie müssen eine Signatur für das Token unten angeben
|
||||
ssh_token=Token
|
||||
ssh_token_help=Du kannst eine Signatur wie folgt generieren:
|
||||
ssh_token_help=Sie können eine Signatur wie folgt generieren:
|
||||
ssh_token_signature=SSH-Textsignatur (armored signature)
|
||||
key_signature_ssh_placeholder=Beginnt mit „-----BEGIN SSH SIGNATURE-----“
|
||||
verify_ssh_key_success=SSH-Key „%s“ wurde verifiziert.
|
||||
|
@ -902,10 +902,10 @@ add_principal_success=Die SSH-Zertifikatsidentität „%s“ wurde hinzugefügt.
|
|||
delete_key=Entfernen
|
||||
ssh_key_deletion=SSH-Schlüssel entfernen
|
||||
gpg_key_deletion=GPG-Schlüssel entfernen
|
||||
ssh_principal_deletion=SSH-Zertifik-Identität entfernen
|
||||
ssh_principal_deletion=SSH-Zertifikats-Principal entfernen
|
||||
ssh_key_deletion_desc=Wenn du einen SSH-Key entfernst, hast du mit diesem Key keinen Zugriff mehr. Fortfahren?
|
||||
gpg_key_deletion_desc=Wenn du einen GPG-Schlüssel entfernst, können damit unterschriebene Commits nicht mehr verifiziert werden. Fortfahren?
|
||||
ssh_principal_deletion_desc=Das Entfernen einer SSH-Zertifikat-Identität entzieht den Zugriff auf dein Konto. Fortfahren?
|
||||
ssh_principal_deletion_desc=Das Entfernen eines SSH-Zertifikats-Principals entzieht den Zugriff auf dein Konto. Fortfahren?
|
||||
ssh_key_deletion_success=Der SSH-Schlüssel wurde entfernt.
|
||||
gpg_key_deletion_success=Der GPG-Schlüssel wurde entfernt.
|
||||
ssh_principal_deletion_success=Die Identität wurde entfernt.
|
||||
|
@ -931,7 +931,7 @@ unbind_success=Das soziale Konto wurde erfolgreich entfernt.
|
|||
|
||||
manage_access_token=Zugriffstokens
|
||||
generate_new_token=Neuen Token erzeugen
|
||||
tokens_desc=Diese Tokens gewähren vollen Zugriff auf dein Konto via die Forgejo-API.
|
||||
tokens_desc=Diese Tokens gewähren vollen Zugriff auf dein Konto mit der Forgejo-API.
|
||||
token_name=Token-Name
|
||||
generate_token=Token generieren
|
||||
generate_token_success=Ein neuer Token wurde generiert. Kopiere diesen jetzt, da er nicht erneut angezeigt wird.
|
||||
|
@ -970,8 +970,8 @@ save_application=Speichern
|
|||
oauth2_client_id=Client-ID
|
||||
oauth2_client_secret=Client-Geheimnis
|
||||
oauth2_regenerate_secret=Geheimnis neu generieren
|
||||
oauth2_regenerate_secret_hint=Secret verloren?
|
||||
oauth2_client_secret_hint=Das Secret wird nach dem Verlassen oder Aktualisieren dieser Seite nicht mehr angezeigt. Bitte stelle sicher, dass du es gespeichert hast.
|
||||
oauth2_regenerate_secret_hint=Geheimnis verloren?
|
||||
oauth2_client_secret_hint=Das Geheimnis wird nach dem Verlassen oder Aktualisieren dieser Seite nicht mehr angezeigt. Bitte stelle sicher, dass du es gespeichert hast.
|
||||
oauth2_application_edit=Bearbeiten
|
||||
oauth2_application_create_description=OAuth2-Anwendungen geben deiner Drittanwendung Zugriff auf Benutzeraccounts dieser Forgejo-Instanz.
|
||||
oauth2_application_remove_description=Das Entfernen einer OAuth2-Anwendung hat zur Folge, dass diese nicht mehr auf autorisierte Benutzeraccounts auf dieser Instanz zugreifen kann. Möchtest Du fortfahren?
|
||||
|
@ -996,11 +996,11 @@ twofa_disable_desc=Wenn du die Zwei-Faktor-Authentifizierung deaktivierst, wird
|
|||
regenerate_scratch_token_desc=Wenn du deinen Wiederherstellungsschlüssel verlegst oder es bereits benutzt hast, kannst du es hier zurücksetzen.
|
||||
twofa_disabled=Zwei-Faktor-Authentifizierung wurde deaktiviert.
|
||||
scan_this_image=Scanne diese Grafik mit deiner Authentifizierungs-App:
|
||||
or_enter_secret=Oder gib das Secret ein: %s
|
||||
or_enter_secret=Oder gib das Geheimnis ein: %s
|
||||
then_enter_passcode=Und gib dann die angezeigte PIN der Anwendung ein:
|
||||
passcode_invalid=Die PIN ist falsch. Probiere es erneut.
|
||||
twofa_enrolled=Die Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Bewahre deinen einmalig verwendbaren Wiederherstellungsschlüssel (%s) an einem sicheren Ort auf, da er nicht wieder angezeigt werden wird.
|
||||
twofa_failed_get_secret=Fehler beim Abrufen des Secrets.
|
||||
twofa_failed_get_secret=Fehler beim Abrufen des Geheimnisses.
|
||||
|
||||
webauthn_desc=Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beeinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den Standard „<a rel="noreferrer" target="_blank" href="%s">WebAuthn</a>“ unterstützen.
|
||||
webauthn_register_key=Sicherheitsschlüssel hinzufügen
|
||||
|
@ -1093,6 +1093,8 @@ access_token_regeneration = Zugangstoken regenerieren
|
|||
access_token_regeneration_desc = Einen Token zu regenerieren, wird den Zugriff auf deinen Account von Anwendungen, die ihn nutzen, zurückziehen. Dies kann nicht rückgängig gemacht werden. Fortsetzen?
|
||||
regenerate_token = Regenerieren
|
||||
|
||||
ssh_token_help_ssh_agent = , oder, falls Sie einen SSH-Agenten benutzen (mit der Variable SSH_AUTH_SOCK gesetzt):
|
||||
|
||||
[repo]
|
||||
owner=Besitzer
|
||||
owner_helper=Einige Organisationen könnten in der Dropdown-Liste nicht angezeigt werden, da die Anzahl an Repositorys begrenzt ist.
|
||||
|
@ -1185,9 +1187,9 @@ blame.ignore_revs=Revisionen in <a href="%s">.git-blame-ignore-revs</a> werden i
|
|||
blame.ignore_revs.failed=Fehler beim Ignorieren der Revisionen in <a href="%s">.git-blame-ignore-revs</a>.
|
||||
author_search_tooltip=Zeigt maximal 30 Benutzer
|
||||
|
||||
tree_path_not_found_commit=Pfad %[1]s existiert nicht in Commit%[2]s
|
||||
tree_path_not_found_branch=Pfad %[1]s existiert nicht in Branch %[2]s
|
||||
tree_path_not_found_tag=Pfad %[1]s existiert nicht in Tag %[2]s
|
||||
tree_path_not_found_commit=Pfad %[1]s existiert nicht im Commit %[2]s
|
||||
tree_path_not_found_branch=Pfad %[1]s existiert nicht im Branch %[2]s
|
||||
tree_path_not_found_tag=Pfad %[1]s existiert nicht im Tag %[2]s
|
||||
|
||||
transfer.accept=Übertragung akzeptieren
|
||||
transfer.accept_desc=Übertragung nach „%s“
|
||||
|
@ -1248,7 +1250,7 @@ migrate.clone_local_path=oder ein lokaler Serverpfad
|
|||
migrate.permission_denied=Du hast keine Berechtigung zum Importieren lokaler Repositorys.
|
||||
migrate.permission_denied_blocked=Du kannst von keinen nicht erlaubten Hosts importieren. Bitte fragen deinen Administrator, die Einstellungen ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS zu überprüfen.
|
||||
migrate.invalid_local_path=Der lokale Pfad ist ungültig. Er existiert nicht oder ist kein Verzeichnis.
|
||||
migrate.invalid_lfs_endpoint=Ungültiger LFS Endpunkt.
|
||||
migrate.invalid_lfs_endpoint=Der LFS-Endpunkt ist nicht gültig.
|
||||
migrate.failed=Fehler bei der Migration: %v
|
||||
migrate.migrate_items_options=Zugangs-Token wird benötigt, um zusätzliche Elemente zu migrieren
|
||||
migrated_from=Migriert von <a href="%[1]s">%[2]s</a>
|
||||
|
@ -1324,7 +1326,7 @@ commit=Commit
|
|||
release=Release
|
||||
releases=Releases
|
||||
tag=Tag
|
||||
released_this=hat released
|
||||
released_this=hat releast
|
||||
tagged_this=hat getaggt
|
||||
file.title=%s an %s
|
||||
file_raw=Originalformat
|
||||
|
@ -1448,7 +1450,7 @@ commits.older=Älter
|
|||
commits.newer=Neuer
|
||||
commits.signed_by=Signiert von
|
||||
commits.signed_by_untrusted_user=Signiert von nicht vertrauenswürdigen Benutzern
|
||||
commits.signed_by_untrusted_user_unmatched=Signiert von nicht vertrauenswürdigen Benutzern, der nicht mit dem Committer übereinstimmt
|
||||
commits.signed_by_untrusted_user_unmatched=Von einem nicht vertrauenswürdigen Benutzer, der nicht auf den Committer passt, signiert
|
||||
commits.gpg_key_id=GPG-Schlüssel-ID
|
||||
commits.ssh_key_fingerprint=SSH-Schlüssel-Fingerabdruck
|
||||
commits.view_path=An diesem Punkt im Verlauf anzeigen
|
||||
|
@ -1459,7 +1461,7 @@ commit.revert-header=Setze zurück: %s
|
|||
commit.revert-content=Branch auswählen, der zurückgesetzt werden soll:
|
||||
commit.cherry-pick=Cherry-Pick
|
||||
commit.cherry-pick-header=Cherry-Picke: %s
|
||||
commit.cherry-pick-content=Branch auswählen, auf dem Cherry-Picked werden soll:
|
||||
commit.cherry-pick-content=Branch auswählen, zu dem das Ergebnis des Cherry-Picks angewendet werden soll:
|
||||
|
||||
commitstatus.error=Fehler
|
||||
commitstatus.failure=Fehler
|
||||
|
@ -1515,7 +1517,7 @@ issues.filter_assignees=Verantwortliche filtern
|
|||
issues.filter_milestones=Meilenstein filtern
|
||||
issues.filter_projects=Projekt filtern
|
||||
issues.filter_labels=Label filtern
|
||||
issues.filter_reviewers=Reviewer filtern
|
||||
issues.filter_reviewers=Prüfer filtern
|
||||
issues.new=Neues Issue
|
||||
issues.new.title_empty=Der Titel kann nicht leer sein
|
||||
issues.new.labels=Labels
|
||||
|
@ -1535,7 +1537,7 @@ issues.new.closed_milestone=Geschlossene Meilensteine
|
|||
issues.new.assignees=Zuständige
|
||||
issues.new.clear_assignees=Zuständige entfernen
|
||||
issues.new.no_assignees=Niemand zuständig
|
||||
issues.new.no_reviewers=Keine Reviewer
|
||||
issues.new.no_reviewers=Keine Prüfer
|
||||
issues.choose.get_started=Los geht's
|
||||
issues.choose.open_external_link=Öffnen
|
||||
issues.choose.blank=Standard
|
||||
|
@ -1598,8 +1600,8 @@ issues.filter_type.all_issues=Alle Issues
|
|||
issues.filter_type.assigned_to_you=Dir zugewiesen
|
||||
issues.filter_type.created_by_you=Von dir erstellt
|
||||
issues.filter_type.mentioning_you=Hat dich erwähnt
|
||||
issues.filter_type.review_requested=Review angefordert
|
||||
issues.filter_type.reviewed_by_you=Von dir gereviewt
|
||||
issues.filter_type.review_requested=Sichtung angefordert
|
||||
issues.filter_type.reviewed_by_you=Von dir überprüft
|
||||
issues.filter_sort=Sortieren
|
||||
issues.filter_sort.latest=Neueste
|
||||
issues.filter_sort.oldest=Älteste
|
||||
|
@ -1621,8 +1623,8 @@ issues.action_milestone=Meilenstein
|
|||
issues.action_milestone_no_select=Kein Meilenstein
|
||||
issues.action_assignee=Zuständig
|
||||
issues.action_assignee_no_select=Niemand zuständig
|
||||
issues.action_check=Auswählen/Auswahl aufheben
|
||||
issues.action_check_all=Alles auswählen/Auswahl aufheben
|
||||
issues.action_check=Auswählen / Auswahl aufheben
|
||||
issues.action_check_all=Alles auswählen / Auswahl aufheben
|
||||
issues.opened_by=%[1]s von <a href="%[2]s">%[3]s</a> geöffnet
|
||||
pulls.merged_by=von <a href="%[2]s">%[3]s</a> wurde %[1]s zusammengeführt
|
||||
pulls.merged_by_fake=von %[2]s %[1]s zusammengeführt
|
||||
|
@ -1654,7 +1656,7 @@ issues.create_comment=Kommentieren
|
|||
issues.closed_at=`hat dieses Issue %s geschlossen`
|
||||
issues.reopened_at=`hat dieses Issue %s wieder geöffnet`
|
||||
issues.commit_ref_at=`hat dieses Issue %s aus einem Commit referenziert`
|
||||
issues.ref_issue_from=`<a href="%[2]s">hat</a> %[1]s <a href="%[2]s">auf dieses Issue verwiesen %[3]s</a>`
|
||||
issues.ref_issue_from=`<a href="%[2]s">auf dieses Issue verwiesen %[3]s</a> %[1]s`
|
||||
issues.ref_pull_from=`<a href="%[2]s">referenzierte diesen Pull-Request %[3]s</a> %[1]s`
|
||||
issues.ref_closing_from=`<a href="%[2]s">referenzierte dieses Issue aus einem Pull-Request %[3]s der es schließen wird</a>, %[1]s`
|
||||
issues.ref_reopening_from=`<a href="%[2]s">referenzierte dieses Issue aus einem Pull-Request %[3]s der es wieder öffnen wird</a>, %[1]s`
|
||||
|
@ -1673,12 +1675,12 @@ issues.role.first_time_contributor=Erstmaliger Mitwirkender
|
|||
issues.role.first_time_contributor_helper=Dies ist der erste Beitrag dieses Benutzers zum Repository.
|
||||
issues.role.contributor=Mitwirkender
|
||||
issues.role.contributor_helper=Dieser Benutzer hat schon zuvor zu dem Repository beigetragen.
|
||||
issues.re_request_review=Review erneut anfordern
|
||||
issues.is_stale=Seit diesem Review gab es Änderungen an diesem PR
|
||||
issues.remove_request_review=Review-Anfrage entfernen
|
||||
issues.remove_request_review_block=Review-Anfrage kann nicht entfernt werden
|
||||
issues.dismiss_review=Review verwerfen
|
||||
issues.dismiss_review_warning=Bist du dir sicher, dass du dieses Review verwerfen willst?
|
||||
issues.re_request_review=Sichtung erneut anfordern
|
||||
issues.is_stale=Seit dieser Sichtung gab es Änderungen an diesem PR
|
||||
issues.remove_request_review=Sichtungsanfrage entfernen
|
||||
issues.remove_request_review_block=Sichtungsanfrage kann nicht entfernt werden
|
||||
issues.dismiss_review=Sichtung verwerfen
|
||||
issues.dismiss_review_warning=Bist du dir sicher, dass du diese Sichtung verwerfen willst?
|
||||
issues.sign_in_require_desc=<a href="%s">Anmelden</a>, um an der Diskussion teilzunehmen.
|
||||
issues.edit=Bearbeiten
|
||||
issues.cancel=Abbrechen
|
||||
|
@ -1809,20 +1811,20 @@ issues.dependency.add_error_dep_not_same_repo=Beide Issues müssen sich im selbe
|
|||
issues.review.self.approval=Du kannst nicht dein eigenen Pull-Request genehmigen.
|
||||
issues.review.self.rejection=Du kannst keine Änderungen an deinem eigenen Pull-Request anfragen.
|
||||
issues.review.approve=hat die Änderungen %s genehmigt
|
||||
issues.review.comment=hat %s gereviewt
|
||||
issues.review.comment=hat %s überprüft
|
||||
issues.review.dismissed=verwarf %ss Review %s
|
||||
issues.review.dismissed_label=Verworfen
|
||||
issues.review.left_comment=hat einen Kommentar hinterlassen
|
||||
issues.review.content.empty=Du musst einen Kommentar hinterlassen, der die gewünschte(n) Änderung(en) beschreibt.
|
||||
issues.review.reject=hat %s Änderungen angefragt
|
||||
issues.review.wait=wurde für ein Review %s angefragt
|
||||
issues.review.add_review_request=hat ein Review von %[1]s %[2]s angefragt
|
||||
issues.review.remove_review_request=hat die Aufforderung zum Review an %[1]s %[2]s entfernt
|
||||
issues.review.remove_review_request_self=hat das Review verweigert %s
|
||||
issues.review.wait=wurde für eine Sichtung von %s angefragt
|
||||
issues.review.add_review_request=hat eine Sichtung von %[1]s %[2]s angefragt
|
||||
issues.review.remove_review_request=hat die Sichtungsanfrage an %[1]s %[2]s entfernt
|
||||
issues.review.remove_review_request_self=hat die Sichtung %s verweigert
|
||||
issues.review.pending=Ausstehend
|
||||
issues.review.pending.tooltip=Dieser Kommentar ist derzeit nicht für andere Benutzer sichtbar. Um deine ausstehenden Kommentare einzureichen, wähle „%s“ -> „%s/%s/%s“ oben auf der Seite.
|
||||
issues.review.review=Review
|
||||
issues.review.reviewers=Reviewer
|
||||
issues.review.reviewers=Prüfer
|
||||
issues.review.outdated=Veraltet
|
||||
issues.review.outdated_description=Der Inhalt hat sich geändert, seit dieser Kommentar abgegeben wurde
|
||||
issues.review.option.show_outdated_comments=Veraltete Kommentare anzeigen
|
||||
|
@ -1833,7 +1835,7 @@ issues.review.show_resolved=Erledigte anzeigen
|
|||
issues.review.hide_resolved=Erledigte ausblenden
|
||||
issues.review.resolve_conversation=Diskussion als „erledigt“ markieren
|
||||
issues.review.un_resolve_conversation=Diskussion als „nicht erledigt“ markieren
|
||||
issues.review.resolved_by=markierte diese Unterhaltung als gelöst
|
||||
issues.review.resolved_by=markierte diese Unterhaltung als „erledigt“
|
||||
issues.assignee.error=Aufgrund eines unerwarteten Fehlers konnten nicht alle Zuständigen hinzugefügt werden.
|
||||
issues.reference_issue.body=Beschreibung
|
||||
issues.content_history.deleted=gelöscht
|
||||
|
@ -1847,7 +1849,7 @@ issues.reference_link=Referenz: %s
|
|||
compare.compare_base=Basis
|
||||
compare.compare_head=vergleichen
|
||||
|
||||
pulls.desc=Pull-Requests und Code-Reviews aktivieren.
|
||||
pulls.desc=Pull-Requests und Code-Sichtungen aktivieren.
|
||||
pulls.new=Neuer Pull-Request
|
||||
pulls.view=Pull-Request ansehen
|
||||
pulls.compare_changes=Neuer Pull-Request
|
||||
|
@ -1856,7 +1858,7 @@ pulls.allow_edits_from_maintainers_desc=Nutzer mit Schreibzugriff auf den Basisb
|
|||
pulls.allow_edits_from_maintainers_err=Aktualisieren fehlgeschlagen
|
||||
pulls.compare_changes_desc=Wähle den Zielbranch, in das zusammengeführt werden soll, und den Quellbranch, von dem gepullt werden soll, aus.
|
||||
pulls.has_viewed_file=Gesehen
|
||||
pulls.has_changed_since_last_review=Seit deinem letzten Review geändert
|
||||
pulls.has_changed_since_last_review=Seit deiner letzten Sichtung geändert
|
||||
pulls.viewed_files_label=%[1]d / %[2]d Dateien betrachtet
|
||||
pulls.expand_files=Alle Dateien ausklappen
|
||||
pulls.collapse_files=Alle Dateien einklappen
|
||||
|
@ -1867,11 +1869,11 @@ pulls.switch_head_and_base=Head und Base vertauschen
|
|||
pulls.filter_branch=Branch filtern
|
||||
pulls.no_results=Keine Ergebnisse verfügbar.
|
||||
pulls.show_all_commits=Alle Commits anzeigen
|
||||
pulls.show_changes_since_your_last_review=Zeige Änderungen seit deinem letzten Review
|
||||
pulls.show_changes_since_your_last_review=Zeige Änderungen seit deiner letzten Sichtung
|
||||
pulls.showing_only_single_commit=Nur Änderungen aus Commit %[1]s werden angezeigt
|
||||
pulls.showing_specified_commit_range=Zeige nur die Änderungen zwischen %[1]s..%[2]s
|
||||
pulls.select_commit_hold_shift_for_range=Commit auswählen. Halte Shift + klicke, um eine Reihe auszuwählen
|
||||
pulls.review_only_possible_for_full_diff=Ein Review ist nur möglich, wenn das vollständige Diff angezeigt wird
|
||||
pulls.review_only_possible_for_full_diff=Eine Sichtung ist nur möglich, wenn der vollständige Diff angezeigt wird
|
||||
pulls.filter_changes_by_commit=Nach Commit filtern
|
||||
pulls.nothing_to_compare=Diese Branches sind identisch. Es muss kein Pull-Request erstellt werden.
|
||||
pulls.nothing_to_compare_and_allow_empty_pr=Diese Branches sind gleich. Der Pull-Request wird leer sein.
|
||||
|
@ -1905,8 +1907,8 @@ pulls.required_status_check_failed=Einige erforderliche Prüfungen waren nicht e
|
|||
pulls.required_status_check_missing=Einige erforderliche Prüfungen fehlen.
|
||||
pulls.required_status_check_administrator=Als Administrator kannst du diesen Pull-Request weiterhin zusammenführen.
|
||||
pulls.blocked_by_approvals=Dieser Pull-Request hat noch nicht genügend Genehmigungen. %d von %d Genehmigungen erteilt.
|
||||
pulls.blocked_by_rejection=Dieser Pull-Request hat Änderungen, die von einem offiziellen Reviewer angefragt wurden.
|
||||
pulls.blocked_by_official_review_requests=Dieser Pull-Request ist blockiert, weil ihm die Genehmigung von einem oder mehreren offiziellen Reviewern fehlt.
|
||||
pulls.blocked_by_rejection=Dieser Pull-Request hat Änderungen, die von einem offiziellen Prüfer angefragt wurden.
|
||||
pulls.blocked_by_official_review_requests=Dieser Pull-Request ist blockiert, weil ihm die Genehmigung von einem oder mehreren offiziellen Prüfern fehlt.
|
||||
pulls.blocked_by_outdated_branch=Dieser Pull-Request ist blockiert, da er veraltet ist.
|
||||
pulls.blocked_by_changed_protected_files_1=Dieser Pull-Request ist blockiert, weil er eine geschützte Datei ändert:
|
||||
pulls.blocked_by_changed_protected_files_n=Dieser Pull-Request ist blockiert, weil er geschützte Dateien ändert:
|
||||
|
@ -1919,14 +1921,14 @@ pulls.approve_count_1=%d Genehmigung
|
|||
pulls.approve_count_n=%d Genehmigungen
|
||||
pulls.reject_count_1=%d Änderungsanfrage
|
||||
pulls.reject_count_n=%d Änderungsanfragen
|
||||
pulls.waiting_count_1=%d wartendes Review
|
||||
pulls.waiting_count_n=%d wartende Reviews
|
||||
pulls.waiting_count_1=%d wartende Sichtung
|
||||
pulls.waiting_count_n=%d wartende Sichtungen
|
||||
pulls.wrong_commit_id=die Commit-ID muss eine Commit-ID auf dem Zielbranch sein
|
||||
|
||||
pulls.no_merge_desc=Dieser Pull-Request kann nicht zusammengeführt werden, da alle Repository-Merge-Optionen deaktiviert sind.
|
||||
pulls.no_merge_helper=Aktiviere Mergeoptionen in den Repositoryeinstellungen oder führe den Pull-Request manuell zusammen.
|
||||
pulls.no_merge_wip=Dieser Pull-Request kann nicht zusammengeführt werden, da er als „Work in Progress“ (in Bearbeitung) markiert ist.
|
||||
pulls.no_merge_not_ready=Dieser Pull-Request kann nicht zusammengeführt werden, überprüfe den Reviewstatus und die Statusprüfungen.
|
||||
pulls.no_merge_not_ready=Dieser Pull-Request kann nicht zusammengeführt werden, überprüfe den Sichtungsstatus und die Statusprüfungen.
|
||||
pulls.no_merge_access=Du bist nicht berechtigt, diesen Pull-Request zusammenzuführen.
|
||||
pulls.merge_pull_request=Merge-Commit erstellen
|
||||
pulls.rebase_merge_pull_request=Rebasen und dann fast-forwarden
|
||||
|
@ -2202,7 +2204,7 @@ settings.tracker_issue_style.numeric=Numerisch
|
|||
settings.tracker_issue_style.alphanumeric=Alphanumerisch
|
||||
settings.tracker_issue_style.regexp=Regulärer Ausdruck
|
||||
settings.tracker_issue_style.regexp_pattern=Regulärer Ausdruck
|
||||
settings.tracker_issue_style.regexp_pattern_desc=Die erste gecapturte Gruppe wird statt <code>{index}</code> verwendet.
|
||||
settings.tracker_issue_style.regexp_pattern_desc=Die erste gefundene Gruppe wird statt <code>{index}</code> verwendet.
|
||||
settings.tracker_url_format_desc=Du kannst die Platzhalter <code>{user}</code>, <code>{repo}</code>, <code>{index}</code> für den Benutzernamen, den Namen des Repositorys und die Issue-Nummer verwenden.
|
||||
settings.enable_timetracker=Zeiterfassung aktivieren
|
||||
settings.allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen
|
||||
|
@ -2261,14 +2263,14 @@ settings.trust_model.collaborator=Mitarbeiter
|
|||
settings.trust_model.collaborator.long=Mitarbeiter: Vertraue Signaturen von Mitarbeitern
|
||||
settings.trust_model.collaborator.desc=Gültige Signaturen von Mitarbeitern dieses Projekts werden als „vertrauenswürdig“ markiert (egal, ob sie mit dem Committer übereinstimmen oder nicht). Andernfalls werden gültige Signaturen als „nicht vertrauenswürdig“ markiert, falls die Signatur zum Committer passt, ansonsten werden sie als „nicht übereinstimmend“ markiert.
|
||||
settings.trust_model.committer=Committer
|
||||
settings.trust_model.committer.long=Committer: Vertraue Signaturen, die zu Committern passen (Dies stimmt mit GitHub überein und zwingt signierte Commits von Forgejo dazu, Forgejo als Committer zu haben)
|
||||
settings.trust_model.committer.long=Committer: Vertraue Signaturen, die zu Committern passen (dies stimmt mit GitHub überein und zwingt signierte Commits von Forgejo dazu, Forgejo als Committer zu haben)
|
||||
settings.trust_model.committer.desc=Gültige Signaturen werden nur dann als „vertrauenswürdig“ gekennzeichnet, wenn sie mit ihrem Committer übereinstimmen. Ansonsten werden sie als „nicht übereinstimmend“ markiert. Das führt dazu, dass Forgejo auf signierten Commits, bei denen der echte Committer als „Co-authored-by:“ oder „Co-committed-by:“ in der Beschreibung eingetragen wurde, als Committer gilt. Der Forgejo-Standard-Key muss zu einem Benutzer in der Datenbank passen.
|
||||
settings.trust_model.collaboratorcommitter=Mitarbeiter+Committer
|
||||
settings.trust_model.collaboratorcommitter.long=Mitarbeiter+Committer: Signaturen der Mitarbeiter vertrauen die mit dem Committer übereinstimmen
|
||||
settings.trust_model.collaboratorcommitter.desc=Gültige Signaturen von Mitarbeitern dieses Projekts werden als „vertrauenswürdig“ markiert, wenn sie mit dem Committer übereinstimmen. Andernfalls werden gültige Signaturen als „nicht vertrauenswürdig“ markiert, wenn die Signatur mit dem Committer übereinstimmt. Ansonsten werden sie als „nicht übereinstimmend“ markiert. Dies zwingt Forgejo, als Committer bei signierten Commits mit dem echten Committer als „Co-Authored-By:“ und „Co-Committed-By:“ im Commit zu markieren. Der Standard-Forgejo-Schlüssel muss mit einem Benutzer in der Datenbank übereinstimmen.
|
||||
settings.wiki_delete=Wiki-Daten löschen
|
||||
settings.wiki_delete_desc=Das Löschen von Wiki-Daten kann nicht rückgängig gemacht werden. Bitte sei vorsichtig.
|
||||
settings.wiki_delete_notices_1=– Dies löscht und deaktiviert das Wiki für %s.
|
||||
settings.wiki_delete_notices_1=– Dies wird das Repository-Wiki für %s dauerhaft löschen und deaktivieren.
|
||||
settings.confirm_wiki_delete=Wiki-Daten löschen
|
||||
settings.wiki_deletion_success=Repository-Wiki-Daten wurden gelöscht.
|
||||
settings.delete=Dieses Repository löschen
|
||||
|
@ -2327,7 +2329,7 @@ settings.add_webhook_desc=Forgejo sendet eine <code>POST</code>-Anfrage mit fest
|
|||
settings.payload_url=Ziel-URL
|
||||
settings.http_method=HTTP-Methode
|
||||
settings.content_type=POST-Content-Type
|
||||
settings.secret=Secret
|
||||
settings.secret=Geheimnis
|
||||
settings.slack_username=Benutzername
|
||||
settings.slack_icon_url=Icon-URL
|
||||
settings.slack_color=Farbe
|
||||
|
@ -2374,12 +2376,12 @@ settings.event_pull_request_milestone=Meilensteine
|
|||
settings.event_pull_request_milestone_desc=Meilenstein hinzugefügt, entfernt oder bearbeitet.
|
||||
settings.event_pull_request_comment=Kommentare
|
||||
settings.event_pull_request_comment_desc=Pull-Request-Kommentar angelegt, geändert oder gelöscht.
|
||||
settings.event_pull_request_review=Reviews
|
||||
settings.event_pull_request_review_desc=Pull-Request genehmigt, abgelehnt oder Review-Kommentare hinterlassen.
|
||||
settings.event_pull_request_review=Sichtungen
|
||||
settings.event_pull_request_review_desc=Pull-Request genehmigt, abgelehnt oder Sichtungskommentare hinterlassen.
|
||||
settings.event_pull_request_sync=Synchronisiert
|
||||
settings.event_pull_request_sync_desc=Branch automatisch mit Zielbranch aktualisiert.
|
||||
settings.event_pull_request_review_request=Review-Anfragen
|
||||
settings.event_pull_request_review_request_desc=Überprüfung des Pull-Requests angefragt oder die Anfrage entfernt.
|
||||
settings.event_pull_request_review_request=Sichtungsanfragen
|
||||
settings.event_pull_request_review_request_desc=Pull-Request-Sichtung angefragt oder Sichtungsanfrage entfernt.
|
||||
settings.event_pull_request_approvals=Genehmigungen zum Pull-Request
|
||||
settings.event_pull_request_merge=Pull-Request-Merge
|
||||
settings.event_package=Paket
|
||||
|
@ -2467,11 +2469,11 @@ settings.protect_status_check_matched=Übereinstimmung
|
|||
settings.protect_invalid_status_check_pattern=Ungültiges Statusprüfungspattern: „%s“.
|
||||
settings.protect_no_valid_status_check_patterns=Keine gültigen Statuscheck-Muster.
|
||||
settings.protect_required_approvals=Erforderliche Genehmigungen
|
||||
settings.protect_required_approvals_desc=Erlaube das Zusammenführen des Pull-Requests nur mit genügend positiven Reviews.
|
||||
settings.protect_required_approvals_desc=Erlaube das Zusammenführen des Pull-Requests nur mit genügend positiven Sichtungen.
|
||||
settings.protect_approvals_whitelist_enabled=Genehmigungen auf Benutzer oder Teams auf der Positivliste beschränken
|
||||
settings.protect_approvals_whitelist_enabled_desc=Nur Reviews von Benutzern oder Teams auf der Positivliste zählen zu den erforderlichen Genehmigungen. Existiert keine Positivliste, so zählen Reviews von jedem mit Schreibzugriff zu den erforderlichen Genehmigungen.
|
||||
settings.protect_approvals_whitelist_users=Nutzer, die reviewen dürfen
|
||||
settings.protect_approvals_whitelist_teams=Teams, die reviewen dürfen
|
||||
settings.protect_approvals_whitelist_enabled_desc=Nur Sichtungen von Benutzern oder Teams auf der Positivliste zählen zu den erforderlichen Genehmigungen. Existiert keine Positivliste, so zählen Sichtungen von jedem mit Schreibzugriff zu den erforderlichen Genehmigungen.
|
||||
settings.protect_approvals_whitelist_users=Autorisierte Prüfer
|
||||
settings.protect_approvals_whitelist_teams=Teams, autorisiert zum Prüfen
|
||||
settings.dismiss_stale_approvals=Entferne alte Genehmigungen
|
||||
settings.dismiss_stale_approvals_desc=Wenn neue Commits gepusht werden, die den Inhalt des Pull-Requests ändern, werden alte Genehmigungen entfernt.
|
||||
settings.require_signed_commits=Signierte Commits erforderlich
|
||||
|
@ -2489,10 +2491,10 @@ settings.remove_protected_branch_success=Branchschutzregel „%s“ wurde entfer
|
|||
settings.remove_protected_branch_failed=Entfernen der Branchschutzregel „%s“ fehlgeschlagen.
|
||||
settings.protected_branch_deletion=Branch-Schutz löschen
|
||||
settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren?
|
||||
settings.block_rejected_reviews=Zusammenführung bei abgelehnten Reviews blockieren
|
||||
settings.block_rejected_reviews_desc=Merge ist nicht möglich, wenn Änderungen durch offizielle Reviewer angefragt werden, auch wenn genügend Genehmigungen existieren.
|
||||
settings.block_on_official_review_requests=Merge bei offiziellen Review-Anfragen blockieren
|
||||
settings.block_on_official_review_requests_desc=Merge ist nicht möglich, wenn offizielle Review-Anfrangen vorliegen, selbst wenn genügend Genehmigungen existieren.
|
||||
settings.block_rejected_reviews=Zusammenführung bei abgelehnten Sichtungen blockieren
|
||||
settings.block_rejected_reviews_desc=Merge ist nicht möglich, wenn Änderungen durch offizielle Prüfer angefragt werden, auch wenn genügend Genehmigungen existieren.
|
||||
settings.block_on_official_review_requests=Merge bei offiziellen Sichtungsanfragen blockieren
|
||||
settings.block_on_official_review_requests_desc=Merge ist nicht möglich, wenn offizielle Sichtungsanfrangen vorliegen, selbst wenn genügend Genehmigungen existieren.
|
||||
settings.block_outdated_branch=Merge blockieren, wenn der Pull-Request veraltet ist
|
||||
settings.block_outdated_branch_desc=Merge ist nicht möglich, wenn der Head-Branch hinter dem Basis-Branch ist.
|
||||
settings.default_branch_desc=Wähle einen Standardbranch für Pull-Requests und Code-Commits:
|
||||
|
@ -2539,7 +2541,7 @@ settings.lfs_filelist=LFS-Dateien, die in diesem Repository gespeichert sind
|
|||
settings.lfs_no_lfs_files=In diesem Repository sind keine LFS-Dateien gespeichert
|
||||
settings.lfs_findcommits=Commits finden
|
||||
settings.lfs_lfs_file_no_commits=Keine Commits für diese LFS-Datei gefunden
|
||||
settings.lfs_noattribute=Dieser Pfad hat nicht das sperrbare Attribut im Standard-Branch
|
||||
settings.lfs_noattribute=Dieser Pfad hat nicht das „lockable“-Attribut im Standard-Branch
|
||||
settings.lfs_delete=LFS-Datei mit OID %s löschen
|
||||
settings.lfs_delete_warning=Das Löschen einer LFS-Datei kann dazu führen, dass „Objekt existiert nicht“-Fehler beim Checkout auftreten. Bist du sicher?
|
||||
settings.lfs_findpointerfiles=Pointer-Dateien finden
|
||||
|
@ -2580,8 +2582,8 @@ diff.show_unified_view=Gesamtansicht
|
|||
diff.whitespace_button=Leerzeichen
|
||||
diff.whitespace_show_everything=Alle Änderungen anzeigen
|
||||
diff.whitespace_ignore_all_whitespace=Ignoriere Leerzeichen beim Zeilen vergleichen
|
||||
diff.whitespace_ignore_amount_changes=Ignoriere whitespace-Änderungen
|
||||
diff.whitespace_ignore_at_eol=Ignoriere EOL-whitespace-Änderungen
|
||||
diff.whitespace_ignore_amount_changes=Änderungen in der Anzahl der Leerzeichen und ähnlichen Zeichen ignorieren
|
||||
diff.whitespace_ignore_at_eol=Änderungen an den Leerzeichen und ähnlichen Zeichen am Zeilenende ignorieren
|
||||
diff.stats_desc=<strong> %d geänderte Dateien</strong> mit <strong>%d neuen</strong> und <strong>%d gelöschten</strong> Zeilen
|
||||
diff.stats_desc_file=%d Änderungen: %d Ergänzungen und %d Löschungen
|
||||
diff.bin=BIN
|
||||
|
@ -2604,11 +2606,11 @@ diff.comment.placeholder=Kommentieren
|
|||
diff.comment.markdown_info=Styling mit Markdown wird unterstützt.
|
||||
diff.comment.add_single_comment=Einzelnen Kommentar hinzufügen
|
||||
diff.comment.add_review_comment=Kommentar hinzufügen
|
||||
diff.comment.start_review=Review starten
|
||||
diff.comment.start_review=Sichtung starten
|
||||
diff.comment.reply=Antworten
|
||||
diff.review=Review abschließen
|
||||
diff.review.header=Review einreichen
|
||||
diff.review.placeholder=Kommentar zum Review
|
||||
diff.review=Sichtung abschließen
|
||||
diff.review.header=Sichtung einreichen
|
||||
diff.review.placeholder=Kommentar zur Sichtung
|
||||
diff.review.comment=Kommentieren
|
||||
diff.review.approve=Genehmigen
|
||||
diff.review.self_reject=Pull-Request-Autoren können keine Änderungen an ihren eigenen Pull-Request anfordern
|
||||
|
@ -2656,7 +2658,7 @@ release.edit_release=Release aktualisieren
|
|||
release.delete_release=Release löschen
|
||||
release.delete_tag=Tag löschen
|
||||
release.deletion=Release löschen
|
||||
release.deletion_desc=Beim Entfernen wird ein Release nur von Forgejo gelöscht. Es betrifft weder den Git-Tag, noch den Inhalt des Repos oder seinen Änderungsverlauf. Fortfahren?
|
||||
release.deletion_desc=Beim Entfernen wird ein Release nur von Forgejo gelöscht. Es betrifft weder den Git-Tag noch den Inhalt des Repos oder seinen Änderungsverlauf. Fortfahren?
|
||||
release.deletion_success=Das Release wurde gelöscht.
|
||||
release.deletion_tag_desc=Löscht dieses Tag aus dem Projektarchiv. Repository-Inhalt und Verlauf bleiben unverändert. Fortfahren?
|
||||
release.deletion_tag_success=Der Tag wurde gelöscht.
|
||||
|
@ -2666,7 +2668,7 @@ release.tag_name_protected=Der Tag-Name ist geschützt.
|
|||
release.tag_already_exist=Dieser Tag-Name existiert bereits.
|
||||
release.downloads=Downloads
|
||||
release.download_count=Downloads: %s
|
||||
release.add_tag_msg=Titel und Beschreibung des Releases als Tag Nachricht verwenden.
|
||||
release.add_tag_msg=Titel und Beschreibung des Releases als Tag-Nachricht verwenden.
|
||||
release.add_tag=Tag erstellen
|
||||
release.releases_for=Releases für %s
|
||||
release.tags_for=Tags für %s
|
||||
|
@ -2766,7 +2768,7 @@ wiki.cancel = Abbrechen
|
|||
settings.wiki_globally_editable = Allen erlauben, das Wiki zu bearbeiten
|
||||
settings.protect_branch_name_pattern_desc = Geschützte Branch-Namens-Patterns. Siehe <a href="%s">die Dokumentation</a> für Pattern-Syntax. Beispiele: main, release/**
|
||||
settings.ignore_stale_approvals = Abgestandene Genehmigungen ignorieren
|
||||
settings.ignore_stale_approvals_desc = Genehmigungen, welche für ältere Commits gemacht wurden (abgestandene Reviews), nicht in die Gesamtzahl der Genehmigung des PRs mitzählen. Irrelevant, falls abgestandene Reviews bereits verworfen werden.
|
||||
settings.ignore_stale_approvals_desc = Genehmigungen, welche für ältere Commits gemacht wurden (abgestandene Sichtungen), nicht in die Gesamtzahl der Genehmigung des PRs mitzählen. Irrelevant, falls abgestandene Sichtungen bereits verworfen werden.
|
||||
pulls.commit_ref_at = `referenzierte diesen Pull-Request aus einem Commit %s`
|
||||
pulls.fast_forward_only_merge_pull_request = Nur Fast-forward
|
||||
pulls.cmd_instruction_checkout_desc = Checke einen neuen Branch aus deinem Projekt-Repository aus und teste die Änderungen.
|
||||
|
@ -2782,7 +2784,7 @@ activity.navbar.contributors = Mitwirkende
|
|||
contributors.contribution_type.deletions = Löschungen
|
||||
contributors.contribution_type.additions = Einfügungen
|
||||
contributors.contribution_type.filter_label = Art des Beitrags:
|
||||
vendored = Vendored
|
||||
vendored = Gevendort
|
||||
activity.navbar.pulse = Puls
|
||||
pulls.made_using_agit = AGit
|
||||
settings.confirmation_string = Bestätigungsstring
|
||||
|
@ -2795,7 +2797,7 @@ pulls.merged_title_desc_one = hat %[1]d Commit von <code>%[2]s</code> nach <code
|
|||
pulls.title_desc_one = möchte %[1]d Commit von <code>%[2]s</code> nach <code id="%[4]s">%[3]s</code> zusammenführen
|
||||
open_with_editor = Öffnen mit %s
|
||||
commits.search_branch = Dieser Branch
|
||||
pulls.ready_for_review = Bereit zum Review?
|
||||
pulls.ready_for_review = Bereit zur Sichtung?
|
||||
settings.rename_branch_failed_protected = Branch %s kann nicht umbenannt werden, weil er ein geschützter Branch ist.
|
||||
editor.commit_id_not_matching = Die Datei wurde geändert, während du sie bearbeitet hast. Committe in einen neuen Branch, dann führe einen Merge durch.
|
||||
editor.push_out_of_date = Der Push scheint veraltet zu sein.
|
||||
|
@ -2824,7 +2826,7 @@ settings.sourcehut_builds.secrets_helper = Dem Job zugriff auf die Build-Geheimn
|
|||
settings.web_hook_name_sourcehut_builds = SourceHut-Builds
|
||||
settings.graphql_url = GraphQL-URL
|
||||
settings.matrix.room_id_helper = Die Raum-ID kann über den Element-Webclient ermittelt werden: Raumeinstellungen > erweitert > interne Raum-ID. Beispielsweise %s.
|
||||
settings.sourcehut_builds.access_token_helper = Zugangstoken, der die JOBS:RW-Freigabe hat. Generiere auf meta.sr.ht einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token</a> oder einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token mit Zugriff auf die Secrets</a>.
|
||||
settings.sourcehut_builds.access_token_helper = Zugangstoken, der die JOBS:RW-Freigabe hat. Generiere auf meta.sr.ht einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token</a> oder einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token mit Zugriff auf die Geheimnisse</a>.
|
||||
settings.matrix.access_token_helper = Es wird empfohlen, hierfür ein dediziertes Matrix-Konto anzulegen. Der Zugangstoken kann in einem Inkognito-Tab über den Element-Webclient geholt werden: Benutzermenü (oben links) > alle Einstellungen > Hilfe & Info > erweitert > Zugriffstoken (direkt unter der Heim-Server-URL). Schließe dann den Inkognito-Tab (Abmelden würde den Token ungültig machen).
|
||||
release.hide_archive_links = Automatisch generierte Archive verstecken
|
||||
release.hide_archive_links_helper = Verstecke automatisch generierte Quellcodearchive für diesen Release. Zum Beispiel, wenn du deine eigenen hochlädst.
|
||||
|
@ -2873,9 +2875,9 @@ mirror_use_ssh.not_available = SSH-Authentifizierung ist nicht verfügbar.
|
|||
issues.new.assign_to_me = Mir selbst zuweisen
|
||||
issues.all_title = Alle
|
||||
settings.discord_icon_url.exceeds_max_length = Die Icon-URL darf eine Länge von 2048 Zeichen nicht überschreiten
|
||||
issues.review.add_review_requests = hat Reviews von %[1]s %[2]s angefragt
|
||||
issues.review.remove_review_requests = hat Aufforderungen zum Review an %[1]s %[2]s entfernt
|
||||
issues.review.add_remove_review_requests = hat Reviews von %[1]s angefragt und hat die Aufforderungen zum Review an %[2]s %[3]s entfernt
|
||||
issues.review.add_review_requests = hat Sichtungen von %[1]s %[2]s angefragt
|
||||
issues.review.remove_review_requests = hat die Sichtungsanfragen an %[1]s %[2]s entfernt
|
||||
issues.review.add_remove_review_requests = hat Sichtungen von %[1]s angefragt und die Sichtungsanfragen an %[2]s %[3]s entfernt
|
||||
pulls.delete_after_merge.head_branch.is_default = Der Head-Branch, den du löschen willst, ist der Standardbranch und kann nicht gelöscht werden.
|
||||
pulls.delete_after_merge.head_branch.is_protected = Der Head-Branch, den du löschen willst, ist ein geschützter Branch und kann nicht gelöscht werden.
|
||||
pulls.delete_after_merge.head_branch.insufficient_branch = Du hast keine Erlaubnis, den Head-Branch zu löschen.
|
||||
|
@ -2883,9 +2885,9 @@ issues.filter_sort.relevance = Relevanz
|
|||
diff.git-notes.add = Anmerkung hinzufügen
|
||||
diff.git-notes.remove-header = Anmerkung entfernen
|
||||
diff.git-notes.remove-body = Diese Anmerkung wird entfernt.
|
||||
issues.num_reviews_one = %d Review
|
||||
issues.num_reviews_one = %d Sichtung
|
||||
issues.summary_card_alt = Zusammenfassung eines Issues mit dem Titel „%s“ im Repository %s
|
||||
issues.num_reviews_few = %d Reviews
|
||||
issues.num_reviews_few = %d Sichtungen
|
||||
editor.add_tmpl.filename = Dateiname
|
||||
settings.default_update_style_desc = Standard-Aktualisierungsart um Pull-Requests zu aktualisieren, die hinter dem Base-Branch sind.
|
||||
new_advanced = Erweiterte Einstellungen
|
||||
|
@ -2902,7 +2904,7 @@ issues.reaction.alt_add = Füge %[1]s Reaktion zum Kommentar hinzu.
|
|||
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
|
||||
archive.pull.noreview = Dieses Repository ist archiviert. Pull-Requests können nicht gereviewt werden.
|
||||
archive.pull.noreview = Dieses Repository ist archiviert. Pull-Requests können nicht überprüft werden.
|
||||
editor.commit_email = Commit-E-Mail
|
||||
commits.view_single_diff = Änderungen an dieser Datei, die in diesem Commit eingeführt wurden, betrachten
|
||||
pulls.editable = Bearbeitbar
|
||||
|
@ -2922,7 +2924,7 @@ settings.event_action_success_desc = Action-Run war erfolgreich.
|
|||
settings.event_action_failure = Fehlschlag
|
||||
settings.event_action_success = Erfolg
|
||||
settings.event_header_action = Action-Run-Ereignisse
|
||||
settings.event_action_recover_desc = Action-Run war erfolgreich, nachdem der letzte Action-Run im selben Arbeitsablauf fehlgeschlagen ist.
|
||||
settings.event_action_recover_desc = Action-Run war erfolgreich, nachdem der letzte Action-Run im selben Workflow fehlgeschlagen ist.
|
||||
settings.event_action_recover = Wiederherstellen
|
||||
issues.filter_type.all_pull_requests = Alle Pull-Requests
|
||||
|
||||
|
@ -3116,7 +3118,7 @@ dashboard.repo_health_check=Healthchecks für alle Repositorys ausführen
|
|||
dashboard.check_repo_stats=Überprüfe alle Repository-Statistiken
|
||||
dashboard.archive_cleanup=Alte Repository-Archive löschen
|
||||
dashboard.deleted_branches_cleanup=Gelöschte Branches bereinigen
|
||||
dashboard.update_migration_poster_id=Migration Poster-IDs updaten
|
||||
dashboard.update_migration_poster_id=Migrations-Poster-IDs aktualisieren
|
||||
dashboard.git_gc_repos=Garbage-Collection für alle Repositorys ausführen
|
||||
dashboard.resync_all_sshkeys=Die Datei „.ssh/authorized_keys“ mit Forgejo-SSH-Schlüsseln aktualisieren.
|
||||
dashboard.resync_all_sshprincipals=Aktualisiere die Datei „.ssh/authorized_principals“ mit Forgejo-SSH-Principals.
|
||||
|
@ -3159,7 +3161,7 @@ dashboard.delete_old_actions=Alle alten Aktivitäten aus der Datenbank löschen
|
|||
dashboard.delete_old_actions.started=Löschen aller alten Aktivitäten aus der Datenbank gestartet.
|
||||
dashboard.update_checker=Update-Checker
|
||||
dashboard.delete_old_system_notices=Alle alten Systemmeldungen aus der Datenbank löschen
|
||||
dashboard.gc_lfs=Garbage-Collection für LFS Meta-Objekte ausführen
|
||||
dashboard.gc_lfs=Garbage-Collection für LFS-Meta-Objekte ausführen
|
||||
dashboard.stop_zombie_tasks=Zombie-Actions-Aufgaben stoppen
|
||||
dashboard.stop_endless_tasks=Endlose Actions-Aufgaben stoppen
|
||||
dashboard.cancel_abandoned_jobs=Aufgegebene Actions-Jobs abbrechen
|
||||
|
@ -3335,7 +3337,7 @@ auths.pam_email_domain=PAM-E-Mail-Domain (optional)
|
|||
auths.oauth2_provider=OAuth2-Anbieter
|
||||
auths.oauth2_icon_url=Symbol-URL
|
||||
auths.oauth2_clientID=Client-ID (Schlüssel)
|
||||
auths.oauth2_clientSecret=Client-Secret
|
||||
auths.oauth2_clientSecret=Client-Geheimnis
|
||||
auths.openIdConnectAutoDiscoveryURL=OpenID-Connect-Auto-Discovery-URL
|
||||
auths.oauth2_use_custom_url=Benutzerdefinierte URLs anstelle von Standard-URLs verwenden
|
||||
auths.oauth2_tokenURL=Token-URL
|
||||
|
@ -3343,14 +3345,14 @@ auths.oauth2_authURL=Authorisierungs-URL
|
|||
auths.oauth2_profileURL=Profil-URL
|
||||
auths.oauth2_emailURL=E-Mail-URL
|
||||
auths.skip_local_two_fa=Lokale 2FA überspringen
|
||||
auths.skip_local_two_fa_helper=Leer lassen bedeutet, dass lokale User die 2FA immer noch bestehen müssen, um sich anzumelden
|
||||
auths.skip_local_two_fa_helper=Das Leerlassen bedeutet, dass lokale User die 2FA immer noch bestehen müssen, um sich anzumelden
|
||||
auths.oauth2_tenant=Inhaber
|
||||
auths.oauth2_scopes=Zusätzliche Bereiche
|
||||
auths.oauth2_required_claim_name=Benötigter Claim-Name
|
||||
auths.oauth2_required_claim_name_helper=Setze diesen Namen, damit Nutzer aus dieser Quelle sich nur anmelden dürfen, wenn sie einen Claim mit diesem Namen besitzen
|
||||
auths.oauth2_required_claim_value=Benötigter Claim-Wert
|
||||
auths.oauth2_required_claim_value_helper=Setze diesen Wert, damit Nutzer aus dieser Quelle sich nur anmelden dürfen, wenn sie einen Claim mit diesem Namen und Wert besitzen
|
||||
auths.oauth2_group_claim_name=Claim-Name, der Gruppennamen für diese Quelle angibt. (Optional)
|
||||
auths.oauth2_group_claim_name=Claim-Name, der Gruppennamen für diese Quelle angibt (optional).
|
||||
auths.oauth2_admin_group=Gruppen-Claim-Wert für Administratoren (optional – erfordert Claim-Namen oben).
|
||||
auths.oauth2_restricted_group=Gruppen-Claim-Wert für eingeschränkte User. (Optional – erfordert Claim-Namen oben)
|
||||
auths.oauth2_map_group_to_team=Gruppen aus OAuth-Claims den Organisationsteams zuordnen (optional – oben muss der Name des Claims angegeben werden).
|
||||
|
@ -3395,7 +3397,7 @@ auths.still_in_used=Diese Authentifizierungsquelle wird noch verwendet. Bearbeit
|
|||
auths.deletion_success=Die Authentifizierungsquelle „%s“ wurde gelöscht.
|
||||
auths.login_source_exist=Die Authentifizierungsquelle „%s“ existiert bereits.
|
||||
auths.login_source_of_type_exist=Eine Authentifizierungart dieses Typs existiert bereits.
|
||||
auths.unable_to_initialize_openid=OpenID Connect Provider konnte nicht initialisiert werden: %s
|
||||
auths.unable_to_initialize_openid=Provider für OpenID Connect konnte nicht initialisiert werden: %s
|
||||
auths.invalid_openIdConnectAutoDiscoveryURL=Ungültige Auto-Discovery-URL (dies muss eine gültige URL sein, die mit http:// oder https:// beginnt)
|
||||
|
||||
config.server_config=Serverkonfiguration
|
||||
|
@ -3526,7 +3528,7 @@ config.git_pull_timeout=Zeitlimit für Pull
|
|||
config.git_gc_timeout=Zeitlimit für GC
|
||||
|
||||
config.log_config=Protokollierungs-Konfiguration
|
||||
config.logger_name_fmt=Logger: %s
|
||||
config.logger_name_fmt=Protokollierer: %s
|
||||
config.disabled_logger=Deaktiviert
|
||||
config.access_log_mode=Zugriffsprotokoll-Modus
|
||||
config.access_log_template=Zugriffsprotokoll-Vorlage
|
||||
|
@ -3650,7 +3652,7 @@ mirror_sync_delete=hat die Referenz des Spiegels <code>%[2]s</code> in <a href="
|
|||
approve_pull_request=`hat <a href="%[1]s">%[3]s#%[2]s</a> genehmigt`
|
||||
reject_pull_request=`schlug Änderungen für <a href="%[1]s">%[3]s#%[2]s</a> vor`
|
||||
publish_release=`veröffentlichte Release <a href="%[2]s">%[4]s</a> in <a href="%[1]s">%[3]s</a>`
|
||||
review_dismissed=`verwarf das Review von <b>%[4]s</b> in <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
review_dismissed=`verwarf die Sichtung von <b>%[4]s</b> in <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
review_dismissed_reason=Grund:
|
||||
create_branch=legte den Branch <a href="%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a> an
|
||||
starred_repo=favorisierte <a href="%[1]s">%[2]s</a>
|
||||
|
@ -3765,9 +3767,9 @@ conda.registry=Richte diese Registry als Conda-Repository in deiner <code>.conda
|
|||
conda.install=Um das Paket mit Conda zu installieren, führe den folgenden Befehl aus:
|
||||
container.details.type=Abbildtyp
|
||||
container.details.platform=Plattform
|
||||
container.pull=Downloade das Container-Image aus der Kommandozeile:
|
||||
container.pull=Lade das Container-Image von der Kommandozeile aus herunter:
|
||||
container.digest=Prüfsumme
|
||||
container.multi_arch=Betriebsystem / Architektur
|
||||
container.multi_arch=Betriebsystem/Architektur
|
||||
container.layers=Abbildebenen
|
||||
container.labels=Labels
|
||||
container.labels.key=Schlüssel
|
||||
|
@ -3781,7 +3783,7 @@ debian.repository=Repository-Informationen
|
|||
debian.repository.distributions=Distributionen
|
||||
debian.repository.components=Komponenten
|
||||
debian.repository.architectures=Architekturen
|
||||
generic.download=Downloade das Paket aus der Kommandozeile:
|
||||
generic.download=Lade das Paket mit der Kommandozeile herunter:
|
||||
go.install=Installiere das Paket über die Kommandozeile:
|
||||
helm.registry=Diese Paketverwaltung über die Kommandozeile einrichten:
|
||||
helm.install=Nutze folgenden Befehl, um das Paket zu installieren:
|
||||
|
@ -3813,10 +3815,10 @@ rubygems.install=Um das Paket mit gem zu installieren, führe den folgenden Befe
|
|||
rubygems.install2=oder füg es zum Gemfile hinzu:
|
||||
rubygems.dependencies.runtime=Laufzeitabhängigkeiten
|
||||
rubygems.dependencies.development=Entwicklungsabhängigkeiten
|
||||
rubygems.required.ruby=Benötigt Ruby Version
|
||||
rubygems.required.rubygems=Benötigt RubyGem Version
|
||||
rubygems.required.ruby=Benötigt Ruby-Version
|
||||
rubygems.required.rubygems=Benötigt RubyGem-Version
|
||||
swift.registry=Diese Registry über die Kommandozeile einrichten:
|
||||
swift.install=Füge das Paket deiner <code>Package.swift</code> Datei hinzu:
|
||||
swift.install=Füge das Paket deiner <code>Package.swift</code>-Datei hinzu:
|
||||
swift.install2=und führe den folgenden Befehl aus:
|
||||
vagrant.install=Um eine Vagrant-Box hinzuzufügen, führe den folgenden Befehl aus:
|
||||
settings.link=Dieses Paket einem Repository zuweisen
|
||||
|
@ -3892,19 +3894,19 @@ alt.repository.architectures = Architekturen
|
|||
alt.repository.multiple_groups = Dieses Paket ist in verschiedenen Gruppen verfügbar.
|
||||
|
||||
[secrets]
|
||||
secrets=Secrets
|
||||
description=Secrets werden an bestimmte Aktionen weitergegeben und können nicht anderweitig ausgelesen werden.
|
||||
none=Noch keine Secrets vorhanden.
|
||||
creation=Secret hinzufügen
|
||||
secrets=Geheimnisse
|
||||
description=Geheimnisse werden an bestimmte Aktionen weitergegeben und können nicht anderweitig ausgelesen werden.
|
||||
none=Noch keine Geheimnisse vorhanden.
|
||||
creation=Geheimnis hinzufügen
|
||||
creation.name_placeholder=Groß-/Kleinschreibung wird ignoriert, nur alphanumerische Zeichen oder Unterstriche, darf nicht mit GITEA_ oder GITHUB_ beginnen
|
||||
creation.value_placeholder=Beliebigen Inhalt eingeben. Leerzeichen am Anfang und Ende werden weggelassen.
|
||||
creation.success=Das Secret „%s“ wurde hinzugefügt.
|
||||
creation.failed=Secret konnte nicht hinzugefügt werden.
|
||||
deletion=Secret entfernen
|
||||
deletion.description=Das Entfernen eines Secrets kann nicht rückgängig gemacht werden. Fortfahren?
|
||||
deletion.success=Das Secret wurde entfernt.
|
||||
deletion.failed=Secret konnte nicht entfernt werden.
|
||||
management=Secrets verwalten
|
||||
creation.success=Das Geheimnis „%s“ wurde hinzugefügt.
|
||||
creation.failed=Geheimnis konnte nicht hinzugefügt werden.
|
||||
deletion=Geheimnis entfernen
|
||||
deletion.description=Das Entfernen eines Geheimnisses kann nicht rückgängig gemacht werden. Fortfahren?
|
||||
deletion.success=Das Geheimnis wurde entfernt.
|
||||
deletion.failed=Geheimnis konnte nicht entfernt werden.
|
||||
management=Geheimnisse verwalten
|
||||
|
||||
[actions]
|
||||
actions=Actions
|
||||
|
|
|
@ -3939,12 +3939,12 @@ submodule=Υπομονάδα
|
|||
[search]
|
||||
code_search_unavailable = Η αναζήτηση κώδικα δεν είναι επί του παρόντος διαθέσιμη. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.
|
||||
keyword_search_unavailable = Η αναζήτηση με την χρήση λέξεων-κλειδιών δεν είναι επί του παρόντος διαθέσιμη. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.
|
||||
runner_kind = Αναζήτηση runner...
|
||||
runner_kind = Αναζήτηση runner…
|
||||
code_search_by_git_grep = Για την αναζήτηση κώδικα, χρησιμοποιείται η εντολή «git grep». Ίσως να παρουσιαστούν καλύτερα αποτελέσματα, αν ο διαχειριστής σας ενεργοποιήσει ένα ευρετήριο για αποθετήρια («Repository Indexer»).
|
||||
package_kind = Αναζήτηση πακέτων…
|
||||
project_kind = Αναζήτηση έργων...
|
||||
project_kind = Αναζήτηση έργων…
|
||||
branch_kind = Αναζήτηση κλάδων…
|
||||
commit_kind = Αναζήτηση commit...
|
||||
commit_kind = Αναζήτηση commit…
|
||||
no_results = Δεν βρέθηκαν κατάλληλα αποτελέσματα.
|
||||
search = Αναζήτηση…
|
||||
type_tooltip = Είδος αναζήτησης
|
||||
|
@ -3958,8 +3958,8 @@ org_kind = Αναζήτηση οργανισμών…
|
|||
team_kind = Αναζήτηση ομαδών…
|
||||
code_kind = Αναζήτηση κώδικα…
|
||||
exact_tooltip = Να συμπεριληφθούν μόνο αποτελέσματα που ταιριάζουν με τον όρο αναζήτησης
|
||||
issue_kind = Αναζήτηση ζητημάτων...
|
||||
pull_kind = Αναζήτηση pull...
|
||||
issue_kind = Αναζήτηση ζητημάτων…
|
||||
pull_kind = Αναζήτηση pull…
|
||||
exact = Ακριβής
|
||||
milestone_kind = Αναζήτηση ορόσημων...
|
||||
union = Ένωση
|
||||
|
|
|
@ -895,6 +895,7 @@ ssh_invalid_token_signature = The provided SSH key, signature or token do not ma
|
|||
ssh_token_required = You must provide a signature for the below token
|
||||
ssh_token = Token
|
||||
ssh_token_help = You can generate a signature using:
|
||||
ssh_token_help_ssh_agent = or, if you're using an SSH agent (with the SSH_AUTH_SOCK variable set):
|
||||
ssh_token_signature = Armored SSH signature
|
||||
key_signature_ssh_placeholder = Begins with "-----BEGIN SSH SIGNATURE-----"
|
||||
verify_ssh_key_success = SSH key "%s" has been verified.
|
||||
|
|
|
@ -630,7 +630,7 @@ account = Konto
|
|||
ssh_gpg_keys = SSH / GPG-ŝlosiloj
|
||||
twofa_disable = Malaktivigi duoblan aŭtentikigon
|
||||
twofa_enroll = Ŝalti duoblan aŭtentikigon
|
||||
orgs = Mastrumi organizaĵojn
|
||||
orgs = Organizaĵoj
|
||||
blocked_users = Blokitaj uzantoj
|
||||
profile = Profilo
|
||||
ui = Haŭto
|
||||
|
@ -686,7 +686,7 @@ verify_ssh_key_success = SSH-ŝlosilo «%s» jam konfirmiĝis.
|
|||
edit_oauth2_application = Redakti OAuth2-programon
|
||||
gpg_key_deletion = Forigi GPG-ŝlosilon
|
||||
gpg_key_matched_identities = Akordaj identecoj:
|
||||
manage_themes = Elekti implicitan haŭton
|
||||
manage_themes = Defaŭlta temo
|
||||
ssh_key_deletion = Forigi SSH-ŝlosilon
|
||||
key_state_desc = Ĉi tiu ŝlosilo uziĝis dum la pasintaj 7 tagoj
|
||||
valid_forever = Validos dumĉiame
|
||||
|
@ -700,7 +700,7 @@ primary = Ĉefa
|
|||
ssh_disabled = SSH malaktivigita
|
||||
update_avatar_success = Via profilbildo konserviĝis.
|
||||
keep_email_private = Kaŝi retpoŝtadreson
|
||||
manage_openid = Mastrumi OpenID-adresojn
|
||||
manage_openid = OpenID-adresoj
|
||||
delete_current_avatar = Forigi nunan profilbildon
|
||||
email_preference_set_success = Retpoŝta prefero konserviĝis sukcese.
|
||||
permissions_access_all = Ĉiu (publika, privata, kaj limigita)
|
||||
|
@ -884,9 +884,9 @@ commit_kind = Serĉi enmetojn…
|
|||
no_results = Ne trovis kongruantajn rezultojn.
|
||||
exact = Ĝusta
|
||||
exact_tooltip = Inkluzivas nur rezultojn kongruantajn kun la ĝustaj serĉoterminoj
|
||||
issue_kind = Serĉi erarojn...
|
||||
issue_kind = Serĉi erarojn…
|
||||
regexp_tooltip = Interpretas la serĉoterminoj kiel regulesprimo
|
||||
fuzzy = Svaga
|
||||
branch_kind = Serĉi disbranĉigojn…
|
||||
runner_kind = Serĉi rulantojn...
|
||||
pull_kind = Serĉi tirpetojn...
|
||||
runner_kind = Serĉi rulantojn…
|
||||
pull_kind = Serĉi tirpetojn…
|
|
@ -740,7 +740,7 @@ avatar=Avatar
|
|||
ssh_gpg_keys=Claves SSH / GPG
|
||||
social=Redes sociales
|
||||
applications=Aplicaciones
|
||||
orgs=Administrar organizaciones
|
||||
orgs=Organizaciones
|
||||
repos=Repositorios
|
||||
delete=Eliminar cuenta
|
||||
twofa=Autenticación de dos factores (TOTP)
|
||||
|
@ -1075,8 +1075,8 @@ keep_pronouns_private = Mostrar pronombres solo a personas autenticadas
|
|||
storage_overview = Resumen del almacenamiento
|
||||
quota.sizes.assets.artifacts = Artefactos
|
||||
quota.sizes.assets.attachments.releases = Archivos adjuntos del lanzamiento
|
||||
change_username_redirect_prompt.with_cooldown.few = El antiguo nombre de usuario estará disponible para todos después un periodo de tiempo de espera de %[1]d días, aún puedes reclamar el antiguo nombre de usuario durante el periodo de tiempo de espera.
|
||||
change_username_redirect_prompt.with_cooldown.one = El antiguo nombre de usuario estará disponible para todos después un periodo de tiempo de espera de %[1]d día, aún puedes reclamar el antiguo nombre de usuario durante el periodo de tiempo de espera.
|
||||
change_username_redirect_prompt.with_cooldown.few = El antiguo nombre de usuario estará disponible para todos después un periodo de tiempo de espera de %[1]d días. Aún puedes reclamar el antiguo nombre de usuario durante el periodo de tiempo de espera.
|
||||
change_username_redirect_prompt.with_cooldown.one = El antiguo nombre de usuario estará disponible para todos después un periodo de tiempo de espera de %[1]d día. Aún puedes reclamar el antiguo nombre de usuario durante el periodo de tiempo de espera.
|
||||
quota.rule.exceeded = Excedido
|
||||
quota.rule.no_limit = Ilimitado
|
||||
quota.sizes.assets.all = Activos
|
||||
|
@ -1574,7 +1574,7 @@ issues.remove_ref_at=`eliminó la referencia <b>%s</b> %s`
|
|||
issues.add_ref_at=`añadió la referencia <b>%s</b> %s`
|
||||
issues.delete_branch_at=`eliminó la rama <b>%s</b> %s`
|
||||
issues.filter_label=Etiqueta
|
||||
issues.filter_label_exclude=`Usa <code>alt</code> + <code>clic/enter</code> para excluir etiquetas`
|
||||
issues.filter_label_exclude=Usa <kbd>Alt</kbd> + <kbd>Click</kbd> para excluir etiquetas
|
||||
issues.filter_label_no_select=Todas las etiquetas
|
||||
issues.filter_label_select_no_label=Sin etiqueta
|
||||
issues.filter_milestone=Hito
|
||||
|
@ -2888,6 +2888,9 @@ summary_card_alt = Tarjeta de resumen del repositorio %s
|
|||
settings.pull_mirror_sync_quota_exceeded = Cuota excedida, no se empujan los cambios.
|
||||
archive.nocomment = No es posible hacer comentarios porque el repositorio está archivado.
|
||||
|
||||
sync_fork.branch_behind_one = Esta rama esta %[1]d cambios detrás de %[2]s
|
||||
sync_fork.branch_behind_few = Esta rama está %[1]d confirmaciones detrás de %[2]s
|
||||
|
||||
[graphs]
|
||||
component_loading = Cargando %s…
|
||||
component_loading_failed = No se pudo cargar %s
|
||||
|
|
|
@ -1,67 +1,67 @@
|
|||
[common]
|
||||
tracked_time_summary = Kokkuvõte jälgitavast ajast, mis põhineb probleemide nimekirja filtritel
|
||||
your_settings = Seaded
|
||||
your_settings = Seadistused
|
||||
home = Avaleht
|
||||
dashboard = Armatuurlaud
|
||||
explore = Uurige
|
||||
help = Abi
|
||||
dashboard = Töölaud
|
||||
explore = Uuri
|
||||
help = Abiteave
|
||||
logo = Logo
|
||||
sign_in = Logi sisse
|
||||
sign_in_with_provider = Logi sisse koos %s
|
||||
sign_in_with_provider = Logi sisse kasutajakontoga: %s
|
||||
sign_in_or = või
|
||||
sign_out = Registreeru välja
|
||||
sign_out = Logi välja
|
||||
sign_up = Registreeru
|
||||
link_account = Lingi konto
|
||||
link_account = Lingi väline kasutajakonto
|
||||
register = Registreeru
|
||||
version = Versioon
|
||||
page = Lehekülg
|
||||
template = Mall
|
||||
language = Keel
|
||||
notifications = Teated
|
||||
notifications = Teavitused
|
||||
active_stopwatch = Aktiivne aja jälgimine
|
||||
create_new = Loo…
|
||||
user_profile_and_more = Profiil ja seaded…
|
||||
user_profile_and_more = Profiil ja seadistused…
|
||||
signed_in_as = Sisselogitud kui
|
||||
enable_javascript = See veebileht nõuab JavaScripti.
|
||||
enable_javascript = See veebileht eeldab JavaScripti kasutamise lubamist.
|
||||
toc = Sisukord
|
||||
licenses = Litsentsid
|
||||
username = Kasutajanimi
|
||||
webauthn_error_unable_to_process = Server ei saanud teie taotlust töödelda.
|
||||
webauthn_error_duplicated = Turvalisuse võti ei ole selle taotluse puhul lubatud. Palun veenduge, et võti ei ole juba registreeritud.
|
||||
webauthn_error_unable_to_process = Server ei saanud sinu päringut töödelda.
|
||||
webauthn_error_duplicated = Turvavõti ei ole selle päringu puhul lubatud. Palun veendu, et võti ei ole juba registreeritud.
|
||||
return_to_forgejo = Tagasi Forgejo'sse
|
||||
toggle_menu = Lülitage menüü
|
||||
more_items = Rohkem esemeid
|
||||
toggle_menu = Lülita menüü sisse/välja
|
||||
more_items = Rohkem objekte
|
||||
email = E-posti aadress
|
||||
password = Parool
|
||||
access_token = Juurdepääsutähis
|
||||
re_type = Kinnita parool
|
||||
password = Salasõna
|
||||
access_token = Tunnusluba
|
||||
re_type = Kinnita salasõna
|
||||
twofa = Kahefaktoriline autentimine
|
||||
twofa_scratch = Kahefaktoriline kriipsukood
|
||||
passcode = Passkood
|
||||
webauthn_insert_key = Sisestage oma turvavõti
|
||||
webauthn_sign_in = Vajutage turvavõtme nuppu. Kui teie turvavõtmel ei ole nuppu, sisestage see uuesti.
|
||||
webauthn_press_button = Palun vajutage turvavõtme nuppu…
|
||||
webauthn_use_twofa = Kasutage oma telefonist kahefaktorilist koodi
|
||||
webauthn_error = Teie turvavõti ei saanud lugeda.
|
||||
webauthn_unsupported_browser = Teie brauser ei toeta praegu WebAuthn.
|
||||
webauthn_error_unknown = Tekkis tundmatu viga. Palun proovige uuesti.
|
||||
webauthn_error_insecure = WebAuthn toetab ainult turvalisi ühendusi. HTTP kaudu testimiseks võite kasutada päritolu "localhost" või "127.0.0.1"
|
||||
webauthn_error_empty = Sellele võtmele tuleb määrata nimi.
|
||||
webauthn_error_timeout = Ajakatkestus saavutati enne võtme lugemist. Palun laadige see lehekülg uuesti ja proovige uuesti.
|
||||
passcode = Salakood
|
||||
webauthn_insert_key = Sisesta oma turvavõti
|
||||
webauthn_sign_in = Vajuta turvavõtme nuppu. Kui sinu turvavõtmel ei ole nuppu, sisesta see uuesti.
|
||||
webauthn_press_button = Palun vajuta turvavõtme nuppu…
|
||||
webauthn_use_twofa = Sisesta oma telefonist kahefaktorilise autentimise kood
|
||||
webauthn_error = Sinu turvavõtit ei saanud lugeda.
|
||||
webauthn_unsupported_browser = Sinu veebibrauser ei toeta praegu WebAuthn-liidestust.
|
||||
webauthn_error_unknown = Tekkis tundmatu viga. Palun proovi uuesti.
|
||||
webauthn_error_insecure = WebAuthn toetab ainult turvalisi ühendusi. HTTP kaudu testimiseks võid kasutada lähteaadressina „localhost“ või „127.0.0.1“
|
||||
webauthn_error_empty = Palun lisa sellele võtmele täisnimi.
|
||||
webauthn_error_timeout = Päring aegus enne võtme lugemist. Palun laadi see lehekülg uuesti ja proovi uuesti.
|
||||
repository = Hoidla
|
||||
organization = Organisatsioon
|
||||
new_fork = Uus hoidla haru
|
||||
new_fork = Uus lähekoodihoidla haru
|
||||
new_project = Uus projekt
|
||||
new_project_column = Uus veerg
|
||||
admin_panel = Saidi administreerimine
|
||||
settings = Seaded
|
||||
admin_panel = Saidi haldus
|
||||
settings = Seadistused
|
||||
your_profile = Profiil
|
||||
your_starred = Tähistatud tärniga
|
||||
new_repo.title = Uus hoidla
|
||||
new_migrate.title = Uus sisseränne
|
||||
new_repo.title = Uus lähtekoodi hoidla
|
||||
new_migrate.title = Uus kolimine
|
||||
new_org.title = Uus organisatsioon
|
||||
new_repo.link = Uus hoidla
|
||||
new_migrate.link = Uus sisseränne
|
||||
new_repo.link = Uus lähtekoodi hoidla
|
||||
new_migrate.link = Uus kolimine
|
||||
new_org.link = Uus organisatsioon
|
||||
all = Kõik
|
||||
sources = Allikad
|
||||
|
@ -69,10 +69,10 @@ mirror = Peegelpilt
|
|||
mirrors = Peegelpildid
|
||||
forks = Harud
|
||||
activities = Tegevused
|
||||
pull_requests = Tõmbepäringud
|
||||
issues = Probleemid
|
||||
pull_requests = Päringud koodi mestimiseks
|
||||
issues = Veahaldus
|
||||
milestones = Verstapostid
|
||||
ok = OK
|
||||
ok = Sobib
|
||||
cancel = Tühista
|
||||
retry = Proovi uuesti
|
||||
rerun = Käivita uuesti
|
||||
|
@ -81,120 +81,139 @@ add = Lisa
|
|||
add_all = Lisa kõik
|
||||
remove = Eemalda
|
||||
remove_all = Eemalda kõik
|
||||
remove_label_str = Eemalda ühik "%s"
|
||||
edit = Redigeeri
|
||||
remove_label_str = Eemalda „%s“ objekt
|
||||
edit = Muuda
|
||||
view = Vaata
|
||||
test = Test
|
||||
enabled = Võimaldatud
|
||||
disabled = Välja lülitatud
|
||||
locked = Lukkus
|
||||
test = Testi
|
||||
enabled = Kasutusel
|
||||
disabled = Pole kasutusel
|
||||
locked = Lukustatud
|
||||
copy = Kopeeri
|
||||
copy_url = Kopeeri URL
|
||||
copy_hash = Kooperi hash
|
||||
copy_url = Kopeeri võrguaadress
|
||||
copy_hash = Kopeeri räsi
|
||||
copy_content = Kopeeri sisu
|
||||
copy_branch = Kopeeri haru nimi
|
||||
copy_success = Kopeeritud!
|
||||
copy_error = Kopeerimine ebaõnnestus
|
||||
copy_error = Kopeerimine ei õnnestunud
|
||||
copy_type_unsupported = Seda failitüüpi ei saa kopeerida
|
||||
write = Kirjuta
|
||||
preview = Eelvaade
|
||||
loading = Laadimine…
|
||||
loading = Laadin…
|
||||
error = Viga
|
||||
error404 = Lehekülge, millele te üritate jõuda, kas <strong>ei ole olemas</strong> või <strong>teil ei ole õigust</strong> seda vaadata.
|
||||
error404 = Lehekülge, millele sa üritad jõuda, kas <strong>ei ole olemas</strong>, <strong>ta on eemaldatud</strong> või <strong>sul ei ole õigust</strong> seda vaadata.
|
||||
error413 = Sa oled oma kvoodi ammendanud.
|
||||
go_back = Mine tagasi
|
||||
invalid_data = Kehtetud andmed: %v
|
||||
invalid_data = Vigased andmed: %v
|
||||
never = Mitte kunagi
|
||||
unknown = Teadmata
|
||||
rss_feed = RSS infovoog
|
||||
confirm_delete_artifact = Kas oled kindel et soovite artefakti "%s" kustutada?
|
||||
pin =
|
||||
rss_feed = RSS-voog
|
||||
confirm_delete_artifact = Kas oled kindel et soovid „%s“ artefakti kustutada?
|
||||
pin =Tõsta esile
|
||||
artifacts = Artefaktid
|
||||
archived = Arhiveeritud
|
||||
concept_system_global = Ülemaailmne
|
||||
concept_system_global = Üldine
|
||||
concept_user_individual = Individuaalne
|
||||
concept_code_repository = Hoidla
|
||||
concept_code_repository = Lähtekoodi hoidla
|
||||
concept_user_organization = Organisatsioon
|
||||
show_timestamps = Näita ajatemplid
|
||||
show_log_seconds = Näita sekundit
|
||||
download_logs = Logide allalaadimine
|
||||
show_timestamps = Näita ajatempleid
|
||||
show_log_seconds = Näita sekundeid
|
||||
download_logs = Laadi logid alla
|
||||
name = Nimi
|
||||
value = Väärtus
|
||||
filter = Filter
|
||||
filter.clear = Tühjendage filtrid
|
||||
filter.clear = Tühjenda filtrid
|
||||
filter.is_archived = Arhiveeritud
|
||||
filter.not_archived = Mitte arhiveeritud
|
||||
filter.is_fork = Harud
|
||||
filter.not_fork = Mitte harud
|
||||
filter.is_mirror = Peegelpiltid
|
||||
filter.not_mirror = Mitte peegelpiltid
|
||||
filter.not_archived = Arhiveerimata
|
||||
filter.is_fork = Koodiharud
|
||||
filter.not_fork = Pole koodiharud
|
||||
filter.is_mirror = Peegelpildid
|
||||
filter.not_mirror = Pole peegelpilte
|
||||
filter.is_template = Mallid
|
||||
filter.not_template = Mitte Mallid
|
||||
filter.not_template = Pole mallid
|
||||
filter.public = Avalik
|
||||
filter.private = Privaatne
|
||||
rerun_all = Käivita uuesti kõik tööd
|
||||
new_mirror = Uus peegelpilt
|
||||
copy_generic = Kopeeri lõikelauale
|
||||
confirm_delete_selected = Kinnitage et kustutada kõik valitud elemendid?
|
||||
show_full_screen = Näita täisekraanil
|
||||
confirm_delete_selected = Kas kinnitad kõikide valitud objektide kustutamise?
|
||||
show_full_screen = Näita täisekraanivaates
|
||||
|
||||
powered_by = Siin on kasutusel %s
|
||||
captcha = Robotilõks
|
||||
copy_path = Kopeeri asukoht
|
||||
unpin = Lõpeta esiletõstmine
|
||||
|
||||
[search]
|
||||
search = Otsi...
|
||||
search = Otsi…
|
||||
fuzzy = Hägus
|
||||
fuzzy_tooltip = Lisage tulemused mis vastavad ka otsingu terminile
|
||||
fuzzy_tooltip = Lisa tulemused mis lähedalt vastavad otsingusõnale
|
||||
union = Märksõnad
|
||||
exact = Täpne
|
||||
exact_tooltip = Sisaldab ainult tulemusi mis vastavad täpsele otsingusõnale
|
||||
repo_kind = Otsi hoidlad...
|
||||
user_kind = Otsi kasutajaid...
|
||||
org_kind = Otsi organisatsioone...
|
||||
team_kind = Otsi meeskonnad...
|
||||
code_kind = Otsi koodi...
|
||||
exact_tooltip = Sisaldab ainult tulemusi, mis vastavad täpsele otsingusõnale
|
||||
repo_kind = Otsi lähtekoodihoidlad…
|
||||
user_kind = Otsi kasutajaid…
|
||||
org_kind = Otsi organisatsioone…
|
||||
team_kind = Otsi tiime…
|
||||
code_kind = Otsi koodi…
|
||||
code_search_by_git_grep = Praeguse koodi otsingu tulemused annab "git grep". Paremaid tulemusi võib saada, kui saidi administraator lubab koodi indekseerija.
|
||||
package_kind = Otsi pakette...
|
||||
project_kind = Otsi projekte...
|
||||
branch_kind = Otsi harusid...
|
||||
commit_kind = Otsi kommiteid...
|
||||
runner_kind = Otsi jooksjaid...
|
||||
package_kind = Otsi pakette…
|
||||
project_kind = Otsi projekte…
|
||||
branch_kind = Otsi harusid…
|
||||
commit_kind = Otsi kommiteid…
|
||||
runner_kind = Otsi jooksjaid…
|
||||
no_results = Sobivaid tulemusi ei leitud.
|
||||
issue_kind = Otsi probleeme...
|
||||
issue_kind = Otsi probleeme…
|
||||
milestone_kind = Otsi verstapostid...
|
||||
type_tooltip = Otsingu tüüp
|
||||
code_search_unavailable = Koodide otsing ei ole praegu saadaval. Palun võtke ühendust saidi administraatoriga.
|
||||
union_tooltip = Sisaldab tulemused mis vastavad mis tahes tühikutega eraldatud võtmesõnadele
|
||||
keyword_search_unavailable = Otsing märksõna järgi ei ole praegu saadaval. Palun võtke ühendust saidi administraatoriga.
|
||||
pull_kind = Otsi tõmbepäringuid...
|
||||
code_search_unavailable = Koodiotsing ei ole praegu saadaval. Palun võta ühendust saidi administraatoriga.
|
||||
union_tooltip = Kaasa tulemusi, mis vastavad mis tahes tühikutega eraldatud märksõnadele
|
||||
keyword_search_unavailable = Otsing märksõna järgi ei ole praegu saadaval. Palun võtke ühendust saidi haldajaga.
|
||||
pull_kind = Otsi tõmbepäringuid…
|
||||
|
||||
[aria]
|
||||
navbar = Navigatsiooniriba
|
||||
footer.software = Selle tarkvara kohta
|
||||
footer.software = Teave selle tarkvara kohta
|
||||
footer.links = Lingid
|
||||
|
||||
footer = Jalus
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = %s panused viimase 12 kuu jooksul
|
||||
contributions_zero = Panused ei ole
|
||||
number_of_contributions_in_the_last_12_months = %s kaastööd viimase 12 kuu jooksul
|
||||
contributions_zero = Kaastöid ei ole
|
||||
contributions_format = {contributions} {day} {month}, {year}
|
||||
contributions_few = panused
|
||||
contributions_few = kaastööd
|
||||
less = Vähem
|
||||
more = Rohkem
|
||||
contributions_one = panus
|
||||
contributions_one = kaastöö
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Lisa pealkiri
|
||||
buttons.italic.tooltip = Lisa kursiivne tekst
|
||||
buttons.quote.tooltip = Tsitaadi tekst
|
||||
buttons.italic.tooltip = Lisa kaldkirjas tekst
|
||||
buttons.quote.tooltip = Tsiteeri teksti
|
||||
buttons.code.tooltip = Lisa kood
|
||||
buttons.link.tooltip = Lisa link
|
||||
buttons.list.ordered.tooltip = Lisa nummerdatud nimekiri
|
||||
buttons.list.unordered.tooltip = Lisa nimekiri
|
||||
buttons.list.task.tooltip = Lisa ülesannete nimekiri
|
||||
buttons.ref.tooltip = Viide probleemile või tõmbepäringule
|
||||
buttons.switch_to_legacy.tooltip = Kasutage selle asemel pärandredaktorit
|
||||
buttons.enable_monospace_font = Võimalda püsisammkiri
|
||||
buttons.disable_monospace_font = Lülita välja püsisammkiri
|
||||
buttons.indent.tooltip = Pesa esemed ühe taseme võrra
|
||||
buttons.bold.tooltip = Lisa rasvane tekst
|
||||
buttons.mention.tooltip = Mainige kasutajat või meeskonda
|
||||
buttons.ref.tooltip = Viide probleemile või mestimispäringule
|
||||
buttons.switch_to_legacy.tooltip = Selle asemel kasuta pärandredaktorit
|
||||
buttons.enable_monospace_font = Kasuta püsisammkirja
|
||||
buttons.disable_monospace_font = Lülita püsisammkiri välja
|
||||
buttons.indent.tooltip = Liiguta objekte ühe taseme võrra
|
||||
buttons.bold.tooltip = Lisa paks tekst
|
||||
buttons.mention.tooltip = Maini kasutajat või tiimi
|
||||
|
||||
buttons.unindent.tooltip = Võta tagasi objektide liigutamine ühe taseme võrra
|
||||
buttons.new_table.tooltip = Lisa tabel
|
||||
table_modal.header = Lisa tabel
|
||||
table_modal.placeholder.header = Päis
|
||||
table_modal.placeholder.content = Sisu
|
||||
table_modal.label.rows = Read
|
||||
table_modal.label.columns = Veerud
|
||||
link_modal.header = Lisa link
|
||||
link_modal.url = Võrguaadress
|
||||
link_modal.description = Kirjeldus
|
||||
link_modal.paste_reminder = Soovitus: kui link on uba lõikelaual olemas, siis võis ta otse lisada ja link luuakse automaatselt.
|
||||
|
||||
[filter]
|
||||
string.asc = A - Z
|
||||
|
@ -205,114 +224,179 @@ occurred = Tekkis viga
|
|||
invalid_csrf = Halb taotlus: vigane CSRF token
|
||||
not_found = Sihtmärki ei leitud.
|
||||
network_error = Võrguviga
|
||||
server_internal = Sisemine serveri viga
|
||||
report_message = Kui usute et tegemist on Forgejo veaga siis otsige probleeme <a href="%s" target="_blank">Codebergist</a> või avage vajadusel uus probleem.
|
||||
server_internal = Serveri sisemine viga
|
||||
report_message = Kui usud, et tegemist on Forgejo veaga, siis otsige sarnaseid vigu <a href="%s" target="_blank">Codebergist</a> või vajadusel koosta uus veakirjeldus.
|
||||
|
||||
[startpage]
|
||||
app_desc = Valutu, isehostitatud Git'i teenus
|
||||
app_desc = Muretu Git'i teenus sinu omas serveris
|
||||
install = Lihtne paigaldada
|
||||
platform = Platvormiülene
|
||||
platform_desc = Forgejo on kinnitust leidnud et töötab nii libre operatsioonisüsteemides nagu Linux ja FreeBSD, kui ka erinevatel protsessorarhitektuuridel. Valige see mis teile meeldib!
|
||||
platform_desc = On kinnitust leidnud, et Forgejo töötab nii avatud operatsioonisüsteemides nagu Linux ja FreeBSD, kui ka erinevatel protsessorarhitektuuridel. Vali see mis sulle meeldib!
|
||||
lightweight = Kergekaaluline
|
||||
lightweight_desc = Forgejo on väikeste miinimumnõuetega ja seda saab kasutada odaval Raspberry Pi'l. Säästa oma masina energiat!
|
||||
lightweight_desc = Forgejo on väikeste miinimumnõuetega ja seda saad kasutada odaval Raspberry Pi'l. Säästa oma masina energiat!
|
||||
license = Avatud lähtekood
|
||||
install_desc = Lihtsalt <a target="_blank" rel="noopener noreferrer" href="%[1]s">käivitage oma platvormi binaarsüsteem</a>, tarnige see koos <a target="_blank" rel="noopener noreferrer" href="%[2]s">Dockeriga</a>, või saada see <a target="_blank" rel="noopener noreferrer" href="%[3]s">pakendatud</a>.
|
||||
license_desc = Mine võta <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Liitu meiega andes <a target="_blank" rel="noopener noreferrer" href="%[2]s">oma panuse</a> et muuta see projekt veelgi paremaks. Ärge häbenege olla kaasaaitaja!
|
||||
install_desc = Lihtsalt <a target="_blank" rel="noopener noreferrer" href="%[1]s">käivita rakenduse fail oma platvormil</a>, pane ta tööle <a target="_blank" rel="noopener noreferrer" href="%[2]s">Dockeriga</a> või laadi ta <a target="_blank" rel="noopener noreferrer" href="%[3]s">pakendatuna</a>.
|
||||
license_desc = Laadi <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a> alla! Liitu meiega andes <a target="_blank" rel="noopener noreferrer" href="%[2]s">oma panuse</a>, et muuta see projekt veelgi paremaks. Ära pelga osalemist!
|
||||
|
||||
[install]
|
||||
install = Paigaldamine
|
||||
title = Esialgne konfiguratsioon
|
||||
docker_helper = Kui käivitate Forgejo't Dockeri sees, lugege <a target="_blank" rel="noopener noreferrer" href="%s">dokumentatsiooni</a> enne seadete muutmine.
|
||||
require_db_desc = Forgejo vajab MySQL, PostgreSQL, SQLite3 või TiDB (MySQL protokoll).
|
||||
db_title = Andmebaasi seaded
|
||||
docker_helper = Kui käivitad Forgejo't Dockeris, loe enne seadistuste muutmist <a target="_blank" rel="noopener noreferrer" href="%s">dokumentatsiooni</a>.
|
||||
require_db_desc = Forgejo vajab tööks ühte järgnevast andmebaasidest: MySQL, PostgreSQL, SQLite3 või TiDB (MySQL protokoll).
|
||||
db_title = Andmebaasi seadistused
|
||||
db_type = Andmebaasi tüüp
|
||||
host = Vastuvõtja
|
||||
host = Server
|
||||
user = Kasutajanimi
|
||||
password = Parool
|
||||
password = Salasõna
|
||||
db_name = Andmebaasi nimi
|
||||
db_schema = Skeem
|
||||
db_schema_helper = Jäta tühjaks andmebaasi vaikimisi ("avalik").
|
||||
db_schema = Andmeskeem
|
||||
db_schema_helper = Vaikimisi valiku kasutamiseks jäta tühjaks („public“).
|
||||
ssl_mode = SSL
|
||||
path = Tee
|
||||
sqlite_helper = SQLite3 andmebaasi failitee.<br>Sisestage absoluutne tee, kui käivitate Forgejo't teenusena.
|
||||
reinstall_error = Sa üritad installeerida olemasolevasse Forgejo andmebaasi
|
||||
reinstall_confirm_message = Olemasoleva Forgejo andmebaasi uuesti paigaldamine võib põhjustada mitmeid probleeme. Enamasti peaksite Forgejo käivitamiseks kasutama olemasolevat "app.ini". Kui te teate, mida teete, kinnitage järgmist:
|
||||
reinstall_confirm_check_1 = Andmed, mis on krüpteeritud SECRET_KEY'ga app.ini's, võivad kaduda: kasutajad ei pruugi saada 2FA/OTP-ga sisse logima ja peegelpiltid ei pruugi õigesti toimida. Selle kasti märkimisega kinnitate, et praegune app.ini fail sisaldab õiget SECRET_KEY'd.
|
||||
reinstall_confirm_check_3 = Te kinnitate, et olete täiesti kindel, et see Forgejo töötab õiges app.ini asukohas ja et olete kindel, et peate uuesti installima. Te kinnitate, et tunnistate ülaltoodud riske.
|
||||
err_empty_db_path = SQLite3 andmebaasi tee ei saa olla tühi.
|
||||
no_admin_and_disable_registration = Kasutajate iseregistreerimist ei saa keelata ilma administraatori kontot loomata.
|
||||
err_empty_admin_password = Administraatori parool ei saa olla tühi.
|
||||
err_empty_admin_email = Administraatori e-posti aadress ei saa olla tühi.
|
||||
err_admin_name_is_reserved = Administraatori kasutajanimi on kehtetu, kasutajanimi on reserveeritud
|
||||
err_admin_name_pattern_not_allowed = Administraatori kasutajanimi on kehtetu, kasutajanimi vastab reserveeritud mustrile
|
||||
err_admin_name_is_invalid = Administraatori kasutajanimi on kehtetu
|
||||
general_title = Üldised seaded
|
||||
app_name = Instantsi pealkiri
|
||||
app_name_helper = Sisestage siia oma instantsi nimi. See kuvatakse igal leheküljel.
|
||||
app_slogan = Instantse loosung
|
||||
repo_path = Hoidla juurte tee
|
||||
lfs_path = Git LFS'i juurte tee
|
||||
lfs_path_helper = Failid jälgitatud Git LFS'ist salvestatakse sellesse kaustale. Jätke tühjaks et välja lülitada.
|
||||
path = Asukoht
|
||||
sqlite_helper = SQLite3 andmebaasi aukoht.<br>Kui käivitad Forgejo'd teenusena, siis sisesta absoluutne asukoht.
|
||||
reinstall_error = Sa üritad paigaldada olemasolevasse Forgejo andmebaasi
|
||||
reinstall_confirm_message = Olemasoleva Forgejo andmebaasi uuesti paigaldamine võib põhjustada mitmeid probleeme. Enamasti peaksid Forgejo käivitamiseks kasutama olemasolevat „app.ini“. Kui te tead, mida teed, kinnita järgmist:
|
||||
reinstall_confirm_check_1 = Andmed, mis on krüpteeritud SECRET_KEY'ga app.ini's, võivad kaduda: kasutajad ei pruugi saada sisselogimisel kaasutada 2FA/OTP võimalusi ja peegelpildid ei pruugi õigesti toimida. Selle kasti märkimisega kinnitad, et praegune app.ini fail sisaldab õiget SECRET_KEY'd.
|
||||
reinstall_confirm_check_3 = Sa kinnitad, et oled täiesti kindel, et see Forgejo töötab õiges app.ini asukohas ja et oled kindel, et pead uuesti paigaldama. Sa kinnitad, et oled teadlik ülaltoodud riskidest.
|
||||
err_empty_db_path = SQLite3 andmebaasi asukoht ei saa olla tühi.
|
||||
no_admin_and_disable_registration = Kasutajate iseregistreerimist ei saa keelata ilma peakasutaja kontot loomata.
|
||||
err_empty_admin_password = Peakasutaja salasõna ei saa olla tühi.
|
||||
err_empty_admin_email = Peakasutaja e-posti aadress ei saa olla tühi.
|
||||
err_admin_name_is_reserved = Peakasutaja kasutajanimi on vigane, kasutajanimi on reserveeritud
|
||||
err_admin_name_pattern_not_allowed = Peakasutaja kasutajanimi on vigane, kasutajanimi vastab reserveeritud mustrile
|
||||
err_admin_name_is_invalid = Peakasutaja kasutajanimi on vigane
|
||||
general_title = Üldised seadistused
|
||||
app_name = Serveri nimi või pealkiri
|
||||
app_name_helper = Sisestage siia oma serveri või teenuse nimi. See kuvatakse igal leheküljel.
|
||||
app_slogan = Serveri tunnuslause
|
||||
repo_path = Hoidla juurkausta asukoht
|
||||
lfs_path = Git LFS'i juurkausta asukoht
|
||||
lfs_path_helper = Git LFS'ist jälgitud failid salvestatakse siia kausta. Kui jätad tühjaks, siis pole see võimalus kasutusel.
|
||||
run_user = Kasutaja kellena käivitada
|
||||
run_user_helper = Operatsioonisüsteemi kasutajanimi, mille all Forgejo töötab. Pange tähele, et sellel kasutajal peab olema juurdepääs hoidlate juurte teele.
|
||||
run_user_helper = Operatsioonisüsteemi kasutajanimi, kellena Forgejo töötab. Pane tähele, et sellel kasutajal peab olema juurdepääs hoidlate juurkaustale.
|
||||
domain = Serveri domeen
|
||||
domain_helper = Serveri domeen või hostiaadress.
|
||||
domain_helper = Serveri domeen või hosti aadress.
|
||||
ssh_port = SSH-serveri port
|
||||
ssh_port_helper = Pordi number, mida SSH-server kasutab. Jätke tühjaks et välja lülitada SSH-serveri.
|
||||
http_port = HTTP-kuulamise port
|
||||
ssh_port_helper = Pordi number, mida SSH-server kasutab. SSH-serveri väljalülitamiseks jäta tühjaks.
|
||||
http_port = Serveri HTTP port
|
||||
http_port_helper = Pordi number, mida Forgejo veebiserver kasutab.
|
||||
app_url = Baasi URL
|
||||
app_url_helper = Baasaadress HTTP(S) kloonimise URL-ide ja e-posti teadete jaoks.
|
||||
log_root_path = Logi tee
|
||||
log_root_path_helper = Logifailid kirjutatakse sellesse kaustale.
|
||||
optional_title = Vabatahtlikud seaded
|
||||
email_title = E-posti seaded
|
||||
smtp_addr = SMTP vastuvõtja
|
||||
app_url = Juur-võrguaadress
|
||||
app_url_helper = Lähteaadress HTTP(S) kloonimise võrguaadresside ja e-posti teadete jaoks.
|
||||
log_root_path = Logi asukoht
|
||||
log_root_path_helper = Logifailid kirjutatakse siia kausta.
|
||||
optional_title = Täiendavad seadistused
|
||||
email_title = E-posti seadistused
|
||||
smtp_addr = SMTP server
|
||||
smtp_port = SMTP port
|
||||
smtp_from = Saada e-kirjad nagu
|
||||
smtp_from_invalid = "Saada e-kirjad nagu" aadress on kehtetu
|
||||
smtp_from_helper = E-posti aadress, mida Forgejo kasutab. Sisestage tavaline e-posti aadress või kasutage formaati "Nimi" <email@example.com>.
|
||||
smtp_from_invalid = „Saada e-kirjad nagu“ aadress on vigane
|
||||
smtp_from_helper = E-posti aadress, mida Forgejo kasutab. Sisesta tavaline e-posti aadress või kasutage vormingut "Nimi" <email@example.com>.
|
||||
mailer_user = SMTP kasutajanimi
|
||||
mailer_password = SMTP parool
|
||||
register_confirm = Registreerimiseks on vaja e-posti kinnitust
|
||||
mail_notify = Lubage e-posti teated
|
||||
server_service_title = Serveri ja kolmanda osapoole teenuste seaded
|
||||
offline_mode = Lülita sisse lokaalse režiimi
|
||||
disable_gravatar = Lülita välja Gravatar
|
||||
federated_avatar_lookup = Lülita sisse föderaalsed avatarid
|
||||
federated_avatar_lookup.description = Otsige avatare kasutades Libravatar'i.
|
||||
mailer_password = SMTP salasõna
|
||||
register_confirm = Registreerimiseks on vaja e-posti kinnitamist
|
||||
mail_notify = Kasuta teavitamist e-posti teel
|
||||
server_service_title = Serveri ja kolmanda osapoole teenuste seadistused
|
||||
offline_mode = Lülita sisse lokaalne režiim
|
||||
disable_gravatar = Lülita Gravatar välja
|
||||
federated_avatar_lookup = Kaasuta födereeritud tunnuspilte
|
||||
federated_avatar_lookup.description = Otsi tunnuspilte Libravatari teenusest.
|
||||
disable_registration = Lülita välja iseregistreerimine
|
||||
allow_only_external_registration = Luba registreerimine ainult väliste teenuste kaudu
|
||||
allow_only_external_registration.description = Kasutajad saavad uusi kontosid luua ainult seadistatud väliste teenuste abil.
|
||||
openid_signin = Lülita sisse OpenID sisselogimise
|
||||
openid_signin.description = Luba kasutajatel OpenID kaudu sisse logida.
|
||||
openid_signup = Lülita sisse OpenID iseregistreerimine
|
||||
enable_captcha = Lülita sisse registreerimise CAPTCHA
|
||||
enable_captcha.description = Nõudke kasutajatelt CAPTCHA läbimist kontode loomiseks.
|
||||
require_sign_in_view = Nõua sisselogimist et vaadata instantsi sisu
|
||||
default_keep_email_private = Peida e-posti aadressid vaikimisi
|
||||
default_keep_email_private.description = Lülita sisse uute kasutajate e-posti aadressi varjamine vaikimisi, et see teave ei lekiks kohe pärast registreerimist.
|
||||
default_allow_create_organization = Lubada organisatsioonide loomine vaikimisi
|
||||
default_enable_timetracking = Aja jälgimise sisselülitamine vaikimisi
|
||||
default_enable_timetracking.description = Lubage uute repositooriumide jaoks vaikimisi aja jälgimise funktsiooni kasutamine.
|
||||
admin_title = Administraatori konto seaded
|
||||
admin_setting.description = Administraatori konto loomine on vabatahtlik. Esimesest registreeritud kasutajast saab automaatselt administraator.
|
||||
admin_name = Administraatori kasutajanimi
|
||||
admin_password = Parool
|
||||
confirm_password = Parooli kinnitamine
|
||||
openid_signin = Kasuta OpenID abil sisselogimist
|
||||
openid_signin.description = Luba kasutajatel OpenID abil sisse logida.
|
||||
openid_signup = Kasuta OpenID abil iseregistreerimist
|
||||
enable_captcha = Kasuta registreerimisel robotilõksu
|
||||
enable_captcha.description = Eelda, et kasutajad lahendavad registreerimisel robotilõksu ülesande.
|
||||
require_sign_in_view = Serveri sisu vaatamiseks eelda sisselogimist
|
||||
default_keep_email_private = Vaikimisi peida e-posti aadressid
|
||||
default_keep_email_private.description = Lülita sisse uute kasutajate e-posti aadresside vaikimisi varjamine - see väldib vastava teabe lekkimist kohe pärast registreerimist.
|
||||
default_allow_create_organization = Vaikimisi luba organisatsioonide loomine
|
||||
default_enable_timetracking = Vaikimisi lülita sisse aja jälgimine
|
||||
default_enable_timetracking.description = Vaikimisi luba uute lähtekoodihoidlate jaoks aja jälgimise funktsiooni kasutamise.
|
||||
admin_title = Peakasutaja konto seaded
|
||||
admin_setting.description = Peakasutaja konto loomine on vabatahtlik. Esimesest registreeritud kasutajast saab automaatselt peakasutaja.
|
||||
admin_name = Peakasutaja kasutajanimi
|
||||
admin_password = Salasõna
|
||||
confirm_password = Kinnita salasõna
|
||||
admin_email = E-posti aadress
|
||||
config_location_hint = Need konfiguratsioonivalikud salvestatakse sees:
|
||||
config_location_hint = Need konfiguratsioonivalikud salvestatakse siin:
|
||||
install_btn_confirm = Paigalda Forgejo
|
||||
test_git_failed = Ei saanud testida käsku "git": %v
|
||||
invalid_db_setting = Andmebaasi seaded on vigased: %v
|
||||
invalid_db_table = Andmebaasi tabel "%s" on vigane: %v
|
||||
test_git_failed = Ei saanud testida käsku „git“: %v
|
||||
invalid_db_setting = Andmebaasi seadistused on vigased: %v
|
||||
invalid_db_table = Andmebaasi tabel „%s“ on vigane: %v
|
||||
allow_dots_in_usernames = Luba kasutajatel kasutada oma kasutajanimedes punkte. Ei mõjuta olemasolevaid kontosid.
|
||||
default_allow_create_organization.description = Lubage uutel kasutajatel vaikimisi luua organisatsioone. Kui see valik on välja lülitatud, peab administraator andma uutele kasutajatele organisatsioonide loomise loa.
|
||||
disable_gravatar.description = Lülita välja Gravatari või muude kolmandate osapoolte avatariallikate kasutamine. Kasutajate avatarite jaoks kasutatakse vaikimisi pilte, kui nad ei lae oma avatari üles.
|
||||
openid_signup.description = Luba kasutajatel luua kontosid OpenID kaudu, kui iseregistreerimine on sisse lülitatud.
|
||||
require_sign_in_view.description = Piirake sisule juurdepääsu sisselogitud kasutajatele. Külalised saavad külastada ainult autentimislehti.
|
||||
reinstall_confirm_check_2 = Hoidlad ja seadeid võib olla vaja uuesti sünkroniseerida. Selle kasti märkimisega kinnitate, et sünkroniseerite hoidlate ja authorized_keys'i faili konksud käsitsi uuesti. Te kinnitate, et tagate, et hoidlate ja peegelpilti seaded on õiged.
|
||||
app_slogan_helper = Sisestage siia oma loosung. Jätke tühjaks, et välja lülitada.
|
||||
repo_path_helper = Kauged Git-hoidlad salvestatakse sellesse kaustale.
|
||||
sqlite3_not_available = See Forgejo versioon ei toeta SQLite3. Palun laadige alla ametlik binaarversioon %s (mitte "gobuild"i versioon).
|
||||
offline_mode.description = Lülitage kolmandate osapoolte sisu edastamise võrgud välja ja teenindage kõiki ressursse lokaalselt.
|
||||
default_allow_create_organization.description = Luba uutel kasutajatel vaikimisi luua organisatsioone. Kui see valik on välja lülitatud, peab peakasutaja andma uutele kasutajatele organisatsioonide loomise loa.
|
||||
disable_gravatar.description = Lülita välja Gravatari või muude kolmandate osapoolte tunnuspiltide allikate kasutamine. Kasutajate tunnuspiltidena kasutatakse vaikimisi pilte, kui nad enda oma ei laadi üles.
|
||||
openid_signup.description = Kui iseregistreerimine on kasutusel, luba kasutajatel luua kontosid OpenID abil.
|
||||
require_sign_in_view.description = Piira juurdepääsu vaid sisselogitud kasutajatega. Külalised saavad külastada ainult autentimislehti.
|
||||
reinstall_confirm_check_2 = Hoidlad ja seadistused võivad uuesti vajada sünkroniseerimist. Selle kasti märkimisega kinnitad, et sünkroniseerid hoidlate ja authorized_keys'i faili haagid käsitsi uuesti. Sa kinnitad, et tagad, et hoidlate ja peegelpiltide seadistused on õiged.
|
||||
app_slogan_helper = Sisesta siia oma serveri tunnuslause. Kui jätad tühjaks, siis pole tunnuslause kasutusel.
|
||||
repo_path_helper = Kaugseadmete Git-hoidlad salvestatakse siia kausta.
|
||||
sqlite3_not_available = See Forgejo versioon ei toeta SQLite3 andmebaasi. Palun laadi alla ametlik binaarversioon %s (mitte „gobuild“-versioon).
|
||||
offline_mode.description = Lülitage kolmandate osapoolte sisuedastusvõrgud välja ja jaga kõiki ressursse kohalikust serverist.
|
||||
password_algorithm = Salasõna räsialgoritm
|
||||
invalid_password_algorithm = Vigane salasõna räsialgoritm
|
||||
|
||||
[auth]
|
||||
forgot_password_title = Ununenud salasõna
|
||||
forgot_password = Kas salasõna ununes?
|
||||
must_change_password = Muuda oma salasõna
|
||||
allow_password_change = Eelda, et kasutajad muudavad oma salasõna (soovitatav)
|
||||
|
||||
[mail]
|
||||
password_change.subject = Sinu salasõna on muutunud
|
||||
password_change.text_1 = Sinu kasutajakonto salasõna on just muutunud.
|
||||
totp_disabled.text_1 = Lisaautentimine ehk ajapõhise salasõna (TOTP) kasutamine on sinu kasutajakontol just välja lülitatud.
|
||||
|
||||
[form]
|
||||
Password = Salasõna
|
||||
Retype = Korda salasõna
|
||||
password_not_match = Salasõnad ei klapi.
|
||||
username_password_incorrect = Kassutajanimi või salasõna pole õige.
|
||||
|
||||
[settings]
|
||||
update_password = Muuda salasõna
|
||||
old_password = Senine salasõna
|
||||
new_password = Uus salasõna
|
||||
retype_new_password = Korda uut salasõna
|
||||
password_incorrect = Senine salasõna pole õige.
|
||||
change_password_success = Sina salasõna on nüüd muudetud. Edaspidi kasuta sisselogimiseks seda uut salasõna.
|
||||
|
||||
[repo]
|
||||
mirror_interval_invalid = Peegelpildi välp pole korrektne.
|
||||
mirror_public_key = Avalik SSH-võti
|
||||
mirror_use_ssh.text = Kasuta SSH-autentimist
|
||||
mirror_sync = sünkroonis
|
||||
mirror_sync_on_commit = Sünkrooni sissekannete tegemisel
|
||||
mirror_address = Klooni võrguaadressilt
|
||||
mirror_password_placeholder = (Muutmata)
|
||||
mirror_password_blank_placeholder = (Seadistamata)
|
||||
mirror_password_help = Salvestatud salasõna kustutamiseks muuda kasutajanime.
|
||||
commits.search_branch = See haru
|
||||
commits.search_all = Kõik harud
|
||||
commits.author = Autor
|
||||
commits.message = Sõnum
|
||||
commits.browse_further = Sirvi edasi
|
||||
commits.renamed_from = Nimi muudetud, vana nimi oli „%s“
|
||||
commits.date = Kuupäev
|
||||
commits.older = Vanemad
|
||||
commits.newer = Uuemad
|
||||
commitstatus.error = Viga
|
||||
commitstatus.failure = Tõrge
|
||||
commitstatus.pending = Ootel
|
||||
commitstatus.success = Valmis
|
||||
ext_issues = Välised vead
|
||||
projects = Projektid
|
||||
|
||||
[admin]
|
||||
users.password_helper = Kui sa ei taha salasõna muuta, siis jäta väli tühjaks.
|
||||
auths.bind_password = Seo salasõna
|
||||
config.reset_password_code_lives = Taastekoodi aegumine
|
||||
|
||||
[actions]
|
||||
variables = Muutujad
|
||||
variables.management = Halda muutujaid
|
||||
variables.creation = Lisa muutuja
|
||||
variables.none = Muutujaid veel pole.
|
||||
variables.deletion = Eemalda muutuja
|
|
@ -301,7 +301,7 @@ federated_avatar_lookup=فعال سازی آواتار مشترک
|
|||
federated_avatar_lookup.description=پیدا کردن آواتار با استفاده از Libravatar.
|
||||
disable_registration=غیرفعالکردن خود ثبت نامی
|
||||
disable_registration.description=غیرفعال کردن ثبت نام کاربر. تنها مدیر ها قادر خواهند بود حساب کاربری جدید اضافه کنند.
|
||||
allow_only_external_registration.description=اجازه ثبت نام فقط از طریق خدمات خارجی
|
||||
allow_only_external_registration.description=اجازه ثبت نام فقط از طریق خدمات خارجی.
|
||||
openid_signin=فعالسازی ورود با OpenID
|
||||
openid_signin.description=فعالسازی ورود کاربر با OpenID.
|
||||
openid_signup=فعالسازی ثبت نام با OpenID
|
||||
|
@ -608,7 +608,7 @@ avatar=آواتار
|
|||
ssh_gpg_keys=کلیدهای SSH / GPG
|
||||
social=حساب های اجتماعی
|
||||
applications=برنامهها
|
||||
orgs=مدیریت سازمانها
|
||||
orgs=سازمانها
|
||||
repos=مخازن
|
||||
delete=حذف حساب کاربری
|
||||
twofa=احراز هویت دوگانه
|
||||
|
@ -653,8 +653,8 @@ password_change_disabled=کاربران غیر محلی نمیتوانند گذ
|
|||
|
||||
emails=نشانیهای ایمیل
|
||||
manage_emails=مدیریت نشانیهای ایمیل
|
||||
manage_themes=تم پیش فرض را انتخاب کنید
|
||||
manage_openid=مدیریت نشانیهای OpenID
|
||||
manage_themes=تم پیش فرض
|
||||
manage_openid=آدرسهای OpenID
|
||||
theme_desc=این پوشته پیش فرض شما در سراسر سایت می باشد.
|
||||
primary=اصلی
|
||||
activated=فعال شده
|
||||
|
@ -2762,27 +2762,27 @@ directory = پوشه
|
|||
|
||||
[search]
|
||||
type_tooltip = جستجو گونه
|
||||
search = جستجو...
|
||||
search = جستجو…
|
||||
fuzzy = درهم
|
||||
fuzzy_tooltip = پیامدهایی را درج کنید که دقیقا با عبارت جستجو همخوانی داشته باشند
|
||||
regexp = عبارات باقاعده
|
||||
pull_kind = جستجو واکشیها...
|
||||
pull_kind = جستجو واکشیها…
|
||||
no_results = نتیجه درخوری یافت نشد.
|
||||
runner_kind = جستجو دوندهها...
|
||||
runner_kind = جستجو دوندهها…
|
||||
keyword_search_unavailable = جستجو کلیدواژه اکنون در درسترس نیست. لطفا با مدیر سایت در میان بگذارید.
|
||||
repo_kind = جستجو مخازن...
|
||||
repo_kind = جستجو مخازن…
|
||||
regexp_tooltip = اصطلاح جستجو شده را با عبارات باقاعده تفسیر کن
|
||||
user_kind = جستجو کاربران...
|
||||
org_kind = جستجو سازمانها...
|
||||
team_kind = جستجو گروهها...
|
||||
package_kind = جستجو بستهها...
|
||||
project_kind = جستجو پروژهها...
|
||||
user_kind = جستجو کاربران…
|
||||
org_kind = جستجو سازمانها…
|
||||
team_kind = جستجو گروهها…
|
||||
package_kind = جستجو بستهها…
|
||||
project_kind = جستجو پروژهها…
|
||||
code_search_unavailable = جستجوی کد اکنون در دسترس نیست. لطفا با مدیر سایت درمیان بگذارید.
|
||||
code_kind = جستجو کدها...
|
||||
code_kind = جستجو کدها…
|
||||
union = بهم پیوستگی
|
||||
union_tooltip = نتایجی را در بر بگیر که با هر یک از کلیدواژههای جدا شده از فضایخالی مطابقت دارد
|
||||
branch_kind = جستجو شاخهها...
|
||||
commit_kind = جستجو سپردهها...
|
||||
issue_kind = جستجو مشکلات...
|
||||
branch_kind = جستجو شاخهها…
|
||||
commit_kind = جستجو سپردهها…
|
||||
issue_kind = جستجو مشکلات…
|
||||
exact = مو به مو
|
||||
exact_tooltip = نتایجی را در بر بگیر که مو به مو با اصطلاح جستجو شده یکی باشد
|
||||
|
|
|
@ -669,6 +669,13 @@ username_claiming_cooldown = Käyttäjänimeä ei voi ottaa käyttöön, koska s
|
|||
email_domain_is_not_allowed = Käyttäjän sähköpostiosoitteen <b>%s</b> verkkotunnus on ristiriidassa EMAIL_DOMAIN_ALLOWLIST:in tai EMAIL_DOMAIN_BLOCKLIST:in kanssa. Varmista, että olen asettanut sähköpostiosoitteen oikein.
|
||||
|
||||
|
||||
invalid_group_team_map_error = ` kuvaus ei ole kelvollinen: %s`
|
||||
visit_rate_limit = Etävierailujen pyyntörajoitukset.
|
||||
2fa_auth_required = Etävierailu vaati kaksivaiheisen todennuksen.
|
||||
unset_password = Kirjautuneen käyttäjän salasanaa ei ole asetettu.
|
||||
unsupported_login_type = Tällä kirjautumistavalla ei voi poistaa tunnusta.
|
||||
invalid_ssh_principal = Väärä toimija: %s
|
||||
|
||||
[user]
|
||||
change_avatar=Vaihda profiilikuvasi…
|
||||
repositories=Tietovarastot
|
||||
|
@ -1038,6 +1045,9 @@ then_enter_passcode = Kirjoita sovelluksessa näkyvä pääsykoodi:
|
|||
gpg_key_matched_identities_long = Tähän avaimeen upotetut identiteetit vastaavat tämän käyttäjän seuraavia aktivoituja sähköpostiosoitteita. Kommitit, jotka vastaavat näitä sähköpostiosoitteita, voidaan vahvistaa tällä avaimella.
|
||||
twofa_failed_get_secret = Salaisuuden saaminen epäonnistui.
|
||||
|
||||
uid = UID
|
||||
hidden_comment_types.ref_tooltip = Kommentit missä tähän ongelmaan viitattiin toisesta ongelmasta/kommitista/…
|
||||
|
||||
[repo]
|
||||
owner=Omistaja
|
||||
owner_helper=Jotkin organisaatiot eivät välttämättä näy pudotusvalikossa, koska tietovarastojen enimmäismäärää on rajoitettu.
|
||||
|
@ -2255,14 +2265,14 @@ pulls.cmd_instruction_merge_warning = <b>Varoitus:</b> Asetusta ”Tunnista manu
|
|||
pulls.cmd_instruction_merge_desc = Yhdistä muutokset ja päivitä Forgejossa.
|
||||
pulls.cannot_auto_merge_desc = Tätä vetopyyntöä ei voida yhdistää automaattisesti ristiriitojen vuoksi.
|
||||
adopt_preexisting_success = Omaksuttu tiedostot ja luotu tietovarasto lähteestä %s
|
||||
issues.comment_manually_pull_merged_at = manuaalisesti yhdistetty kommitti %[1]s %[2]s tietovarastoon %[3]s
|
||||
issues.comment_manually_pull_merged_at = manuaalisesti yhdisti kommitin %[1]s %[2]s tietovarastoon %[3]s
|
||||
pulls.cmd_instruction_merge_title = Yhdistä
|
||||
pulls.has_merged = Epäonnistui: vetopyyntö on yhdistetty, joten et voi yhdistää uudelleen tai muuttaa kohdehaaraa.
|
||||
pulls.cmd_instruction_checkout_title = Uloskuittaus
|
||||
pulls.cmd_instruction_checkout_desc = Kuittaa ulos uusi haara projektitietovarastostasi ja testaa muutokset.
|
||||
pulls.clear_merge_message_hint = Yhdistämisviestin tyhjentäminen poistaa vain kommittiviestin sisällön ja säilyttää luodut git-trailerit, kuten "Co-Authored-By…".
|
||||
settings.protect_check_status_contexts_desc = Vaadi tilatarkistusten läpäisy ennen yhdistämistä. Kun käytössä, kommitit on ensin työnnettävä toiseen haaraan ja sitten yhdistettävä tai työnnettävä suoraan tätä sääntöä vastaavaan haaraan tilantarkistuksen jälkeen. Jos konteksteja ei löydy, viimeisen kommitin on oltava onnistunut kontekstista riippumatta.
|
||||
issues.comment_pull_merged_at = yhdistetty kommitti %[1]s %[2]s tietovarastoon %[3]s
|
||||
issues.comment_pull_merged_at = yhdisti kommitin %[1]s %[2]s haaraan %[3]s
|
||||
settings.pulls.enable_autodetect_manual_merge = Ota Tunnista manuaalinen yhdistäminen automaattisesti -asetus käyttöön (Huomaa: joissakin erityistapauksissa voi esiintyä virhearviointeja)
|
||||
pulls.no_merge_desc = Tätä vetopyyntöä ei voida yhdistää, koska kaikki tietovaraston yhdistämisvaihtoehdot ovat poistettu käytöstä.
|
||||
pulls.no_merge_not_ready = Tämä vetopyyntö ei ole valmis yhdistettäväksi. Tarkista katselmoinnin tila ja tilantarkistukset.
|
||||
|
|
|
@ -699,7 +699,7 @@ security = Seguridad
|
|||
avatar = Avatar
|
||||
ssh_gpg_keys = Mga SSH / GPG key
|
||||
applications = Mga Aplikasyon
|
||||
orgs = Ipamahala ang mga organisasyon
|
||||
orgs = Mga organisasyon
|
||||
repos = Mga Repositoryo
|
||||
delete = Burahin ang account
|
||||
twofa = Authentikasyong two-factor (TOTP)
|
||||
|
@ -707,7 +707,7 @@ account_link = Mga naka-link na account
|
|||
uid = UID
|
||||
webauthn = Authentikasyong two-factor (Mga security key)
|
||||
blocked_users = Mga hinarang na user
|
||||
public_profile = Pampublikong Profile
|
||||
public_profile = Pampublikong profile
|
||||
location_placeholder = Ibahagi ang iyong tinatayang lokasyon sa iba
|
||||
password_username_disabled = Ang mga di-lokal na gumagamit ay hindi pinapayagan na baguhin ang kanilang username. Mangyaring makipag-ugnayan sa iyong tagapangasiwa ng site para sa higit pang mga detalye.
|
||||
full_name = Buong pangalan
|
||||
|
@ -1034,6 +1034,8 @@ regenerate_token = I-regenerate
|
|||
access_token_regeneration_desc = Ang pag-regenerate ng token ay babawiin ang access sa iyong account para sa mga application na gumagamit nito. Hindi ito mababawi. Magpatuloy?
|
||||
regenerate_token_success = Na-generate muli ang token. Ang mga application na gumagamit nito ay hindi na maa-access ang iyong account at dapat ma-update gamit ang bagong token.
|
||||
|
||||
ssh_token_help_ssh_agent = o, kung gumagamit ka ng SSH agent (na nakatakda ang variable na SSH_AUTH_SOCK):
|
||||
|
||||
[repo]
|
||||
template_description = Ang mga template na repositoryo ay pinapayagan ang mga gumagamit na mag-generate ng mga bagong repositoryo na may magkatulad na istraktura ng direktoryo, mga file, at opsyonal na mga setting.
|
||||
clone_helper = Kailangan ng tulong sa pagpili? Bisitahin ang <a target="_blank" rel="noopener noreferrer" href="%s">Tulong</a>.
|
||||
|
|
|
@ -773,7 +773,7 @@ language=Langue
|
|||
ui=Thème
|
||||
hidden_comment_types=Catégories de commentaires masqués
|
||||
hidden_comment_types_description=Cochez les catégories suivantes pour masquer les commentaires correspondants des fils d'activité. Par exemple, « Label » cache les commentaires du genre « Cerise a attribué le label Bug il y a 2 heures».
|
||||
hidden_comment_types.ref_tooltip=Commentaires où ce ticket a été référencé sur un autre ticket, révision, etc.
|
||||
hidden_comment_types.ref_tooltip=Commentaires où ce ticket a été référencé sur un autre ticket/révision/…
|
||||
hidden_comment_types.issue_ref_tooltip=Commentaires où l’utilisateur change la branche/étiquette associée au ticket
|
||||
comment_type_group_reference=Référence
|
||||
comment_type_group_label=Label
|
||||
|
@ -1091,6 +1091,8 @@ keep_pronouns_private.description = Cela masquera votre pronoms aux visiteurs qu
|
|||
storage_overview = Vue d'ensemble du stockage
|
||||
quota = Quota
|
||||
|
||||
ssh_token_help_ssh_agent = ou, si vous utilisez un agent SSH (avec la variable SSH_AUTH_SOCK affectée) :
|
||||
|
||||
[repo]
|
||||
new_repo_helper=Un dépôt contient tous les fichiers d’un projet, ainsi que l’historique de leurs modifications. Vous avez déjà ça ailleurs ? <a href="%s">Migrez-le ici.</a>.
|
||||
owner=Propriétaire
|
||||
|
@ -1579,7 +1581,7 @@ issues.remove_ref_at=`a supprimé la référence <b>%s</b> %s.`
|
|||
issues.add_ref_at=`a ajouté la référence <b>%s</b> %s.`
|
||||
issues.delete_branch_at=`a supprimé la branche <b>%s</b> %s.`
|
||||
issues.filter_label=Label
|
||||
issues.filter_label_exclude=`Utilisez <code>Alt</code> + <code>Clic/entrée</code> pour exclure les labels.`
|
||||
issues.filter_label_exclude=`Utilisez <kbd>Alt</kbd> + <kbd>Click</kbd> pour exclure les étiquettes.`
|
||||
issues.filter_label_no_select=Toutes les labels
|
||||
issues.filter_label_select_no_label=Aucun label
|
||||
issues.filter_milestone=Jalon
|
||||
|
@ -4091,4 +4093,4 @@ issues.write = <b>Écrire :</b> Fermer des tickets et gérer les métadonnées t
|
|||
pulls.read = <b>Lire :</b> Lire et créer des demandes de tirage.
|
||||
|
||||
[translation_meta]
|
||||
test = Ceci est une chaîne de test. Elle n'est pas affichée dans l'interface de Forgejo mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce difficile 100 % de complétion. :-)
|
||||
test = Ceci est une chaîne de test. Elle n'est pas affichée dans Forgejo même mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce difficile 100 % de complétion. :-)
|
||||
|
|
|
@ -132,20 +132,20 @@ fuzzy = Doiléir
|
|||
fuzzy_tooltip = Cuir san áireamh torthaí a mheaitseálann an téarma cuardaigh go dlúth freisin
|
||||
exact = Beacht
|
||||
exact_tooltip = Ní chuir san áireamh ach torthaí a mheaitseálann leis an téarma
|
||||
repo_kind = Cuardaigh stórtha...
|
||||
user_kind = Cuardaigh úsáideoirí...
|
||||
org_kind = Cuardaigh eagraíochtaí...
|
||||
team_kind = Cuardaigh foirne...
|
||||
code_kind = Cód cuardaigh...
|
||||
repo_kind = Cuardaigh stórtha…
|
||||
user_kind = Cuardaigh úsáideoirí…
|
||||
org_kind = Cuardaigh eagraíochtaí…
|
||||
team_kind = Cuardaigh foirne…
|
||||
code_kind = Cód cuardaigh…
|
||||
code_search_unavailable = Níl cuardach cód ar fáil faoi láthair. Déan teagmháil le riarthóir an láithreáin.
|
||||
package_kind = Cuardaigh pacáistí...
|
||||
project_kind = Cuardaigh tionscadail...
|
||||
branch_kind = Cuardaigh brainsí...
|
||||
commit_kind = Cuardaigh tiomáintí...
|
||||
runner_kind = Cuardaigh reathaithe...
|
||||
package_kind = Cuardaigh pacáistí…
|
||||
project_kind = Cuardaigh tionscadail…
|
||||
branch_kind = Cuardaigh brainsí…
|
||||
commit_kind = Cuardaigh tiomáintí…
|
||||
runner_kind = Cuardaigh reathaithe…
|
||||
no_results = Níl aon torthaí meaitseála le fáil.
|
||||
issue_kind = Saincheisteanna cuardaigh...
|
||||
pull_kind = Cuardaigh iarratais tarraingthe...
|
||||
issue_kind = Saincheisteanna cuardaigh…
|
||||
pull_kind = Cuardaigh iarratais tarraingthe…
|
||||
keyword_search_unavailable = Níl cuardach de réir eochairfhocal ar fáil faoi láthair. Déan teagmháil le riarthóir an láithreáin.
|
||||
|
||||
[aria]
|
||||
|
@ -507,12 +507,12 @@ avatar = Abhatár
|
|||
ssh_gpg_keys = Eochracha SSH/GPG
|
||||
applications = Iarratais
|
||||
repos = Stórais
|
||||
delete = Scrios Cuntas
|
||||
delete = Scrios cuntas
|
||||
twofa = Fíordheimhniú Dhá Fachtóir (TOTP)
|
||||
organization = Eagraíochtaí
|
||||
uid = UID
|
||||
webauthn = Fíordheimhniú Dhá-Fachtóir (Eochracha Slándála)
|
||||
public_profile = Próifíl Phoiblí
|
||||
public_profile = Próifíl phoiblí
|
||||
location_placeholder = Comhroinn do shuíomh thart le daoine eile
|
||||
full_name = Ainm Iomlán
|
||||
website = Láithreán Gréasáin
|
||||
|
|
|
@ -196,29 +196,29 @@ link_modal.paste_reminder = Consello: Coa URL no portapapeis, podes pegala direc
|
|||
[search]
|
||||
search = Buscar...
|
||||
type_tooltip = Tipo de procura
|
||||
repo_kind = Buscar repositorios...
|
||||
user_kind = Buscar usuarios...
|
||||
repo_kind = Buscar repositorios…
|
||||
user_kind = Buscar usuarios…
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Interpretar o termo da procura como expresión regular
|
||||
org_kind = Procurar organizacións...
|
||||
team_kind = Procurar equipos...
|
||||
code_kind = Procurar código...
|
||||
org_kind = Procurar organizacións…
|
||||
team_kind = Procurar equipos…
|
||||
code_kind = Procurar código…
|
||||
code_search_unavailable = A procura de código non está dispoñible neste momento. Por favor contacte coa persoa responsable da administración da páxina.
|
||||
package_kind = Buscar paquetes...
|
||||
package_kind = Buscar paquetes…
|
||||
fuzzy = Difusa
|
||||
fuzzy_tooltip = Incluír resultados que tamén coincidan estreitamente co termo da procura
|
||||
union = Palabras clave
|
||||
union_tooltip = Incluír resultados correspondentes a calquera dal palabras clave separadas por espazos en branco
|
||||
exact = Exacta
|
||||
exact_tooltip = Incluír só resultados correspondentes ao termo exacto da procura
|
||||
issue_kind = Procurar incidencias...
|
||||
project_kind = Buscar proxectos...
|
||||
branch_kind = Buscar ramas...
|
||||
issue_kind = Procurar incidencias…
|
||||
project_kind = Buscar proxectos…
|
||||
branch_kind = Buscar ramas…
|
||||
no_results = Non se atoparon resultados coincidentes.
|
||||
keyword_search_unavailable = A busca por palabra clave non está dispoñible actualmente. Póñase en contacto co administrador do sitio.
|
||||
commit_kind = Buscar achegas...
|
||||
runner_kind = Buscar executores...
|
||||
pull_kind = Buscar pulls...
|
||||
commit_kind = Buscar achegas…
|
||||
runner_kind = Buscar executores…
|
||||
pull_kind = Buscar pulls…
|
||||
|
||||
[startpage]
|
||||
platform = Multiplataforma
|
||||
|
@ -229,6 +229,9 @@ license = Código aberto
|
|||
lightweight_desc = Forgejo precisa duns requerimentos mínimos e pode funcionar nunha Raspberry Pi barata. Aforra enerxía na túa máquina!
|
||||
lightweight = Lixeiro
|
||||
|
||||
platform_desc = Forgejo funciona en sistemas operativos libres como Linux e FreeBSD, como tamén en diferentes arquitecturas CPU. Escolle a túa prefereida!
|
||||
license_desc = Vai a <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Únete e <a target="_blank" rel="noopener noreferrer" href="%[2]s">colabora</a> para facer este proxecto incluso mellor. Non teñas vergoña en convertirte en colaboradora!
|
||||
|
||||
[error]
|
||||
occurred = Ocorreu un erro
|
||||
missing_csrf = Solicitude incorrecta: non hai ningún token CSRF presente
|
||||
|
@ -296,6 +299,18 @@ domain = Dominio do servidor
|
|||
ssh_port = Porto do servidor SSH
|
||||
require_db_desc = Forgejo precisa MySQL, PostgreSQL, SQLite3 ou TiDB (protocolo MySQL).
|
||||
|
||||
docker_helper = Se Forgejo está correndo dentro de Docker, por favor le a <a target="_blank" rel="noopener noreferrer" href="%s">documentación</a> antes de cambiar algunha configuración.
|
||||
host = Servidor
|
||||
lfs_path_helper = Os arquivos trackeados por Git LFS gárdanse neste directorio. Deixao en branco para deshabilitar.
|
||||
run_user_helper = O usuario do sistema operativo que executa Forgejo. Ten en conta que este usuario debe poder acceder á raíz do repositorio.
|
||||
domain_helper = Dominio ou enderezo do servidor.
|
||||
ssh_port_helper = Número do porto que se usa para o servidor SSH. Déixao en branco para deshabilitar o servidor SSH.
|
||||
smtp_from_helper = Enderezo email que usa Forgejo. Podes poñer simplemente un email ou usar o formato "Nome" <email@exemplo.com>.
|
||||
register_confirm = Esixir a confirmación do email para rexistrarse
|
||||
mail_notify = Permitir notificacións por email
|
||||
server_service_title = Configuración do servidor e de servizos de terceiros
|
||||
offline_mode = Habilitar o modo local
|
||||
|
||||
[repo]
|
||||
sync_fork.branch_behind_few = Esta rama ten %d achegas por detrás de %s
|
||||
sync_fork.button = Sincronizar
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
|
||||
|
||||
[common]
|
||||
webauthn_error_unable_to_process = שרת זה נכשל בעיבוד בקשתך.
|
||||
help = עזרה
|
||||
|
@ -150,24 +147,24 @@ union = מילות מפתח
|
|||
exact = מדויק
|
||||
exact_tooltip = תוצאות יתאימו במדויק לתוכן תיבת החיפוש
|
||||
regexp = רג'קס
|
||||
user_kind = חיפוש אנשים...
|
||||
code_kind = חיפוש קוד...
|
||||
team_kind = חיפוש צוותים...
|
||||
user_kind = חיפוש אנשים…
|
||||
code_kind = חיפוש קוד…
|
||||
team_kind = חיפוש צוותים…
|
||||
no_results = לא נמצאו תוצאות.
|
||||
union_tooltip = תוצאות יכללו לפחות מילת מפתח אחת; אפשר להפריד מילות מפתח עם רווחים
|
||||
org_kind = חיפוש ארגונים...
|
||||
package_kind = חיפוש חבילות...
|
||||
project_kind = חיפוש פרוייקטים...
|
||||
branch_kind = חיפוש ענפים...
|
||||
commit_kind = חיפוש קומיטים...
|
||||
issue_kind = חיפוש סוגיות...
|
||||
org_kind = חיפוש ארגונים…
|
||||
package_kind = חיפוש חבילות…
|
||||
project_kind = חיפוש פרוייקטים…
|
||||
branch_kind = חיפוש ענפים…
|
||||
commit_kind = חיפוש קומיטים…
|
||||
issue_kind = חיפוש סוגיות…
|
||||
fuzzy_tooltip = תוצאות יתאימו לתוכן תיבת החיפוש בקירוב; מומלץ כנגד שגיאות כתיב
|
||||
repo_kind = חיפוש קרפיפים...
|
||||
repo_kind = חיפוש קרפיפים…
|
||||
code_search_by_git_grep = תוצאות החיפוש יוצרו על ידי "git grep"; יכול להיות שיתקבלו תוצאות טובות יותר אם מנהלי המערכת יפעילו את המפתחן.
|
||||
runner_kind = חיפוש מריצים...
|
||||
runner_kind = חיפוש מריצים…
|
||||
keyword_search_unavailable = חיפוש מילות מפתח לא זמין. נא לדווח למנהלי המערכת.
|
||||
code_search_unavailable = חיפוש קוד לא זמין. נא לדווח למנהלי המערכת.
|
||||
pull_kind = חיפוש בקשות מיזוג...
|
||||
pull_kind = חיפוש בקשות מיזוג…
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = % תרומות ב־12 החודשים האחרונים
|
||||
|
@ -385,6 +382,9 @@ account_activated = חשבונך הופעל
|
|||
resent_limit_prompt = כבר ביקשת מייל אימות בשלושת הדקות האחרונות. נא לחכות ולנסות שוב.
|
||||
has_unconfirmed_mail = שלום %s, חשבונך משויך לכתובת אימייל לא מאומתת (<b>%s</b>). אם לא קיבלת הודעת אימות באימייל, או שאתה צריך חדשה, נא ללחוץ על הכפתור למטה.
|
||||
|
||||
confirmation_mail_sent_prompt = אימייל אימות חדש נשלח ל־<b>%s</b>. יש לבדוק את תיבת הדואר וללחוץ על הלינק תוך %s על מנת להשלים את רישום החשבון. אם כתובת המייל שגוייה, אפשר להיכנס לחשבון ולבקש דוא"ל אימות לכתובת אחרת.
|
||||
reset_password_mail_sent_prompt = אימייל אימות חדש נשלח ל־<b>%s</b>. יש לבדוק את תיבת הדואר וללחוץ על הלינק תוך %s על מנת להשלים את רישום החשבון.
|
||||
|
||||
[settings]
|
||||
key_content = תוכן
|
||||
principal_content = תוכן
|
||||
|
@ -469,7 +469,7 @@ uploaded_avatar_not_a_image = הקובץ שהועלה לא תמונה.
|
|||
|
||||
[repo]
|
||||
new_advanced = הגדרות מתקדמות
|
||||
new_advanced_expand =
|
||||
new_advanced_expand =
|
||||
owner = בעלים
|
||||
repo_name = שם הקרפיף
|
||||
repo_name_helper = שמות קרפיפים טובים הם זכירים, קצרים וייחודיים.
|
||||
|
@ -662,6 +662,10 @@ issues.label_archive = לארכיון
|
|||
issues.label_archived_filter = הצגת תוויות מהארכיון
|
||||
issues.label_archive_tooltip = תוויות בארכיון לא מוצעות בחיפוש על־בסיס תווית כברירת מחדל.
|
||||
|
||||
issues.deleted_milestone = נמחק
|
||||
issues.deleted_project = נמחק
|
||||
issues.self_assign_at = `שייךה עצמית %s`
|
||||
|
||||
[translation_meta]
|
||||
test = ואהבת לרעך כמוך
|
||||
|
||||
|
|
|
@ -39,4 +39,170 @@ organization = संगठन
|
|||
mirror = छवि
|
||||
settings = सेटिंग्स
|
||||
your_settings = आपकी सेटिंग्स
|
||||
return_to_forgejo = फ़ोर्जेगो पे वापस जाएं
|
||||
return_to_forgejo = फ़ोर्जेगो पे वापस जाएं
|
||||
toggle_menu = चालू-बंद करें
|
||||
access_token = एक्सेस टोकन
|
||||
webauthn_insert_key = अपनी सिक्योरिटी की डालें
|
||||
webauthn_sign_in = सिक्योरिटी की का बटन दबाएं, नहीं है तो फिर से प्लग करें।
|
||||
webauthn_press_button = अपनी सिक्योरिटी की पर बटन दबाएं…
|
||||
webauthn_use_twofa = अपने फ़ोन से दो फैक्टर कोड लाएं
|
||||
webauthn_error = सिक्योरिटी की रीड नहीं हो पा रही।
|
||||
webauthn_unsupported_browser = आपका ब्राउज़र वेबौथ सपोर्ट नहीं करता।
|
||||
webauthn_error_unknown = कोई अंजान एरर हुई, फिर से कोशिश करें।
|
||||
webauthn_error_insecure = वेबौथ पर सिर्फ सुरक्षित कनेक्शन हो. HTTP टेस्ट के लिए ओरिजिन “लोकलहोस्ट” या “127.0.0.1”
|
||||
webauthn_error_unable_to_process = सर्वर आपकी रिक्वेस्ट प्रोसेस नहीं कर पाया।
|
||||
webauthn_error_duplicated = सिक्योरिटी की इस रिक्वेस्ट के लिए नहीं है। कृपया देखें की पहले से रजिस्टर्ड तो नहीं।
|
||||
webauthn_error_empty = कृपया इस चाभी का नाम रखें।
|
||||
webauthn_error_timeout = आपकी की पढ़ने से पहले टाइमआउट हो गया। पृष्ट रीलोड करें और फिर कोशिश करें।
|
||||
new_mirror = नया मिरर
|
||||
new_fork = नयी रिपॉजिटरी फोर्क
|
||||
new_project = नया प्रोजेक्ट
|
||||
new_project_column = नया स्तम्भ
|
||||
admin_panel = वेबसाइट प्रबंधन
|
||||
your_profile = प्रोफाइल
|
||||
your_starred = सीतारित
|
||||
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 = फिर से
|
||||
rerun_all = फिर से सारे काम करें
|
||||
save = सेव करें
|
||||
add = जोड़ें
|
||||
add_all = सब जोड़ें
|
||||
remove = हटाएं
|
||||
remove_all = सारा हटाएं
|
||||
remove_label_str = हटाएं आइटम “%s”
|
||||
edit = संपादित करना
|
||||
view = देखें
|
||||
test = टेस्ट
|
||||
enabled = सक्षम किया गया
|
||||
disabled = असक्षम किया गया
|
||||
locked = लॉक्ड
|
||||
copy = कॉपी
|
||||
copy_generic = क्लिपबोर्ड पर कॉपी करें
|
||||
copy_url = 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> या <strong> आप देखने को अधिकृत नहीं </strong> की देख पाएं।
|
||||
error413 = आपका कोटा ख़तम हो गया।
|
||||
go_back = वापस जाएं
|
||||
invalid_data = डाटा मान्य नहीं: %v
|
||||
never = कभी नहीं
|
||||
unknown = अनजान
|
||||
rss_feed = RSS फीड
|
||||
pin = पिन
|
||||
unpin = पिन हटाएं
|
||||
artifacts = पुरावशेष
|
||||
confirm_delete_artifact = क्या आप ये पुरावशेष हटाना चाहते हैं "%s" ?
|
||||
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 = रेगएक्सप्
|
||||
regexp_tooltip = व्याख्या करें सर्च टर्म की व्यावहारिक तरीके से
|
||||
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 = इश्यूज ढूंढें…
|
||||
pull_kind = पुल्स ढूंढें…
|
||||
keyword_search_unavailable = कीवर्ड से ढूंढ़ना अभी नहीं हो सकता। कृपया एडमिनिस्ट्रेटर से बात करें।
|
||||
|
||||
[aria]
|
||||
navbar = संचालन बार
|
||||
footer = फुटर
|
||||
footer.software = इस सॉफ्टवेयर के बारे में
|
||||
footer.links = संयोजक
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = %s योगदान पिछले 12 महीनो में
|
||||
contributions_zero = कोई योगदान नहीं
|
||||
contributions_format = {योगदान} आज {दिन} {महीना} {साल}
|
||||
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.indent.tooltip = चीज़ों को एक लेवल नेस्ट करें
|
||||
buttons.unindent.tooltip = चीज़ों को एक लेवल नेस्ट से निकालें
|
||||
buttons.new_table.tooltip = टेबल जोड़ें
|
||||
table_modal.header = टेबल जोड़ें
|
||||
table_modal.placeholder.header = शीर्षक
|
||||
table_modal.placeholder.content = विषयवस्तु
|
|
@ -330,7 +330,7 @@ code_no_results=Nincs találat a keresési kifejezésedre.
|
|||
code_last_indexed_at=Utoljára indexelve: %s
|
||||
|
||||
[auth]
|
||||
create_new_account=Regisztráció
|
||||
create_new_account=Fiók regisztrálása
|
||||
register_helper_msg=Van már felhasználói fiókja? Jelentkezzen be!
|
||||
social_register_helper_msg=Van már felhasználói fiókja? Csatlakoztassa most!
|
||||
disable_register_prompt=Regisztráció le van tiltva. Kérjük, lépjen kapcsolatba az oldal adminisztrátorával.
|
||||
|
@ -532,8 +532,8 @@ password_change_disabled=A nem helyi felhasználók nem frissíthetik jelszavuka
|
|||
|
||||
emails=E-mail címek
|
||||
manage_emails=E-mail címek kezelése
|
||||
manage_themes=Válassza ki az alapértelmezett témát
|
||||
manage_openid=OpenID címek kezelése
|
||||
manage_themes=Alapértelmezett téma
|
||||
manage_openid=OpenID címek
|
||||
theme_desc=Ez lesz az alapértelmezett téma az oldalon.
|
||||
primary=Elsődleges
|
||||
activated=Aktivált
|
||||
|
@ -1779,14 +1779,14 @@ directory = Könyvtár
|
|||
[search]
|
||||
search = Keresés...
|
||||
type_tooltip = Keresés típusa
|
||||
code_kind = Kód keresése...
|
||||
code_kind = Kód keresése…
|
||||
code_search_unavailable = A kódban való keresés jelenleg nem elérhető. Kérem vegye fel a kapcsolatot az oldal adminisztrátorával.
|
||||
package_kind = Csomagok keresése...
|
||||
project_kind = Projektek keresése...
|
||||
user_kind = Felhasználók keresése...
|
||||
repo_kind = Tárak keresése...
|
||||
org_kind = Szervezetek keresése...
|
||||
team_kind = Csapatok keresése...
|
||||
package_kind = Csomagok keresése…
|
||||
project_kind = Projektek keresése…
|
||||
user_kind = Felhasználók keresése…
|
||||
repo_kind = Tárak keresése…
|
||||
org_kind = Szervezetek keresése…
|
||||
team_kind = Csapatok keresése…
|
||||
exact = Pontos
|
||||
code_search_by_git_grep = A kódkeresés jelenleg a "git grep" parancsot használja. Lehet, hogy jobb találatok is lennének, ha a webhely adminisztrátora bekapcsolja a forráskód indexelését.
|
||||
milestone_kind = Mérföldkövek keresése...
|
||||
|
@ -1794,8 +1794,8 @@ fuzzy_tooltip = A keresési kifejezéshez hasonló találatok mutatása
|
|||
fuzzy = Hasonlók
|
||||
union = Kulcsszavakra
|
||||
union_tooltip = A szóközzel elválasztott kulcsszavak bármelyikét tartalmazó találatok mutatása
|
||||
branch_kind = Ágak keresése...
|
||||
branch_kind = Ágak keresése…
|
||||
no_results = Nincsenek megfelelő találatok.
|
||||
issue_kind = Hibajegyek keresése...
|
||||
issue_kind = Hibajegyek keresése…
|
||||
exact_tooltip = Csak a keresési kifejezést pontosan tartalmazó találatok mutatása
|
||||
keyword_search_unavailable = A kulcsszó alapú keresés jelenleg nem elérhető. Kérlek értesítsd az oldal rendszergazdáját.
|
||||
|
|
|
@ -206,9 +206,9 @@ email_title = Pengaturan email
|
|||
smtp_from = Kirim Email Sebagai
|
||||
|
||||
[home]
|
||||
uname_holder=Nama Pengguna atau Alamat Surel
|
||||
uname_holder=Nama pengguna atau alamat surel
|
||||
password_holder=Kata Sandi
|
||||
switch_dashboard_context=Alihkan Dasbor Konteks
|
||||
switch_dashboard_context=Alihkan dasbor konteks
|
||||
my_repos=Repositori
|
||||
show_more_repos=Tampilkan repositori lainnya…
|
||||
collaborative_repos=Repositori Kolaboratif
|
||||
|
@ -236,7 +236,7 @@ org_no_results=Tidak ada organisasi yang cocok ditemukan.
|
|||
code_no_results=Tidak ada kode sumber yang cocok dengan istilah yang anda cari.
|
||||
|
||||
[auth]
|
||||
create_new_account=Daftar Akun
|
||||
create_new_account=Daftar akun
|
||||
register_helper_msg=Sudah memiliki akun? Masuk sekarang!
|
||||
social_register_helper_msg=Sudah memiliki akun? Hubungkan sekarang!
|
||||
disable_register_prompt=Maaf, pendaftaran telah dinonaktifkan. Silakan hubungi administrator situs.
|
||||
|
@ -269,11 +269,11 @@ twofa_passcode_incorrect=Kata sandi Anda salah. Jika Anda salah tempatkan perang
|
|||
twofa_scratch_token_incorrect=Kode coretan anda tidak tepat.
|
||||
login_userpass=Masuk
|
||||
tab_openid=OpenID
|
||||
oauth_signup_tab=Daftar Akun Baru
|
||||
oauth_signup_submit=Akun Lengkap
|
||||
oauth_signin_tab=Tautkan ke Akun yang Tersedia
|
||||
oauth_signin_title=Masuk untuk Izinkan Akun Tertaut
|
||||
oauth_signin_submit=Taut Akun
|
||||
oauth_signup_tab=Daftar akun baru
|
||||
oauth_signup_submit=Akun lengkap
|
||||
oauth_signin_tab=Tautkan ke akun yang tersedia
|
||||
oauth_signin_title=Masuk untuk izinkan akun tertaut
|
||||
oauth_signin_submit=Taut akun
|
||||
openid_connect_submit=Sambungkan
|
||||
openid_connect_title=Sambungkan ke akun yang sudah ada
|
||||
openid_connect_desc=OpenID URI yang dipilih tak dikenal. Asosiasikan dengan akun baru disini.
|
||||
|
@ -398,14 +398,14 @@ avatar=Avatar
|
|||
ssh_gpg_keys=Kunci SSH / GPG
|
||||
social=Akun Sosial
|
||||
applications=Aplikasi
|
||||
orgs=Kelola organisasi
|
||||
orgs=Organisasi
|
||||
repos=Repositori
|
||||
delete=Hapus Akun
|
||||
delete=Hapus akun
|
||||
twofa=Otentikasi Dua-Faktor
|
||||
account_link=Akun Tertaut
|
||||
organization=Organisasi
|
||||
|
||||
public_profile=Profil Publik
|
||||
public_profile=Profil publik
|
||||
password_username_disabled=Pengguna non-lokal tidak diizinkan untuk mengubah nama pengguna mereka. Silakan hubungi administrator sistem anda untuk lebih lanjut.
|
||||
full_name=Nama Lengkap
|
||||
website=Situs Web
|
||||
|
@ -438,8 +438,8 @@ password_change_disabled=Pengguna non-lokal tidak dapat mengganti kata sandi mer
|
|||
|
||||
emails=Alamat Surel
|
||||
manage_emails=Kelola Alamat Surel
|
||||
manage_themes=Pilih tema default
|
||||
manage_openid=Kelola alamat OpenID
|
||||
manage_themes=Tema default
|
||||
manage_openid=Alamat OpenID
|
||||
theme_desc=Ini akan menjadi tema asal Anda pada keseluruhan situs.
|
||||
primary=Utama
|
||||
activated=Diaktifkan
|
||||
|
@ -1484,10 +1484,10 @@ search = Cari...
|
|||
type_tooltip = Tipe pencarian
|
||||
fuzzy_tooltip = Termasuk juga hasil yang mendekati kata pencarian
|
||||
exact_tooltip = Hanya menampilkan hasil yang cocok dengan istilah pencarian
|
||||
repo_kind = Cari repo...
|
||||
user_kind = Telusuri pengguna...
|
||||
org_kind = Cari organisasi...
|
||||
team_kind = Cari tim...
|
||||
code_kind = Cari kode...
|
||||
repo_kind = Cari repo…
|
||||
user_kind = Telusuri pengguna…
|
||||
org_kind = Cari organisasi…
|
||||
team_kind = Cari tim…
|
||||
code_kind = Cari kode…
|
||||
code_search_unavailable = Pencarian kode saat ini tidak tersedia. Silahkan hubungi administrator.
|
||||
branch_kind = Cari cabang...
|
||||
branch_kind = Cari cabang…
|
||||
|
|
|
@ -223,7 +223,7 @@ default_keep_email_private.description=Fela sjálfgefið netföng nýrra notenda
|
|||
no_reply_address_helper=Lén fyrir notendur með falið netfang. Til dæmis notandanafnið „joe“ verður skráð í Git sem „joe@noreply.example.org“ ef falið tölvupóstlén er stillt á „noreply.example.org“.
|
||||
|
||||
[home]
|
||||
uname_holder=Notandanafn eða Netfang
|
||||
uname_holder=Notandanafn eða netfang
|
||||
password_holder=Lykilorð
|
||||
my_repos=Hugbúnaðarsöfn
|
||||
show_more_repos=Sýna fleiri hugbúnaðarsöfn…
|
||||
|
@ -255,7 +255,7 @@ org_no_results=Engar samsvarandi stofnanir fundust.
|
|||
code_no_results=Enginn samsvarandi frumkóði fannst eftur þínum leitarorðum.
|
||||
|
||||
[auth]
|
||||
create_new_account=Skrá Notanda
|
||||
create_new_account=Skrá notanda
|
||||
register_helper_msg=Ertu nú þegar með notanda? Skráðu þig inn núna!
|
||||
social_register_helper_msg=Ertu nú þegar með reikning? Tengdu hann núna!
|
||||
manual_activation_only=Hafðu samband við stjórnanda vefsvæðisins til að ljúka virkjun.
|
||||
|
@ -276,13 +276,13 @@ verify=Staðfesta
|
|||
scratch_code=Skrapkóði
|
||||
use_scratch_code=Nota skrapkóða
|
||||
twofa_scratch_token_incorrect=Skrapkóði þinn er rangur.
|
||||
login_userpass=Skrá Inn
|
||||
login_userpass=Skrá inn
|
||||
tab_openid=OpenID
|
||||
oauth_signup_tab=Skrá Nýjan Notanda
|
||||
oauth_signup_title=Klára Nýjum Notanda
|
||||
oauth_signup_submit=Klára Notanda
|
||||
oauth_signin_tab=Tengja Núverandi Reikning
|
||||
oauth_signin_submit=Tengja Notanda
|
||||
oauth_signup_tab=Skrá nýjan notanda
|
||||
oauth_signup_title=Klára nýjum notanda
|
||||
oauth_signup_submit=Klára notanda
|
||||
oauth_signin_tab=Tengja núverandi reikning
|
||||
oauth_signin_submit=Tengja notanda
|
||||
openid_connect_submit=Tengjast
|
||||
openid_register_title=Skrá nýjan notanda
|
||||
disable_forgot_password_mail=Endurheimting reiknings er óvirk vegna þess að enginn tölvupóstur er uppsettur. Vinsamlegast hafðu samband við síðustjórann þinn.
|
||||
|
@ -434,15 +434,15 @@ avatar=Notandamynd
|
|||
ssh_gpg_keys=SSH og GPG Lyklar
|
||||
social=Félagsreikningar
|
||||
applications=Forrit
|
||||
orgs=Stjórna Stofnunum
|
||||
orgs=Stofnanir
|
||||
repos=Hugbúnaðarsöfn
|
||||
delete=Eyða Reikningi
|
||||
delete=Eyða reikningi
|
||||
twofa=Tvíþætt Auðkenning
|
||||
account_link=Tengdir Reikningar
|
||||
organization=Stofnanir
|
||||
webauthn=Öryggislyklar
|
||||
|
||||
public_profile=Opinber Notandasíða
|
||||
public_profile=Opinber notandasíða
|
||||
password_username_disabled=Notendum utan staðarins er ekki heimilt að breyta notendanafni sínu. Vinsamlegast hafðu samband við síðustjórann þinn til að fá frekari upplýsingar.
|
||||
full_name=Fullt Nafn
|
||||
website=Vefsíða
|
||||
|
|
|
@ -423,7 +423,7 @@ allow_password_change=Richiede all'utente di cambiare la password (scelta consig
|
|||
reset_password_mail_sent_prompt=Un'e-mail di conferma è stata inviata a <b>%s</b>. Per completare il processo di recupero dell'account, controlla la tua posta in arrivo e clicca sul link entro i prossimi %s secondi.
|
||||
active_your_account=Attiva il tuo account
|
||||
account_activated=L'account è stato attivato
|
||||
prohibit_login=L'accesso è proibito
|
||||
prohibit_login=L'account è sospeso
|
||||
resent_limit_prompt=Hai già richiesto un'e-mail d'attivazione recentemente. Si prega di attenere 3 minuti e poi riprovare.
|
||||
has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (<b>%s</b>). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto.
|
||||
resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione
|
||||
|
@ -742,7 +742,7 @@ avatar=Avatar
|
|||
ssh_gpg_keys=Chiavi SSH / GPG
|
||||
social=Account Sociali
|
||||
applications=Applicazioni
|
||||
orgs=Gestisci le organizzazioni
|
||||
orgs=Organizzazioni
|
||||
repos=Repositori
|
||||
delete=Elimina account
|
||||
twofa=Verifica in due passaggi
|
||||
|
@ -803,8 +803,8 @@ password_change_disabled=Gli utenti non locali non possono cambiare la loro pass
|
|||
|
||||
emails=Indirizzi email
|
||||
manage_emails=Gestisci indirizzi email
|
||||
manage_themes=Seleziona il tema predefinito
|
||||
manage_openid=Gestisci gli indirizzi OpenID
|
||||
manage_themes=Tema predefinito
|
||||
manage_openid=Indirizzi OpenID
|
||||
theme_desc=Questo sarà il tuo tema di predefinito in tutto il sito.
|
||||
primary=Primario
|
||||
activated=Attivato
|
||||
|
@ -4014,25 +4014,25 @@ type_tooltip = Tipo ricerca
|
|||
search = Cerca…
|
||||
fuzzy = Approssimativa
|
||||
match = Precisa
|
||||
org_kind = Cerca organizzazioni...
|
||||
package_kind = Ricerca pacchetti...
|
||||
org_kind = Cerca organizzazioni…
|
||||
package_kind = Ricerca pacchetti…
|
||||
code_search_unavailable = La ricerca del codice non è attualmente disponibile. Contatta l'amministratorə del sito.
|
||||
code_kind = Cerca nel codice...
|
||||
team_kind = Cerca team...
|
||||
code_kind = Cerca nel codice…
|
||||
team_kind = Cerca team…
|
||||
code_search_by_git_grep = I risultati della ricerca del codice sono forniti da "git grep". Potrebbero esserci risultati migliori se l'amministratore del sito avesse abilitato l'indicizzatore del codice.
|
||||
project_kind = Ricerca progetti...
|
||||
commit_kind = Ricerca commit...
|
||||
branch_kind = Ricerca rami...
|
||||
project_kind = Ricerca progetti…
|
||||
commit_kind = Ricerca commit…
|
||||
branch_kind = Ricerca rami…
|
||||
no_results = Non è stato trovato alcun risultato.
|
||||
keyword_search_unavailable = La ricerca per parole chiave non è attualmente disponibile. Contatta l'amministratore del sito.
|
||||
runner_kind = Ricerca esecutori...
|
||||
runner_kind = Ricerca esecutori…
|
||||
match_tooltip = Includi solo risultati che corrispondono precisamente al termine di ricerca
|
||||
fuzzy_tooltip = Includi anche risultati che corrispondono approssimativamente al termine di ricerca
|
||||
user_kind = Cerca utenti...
|
||||
repo_kind = Cerca repo...
|
||||
user_kind = Cerca utenti…
|
||||
repo_kind = Cerca repo…
|
||||
exact_tooltip = Includi solo i risultati che corrispondono esattamente al termine di ricerca
|
||||
issue_kind = Cerca segnalazioni...
|
||||
pull_kind = Cerca richieste...
|
||||
issue_kind = Cerca segnalazioni…
|
||||
pull_kind = Cerca richieste…
|
||||
exact = Esatto
|
||||
milestone_kind = Ricerca tappe...
|
||||
regexp_tooltip = Interpreta i termini di ricerca come un'espressione regolare
|
||||
|
|
|
@ -250,7 +250,7 @@ err_empty_db_path=SQLite3のデータベースパスを空にすることはで
|
|||
no_admin_and_disable_registration=管理者アカウントを作成せずに、セルフ登録を無効にすることはできません。
|
||||
err_empty_admin_password=管理者パスワードは空にできません。
|
||||
err_empty_admin_email=管理者のメールアドレスは空にできません。
|
||||
err_admin_name_is_reserved=管理者のユーザー名が不正です。予約済みのユーザー名です。
|
||||
err_admin_name_is_reserved=管理者のユーザー名が不正です。予約済みのユーザー名です
|
||||
err_admin_name_pattern_not_allowed=管理者のユーザー名が不正です。 予約済みのパターンにマッチしています
|
||||
err_admin_name_is_invalid=管理者のユーザー名が不正です
|
||||
|
||||
|
@ -1048,6 +1048,8 @@ keep_activity_private.description = <a href="%s">公開アクティビティ</a>
|
|||
language.description = この言語はアカウントに保存され、ログイン後にデフォルトとして使用されます。
|
||||
language.localization_project = Forgejo をあなたの言語に翻訳するのを手伝ってください。<a href="%s">詳細はこちら</a>。
|
||||
|
||||
quota = クオータ
|
||||
|
||||
[repo]
|
||||
new_repo_helper=リポジトリには、プロジェクトのすべてのファイルとリビジョン履歴が入ります。 すでにほかの場所でホストしていますか? <a href="%s">リポジトリを移行</a> もどうぞ。
|
||||
owner=オーナー
|
||||
|
@ -3903,20 +3905,20 @@ submodule=サブモジュール
|
|||
[search]
|
||||
search = 検索...
|
||||
type_tooltip = 検索タイプ
|
||||
org_kind = 組織の検索...
|
||||
code_kind = コードの検索...
|
||||
org_kind = 組織を検索…
|
||||
code_kind = コードを検索…
|
||||
fuzzy = あいまい
|
||||
repo_kind = リポジトリの検索...
|
||||
repo_kind = リポジトリを検索…
|
||||
code_search_unavailable = コード検索は現在利用できません。サイト管理者にお問い合わせください。
|
||||
branch_kind = ブランチの検索...
|
||||
commit_kind = コミットの検索...
|
||||
user_kind = ユーザーの検索...
|
||||
team_kind = チームの検索...
|
||||
branch_kind = ブランチを検索…
|
||||
commit_kind = コミットを検索…
|
||||
user_kind = ユーザーを検索…
|
||||
team_kind = チームを検索…
|
||||
code_search_by_git_grep = 現在のコード検索結果は「git grep」によって提供されます。サイト管理者がコード インデクサーを有効にすると、より良い結果が得られる可能性があります。
|
||||
package_kind = パッケージの検索...
|
||||
project_kind = プロジェクトの検索...
|
||||
package_kind = パッケージを検索…
|
||||
project_kind = プロジェクトを検索…
|
||||
keyword_search_unavailable = キーワードによる検索は現在ご利用いただけません。サイト管理者にお問い合わせください。
|
||||
runner_kind = ランナーの検索...
|
||||
runner_kind = ランナーを検索…
|
||||
no_results = 一致する結果が見つかりませんでした。
|
||||
fuzzy_tooltip = 入力された語句に近いものも結果に含める
|
||||
match = 一致
|
||||
|
@ -3924,8 +3926,8 @@ match_tooltip = 検索語句に厳密に一致するもののみ結果に含め
|
|||
milestone_kind = マイルストーンを検索...
|
||||
union_tooltip = 空白で区切られたキーワードのいずれかに一致する結果を含める
|
||||
exact_tooltip = 検索語句と完全に一致する結果のみを含める
|
||||
issue_kind = イシューを検索...
|
||||
pull_kind = プルを検索...
|
||||
issue_kind = イシューを検索…
|
||||
pull_kind = プルを検索…
|
||||
exact = 完全一致
|
||||
regexp_tooltip = 検索語句を正規表現として解釈する
|
||||
regexp = 正規表現
|
||||
|
|
|
@ -384,7 +384,7 @@ allow_password_change=사용자에게 비밀번호 변경을 요청 (권장됨)
|
|||
reset_password_mail_sent_prompt=확인 메일이 <b>%s</b>로 전송되었습니다. 받은 편지함으로 도착한 메일을 %s 안에 확인해서 비밀번호 찾기 절차를 완료하십시오.
|
||||
active_your_account=계정 활성화
|
||||
account_activated=계정이 활성화 되었습니다
|
||||
prohibit_login =
|
||||
prohibit_login =
|
||||
resent_limit_prompt=활성화를 위한 이메일을 이미 전송했습니다. 3분 내로 이메일을 받지 못한 경우 재시도해주세요.
|
||||
has_unconfirmed_mail=안녕하세요 %s, 이메일 주소(<b>%s</b>)가 확인되지 않았습니다. 확인 메일을 받으시지 못하겼거나 새로운 확인 메일이 필요하다면, 아래 버튼을 클릭해 재발송하실 수 있습니다.
|
||||
resend_mail=여기를 눌러 확인 메일 재전송
|
||||
|
@ -588,8 +588,8 @@ password_change_disabled=로컬 유저가 아닌 경우 Forgejo 웹 인터페이
|
|||
|
||||
emails=이메일 주소
|
||||
manage_emails=이메일 주소 관리
|
||||
manage_themes=기본 테마 선택
|
||||
manage_openid=OpenID 주소 관리
|
||||
manage_themes=기본 테마
|
||||
manage_openid=OpenID 주소
|
||||
theme_desc=이 테마가 사이트 전체 기본 테마가 됩니다.
|
||||
primary=대표
|
||||
activated=활성화됨
|
||||
|
@ -1900,9 +1900,9 @@ runs.commit=커밋
|
|||
|
||||
[search]
|
||||
code_search_by_git_grep = 현재 코드 검색 결과는 "git grep"에 의해 제공됩니다.관리자가 코드 인덱서를 활성화하면 더 나은 결과가 제공될 수 있습니다.
|
||||
branch_kind = 브랜치 검색...
|
||||
branch_kind = 브랜치 검색…
|
||||
keyword_search_unavailable = 지금은 키워드로 검색이 지원되지 않습니다. 사이트 관리자에게 문의하십시오.
|
||||
commit_kind = 커밋 검색...
|
||||
commit_kind = 커밋 검색…
|
||||
no_results = 일치하는 결과를 찾을 수 없습니다.
|
||||
search = 검색…
|
||||
type_tooltip = 검색 타입
|
||||
|
@ -1910,11 +1910,11 @@ fuzzy_tooltip = 검색어와 밀접하게 일치하는 결과도 포함
|
|||
repo_kind = 저장소 검색…
|
||||
user_kind = 사용자 검색…
|
||||
org_kind = 조직 검색…
|
||||
team_kind = 팀 검색...
|
||||
code_kind = 코드 검색...
|
||||
team_kind = 팀 검색…
|
||||
code_kind = 코드 검색…
|
||||
code_search_unavailable = 코드 검색은 현재 허용되지 않았습니다. 사이트 관리자와 연락하세요.
|
||||
package_kind = 패키지 검색...
|
||||
project_kind = 프로젝트 검색...
|
||||
package_kind = 패키지 검색…
|
||||
project_kind = 프로젝트 검색…
|
||||
exact_tooltip = 검색어와 정확하게 일치하는 결과만 포함
|
||||
issue_kind = 이슈 검색…
|
||||
pull_kind = 풀 검색…
|
||||
|
|
|
@ -149,24 +149,24 @@ fuzzy = Tikslintinas
|
|||
union_tooltip = Įtraukti rezultatus, atitinkančius bet kurį iš matomą tarpą atskirtų raktažodžių
|
||||
exact = Tiksliai
|
||||
exact_tooltip = Įtraukti tik tuos rezultatus, kurie atitinka tikslią paieškos frazę
|
||||
user_kind = Ieškoti naudotojų...
|
||||
team_kind = Ieškoti komandų...
|
||||
code_kind = Ieškoti kodo...
|
||||
user_kind = Ieškoti naudotojų…
|
||||
team_kind = Ieškoti komandų…
|
||||
code_kind = Ieškoti kodo…
|
||||
fuzzy_tooltip = Įtraukti rezultatus, kurie taip pat labai atitinka paieškos terminą
|
||||
repo_kind = Ieškoti saugyklų...
|
||||
repo_kind = Ieškoti saugyklų…
|
||||
code_search_unavailable = Kodų paieška šiuo metu nepasiekiama. Kreipkis į svetainės administratorių.
|
||||
org_kind = Ieškoti organizacijų...
|
||||
org_kind = Ieškoti organizacijų…
|
||||
union = Bendrinis
|
||||
code_search_by_git_grep = Dabartiniai kodo paieškos rezultatai pateikiami atliekant „git grep“. Rezultatai gali būti geresni, jei svetainės administratorius įjungs kodo indeksuotoją.
|
||||
package_kind = Ieškoti paketų...
|
||||
project_kind = Ieškoti projektų...
|
||||
commit_kind = Ieškoti įsipareigojimų...
|
||||
runner_kind = Ieškoti vykdyklių...
|
||||
package_kind = Ieškoti paketų…
|
||||
project_kind = Ieškoti projektų…
|
||||
commit_kind = Ieškoti įsipareigojimų…
|
||||
runner_kind = Ieškoti vykdyklių…
|
||||
no_results = Nerasta atitinkamų rezultatų.
|
||||
issue_kind = Ieškoti problemų...
|
||||
branch_kind = Ieškoti šakų...
|
||||
issue_kind = Ieškoti problemų…
|
||||
branch_kind = Ieškoti šakų…
|
||||
milestone_kind = Ieškoti gairių...
|
||||
pull_kind = Ieškoti sujungimų...
|
||||
pull_kind = Ieškoti sujungimų…
|
||||
keyword_search_unavailable = Ieškoti pagal raktažodį šiuo metu nepasiekiamas. Susisiekite su svetainės administratoriumi.
|
||||
regexp = Reguliarusis reiškinys
|
||||
regexp_tooltip = Interpretuoti paieškos terminą kaip reguliariąją reiškinį
|
||||
|
|
|
@ -1090,6 +1090,8 @@ access_token_regeneration = Izveidot piekļuves pilnvaru no jauna
|
|||
regenerate_token_success = Pilnvara tika izveidota no jauna. Lietotnēm, kas to izmanto, vairs nav piekļuve kontam, un tajās ir jāizmanto jaunā pilnvara.
|
||||
access_token_regeneration_desc = Pilnvaras izveidošana no jauna atsauks piekļuvi kontam lietotnēm, kuras to izmanto. Darbība ir neatgriezeniska. Turpināt?
|
||||
|
||||
ssh_token_help_ssh_agent = vai, ja izmanto SSH aģentu (ar iestatītu mainīgo SSH_AUTH_SOCK):
|
||||
|
||||
[repo]
|
||||
new_repo_helper=Glabātava satur visas projekta datnes, tajā skaitā izmaiņu vēsturi. Jau tiek izmantota kaut kur citur? <a href="%s">Pārcelt glabātavu</a>.
|
||||
owner=Īpašnieks
|
||||
|
@ -1577,7 +1579,7 @@ issues.remove_ref_at=`noņēma atsauci no <b>%s</b> %s`
|
|||
issues.add_ref_at=`pievienoja atsauci uz <b>%s</b> %s`
|
||||
issues.delete_branch_at=`izdzēsa zaru <b>%s</b> %s`
|
||||
issues.filter_label=Iezīme
|
||||
issues.filter_label_exclude=`Jāizmanto <code>alt</code> + <code>klikšķis/Enter</code>, lai neiekļautu iezīmes`
|
||||
issues.filter_label_exclude=Jāizmanto <kbd>Alt</kbd> + <kbd>klikšķis</kbd>, lai neiekļautu iezīmes
|
||||
issues.filter_label_no_select=Visas iezīmes
|
||||
issues.filter_label_select_no_label=Bez iezīmes
|
||||
issues.filter_milestone=Atskaites punkts
|
||||
|
|
|
@ -356,7 +356,7 @@ avatar=അവതാര്
|
|||
ssh_gpg_keys=SSH / GPG കീകള്
|
||||
social=സോഷ്യൽ അക്കൗണ്ടുകൾ
|
||||
applications=അപ്ലിക്കേഷനുകൾ
|
||||
orgs=സംഘടനകളെ നിയന്ത്രിക്കുക
|
||||
orgs=സംഘടനകൾ
|
||||
repos=കലവറകള്
|
||||
delete=അക്കൗണ്ട് ഇല്ലാതാക്കുക
|
||||
twofa=ഇരട്ട ഘടക പ്രാമാണീകരണം
|
||||
|
@ -400,8 +400,8 @@ password_change_disabled=പ്രാദേശിക ഇതര ഉപയോക
|
|||
|
||||
emails=ഇ-മെയില് വിലാസങ്ങള്
|
||||
manage_emails=ഇമെയിൽ വിലാസങ്ങൾ നിയന്ത്രിക്കുക
|
||||
manage_themes=സ്ഥിരസ്ഥിതി പ്രമേയം തിരഞ്ഞെടുക്കുക
|
||||
manage_openid=ഓപ്പൺഐഡി വിലാസങ്ങൾ നിയന്ത്രിക്കുക
|
||||
manage_themes=ഡിഫോൾട്ട് തീം
|
||||
manage_openid=OpenID വിലാസങ്ങൾ
|
||||
email_desc=അറിയിപ്പുകൾക്കും മറ്റ് പ്രവർത്തനങ്ങൾക്കുമായി നിങ്ങളുടെ പ്രാഥമിക ഇമെയിൽ വിലാസം ഉപയോഗിക്കും.
|
||||
theme_desc=സൈറ്റിലുടനീളം ഇത് നിങ്ങളുടെ സ്ഥിരസ്ഥിതി പ്രമേയം ആയിരിക്കും.
|
||||
primary=പ്രാഥമികം
|
||||
|
|
|
@ -60,7 +60,7 @@ rerun = Kjør på nytt
|
|||
rerun_all = Kjør alle jobber på nytt
|
||||
save = Lagre
|
||||
cancel = Avbryt
|
||||
forks = Forks
|
||||
forks = Kopier
|
||||
milestones = Milepæler
|
||||
ok = OK
|
||||
test = Test
|
||||
|
@ -134,14 +134,44 @@ webauthn_error_timeout = Et tidsavbrudd oppsto før nøkkelen din kunne leses. V
|
|||
new_fork = Ny fork av repository
|
||||
collaborative = Samarbeidende
|
||||
|
||||
tracked_time_summary = Oppsummering av sporet tid basert på problemfiltre
|
||||
pull_requests = Pull requests
|
||||
issues = Saker
|
||||
copy_branch = Kopier branch navn
|
||||
error404 = Siden du forsøker å nå <strong>eksisterer ikke</strong>, <strong>er blitt fjernet</strong> eller <strong>du har ikke tilgang til å se den</strong>.
|
||||
error413 = Du har brukt opp kvoten din.
|
||||
unpin = Løsne
|
||||
filter.is_fork = Forks
|
||||
filter.not_fork = Ikke forks
|
||||
|
||||
[search]
|
||||
search = Søk...
|
||||
search = Søk…
|
||||
type_tooltip = Søketype
|
||||
fuzzy = Fuzzy
|
||||
union = Union
|
||||
regexp = RegExp
|
||||
exact = Nøyaktig
|
||||
|
||||
fuzzy_tooltip = Inkluder resultater som også stemmer godt overens med søketermen
|
||||
union_tooltip = Inkluder resultater som samsvarer med ett eller flere av nøkkelordene adskilt med mellomrom
|
||||
exact_tooltip = Inkluder kun resultater som samsvarer nøyaktig med søkeordet
|
||||
regexp_tooltip = Tolk søkeordet som et regulæruttrykk
|
||||
repo_kind = Søk i repositorer…
|
||||
user_kind = Søk i brukere…
|
||||
org_kind = Søk i organisasjoner…
|
||||
team_kind = Søk i teams…
|
||||
code_kind = Søk i kode…
|
||||
code_search_unavailable = Kodesøk er ikke tilgjengelig. Kontakt administratoren.
|
||||
package_kind = Søk i pakker…
|
||||
project_kind = Søk i prosjekter…
|
||||
branch_kind = Søk i brancher…
|
||||
commit_kind = Søk i commits…
|
||||
runner_kind = Søk i runners…
|
||||
no_results = Ingen treff funnet.
|
||||
issue_kind = Søk i saker…
|
||||
pull_kind = Søk i pulls…
|
||||
keyword_search_unavailable = Søk etter nøkkelord er for øyeblikket ikke tilgjengelig. Kontakt administratoren.
|
||||
|
||||
[auth]
|
||||
verify = Bekreft
|
||||
sign_up_button = Opprett konto nå.
|
||||
|
@ -152,4 +182,88 @@ oauth_signup_title = Fullfør ny konto
|
|||
oauth_signup_submit = Fullfør konto
|
||||
|
||||
[home]
|
||||
uname_holder = Brukernavn eller e-postadresse
|
||||
uname_holder = Brukernavn eller e-postadresse
|
||||
|
||||
[aria]
|
||||
navbar = Navigasjonslinje
|
||||
footer = Bunntekst
|
||||
footer.software = Om dette programmet
|
||||
footer.links = Linker
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = %s bidrag de siste 12 månedene
|
||||
contributions_zero = Ingen bidrag
|
||||
contributions_format = {contributions} den {day} {month} {year}
|
||||
contributions_one = bidrag
|
||||
contributions_few = bidrag
|
||||
less = Mindre
|
||||
more = Mer
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Legg til overskrift
|
||||
buttons.bold.tooltip = Legg til uthevet tekst
|
||||
buttons.italic.tooltip = Legg til kursiv text
|
||||
buttons.quote.tooltip = Siter tekst
|
||||
buttons.code.tooltip = Legg til kode
|
||||
buttons.link.tooltip = Legg til link
|
||||
buttons.list.unordered.tooltip = Legg til punktliste
|
||||
buttons.list.ordered.tooltip = Legg til nummerert liste
|
||||
buttons.list.task.tooltip = Legg til liste over saker
|
||||
buttons.mention.tooltip = Nevn en bruker eller team
|
||||
buttons.ref.tooltip = Referanse til en sak eller pull request
|
||||
buttons.switch_to_legacy.tooltip = Bruk den gamle editoren istedenfor
|
||||
buttons.enable_monospace_font = Aktiver monospace font
|
||||
buttons.disable_monospace_font = Deaktiver monospace font
|
||||
buttons.indent.tooltip = Grupper elementene med et nivå
|
||||
buttons.unindent.tooltip = Pakk ut elementene med et nivå
|
||||
buttons.new_table.tooltip = Legg til tabell
|
||||
table_modal.header = Legg til tabell
|
||||
table_modal.placeholder.header = Overskrift
|
||||
table_modal.placeholder.content = Innhold
|
||||
table_modal.label.rows = Rader
|
||||
table_modal.label.columns = Kolonner
|
||||
link_modal.header = Legg til en link
|
||||
link_modal.url = Url
|
||||
link_modal.description = Beskrivelse
|
||||
link_modal.paste_reminder = Tips: Når du har en URL i utklippstavlen kan du lime den direkte inn i editoren for å lage en lenke.
|
||||
|
||||
[filter]
|
||||
string.asc = A - Z
|
||||
string.desc = Z - A
|
||||
|
||||
[error]
|
||||
occurred = En feil oppstod
|
||||
report_message = Hvis du mener dette er en feil i Forgejo kan du søke på <a href="%s" target="_blank">Codeberg</a> eller åpne en ny sak.
|
||||
not_found = Kunne ikke finne målet.
|
||||
network_error = Nettverks feil
|
||||
server_internal = Intern server feil
|
||||
|
||||
[startpage]
|
||||
app_desc = En enkel Git-tjeneste du kan drifte selv
|
||||
install = Enkel å installere
|
||||
install_desc = Du kan enkelt <a target="_blank" rel="noopener noreferrer" href="%[1]s">kjøre programfilen</a> for din platform, bruke <a target="_blank" rel="noopener noreferrer" href="%[2]s">Docker</a>, eller hente den som en <a target="_blank" rel="noopener noreferrer" href="%[3]s">ferdig pakke</a>.
|
||||
platform = Plattformuavhengig
|
||||
platform_desc = Forgejo fungerer på frie operativsystemer som Linux og FreeBSD, og støtter flere CPU-arkitekturer. Velg den plattformen du foretrekker!
|
||||
lightweight = Lettvekt
|
||||
lightweight_desc = Forgejo krever lite ressurser og kan kjøres på en rimelig Raspberry Pi. Spar strøm og miljøet!
|
||||
license = Åpen kildekode
|
||||
license_desc = Last ned <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Bli med ved å <a target="_blank" rel="noopener noreferrer" href="%[2]s">bidra</a> for å gjøre prosjektet enda bedre. Ikke vær redd for å bli en bidragsyter!
|
||||
|
||||
[install]
|
||||
install = Installasjon
|
||||
title = Førstegangsoppsett
|
||||
docker_helper = Dersom du bruker Forgejo med Docker, anbefales det å lese <a target="_blank" rel="noopener noreferrer" href="%s">dokumentasjonen</a> før du gjør endringer i konfigurasjonen.
|
||||
require_db_desc = Forgejo krever MySQL, PostgreSQL, SQLite3 eller TiDB (MySQL protokoll).
|
||||
db_title = Database innstillinger
|
||||
db_type = Database type
|
||||
host = Server
|
||||
user = Brukernavn
|
||||
password = Passord
|
||||
db_name = Database navn
|
||||
db_schema = Skjema
|
||||
db_schema_helper = La stå tomt for databasens standardverdi ("public").
|
||||
ssl_mode = SSL
|
||||
path = Sti
|
||||
sqlite_helper = Sti til SQLite3-databasen.<br>Bruk absolutt filsti dersom Forgejo kjøres som en tjeneste.
|
||||
reinstall_error = Du prøver å installere i en eksisterende Forgejo-database
|
||||
reinstall_confirm_message = Å installere på nytt med en eksisterende Forgejo-database kan føre til problemer. I de fleste tilfeller bør du bruke din eksisterende "app.ini" for å kjøre Forgejo. Hvis du vet hva du gjør, og vil fortsette, bekreft følgende:
|
|
@ -568,7 +568,7 @@ organization = Vereenigungen
|
|||
uid = UID
|
||||
webauthn = Twee-Faktooren-Anmellen (Sekerheids-Slötels)
|
||||
blocked_users = Blockeert Brukers
|
||||
public_profile = Publikes Profil
|
||||
public_profile = Publikes profil
|
||||
location_placeholder = Deel waar du umslags büst mit Annerns
|
||||
pronouns = Pronomens
|
||||
pronouns_custom = Eegene
|
||||
|
@ -888,6 +888,8 @@ regenerate_token = Neei maken
|
|||
access_token_regeneration_desc = Wenn du een Teken neei maakst, verlesen Anwennens, wat ’t bruken, Togang to dienem Konto. Dat kann nich torüggnohmen worden. Wiedermaken?
|
||||
regenerate_token_success = Dat Teken is neei maakt worden. Anwennens, wat ’t bruken, hebben keenen Togang to dienem Konto mehr un mutten mit de nejen Teken verneeit worden.
|
||||
|
||||
ssh_token_help_ssh_agent = of, wenn du eenen SSH-Agenten bruukst (un de SSH_AUTH_SOCK-Variaabel sett is):
|
||||
|
||||
[repo]
|
||||
rss.must_be_on_branch = Du muttst up eenem Twieg wesen, um eenen RSS-Schuuv to hebben.
|
||||
admin.manage_flags = Flaggen verwalten
|
||||
|
@ -1552,7 +1554,7 @@ issues.dependency.pr_close_blocks = Deeser Haalvörslag blockeert dat Dichtmaken
|
|||
issues.dependency.issue_batch_close_blocked = Kann de utköört Gefallens nich all tosamen dichtmaken, denn Gefall #%d hett noch open Ofhangens
|
||||
issues.dependency.pr_close_blocked = Du muttst all Gefallens, wat deesen Haalvörslag blockeren, dichtmaken, ehr du dat hier tosamenföhren kannst.
|
||||
issues.dependency.blocks_short = Blockeert
|
||||
issues.dependency.blocked_by_short = Hang of vun
|
||||
issues.dependency.blocked_by_short = Hangt of vun
|
||||
issues.dependency.remove_header = Ofhangen wegdoon
|
||||
issues.dependency.setting = Ofhangens för Gefallens un Haalvörslagen anknipsen
|
||||
issues.dependency.add_error_same_issue = Du kannst een Gefall nich vun sik sülvst ofhangen laten.
|
||||
|
|
|
@ -559,7 +559,7 @@ team_invite.text_2 = Klik alstublieft op de volgende link om aan het team deel t
|
|||
admin.new_user.text = <a href="%s">Klik hier</a> om deze gebruiker te beheren vanuit het beheerderspaneel.
|
||||
password_change.subject = Uw wachtwoord is gewijzigd
|
||||
password_change.text_1 = Het wachtwoord voor je account is zojuist gewijzigd.
|
||||
reset_password.text_1 =
|
||||
reset_password.text_1 =
|
||||
totp_disabled.subject = TOTP is uitgeschakeld
|
||||
primary_mail_change.subject = Uw primaire e-mail is gewijzigd
|
||||
totp_disabled.no_2fa = Er zijn geen andere 2FA methodes meer geconfigureerd, wat betekent dat het niet langer nodig is om in te loggen op uw account met 2FA.
|
||||
|
@ -1093,6 +1093,8 @@ regenerate_token = Opnieuw genereren
|
|||
regenerate_token_success = De token is opnieuw gegenereerd. Toepassingen die het gebruiken, hebben niet langer toegang tot uw account en moeten worden bijgewerkt om de nieuwe token te gebruiken.
|
||||
access_token_regeneration_desc = Als u een token opnieuw genereert, wordt de toegang tot uw account ingetrokken voor toepassingen die de token gebruiken. Dit kan niet ongedaan worden gemaakt. Doorgaan?
|
||||
|
||||
ssh_token_help_ssh_agent = of, als u een SSH-agent gebruikt (met de variabele SSH_AUTH_SOCK ingesteld):
|
||||
|
||||
[repo]
|
||||
owner=Eigenaar
|
||||
owner_helper=Sommige organisaties kunnen niet worden weergegeven in de dropdown vanwege een limiet op het maximale aantal repositories.
|
||||
|
@ -1495,7 +1497,7 @@ issues.remove_ref_at=`heeft referentie <b>%s</b> verwijderd %s`
|
|||
issues.add_ref_at=`heeft referentie <b>%s</b> toegevoegd %s`
|
||||
issues.delete_branch_at=`heeft %[2]s de branch <b>%[1]s</b> verwijderd.`
|
||||
issues.filter_label=Label
|
||||
issues.filter_label_exclude=Gebruik <code>alt</code> + <code>klik/voer</code> in om labels uit te sluiten
|
||||
issues.filter_label_exclude=Gebruik <kbd>alt</kbd> + <kbd>klik</kbd> om labels uit te sluiten
|
||||
issues.filter_label_no_select=Alle labels
|
||||
issues.filter_milestone=Mijlpaal
|
||||
issues.filter_project=Project
|
||||
|
@ -1554,8 +1556,8 @@ issues.close_comment_issue=Sluit met commentaar
|
|||
issues.reopen_issue=Heropen
|
||||
issues.reopen_comment_issue=Heropen met commentaar
|
||||
issues.create_comment=Reageer
|
||||
issues.closed_at=`heeft dit probleem gesloten %s`
|
||||
issues.reopened_at=`heropende dit probleem %s`
|
||||
issues.closed_at=`heeft deze issue gesloten %s`
|
||||
issues.reopened_at=`heropende deze issue %s`
|
||||
issues.commit_ref_at=`verwees naar dit probleem vanuit commit %s`
|
||||
issues.ref_issue_from=`<a href="%[2]s">refereerde aan dit issue %[3]s</a> %[1]s`
|
||||
issues.ref_pull_from=`<a href="%[2]s">refereerde aan deze pull request %[3]s</a> %[1]s`
|
||||
|
@ -2915,6 +2917,15 @@ sync_fork.branch_behind_few = Deze branch is %[1]d commits achter %[2]s
|
|||
|
||||
|
||||
|
||||
issues.filter_type.all_pull_requests = Alle pull requests
|
||||
settings.event_header_action = Actie run evenementen
|
||||
settings.event_action_failure = Mislukking
|
||||
settings.event_action_failure_desc = Action run is mislukt.
|
||||
settings.event_action_recover = Herstel
|
||||
settings.event_action_recover_desc = Action run is geslaagd nadat de laatste action run in dezelfde workflow is mislukt.
|
||||
settings.event_action_success = Succes
|
||||
settings.event_action_success_desc = Action run is geslaagd.
|
||||
|
||||
[graphs]
|
||||
component_loading_info = Dit kan even duren…
|
||||
component_failed_to_load = Er is een onverwachte fout opgetreden.
|
||||
|
|
|
@ -1043,8 +1043,8 @@ language.title = Domyślny język
|
|||
language.localization_project = Pomóż nam przetłumaczyć Forgejo na twój język! <a href="%s">Dowiedz się więcej</a>.
|
||||
update_hints = Zaktualizuj wskazówki
|
||||
update_hints_success = Wskazówki zostały zaktualizowane.
|
||||
change_username_redirect_prompt.with_cooldown.one = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochronnym wynoszącym %[1]d dzień, nadal możesz uzyskać z powrotem starą nazwę użytkownika podczas okresu ochronnego.
|
||||
change_username_redirect_prompt.with_cooldown.few = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochronnym wynoszącym %[1]d dni, nadal możesz uzyskać z powrotem starą nazwę użytkownika podczas okresu ochronnego.
|
||||
change_username_redirect_prompt.with_cooldown.one = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochronnym wynoszącym %[1]d dzień. Nadal możesz uzyskać z powrotem starą nazwę użytkownika podczas okresu ochronnego.
|
||||
change_username_redirect_prompt.with_cooldown.few = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochronnym wynoszącym %[1]d dni. Nadal możesz uzyskać z powrotem starą nazwę użytkownika podczas okresu ochronnego.
|
||||
language.description = Ten język zostanie zapisany na twoim koncie i będzie używany jako domyślny po zalogowaniu.
|
||||
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>".
|
||||
principal_desc = Te podmioty certyfikatu SSH będą powiązane z twoim kontem i pozwolą na pełen dostęp do twoich repozytoriów.
|
||||
|
@ -3951,29 +3951,29 @@ normal_file = Zwykły plik
|
|||
search = Wyszukaj...
|
||||
type_tooltip = Typ wyszukiwania
|
||||
fuzzy = Przybliżone
|
||||
package_kind = Wyszukaj pakiety...
|
||||
package_kind = Wyszukaj pakiety…
|
||||
fuzzy_tooltip = Uwzględnij wyniki, które są bliskie wyszukiwanemu hasłu
|
||||
match = Dopasuj
|
||||
match_tooltip = Uwzględniaj tylko wyniki pasujące do wyszukiwanego hasła
|
||||
repo_kind = Wyszukaj repozytoria...
|
||||
user_kind = Wyszukaj użytkownilków...
|
||||
repo_kind = Wyszukaj repozytoria…
|
||||
user_kind = Wyszukaj użytkownilków…
|
||||
code_search_unavailable = Wyszukiwanie kodu jest obecnie niedostępne. Skontakuj sie z administratorem strony.
|
||||
no_results = Nie znaleziono pasujących wyników.
|
||||
org_kind = Wyszukaj organizacje...
|
||||
team_kind = Wyszukaj zespoły...
|
||||
code_kind = Wyszukaj kod...
|
||||
org_kind = Wyszukaj organizacje…
|
||||
team_kind = Wyszukaj zespoły…
|
||||
code_kind = Wyszukaj kod…
|
||||
code_search_by_git_grep = Obecne wyniki wyszukiwania kodu są dostarczane przez "git grep". Wyniki mogą być lepsze, jeśli administrator witryny włączy indeksator kodu.
|
||||
project_kind = Wyszukaj projekty...
|
||||
branch_kind = Wyszukaj gałęzie...
|
||||
commit_kind = Wyszukaj commity...
|
||||
runner_kind = Wyszukaj runnery...
|
||||
project_kind = Wyszukaj projekty…
|
||||
branch_kind = Wyszukaj gałęzie…
|
||||
commit_kind = Wyszukaj commity…
|
||||
runner_kind = Wyszukaj runnery…
|
||||
keyword_search_unavailable = Wyszukiwanie według słów kluczowych jest obecnie niedostępne. Skontaktuj się z administratorem strony.
|
||||
milestone_kind = Wyszukaj kamienie milowe...
|
||||
union_tooltip = Uwzględnia wyniki pasujące do dowolnego słowa kluczowego rozdzielonego białymi znakami
|
||||
exact = Dokładne
|
||||
exact_tooltip = Uwzględniaj tylko wyniki pasujące do wyszukiwanego hasła
|
||||
issue_kind = Wyszukaj zgłoszenia...
|
||||
pull_kind = Wyszukaj pull requesty...
|
||||
issue_kind = Wyszukaj zgłoszenia…
|
||||
pull_kind = Wyszukaj pull requesty…
|
||||
union = Unia
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Interpretuj wyszukiwane hasło jako wyrażenie regularne
|
||||
|
|
|
@ -1092,6 +1092,8 @@ regenerate_token_success = O token foi regenerado. Aplicações que usam este to
|
|||
access_token_regeneration = Regenerar token de acesso
|
||||
access_token_regeneration_desc = Regenerar um token de acesso irá revogar o acesso a essa conta para as aplicações que estiverem utilizando este token. Isto não pode ser desfeito. Continuar?
|
||||
|
||||
ssh_token_help_ssh_agent = ou, se você estiver usando um agente SSH (com a variável SSH_AUTH_SOCK definida):
|
||||
|
||||
[repo]
|
||||
owner=Proprietário
|
||||
owner_helper=Algumas organizações podem não aparecer no menu devido a um limite de contagem dos repositórios.
|
||||
|
@ -1278,7 +1280,7 @@ star_guest_user=Entre para adicionar este repositório aos favoritos.
|
|||
unwatch=Deixar de observar
|
||||
watch=Observar
|
||||
unstar=Retirar dos favoritos
|
||||
star=Juntar aos favoritos
|
||||
star=Adicionar aos favoritos
|
||||
fork=Fork
|
||||
download_archive=Baixar repositório
|
||||
more_operations=Mais operações
|
||||
|
@ -1934,7 +1936,7 @@ pulls.status_checks_success=Todas as verificações foram bem sucedidas
|
|||
pulls.status_checks_warning=Algumas verificações reportaram avisos
|
||||
pulls.status_checks_failure=Algumas verificações falharam
|
||||
pulls.status_checks_error=Algumas verificações reportaram erros
|
||||
pulls.status_checks_requested=Obrigatário
|
||||
pulls.status_checks_requested=Obrigatório
|
||||
pulls.status_checks_details=Detalhes
|
||||
pulls.update_branch=Atualizar branch por merge
|
||||
pulls.update_branch_rebase=Atualizar branch por rebase
|
||||
|
@ -2803,7 +2805,7 @@ mirror_use_ssh.helper = Forgejo irá espelhar o repositório via Git através de
|
|||
mirror_denied_combination = Não é possível combinar o uso de chave pública e autenticação baseada em senha.
|
||||
mirror_public_key = Chave SSH pública
|
||||
mirror_use_ssh.text = Usar autenticação por SSH
|
||||
mirror_use_ssh.not_available = Autenticação por SSH não está disponível.
|
||||
mirror_use_ssh.not_available = A autenticação via SSH não está disponível.
|
||||
settings.push_mirror_sync_in_progress = Fazendo push das mudanças para o remoto %s nesse momento.
|
||||
settings.federation_apapiurl = URL de federação deste repositório. Copie e cole isso nas Configurações de Federação de outro repositório como uma URL de um Repositório Seguidor.
|
||||
pulls.agit_explanation = Criado usando o fluxo de trabalho AGit. AGit permite que contribuidores proponham mudanças usando "git push" sem criar um fork ou novo branch.
|
||||
|
@ -2817,7 +2819,7 @@ settings.mirror_settings.pushed_repository = Repositório enviado
|
|||
settings.mirror_settings.docs.disabled_pull_mirror.instructions = Configure seu projeto para automaticamente fazer push de commits, tags e branches para outro repositório. Espelhos de pull foram desativados pelo administrador do seu site.
|
||||
settings.mirror_settings.docs.disabled_push_mirror.instructions = Configure seu projeto para automaticamente fazer pull de commits, tags e branches de outro repositório.
|
||||
settings.mirror_settings.docs.doc_link_pull_section = a seção "Fazendo pull de um repositório remoto" da documentação.
|
||||
subscribe.pull.guest.tooltip = Entre para receber notificações deste pull request.
|
||||
subscribe.pull.guest.tooltip = Inicie a sessão para receber notificações deste pull request.
|
||||
settings.pull_mirror_sync_quota_exceeded = Cota excedida, não será feito pull das mudanças.
|
||||
settings.mirror_settings.docs.more_information_if_disabled = Saiba mais sobre espelhos de push e pull aqui:
|
||||
settings.transfer_quota_exceeded = O novo dono (%s) excedeu a cota. O repositório não foi transferido.
|
||||
|
@ -3900,7 +3902,7 @@ deletion=Excluir segredo
|
|||
deletion.description=A exclusão de um segredo é permanente e não pode ser desfeita. Continuar?
|
||||
deletion.success=O segredo foi excluído.
|
||||
deletion.failed=Falha ao excluir segredo.
|
||||
management=Gerenciar segredos
|
||||
management=Gerenciamento de segredos
|
||||
|
||||
[actions]
|
||||
actions=Ações
|
||||
|
@ -3909,12 +3911,12 @@ unit.desc=Gerenciar pipelines integradas de CI/CD com Forgejo Actions.
|
|||
|
||||
status.unknown=Desconhecido
|
||||
status.waiting=Aguardando
|
||||
status.running=Rodando
|
||||
status.running=Executando
|
||||
status.success=Sucesso
|
||||
status.failure=Falha
|
||||
status.cancelled=Cancelado
|
||||
status.skipped=Ignorado
|
||||
status.blocked=Bloqueado
|
||||
status.cancelled=Cancelada
|
||||
status.skipped=Ignorada
|
||||
status.blocked=Bloqueada
|
||||
|
||||
runners=Runners
|
||||
runners.runner_manage_panel=Gerenciar runners
|
||||
|
|
|
@ -1060,11 +1060,11 @@ user_unblock_success = O utilizador foi desbloqueado com sucesso.
|
|||
language.title = Idioma predefinido
|
||||
keep_activity_private.description = O seu <a href="%s">trabalho público</a> apenas estará visível para si e para os administradores da instância.
|
||||
language.description = Este idioma vai ser guardado na sua conta e ser usado como o predefinido depois de iniciar sessão.
|
||||
language.localization_project = Ajude-nos a traduzir o Forgejo para o seu idioma! <a href="%s">Ler mais</a>.
|
||||
language.localization_project = Ajude-nos a traduzir o Forgejo para o seu idioma! <a href="%s">Saiba mais</a>.
|
||||
pronouns_custom_label = Pronomes personalizados
|
||||
user_block_yourself = Não se pode bloquear a si próprio.
|
||||
change_username_redirect_prompt.with_cooldown.one = O nome de utilizador antigo estará disponível para todos após um período de espera de %[1]d dia, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
|
||||
change_username_redirect_prompt.with_cooldown.few = O nome de utilizador antigo ficará disponível para todos após um período de espera de %[1]d dias, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
|
||||
change_username_redirect_prompt.with_cooldown.one = O nome de utilizador antigo estará disponível para todos após um período de espera de %[1]d dia. Pode ainda reivindicar o nome de utilizador antigo durante o período de espera.
|
||||
change_username_redirect_prompt.with_cooldown.few = O nome de utilizador antigo ficará disponível para todos após um período de espera de %[1]d dias. Pode ainda reivindicar o nome de utilizador antigo durante o período de espera.
|
||||
quota.applies_to_user = As seguintes regras de quotas aplicam-se à sua conta
|
||||
quota.sizes.assets.artifacts = Artefactos
|
||||
quota.rule.exceeded.helper = O tamanho total dos objectos para esta regra excedeu a quota.
|
||||
|
@ -1583,7 +1583,7 @@ issues.remove_ref_at=`removeu a referência <b>%s</b> %s`
|
|||
issues.add_ref_at=`adicionou a referência <b>%s</b> %s`
|
||||
issues.delete_branch_at=`eliminou o ramo <b>%s</b> %s`
|
||||
issues.filter_label=Rótulo
|
||||
issues.filter_label_exclude=`Use <code>alt</code> + <code>clique/enter</code> para excluir rótulos`
|
||||
issues.filter_label_exclude=Use <kbd>Alt</kbd> + <kbd>Clique</kbd> para excluir rótulos
|
||||
issues.filter_label_no_select=Todos os rótulos
|
||||
issues.filter_label_select_no_label=Sem rótulo
|
||||
issues.filter_milestone=Etapa
|
||||
|
@ -2923,6 +2923,8 @@ settings.event_action_recover_desc = A execução de ação foi bem sucedida dep
|
|||
settings.event_action_success = Sucesso
|
||||
settings.event_action_success_desc = A Execução de ação foi bem sucedida.
|
||||
|
||||
issues.filter_type.all_pull_requests = Todos os pedidos de integração
|
||||
|
||||
[graphs]
|
||||
component_loading=A carregar %s…
|
||||
component_loading_failed=Não foi possível carregar %s
|
||||
|
@ -3057,8 +3059,8 @@ teams.invite.by=Convidado(a) por %s
|
|||
teams.invite.description=Clique no botão abaixo para se juntar à equipa.
|
||||
follow_blocked_user = Não pode seguir esta organização porque esta organização bloqueou-o/a.
|
||||
open_dashboard = Abrir painel de controlo
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome antigo da organização estará disponível para todos após um período de espera de %[1]d dia, podendo ainda reivindicar o nome antigo durante o período de espera.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome antigo da organização estará disponível para todos após um período de espera de %[1]d dias, podendo ainda reivindicar o nome antigo durante o período de espera.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome antigo da organização estará disponível para todos após um período de espera de %[1]d dia. Pode ainda reivindicar o nome antigo durante o período de espera.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome antigo da organização estará disponível para todos após um período de espera de %[1]d dias. Pode ainda reivindicar o nome antigo durante o período de espera.
|
||||
|
||||
[admin]
|
||||
dashboard=Painel de controlo
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
|
||||
|
||||
[common]
|
||||
return_to_forgejo = Înapoi la Forgejo
|
||||
explore = Explorează
|
||||
|
@ -18,7 +15,7 @@ concept_user_organization = Organizație
|
|||
logo = Logo
|
||||
help = Ajutor
|
||||
sign_up = Înregistrare
|
||||
link_account = Conectare cont
|
||||
link_account = Conectați conturi
|
||||
register = Înregistrare
|
||||
template = Șablon
|
||||
language = Limbă
|
||||
|
@ -91,7 +88,7 @@ remove_label_str = Șterge elementul "%s"
|
|||
save = Salvează
|
||||
remove = Șterge
|
||||
copy_path = Copiază cale
|
||||
error404 = Pagina pe care încerci să o vizitezi fie <strong>nu există</strong> sau <strong>nu ești autorizat</strong> să o vezi.
|
||||
error404 = Pagina pe care încercați să o vizitați fie <strong>nu există</strong>, <strong>a fost ștearsă</strong> sau <strong>nu sunteți autorizat</strong> să o puteți vedea.
|
||||
filter.not_archived = Nearhivat
|
||||
activities = Activități
|
||||
confirm_delete_selected = Ștergi toate elementele selectate?
|
||||
|
@ -104,9 +101,49 @@ home = Acasă
|
|||
dashboard = Panou de Control
|
||||
version = Versiune
|
||||
powered_by = Susținut de %s
|
||||
active_stopwatch = Monitorizor de timp activ
|
||||
active_stopwatch = Contor timp activ
|
||||
more_items = Mai multe elemente
|
||||
|
||||
tracked_time_summary = Rezumat al timpului monitorizat, bazat pe filtrele listei de probleme
|
||||
signed_in_as = Conectat ca
|
||||
toggle_menu = Afișează sau ascunde meniul
|
||||
twofa_scratch = Cod de rezervă pentru autentificare prin doi factori
|
||||
passcode = Cod de acces
|
||||
repository = Repozitoriu
|
||||
new_fork = Bifurcație de repozitoriu nouă
|
||||
new_project_column = Coloană nouă
|
||||
new_repo.title = Repozitoriu nou
|
||||
new_repo.link = Repozitoriu nou
|
||||
all = Tot
|
||||
collaborative = Colaborativ
|
||||
forks = Bifurcații
|
||||
pull_requests = Cereri de extragere
|
||||
issues = Probleme
|
||||
milestones = Etape
|
||||
rerun = Reporniți
|
||||
rerun_all = Reporniți toate joburile
|
||||
add_all = Adaugă toate
|
||||
remove_all = Șterge toate
|
||||
copy_branch = Copiați numele ramurii
|
||||
write = Scrieți
|
||||
error413 = V-ați epuizat cota.
|
||||
invalid_data = Date invalide: %v
|
||||
pin = Fixați
|
||||
unpin = Desprindeți
|
||||
concept_code_repository = Repozitoriu
|
||||
show_timestamps = Afișați marcajele temporale
|
||||
show_full_screen = Afișați pe tot ecranul
|
||||
download_logs = Descărcați jurnalele
|
||||
value = Valoare
|
||||
filter.is_fork = Bifurcații
|
||||
filter.not_fork = Nu sunt bifurcații
|
||||
filter.is_mirror = Copii identice
|
||||
filter.not_mirror = Nu sunt copii identice
|
||||
filter.is_template = Șabloane
|
||||
filter.not_template = Nu sunt șabloane
|
||||
filter.public = Publice
|
||||
filter.private = Private
|
||||
|
||||
[editor]
|
||||
table_modal.header = Adaugă tabel
|
||||
table_modal.placeholder.content = Conținut
|
||||
|
@ -122,6 +159,20 @@ buttons.code.tooltip = Adaugă cod
|
|||
buttons.quote.tooltip = Citează text
|
||||
buttons.link.tooltip = Adaugă un link
|
||||
|
||||
buttons.heading.tooltip = Adăugați titlu
|
||||
buttons.list.unordered.tooltip = Adăugați o listă
|
||||
buttons.list.task.tooltip = Adăugați o listă de sarcini
|
||||
buttons.ref.tooltip = Faceți o referire la o problemă sau o cerere de extragere
|
||||
buttons.switch_to_legacy.tooltip = Folosiți în schimb editorul vechi
|
||||
buttons.enable_monospace_font = Activați fontul monospațiat
|
||||
buttons.disable_monospace_font = Dezactivați fontul monospațiat
|
||||
buttons.indent.tooltip = Indentați obiectele cu un nivel
|
||||
buttons.unindent.tooltip = Nu mai indentați obiectele cu un nivel
|
||||
link_modal.header = Adăugați un link
|
||||
link_modal.url = URL
|
||||
link_modal.description = Descriere
|
||||
link_modal.paste_reminder = Indiciu: Cu un URL salvat în clipboard, puteți lipi direct în editor pentru a crea un link.
|
||||
|
||||
[filter]
|
||||
string.asc = A - Z
|
||||
string.desc = Z - A
|
||||
|
@ -130,10 +181,16 @@ string.desc = Z - A
|
|||
server_internal = Eroare internă a serverului
|
||||
network_error = Eroare de rețea
|
||||
|
||||
occurred = A apărut o eroare
|
||||
report_message = Dacă credeți că aceasta este o problemă cu Forgejo, vă rugăm să căutați probleme pe <a href="%s" target="_blank">Codeberg</a> sau să deschideți o nouă problemă dacă este necesar.
|
||||
not_found = Obiectul nu a putut fi găsit.
|
||||
|
||||
[startpage]
|
||||
install = Ușor de instalat
|
||||
license = Sursă deschisă
|
||||
|
||||
app_desc = Un serviciu Git fără probleme, auto-găzduit
|
||||
|
||||
[install]
|
||||
require_db_desc = Forgejo are nevoie de MySQL, PostgreSQL, SQLite3 sau TiDB (protocol MySQL).
|
||||
db_title = Setări bază de date
|
||||
|
@ -223,16 +280,33 @@ invalid_db_setting = Setările pentru bază de date sunt invalide: %v
|
|||
no_reply_address = Domeniu pentru adrese de email ascunse
|
||||
|
||||
[search]
|
||||
user_kind = Caută utilizatori...
|
||||
team_kind = Caută echipe...
|
||||
code_kind = Caută cod...
|
||||
project_kind = Caută proiecte...
|
||||
package_kind = Caută pachete...
|
||||
org_kind = Caută organizații...
|
||||
user_kind = Căutați utilizatori…
|
||||
team_kind = Căutați echipe…
|
||||
code_kind = Căutați cod…
|
||||
project_kind = Căutați proiecte…
|
||||
package_kind = Căutați pachete…
|
||||
org_kind = Căutați organizații…
|
||||
code_search_unavailable = Căutarea de cod nu este disponibilă momentan. Te rog contactează administratorul site-ului.
|
||||
keyword_search_unavailable = Căutarea după cuvânt cheie nu este disponibilă momentan. Te rog contactează administratorul site-ului.
|
||||
no_results = Nu a fost găsit niciun rezultat corespunzător.
|
||||
|
||||
search = Căutați…
|
||||
type_tooltip = Tipul căutării
|
||||
fuzzy = Aproximată
|
||||
fuzzy_tooltip = Includeți rezultate care sunt asemănătoare termenului de căutare
|
||||
union = Cuvinte cheie
|
||||
union_tooltip = Includeți rezultate care sunt asemănătoare cuvintelor cheie separate prin spațiu
|
||||
exact = Exactă
|
||||
exact_tooltip = Includeți doar rezultate care se potrivesc exact termenului de căutare
|
||||
regexp = Expresie regulată
|
||||
regexp_tooltip = Interpretați termenul de căutare ca o expresie regulată
|
||||
repo_kind = Căutați repozitorii…
|
||||
branch_kind = Căutați ramuri…
|
||||
commit_kind = Căutați comiteri…
|
||||
runner_kind = Căutați executori…
|
||||
issue_kind = Căutați probleme…
|
||||
pull_kind = Căutați cereri de extragere…
|
||||
|
||||
[aria]
|
||||
navbar = Bară de navigare
|
||||
footer = Subsol
|
||||
|
|
|
@ -755,7 +755,7 @@ public_profile=Публичный профиль
|
|||
biography_placeholder=Кратко расскажите о себе другим! (Можно использовать Markdown)
|
||||
location_placeholder=Пусть все знают, откуда вы
|
||||
profile_desc=Ваш профиль
|
||||
password_username_disabled=Нелокальным пользователям запрещено изменение их имени пользователя. Для получения более подробной информации обратитесь к администратору сайта.
|
||||
password_username_disabled=Нелокальные пользователи не могут изменить имя. Для подробностей обратитесь к администрации сайта.
|
||||
full_name=Полное имя
|
||||
website=Веб-сайт
|
||||
location=Местоположение
|
||||
|
@ -766,7 +766,7 @@ update_language_not_found=Язык «%s» недоступен.
|
|||
update_language_success=Язык обновлён.
|
||||
update_profile_success=Ваш профиль успешно обновлён.
|
||||
change_username=Ваше имя пользователя было изменено.
|
||||
change_username_prompt=Обратите внимание: изменение имени пользователя также меняет URL вашей учётной записи.
|
||||
change_username_prompt=Учтите, что при изменении имени пользователя ссылка на ваш профиль тоже будет изменена.
|
||||
change_username_redirect_prompt=Старое имя будет перенаправлять на новое до тех пор, пока оно не будет занято.
|
||||
continue=Далее
|
||||
cancel=Отмена
|
||||
|
@ -1053,7 +1053,7 @@ hints = Подсказки
|
|||
additional_repo_units_hint = Предлагать включить больше разделов в репозиториях
|
||||
update_hints = Обновить подсказки
|
||||
update_hints_success = Подсказки обновлены.
|
||||
additional_repo_units_hint_description = Показывать подсказку "Включить больше разделов" в репозиториях, в которых включены не все разделы.
|
||||
additional_repo_units_hint_description = Показывать подсказку «Включить больше разделов» в репозиториях, в которых включены не все разделы.
|
||||
pronouns_custom = Другие
|
||||
pronouns = Местоимения
|
||||
pronouns_unspecified = Не указаны
|
||||
|
@ -1063,7 +1063,7 @@ language.description = Выбранный язык будет сохранён
|
|||
language.localization_project = Помогите с переводом Forgejo на свой язык! <a href="%s">Подробнее</a>.
|
||||
user_block_yourself = Нельзя заблокировать себя.
|
||||
pronouns_custom_label = Другие местоимения
|
||||
change_username_redirect_prompt.with_cooldown.one = Прежнее имя будет доступно для использования другим пользователям после истечения защиты в %[1]d день. Вы сможете вернуть его себе во время срока защиты.
|
||||
change_username_redirect_prompt.with_cooldown.one = Прежнее имя будет доступно для использования другим пользователям после истечения простоя в %[1]d день. Вы сможете вернуть его себе во время срока простоя.
|
||||
change_username_redirect_prompt.with_cooldown.few = Прежнее имя будет доступно для использования другим пользователям после истечения защиты в %[1]d дней. Вы сможете вернуть его себе во время срока защиты.
|
||||
keep_pronouns_private = Показывать местоимения только зарегистрированным пользователям
|
||||
keep_pronouns_private.description = Местоимения будут скрыты от пользователей, не имеющих учётных записей на сервере.
|
||||
|
@ -1092,6 +1092,8 @@ access_token_regeneration_desc = Будет создан новый токен,
|
|||
regenerate_token_success = Токен был заменён. Приложения, использующие его, более не имеют доступа к этой учётной записи и должны получить новый токен.
|
||||
access_token_regeneration = Замена токена доступа
|
||||
|
||||
ssh_token_help_ssh_agent = или, если вы используете SSH-агент, (с заданной переменной SSH_AUTH_SOCK):
|
||||
|
||||
[repo]
|
||||
owner=Владелец
|
||||
owner_helper=Некоторые организации могут не отображаться в раскрывающемся списке из-за максимального ограничения количества репозиториев.
|
||||
|
@ -1641,9 +1643,9 @@ issues.closed_at=`задача была закрыта %s`
|
|||
issues.reopened_at=`задача была открыта снова %s`
|
||||
issues.commit_ref_at=`упоминание этой задачи в коммите %s`
|
||||
issues.ref_issue_from=`<a href="%[2]s">упоминание этой задачи %[3]s</a> %[1]s`
|
||||
issues.ref_pull_from=`<a href="%[2]s">упоминание этого запроса слияния %[3]s</a> %[1]s`
|
||||
issues.ref_closing_from=`<a href="%[2]s">упоминание из запроса на слияние %[3]s, который закроет эту задачу</a> %[1]s`
|
||||
issues.ref_reopening_from=`<a href="%[2]s">упоминание из запроса на слияние %[3]s, который повторно откроет эту задачу</a> %[1]s`
|
||||
issues.ref_pull_from=`<a href="%[2]s">упомянул этот запрос на слияние %[3]s</a> %[1]s`
|
||||
issues.ref_closing_from=`<a href="%[2]s">упомянул эту задачу в запросе на слияние %[3]s, который закроет её</a> %[1]s`
|
||||
issues.ref_reopening_from=`<a href="%[2]s">упомянул эту задачу в запросе на слияние %[3]s, который переоткроет эту задачу</a> %[1]s`
|
||||
issues.ref_closed_from=`<a href="%[3]s">закрыл этот запрос %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_reopened_from=`<a href="%[3]s">задача была открыта снова %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_from=`из %[1]s`
|
||||
|
@ -1917,13 +1919,13 @@ pulls.merge_commit_id=ИД коммита слияния
|
|||
pulls.require_signed_wont_sign=Данная ветвь ожидает подписанные коммиты, однако слияние не будет подписано
|
||||
|
||||
pulls.invalid_merge_option=Этот параметр слияния нельзя использовать для этого запроса на слияние.
|
||||
pulls.merge_conflict=Слияние не удалось: произошел конфликт во время слияния. Совет: попробуйте другую стратегию
|
||||
pulls.merge_conflict=Слияние не удалось: при слиянии произошел конфликт. Попробуйте другую стратегию
|
||||
pulls.merge_conflict_summary=Сообщение об ошибке
|
||||
pulls.rebase_conflict=Слияние не удалось: произошел конфликт во время слияния: %[1]s. Совет: попробуйте другую стратегию
|
||||
pulls.rebase_conflict=Слияние не удалось: при перебазировании коммита произошел конфликт: %[1]s. Попробуйте другую стратегию
|
||||
pulls.rebase_conflict_summary=Сообщение об ошибке
|
||||
pulls.unrelated_histories=Слияние не удалось: у источника и цели слияния нет общей истории. Совет: попробуйте другую стратегию
|
||||
pulls.merge_out_of_date=Слияние не удалось: при создании слияния база данных была обновлена. Подсказка: попробуйте ещё раз.
|
||||
pulls.head_out_of_date=Слияние не удалось: во время слияния головной коммит был обновлён. Попробуйте ещё раз.
|
||||
pulls.unrelated_histories=Слияние не удалось: источник и целевая ветвь нет имеют общую историю. Попробуйте другую стратегию
|
||||
pulls.merge_out_of_date=Слияние не удалось: при выполнении слияния база данных была обновлена. Попробуйте снова.
|
||||
pulls.head_out_of_date=Слияние не удалось: при слиянии был изменён головной коммит. Попробуйте снова.
|
||||
pulls.push_rejected=Отправка была отклонена. Проверьте Git-хуки этого репозитория.
|
||||
pulls.push_rejected_summary=Полная причина отклонения
|
||||
pulls.push_rejected_no_message=Отправка была отклонена и удалённый сервер не указал причину. Проверьте Git-хуки этого репозитория
|
||||
|
@ -2754,7 +2756,7 @@ settings.wiki_rename_branch_main_desc = Переименовать внутре
|
|||
settings.wiki_branch_rename_success = Название ветви вики репозитория успешно нормализовано.
|
||||
ambiguous_runes_description = `Этот файл содержит символы Юникода, которые легко спутать с похожими. Если так и должно быть, можете спокойно игнорировать это предупреждение. Отобразить символы можно кнопкой Экранирования.`
|
||||
editor.invalid_commit_mail = Неправильная почта для создания коммита.
|
||||
pulls.has_merged = Слияние не удалось: запрос уже был слит, изменение целевой ветви или повторное слияние невозможно.
|
||||
pulls.has_merged = Не удалось: слияние уже выполнено – изменение целевой ветви или повторное слияние невозможно.
|
||||
settings.enter_repo_name = Введите имя владельца и название репозитория как указано:
|
||||
signing.wont_sign.error = Не удалось проверить возможность подписать коммит.
|
||||
signing.wont_sign.nokey = Сервер не предоставляет ключ для подписи коммита.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue