"
strings.NewReader(""),
- // Strip out nuls - they're always invalid
+ // strip out NULLs (they're always invalid), and escape known tags
bytes.NewReader(globalVars().tagCleaner.ReplaceAll([]byte(globalVars().nulCleaner.Replace(string(rawHTML))), []byte("<$1"))),
// close the tags
strings.NewReader(""),
diff --git a/modules/markup/html_commit.go b/modules/markup/html_commit.go
index 967c327f368..fe7a034967a 100644
--- a/modules/markup/html_commit.go
+++ b/modules/markup/html_commit.go
@@ -62,7 +62,7 @@ func anyHashPatternExtract(s string) (ret anyHashPatternResult, ok bool) {
// if url ends in '.', it's very likely that it is not part of the actual url but used to finish a sentence.
ret.PosEnd--
ret.FullURL = ret.FullURL[:len(ret.FullURL)-1]
- for i := 0; i < len(m); i++ {
+ for i := range m {
m[i] = min(m[i], ret.PosEnd)
}
}
diff --git a/modules/markup/html_link.go b/modules/markup/html_link.go
index 1ea0b140289..43faef16819 100644
--- a/modules/markup/html_link.go
+++ b/modules/markup/html_link.go
@@ -31,8 +31,8 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
// It makes page handling terrible, but we prefer GitHub syntax
// And fall back to MediaWiki only when it is obvious from the look
// Of text and link contents
- sl := strings.Split(content, "|")
- for _, v := range sl {
+ sl := strings.SplitSeq(content, "|")
+ for v := range sl {
if equalPos := strings.IndexByte(v, '='); equalPos == -1 {
// There is no equal in this argument; this is a mandatory arg
if props["name"] == "" {
diff --git a/modules/markup/html_node.go b/modules/markup/html_node.go
index f67437465cd..4eb78fdd2b0 100644
--- a/modules/markup/html_node.go
+++ b/modules/markup/html_node.go
@@ -63,8 +63,11 @@ func processNodeA(ctx *RenderContext, node *html.Node) {
func visitNodeImg(ctx *RenderContext, img *html.Node) (next *html.Node) {
next = img.NextSibling
+ attrSrc, hasLazy := "", false
for i, imgAttr := range img.Attr {
+ hasLazy = hasLazy || imgAttr.Key == "loading" && imgAttr.Val == "lazy"
if imgAttr.Key != "src" {
+ attrSrc = imgAttr.Val
continue
}
@@ -72,8 +75,8 @@ func visitNodeImg(ctx *RenderContext, img *html.Node) (next *html.Node) {
isLinkable := imgSrcOrigin != "" && !strings.HasPrefix(imgSrcOrigin, "data:")
// By default, the " " tag should also be clickable,
- // because frontend use ` ` to paste the re-scaled image into the markdown,
- // so it must match the default markdown image behavior.
+ // because frontend uses ` ` to paste the re-scaled image into the Markdown,
+ // so it must match the default Markdown image behavior.
cnt := 0
for p := img.Parent; isLinkable && p != nil && cnt < 2; p = p.Parent {
if hasParentAnchor := p.Type == html.ElementNode && p.Data == "a"; hasParentAnchor {
@@ -98,6 +101,9 @@ func visitNodeImg(ctx *RenderContext, img *html.Node) (next *html.Node) {
imgAttr.Val = camoHandleLink(imgAttr.Val)
img.Attr[i] = imgAttr
}
+ if !RenderBehaviorForTesting.DisableAdditionalAttributes && !hasLazy && !strings.HasPrefix(attrSrc, "data:") {
+ img.Attr = append(img.Attr, html.Attribute{Key: "loading", Val: "lazy"})
+ }
return next
}
diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go
index 58f71bdd7b5..5fdbf43f7cb 100644
--- a/modules/markup/html_test.go
+++ b/modules/markup/html_test.go
@@ -525,6 +525,10 @@ func TestPostProcess(t *testing.T) {
test("", `<script>a</script>`)
test("", `<style>a</STYLE>`)
+
+ // other special tags, our special behavior
+ test(" `)
- test(
+ render(
"[["+title+"|"+url+"]]",
`
`)
- test(
+ render(
"[]("+href+")",
`
`)
- test(
+ render(
"",
`
`)
- test(
+ render(
"[["+title+"|"+url+"]]",
`
`)
- test(
+ render(
"[]("+href+")",
`
`)
+
+ defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, false)()
+ render(
+ " ", // by the way, empty "a" tag will be removed
+ `
`)
}
func TestTotal_RenderString(t *testing.T) {
@@ -252,7 +257,7 @@ This PR has been generated by [Renovate Bot](https://github.com/renovatebot/reno
return username == "r-lyeh"
},
})
- for i := 0; i < len(sameCases); i++ {
+ for i := range sameCases {
line, err := markdown.RenderString(markup.NewTestRenderContext(localMetas), sameCases[i])
assert.NoError(t, err)
assert.Equal(t, testAnswers[i], string(line))
diff --git a/modules/markup/markdown/math/block_renderer.go b/modules/markup/markdown/math/block_renderer.go
index 412e4d0dee6..95a336a02ce 100644
--- a/modules/markup/markdown/math/block_renderer.go
+++ b/modules/markup/markdown/math/block_renderer.go
@@ -42,7 +42,7 @@ func (r *BlockRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
func (r *BlockRenderer) writeLines(w util.BufWriter, source []byte, n gast.Node) {
l := n.Lines().Len()
- for i := 0; i < l; i++ {
+ for i := range l {
line := n.Lines().At(i)
_, _ = w.Write(util.EscapeHTML(line.Value(source)))
}
@@ -51,8 +51,8 @@ func (r *BlockRenderer) writeLines(w util.BufWriter, source []byte, n gast.Node)
func (r *BlockRenderer) renderBlock(w util.BufWriter, source []byte, node gast.Node, entering bool) (gast.WalkStatus, error) {
n := node.(*Block)
if entering {
- code := giteaUtil.Iif(n.Inline, "", ``) + ``
- _ = r.renderInternal.FormatWithSafeAttrs(w, template.HTML(code))
+ codeHTML := giteaUtil.Iif[template.HTML](n.Inline, "", ``) + ``
+ _, _ = w.WriteString(string(r.renderInternal.ProtectSafeAttrs(codeHTML)))
r.writeLines(w, source, n)
} else {
_, _ = w.WriteString(`` + giteaUtil.Iif(n.Inline, "", ` `) + "\n")
diff --git a/modules/markup/markdown/math/inline_renderer.go b/modules/markup/markdown/math/inline_renderer.go
index d000a7b317a..eeeb60cc7ee 100644
--- a/modules/markup/markdown/math/inline_renderer.go
+++ b/modules/markup/markdown/math/inline_renderer.go
@@ -28,7 +28,7 @@ func NewInlineRenderer(renderInternal *internal.RenderInternal) renderer.NodeRen
func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {
if entering {
- _ = r.renderInternal.FormatWithSafeAttrs(w, ``)
+ _, _ = w.WriteString(string(r.renderInternal.ProtectSafeAttrs(``)))
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
segment := c.(*ast.Text).Segment
value := util.EscapeHTML(segment.Value(source))
diff --git a/modules/markup/markdown/meta_test.go b/modules/markup/markdown/meta_test.go
index 3f74adeaef4..283d289d483 100644
--- a/modules/markup/markdown/meta_test.go
+++ b/modules/markup/markdown/meta_test.go
@@ -60,7 +60,7 @@ func TestExtractMetadata(t *testing.T) {
func TestExtractMetadataBytes(t *testing.T) {
t.Run("ValidFrontAndBody", func(t *testing.T) {
var meta IssueTemplate
- body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s\n%s", sepTest, frontTest, sepTest, bodyTest)), &meta)
+ body, err := ExtractMetadataBytes(fmt.Appendf(nil, "%s\n%s\n%s\n%s", sepTest, frontTest, sepTest, bodyTest), &meta)
assert.NoError(t, err)
assert.Equal(t, bodyTest, string(body))
assert.Equal(t, metaTest, meta)
@@ -69,19 +69,19 @@ func TestExtractMetadataBytes(t *testing.T) {
t.Run("NoFirstSeparator", func(t *testing.T) {
var meta IssueTemplate
- _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", frontTest, sepTest, bodyTest)), &meta)
+ _, err := ExtractMetadataBytes(fmt.Appendf(nil, "%s\n%s\n%s", frontTest, sepTest, bodyTest), &meta)
assert.Error(t, err)
})
t.Run("NoLastSeparator", func(t *testing.T) {
var meta IssueTemplate
- _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, bodyTest)), &meta)
+ _, err := ExtractMetadataBytes(fmt.Appendf(nil, "%s\n%s\n%s", sepTest, frontTest, bodyTest), &meta)
assert.Error(t, err)
})
t.Run("NoBody", func(t *testing.T) {
var meta IssueTemplate
- body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, sepTest)), &meta)
+ body, err := ExtractMetadataBytes(fmt.Appendf(nil, "%s\n%s\n%s", sepTest, frontTest, sepTest), &meta)
assert.NoError(t, err)
assert.Empty(t, string(body))
assert.Equal(t, metaTest, meta)
diff --git a/modules/markup/markdown/transform_blockquote.go b/modules/markup/markdown/transform_blockquote.go
index 3a8c6fa0186..bf17f01681c 100644
--- a/modules/markup/markdown/transform_blockquote.go
+++ b/modules/markup/markdown/transform_blockquote.go
@@ -46,7 +46,7 @@ func (g *ASTTransformer) extractBlockquoteAttentionEmphasis(firstParagraph ast.N
if !ok {
return "", nil
}
- val1 := string(node1.Text(reader.Source())) //nolint:staticcheck
+ val1 := string(node1.Text(reader.Source())) //nolint:staticcheck // Text is deprecated
attentionType := strings.ToLower(val1)
if g.attentionTypes.Contains(attentionType) {
return attentionType, []ast.Node{node1}
diff --git a/modules/markup/markdown/transform_codespan.go b/modules/markup/markdown/transform_codespan.go
index bccc43aad25..c2e4295bc2b 100644
--- a/modules/markup/markdown/transform_codespan.go
+++ b/modules/markup/markdown/transform_codespan.go
@@ -68,7 +68,7 @@ func cssColorHandler(value string) bool {
}
func (g *ASTTransformer) transformCodeSpan(_ *markup.RenderContext, v *ast.CodeSpan, reader text.Reader) {
- colorContent := v.Text(reader.Source()) //nolint:staticcheck
+ colorContent := v.Text(reader.Source()) //nolint:staticcheck // Text is deprecated
if cssColorHandler(string(colorContent)) {
v.AppendChild(v, NewColorPreview(colorContent))
}
diff --git a/modules/markup/markdown/transform_heading.go b/modules/markup/markdown/transform_heading.go
index 5f8a12794da..a229a7b1a4d 100644
--- a/modules/markup/markdown/transform_heading.go
+++ b/modules/markup/markdown/transform_heading.go
@@ -16,10 +16,10 @@ import (
func (g *ASTTransformer) transformHeading(_ *markup.RenderContext, v *ast.Heading, reader text.Reader, tocList *[]Header) {
for _, attr := range v.Attributes() {
if _, ok := attr.Value.([]byte); !ok {
- v.SetAttribute(attr.Name, []byte(fmt.Sprintf("%v", attr.Value)))
+ v.SetAttribute(attr.Name, fmt.Appendf(nil, "%v", attr.Value))
}
}
- txt := v.Text(reader.Source()) //nolint:staticcheck
+ txt := v.Text(reader.Source()) //nolint:staticcheck // Text is deprecated
header := Header{
Text: util.UnsafeBytesToString(txt),
Level: v.Level,
diff --git a/modules/markup/mdstripper/mdstripper.go b/modules/markup/mdstripper/mdstripper.go
index c589926b5e7..5a6504416ab 100644
--- a/modules/markup/mdstripper/mdstripper.go
+++ b/modules/markup/mdstripper/mdstripper.go
@@ -46,7 +46,7 @@ func (r *stripRenderer) Render(w io.Writer, source []byte, doc ast.Node) error {
coalesce := prevSibIsText
r.processString(
w,
- v.Text(source), //nolint:staticcheck
+ v.Text(source), //nolint:staticcheck // Text is deprecated
coalesce)
if v.SoftLineBreak() {
r.doubleSpace(w)
@@ -91,8 +91,7 @@ func (r *stripRenderer) processAutoLink(w io.Writer, link []byte) {
}
// Note: we're not attempting to match the URL scheme (http/https)
- host := strings.ToLower(u.Host)
- if host != "" && host != strings.ToLower(r.localhost.Host) {
+ if u.Host != "" && !strings.EqualFold(u.Host, r.localhost.Host) {
// Process out of band
r.links = append(r.links, linkStr)
return
diff --git a/modules/markup/orgmode/orgmode_test.go b/modules/markup/orgmode/orgmode_test.go
index df4bb38ad14..ebda2271f28 100644
--- a/modules/markup/orgmode/orgmode_test.go
+++ b/modules/markup/orgmode/orgmode_test.go
@@ -97,16 +97,10 @@ func TestRender_Source(t *testing.T) {
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
}
- test(`#+begin_src go
-// HelloWorld prints "Hello World"
-func HelloWorld() {
- fmt.Println("Hello World")
-}
+ test(`#+begin_src c
+int a;
#+end_src
-`, `
-
// HelloWorld prints "Hello World"
-func HelloWorld () {
- fmt . Println ( "Hello World" )
-}
+`, `
`)
}
diff --git a/modules/markup/renderer.go b/modules/markup/renderer.go
index 35f90eb46cb..b6e9c348b73 100644
--- a/modules/markup/renderer.go
+++ b/modules/markup/renderer.go
@@ -4,12 +4,12 @@
package markup
import (
- "bytes"
"io"
"path"
"strings"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/typesniffer"
)
// Renderer defines an interface for rendering markup file to HTML
@@ -37,7 +37,7 @@ type ExternalRenderer interface {
// RendererContentDetector detects if the content can be rendered
// by specified renderer
type RendererContentDetector interface {
- CanRender(filename string, input io.Reader) bool
+ CanRender(filename string, sniffedType typesniffer.SniffedType, prefetchBuf []byte) bool
}
var (
@@ -60,13 +60,9 @@ func GetRendererByFileName(filename string) Renderer {
}
// DetectRendererType detects the markup type of the content
-func DetectRendererType(filename string, input io.Reader) string {
- buf, err := io.ReadAll(input)
- if err != nil {
- return ""
- }
+func DetectRendererType(filename string, sniffedType typesniffer.SniffedType, prefetchBuf []byte) string {
for _, renderer := range renderers {
- if detector, ok := renderer.(RendererContentDetector); ok && detector.CanRender(filename, bytes.NewReader(buf)) {
+ if detector, ok := renderer.(RendererContentDetector); ok && detector.CanRender(filename, sniffedType, prefetchBuf) {
return renderer.Name()
}
}
diff --git a/modules/markup/sanitizer_default.go b/modules/markup/sanitizer_default.go
index 14161eb5337..0fbf0f0b24c 100644
--- a/modules/markup/sanitizer_default.go
+++ b/modules/markup/sanitizer_default.go
@@ -4,6 +4,7 @@
package markup
import (
+ "html/template"
"io"
"net/url"
"regexp"
@@ -52,6 +53,8 @@ func (st *Sanitizer) createDefaultPolicy() *bluemonday.Policy {
policy.AllowAttrs("src", "autoplay", "controls").OnElements("video")
+ policy.AllowAttrs("loading").OnElements("img")
+
// Allow generally safe attributes (reference: https://github.com/jch/html-pipeline)
generalSafeAttrs := []string{
"abbr", "accept", "accept-charset",
@@ -90,9 +93,9 @@ func (st *Sanitizer) createDefaultPolicy() *bluemonday.Policy {
return policy
}
-// Sanitize takes a string that contains a HTML fragment or document and applies policy whitelist.
-func Sanitize(s string) string {
- return GetDefaultSanitizer().defaultPolicy.Sanitize(s)
+// Sanitize use default sanitizer policy to sanitize a string
+func Sanitize(s string) template.HTML {
+ return template.HTML(GetDefaultSanitizer().defaultPolicy.Sanitize(s))
}
// SanitizeReader sanitizes a Reader
diff --git a/modules/markup/sanitizer_default_test.go b/modules/markup/sanitizer_default_test.go
index 5282916944d..e5ba018e1be 100644
--- a/modules/markup/sanitizer_default_test.go
+++ b/modules/markup/sanitizer_default_test.go
@@ -69,6 +69,6 @@ func TestSanitizer(t *testing.T) {
}
for i := 0; i < len(testCases); i += 2 {
- assert.Equal(t, testCases[i+1], Sanitize(testCases[i]))
+ assert.Equal(t, testCases[i+1], string(Sanitize(testCases[i])))
}
}
diff --git a/modules/metrics/collector.go b/modules/metrics/collector.go
index 4d2ec287a91..d02e5c11280 100755
--- a/modules/metrics/collector.go
+++ b/modules/metrics/collector.go
@@ -7,7 +7,7 @@ import (
"runtime"
activities_model "code.gitea.io/gitea/models/activities"
- "code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/setting"
"github.com/prometheus/client_golang/prometheus"
@@ -233,7 +233,7 @@ func (c Collector) Describe(ch chan<- *prometheus.Desc) {
// Collect returns the metrics with values
func (c Collector) Collect(ch chan<- prometheus.Metric) {
- stats := activities_model.GetStatistic(db.DefaultContext)
+ stats := activities_model.GetStatistic(graceful.GetManager().ShutdownContext())
ch <- prometheus.MustNewConstMetric(
c.Accesses,
diff --git a/modules/migration/pullrequest.go b/modules/migration/pullrequest.go
index fbfdff0315e..cccab3fd7e5 100644
--- a/modules/migration/pullrequest.go
+++ b/modules/migration/pullrequest.go
@@ -49,8 +49,8 @@ func (p *PullRequest) IsForkPullRequest() bool {
return p.Head.RepoFullName() != p.Base.RepoFullName()
}
-// GetGitRefName returns pull request relative path to head
-func (p PullRequest) GetGitRefName() string {
+// GetGitHeadRefName returns pull request relative path to head
+func (p PullRequest) GetGitHeadRefName() string {
return fmt.Sprintf("%s%d/head", git.PullPrefix, p.Number)
}
diff --git a/modules/migration/schemas_bindata.go b/modules/migration/schemas_bindata.go
index c5db3b34615..695c2c11352 100644
--- a/modules/migration/schemas_bindata.go
+++ b/modules/migration/schemas_bindata.go
@@ -3,6 +3,28 @@
//go:build bindata
+//go:generate go run ../../build/generate-bindata.go ../../modules/migration/schemas bindata.dat
+
package migration
-//go:generate go run ../../build/generate-bindata.go ../../modules/migration/schemas migration bindata.go
+import (
+ "io"
+ "io/fs"
+ "path"
+ "sync"
+
+ _ "embed"
+
+ "code.gitea.io/gitea/modules/assetfs"
+)
+
+//go:embed bindata.dat
+var bindata []byte
+
+var BuiltinAssets = sync.OnceValue(func() fs.FS {
+ return assetfs.NewEmbeddedFS(bindata)
+})
+
+func openSchema(filename string) (io.ReadCloser, error) {
+ return BuiltinAssets().Open(path.Base(filename))
+}
diff --git a/modules/migration/schemas_static.go b/modules/migration/schemas_static.go
deleted file mode 100644
index 8a0c340a655..00000000000
--- a/modules/migration/schemas_static.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-//go:build bindata
-
-package migration
-
-import (
- "io"
- "path"
-)
-
-func openSchema(filename string) (io.ReadCloser, error) {
- return Assets.Open(path.Base(filename))
-}
diff --git a/modules/optional/option.go b/modules/optional/option.go
index ccbad259c21..cbecf869873 100644
--- a/modules/optional/option.go
+++ b/modules/optional/option.go
@@ -5,6 +5,12 @@ package optional
import "strconv"
+// Option is a generic type that can hold a value of type T or be empty (None).
+//
+// It must use the slice type to work with "chi" form values binding:
+// * non-existing value are represented as an empty slice (None)
+// * existing value is represented as a slice with one element (Some)
+// * multiple values are represented as a slice with multiple elements (Some), the Value is the first element (not well-defined in this case)
type Option[T any] []T
func None[T any]() Option[T] {
@@ -22,6 +28,13 @@ func FromPtr[T any](v *T) Option[T] {
return Some(*v)
}
+func FromMapLookup[K comparable, V any](m map[K]V, k K) Option[V] {
+ if v, ok := m[k]; ok {
+ return Some(v)
+ }
+ return None[V]()
+}
+
func FromNonDefault[T comparable](v T) Option[T] {
var zero T
if v == zero {
diff --git a/modules/optional/option_test.go b/modules/optional/option_test.go
index f600ff5a2c7..ea80a2e3cb4 100644
--- a/modules/optional/option_test.go
+++ b/modules/optional/option_test.go
@@ -56,6 +56,12 @@ func TestOption(t *testing.T) {
opt3 := optional.FromNonDefault(1)
assert.True(t, opt3.Has())
assert.Equal(t, int(1), opt3.Value())
+
+ opt4 := optional.FromMapLookup(map[string]int{"a": 1}, "a")
+ assert.True(t, opt4.Has())
+ assert.Equal(t, 1, opt4.Value())
+ opt4 = optional.FromMapLookup(map[string]int{"a": 1}, "b")
+ assert.False(t, opt4.Has())
}
func Test_ParseBool(t *testing.T) {
diff --git a/modules/optional/serialization_test.go b/modules/optional/serialization_test.go
index 21d3ad84700..cf81a94cfce 100644
--- a/modules/optional/serialization_test.go
+++ b/modules/optional/serialization_test.go
@@ -4,7 +4,7 @@
package optional_test
import (
- std_json "encoding/json" //nolint:depguard
+ std_json "encoding/json" //nolint:depguard // for testing purpose
"testing"
"code.gitea.io/gitea/modules/json"
diff --git a/modules/options/options_bindata.go b/modules/options/options_bindata.go
index 29151cb3cbc..b2321d7eb50 100644
--- a/modules/options/options_bindata.go
+++ b/modules/options/options_bindata.go
@@ -3,6 +3,21 @@
//go:build bindata
+//go:generate go run ../../build/generate-bindata.go ../../options bindata.dat
+
package options
-//go:generate go run ../../build/generate-bindata.go ../../options options bindata.go
+import (
+ "sync"
+
+ _ "embed"
+
+ "code.gitea.io/gitea/modules/assetfs"
+)
+
+//go:embed bindata.dat
+var bindata []byte
+
+var BuiltinAssets = sync.OnceValue(func() *assetfs.Layer {
+ return assetfs.Bindata("builtin(bindata)", assetfs.NewEmbeddedFS(bindata))
+})
diff --git a/modules/options/dynamic.go b/modules/options/options_dynamic.go
similarity index 100%
rename from modules/options/dynamic.go
rename to modules/options/options_dynamic.go
diff --git a/modules/options/static.go b/modules/options/static.go
deleted file mode 100644
index 72b28e990e7..00000000000
--- a/modules/options/static.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-//go:build bindata
-
-package options
-
-import (
- "code.gitea.io/gitea/modules/assetfs"
-)
-
-func BuiltinAssets() *assetfs.Layer {
- return assetfs.Bindata("builtin(bindata)", Assets)
-}
diff --git a/models/packages/container/const.go b/modules/packages/container/const.go
similarity index 65%
rename from models/packages/container/const.go
rename to modules/packages/container/const.go
index 0dfbda051db..6c7c9b46d13 100644
--- a/models/packages/container/const.go
+++ b/modules/packages/container/const.go
@@ -4,6 +4,8 @@
package container
const (
+ ContentTypeDockerDistributionManifestV2 = "application/vnd.docker.distribution.manifest.v2+json"
+
ManifestFilename = "manifest.json"
UploadVersion = "_upload"
)
diff --git a/modules/packages/container/metadata.go b/modules/packages/container/metadata.go
index 2fce7d976ad..3ef0684d13f 100644
--- a/modules/packages/container/metadata.go
+++ b/modules/packages/container/metadata.go
@@ -4,7 +4,6 @@
package container
import (
- "errors"
"fmt"
"io"
"strings"
@@ -72,20 +71,39 @@ type Manifest struct {
Size int64 `json:"size"`
}
+func IsMediaTypeValid(mt string) bool {
+ return strings.HasPrefix(mt, "application/vnd.docker.") || strings.HasPrefix(mt, "application/vnd.oci.")
+}
+
+func IsMediaTypeImageManifest(mt string) bool {
+ return strings.EqualFold(mt, oci.MediaTypeImageManifest) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.v2+json")
+}
+
+func IsMediaTypeImageIndex(mt string) bool {
+ return strings.EqualFold(mt, oci.MediaTypeImageIndex) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.list.v2+json")
+}
+
// ParseImageConfig parses the metadata of an image config
-func ParseImageConfig(mt string, r io.Reader) (*Metadata, error) {
- if strings.EqualFold(mt, helm.ConfigMediaType) {
+func ParseImageConfig(mediaType string, r io.Reader) (*Metadata, error) {
+ if strings.EqualFold(mediaType, helm.ConfigMediaType) {
return parseHelmConfig(r)
}
// fallback to OCI Image Config
- return parseOCIImageConfig(r)
+ // FIXME: this fallback is not right, we should strictly check the media type in the future
+ metadata, err := parseOCIImageConfig(r)
+ if err != nil {
+ if !IsMediaTypeImageManifest(mediaType) {
+ return &Metadata{Platform: "unknown/unknown"}, nil
+ }
+ return nil, err
+ }
+ return metadata, nil
}
func parseOCIImageConfig(r io.Reader) (*Metadata, error) {
var image oci.Image
- // EOF means empty input, still use the default data
- if err := json.NewDecoder(r).Decode(&image); err != nil && !errors.Is(err, io.EOF) {
+ if err := json.NewDecoder(r).Decode(&image); err != nil {
return nil, err
}
diff --git a/modules/packages/container/metadata_test.go b/modules/packages/container/metadata_test.go
index 74b0a379c6f..0f2d702925c 100644
--- a/modules/packages/container/metadata_test.go
+++ b/modules/packages/container/metadata_test.go
@@ -59,10 +59,8 @@ func TestParseImageConfig(t *testing.T) {
assert.ElementsMatch(t, []string{author}, metadata.Authors)
assert.Equal(t, projectURL, metadata.ProjectURL)
assert.Equal(t, repositoryURL, metadata.RepositoryURL)
-}
-func TestParseOCIImageConfig(t *testing.T) {
- metadata, err := parseOCIImageConfig(strings.NewReader(""))
+ metadata, err = ParseImageConfig("anything-unknown", strings.NewReader(""))
require.NoError(t, err)
- assert.Equal(t, &Metadata{Type: TypeOCI, Platform: DefaultPlatform, ImageLayers: []string{}}, metadata)
+ assert.Equal(t, &Metadata{Platform: "unknown/unknown"}, metadata)
}
diff --git a/modules/packages/content_store.go b/modules/packages/content_store.go
index 37612556d7f..57974515e2c 100644
--- a/modules/packages/content_store.go
+++ b/modules/packages/content_store.go
@@ -28,8 +28,7 @@ func NewContentStore() *ContentStore {
return contentStore
}
-// Get gets a package blob
-func (s *ContentStore) Get(key BlobHash256Key) (storage.Object, error) {
+func (s *ContentStore) OpenBlob(key BlobHash256Key) (storage.Object, error) {
return s.store.Open(KeyToRelativePath(key))
}
@@ -37,8 +36,8 @@ func (s *ContentStore) ShouldServeDirect() bool {
return setting.Packages.Storage.ServeDirect()
}
-func (s *ContentStore) GetServeDirectURL(key BlobHash256Key, filename string, reqParams url.Values) (*url.URL, error) {
- return s.store.URL(KeyToRelativePath(key), filename, reqParams)
+func (s *ContentStore) GetServeDirectURL(key BlobHash256Key, filename, method string, reqParams url.Values) (*url.URL, error) {
+ return s.store.URL(KeyToRelativePath(key), filename, method, reqParams)
}
// FIXME: Workaround to be removed in v1.20
diff --git a/modules/packages/npm/creator.go b/modules/packages/npm/creator.go
index 8ba4dbfba71..11b5123c278 100644
--- a/modules/packages/npm/creator.go
+++ b/modules/packages/npm/creator.go
@@ -58,7 +58,7 @@ type PackageMetadata struct {
Time map[string]time.Time `json:"time,omitempty"`
Homepage string `json:"homepage,omitempty"`
Keywords []string `json:"keywords,omitempty"`
- Repository Repository `json:"repository,omitempty"`
+ Repository Repository `json:"repository"`
Author User `json:"author"`
ReadmeFilename string `json:"readmeFilename,omitempty"`
Users map[string]bool `json:"users,omitempty"`
@@ -75,7 +75,7 @@ type PackageMetadataVersion struct {
Author User `json:"author"`
Homepage string `json:"homepage,omitempty"`
License string `json:"license,omitempty"`
- Repository Repository `json:"repository,omitempty"`
+ Repository Repository `json:"repository"`
Keywords []string `json:"keywords,omitempty"`
Dependencies map[string]string `json:"dependencies,omitempty"`
BundleDependencies []string `json:"bundleDependencies,omitempty"`
diff --git a/modules/packages/npm/metadata.go b/modules/packages/npm/metadata.go
index d1d02633878..362d0470d55 100644
--- a/modules/packages/npm/metadata.go
+++ b/modules/packages/npm/metadata.go
@@ -23,5 +23,5 @@ type Metadata struct {
OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"`
Bin map[string]string `json:"bin,omitempty"`
Readme string `json:"readme,omitempty"`
- Repository Repository `json:"repository,omitempty"`
+ Repository Repository `json:"repository"`
}
diff --git a/modules/packages/nuget/metadata.go b/modules/packages/nuget/metadata.go
index 1e98ddffde4..513b4dd2b91 100644
--- a/modules/packages/nuget/metadata.go
+++ b/modules/packages/nuget/metadata.go
@@ -57,14 +57,25 @@ type Package struct {
// Metadata represents the metadata of a Nuget package
type Metadata struct {
- Description string `json:"description,omitempty"`
- ReleaseNotes string `json:"release_notes,omitempty"`
- Readme string `json:"readme,omitempty"`
- Authors string `json:"authors,omitempty"`
- ProjectURL string `json:"project_url,omitempty"`
- RepositoryURL string `json:"repository_url,omitempty"`
- RequireLicenseAcceptance bool `json:"require_license_acceptance"`
- Dependencies map[string][]Dependency `json:"dependencies,omitempty"`
+ Authors string `json:"authors,omitempty"`
+ Copyright string `json:"copyright,omitempty"`
+ Description string `json:"description,omitempty"`
+ DevelopmentDependency bool `json:"development_dependency,omitempty"`
+ IconURL string `json:"icon_url,omitempty"`
+ Language string `json:"language,omitempty"`
+ LicenseURL string `json:"license_url,omitempty"`
+ MinClientVersion string `json:"min_client_version,omitempty"`
+ Owners string `json:"owners,omitempty"`
+ ProjectURL string `json:"project_url,omitempty"`
+ Readme string `json:"readme,omitempty"`
+ ReleaseNotes string `json:"release_notes,omitempty"`
+ RepositoryURL string `json:"repository_url,omitempty"`
+ RequireLicenseAcceptance bool `json:"require_license_acceptance"`
+ Summary string `json:"summary,omitempty"`
+ Tags string `json:"tags,omitempty"`
+ Title string `json:"title,omitempty"`
+
+ Dependencies map[string][]Dependency `json:"dependencies,omitempty"`
}
// Dependency represents a dependency of a Nuget package
@@ -74,24 +85,31 @@ type Dependency struct {
}
// https://learn.microsoft.com/en-us/nuget/reference/nuspec
+// https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Packaging/compiler/resources/nuspec.xsd
type nuspecPackage struct {
Metadata struct {
- ID string `xml:"id"`
- Version string `xml:"version"`
- Authors string `xml:"authors"`
- RequireLicenseAcceptance bool `xml:"requireLicenseAcceptance"`
+ // required fields
+ Authors string `xml:"authors"`
+ Description string `xml:"description"`
+ ID string `xml:"id"`
+ Version string `xml:"version"`
+
+ // optional fields
+ Copyright string `xml:"copyright"`
+ DevelopmentDependency bool `xml:"developmentDependency"`
+ IconURL string `xml:"iconUrl"`
+ Language string `xml:"language"`
+ LicenseURL string `xml:"licenseUrl"`
+ MinClientVersion string `xml:"minClientVersion,attr"`
+ Owners string `xml:"owners"`
ProjectURL string `xml:"projectUrl"`
- Description string `xml:"description"`
- ReleaseNotes string `xml:"releaseNotes"`
Readme string `xml:"readme"`
- PackageTypes struct {
- PackageType []struct {
- Name string `xml:"name,attr"`
- } `xml:"packageType"`
- } `xml:"packageTypes"`
- Repository struct {
- URL string `xml:"url,attr"`
- } `xml:"repository"`
+ ReleaseNotes string `xml:"releaseNotes"`
+ RequireLicenseAcceptance bool `xml:"requireLicenseAcceptance"`
+ Summary string `xml:"summary"`
+ Tags string `xml:"tags"`
+ Title string `xml:"title"`
+
Dependencies struct {
Dependency []struct {
ID string `xml:"id,attr"`
@@ -107,6 +125,14 @@ type nuspecPackage struct {
} `xml:"dependency"`
} `xml:"group"`
} `xml:"dependencies"`
+ PackageTypes struct {
+ PackageType []struct {
+ Name string `xml:"name,attr"`
+ } `xml:"packageType"`
+ } `xml:"packageTypes"`
+ Repository struct {
+ URL string `xml:"url,attr"`
+ } `xml:"repository"`
} `xml:"metadata"`
}
@@ -167,13 +193,24 @@ func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) {
}
m := &Metadata{
- Description: p.Metadata.Description,
- ReleaseNotes: p.Metadata.ReleaseNotes,
Authors: p.Metadata.Authors,
+ Copyright: p.Metadata.Copyright,
+ Description: p.Metadata.Description,
+ DevelopmentDependency: p.Metadata.DevelopmentDependency,
+ IconURL: p.Metadata.IconURL,
+ Language: p.Metadata.Language,
+ LicenseURL: p.Metadata.LicenseURL,
+ MinClientVersion: p.Metadata.MinClientVersion,
+ Owners: p.Metadata.Owners,
ProjectURL: p.Metadata.ProjectURL,
+ ReleaseNotes: p.Metadata.ReleaseNotes,
RepositoryURL: p.Metadata.Repository.URL,
RequireLicenseAcceptance: p.Metadata.RequireLicenseAcceptance,
- Dependencies: make(map[string][]Dependency),
+ Summary: p.Metadata.Summary,
+ Tags: p.Metadata.Tags,
+ Title: p.Metadata.Title,
+
+ Dependencies: make(map[string][]Dependency),
}
if p.Metadata.Readme != "" {
@@ -227,13 +264,13 @@ func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) {
func toNormalizedVersion(v *version.Version) string {
var buf bytes.Buffer
segments := v.Segments64()
- fmt.Fprintf(&buf, "%d.%d.%d", segments[0], segments[1], segments[2])
+ _, _ = fmt.Fprintf(&buf, "%d.%d.%d", segments[0], segments[1], segments[2])
if len(segments) > 3 && segments[3] > 0 {
- fmt.Fprintf(&buf, ".%d", segments[3])
+ _, _ = fmt.Fprintf(&buf, ".%d", segments[3])
}
pre := v.Prerelease()
if pre != "" {
- fmt.Fprint(&buf, "-", pre)
+ _, _ = fmt.Fprint(&buf, "-", pre)
}
return buf.String()
}
diff --git a/modules/packages/nuget/metadata_test.go b/modules/packages/nuget/metadata_test.go
index f466492f8a8..90c3e8dfeb6 100644
--- a/modules/packages/nuget/metadata_test.go
+++ b/modules/packages/nuget/metadata_test.go
@@ -12,44 +12,62 @@ import (
)
const (
- id = "System.Gitea"
- semver = "1.0.1"
- authors = "Gitea Authors"
- projectURL = "https://gitea.io"
- description = "Package Description"
- releaseNotes = "Package Release Notes"
- readme = "Readme"
- repositoryURL = "https://gitea.io/gitea/gitea"
- targetFramework = ".NETStandard2.1"
- dependencyID = "System.Text.Json"
- dependencyVersion = "5.0.0"
+ authors = "Gitea Authors"
+ copyright = "Package Copyright"
+ dependencyID = "System.Text.Json"
+ dependencyVersion = "5.0.0"
+ developmentDependency = true
+ description = "Package Description"
+ iconURL = "https://gitea.io/favicon.png"
+ id = "System.Gitea"
+ language = "Package Language"
+ licenseURL = "https://gitea.io/license"
+ minClientVersion = "1.0.0.0"
+ owners = "Package Owners"
+ projectURL = "https://gitea.io"
+ readme = "Readme"
+ releaseNotes = "Package Release Notes"
+ repositoryURL = "https://gitea.io/gitea/gitea"
+ requireLicenseAcceptance = true
+ tags = "tag_1 tag_2 tag_3"
+ targetFramework = ".NETStandard2.1"
+ title = "Package Title"
+ versionStr = "1.0.1"
)
const nuspecContent = `
-
- ` + id + `
- ` + semver + `
- ` + authors + `
- true
- ` + projectURL + `
- ` + description + `
- ` + releaseNotes + `
-
- README.md
-
-
-
-
-
-
+
+ ` + authors + `
+ ` + copyright + `
+ ` + description + `
+ true
+ ` + iconURL + `
+ ` + id + `
+ ` + language + `
+ ` + licenseURL + `
+ ` + owners + `
+ ` + projectURL + `
+ README.md
+ ` + releaseNotes + `
+
+ true
+ ` + tags + `
+ ` + title + `
+ ` + versionStr + `
+
+
+
+
+
+
`
const symbolsNuspecContent = `
` + id + `
- ` + semver + `
+ ` + versionStr + `
` + description + `
@@ -140,14 +158,26 @@ func TestParsePackageMetaData(t *testing.T) {
assert.NotNil(t, np)
assert.Equal(t, DependencyPackage, np.PackageType)
- assert.Equal(t, id, np.ID)
- assert.Equal(t, semver, np.Version)
assert.Equal(t, authors, np.Metadata.Authors)
- assert.Equal(t, projectURL, np.Metadata.ProjectURL)
assert.Equal(t, description, np.Metadata.Description)
- assert.Equal(t, releaseNotes, np.Metadata.ReleaseNotes)
+ assert.Equal(t, id, np.ID)
+ assert.Equal(t, versionStr, np.Version)
+
+ assert.Equal(t, copyright, np.Metadata.Copyright)
+ assert.Equal(t, developmentDependency, np.Metadata.DevelopmentDependency)
+ assert.Equal(t, iconURL, np.Metadata.IconURL)
+ assert.Equal(t, language, np.Metadata.Language)
+ assert.Equal(t, licenseURL, np.Metadata.LicenseURL)
+ assert.Equal(t, minClientVersion, np.Metadata.MinClientVersion)
+ assert.Equal(t, owners, np.Metadata.Owners)
+ assert.Equal(t, projectURL, np.Metadata.ProjectURL)
assert.Equal(t, readme, np.Metadata.Readme)
+ assert.Equal(t, releaseNotes, np.Metadata.ReleaseNotes)
assert.Equal(t, repositoryURL, np.Metadata.RepositoryURL)
+ assert.Equal(t, requireLicenseAcceptance, np.Metadata.RequireLicenseAcceptance)
+ assert.Equal(t, tags, np.Metadata.Tags)
+ assert.Equal(t, title, np.Metadata.Title)
+
assert.Len(t, np.Metadata.Dependencies, 1)
assert.Contains(t, np.Metadata.Dependencies, targetFramework)
deps := np.Metadata.Dependencies[targetFramework]
@@ -180,7 +210,7 @@ func TestParsePackageMetaData(t *testing.T) {
assert.Equal(t, SymbolsPackage, np.PackageType)
assert.Equal(t, id, np.ID)
- assert.Equal(t, semver, np.Version)
+ assert.Equal(t, versionStr, np.Version)
assert.Equal(t, description, np.Metadata.Description)
assert.Empty(t, np.Metadata.Dependencies)
})
diff --git a/modules/packages/nuget/symbol_extractor.go b/modules/packages/nuget/symbol_extractor.go
index 81bf0371a0b..9c952e1f109 100644
--- a/modules/packages/nuget/symbol_extractor.go
+++ b/modules/packages/nuget/symbol_extractor.go
@@ -34,7 +34,7 @@ type PortablePdbList []*PortablePdb
func (l PortablePdbList) Close() {
for _, pdb := range l {
- pdb.Content.Close()
+ _ = pdb.Content.Close()
}
}
@@ -65,7 +65,7 @@ func ExtractPortablePdb(r io.ReaderAt, size int64) (PortablePdbList, error) {
buf, err := packages.CreateHashedBufferFromReader(f)
- f.Close()
+ _ = f.Close()
if err != nil {
return err
@@ -73,12 +73,12 @@ func ExtractPortablePdb(r io.ReaderAt, size int64) (PortablePdbList, error) {
id, err := ParseDebugHeaderID(buf)
if err != nil {
- buf.Close()
+ _ = buf.Close()
return fmt.Errorf("Invalid PDB file: %w", err)
}
if _, err := buf.Seek(0, io.SeekStart); err != nil {
- buf.Close()
+ _ = buf.Close()
return err
}
diff --git a/modules/packages/nuget/symbol_extractor_test.go b/modules/packages/nuget/symbol_extractor_test.go
index 711ad6d096a..e841e377d98 100644
--- a/modules/packages/nuget/symbol_extractor_test.go
+++ b/modules/packages/nuget/symbol_extractor_test.go
@@ -24,14 +24,14 @@ func TestExtractPortablePdb(t *testing.T) {
var buf bytes.Buffer
archive := zip.NewWriter(&buf)
w, _ := archive.Create(name)
- w.Write(content)
- archive.Close()
+ _, _ = w.Write(content)
+ _ = archive.Close()
return buf.Bytes()
}
t.Run("MissingPdbFiles", func(t *testing.T) {
var buf bytes.Buffer
- zip.NewWriter(&buf).Close()
+ _ = zip.NewWriter(&buf).Close()
pdbs, err := ExtractPortablePdb(bytes.NewReader(buf.Bytes()), int64(buf.Len()))
assert.ErrorIs(t, err, ErrMissingPdbFiles)
diff --git a/modules/packages/pub/metadata.go b/modules/packages/pub/metadata.go
index afb464e4620..9b00472eb27 100644
--- a/modules/packages/pub/metadata.go
+++ b/modules/packages/pub/metadata.go
@@ -88,7 +88,7 @@ func ParsePackage(r io.Reader) (*Package, error) {
if err != nil {
return nil, err
}
- } else if strings.ToLower(hd.Name) == "readme.md" {
+ } else if strings.EqualFold(hd.Name, "readme.md") {
data, err := io.ReadAll(tr)
if err != nil {
return nil, err
diff --git a/modules/packages/rubygems/marshal.go b/modules/packages/rubygems/marshal.go
index 4e6a5fc5f8b..1505221acc7 100644
--- a/modules/packages/rubygems/marshal.go
+++ b/modules/packages/rubygems/marshal.go
@@ -250,7 +250,7 @@ func (e *MarshalEncoder) marshalArray(arr reflect.Value) error {
return err
}
- for i := 0; i < length; i++ {
+ for i := range length {
if err := e.marshal(arr.Index(i).Interface()); err != nil {
return err
}
diff --git a/modules/packages/swift/metadata.go b/modules/packages/swift/metadata.go
index 24c4262ab72..85beb57607a 100644
--- a/modules/packages/swift/metadata.go
+++ b/modules/packages/swift/metadata.go
@@ -47,7 +47,7 @@ type Metadata struct {
Keywords []string `json:"keywords,omitempty"`
RepositoryURL string `json:"repository_url,omitempty"`
License string `json:"license,omitempty"`
- Author Person `json:"author,omitempty"`
+ Author Person `json:"author"`
Manifests map[string]*Manifest `json:"manifests,omitempty"`
}
diff --git a/modules/public/public.go b/modules/public/public.go
index 7f8ce290562..a7eace1538b 100644
--- a/modules/public/public.go
+++ b/modules/public/public.go
@@ -44,7 +44,7 @@ func FileHandlerFunc() http.HandlerFunc {
func parseAcceptEncoding(val string) container.Set[string] {
parts := strings.Split(val, ";")
types := make(container.Set[string])
- for _, v := range strings.Split(parts[0], ",") {
+ for v := range strings.SplitSeq(parts[0], ",") {
types.Add(strings.TrimSpace(v))
}
return types
@@ -89,19 +89,16 @@ func handleRequest(w http.ResponseWriter, req *http.Request, fs http.FileSystem,
servePublicAsset(w, req, fi, fi.ModTime(), f)
}
-type GzipBytesProvider interface {
- GzipBytes() []byte
-}
-
// servePublicAsset serve http content
func servePublicAsset(w http.ResponseWriter, req *http.Request, fi os.FileInfo, modtime time.Time, content io.ReadSeeker) {
setWellKnownContentType(w, fi.Name())
httpcache.SetCacheControlInHeader(w.Header(), httpcache.CacheControlForPublicStatic())
encodings := parseAcceptEncoding(req.Header.Get("Accept-Encoding"))
- if encodings.Contains("gzip") {
- // try to provide gzip content directly from bindata (provided by vfsgen۰CompressedFileInfo)
- if compressed, ok := fi.(GzipBytesProvider); ok {
- rdGzip := bytes.NewReader(compressed.GzipBytes())
+ fiEmbedded, _ := fi.(assetfs.EmbeddedFileInfo)
+ if encodings.Contains("gzip") && fiEmbedded != nil {
+ // try to provide gzip content directly from bindata
+ if gzipBytes, ok := fiEmbedded.GetGzipContent(); ok {
+ rdGzip := bytes.NewReader(gzipBytes)
// all gzipped static files (from bindata) are managed by Gitea, so we can make sure every file has the correct ext name
// then we can get the correct Content-Type, we do not need to do http.DetectContentType on the decompressed data
if w.Header().Get("Content-Type") == "" {
@@ -113,5 +110,4 @@ func servePublicAsset(w http.ResponseWriter, req *http.Request, fi os.FileInfo,
}
}
http.ServeContent(w, req, fi.Name(), modtime, content)
- return
}
diff --git a/modules/public/public_bindata.go b/modules/public/public_bindata.go
index 4878f88ad1d..2dcf3e72e4e 100644
--- a/modules/public/public_bindata.go
+++ b/modules/public/public_bindata.go
@@ -5,4 +5,19 @@
package public
-//go:generate go run ../../build/generate-bindata.go ../../public public bindata.go true
+//go:generate go run ../../build/generate-bindata.go ../../public bindata.dat
+
+import (
+ "sync"
+
+ _ "embed"
+
+ "code.gitea.io/gitea/modules/assetfs"
+)
+
+//go:embed bindata.dat
+var bindata []byte
+
+var BuiltinAssets = sync.OnceValue(func() *assetfs.Layer {
+ return assetfs.Bindata("builtin(bindata)", assetfs.NewEmbeddedFS(bindata))
+})
diff --git a/modules/public/serve_dynamic.go b/modules/public/public_dynamic.go
similarity index 100%
rename from modules/public/serve_dynamic.go
rename to modules/public/public_dynamic.go
diff --git a/modules/public/serve_static.go b/modules/public/serve_static.go
deleted file mode 100644
index e79085021ea..00000000000
--- a/modules/public/serve_static.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-//go:build bindata
-
-package public
-
-import (
- "time"
-
- "code.gitea.io/gitea/modules/assetfs"
- "code.gitea.io/gitea/modules/timeutil"
-)
-
-var _ GzipBytesProvider = (*vfsgen۰CompressedFileInfo)(nil)
-
-// GlobalModTime provide a global mod time for embedded asset files
-func GlobalModTime(filename string) time.Time {
- return timeutil.GetExecutableModTime()
-}
-
-func BuiltinAssets() *assetfs.Layer {
- return assetfs.Bindata("builtin(bindata)", Assets)
-}
diff --git a/modules/queue/base_levelqueue_common.go b/modules/queue/base_levelqueue_common.go
index 78d3b85a8a2..d37093b84dc 100644
--- a/modules/queue/base_levelqueue_common.go
+++ b/modules/queue/base_levelqueue_common.go
@@ -83,7 +83,7 @@ func prepareLevelDB(cfg *BaseConfig) (conn string, db *leveldb.DB, err error) {
}
conn = cfg.ConnStr
}
- for i := 0; i < 10; i++ {
+ for range 10 {
if db, err = nosql.GetManager().GetLevelDB(conn); err == nil {
break
}
diff --git a/modules/queue/base_redis.go b/modules/queue/base_redis.go
index a1e234943d2..bea0fd7a985 100644
--- a/modules/queue/base_redis.go
+++ b/modules/queue/base_redis.go
@@ -29,7 +29,7 @@ func newBaseRedisGeneric(cfg *BaseConfig, unique bool) (baseQueue, error) {
client := nosql.GetManager().GetRedisClient(cfg.ConnStr)
var err error
- for i := 0; i < 10; i++ {
+ for range 10 {
err = client.Ping(graceful.GetManager().ShutdownContext()).Err()
if err == nil {
break
diff --git a/modules/queue/base_test.go b/modules/queue/base_test.go
index 1a96ac1e1d3..8e7c18d7407 100644
--- a/modules/queue/base_test.go
+++ b/modules/queue/base_test.go
@@ -87,7 +87,7 @@ func testQueueBasic(t *testing.T, newFn func(cfg *BaseConfig) (baseQueue, error)
// test blocking push if queue is full
for i := 0; i < cfg.Length; i++ {
- err = q.PushItem(ctx, []byte(fmt.Sprintf("item-%d", i)))
+ err = q.PushItem(ctx, fmt.Appendf(nil, "item-%d", i))
assert.NoError(t, err)
}
ctxTimed, cancel = context.WithTimeout(ctx, 10*time.Millisecond)
diff --git a/modules/queue/manager.go b/modules/queue/manager.go
index 079e2bee7a7..ae6c51872dd 100644
--- a/modules/queue/manager.go
+++ b/modules/queue/manager.go
@@ -6,6 +6,7 @@ package queue
import (
"context"
"errors"
+ "maps"
"sync"
"time"
@@ -70,9 +71,7 @@ func (m *Manager) ManagedQueues() map[int64]ManagedWorkerPoolQueue {
defer m.mu.Unlock()
queues := make(map[int64]ManagedWorkerPoolQueue, len(m.Queues))
- for k, v := range m.Queues {
- queues[k] = v
- }
+ maps.Copy(queues, m.Queues)
return queues
}
diff --git a/modules/queue/workerqueue_test.go b/modules/queue/workerqueue_test.go
index 487c2f1a92e..a6c369d5f9b 100644
--- a/modules/queue/workerqueue_test.go
+++ b/modules/queue/workerqueue_test.go
@@ -77,17 +77,17 @@ func TestWorkerPoolQueueUnhandled(t *testing.T) {
runCount := 2 // we can run these tests even hundreds times to see its stability
t.Run("1/1", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
test(t, setting.QueueSettings{BatchLength: 1, MaxWorkers: 1})
}
})
t.Run("3/1", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
test(t, setting.QueueSettings{BatchLength: 3, MaxWorkers: 1})
}
})
t.Run("4/5", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
test(t, setting.QueueSettings{BatchLength: 4, MaxWorkers: 5})
}
})
@@ -96,17 +96,17 @@ func TestWorkerPoolQueueUnhandled(t *testing.T) {
func TestWorkerPoolQueuePersistence(t *testing.T) {
runCount := 2 // we can run these tests even hundreds times to see its stability
t.Run("1/1", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
testWorkerPoolQueuePersistence(t, setting.QueueSettings{BatchLength: 1, MaxWorkers: 1, Length: 100})
}
})
t.Run("3/1", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
testWorkerPoolQueuePersistence(t, setting.QueueSettings{BatchLength: 3, MaxWorkers: 1, Length: 100})
}
})
t.Run("4/5", func(t *testing.T) {
- for i := 0; i < runCount; i++ {
+ for range runCount {
testWorkerPoolQueuePersistence(t, setting.QueueSettings{BatchLength: 4, MaxWorkers: 5, Length: 100})
}
})
@@ -141,7 +141,7 @@ func testWorkerPoolQueuePersistence(t *testing.T, queueSetting setting.QueueSett
q, _ := newWorkerPoolQueueForTest("pr_patch_checker_test", queueSetting, testHandler, true)
stop := runWorkerPoolQueue(q)
- for i := 0; i < testCount; i++ {
+ for i := range testCount {
_ = q.Push("task-" + strconv.Itoa(i))
}
close(startWhenAllReady)
@@ -186,7 +186,7 @@ func TestWorkerPoolQueueActiveWorkers(t *testing.T) {
q, _ := newWorkerPoolQueueForTest("test-workpoolqueue", setting.QueueSettings{Type: "channel", BatchLength: 1, MaxWorkers: 1, Length: 100}, handler, false)
stop := runWorkerPoolQueue(q)
- for i := 0; i < 5; i++ {
+ for i := range 5 {
assert.NoError(t, q.Push(i))
}
@@ -202,7 +202,7 @@ func TestWorkerPoolQueueActiveWorkers(t *testing.T) {
q, _ = newWorkerPoolQueueForTest("test-workpoolqueue", setting.QueueSettings{Type: "channel", BatchLength: 1, MaxWorkers: 3, Length: 100}, handler, false)
stop = runWorkerPoolQueue(q)
- for i := 0; i < 15; i++ {
+ for i := range 15 {
assert.NoError(t, q.Push(i))
}
@@ -274,7 +274,7 @@ func TestWorkerPoolQueueWorkerIdleReset(t *testing.T) {
}
q, _ = newWorkerPoolQueueForTest("test-workpoolqueue", setting.QueueSettings{Type: "channel", BatchLength: 1, MaxWorkers: 2, Length: 100}, handler, false)
stop := runWorkerPoolQueue(q)
- for i := 0; i < 100; i++ {
+ for i := range 100 {
assert.NoError(t, q.Push(i))
}
time.Sleep(500 * time.Millisecond)
diff --git a/modules/repository/branch.go b/modules/repository/branch.go
index 2bf9930f19f..30aa0a6e85e 100644
--- a/modules/repository/branch.go
+++ b/modules/repository/branch.go
@@ -41,11 +41,12 @@ func SyncRepoBranchesWithRepo(ctx context.Context, repo *repo_model.Repository,
if err != nil {
return 0, fmt.Errorf("GetObjectFormat: %w", err)
}
- _, err = db.GetEngine(ctx).ID(repo.ID).Update(&repo_model.Repository{ObjectFormatName: objFmt.Name()})
- if err != nil {
- return 0, fmt.Errorf("UpdateRepository: %w", err)
+ if objFmt.Name() != repo.ObjectFormatName {
+ repo.ObjectFormatName = objFmt.Name()
+ if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "object_format_name"); err != nil {
+ return 0, fmt.Errorf("UpdateRepositoryColsWithAutoTime: %w", err)
+ }
}
- repo.ObjectFormatName = objFmt.Name() // keep consistent with db
allBranches := container.Set[string]{}
{
diff --git a/modules/repository/branch_test.go b/modules/repository/branch_test.go
index ead28aa1416..262a35fbf7d 100644
--- a/modules/repository/branch_test.go
+++ b/modules/repository/branch_test.go
@@ -16,16 +16,16 @@ import (
func TestSyncRepoBranches(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- _, err := db.GetEngine(db.DefaultContext).ID(1).Update(&repo_model.Repository{ObjectFormatName: "bad-fmt"})
- assert.NoError(t, db.TruncateBeans(db.DefaultContext, &git_model.Branch{}))
+ _, err := db.GetEngine(t.Context()).ID(1).Update(&repo_model.Repository{ObjectFormatName: "bad-fmt"})
+ assert.NoError(t, db.TruncateBeans(t.Context(), &git_model.Branch{}))
assert.NoError(t, err)
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
assert.Equal(t, "bad-fmt", repo.ObjectFormatName)
- _, err = SyncRepoBranches(db.DefaultContext, 1, 0)
+ _, err = SyncRepoBranches(t.Context(), 1, 0)
assert.NoError(t, err)
repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
assert.Equal(t, "sha1", repo.ObjectFormatName)
- branch, err := git_model.GetBranch(db.DefaultContext, 1, "master")
+ branch, err := git_model.GetBranch(t.Context(), 1, "master")
assert.NoError(t, err)
assert.Equal(t, "master", branch.Name)
}
diff --git a/modules/repository/commits_test.go b/modules/repository/commits_test.go
index 030cd7714d7..04c07118283 100644
--- a/modules/repository/commits_test.go
+++ b/modules/repository/commits_test.go
@@ -8,7 +8,6 @@ import (
"testing"
"time"
- "code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/git"
@@ -50,7 +49,7 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
pushCommits.HeadCommit = &PushCommit{Sha1: "69554a6"}
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 16})
- payloadCommits, headCommit, err := pushCommits.ToAPIPayloadCommits(git.DefaultContext, repo)
+ payloadCommits, headCommit, err := pushCommits.ToAPIPayloadCommits(t.Context(), repo)
assert.NoError(t, err)
assert.Len(t, payloadCommits, 3)
assert.NotNil(t, headCommit)
@@ -125,11 +124,11 @@ func TestPushCommits_AvatarLink(t *testing.T) {
assert.Equal(t,
"/avatars/ab53a2911ddf9b4817ac01ddcd3d975f?size="+strconv.Itoa(28*setting.Avatar.RenderedSizeFactor),
- pushCommits.AvatarLink(db.DefaultContext, "user2@example.com"))
+ pushCommits.AvatarLink(t.Context(), "user2@example.com"))
assert.Equal(t,
"/assets/img/avatar_default.png",
- pushCommits.AvatarLink(db.DefaultContext, "nonexistent@example.com"))
+ pushCommits.AvatarLink(t.Context(), "nonexistent@example.com"))
}
func TestCommitToPushCommit(t *testing.T) {
diff --git a/modules/repository/create_test.go b/modules/repository/create_test.go
index b85a10adad4..68b0f4dea14 100644
--- a/modules/repository/create_test.go
+++ b/modules/repository/create_test.go
@@ -6,7 +6,6 @@ package repository
import (
"testing"
- "code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
@@ -15,7 +14,7 @@ import (
func TestGetDirectorySize(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 1)
+ repo, err := repo_model.GetRepositoryByID(t.Context(), 1)
assert.NoError(t, err)
size, err := getDirectorySize(repo.RepoPath())
assert.NoError(t, err)
diff --git a/modules/repository/init.go b/modules/repository/init.go
index 91d48897827..12e9606c740 100644
--- a/modules/repository/init.go
+++ b/modules/repository/init.go
@@ -125,7 +125,7 @@ func InitializeLabels(ctx context.Context, id int64, labelTemplate string, isOrg
}
labels := make([]*issues_model.Label, len(list))
- for i := 0; i < len(list); i++ {
+ for i := range list {
labels[i] = &issues_model.Label{
Name: list[i].Name,
Exclusive: list[i].Exclusive,
diff --git a/modules/reqctx/datastore.go b/modules/reqctx/datastore.go
index d025dad7f34..1d4bee613f8 100644
--- a/modules/reqctx/datastore.go
+++ b/modules/reqctx/datastore.go
@@ -6,6 +6,7 @@ package reqctx
import (
"context"
"io"
+ "maps"
"sync"
"code.gitea.io/gitea/modules/process"
@@ -22,9 +23,7 @@ func (ds ContextData) GetData() ContextData {
}
func (ds ContextData) MergeFrom(other ContextData) ContextData {
- for k, v := range other {
- ds[k] = v
- }
+ maps.Copy(ds, other)
return ds
}
diff --git a/modules/session/db.go b/modules/session/db.go
index 9909f2dc1e9..7b5be1bc705 100644
--- a/modules/session/db.go
+++ b/modules/session/db.go
@@ -4,11 +4,11 @@
package session
import (
+ "context"
"log"
"sync"
"code.gitea.io/gitea/models/auth"
- "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
"gitea.com/go-chi/session"
@@ -21,6 +21,10 @@ type DBStore struct {
data map[any]any
}
+func dbContext() context.Context {
+ return context.Background()
+}
+
// NewDBStore creates and returns a DB session store.
func NewDBStore(sid string, kv map[any]any) *DBStore {
return &DBStore{
@@ -72,7 +76,7 @@ func (s *DBStore) Release() error {
return err
}
- return auth.UpdateSession(db.DefaultContext, s.sid, data)
+ return auth.UpdateSession(dbContext(), s.sid, data)
}
// Flush deletes all session data.
@@ -98,7 +102,7 @@ func (p *DBProvider) Init(maxLifetime int64, connStr string) error {
// Read returns raw session store by session ID.
func (p *DBProvider) Read(sid string) (session.RawStore, error) {
- s, err := auth.ReadSession(db.DefaultContext, sid)
+ s, err := auth.ReadSession(dbContext(), sid)
if err != nil {
return nil, err
}
@@ -118,7 +122,7 @@ func (p *DBProvider) Read(sid string) (session.RawStore, error) {
// Exist returns true if session with given ID exists.
func (p *DBProvider) Exist(sid string) bool {
- has, err := auth.ExistSession(db.DefaultContext, sid)
+ has, err := auth.ExistSession(dbContext(), sid)
if err != nil {
panic("session/DB: error checking existence: " + err.Error())
}
@@ -127,12 +131,12 @@ func (p *DBProvider) Exist(sid string) bool {
// Destroy deletes a session by session ID.
func (p *DBProvider) Destroy(sid string) error {
- return auth.DestroySession(db.DefaultContext, sid)
+ return auth.DestroySession(dbContext(), sid)
}
// Regenerate regenerates a session store from old session ID to new one.
func (p *DBProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err error) {
- s, err := auth.RegenerateSession(db.DefaultContext, oldsid, sid)
+ s, err := auth.RegenerateSession(dbContext(), oldsid, sid)
if err != nil {
return nil, err
}
@@ -152,7 +156,7 @@ func (p *DBProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err err
// Count counts and returns number of sessions.
func (p *DBProvider) Count() int {
- total, err := auth.CountSessions(db.DefaultContext)
+ total, err := auth.CountSessions(dbContext())
if err != nil {
panic("session/DB: error counting records: " + err.Error())
}
@@ -161,7 +165,7 @@ func (p *DBProvider) Count() int {
// GC calls GC to clean expired sessions.
func (p *DBProvider) GC() {
- if err := auth.CleanupSessions(db.DefaultContext, p.maxLifetime); err != nil {
+ if err := auth.CleanupSessions(dbContext(), p.maxLifetime); err != nil {
log.Printf("session/DB: error garbage collecting: %v", err)
}
}
diff --git a/modules/session/mem.go b/modules/session/mem.go
new file mode 100644
index 00000000000..bb807bc91a1
--- /dev/null
+++ b/modules/session/mem.go
@@ -0,0 +1,68 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package session
+
+import (
+ "bytes"
+ "encoding/gob"
+ "net/http"
+
+ "gitea.com/go-chi/session"
+)
+
+type mockMemRawStore struct {
+ s *session.MemStore
+}
+
+var _ session.RawStore = (*mockMemRawStore)(nil)
+
+func (m *mockMemRawStore) Set(k, v any) error {
+ // We need to use gob to encode the value, to make it have the same behavior as other stores and catch abuses.
+ // Because gob needs to "Register" the type before it can encode it, and it's unable to decode a struct to "any" so use a map to help to decode the value.
+ var buf bytes.Buffer
+ if err := gob.NewEncoder(&buf).Encode(map[string]any{"v": v}); err != nil {
+ return err
+ }
+ return m.s.Set(k, buf.Bytes())
+}
+
+func (m *mockMemRawStore) Get(k any) (ret any) {
+ v, ok := m.s.Get(k).([]byte)
+ if !ok {
+ return nil
+ }
+ var w map[string]any
+ _ = gob.NewDecoder(bytes.NewBuffer(v)).Decode(&w)
+ return w["v"]
+}
+
+func (m *mockMemRawStore) Delete(k any) error {
+ return m.s.Delete(k)
+}
+
+func (m *mockMemRawStore) ID() string {
+ return m.s.ID()
+}
+
+func (m *mockMemRawStore) Release() error {
+ return m.s.Release()
+}
+
+func (m *mockMemRawStore) Flush() error {
+ return m.s.Flush()
+}
+
+type mockMemStore struct {
+ *mockMemRawStore
+}
+
+var _ Store = (*mockMemStore)(nil)
+
+func (m mockMemStore) Destroy(writer http.ResponseWriter, request *http.Request) error {
+ return nil
+}
+
+func NewMockMemStore(sid string) Store {
+ return &mockMemStore{&mockMemRawStore{session.NewMemStore(sid)}}
+}
diff --git a/modules/session/mock.go b/modules/session/mock.go
deleted file mode 100644
index 95231a3655f..00000000000
--- a/modules/session/mock.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2024 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package session
-
-import (
- "net/http"
-
- "gitea.com/go-chi/session"
-)
-
-type MockStore struct {
- *session.MemStore
-}
-
-func (m *MockStore) Destroy(writer http.ResponseWriter, request *http.Request) error {
- return nil
-}
-
-type mockStoreContextKeyStruct struct{}
-
-var MockStoreContextKey = mockStoreContextKeyStruct{}
-
-func NewMockStore(sid string) *MockStore {
- return &MockStore{session.NewMemStore(sid)}
-}
diff --git a/modules/session/store.go b/modules/session/store.go
index 09d1ef44dd7..0217ed97aca 100644
--- a/modules/session/store.go
+++ b/modules/session/store.go
@@ -11,25 +11,25 @@ import (
"gitea.com/go-chi/session"
)
-// Store represents a session store
+type RawStore = session.RawStore
+
type Store interface {
- Get(any) any
- Set(any, any) error
- Delete(any) error
- ID() string
- Release() error
- Flush() error
+ RawStore
Destroy(http.ResponseWriter, *http.Request) error
}
+type mockStoreContextKeyStruct struct{}
+
+var MockStoreContextKey = mockStoreContextKeyStruct{}
+
// RegenerateSession regenerates the underlying session and returns the new store
func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
for _, f := range BeforeRegenerateSession {
f(resp, req)
}
if setting.IsInTesting {
- if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
- return store, nil
+ if store := req.Context().Value(MockStoreContextKey); store != nil {
+ return store.(Store), nil
}
}
return session.RegenerateSession(resp, req)
@@ -37,8 +37,8 @@ func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, erro
func GetContextSession(req *http.Request) Store {
if setting.IsInTesting {
- if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
- return store
+ if store := req.Context().Value(MockStoreContextKey); store != nil {
+ return store.(Store)
}
}
return session.GetSession(req)
diff --git a/modules/session/virtual.go b/modules/session/virtual.go
index 80352b6e721..2e29b5fc6f6 100644
--- a/modules/session/virtual.go
+++ b/modules/session/virtual.go
@@ -22,8 +22,8 @@ type VirtualSessionProvider struct {
provider session.Provider
}
-// Init initializes the cookie session provider with given root path.
-func (o *VirtualSessionProvider) Init(gclifetime int64, config string) error {
+// Init initializes the cookie session provider with the given config.
+func (o *VirtualSessionProvider) Init(gcLifetime int64, config string) error {
var opts session.Options
if err := json.Unmarshal([]byte(config), &opts); err != nil {
return err
@@ -52,7 +52,7 @@ func (o *VirtualSessionProvider) Init(gclifetime int64, config string) error {
default:
return fmt.Errorf("VirtualSessionProvider: Unknown Provider: %s", opts.Provider)
}
- return o.provider.Init(gclifetime, opts.ProviderConfig)
+ return o.provider.Init(gcLifetime, opts.ProviderConfig)
}
// Read returns raw session store by session ID.
diff --git a/modules/setting/actions.go b/modules/setting/actions.go
index 913872eaf23..34346b62cf4 100644
--- a/modules/setting/actions.go
+++ b/modules/setting/actions.go
@@ -24,7 +24,7 @@ var (
ZombieTaskTimeout time.Duration `ini:"ZOMBIE_TASK_TIMEOUT"`
EndlessTaskTimeout time.Duration `ini:"ENDLESS_TASK_TIMEOUT"`
AbandonedJobTimeout time.Duration `ini:"ABANDONED_JOB_TIMEOUT"`
- SkipWorkflowStrings []string `ìni:"SKIP_WORKFLOW_STRINGS"`
+ SkipWorkflowStrings []string `ini:"SKIP_WORKFLOW_STRINGS"`
}{
Enabled: true,
DefaultActionsURL: defaultActionsURLGitHub,
@@ -62,11 +62,11 @@ func (c logCompression) IsValid() bool {
}
func (c logCompression) IsNone() bool {
- return strings.ToLower(string(c)) == "none"
+ return string(c) == "none"
}
func (c logCompression) IsZstd() bool {
- return c == "" || strings.ToLower(string(c)) == "zstd"
+ return c == "" || string(c) == "zstd"
}
func loadActionsFrom(rootCfg ConfigProvider) error {
diff --git a/modules/setting/config.go b/modules/setting/config.go
index 03558574c21..4c5d2df7d8a 100644
--- a/modules/setting/config.go
+++ b/modules/setting/config.go
@@ -49,6 +49,7 @@ func DefaultOpenWithEditorApps() OpenWithEditorAppsType {
type RepositoryStruct struct {
OpenWithEditorApps *config.Value[OpenWithEditorAppsType]
+ GitGuideRemoteName *config.Value[string]
}
type ConfigStruct struct {
@@ -70,6 +71,7 @@ func initDefaultConfig() {
},
Repository: &RepositoryStruct{
OpenWithEditorApps: config.ValueJSON[OpenWithEditorAppsType]("repository.open-with.editor-apps"),
+ GitGuideRemoteName: config.ValueJSON[string]("repository.git-guide-remote-name").WithDefault("origin"),
},
}
}
diff --git a/modules/setting/config/value.go b/modules/setting/config/value.go
index f0ec1205447..301c60f5e82 100644
--- a/modules/setting/config/value.go
+++ b/modules/setting/config/value.go
@@ -46,7 +46,7 @@ func (value *Value[T]) Value(ctx context.Context) (v T) {
rev := dg.GetRevision(ctx)
- // if the revision in database doesn't change, use the last value
+ // if the revision in the database doesn't change, use the last value
value.mu.RLock()
if rev == value.revision {
v = value.value
@@ -84,6 +84,10 @@ func (value *Value[T]) WithDefault(def T) *Value[T] {
return value
}
+func (value *Value[T]) DefaultValue() T {
+ return value.def
+}
+
func (value *Value[T]) WithFileConfig(cfgSecKey CfgSecKey) *Value[T] {
value.cfgSecKey = cfgSecKey
return value
diff --git a/modules/setting/config_env.go b/modules/setting/config_env.go
index 5d94a9641f7..409588dc441 100644
--- a/modules/setting/config_env.go
+++ b/modules/setting/config_env.go
@@ -97,7 +97,7 @@ func decodeEnvSectionKey(encoded string) (ok bool, section, key string) {
// decodeEnvironmentKey decode the environment key to section and key
// The environment key is in the form of GITEA__SECTION__KEY or GITEA__SECTION__KEY__FILE
-func decodeEnvironmentKey(prefixGitea, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) { //nolint:unparam
+func decodeEnvironmentKey(prefixGitea, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) {
if !strings.HasPrefix(envKey, prefixGitea) {
return false, "", "", false
}
diff --git a/modules/setting/config_env_test.go b/modules/setting/config_env_test.go
index 217ea538603..7d270ac21ad 100644
--- a/modules/setting/config_env_test.go
+++ b/modules/setting/config_env_test.go
@@ -73,6 +73,9 @@ func TestDecodeEnvironmentKey(t *testing.T) {
assert.Equal(t, "sec", section)
assert.Equal(t, "KEY", key)
assert.True(t, file)
+
+ ok, _, _, _ = decodeEnvironmentKey("PREFIX__", "", "PREFIX__SEC__KEY")
+ assert.True(t, ok)
}
func TestEnvironmentToConfig(t *testing.T) {
diff --git a/modules/setting/config_provider.go b/modules/setting/config_provider.go
index a0c53a10325..09eaaefdaff 100644
--- a/modules/setting/config_provider.go
+++ b/modules/setting/config_provider.go
@@ -15,7 +15,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/util"
- "gopkg.in/ini.v1" //nolint:depguard
+ "gopkg.in/ini.v1" //nolint:depguard // wrapper for this package
)
type ConfigKey interface {
diff --git a/modules/setting/cron_test.go b/modules/setting/cron_test.go
index 39a228068a0..53996b5de9b 100644
--- a/modules/setting/cron_test.go
+++ b/modules/setting/cron_test.go
@@ -41,3 +41,56 @@ EXTEND = true
assert.Equal(t, "white rabbit", extended.Second)
assert.True(t, extended.Extend)
}
+
+// Test_getCronSettings2 tests that getCronSettings can not handle two levels of embedding
+func Test_getCronSettings2(t *testing.T) {
+ type BaseStruct struct {
+ Enabled bool
+ RunAtStart bool
+ Schedule string
+ }
+
+ type Extended struct {
+ BaseStruct
+ Extend bool
+ }
+ type Extended2 struct {
+ Extended
+ Third string
+ }
+
+ iniStr := `
+[cron.test]
+ENABLED = TRUE
+RUN_AT_START = TRUE
+SCHEDULE = @every 1h
+EXTEND = true
+THIRD = white rabbit
+`
+ cfg, err := NewConfigProviderFromData(iniStr)
+ assert.NoError(t, err)
+
+ extended := &Extended2{
+ Extended: Extended{
+ BaseStruct: BaseStruct{
+ Enabled: false,
+ RunAtStart: false,
+ Schedule: "@every 72h",
+ },
+ Extend: false,
+ },
+ Third: "black rabbit",
+ }
+
+ _, err = getCronSettings(cfg, "test", extended)
+ assert.NoError(t, err)
+
+ // This confirms the first level of embedding works
+ assert.Equal(t, "white rabbit", extended.Third)
+ assert.True(t, extended.Extend)
+
+ // This confirms 2 levels of embedding doesn't work
+ assert.False(t, extended.Enabled)
+ assert.False(t, extended.RunAtStart)
+ assert.Equal(t, "@every 72h", extended.Schedule)
+}
diff --git a/modules/setting/indexer.go b/modules/setting/indexer.go
index e34baae012b..ace7eec70eb 100644
--- a/modules/setting/indexer.go
+++ b/modules/setting/indexer.go
@@ -96,7 +96,7 @@ func loadIndexerFrom(rootCfg ConfigProvider) {
// IndexerGlobFromString parses a comma separated list of patterns and returns a glob.Glob slice suited for repo indexing
func IndexerGlobFromString(globstr string) []*GlobMatcher {
extarr := make([]*GlobMatcher, 0, 10)
- for _, expr := range strings.Split(strings.ToLower(globstr), ",") {
+ for expr := range strings.SplitSeq(strings.ToLower(globstr), ",") {
expr = strings.TrimSpace(expr)
if expr != "" {
if g, err := GlobMatcherCompile(expr, '.', '/'); err != nil {
diff --git a/modules/setting/log.go b/modules/setting/log.go
index 614d9ee75a8..59866c76055 100644
--- a/modules/setting/log.go
+++ b/modules/setting/log.go
@@ -227,8 +227,8 @@ func initLoggerByName(manager *log.LoggerManager, rootCfg ConfigProvider, logger
}
var eventWriters []log.EventWriter
- modes := strings.Split(modeVal, ",")
- for _, modeName := range modes {
+ modes := strings.SplitSeq(modeVal, ",")
+ for modeName := range modes {
modeName = strings.TrimSpace(modeName)
if modeName == "" {
continue
diff --git a/modules/setting/markup.go b/modules/setting/markup.go
index 365af05fcfa..057b0650c30 100644
--- a/modules/setting/markup.go
+++ b/modules/setting/markup.go
@@ -149,8 +149,8 @@ func loadMarkupFrom(rootCfg ConfigProvider) {
func newMarkupSanitizer(name string, sec ConfigSection) {
rule, ok := createMarkupSanitizerRule(name, sec)
if ok {
- if strings.HasPrefix(name, "sanitizer.") {
- names := strings.SplitN(strings.TrimPrefix(name, "sanitizer."), ".", 2)
+ if after, found := strings.CutPrefix(name, "sanitizer."); found {
+ names := strings.SplitN(after, ".", 2)
name = names[0]
}
for _, renderer := range ExternalMarkupRenderers {
diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go
index 3aa530a1f48..300711789db 100644
--- a/modules/setting/mirror.go
+++ b/modules/setting/mirror.go
@@ -48,11 +48,7 @@ func loadMirrorFrom(rootCfg ConfigProvider) {
Mirror.MinInterval = 1 * time.Minute
}
if Mirror.DefaultInterval < Mirror.MinInterval {
- if time.Hour*8 < Mirror.MinInterval {
- Mirror.DefaultInterval = Mirror.MinInterval
- } else {
- Mirror.DefaultInterval = time.Hour * 8
- }
+ Mirror.DefaultInterval = max(time.Hour*8, Mirror.MinInterval)
log.Warn("Mirror.DefaultInterval is less than Mirror.MinInterval, set to %s", Mirror.DefaultInterval.String())
}
}
diff --git a/modules/setting/oauth2.go b/modules/setting/oauth2.go
index 0d3e63e0b4a..1a88f3cb082 100644
--- a/modules/setting/oauth2.go
+++ b/modules/setting/oauth2.go
@@ -12,7 +12,7 @@ import (
"code.gitea.io/gitea/modules/log"
)
-// OAuth2UsernameType is enum describing the way gitea 'name' should be generated from oauth2 data
+// OAuth2UsernameType is enum describing the way gitea generates its 'username' from oauth2 data
type OAuth2UsernameType string
const (
diff --git a/modules/setting/repository.go b/modules/setting/repository.go
index c6bdc65b321..318cf411085 100644
--- a/modules/setting/repository.go
+++ b/modules/setting/repository.go
@@ -100,11 +100,13 @@ var (
SigningKey string
SigningName string
SigningEmail string
+ SigningFormat string
InitialCommit []string
CRUDActions []string `ini:"CRUD_ACTIONS"`
Merges []string
Wiki []string
DefaultTrustModel string
+ TrustedSSHKeys []string `ini:"TRUSTED_SSH_KEYS"`
} `ini:"repository.signing"`
}{
DetectedCharsetsOrder: []string{
@@ -242,20 +244,24 @@ var (
SigningKey string
SigningName string
SigningEmail string
+ SigningFormat string
InitialCommit []string
CRUDActions []string `ini:"CRUD_ACTIONS"`
Merges []string
Wiki []string
DefaultTrustModel string
+ TrustedSSHKeys []string `ini:"TRUSTED_SSH_KEYS"`
}{
SigningKey: "default",
SigningName: "",
SigningEmail: "",
+ SigningFormat: "openpgp", // git.SigningKeyFormatOpenPGP
InitialCommit: []string{"always"},
CRUDActions: []string{"pubkey", "twofa", "parentsigned"},
Merges: []string{"pubkey", "twofa", "basesigned", "commitssigned"},
Wiki: []string{"never"},
DefaultTrustModel: "collaborator",
+ TrustedSSHKeys: []string{},
},
}
RepoRootPath string
diff --git a/modules/setting/security.go b/modules/setting/security.go
index 3ae4c005c7b..153b6bc944f 100644
--- a/modules/setting/security.go
+++ b/modules/setting/security.go
@@ -111,7 +111,7 @@ func loadSecurityFrom(rootCfg ConfigProvider) {
if SecretKey == "" {
// FIXME: https://github.com/go-gitea/gitea/issues/16832
// Until it supports rotating an existing secret key, we shouldn't move users off of the widely used default value
- SecretKey = "!#@FDEWREWR&*(" //nolint:gosec
+ SecretKey = "!#@FDEWREWR&*("
}
CookieRememberName = sec.Key("COOKIE_REMEMBER_NAME").MustString("gitea_incredible")
diff --git a/modules/setting/server.go b/modules/setting/server.go
index 8a22f6a8448..38e166e02ad 100644
--- a/modules/setting/server.go
+++ b/modules/setting/server.go
@@ -275,7 +275,7 @@ func loadServerFrom(rootCfg ConfigProvider) {
HTTPAddr = filepath.Join(AppWorkPath, HTTPAddr)
}
default:
- log.Fatal("Invalid PROTOCOL %q", Protocol)
+ log.Fatal("Invalid PROTOCOL %q", protocolCfg)
}
UseProxyProtocol = sec.Key("USE_PROXY_PROTOCOL").MustBool(false)
ProxyProtocolTLSBridging = sec.Key("PROXY_PROTOCOL_TLS_BRIDGING").MustBool(false)
diff --git a/modules/setting/storage.go b/modules/setting/storage.go
index e1d9b1fa7aa..ee246158d94 100644
--- a/modules/setting/storage.go
+++ b/modules/setting/storage.go
@@ -7,6 +7,7 @@ import (
"errors"
"fmt"
"path/filepath"
+ "slices"
"strings"
)
@@ -30,12 +31,7 @@ var storageTypes = []StorageType{
// IsValidStorageType returns true if the given storage type is valid
func IsValidStorageType(storageType StorageType) bool {
- for _, t := range storageTypes {
- if t == storageType {
- return true
- }
- }
- return false
+ return slices.Contains(storageTypes, storageType)
}
// MinioStorageConfig represents the configuration for a minio storage
@@ -162,7 +158,7 @@ const (
targetSecIsSec // target section is from the name seciont [name]
)
-func getStorageSectionByType(rootCfg ConfigProvider, typ string) (ConfigSection, targetSecType, error) { //nolint:unparam
+func getStorageSectionByType(rootCfg ConfigProvider, typ string) (ConfigSection, targetSecType, error) { //nolint:unparam // FIXME: targetSecType is always 0, wrong design?
targetSec, err := rootCfg.GetSection(storageSectionName + "." + typ)
if err != nil {
if !IsValidStorageType(StorageType(typ)) {
@@ -287,7 +283,7 @@ func getStorageForLocal(targetSec, overrideSec ConfigSection, tp targetSecType,
return &storage, nil
}
-func getStorageForMinio(targetSec, overrideSec ConfigSection, tp targetSecType, name string) (*Storage, error) { //nolint:dupl
+func getStorageForMinio(targetSec, overrideSec ConfigSection, tp targetSecType, name string) (*Storage, error) { //nolint:dupl // duplicates azure setup
var storage Storage
storage.Type = StorageType(targetSec.Key("STORAGE_TYPE").String())
if err := targetSec.MapTo(&storage.MinioConfig); err != nil {
@@ -316,7 +312,7 @@ func getStorageForMinio(targetSec, overrideSec ConfigSection, tp targetSecType,
return &storage, nil
}
-func getStorageForAzureBlob(targetSec, overrideSec ConfigSection, tp targetSecType, name string) (*Storage, error) { //nolint:dupl
+func getStorageForAzureBlob(targetSec, overrideSec ConfigSection, tp targetSecType, name string) (*Storage, error) { //nolint:dupl // duplicates minio setup
var storage Storage
storage.Type = StorageType(targetSec.Key("STORAGE_TYPE").String())
if err := targetSec.MapTo(&storage.AzureBlobConfig); err != nil {
diff --git a/modules/storage/azureblob.go b/modules/storage/azureblob.go
index 837afd0ba62..6860d81131b 100644
--- a/modules/storage/azureblob.go
+++ b/modules/storage/azureblob.go
@@ -247,7 +247,7 @@ func (a *AzureBlobStorage) Delete(path string) error {
}
// URL gets the redirect URL to a file. The presigned link is valid for 5 minutes.
-func (a *AzureBlobStorage) URL(path, name string, reqParams url.Values) (*url.URL, error) {
+func (a *AzureBlobStorage) URL(path, name, _ string, reqParams url.Values) (*url.URL, error) {
blobClient := a.getBlobClient(path)
startTime := time.Now()
diff --git a/modules/storage/helper.go b/modules/storage/helper.go
index 9e6cceb537d..f6c3d5eebbc 100644
--- a/modules/storage/helper.go
+++ b/modules/storage/helper.go
@@ -30,7 +30,7 @@ func (s discardStorage) Delete(_ string) error {
return fmt.Errorf("%s", s)
}
-func (s discardStorage) URL(_, _ string, _ url.Values) (*url.URL, error) {
+func (s discardStorage) URL(_, _, _ string, _ url.Values) (*url.URL, error) {
return nil, fmt.Errorf("%s", s)
}
diff --git a/modules/storage/helper_test.go b/modules/storage/helper_test.go
index 62ebd8753c8..3cba1e13c01 100644
--- a/modules/storage/helper_test.go
+++ b/modules/storage/helper_test.go
@@ -37,7 +37,7 @@ func Test_discardStorage(t *testing.T) {
assert.Error(t, err, string(tt))
}
{
- got, err := tt.URL("path", "name", nil)
+ got, err := tt.URL("path", "name", "GET", nil)
assert.Nil(t, got)
assert.Errorf(t, err, string(tt))
}
diff --git a/modules/storage/local.go b/modules/storage/local.go
index 00c7f668aa2..8a1776f606d 100644
--- a/modules/storage/local.go
+++ b/modules/storage/local.go
@@ -114,7 +114,7 @@ func (l *LocalStorage) Delete(path string) error {
}
// URL gets the redirect URL to a file
-func (l *LocalStorage) URL(path, name string, reqParams url.Values) (*url.URL, error) {
+func (l *LocalStorage) URL(path, name, _ string, reqParams url.Values) (*url.URL, error) {
return nil, ErrURLNotSupported
}
diff --git a/modules/storage/minio.go b/modules/storage/minio.go
index 1c5d25b2d4f..01f2c162679 100644
--- a/modules/storage/minio.go
+++ b/modules/storage/minio.go
@@ -279,7 +279,7 @@ func (m *MinioStorage) Delete(path string) error {
}
// URL gets the redirect URL to a file. The presigned link is valid for 5 minutes.
-func (m *MinioStorage) URL(path, name string, serveDirectReqParams url.Values) (*url.URL, error) {
+func (m *MinioStorage) URL(path, name, method string, serveDirectReqParams url.Values) (*url.URL, error) {
// copy serveDirectReqParams
reqParams, err := url.ParseQuery(serveDirectReqParams.Encode())
if err != nil {
@@ -287,7 +287,12 @@ func (m *MinioStorage) URL(path, name string, serveDirectReqParams url.Values) (
}
// TODO it may be good to embed images with 'inline' like ServeData does, but we don't want to have to read the file, do we?
reqParams.Set("response-content-disposition", "attachment; filename=\""+quoteEscaper.Replace(name)+"\"")
- u, err := m.client.PresignedGetObject(m.ctx, m.bucket, m.buildMinioPath(path), 5*time.Minute, reqParams)
+ expires := 5 * time.Minute
+ if method == http.MethodHead {
+ u, err := m.client.PresignedHeadObject(m.ctx, m.bucket, m.buildMinioPath(path), expires, reqParams)
+ return u, convertMinioErr(err)
+ }
+ u, err := m.client.PresignedGetObject(m.ctx, m.bucket, m.buildMinioPath(path), expires, reqParams)
return u, convertMinioErr(err)
}
diff --git a/modules/storage/storage.go b/modules/storage/storage.go
index b0529941e7d..1868817c057 100644
--- a/modules/storage/storage.go
+++ b/modules/storage/storage.go
@@ -59,11 +59,15 @@ type Object interface {
// ObjectStorage represents an object storage to handle a bucket and files
type ObjectStorage interface {
Open(path string) (Object, error)
- // Save store a object, if size is unknown set -1
+
+ // Save store an object, if size is unknown set -1
+ // NOTICE: Some storage SDK will close the Reader after saving if it is also a Closer,
+ // DO NOT use the reader anymore after Save, or wrap it to a non-Closer reader.
Save(path string, r io.Reader, size int64) (int64, error)
+
Stat(path string) (os.FileInfo, error)
Delete(path string) error
- URL(path, name string, reqParams url.Values) (*url.URL, error)
+ URL(path, name, method string, reqParams url.Values) (*url.URL, error)
IterateObjects(path string, iterator func(path string, obj Object) error) error
}
diff --git a/modules/structs/admin_user.go b/modules/structs/admin_user.go
index f7c6d10ba0f..c68b59a8978 100644
--- a/modules/structs/admin_user.go
+++ b/modules/structs/admin_user.go
@@ -8,8 +8,11 @@ import "time"
// CreateUserOption create user options
type CreateUserOption struct {
- SourceID int64 `json:"source_id"`
+ SourceID int64 `json:"source_id"`
+ // identifier of the user, provided by the external authenticator (if configured)
+ // default: empty
LoginName string `json:"login_name"`
+ // username of the user
// required: true
Username string `json:"username" binding:"Required;Username;MaxSize(40)"`
FullName string `json:"full_name" binding:"MaxSize(100)"`
@@ -32,6 +35,8 @@ type CreateUserOption struct {
type EditUserOption struct {
// required: true
SourceID int64 `json:"source_id"`
+ // identifier of the user, provided by the external authenticator (if configured)
+ // default: empty
// required: true
LoginName string `json:"login_name" binding:"Required"`
// swagger:strfmt email
diff --git a/modules/structs/git_blob.go b/modules/structs/git_blob.go
index 96770cc62e2..643b69ed372 100644
--- a/modules/structs/git_blob.go
+++ b/modules/structs/git_blob.go
@@ -10,4 +10,7 @@ type GitBlobResponse struct {
URL string `json:"url"`
SHA string `json:"sha"`
Size int64 `json:"size"`
+
+ LfsOid *string `json:"lfs_oid,omitempty"`
+ LfsSize *int64 `json:"lfs_size,omitempty"`
}
diff --git a/modules/structs/hook.go b/modules/structs/hook.go
index aaa9fbc9d36..ac779a57407 100644
--- a/modules/structs/hook.go
+++ b/modules/structs/hook.go
@@ -71,7 +71,8 @@ type PayloadUser struct {
// Full name of the commit author
Name string `json:"name"`
// swagger:strfmt email
- Email string `json:"email"`
+ Email string `json:"email"`
+ // username of the user
UserName string `json:"username"`
}
@@ -286,6 +287,8 @@ const (
HookIssueReOpened HookIssueAction = "reopened"
// HookIssueEdited edited
HookIssueEdited HookIssueAction = "edited"
+ // HookIssueDeleted is an issue action for deleting an issue
+ HookIssueDeleted HookIssueAction = "deleted"
// HookIssueAssigned assigned
HookIssueAssigned HookIssueAction = "assigned"
// HookIssueUnassigned unassigned
@@ -470,6 +473,22 @@ func (p *CommitStatusPayload) JSONPayload() ([]byte, error) {
return json.MarshalIndent(p, "", " ")
}
+// WorkflowRunPayload represents a payload information of workflow run event.
+type WorkflowRunPayload struct {
+ Action string `json:"action"`
+ Workflow *ActionWorkflow `json:"workflow"`
+ WorkflowRun *ActionWorkflowRun `json:"workflow_run"`
+ PullRequest *PullRequest `json:"pull_request,omitempty"`
+ Organization *Organization `json:"organization,omitempty"`
+ Repo *Repository `json:"repository"`
+ Sender *User `json:"sender"`
+}
+
+// JSONPayload implements Payload
+func (p *WorkflowRunPayload) JSONPayload() ([]byte, error) {
+ return json.MarshalIndent(p, "", " ")
+}
+
// WorkflowJobPayload represents a payload information of workflow job event.
type WorkflowJobPayload struct {
Action string `json:"action"`
diff --git a/modules/structs/issue.go b/modules/structs/issue.go
index 6a6b74c34e9..322ac1e4caa 100644
--- a/modules/structs/issue.go
+++ b/modules/structs/issue.go
@@ -203,7 +203,7 @@ func (l *IssueTemplateStringSlice) UnmarshalYAML(value *yaml.Node) error {
if err != nil {
return err
}
- for _, v := range strings.Split(str, ",") {
+ for v := range strings.SplitSeq(str, ",") {
if v = strings.TrimSpace(v); v == "" {
continue
}
@@ -262,7 +262,8 @@ func (it IssueTemplate) Type() IssueTemplateType {
// IssueMeta basic issue information
// swagger:model
type IssueMeta struct {
- Index int64 `json:"index"`
+ Index int64 `json:"index"`
+ // owner of the issue's repo
Owner string `json:"owner"`
Name string `json:"repo"`
}
diff --git a/modules/structs/issue_tracked_time.go b/modules/structs/issue_tracked_time.go
index a3904af80ee..befcfb323d0 100644
--- a/modules/structs/issue_tracked_time.go
+++ b/modules/structs/issue_tracked_time.go
@@ -14,7 +14,7 @@ type AddTimeOption struct {
Time int64 `json:"time" binding:"Required"`
// swagger:strfmt date-time
Created time.Time `json:"created"`
- // User who spent the time (optional)
+ // username of the user who spent the time working on the issue (optional)
User string `json:"user_name"`
}
@@ -26,7 +26,8 @@ type TrackedTime struct {
// Time in seconds
Time int64 `json:"time"`
// deprecated (only for backwards compatibility)
- UserID int64 `json:"user_id"`
+ UserID int64 `json:"user_id"`
+ // username of the user
UserName string `json:"user_name"`
// deprecated (only for backwards compatibility)
IssueID int64 `json:"issue_id"`
diff --git a/modules/structs/org.go b/modules/structs/org.go
index f93b3b6493d..33b45c6344e 100644
--- a/modules/structs/org.go
+++ b/modules/structs/org.go
@@ -15,6 +15,7 @@ type Organization struct {
Location string `json:"location"`
Visibility string `json:"visibility"`
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
+ // username of the organization
// deprecated
UserName string `json:"username"`
}
@@ -30,6 +31,7 @@ type OrganizationPermissions struct {
// CreateOrgOption options for creating an organization
type CreateOrgOption struct {
+ // username of the organization
// required: true
UserName string `json:"username" binding:"Required;Username;MaxSize(40)"`
FullName string `json:"full_name" binding:"MaxSize(100)"`
diff --git a/modules/structs/release.go b/modules/structs/release.go
index c7378645c28..fac86ca7a23 100644
--- a/modules/structs/release.go
+++ b/modules/structs/release.go
@@ -33,6 +33,7 @@ type Release struct {
type CreateReleaseOption struct {
// required: true
TagName string `json:"tag_name" binding:"Required"`
+ TagMessage string `json:"tag_message"`
Target string `json:"target_commitish"`
Title string `json:"name"`
Note string `json:"body"`
diff --git a/modules/structs/repo.go b/modules/structs/repo.go
index 6fb23d93573..404718def0f 100644
--- a/modules/structs/repo.go
+++ b/modules/structs/repo.go
@@ -48,16 +48,17 @@ type ExternalWiki struct {
// Repository represents a repository
type Repository struct {
- ID int64 `json:"id"`
- Owner *User `json:"owner"`
- Name string `json:"name"`
- FullName string `json:"full_name"`
- Description string `json:"description"`
- Empty bool `json:"empty"`
- Private bool `json:"private"`
- Fork bool `json:"fork"`
- Template bool `json:"template"`
- Parent *Repository `json:"parent"`
+ ID int64 `json:"id"`
+ Owner *User `json:"owner"`
+ Name string `json:"name"`
+ FullName string `json:"full_name"`
+ Description string `json:"description"`
+ Empty bool `json:"empty"`
+ Private bool `json:"private"`
+ Fork bool `json:"fork"`
+ Template bool `json:"template"`
+ // the original repository if this repository is a fork, otherwise null
+ Parent *Repository `json:"parent,omitempty"`
Mirror bool `json:"mirror"`
Size int `json:"size"`
Language string `json:"language"`
@@ -83,6 +84,7 @@ type Repository struct {
Updated time.Time `json:"updated_at"`
ArchivedAt time.Time `json:"archived_at"`
Permissions *Permission `json:"permissions,omitempty"`
+ HasCode bool `json:"has_code"`
HasIssues bool `json:"has_issues"`
InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
@@ -113,8 +115,8 @@ type Repository struct {
// enum: sha1,sha256
ObjectFormatName string `json:"object_format_name"`
// swagger:strfmt date-time
- MirrorUpdated time.Time `json:"mirror_updated,omitempty"`
- RepoTransfer *RepoTransfer `json:"repo_transfer"`
+ MirrorUpdated time.Time `json:"mirror_updated"`
+ RepoTransfer *RepoTransfer `json:"repo_transfer,omitempty"`
Topics []string `json:"topics"`
Licenses []string `json:"licenses"`
}
@@ -169,6 +171,8 @@ type EditRepoOption struct {
Private *bool `json:"private,omitempty"`
// either `true` to make this repository a template or `false` to make it a normal repository
Template *bool `json:"template,omitempty"`
+ // either `true` to enable code for this repository or `false` to disable it.
+ HasCode *bool `json:"has_code,omitempty"`
// either `true` to enable issues for this repository or `false` to disable them.
HasIssues *bool `json:"has_issues,omitempty"`
// set this structure to configure internal issue tracker
@@ -225,15 +229,13 @@ type EditRepoOption struct {
EnablePrune *bool `json:"enable_prune,omitempty"`
}
-// GenerateRepoOption options when creating repository using a template
+// GenerateRepoOption options when creating a repository using a template
// swagger:model
type GenerateRepoOption struct {
- // The organization or person who will own the new repository
+ // the organization's name or individual user's name who will own the new repository
//
// required: true
Owner string `json:"owner"`
- // Name of the repository to create
- //
// required: true
// unique: true
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"`
@@ -352,9 +354,9 @@ func (gt GitServiceType) Title() string {
type MigrateRepoOptions struct {
// required: true
CloneAddr string `json:"clone_addr" binding:"Required"`
- // deprecated (only for backwards compatibility)
+ // deprecated (only for backwards compatibility, use repo_owner instead)
RepoOwnerID int64 `json:"uid"`
- // Name of User or Organisation who will own Repo after migration
+ // the organization's name or individual user's name who will own the migrated repository
RepoOwner string `json:"repo_owner"`
// required: true
RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
diff --git a/modules/structs/repo_actions.go b/modules/structs/repo_actions.go
index 75f8e188dda..ac1c288270a 100644
--- a/modules/structs/repo_actions.go
+++ b/modules/structs/repo_actions.go
@@ -57,7 +57,7 @@ type ActionWorkflow struct {
HTMLURL string `json:"html_url"`
BadgeURL string `json:"badge_url"`
// swagger:strfmt date-time
- DeletedAt time.Time `json:"deleted_at,omitempty"`
+ DeletedAt time.Time `json:"deleted_at"`
}
// ActionWorkflowResponse returns a ActionWorkflow
@@ -86,9 +86,39 @@ type ActionArtifact struct {
// ActionWorkflowRun represents a WorkflowRun
type ActionWorkflowRun struct {
- ID int64 `json:"id"`
- RepositoryID int64 `json:"repository_id"`
- HeadSha string `json:"head_sha"`
+ ID int64 `json:"id"`
+ URL string `json:"url"`
+ HTMLURL string `json:"html_url"`
+ DisplayTitle string `json:"display_title"`
+ Path string `json:"path"`
+ Event string `json:"event"`
+ RunAttempt int64 `json:"run_attempt"`
+ RunNumber int64 `json:"run_number"`
+ RepositoryID int64 `json:"repository_id,omitempty"`
+ HeadSha string `json:"head_sha"`
+ HeadBranch string `json:"head_branch,omitempty"`
+ Status string `json:"status"`
+ Actor *User `json:"actor,omitempty"`
+ TriggerActor *User `json:"trigger_actor,omitempty"`
+ Repository *Repository `json:"repository,omitempty"`
+ HeadRepository *Repository `json:"head_repository,omitempty"`
+ Conclusion string `json:"conclusion,omitempty"`
+ // swagger:strfmt date-time
+ StartedAt time.Time `json:"started_at"`
+ // swagger:strfmt date-time
+ CompletedAt time.Time `json:"completed_at"`
+}
+
+// ActionWorkflowRunsResponse returns ActionWorkflowRuns
+type ActionWorkflowRunsResponse struct {
+ Entries []*ActionWorkflowRun `json:"workflow_runs"`
+ TotalCount int64 `json:"total_count"`
+}
+
+// ActionWorkflowJobsResponse returns ActionWorkflowJobs
+type ActionWorkflowJobsResponse struct {
+ Entries []*ActionWorkflowJob `json:"jobs"`
+ TotalCount int64 `json:"total_count"`
}
// ActionArtifactsResponse returns ActionArtifacts
@@ -104,9 +134,9 @@ type ActionWorkflowStep struct {
Status string `json:"status"`
Conclusion string `json:"conclusion,omitempty"`
// swagger:strfmt date-time
- StartedAt time.Time `json:"started_at,omitempty"`
+ StartedAt time.Time `json:"started_at"`
// swagger:strfmt date-time
- CompletedAt time.Time `json:"completed_at,omitempty"`
+ CompletedAt time.Time `json:"completed_at"`
}
// ActionWorkflowJob represents a WorkflowJob
@@ -129,9 +159,9 @@ type ActionWorkflowJob struct {
// swagger:strfmt date-time
CreatedAt time.Time `json:"created_at"`
// swagger:strfmt date-time
- StartedAt time.Time `json:"started_at,omitempty"`
+ StartedAt time.Time `json:"started_at"`
// swagger:strfmt date-time
- CompletedAt time.Time `json:"completed_at,omitempty"`
+ CompletedAt time.Time `json:"completed_at"`
}
// ActionRunnerLabel represents a Runner Label
diff --git a/modules/structs/repo_branch.go b/modules/structs/repo_branch.go
index 55c98d60b91..5416f43b0d1 100644
--- a/modules/structs/repo_branch.go
+++ b/modules/structs/repo_branch.go
@@ -136,6 +136,7 @@ type UpdateBranchProtectionPriories struct {
type MergeUpstreamRequest struct {
Branch string `json:"branch"`
+ FfOnly bool `json:"ff_only"`
}
type MergeUpstreamResponse struct {
diff --git a/modules/structs/repo_file.go b/modules/structs/repo_file.go
index b0e0bd979e1..5a86db868b7 100644
--- a/modules/structs/repo_file.go
+++ b/modules/structs/repo_file.go
@@ -22,6 +22,23 @@ type FileOptions struct {
Signoff bool `json:"signoff"`
}
+type FileOptionsWithSHA struct {
+ FileOptions
+ // the blob ID (SHA) for the file that already exists, it is required for changing existing files
+ // required: true
+ SHA string `json:"sha" binding:"Required"`
+}
+
+func (f *FileOptions) GetFileOptions() *FileOptions {
+ return f
+}
+
+type FileOptionsInterface interface {
+ GetFileOptions() *FileOptions
+}
+
+var _ FileOptionsInterface = (*FileOptions)(nil)
+
// CreateFileOptions options for creating files
// Note: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)
type CreateFileOptions struct {
@@ -31,29 +48,16 @@ type CreateFileOptions struct {
ContentBase64 string `json:"content"`
}
-// Branch returns branch name
-func (o *CreateFileOptions) Branch() string {
- return o.FileOptions.BranchName
-}
-
// DeleteFileOptions options for deleting files (used for other File structs below)
// Note: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)
type DeleteFileOptions struct {
- FileOptions
- // sha is the SHA for the file that already exists
- // required: true
- SHA string `json:"sha" binding:"Required"`
-}
-
-// Branch returns branch name
-func (o *DeleteFileOptions) Branch() string {
- return o.FileOptions.BranchName
+ FileOptionsWithSHA
}
// UpdateFileOptions options for updating files
// Note: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)
type UpdateFileOptions struct {
- DeleteFileOptions
+ FileOptionsWithSHA
// content must be base64 encoded
// required: true
ContentBase64 string `json:"content"`
@@ -61,23 +65,21 @@ type UpdateFileOptions struct {
FromPath string `json:"from_path" binding:"MaxSize(500)"`
}
-// Branch returns branch name
-func (o *UpdateFileOptions) Branch() string {
- return o.FileOptions.BranchName
-}
+// FIXME: there is no LastCommitID in FileOptions, actually it should be an alternative to the SHA in ChangeFileOperation
// ChangeFileOperation for creating, updating or deleting a file
type ChangeFileOperation struct {
- // indicates what to do with the file
+ // indicates what to do with the file: "create" for creating a new file, "update" for updating an existing file,
+ // "upload" for creating or updating a file, "rename" for renaming a file, and "delete" for deleting an existing file.
// required: true
- // enum: create,update,delete
+ // enum: create,update,upload,rename,delete
Operation string `json:"operation" binding:"Required"`
// path to the existing or new file
// required: true
Path string `json:"path" binding:"Required;MaxSize(500)"`
- // new or updated file content, must be base64 encoded
+ // new or updated file content, it must be base64 encoded
ContentBase64 string `json:"content"`
- // sha is the SHA for the file that already exists, required for update or delete
+ // the blob ID (SHA) for the file that already exists, required for changing existing files
SHA string `json:"sha"`
// old path of the file to move
FromPath string `json:"from_path"`
@@ -92,20 +94,10 @@ type ChangeFilesOptions struct {
Files []*ChangeFileOperation `json:"files" binding:"Required"`
}
-// Branch returns branch name
-func (o *ChangeFilesOptions) Branch() string {
- return o.FileOptions.BranchName
-}
-
-// FileOptionInterface provides a unified interface for the different file options
-type FileOptionInterface interface {
- Branch() string
-}
-
// ApplyDiffPatchFileOptions options for applying a diff patch
// Note: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)
type ApplyDiffPatchFileOptions struct {
- DeleteFileOptions
+ FileOptions
// required: true
Content string `json:"content"`
}
@@ -117,16 +109,24 @@ type FileLinksResponse struct {
HTMLURL *string `json:"html"`
}
+type ContentsExtResponse struct {
+ FileContents *ContentsResponse `json:"file_contents,omitempty"`
+ DirContents []*ContentsResponse `json:"dir_contents,omitempty"`
+}
+
// ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content
type ContentsResponse struct {
- Name string `json:"name"`
- Path string `json:"path"`
- SHA string `json:"sha"`
- LastCommitSHA string `json:"last_commit_sha"`
+ Name string `json:"name"`
+ Path string `json:"path"`
+ SHA string `json:"sha"`
+
+ LastCommitSHA *string `json:"last_commit_sha,omitempty"`
// swagger:strfmt date-time
- LastCommitterDate time.Time `json:"last_committer_date"`
+ LastCommitterDate *time.Time `json:"last_committer_date,omitempty"`
// swagger:strfmt date-time
- LastAuthorDate time.Time `json:"last_author_date"`
+ LastAuthorDate *time.Time `json:"last_author_date,omitempty"`
+ LastCommitMessage *string `json:"last_commit_message,omitempty"`
+
// `type` will be `file`, `dir`, `symlink`, or `submodule`
Type string `json:"type"`
Size int64 `json:"size"`
@@ -143,6 +143,9 @@ type ContentsResponse struct {
// `submodule_git_url` is populated when `type` is `submodule`, otherwise null
SubmoduleGitURL *string `json:"submodule_git_url"`
Links *FileLinksResponse `json:"_links"`
+
+ LfsOid *string `json:"lfs_oid,omitempty"`
+ LfsSize *int64 `json:"lfs_size,omitempty"`
}
// FileCommitResponse contains information generated from a Git commit for a repo's file.
diff --git a/modules/structs/user.go b/modules/structs/user.go
index 5ed677f239f..89349cda2c7 100644
--- a/modules/structs/user.go
+++ b/modules/structs/user.go
@@ -15,9 +15,9 @@ import (
type User struct {
// the user's id
ID int64 `json:"id"`
- // the user's username
+ // login of the user, same as `username`
UserName string `json:"login"`
- // the user's authentication sign-in name.
+ // identifier of the user, provided by the external authenticator (if configured)
// default: empty
LoginName string `json:"login_name"`
// The ID of the user's Authentication Source
@@ -35,9 +35,9 @@ type User struct {
// Is the user an administrator
IsAdmin bool `json:"is_admin"`
// swagger:strfmt date-time
- LastLogin time.Time `json:"last_login,omitempty"`
+ LastLogin time.Time `json:"last_login"`
// swagger:strfmt date-time
- Created time.Time `json:"created,omitempty"`
+ Created time.Time `json:"created"`
// Is user restricted
Restricted bool `json:"restricted"`
// Is user active
diff --git a/modules/structs/user_email.go b/modules/structs/user_email.go
index 9319667e8fc..01895a00584 100644
--- a/modules/structs/user_email.go
+++ b/modules/structs/user_email.go
@@ -11,6 +11,7 @@ type Email struct {
Verified bool `json:"verified"`
Primary bool `json:"primary"`
UserID int64 `json:"user_id"`
+ // username of the user
UserName string `json:"username"`
}
diff --git a/modules/structs/user_gpgkey.go b/modules/structs/user_gpgkey.go
index ff9b0aea1d6..deae70de337 100644
--- a/modules/structs/user_gpgkey.go
+++ b/modules/structs/user_gpgkey.go
@@ -21,9 +21,9 @@ type GPGKey struct {
CanCertify bool `json:"can_certify"`
Verified bool `json:"verified"`
// swagger:strfmt date-time
- Created time.Time `json:"created_at,omitempty"`
+ Created time.Time `json:"created_at"`
// swagger:strfmt date-time
- Expires time.Time `json:"expires_at,omitempty"`
+ Expires time.Time `json:"expires_at"`
}
// GPGKeyEmail an email attached to a GPGKey
diff --git a/modules/structs/user_key.go b/modules/structs/user_key.go
index c4c41207e1c..16225a852a5 100644
--- a/modules/structs/user_key.go
+++ b/modules/structs/user_key.go
@@ -15,8 +15,8 @@ type PublicKey struct {
Title string `json:"title,omitempty"`
Fingerprint string `json:"fingerprint,omitempty"`
// swagger:strfmt date-time
- Created time.Time `json:"created_at,omitempty"`
- Updated time.Time `json:"last_used_at,omitempty"`
+ Created time.Time `json:"created_at"`
+ Updated time.Time `json:"last_used_at"`
Owner *User `json:"user,omitempty"`
ReadOnly bool `json:"read_only,omitempty"`
KeyType string `json:"key_type,omitempty"`
diff --git a/modules/system/appstate_test.go b/modules/system/appstate_test.go
index b5c057cf881..509210127d7 100644
--- a/modules/system/appstate_test.go
+++ b/modules/system/appstate_test.go
@@ -6,7 +6,6 @@ package system
import (
"testing"
- "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"github.com/stretchr/testify/assert"
@@ -37,25 +36,25 @@ func TestAppStateDB(t *testing.T) {
as := &DBStore{}
item1 := new(testItem1)
- assert.NoError(t, as.Get(db.DefaultContext, item1))
+ assert.NoError(t, as.Get(t.Context(), item1))
assert.Empty(t, item1.Val1)
assert.Equal(t, 0, item1.Val2)
item1 = new(testItem1)
item1.Val1 = "a"
item1.Val2 = 2
- assert.NoError(t, as.Set(db.DefaultContext, item1))
+ assert.NoError(t, as.Set(t.Context(), item1))
item2 := new(testItem2)
item2.K = "V"
- assert.NoError(t, as.Set(db.DefaultContext, item2))
+ assert.NoError(t, as.Set(t.Context(), item2))
item1 = new(testItem1)
- assert.NoError(t, as.Get(db.DefaultContext, item1))
+ assert.NoError(t, as.Get(t.Context(), item1))
assert.Equal(t, "a", item1.Val1)
assert.Equal(t, 2, item1.Val2)
item2 = new(testItem2)
- assert.NoError(t, as.Get(db.DefaultContext, item2))
+ assert.NoError(t, as.Get(t.Context(), item2))
assert.Equal(t, "V", item2.K)
}
diff --git a/modules/templates/eval/eval_test.go b/modules/templates/eval/eval_test.go
index c9e514b5eb9..f956f6cbdf3 100644
--- a/modules/templates/eval/eval_test.go
+++ b/modules/templates/eval/eval_test.go
@@ -12,7 +12,7 @@ import (
)
func tokens(s string) (a []any) {
- for _, v := range strings.Fields(s) {
+ for v := range strings.FieldsSeq(s) {
a = append(a, v)
}
return a
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index d55d4f87c5f..e454bce4bd3 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -6,7 +6,6 @@ package templates
import (
"fmt"
- "html"
"html/template"
"net/url"
"strconv"
@@ -38,12 +37,9 @@ func NewFuncMap() template.FuncMap {
"dict": dict, // it's lowercase because this name has been widely used. Our other functions should have uppercase names.
"Iif": iif,
"Eval": evalTokens,
- "SafeHTML": safeHTML,
"HTMLFormat": htmlFormat,
- "HTMLEscape": htmlEscape,
"QueryEscape": queryEscape,
"QueryBuild": QueryBuild,
- "JSEscape": jsEscapeSafe,
"SanitizeHTML": SanitizeHTML,
"URLJoin": util.URLJoin,
"DotEscape": dotEscape,
@@ -165,30 +161,9 @@ func NewFuncMap() template.FuncMap {
}
}
-// safeHTML render raw as HTML
-func safeHTML(s any) template.HTML {
- switch v := s.(type) {
- case string:
- return template.HTML(v)
- case template.HTML:
- return v
- }
- panic(fmt.Sprintf("unexpected type %T", s))
-}
-
-// SanitizeHTML sanitizes the input by pre-defined markdown rules
+// SanitizeHTML sanitizes the input by default sanitization rules.
func SanitizeHTML(s string) template.HTML {
- return template.HTML(markup.Sanitize(s))
-}
-
-func htmlEscape(s any) template.HTML {
- switch v := s.(type) {
- case string:
- return template.HTML(html.EscapeString(v))
- case template.HTML:
- return v
- }
- panic(fmt.Sprintf("unexpected type %T", s))
+ return markup.Sanitize(s)
}
func htmlFormat(s any, args ...any) template.HTML {
@@ -205,10 +180,6 @@ func htmlFormat(s any, args ...any) template.HTML {
panic(fmt.Sprintf("unexpected type %T", s))
}
-func jsEscapeSafe(s string) template.HTML {
- return template.HTML(template.JSEscapeString(s))
-}
-
func queryEscape(s string) template.URL {
return template.URL(url.QueryEscape(s))
}
diff --git a/modules/templates/helper_test.go b/modules/templates/helper_test.go
index 81f8235bd2b..7e3a952e7b7 100644
--- a/modules/templates/helper_test.go
+++ b/modules/templates/helper_test.go
@@ -57,10 +57,6 @@ func TestSubjectBodySeparator(t *testing.T) {
"Insufficient\n--\nSeparators")
}
-func TestJSEscapeSafe(t *testing.T) {
- assert.EqualValues(t, `\u0026\u003C\u003E\'\"`, jsEscapeSafe(`&<>'"`))
-}
-
func TestSanitizeHTML(t *testing.T) {
assert.Equal(t, template.HTML(`link xss inline
`), SanitizeHTML(`link xss inline
`))
}
diff --git a/modules/templates/htmlrenderer.go b/modules/templates/htmlrenderer.go
index 529284f7e8e..8073a6e5f5b 100644
--- a/modules/templates/htmlrenderer.go
+++ b/modules/templates/htmlrenderer.go
@@ -42,7 +42,7 @@ var (
var ErrTemplateNotInitialized = errors.New("template system is not initialized, check your log for errors")
-func (h *HTMLRender) HTML(w io.Writer, status int, tplName TplName, data any, ctx context.Context) error { //nolint:revive
+func (h *HTMLRender) HTML(w io.Writer, status int, tplName TplName, data any, ctx context.Context) error { //nolint:revive // we don't use ctx, only pass it to the template executor
name := string(tplName)
if respWriter, ok := w.(http.ResponseWriter); ok {
if respWriter.Header().Get("Content-Type") == "" {
@@ -57,7 +57,7 @@ func (h *HTMLRender) HTML(w io.Writer, status int, tplName TplName, data any, ct
return t.Execute(w, data)
}
-func (h *HTMLRender) TemplateLookup(name string, ctx context.Context) (TemplateExecutor, error) { //nolint:revive
+func (h *HTMLRender) TemplateLookup(name string, ctx context.Context) (TemplateExecutor, error) { //nolint:revive // we don't use ctx, only pass it to the template executor
tmpls := h.templates.Load()
if tmpls == nil {
return nil, ErrTemplateNotInitialized
@@ -251,7 +251,7 @@ func extractErrorLine(code []byte, lineNum, posNum int, target string) string {
b := bufio.NewReader(bytes.NewReader(code))
var line []byte
var err error
- for i := 0; i < lineNum; i++ {
+ for i := range lineNum {
if line, err = b.ReadBytes('\n'); err != nil {
if i == lineNum-1 && errors.Is(err, io.EOF) {
err = nil
diff --git a/modules/templates/mailer.go b/modules/templates/mailer.go
index 310d6453287..c43b7607779 100644
--- a/modules/templates/mailer.go
+++ b/modules/templates/mailer.go
@@ -9,6 +9,7 @@ import (
"html/template"
"regexp"
"strings"
+ "sync/atomic"
texttmpl "text/template"
"code.gitea.io/gitea/modules/log"
@@ -16,6 +17,12 @@ import (
"code.gitea.io/gitea/modules/util"
)
+type MailTemplates struct {
+ TemplateNames []string
+ BodyTemplates *template.Template
+ SubjectTemplates *texttmpl.Template
+}
+
var mailSubjectSplit = regexp.MustCompile(`(?m)^-{3,}\s*$`)
// mailSubjectTextFuncMap returns functions for injecting to text templates, it's only used for mail subject
@@ -52,16 +59,17 @@ func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template,
return nil
}
-// Mailer provides the templates required for sending notification mails.
-func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
- subjectTemplates := texttmpl.New("")
- bodyTemplates := template.New("")
-
- subjectTemplates.Funcs(mailSubjectTextFuncMap())
- bodyTemplates.Funcs(NewFuncMap())
-
+// LoadMailTemplates provides the templates required for sending notification mails.
+func LoadMailTemplates(ctx context.Context, loadedTemplates *atomic.Pointer[MailTemplates]) {
assetFS := AssetFS()
refreshTemplates := func(firstRun bool) {
+ var templateNames []string
+ subjectTemplates := texttmpl.New("")
+ bodyTemplates := template.New("")
+
+ subjectTemplates.Funcs(mailSubjectTextFuncMap())
+ bodyTemplates.Funcs(NewFuncMap())
+
if !firstRun {
log.Trace("Reloading mail templates")
}
@@ -81,6 +89,7 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
if firstRun {
log.Trace("Adding mail template %s: %s by %s", tmplName, assetPath, layerName)
}
+ templateNames = append(templateNames, tmplName)
if err = buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content); err != nil {
if firstRun {
log.Fatal("Failed to parse mail template, err: %v", err)
@@ -88,6 +97,12 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
log.Error("Failed to parse mail template, err: %v", err)
}
}
+ loaded := &MailTemplates{
+ TemplateNames: templateNames,
+ BodyTemplates: bodyTemplates,
+ SubjectTemplates: subjectTemplates,
+ }
+ loadedTemplates.Store(loaded)
}
refreshTemplates(true)
@@ -99,6 +114,4 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
refreshTemplates(false)
})
}
-
- return subjectTemplates, bodyTemplates
}
diff --git a/modules/templates/scopedtmpl/scopedtmpl.go b/modules/templates/scopedtmpl/scopedtmpl.go
index 2722ba97a28..34e8b9ad701 100644
--- a/modules/templates/scopedtmpl/scopedtmpl.go
+++ b/modules/templates/scopedtmpl/scopedtmpl.go
@@ -7,6 +7,7 @@ import (
"fmt"
"html/template"
"io"
+ "maps"
"reflect"
"sync"
texttemplate "text/template"
@@ -40,9 +41,7 @@ func (t *ScopedTemplate) Funcs(funcMap template.FuncMap) {
panic("cannot add new functions to frozen template set")
}
t.all.Funcs(funcMap)
- for k, v := range funcMap {
- t.parseFuncs[k] = v
- }
+ maps.Copy(t.parseFuncs, funcMap)
}
func (t *ScopedTemplate) New(name string) *template.Template {
@@ -103,31 +102,28 @@ func escapeTemplate(t *template.Template) error {
return nil
}
-//nolint:unused
type htmlTemplate struct {
- escapeErr error
- text *texttemplate.Template
+ _/*escapeErr*/ error
+ text *texttemplate.Template
}
-//nolint:unused
type textTemplateCommon struct {
- tmpl map[string]*template.Template // Map from name to defined templates.
- muTmpl sync.RWMutex // protects tmpl
- option struct {
+ _/*tmpl*/ map[string]*template.Template
+ _/*muTmpl*/ sync.RWMutex
+ _/*option*/ struct {
missingKey int
}
- muFuncs sync.RWMutex // protects parseFuncs and execFuncs
- parseFuncs texttemplate.FuncMap
- execFuncs map[string]reflect.Value
+ muFuncs sync.RWMutex
+ _/*parseFuncs*/ texttemplate.FuncMap
+ execFuncs map[string]reflect.Value
}
-//nolint:unused
type textTemplate struct {
- name string
+ _/*name*/ string
*parse.Tree
*textTemplateCommon
- leftDelim string
- rightDelim string
+ _/*leftDelim*/ string
+ _/*rightDelim*/ string
}
func ptr[T, P any](ptr *P) *T {
@@ -159,9 +155,7 @@ func newScopedTemplateSet(all *template.Template, name string) (*scopedTemplateS
textTmplPtr.muFuncs.Lock()
ts.execFuncs = map[string]reflect.Value{}
- for k, v := range textTmplPtr.execFuncs {
- ts.execFuncs[k] = v
- }
+ maps.Copy(ts.execFuncs, textTmplPtr.execFuncs)
textTmplPtr.muFuncs.Unlock()
var collectTemplates func(nodes []parse.Node)
@@ -220,9 +214,7 @@ func (ts *scopedTemplateSet) newExecutor(funcMap map[string]any) TemplateExecuto
tmpl := texttemplate.New("")
tmplPtr := ptr[textTemplate](tmpl)
tmplPtr.execFuncs = map[string]reflect.Value{}
- for k, v := range ts.execFuncs {
- tmplPtr.execFuncs[k] = v
- }
+ maps.Copy(tmplPtr.execFuncs, ts.execFuncs)
if funcMap != nil {
tmpl.Funcs(funcMap)
}
diff --git a/modules/templates/static.go b/modules/templates/static.go
deleted file mode 100644
index b5a7e561ec0..00000000000
--- a/modules/templates/static.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-//go:build bindata
-
-package templates
-
-import (
- "time"
-
- "code.gitea.io/gitea/modules/assetfs"
- "code.gitea.io/gitea/modules/timeutil"
-)
-
-// GlobalModTime provide a global mod time for embedded asset files
-func GlobalModTime(filename string) time.Time {
- return timeutil.GetExecutableModTime()
-}
-
-func BuiltinAssets() *assetfs.Layer {
- return assetfs.Bindata("builtin(bindata)", Assets)
-}
diff --git a/modules/templates/templates_bindata.go b/modules/templates/templates_bindata.go
index 6f1d3cf5395..a919591ecfd 100644
--- a/modules/templates/templates_bindata.go
+++ b/modules/templates/templates_bindata.go
@@ -3,6 +3,21 @@
//go:build bindata
+//go:generate go run ../../build/generate-bindata.go ../../templates bindata.dat
+
package templates
-//go:generate go run ../../build/generate-bindata.go ../../templates templates bindata.go true
+import (
+ "sync"
+
+ _ "embed"
+
+ "code.gitea.io/gitea/modules/assetfs"
+)
+
+//go:embed bindata.dat
+var bindata []byte
+
+var BuiltinAssets = sync.OnceValue(func() *assetfs.Layer {
+ return assetfs.Bindata("builtin(bindata)", assetfs.NewEmbeddedFS(bindata))
+})
diff --git a/modules/templates/dynamic.go b/modules/templates/templates_dynamic.go
similarity index 100%
rename from modules/templates/dynamic.go
rename to modules/templates/templates_dynamic.go
diff --git a/modules/templates/util_format_test.go b/modules/templates/util_format_test.go
index 13a57c24e26..89e42532f96 100644
--- a/modules/templates/util_format_test.go
+++ b/modules/templates/util_format_test.go
@@ -13,6 +13,6 @@ func TestCountFmt(t *testing.T) {
assert.Equal(t, "125", countFmt(125))
assert.Equal(t, "1.3k", countFmt(int64(1317)))
assert.Equal(t, "21.3M", countFmt(21317675))
- assert.Equal(t, "45.7G", countFmt(45721317675))
+ assert.Equal(t, "45.7G", countFmt(int64(45721317675)))
assert.Empty(t, countFmt("test"))
}
diff --git a/modules/templates/util_json.go b/modules/templates/util_json.go
index 71a4e23d364..29a04290fa0 100644
--- a/modules/templates/util_json.go
+++ b/modules/templates/util_json.go
@@ -9,11 +9,11 @@ import (
"code.gitea.io/gitea/modules/json"
)
-type JsonUtils struct{} //nolint:revive
+type JsonUtils struct{} //nolint:revive // variable naming triggers on Json, wants JSON
var jsonUtils = JsonUtils{}
-func NewJsonUtils() *JsonUtils { //nolint:revive
+func NewJsonUtils() *JsonUtils { //nolint:revive // variable naming triggers on Json, wants JSON
return &jsonUtils
}
diff --git a/modules/templates/util_render.go b/modules/templates/util_render.go
index 8d9ba1000c8..1056c426433 100644
--- a/modules/templates/util_render.go
+++ b/modules/templates/util_render.go
@@ -38,8 +38,8 @@ func NewRenderUtils(ctx reqctx.RequestContext) *RenderUtils {
// RenderCommitMessage renders commit message with XSS-safe and special links.
func (ut *RenderUtils) RenderCommitMessage(msg string, repo *repo.Repository) template.HTML {
cleanMsg := template.HTMLEscapeString(msg)
- // we can safely assume that it will not return any error, since there
- // shouldn't be any special HTML.
+ // we can safely assume that it will not return any error, since there shouldn't be any special HTML.
+ // "repo" can be nil when rendering commit messages for deleted repositories in a user's dashboard feed.
fullMessage, err := markup.PostProcessCommitMessage(renderhelper.NewRenderContextRepoComment(ut.ctx, repo), cleanMsg)
if err != nil {
log.Error("PostProcessCommitMessage: %v", err)
@@ -47,7 +47,7 @@ func (ut *RenderUtils) RenderCommitMessage(msg string, repo *repo.Repository) te
}
msgLines := strings.Split(strings.TrimSpace(fullMessage), "\n")
if len(msgLines) == 0 {
- return template.HTML("")
+ return ""
}
return renderCodeBlock(template.HTML(msgLines[0]))
}
@@ -122,8 +122,23 @@ func (ut *RenderUtils) RenderIssueSimpleTitle(text string) template.HTML {
return ret
}
-// RenderLabel renders a label
+func (ut *RenderUtils) RenderLabelWithLink(label *issues_model.Label, link any) template.HTML {
+ var attrHref template.HTML
+ switch link.(type) {
+ case template.URL, string:
+ attrHref = htmlutil.HTMLFormat(`href="%s"`, link)
+ default:
+ panic(fmt.Sprintf("unexpected type %T for link", link))
+ }
+ return ut.renderLabelWithTag(label, "a", attrHref)
+}
+
func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML {
+ return ut.renderLabelWithTag(label, "span", "")
+}
+
+// RenderLabel renders a label
+func (ut *RenderUtils) renderLabelWithTag(label *issues_model.Label, tagName, tagAttrs template.HTML) template.HTML {
locale := ut.ctx.Value(translation.ContextKey).(translation.Locale)
var extraCSSClasses string
textColor := util.ContrastColor(label.Color)
@@ -137,8 +152,8 @@ func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML {
if labelScope == "" {
// Regular label
- return htmlutil.HTMLFormat(`%s
`,
- extraCSSClasses, textColor, label.Color, descriptionText, ut.RenderEmoji(label.Name))
+ return htmlutil.HTMLFormat(`<%s %s class="ui label %s" style="color: %s !important; background-color: %s !important;" data-tooltip-content title="%s">%s %s>`,
+ tagName, tagAttrs, extraCSSClasses, textColor, label.Color, descriptionText, ut.RenderEmoji(label.Name), tagName)
}
// Scoped label
@@ -152,7 +167,7 @@ func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML {
// Ensure we add the same amount of contrast also near 0 and 1.
darken := contrast + math.Max(luminance+contrast-1.0, 0.0)
lighten := contrast + math.Max(contrast-luminance, 0.0)
- // Compute factor to keep RGB values proportional.
+ // Compute the factor to keep RGB values proportional.
darkenFactor := math.Max(luminance-darken, 0.0) / math.Max(luminance, 1.0/255.0)
lightenFactor := math.Min(luminance+lighten, 1.0) / math.Max(luminance, 1.0/255.0)
@@ -173,26 +188,29 @@ func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML {
if label.ExclusiveOrder > 0 {
// | |
- return htmlutil.HTMLFormat(``+
+ return htmlutil.HTMLFormat(`<%s %s class="ui label %s scope-parent" data-tooltip-content title="%s">`+
`%s
`+
`%s
`+
`%d
`+
- ` `,
+ `%s>`,
+ tagName, tagAttrs,
extraCSSClasses, descriptionText,
textColor, scopeColor, scopeHTML,
textColor, itemColor, itemHTML,
- label.ExclusiveOrder)
+ label.ExclusiveOrder,
+ tagName)
}
// |
- return htmlutil.HTMLFormat(``+
+ return htmlutil.HTMLFormat(`<%s %s class="ui label %s scope-parent" data-tooltip-content title="%s">`+
`%s
`+
`%s
`+
- ` `,
+ `%s>`,
+ tagName, tagAttrs,
extraCSSClasses, descriptionText,
textColor, scopeColor, scopeHTML,
textColor, itemColor, itemHTML,
- )
+ tagName)
}
// RenderEmoji renders html text with emoji post processors
@@ -218,7 +236,7 @@ func reactionToEmoji(reaction string) template.HTML {
return template.HTML(fmt.Sprintf(` `, reaction, setting.StaticURLPrefix, url.PathEscape(reaction)))
}
-func (ut *RenderUtils) MarkdownToHtml(input string) template.HTML { //nolint:revive
+func (ut *RenderUtils) MarkdownToHtml(input string) template.HTML { //nolint:revive // variable naming triggers on Html, wants HTML
output, err := markdown.RenderString(markup.NewRenderContext(ut.ctx).WithMetas(markup.ComposeSimpleDocumentMetas()), input)
if err != nil {
log.Error("RenderString: %v", err)
@@ -235,7 +253,8 @@ func (ut *RenderUtils) RenderLabels(labels []*issues_model.Label, repoLink strin
if label == nil {
continue
}
- htmlCode += fmt.Sprintf(`%s `, baseLink, label.ID, ut.RenderLabel(label))
+ link := fmt.Sprintf("%s?labels=%d", baseLink, label.ID)
+ htmlCode += string(ut.RenderLabelWithLink(label, template.URL(link)))
}
htmlCode += ""
return template.HTML(htmlCode)
diff --git a/modules/templates/util_render_test.go b/modules/templates/util_render_test.go
index 9b51d0cd57e..5c37f084df6 100644
--- a/modules/templates/util_render_test.go
+++ b/modules/templates/util_render_test.go
@@ -205,6 +205,17 @@ func TestRenderLabels(t *testing.T) {
issue = &issues.Issue{IsPull: true}
expected = `/owner/repo/pulls?labels=123`
assert.Contains(t, ut.RenderLabels([]*issues.Label{label}, "/owner/repo", issue), expected)
+
+ expectedLabel := `label-name `
+ assert.Equal(t, expectedLabel, string(ut.RenderLabelWithLink(label, "<>")))
+ assert.Equal(t, expectedLabel, string(ut.RenderLabelWithLink(label, template.URL("<>"))))
+
+ label = &issues.Label{ID: 123, Name: ">", Exclusive: true}
+ expectedLabel = `<
>
`
+ assert.Equal(t, expectedLabel, string(ut.RenderLabelWithLink(label, "")))
+ label = &issues.Label{ID: 123, Name: ">", Exclusive: true, ExclusiveOrder: 1}
+ expectedLabel = `<
>
1
`
+ assert.Equal(t, expectedLabel, string(ut.RenderLabelWithLink(label, "")))
}
func TestUserMention(t *testing.T) {
diff --git a/modules/testlogger/testlogger.go b/modules/testlogger/testlogger.go
index 8e970aa2bed..60e281d403c 100644
--- a/modules/testlogger/testlogger.go
+++ b/modules/testlogger/testlogger.go
@@ -92,7 +92,7 @@ func (w *testLoggerWriterCloser) Reset() {
// Printf takes a format and args and prints the string to os.Stdout
func Printf(format string, args ...any) {
if !log.CanColorStdout {
- for i := 0; i < len(args); i++ {
+ for i := range args {
if c, ok := args[i].(*log.ColoredValue); ok {
args[i] = c.Value()
}
diff --git a/modules/timeutil/executable.go b/modules/timeutil/executable.go
deleted file mode 100644
index 57ae8b2a9df..00000000000
--- a/modules/timeutil/executable.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package timeutil
-
-import (
- "os"
- "path/filepath"
- "sync"
- "time"
-
- "code.gitea.io/gitea/modules/log"
-)
-
-var (
- executablModTime = time.Now()
- executablModTimeOnce sync.Once
-)
-
-// GetExecutableModTime get executable file modified time of current process.
-func GetExecutableModTime() time.Time {
- executablModTimeOnce.Do(func() {
- exePath, err := os.Executable()
- if err != nil {
- log.Error("os.Executable: %v", err)
- return
- }
-
- exePath, err = filepath.Abs(exePath)
- if err != nil {
- log.Error("filepath.Abs: %v", err)
- return
- }
-
- exePath, err = filepath.EvalSymlinks(exePath)
- if err != nil {
- log.Error("filepath.EvalSymlinks: %v", err)
- return
- }
-
- st, err := os.Stat(exePath)
- if err != nil {
- log.Error("os.Stat: %v", err)
- return
- }
-
- executablModTime = st.ModTime()
- })
- return executablModTime
-}
diff --git a/modules/typesniffer/typesniffer.go b/modules/typesniffer/typesniffer.go
index 8cb3d278ce4..2e8d9c4a1e7 100644
--- a/modules/typesniffer/typesniffer.go
+++ b/modules/typesniffer/typesniffer.go
@@ -6,18 +6,14 @@ package typesniffer
import (
"bytes"
"encoding/binary"
- "fmt"
- "io"
"net/http"
"regexp"
"slices"
"strings"
-
- "code.gitea.io/gitea/modules/util"
+ "sync"
)
-// Use at most this many bytes to determine Content Type.
-const sniffLen = 1024
+const SniffContentSize = 1024
const (
MimeTypeImageSvg = "image/svg+xml"
@@ -26,22 +22,30 @@ const (
MimeTypeApplicationOctetStream = "application/octet-stream"
)
-var (
- svgComment = regexp.MustCompile(`(?s)`)
- svgTagRegex = regexp.MustCompile(`(?si)\A\s*(?:(|>))\s*)*\s*(?:(|>))\s*)*`)
+ ret.svgTagRegex = regexp.MustCompile(`(?si)\A\s*(?:(|>))\s*)*\s*(?:(|>))\s*)* sniffLen {
- data = data[:sniffLen]
+ if len(data) > SniffContentSize {
+ data = data[:SniffContentSize]
}
+ vars := globalVars()
// SVG is unsupported by http.DetectContentType, https://github.com/golang/go/issues/15888
detectByHTML := strings.Contains(ct, "text/plain") || strings.Contains(ct, "text/html")
detectByXML := strings.Contains(ct, "text/xml")
if detectByHTML || detectByXML {
- dataProcessed := svgComment.ReplaceAll(data, nil)
+ dataProcessed := vars.svgComment.ReplaceAll(data, nil)
dataProcessed = bytes.TrimSpace(dataProcessed)
- if detectByHTML && svgTagRegex.Match(dataProcessed) ||
- detectByXML && svgTagInXMLRegex.Match(dataProcessed) {
+ if detectByHTML && vars.svgTagRegex.Match(dataProcessed) ||
+ detectByXML && vars.svgTagInXMLRegex.Match(dataProcessed) {
ct = MimeTypeImageSvg
}
}
if strings.HasPrefix(ct, "audio/") && bytes.HasPrefix(data, []byte("ID3")) {
// The MP3 detection is quite inaccurate, any content with "ID3" prefix will result in "audio/mpeg".
- // So remove the "ID3" prefix and detect again, if result is text, then it must be text content.
+ // So remove the "ID3" prefix and detect again, then if the result is "text", it must be text content.
// This works especially because audio files contain many unprintable/invalid characters like `0x00`
ct2 := http.DetectContentType(data[3:])
if strings.HasPrefix(ct2, "text/") {
@@ -155,15 +160,3 @@ func DetectContentType(data []byte) SniffedType {
}
return SniffedType{ct}
}
-
-// DetectContentTypeFromReader guesses the content type contained in the reader.
-func DetectContentTypeFromReader(r io.Reader) (SniffedType, error) {
- buf := make([]byte, sniffLen)
- n, err := util.ReadAtMost(r, buf)
- if err != nil {
- return SniffedType{}, fmt.Errorf("DetectContentTypeFromReader io error: %w", err)
- }
- buf = buf[:n]
-
- return DetectContentType(buf), nil
-}
diff --git a/modules/typesniffer/typesniffer_test.go b/modules/typesniffer/typesniffer_test.go
index 3e5db3308b5..a0c824b912e 100644
--- a/modules/typesniffer/typesniffer_test.go
+++ b/modules/typesniffer/typesniffer_test.go
@@ -4,7 +4,6 @@
package typesniffer
import (
- "bytes"
"encoding/base64"
"encoding/hex"
"strings"
@@ -17,7 +16,7 @@ func TestDetectContentTypeLongerThanSniffLen(t *testing.T) {
// Pre-condition: Shorter than sniffLen detects SVG.
assert.Equal(t, "image/svg+xml", DetectContentType([]byte(` `)).contentType)
// Longer than sniffLen detects something else.
- assert.NotEqual(t, "image/svg+xml", DetectContentType([]byte(` `)).contentType)
+ assert.NotEqual(t, "image/svg+xml", DetectContentType([]byte(` `)).contentType)
}
func TestIsTextFile(t *testing.T) {
@@ -116,22 +115,13 @@ func TestIsAudio(t *testing.T) {
assert.True(t, DetectContentType([]byte("ID3Toy\n====\t* hi 🌞, ..."+"🌛"[0:2])).IsText()) // test ID3 tag with incomplete UTF8 char
}
-func TestDetectContentTypeFromReader(t *testing.T) {
- mp3, _ := base64.StdEncoding.DecodeString("SUQzBAAAAAABAFRYWFgAAAASAAADbWFqb3JfYnJhbmQAbXA0MgBUWFhYAAAAEQAAA21pbm9yX3Zl")
- st, err := DetectContentTypeFromReader(bytes.NewReader(mp3))
- assert.NoError(t, err)
- assert.True(t, st.IsAudio())
-}
-
func TestDetectContentTypeOgg(t *testing.T) {
oggAudio, _ := hex.DecodeString("4f67675300020000000000000000352f0000000000007dc39163011e01766f72626973000000000244ac0000000000000071020000000000b8014f6767530000")
- st, err := DetectContentTypeFromReader(bytes.NewReader(oggAudio))
- assert.NoError(t, err)
+ st := DetectContentType(oggAudio)
assert.True(t, st.IsAudio())
oggVideo, _ := hex.DecodeString("4f676753000200000000000000007d9747ef000000009b59daf3012a807468656f7261030201001e00110001e000010e00020000001e00000001000001000001")
- st, err = DetectContentTypeFromReader(bytes.NewReader(oggVideo))
- assert.NoError(t, err)
+ st = DetectContentType(oggVideo)
assert.True(t, st.IsVideo())
}
diff --git a/modules/util/error.go b/modules/util/error.go
index 8e67d5a82fb..6b2721618ec 100644
--- a/modules/util/error.go
+++ b/modules/util/error.go
@@ -17,8 +17,8 @@ var (
ErrNotExist = errors.New("resource does not exist") // also implies HTTP 404
ErrAlreadyExist = errors.New("resource already exists") // also implies HTTP 409
- // ErrUnprocessableContent implies HTTP 422, syntax of the request content was correct,
- // but server was unable to process the contained instructions
+ // ErrUnprocessableContent implies HTTP 422, the syntax of the request content is correct,
+ // but the server is unable to process the contained instructions
ErrUnprocessableContent = errors.New("unprocessable content")
)
diff --git a/modules/util/remove.go b/modules/util/remove.go
index d1e38faf5f1..3db0b5a7969 100644
--- a/modules/util/remove.go
+++ b/modules/util/remove.go
@@ -15,7 +15,7 @@ const windowsSharingViolationError syscall.Errno = 32
// Remove removes the named file or (empty) directory with at most 5 attempts.
func Remove(name string) error {
var err error
- for i := 0; i < 5; i++ {
+ for range 5 {
err = os.Remove(name)
if err == nil {
break
@@ -44,7 +44,7 @@ func Remove(name string) error {
// RemoveAll removes the named file or (empty) directory with at most 5 attempts.
func RemoveAll(name string) error {
var err error
- for i := 0; i < 5; i++ {
+ for range 5 {
err = os.RemoveAll(name)
if err == nil {
break
@@ -73,7 +73,7 @@ func RemoveAll(name string) error {
// Rename renames (moves) oldpath to newpath with at most 5 attempts.
func Rename(oldpath, newpath string) error {
var err error
- for i := 0; i < 5; i++ {
+ for i := range 5 {
err = os.Rename(oldpath, newpath)
if err == nil {
break
diff --git a/modules/util/rotatingfilewriter/writer_test.go b/modules/util/rotatingfilewriter/writer_test.go
index 88392797b37..f6ea1d50ae7 100644
--- a/modules/util/rotatingfilewriter/writer_test.go
+++ b/modules/util/rotatingfilewriter/writer_test.go
@@ -23,7 +23,7 @@ func TestCompressOldFile(t *testing.T) {
ng, err := os.OpenFile(nonGzip, os.O_CREATE|os.O_WRONLY, 0o660)
assert.NoError(t, err)
- for i := 0; i < 999; i++ {
+ for range 999 {
f.WriteString("This is a test file\n")
ng.WriteString("This is a test file\n")
}
diff --git a/modules/util/slice.go b/modules/util/slice.go
index da6886491e5..aaa729c1c9b 100644
--- a/modules/util/slice.go
+++ b/modules/util/slice.go
@@ -12,8 +12,7 @@ import (
// SliceContainsString sequential searches if string exists in slice.
func SliceContainsString(slice []string, target string, insensitive ...bool) bool {
if len(insensitive) != 0 && insensitive[0] {
- target = strings.ToLower(target)
- return slices.ContainsFunc(slice, func(t string) bool { return strings.ToLower(t) == target })
+ return slices.ContainsFunc(slice, func(t string) bool { return strings.EqualFold(t, target) })
}
return slices.Contains(slice, target)
diff --git a/modules/util/string.go b/modules/util/string.go
index 19cf75b8b35..b9b59df3ef8 100644
--- a/modules/util/string.go
+++ b/modules/util/string.go
@@ -103,10 +103,31 @@ func UnsafeStringToBytes(s string) []byte {
func SplitTrimSpace(input, sep string) []string {
input = strings.TrimSpace(input)
var stringList []string
- for _, s := range strings.Split(input, sep) {
+ for s := range strings.SplitSeq(input, sep) {
if s = strings.TrimSpace(s); s != "" {
stringList = append(stringList, s)
}
}
return stringList
}
+
+func asciiLower(b byte) byte {
+ if 'A' <= b && b <= 'Z' {
+ return b + ('a' - 'A')
+ }
+ return b
+}
+
+// AsciiEqualFold is from Golang https://cs.opensource.google/go/go/+/refs/tags/go1.24.4:src/net/http/internal/ascii/print.go
+// ASCII only. In most cases for protocols, we should only use this but not [strings.EqualFold]
+func AsciiEqualFold(s, t string) bool { //nolint:revive // PascalCase
+ 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
+}
diff --git a/modules/util/time_str.go b/modules/util/time_str.go
index 0fccfe82cc1..81b132c3db3 100644
--- a/modules/util/time_str.go
+++ b/modules/util/time_str.go
@@ -59,7 +59,7 @@ func TimeEstimateParse(timeStr string) (int64, error) {
unit := timeStr[match[4]:match[5]]
found := false
for _, u := range timeStrGlobalVars().units {
- if strings.ToLower(unit) == u.name {
+ if strings.EqualFold(unit, u.name) {
total += amount * u.num
found = true
break
diff --git a/modules/util/truncate.go b/modules/util/truncate.go
index 2bce2482813..52534d3cac7 100644
--- a/modules/util/truncate.go
+++ b/modules/util/truncate.go
@@ -19,7 +19,7 @@ func IsLikelyEllipsisLeftPart(s string) bool {
return strings.HasSuffix(s, utf8Ellipsis) || strings.HasSuffix(s, asciiEllipsis)
}
-func ellipsisGuessDisplayWidth(r rune) int {
+func ellipsisDisplayGuessWidth(r rune) int {
// To make the truncated string as long as possible,
// CJK/emoji chars are considered as 2-ASCII width but not 3-4 bytes width.
// Here we only make the best guess (better than counting them in bytes),
@@ -48,13 +48,17 @@ func ellipsisGuessDisplayWidth(r rune) int {
// It appends "…" or "..." at the end of truncated string.
// It guarantees the length of the returned runes doesn't exceed the limit.
func EllipsisDisplayString(str string, limit int) string {
- s, _, _, _ := ellipsisDisplayString(str, limit)
+ s, _, _, _ := ellipsisDisplayString(str, limit, ellipsisDisplayGuessWidth)
return s
}
// EllipsisDisplayStringX works like EllipsisDisplayString while it also returns the right part
func EllipsisDisplayStringX(str string, limit int) (left, right string) {
- left, offset, truncated, encounterInvalid := ellipsisDisplayString(str, limit)
+ return ellipsisDisplayStringX(str, limit, ellipsisDisplayGuessWidth)
+}
+
+func ellipsisDisplayStringX(str string, limit int, widthGuess func(rune) int) (left, right string) {
+ left, offset, truncated, encounterInvalid := ellipsisDisplayString(str, limit, widthGuess)
if truncated {
right = str[offset:]
r, _ := utf8.DecodeRune(UnsafeStringToBytes(right))
@@ -68,7 +72,7 @@ func EllipsisDisplayStringX(str string, limit int) (left, right string) {
return left, right
}
-func ellipsisDisplayString(str string, limit int) (res string, offset int, truncated, encounterInvalid bool) {
+func ellipsisDisplayString(str string, limit int, widthGuess func(rune) int) (res string, offset int, truncated, encounterInvalid bool) {
if len(str) <= limit {
return str, len(str), false, false
}
@@ -81,7 +85,7 @@ func ellipsisDisplayString(str string, limit int) (res string, offset int, trunc
for i, r := range str {
encounterInvalid = encounterInvalid || r == utf8.RuneError
pos = i
- runeWidth := ellipsisGuessDisplayWidth(r)
+ runeWidth := widthGuess(r)
if used+runeWidth+3 > limit {
break
}
@@ -96,7 +100,7 @@ func ellipsisDisplayString(str string, limit int) (res string, offset int, trunc
if nextCnt >= 4 {
break
}
- nextWidth += ellipsisGuessDisplayWidth(r)
+ nextWidth += widthGuess(r)
nextCnt++
}
if nextCnt <= 3 && used+nextWidth <= limit {
@@ -114,6 +118,10 @@ func ellipsisDisplayString(str string, limit int) (res string, offset int, trunc
return str[:offset] + ellipsis, offset, true, encounterInvalid
}
+func EllipsisTruncateRunes(str string, limit int) (left, right string) {
+ return ellipsisDisplayStringX(str, limit, func(r rune) int { return 1 })
+}
+
// TruncateRunes returns a truncated string with given rune limit,
// it returns input string if its rune length doesn't exceed the limit.
func TruncateRunes(str string, limit int) string {
diff --git a/modules/util/truncate_test.go b/modules/util/truncate_test.go
index 9f4ad7dc20e..6d71f38c0c2 100644
--- a/modules/util/truncate_test.go
+++ b/modules/util/truncate_test.go
@@ -29,7 +29,7 @@ func TestEllipsisGuessDisplayWidth(t *testing.T) {
t.Run(c.r, func(t *testing.T) {
w := 0
for _, r := range c.r {
- w += ellipsisGuessDisplayWidth(r)
+ w += ellipsisDisplayGuessWidth(r)
}
assert.Equal(t, c.want, w, "hex=% x", []byte(c.r))
})
diff --git a/modules/validation/helpers.go b/modules/validation/helpers.go
index 9f6cf5201a2..ba383ba195d 100644
--- a/modules/validation/helpers.go
+++ b/modules/validation/helpers.go
@@ -7,6 +7,7 @@ import (
"net"
"net/url"
"regexp"
+ "slices"
"strings"
"sync"
@@ -55,12 +56,7 @@ func IsValidSiteURL(uri string) bool {
return false
}
- for _, scheme := range setting.Service.ValidSiteURLSchemes {
- if scheme == u.Scheme {
- return true
- }
- }
- return false
+ return slices.Contains(setting.Service.ValidSiteURLSchemes, u.Scheme)
}
// IsEmailDomainListed checks whether the domain of an email address
diff --git a/modules/web/handler.go b/modules/web/handler.go
index 42a649714d9..843b17e8d1b 100644
--- a/modules/web/handler.go
+++ b/modules/web/handler.go
@@ -16,7 +16,7 @@ import (
var responseStatusProviders = map[reflect.Type]func(req *http.Request) types.ResponseStatusProvider{}
func RegisterResponseStatusProvider[T any](fn func(req *http.Request) types.ResponseStatusProvider) {
- responseStatusProviders[reflect.TypeOf((*T)(nil)).Elem()] = fn
+ responseStatusProviders[reflect.TypeFor[T]()] = fn
}
// responseWriter is a wrapper of http.ResponseWriter, to check whether the response has been written
@@ -48,8 +48,8 @@ func (r *responseWriter) WriteHeader(statusCode int) {
}
var (
- httpReqType = reflect.TypeOf((*http.Request)(nil))
- respWriterType = reflect.TypeOf((*http.ResponseWriter)(nil)).Elem()
+ httpReqType = reflect.TypeFor[*http.Request]()
+ respWriterType = reflect.TypeFor[http.ResponseWriter]()
)
// preCheckHandler checks whether the handler is valid, developers could get first-time feedback, all mistakes could be found at startup
diff --git a/modules/web/middleware/binding.go b/modules/web/middleware/binding.go
index 03e188f5098..ee4eca976e3 100644
--- a/modules/web/middleware/binding.go
+++ b/modules/web/middleware/binding.go
@@ -50,7 +50,7 @@ func AssignForm(form any, data map[string]any) {
}
func getRuleBody(field reflect.StructField, prefix string) string {
- for _, rule := range strings.Split(field.Tag.Get("binding"), ";") {
+ for rule := range strings.SplitSeq(field.Tag.Get("binding"), ";") {
if strings.HasPrefix(rule, prefix) {
return rule[len(prefix) : len(rule)-1]
}
diff --git a/modules/web/router.go b/modules/web/router.go
index da06b955b13..5812ff69d49 100644
--- a/modules/web/router.go
+++ b/modules/web/router.go
@@ -125,8 +125,8 @@ func (r *Router) Methods(methods, pattern string, h ...any) {
middlewares, handlerFunc := wrapMiddlewareAndHandler(r.curMiddlewares, h)
fullPattern := r.getPattern(pattern)
if strings.Contains(methods, ",") {
- methods := strings.Split(methods, ",")
- for _, method := range methods {
+ methods := strings.SplitSeq(methods, ",")
+ for method := range methods {
r.chiRouter.With(middlewares...).Method(strings.TrimSpace(method), fullPattern, handlerFunc)
}
} else {
diff --git a/modules/web/router_path.go b/modules/web/router_path.go
index baf1b522afe..64154c34a50 100644
--- a/modules/web/router_path.go
+++ b/modules/web/router_path.go
@@ -6,6 +6,7 @@ package web
import (
"net/http"
"regexp"
+ "slices"
"strings"
"code.gitea.io/gitea/modules/container"
@@ -25,6 +26,7 @@ func (g *RouterPathGroup) ServeHTTP(resp http.ResponseWriter, req *http.Request)
path := chiCtx.URLParam(g.pathParam)
for _, m := range g.matchers {
if m.matchPath(chiCtx, path) {
+ chiCtx.RoutePatterns = append(chiCtx.RoutePatterns, m.pattern)
handler := m.handlerFunc
for i := len(m.middlewares) - 1; i >= 0; i-- {
handler = m.middlewares[i](handler).ServeHTTP
@@ -36,11 +38,22 @@ func (g *RouterPathGroup) ServeHTTP(resp http.ResponseWriter, req *http.Request)
g.r.chiRouter.NotFoundHandler().ServeHTTP(resp, req)
}
+type RouterPathGroupPattern struct {
+ pattern string
+ re *regexp.Regexp
+ params []routerPathParam
+ middlewares []any
+}
+
// MatchPath matches the request method, and uses regexp to match the path.
-// The pattern uses "<...>" to define path parameters, for example: "/" (different from chi router)
-// It is only designed to resolve some special cases which chi router can't handle.
+// The pattern uses "<...>" to define path parameters, for example, "/" (different from chi router)
+// It is only designed to resolve some special cases that chi router can't handle.
// For most cases, it shouldn't be used because it needs to iterate all rules to find the matched one (inefficient).
func (g *RouterPathGroup) MatchPath(methods, pattern string, h ...any) {
+ g.MatchPattern(methods, g.PatternRegexp(pattern), h...)
+}
+
+func (g *RouterPathGroup) MatchPattern(methods string, pattern *RouterPathGroupPattern, h ...any) {
g.matchers = append(g.matchers, newRouterPathMatcher(methods, pattern, h...))
}
@@ -51,6 +64,7 @@ type routerPathParam struct {
type routerPathMatcher struct {
methods container.Set[string]
+ pattern string
re *regexp.Regexp
params []routerPathParam
middlewares []func(http.Handler) http.Handler
@@ -96,29 +110,35 @@ func isValidMethod(name string) bool {
return false
}
-func newRouterPathMatcher(methods, pattern string, h ...any) *routerPathMatcher {
- middlewares, handlerFunc := wrapMiddlewareAndHandler(nil, h)
+func newRouterPathMatcher(methods string, patternRegexp *RouterPathGroupPattern, h ...any) *routerPathMatcher {
+ middlewares, handlerFunc := wrapMiddlewareAndHandler(patternRegexp.middlewares, h)
p := &routerPathMatcher{methods: make(container.Set[string]), middlewares: middlewares, handlerFunc: handlerFunc}
- for _, method := range strings.Split(methods, ",") {
+ for method := range strings.SplitSeq(methods, ",") {
method = strings.TrimSpace(method)
if !isValidMethod(method) {
panic("invalid HTTP method: " + method)
}
p.methods.Add(method)
}
+ p.pattern, p.re, p.params = patternRegexp.pattern, patternRegexp.re, patternRegexp.params
+ return p
+}
+
+func patternRegexp(pattern string, h ...any) *RouterPathGroupPattern {
+ p := &RouterPathGroupPattern{middlewares: slices.Clone(h)}
re := []byte{'^'}
lastEnd := 0
for lastEnd < len(pattern) {
start := strings.IndexByte(pattern[lastEnd:], '<')
if start == -1 {
- re = append(re, pattern[lastEnd:]...)
+ re = append(re, regexp.QuoteMeta(pattern[lastEnd:])...)
break
}
end := strings.IndexByte(pattern[lastEnd+start:], '>')
if end == -1 {
panic("invalid pattern: " + pattern)
}
- re = append(re, pattern[lastEnd:lastEnd+start]...)
+ re = append(re, regexp.QuoteMeta(pattern[lastEnd:lastEnd+start])...)
partName, partExp, _ := strings.Cut(pattern[lastEnd+start+1:lastEnd+start+end], ":")
lastEnd += start + end + 1
@@ -140,7 +160,10 @@ func newRouterPathMatcher(methods, pattern string, h ...any) *routerPathMatcher
p.params = append(p.params, param)
}
re = append(re, '$')
- reStr := string(re)
- p.re = regexp.MustCompile(reStr)
+ p.pattern, p.re = pattern, regexp.MustCompile(string(re))
return p
}
+
+func (g *RouterPathGroup) PatternRegexp(pattern string, h ...any) *RouterPathGroupPattern {
+ return patternRegexp(pattern, h...)
+}
diff --git a/modules/web/router_test.go b/modules/web/router_test.go
index 21619012ea7..f216aa61807 100644
--- a/modules/web/router_test.go
+++ b/modules/web/router_test.go
@@ -34,7 +34,7 @@ func TestPathProcessor(t *testing.T) {
testProcess := func(pattern, uri string, expectedPathParams map[string]string) {
chiCtx := chi.NewRouteContext()
chiCtx.RouteMethod = "GET"
- p := newRouterPathMatcher("GET", pattern, http.NotFound)
+ p := newRouterPathMatcher("GET", patternRegexp(pattern), http.NotFound)
assert.True(t, p.matchPath(chiCtx, uri), "use pattern %s to process uri %s", pattern, uri)
assert.Equal(t, expectedPathParams, chiURLParamsToMap(chiCtx), "use pattern %s to process uri %s", pattern, uri)
}
@@ -56,18 +56,23 @@ func TestRouter(t *testing.T) {
recorder.Body = buff
type resultStruct struct {
- method string
- pathParams map[string]string
- handlerMark string
+ method string
+ pathParams map[string]string
+ handlerMarks []string
+ chiRoutePattern *string
}
- var res resultStruct
+ var res resultStruct
h := func(optMark ...string) func(resp http.ResponseWriter, req *http.Request) {
mark := util.OptionalArg(optMark, "")
return func(resp http.ResponseWriter, req *http.Request) {
+ chiCtx := chi.RouteContext(req.Context())
res.method = req.Method
- res.pathParams = chiURLParamsToMap(chi.RouteContext(req.Context()))
- res.handlerMark = mark
+ res.pathParams = chiURLParamsToMap(chiCtx)
+ res.chiRoutePattern = util.ToPointer(chiCtx.RoutePattern())
+ if mark != "" {
+ res.handlerMarks = append(res.handlerMarks, mark)
+ }
}
}
@@ -77,6 +82,8 @@ func TestRouter(t *testing.T) {
if stop := req.FormValue("stop"); stop != "" && (mark == "" || mark == stop) {
h(stop)(resp, req)
resp.WriteHeader(http.StatusOK)
+ } else if mark != "" {
+ res.handlerMarks = append(res.handlerMarks, mark)
}
}
}
@@ -108,7 +115,7 @@ func TestRouter(t *testing.T) {
m.Delete("", h())
})
m.PathGroup("/*", func(g *RouterPathGroup) {
- g.MatchPath("GET", `//`, stopMark("s2"), h("match-path"))
+ g.MatchPattern("GET", g.PatternRegexp(`//`, stopMark("s2")), stopMark("s3"), h("match-path"))
}, stopMark("s1"))
})
})
@@ -121,36 +128,47 @@ func TestRouter(t *testing.T) {
req, err := http.NewRequest(methodPathFields[0], methodPathFields[1], nil)
assert.NoError(t, err)
r.ServeHTTP(recorder, req)
+ if expected.chiRoutePattern == nil {
+ res.chiRoutePattern = nil
+ }
assert.Equal(t, expected, res)
})
}
t.Run("RootRouter", func(t *testing.T) {
- testRoute(t, "GET /the-user/the-repo/other", resultStruct{method: "GET", handlerMark: "not-found:/"})
+ testRoute(t, "GET /the-user/the-repo/other", resultStruct{
+ method: "GET",
+ handlerMarks: []string{"not-found:/"},
+ chiRoutePattern: util.ToPointer(""),
+ })
testRoute(t, "GET /the-user/the-repo/pulls", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "pulls"},
- handlerMark: "list-issues-b",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "pulls"},
+ handlerMarks: []string{"list-issues-b"},
})
testRoute(t, "GET /the-user/the-repo/issues/123", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "issues", "index": "123"},
- handlerMark: "view-issue",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "issues", "index": "123"},
+ handlerMarks: []string{"view-issue"},
+ chiRoutePattern: util.ToPointer("/{username}/{reponame}/{type:issues|pulls}/{index}"),
})
testRoute(t, "GET /the-user/the-repo/issues/123?stop=hijack", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "issues", "index": "123"},
- handlerMark: "hijack",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "type": "issues", "index": "123"},
+ handlerMarks: []string{"hijack"},
})
testRoute(t, "POST /the-user/the-repo/issues/123/update", resultStruct{
- method: "POST",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "index": "123"},
- handlerMark: "update-issue",
+ method: "POST",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "index": "123"},
+ handlerMarks: []string{"update-issue"},
})
})
t.Run("Sub Router", func(t *testing.T) {
- testRoute(t, "GET /api/v1/other", resultStruct{method: "GET", handlerMark: "not-found:/api/v1"})
+ testRoute(t, "GET /api/v1/other", resultStruct{
+ method: "GET",
+ handlerMarks: []string{"not-found:/api/v1"},
+ })
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches", resultStruct{
method: "GET",
pathParams: map[string]string{"username": "the-user", "reponame": "the-repo"},
@@ -179,31 +197,38 @@ func TestRouter(t *testing.T) {
t.Run("MatchPath", func(t *testing.T) {
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1/d2/fn", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn", "dir": "d1/d2", "file": "fn"},
- handlerMark: "match-path",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn", "dir": "d1/d2", "file": "fn"},
+ handlerMarks: []string{"s1", "s2", "s3", "match-path"},
})
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1%2fd2/fn", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1%2fd2/fn", "dir": "d1%2fd2", "file": "fn"},
- handlerMark: "match-path",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1%2fd2/fn", "dir": "d1%2fd2", "file": "fn"},
+ handlerMarks: []string{"s1", "s2", "s3", "match-path"},
})
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1/d2/000", resultStruct{
- method: "GET",
- pathParams: map[string]string{"reponame": "the-repo", "username": "the-user", "*": "d1/d2/000"},
- handlerMark: "not-found:/api/v1",
+ method: "GET",
+ pathParams: map[string]string{"reponame": "the-repo", "username": "the-user", "*": "d1/d2/000"},
+ handlerMarks: []string{"s1", "not-found:/api/v1"},
})
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1/d2/fn?stop=s1", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn"},
- handlerMark: "s1",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn"},
+ handlerMarks: []string{"s1"},
})
testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1/d2/fn?stop=s2", resultStruct{
- method: "GET",
- pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn", "dir": "d1/d2", "file": "fn"},
- handlerMark: "s2",
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn", "dir": "d1/d2", "file": "fn"},
+ handlerMarks: []string{"s1", "s2"},
+ })
+
+ testRoute(t, "GET /api/v1/repos/the-user/the-repo/branches/d1/d2/fn?stop=s3", resultStruct{
+ method: "GET",
+ pathParams: map[string]string{"username": "the-user", "reponame": "the-repo", "*": "d1/d2/fn", "dir": "d1/d2", "file": "fn"},
+ handlerMarks: []string{"s1", "s2", "s3"},
+ chiRoutePattern: util.ToPointer("/api/v1/repos/{username}/{reponame}/branches//"),
})
})
}
diff --git a/modules/webhook/type.go b/modules/webhook/type.go
index 72ffde26a15..89c6a4bfe59 100644
--- a/modules/webhook/type.go
+++ b/modules/webhook/type.go
@@ -38,6 +38,7 @@ const (
HookEventPullRequestReview HookEventType = "pull_request_review"
// Actions event only
HookEventSchedule HookEventType = "schedule"
+ HookEventWorkflowRun HookEventType = "workflow_run"
HookEventWorkflowJob HookEventType = "workflow_job"
)
@@ -67,6 +68,7 @@ func AllEvents() []HookEventType {
HookEventRelease,
HookEventPackage,
HookEventStatus,
+ HookEventWorkflowRun,
HookEventWorkflowJob,
}
}
diff --git a/modules/zstd/zstd_test.go b/modules/zstd/zstd_test.go
index c3ca8e78f71..7fd30484cac 100644
--- a/modules/zstd/zstd_test.go
+++ b/modules/zstd/zstd_test.go
@@ -16,7 +16,7 @@ import (
)
func TestWriterReader(t *testing.T) {
- testData := prepareTestData(t, 20_000_000)
+ testData := prepareTestData(t, 1_000_000)
result := bytes.NewBuffer(nil)
@@ -64,7 +64,7 @@ func TestWriterReader(t *testing.T) {
}
func TestSeekableWriterReader(t *testing.T) {
- testData := prepareTestData(t, 20_000_000)
+ testData := prepareTestData(t, 2_000_000)
result := bytes.NewBuffer(nil)
@@ -109,7 +109,7 @@ func TestSeekableWriterReader(t *testing.T) {
reader, err := NewSeekableReader(assertReader)
require.NoError(t, err)
- _, err = reader.Seek(10_000_000, io.SeekStart)
+ _, err = reader.Seek(1_000_000, io.SeekStart)
require.NoError(t, err)
data := make([]byte, 1000)
@@ -117,7 +117,7 @@ func TestSeekableWriterReader(t *testing.T) {
require.NoError(t, err)
require.NoError(t, reader.Close())
- assert.Equal(t, testData[10_000_000:10_000_000+1000], data)
+ assert.Equal(t, testData[1_000_000:1_000_000+1000], data)
// Should seek 3 times,
// the first two times are for getting the index,
diff --git a/options/fileicon/material-icon-rules.json b/options/fileicon/material-icon-rules.json
index a20244d6ad6..caa068ff44c 100644
--- a/options/fileicon/material-icon-rules.json
+++ b/options/fileicon/material-icon-rules.json
@@ -3131,6 +3131,34 @@
".links": "folder-link",
"_links": "folder-link",
"__links__": "folder-link",
+ "pytorch": "folder-pytorch",
+ ".pytorch": "folder-pytorch",
+ "_pytorch": "folder-pytorch",
+ "__pytorch__": "folder-pytorch",
+ "torch": "folder-pytorch",
+ ".torch": "folder-pytorch",
+ "_torch": "folder-pytorch",
+ "__torch__": "folder-pytorch",
+ "blender": "folder-blender",
+ ".blender": "folder-blender",
+ "_blender": "folder-blender",
+ "__blender__": "folder-blender",
+ "blender-assets": "folder-blender",
+ ".blender-assets": "folder-blender",
+ "_blender-assets": "folder-blender",
+ "__blender-assets__": "folder-blender",
+ "blender-files": "folder-blender",
+ ".blender-files": "folder-blender",
+ "_blender-files": "folder-blender",
+ "__blender-files__": "folder-blender",
+ "blender-project": "folder-blender",
+ ".blender-project": "folder-blender",
+ "_blender-project": "folder-blender",
+ "__blender-project__": "folder-blender",
+ "blender-models": "folder-blender",
+ ".blender-models": "folder-blender",
+ "_blender-models": "folder-blender",
+ "__blender-models__": "folder-blender",
"meta-inf": "folder-config",
".meta-inf": "folder-config",
"_meta-inf": "folder-config",
@@ -6291,7 +6319,35 @@
"links": "folder-link-open",
".links": "folder-link-open",
"_links": "folder-link-open",
- "__links__": "folder-link-open"
+ "__links__": "folder-link-open",
+ "pytorch": "folder-pytorch-open",
+ ".pytorch": "folder-pytorch-open",
+ "_pytorch": "folder-pytorch-open",
+ "__pytorch__": "folder-pytorch-open",
+ "torch": "folder-pytorch-open",
+ ".torch": "folder-pytorch-open",
+ "_torch": "folder-pytorch-open",
+ "__torch__": "folder-pytorch-open",
+ "blender": "folder-blender-open",
+ ".blender": "folder-blender-open",
+ "_blender": "folder-blender-open",
+ "__blender__": "folder-blender-open",
+ "blender-assets": "folder-blender-open",
+ ".blender-assets": "folder-blender-open",
+ "_blender-assets": "folder-blender-open",
+ "__blender-assets__": "folder-blender-open",
+ "blender-files": "folder-blender-open",
+ ".blender-files": "folder-blender-open",
+ "_blender-files": "folder-blender-open",
+ "__blender-files__": "folder-blender-open",
+ "blender-project": "folder-blender-open",
+ ".blender-project": "folder-blender-open",
+ "_blender-project": "folder-blender-open",
+ "__blender-project__": "folder-blender-open",
+ "blender-models": "folder-blender-open",
+ ".blender-models": "folder-blender-open",
+ "_blender-models": "folder-blender-open",
+ "__blender-models__": "folder-blender-open"
},
"rootFolderNames": {},
"rootFolderNamesExpanded": {},
@@ -7099,10 +7155,10 @@
"fast": "lisp",
"stl": "3d",
"stp": "3d",
+ "step": "3d",
"obj": "3d",
"o": "3d",
"ac": "3d",
- "blend": "3d",
"dxf": "3d",
"fbx": "3d",
"mesh": "3d",
@@ -7115,6 +7171,12 @@
"vox": "3d",
"gltf": "3d",
"glb": "3d",
+ "3ds": "3d",
+ "dae": "3d",
+ "ply": "3d",
+ "wrl": "3d",
+ "usd": "3d",
+ "usdz": "3d",
"svg": "svg",
"ai": "adobe-illustrator",
"ait": "adobe-illustrator",
@@ -7382,6 +7444,12 @@
"snakemake": "snakemake",
"cpn": "coloredpetrinets",
"pnml": "coloredpetrinets",
+ "pt": "pytorch",
+ "pth": "pytorch",
+ "pwf": "pytorch",
+ "blend": "blender",
+ "blend1": "blender",
+ "blend2": "blender",
"yaml-tmlanguage": "yaml",
"tmlanguage": "xml",
"cljx": "clojure",
@@ -7545,7 +7613,6 @@
"opml": "xml",
"owl": "xml",
"proj": "xml",
- "pt": "xml",
"publishsettings": "xml",
"pubxml": "xml",
"pubxml.user": "xml",
@@ -7883,6 +7950,7 @@
".pubignore": "dart",
"cmakelists.txt": "cmake",
"cmakecache.txt": "cmake",
+ "CMakePresets.json": "cmake",
"semgrep.yml": "semgrep",
".semgrepignore": "semgrep",
"vue.config.js": "vue-config",
@@ -8491,6 +8559,7 @@
".mocharc.yml": "mocha",
".mocharc.yaml": "mocha",
".mocharc.js": "mocha",
+ ".mocharc.cjs": "mocha",
".mocharc.json": "mocha",
".mocharc.jsonc": "mocha",
"jenkinsfile": "jenkins",
@@ -8739,11 +8808,13 @@
"azure-pipelines-main.yaml": "azure-pipelines",
"vagrantfile": "vagrant",
"prisma.yml": "prisma",
+ "prisma.config.ts": "prisma",
".nycrc": "istanbul",
".nycrc.json": "istanbul",
".nycrc.yaml": "istanbul",
".nycrc.yml": "istanbul",
"nyc.config.js": "istanbul",
+ "nyc.config.cjs": "istanbul",
".istanbul.yml": "istanbul",
"tailwind.js": "tailwindcss",
"tailwind.ts": "tailwindcss",
@@ -9477,6 +9548,7 @@
"hadolint.yaml": "hadolint",
"hadolint.yml": "hadolint",
".rhistory": "r",
+ "cmakepresets.json": "cmake",
"cname": "http",
"sonarqube.analysis.xml": "sonarcloud",
"owners": "codeowners",
@@ -9590,7 +9662,13 @@
"tex": "tex",
"latex": "latex",
"latex-expl3": "latex",
+ "latex-class": "latex-class",
+ "latex-package": "latex-package",
+ "context": "context",
"doctex": "doctex",
+ "doctex-installer": "doctex-installer",
+ "bibtex": "bibliography",
+ "bibtex-style": "bibtex-style",
"apex": "salesforce",
"sas": "sas",
"dockerfile": "docker",
@@ -9622,8 +9700,6 @@
"vue-postcss": "vue",
"vue-html": "vue",
"lua": "lua",
- "bibtex": "bibliography",
- "bibtex-style": "bibtex-style",
"log": "log",
"jupyter": "jupyter",
"plaintext": "document",
diff --git a/options/fileicon/material-icon-svgs.json b/options/fileicon/material-icon-svgs.json
index 5fb182b731a..326e0a1b911 100644
--- a/options/fileicon/material-icon-svgs.json
+++ b/options/fileicon/material-icon-svgs.json
@@ -10,36 +10,36 @@
"adobe-photoshop_light": " ",
"adobe-swc": " ",
"adonis": " ",
- "advpl-include.clone": " ",
- "advpl-ptm.clone": " ",
- "advpl-tlpp.clone": " ",
+ "advpl-include.clone": " ",
+ "advpl-ptm.clone": " ",
+ "advpl-tlpp.clone": " ",
"advpl": " ",
- "ahk2.clone": " ",
+ "ahk2.clone": " ",
"amplify": " ",
"android": " ",
- "angular-component.clone": " ",
- "angular-directive.clone": " ",
- "angular-guard.clone": " ",
- "angular-interceptor.clone": " ",
- "angular-pipe.clone": " ",
- "angular-resolver.clone": " ",
- "angular-service.clone": " ",
+ "angular-component.clone": " ",
+ "angular-directive.clone": " ",
+ "angular-guard.clone": " ",
+ "angular-interceptor.clone": " ",
+ "angular-pipe.clone": " ",
+ "angular-resolver.clone": " ",
+ "angular-service.clone": " ",
"angular": " ",
"antlr": " ",
"apiblueprint": " ",
"apollo": " ",
"applescript": " ",
"apps-script": " ",
- "appveyor": " ",
- "architecture": " ",
- "arduino": " ",
+ "appveyor": " ",
+ "architecture": " ",
+ "arduino": " ",
"asciidoc": " ",
"assembly": " ",
"astro-config": " ",
"astro": " ",
"astyle": " ",
"audio": " ",
- "aurelia": " ",
+ "aurelia": " ",
"authors": " ",
"auto": " ",
"auto_light": " ",
@@ -58,13 +58,14 @@
"bibliography": " ",
"bibtex-style": " ",
"bicep": " ",
- "biome": " ",
+ "biome": " ",
"bitbucket": " ",
"bithound": " ",
+ "blender": " ",
"blink": " ",
"blink_light": " ",
"blitz": " ",
- "bower": " ",
+ "bower": " ",
"brainfuck": " ",
"browserlist": " ",
"browserlist_light": " ",
@@ -72,14 +73,14 @@
"buck": " ",
"bucklescript": " ",
"buildkite": " ",
- "bun": " ",
- "bun_light": " ",
+ "bun": " ",
+ "bun_light": " ",
"c": " ",
"c3": " ",
- "cabal": " ",
+ "cabal": " ",
"caddy": " ",
"cadence": " ",
- "cairo": " ",
+ "cairo": " ",
"cake": " ",
"capacitor": " ",
"capnp": " ",
@@ -105,7 +106,7 @@
"code-climate_light": " ",
"codecov": " ",
"codeowners": " ",
- "coderabbit-ai": " ",
+ "coderabbit-ai": " ",
"coffee": " ",
"coldfusion": " ",
"coloredpetrinets": " ",
@@ -116,7 +117,8 @@
"conduct": " ",
"console": " ",
"container.clone": " ",
- "contentlayer": " ",
+ "contentlayer": " ",
+ "context": " ",
"contributing": " ",
"controller": " ",
"copilot": " ",
@@ -130,10 +132,10 @@
"css-map": " ",
"css": " ",
"cucumber": " ",
- "cuda": " ",
+ "cuda": " ",
"cypress": " ",
"d": " ",
- "dart": " ",
+ "dart": " ",
"dart_generated": " ",
"database": " ",
"deepsource": " ",
@@ -148,31 +150,32 @@
"disc": " ",
"django": " ",
"dll": " ",
- "docker": " ",
- "doctex.clone": " ",
+ "docker": " ",
+ "doctex-installer": " ",
+ "doctex.clone": " ",
"document": " ",
"dotjs": " ",
"drawio": " ",
"drizzle": " ",
"drone": " ",
"drone_light": " ",
- "dtx.clone": " ",
- "duc": " ",
+ "dtx.clone": " ",
+ "duc": " ",
"dune": " ",
"edge": " ",
- "editorconfig": " ",
+ "editorconfig": " ",
"ejs": " ",
"elixir": " ",
- "elm": " ",
+ "elm": " ",
"email": " ",
- "ember": " ",
+ "ember": " ",
"epub": " ",
"erlang": " ",
"esbuild": " ",
"eslint": " ",
"excalidraw": " ",
"exe": " ",
- "fastlane": " ",
+ "fastlane": " ",
"favicon": " ",
"figma": " ",
"file": " ",
@@ -187,8 +190,8 @@
"folder-angular": " ",
"folder-animation-open": " ",
"folder-animation": " ",
- "folder-ansible-open": " ",
- "folder-ansible": " ",
+ "folder-ansible-open": " ",
+ "folder-ansible": " ",
"folder-api-open": " ",
"folder-api": " ",
"folder-apollo-open": " ",
@@ -203,8 +206,8 @@
"folder-attachment": " ",
"folder-audio-open": " ",
"folder-audio": " ",
- "folder-aurelia-open": " ",
- "folder-aurelia": " ",
+ "folder-aurelia-open": " ",
+ "folder-aurelia": " ",
"folder-aws-open": " ",
"folder-aws": " ",
"folder-azure-pipelines-open": " ",
@@ -221,10 +224,12 @@
"folder-bibliography": " ",
"folder-bicep-open": " ",
"folder-bicep": " ",
- "folder-bloc-open": " ",
- "folder-bloc": " ",
- "folder-bower-open": " ",
- "folder-bower": " ",
+ "folder-blender-open": " ",
+ "folder-blender": " ",
+ "folder-bloc-open": " ",
+ "folder-bloc": " ",
+ "folder-bower-open": " ",
+ "folder-bower": " ",
"folder-buildkite-open": " ",
"folder-buildkite": " ",
"folder-cart-open": " ",
@@ -243,8 +248,8 @@
"folder-cline": " ",
"folder-cloud-functions-open": " ",
"folder-cloud-functions": " ",
- "folder-cloudflare-open": " ",
- "folder-cloudflare": " ",
+ "folder-cloudflare-open": " ",
+ "folder-cloudflare": " ",
"folder-cluster-open": " ",
"folder-cluster": " ",
"folder-cobol-open": " ",
@@ -293,8 +298,8 @@
"folder-delta": " ",
"folder-desktop-open": " ",
"folder-desktop": " ",
- "folder-development-open.clone": " ",
- "folder-development.clone": " ",
+ "folder-development-open.clone": " ",
+ "folder-development.clone": " ",
"folder-directive-open": " ",
"folder-directive": " ",
"folder-dist-open": " ",
@@ -323,13 +328,13 @@
"folder-examples": " ",
"folder-expo-open": " ",
"folder-expo": " ",
- "folder-export-open": " ",
- "folder-export": " ",
+ "folder-export-open": " ",
+ "folder-export": " ",
"folder-fastlane-open": " ",
"folder-fastlane": " ",
"folder-favicon-open": " ",
"folder-favicon": " ",
- "folder-firebase-open": " ",
+ "folder-firebase-open": " ",
"folder-firebase": " ",
"folder-firestore-open": " ",
"folder-firestore": " ",
@@ -339,8 +344,8 @@
"folder-flutter": " ",
"folder-font-open": " ",
"folder-font": " ",
- "folder-forgejo-open": " ",
- "folder-forgejo": " ",
+ "folder-forgejo-open": " ",
+ "folder-forgejo": " ",
"folder-functions-open": " ",
"folder-functions": " ",
"folder-gamemaker-open": " ",
@@ -407,8 +412,8 @@
"folder-job": " ",
"folder-json-open": " ",
"folder-json": " ",
- "folder-jupyter-open": " ",
- "folder-jupyter": " ",
+ "folder-jupyter-open": " ",
+ "folder-jupyter": " ",
"folder-keys-open": " ",
"folder-keys": " ",
"folder-kubernetes-open": " ",
@@ -423,8 +428,8 @@
"folder-less": " ",
"folder-lib-open": " ",
"folder-lib": " ",
- "folder-link-open": " ",
- "folder-link": " ",
+ "folder-link-open": " ",
+ "folder-link": " ",
"folder-linux-open": " ",
"folder-linux": " ",
"folder-liquibase-open": " ",
@@ -435,8 +440,8 @@
"folder-lottie": " ",
"folder-lua-open": " ",
"folder-lua": " ",
- "folder-luau-open": " ",
- "folder-luau": " ",
+ "folder-luau-open": " ",
+ "folder-luau": " ",
"folder-macos-open": " ",
"folder-macos": " ",
"folder-mail-open": " ",
@@ -467,26 +472,26 @@
"folder-netlify": " ",
"folder-next-open": " ",
"folder-next": " ",
- "folder-ngrx-actions-open.clone": " ",
- "folder-ngrx-actions.clone": " ",
- "folder-ngrx-effects-open.clone": " ",
- "folder-ngrx-effects.clone": " ",
- "folder-ngrx-entities-open.clone": " ",
- "folder-ngrx-entities.clone": " ",
- "folder-ngrx-reducer-open.clone": " ",
- "folder-ngrx-reducer.clone": " ",
- "folder-ngrx-selectors-open.clone": " ",
- "folder-ngrx-selectors.clone": " ",
- "folder-ngrx-state-open.clone": " ",
- "folder-ngrx-state.clone": " ",
+ "folder-ngrx-actions-open.clone": " ",
+ "folder-ngrx-actions.clone": " ",
+ "folder-ngrx-effects-open.clone": " ",
+ "folder-ngrx-effects.clone": " ",
+ "folder-ngrx-entities-open.clone": " ",
+ "folder-ngrx-entities.clone": " ",
+ "folder-ngrx-reducer-open.clone": " ",
+ "folder-ngrx-reducer.clone": " ",
+ "folder-ngrx-selectors-open.clone": " ",
+ "folder-ngrx-selectors.clone": " ",
+ "folder-ngrx-state-open.clone": " ",
+ "folder-ngrx-state.clone": " ",
"folder-ngrx-store-open": " ",
"folder-ngrx-store": " ",
"folder-node-open": " ",
"folder-node": " ",
"folder-nuxt-open": " ",
"folder-nuxt": " ",
- "folder-obsidian-open": " ",
- "folder-obsidian": " ",
+ "folder-obsidian-open": " ",
+ "folder-obsidian": " ",
"folder-open": " ",
"folder-other-open": " ",
"folder-other": " ",
@@ -522,20 +527,22 @@
"folder-public": " ",
"folder-python-open": " ",
"folder-python": " ",
+ "folder-pytorch-open": " ",
+ "folder-pytorch": " ",
"folder-quasar-open": " ",
"folder-quasar": " ",
"folder-queue-open": " ",
"folder-queue": " ",
"folder-react-components-open": " ",
"folder-react-components": " ",
- "folder-redux-actions-open.clone": " ",
- "folder-redux-actions.clone": " ",
+ "folder-redux-actions-open.clone": " ",
+ "folder-redux-actions.clone": " ",
"folder-redux-reducer-open": " ",
"folder-redux-reducer": " ",
- "folder-redux-selector-open.clone": " ",
- "folder-redux-selector.clone": " ",
- "folder-redux-store-open.clone": " ",
- "folder-redux-store.clone": " ",
+ "folder-redux-selector-open.clone": " ",
+ "folder-redux-selector.clone": " ",
+ "folder-redux-store-open.clone": " ",
+ "folder-redux-store.clone": " ",
"folder-repository-open": " ",
"folder-repository": " ",
"folder-resolver-open": " ",
@@ -552,8 +559,8 @@
"folder-routes": " ",
"folder-rules-open": " ",
"folder-rules": " ",
- "folder-rust-open": " ",
- "folder-rust": " ",
+ "folder-rust-open": " ",
+ "folder-rust": " ",
"folder-sandbox-open": " ",
"folder-sandbox": " ",
"folder-sass-open": " ",
@@ -567,7 +574,7 @@
"folder-secure-open": " ",
"folder-secure": " ",
"folder-seeders-open": " ",
- "folder-seeders": " ",
+ "folder-seeders": " ",
"folder-server-open": " ",
"folder-server": " ",
"folder-serverless-open": " ",
@@ -576,8 +583,8 @@
"folder-shader": " ",
"folder-shared-open": " ",
"folder-shared": " ",
- "folder-snapcraft-open": " ",
- "folder-snapcraft": " ",
+ "folder-snapcraft-open": " ",
+ "folder-snapcraft": " ",
"folder-snippet-open": " ",
"folder-snippet": " ",
"folder-src-open": " ",
@@ -624,8 +631,8 @@
"folder-theme": " ",
"folder-tools-open": " ",
"folder-tools": " ",
- "folder-trash-open": " ",
- "folder-trash": " ",
+ "folder-trash-open": " ",
+ "folder-trash": " ",
"folder-trigger-open": " ",
"folder-trigger": " ",
"folder-turborepo-open": " ",
@@ -664,30 +671,30 @@
"folder-vuex-store": " ",
"folder-wakatime-open": " ",
"folder-wakatime": " ",
- "folder-webpack-open": " ",
- "folder-webpack": " ",
+ "folder-webpack-open": " ",
+ "folder-webpack": " ",
"folder-windows-open": " ",
"folder-windows": " ",
- "folder-wordpress-open": " ",
- "folder-wordpress": " ",
+ "folder-wordpress-open": " ",
+ "folder-wordpress": " ",
"folder-yarn-open": " ",
"folder-yarn": " ",
- "folder-zeabur-open": " ",
- "folder-zeabur": " ",
+ "folder-zeabur-open": " ",
+ "folder-zeabur": " ",
"folder": " ",
"font": " ",
"forth": " ",
"fortran": " ",
"foxpro": " ",
"freemarker": " ",
- "fsharp": " ",
- "fusebox": " ",
+ "fsharp": " ",
+ "fusebox": " ",
"gamemaker": " ",
"garden": " ",
- "gatsby": " ",
+ "gatsby": " ",
"gcp": " ",
"gemfile": " ",
- "gemini-ai": " ",
+ "gemini-ai": " ",
"gemini": " ",
"git": " ",
"github-actions-workflow": " ",
@@ -695,34 +702,34 @@
"gitlab": " ",
"gitpod": " ",
"gleam": " ",
- "gnuplot": " ",
+ "gnuplot": " ",
"go-mod": " ",
"go": " ",
- "go_gopher": " ",
+ "go_gopher": " ",
"godot-assets": " ",
"godot": " ",
"gradle": " ",
- "grafana-alloy": " ",
+ "grafana-alloy": " ",
"grain": " ",
- "graphcool": " ",
+ "graphcool": " ",
"graphql": " ",
"gridsome": " ",
"groovy": " ",
- "grunt": " ",
+ "grunt": " ",
"gulp": " ",
"h": " ",
"hack": " ",
"hadolint": " ",
"haml": " ",
"handlebars": " ",
- "hardhat": " ",
+ "hardhat": " ",
"harmonix": " ",
"haskell": " ",
- "haxe": " ",
+ "haxe": " ",
"hcl": " ",
"hcl_light": " ",
"helm": " ",
- "heroku": " ",
+ "heroku": " ",
"hex": " ",
"histoire": " ",
"hjson": " ",
@@ -730,7 +737,7 @@
"hosts": " ",
"hosts_light": " ",
"hpp": " ",
- "html": " ",
+ "html": " ",
"http": " ",
"huff": " ",
"huff_light": " ",
@@ -742,14 +749,14 @@
"image": " ",
"imba": " ",
"installation": " ",
- "ionic": " ",
+ "ionic": " ",
"istanbul": " ",
"jar": " ",
"java": " ",
"javaclass": " ",
"javascript-map": " ",
"javascript": " ",
- "jenkins": " ",
+ "jenkins": " ",
"jest": " ",
"jinja": " ",
"jinja_light": " ",
@@ -757,41 +764,43 @@
"json": " ",
"jsr": " ",
"jsr_light": " ",
- "julia": " ",
+ "julia": " ",
"jupyter": " ",
"just": " ",
- "karma": " ",
+ "karma": " ",
"kcl": " ",
"key": " ",
"keystatic": " ",
"kivy": " ",
"kl": " ",
- "knip": " ",
- "kotlin": " ",
+ "knip": " ",
+ "kotlin": " ",
"kubernetes": " ",
"kusto": " ",
"label": " ",
"laravel": " ",
- "latex.clone": " ",
- "latexmk": " ",
+ "latex-class.clone": " ",
+ "latex-package.clone": " ",
+ "latex.clone": " ",
+ "latexmk": " ",
"lbx": " ",
"lefthook": " ",
"lerna": " ",
"less": " ",
- "liara": " ",
+ "liara": " ",
"lib": " ",
- "lighthouse": " ",
+ "lighthouse": " ",
"lilypond": " ",
"liquid": " ",
"lisp": " ",
- "livescript": " ",
+ "livescript": " ",
"lock": " ",
"log": " ",
"lolcode": " ",
"lottie": " ",
- "ltx.clone": " ",
+ "ltx.clone": " ",
"lua": " ",
- "luau": " ",
+ "luau": " ",
"lyric": " ",
"makefile": " ",
"markdoc-config": " ",
@@ -811,7 +820,7 @@
"minecraft-fabric": " ",
"minecraft": " ",
"mint": " ",
- "mist.clone": " ",
+ "mist.clone": " ",
"mjml": " ",
"mocha": " ",
"modernizr": " ",
@@ -822,18 +831,18 @@
"nano-staged": " ",
"nano-staged_light": " ",
"ndst": " ",
- "nest-controller.clone": " ",
- "nest-decorator.clone": " ",
- "nest-filter.clone": " ",
- "nest-gateway.clone": " ",
- "nest-guard.clone": " ",
- "nest-interceptor.clone": " ",
- "nest-middleware.clone": " ",
- "nest-module.clone": " ",
- "nest-pipe.clone": " ",
- "nest-resolver.clone": " ",
- "nest-service.clone": " ",
- "nest": " ",
+ "nest-controller.clone": " ",
+ "nest-decorator.clone": " ",
+ "nest-filter.clone": " ",
+ "nest-gateway.clone": " ",
+ "nest-guard.clone": " ",
+ "nest-interceptor.clone": " ",
+ "nest-middleware.clone": " ",
+ "nest-module.clone": " ",
+ "nest-pipe.clone": " ",
+ "nest-resolver.clone": " ",
+ "nest-service.clone": " ",
+ "nest": " ",
"netlify": " ",
"netlify_light": " ",
"next": " ",
@@ -846,11 +855,11 @@
"ngrx-selectors": " ",
"ngrx-state": " ",
"nim": " ",
- "nix": " ",
+ "nix": " ",
"nodejs": " ",
"nodejs_alt": " ",
"nodemon": " ",
- "npm": " ",
+ "npm": " ",
"nuget": " ",
"nunjucks": " ",
"nuxt": " ",
@@ -859,28 +868,28 @@
"objective-cpp": " ",
"ocaml": " ",
"odin": " ",
- "opa": " ",
+ "opa": " ",
"opam": " ",
"openapi": " ",
"openapi_light": " ",
"otne": " ",
- "packship": " ",
+ "packship": " ",
"palette": " ",
"panda": " ",
"parcel": " ",
"pascal": " ",
"pawn": " ",
- "payload": " ",
- "payload_light": " ",
+ "payload": " ",
+ "payload_light": " ",
"pdf": " ",
"pdm": " ",
"percy": " ",
"perl": " ",
"php-cs-fixer": " ",
- "php": " ",
+ "php": " ",
"php_elephant": " ",
"php_elephant_pink": " ",
- "phpstan": " ",
+ "phpstan": " ",
"phpunit": " ",
"pinejs": " ",
"pipeline": " ",
@@ -894,30 +903,31 @@
"poetry": " ",
"postcss": " ",
"posthtml": " ",
- "powerpoint": " ",
+ "powerpoint": " ",
"powershell": " ",
- "pre-commit": " ",
- "prettier": " ",
+ "pre-commit": " ",
+ "prettier": " ",
"prisma": " ",
"processing": " ",
"prolog": " ",
"proto": " ",
- "protractor": " ",
- "pug": " ",
+ "protractor": " ",
+ "pug": " ",
"puppet": " ",
"puppeteer": " ",
"purescript": " ",
"python-misc": " ",
- "python": " ",
+ "python": " ",
+ "pytorch": " ",
"qsharp": " ",
"quasar": " ",
- "quokka": " ",
+ "quokka": " ",
"qwik": " ",
"r": " ",
"racket": " ",
"raml": " ",
"razor": " ",
- "rbxmk": " ",
+ "rbxmk": " ",
"rc": " ",
"react": " ",
"react_ts": " ",
@@ -936,25 +946,25 @@
"replit": " ",
"rescript-interface": " ",
"rescript": " ",
- "restql": " ",
+ "restql": " ",
"riot": " ",
"roadmap": " ",
"roblox": " ",
"robot": " ",
"robots": " ",
"rocket": " ",
- "rojo": " ",
+ "rojo": " ",
"rollup": " ",
"rome": " ",
"routing": " ",
- "rspec": " ",
- "rubocop": " ",
- "rubocop_light": " ",
+ "rspec": " ",
+ "rubocop": " ",
+ "rubocop_light": " ",
"ruby": " ",
"ruff": " ",
"rust": " ",
"salesforce": " ",
- "san": " ",
+ "san": " ",
"sas": " ",
"sass": " ",
"sbt": " ",
@@ -968,7 +978,7 @@
"semantic-release_light": " ",
"semgrep": " ",
"sentry": " ",
- "sequelize": " ",
+ "sequelize": " ",
"serverless": " ",
"settings": " ",
"shader": " ",
@@ -979,13 +989,13 @@
"slim": " ",
"slint": " ",
"slug": " ",
- "smarty": " ",
+ "smarty": " ",
"sml": " ",
"snakemake": " ",
"snapcraft": " ",
"snowpack": " ",
"snowpack_light": " ",
- "snyk": " ",
+ "snyk": " ",
"solidity": " ",
"sonarcloud": " ",
"spwn": " ",
@@ -995,9 +1005,9 @@
"stencil": " ",
"stitches": " ",
"stitches_light": " ",
- "storybook": " ",
+ "storybook": " ",
"stryker": " ",
- "sty.clone": " ",
+ "sty.clone": " ",
"stylable": " ",
"stylelint": " ",
"stylelint_light": " ",
@@ -1006,24 +1016,24 @@
"subtitles": " ",
"supabase": " ",
"svelte": " ",
- "svelte_js.clone": " ",
- "svelte_ts.clone": " ",
+ "svelte_js.clone": " ",
+ "svelte_ts.clone": " ",
"svg": " ",
"svgo": " ",
"svgr": " ",
"swagger": " ",
"sway": " ",
- "swc": " ",
- "swift": " ",
+ "swc": " ",
+ "swift": " ",
"syncpack": " ",
"systemd": " ",
"systemd_light": " ",
"table": " ",
"tailwindcss": " ",
- "tape.clone": " ",
+ "tape.clone": " ",
"taskfile": " ",
"tauri": " ",
- "taze": " ",
+ "taze": " ",
"tcl": " ",
"teal": " ",
"templ": " ",
@@ -1032,7 +1042,7 @@
"test-js": " ",
"test-jsx": " ",
"test-ts": " ",
- "tex": " ",
+ "tex": " ",
"textlint": " ",
"tilt": " ",
"tldraw": " ",
@@ -1044,13 +1054,13 @@
"toml_light": " ",
"travis": " ",
"tree": " ",
- "trigger": " ",
+ "trigger": " ",
"tsconfig": " ",
"tsil": " ",
"tune": " ",
"turborepo": " ",
"turborepo_light": " ",
- "twig": " ",
+ "twig": " ",
"twine": " ",
"typescript-def": " ",
"typescript": " ",
@@ -1061,9 +1071,9 @@
"unity": " ",
"unocss": " ",
"url": " ",
- "uv": " ",
+ "uv": " ",
"vagrant": " ",
- "vala": " ",
+ "vala": " ",
"vedic": " ",
"velite": " ",
"velocity": " ",
@@ -1072,7 +1082,7 @@
"verdaccio": " ",
"verified": " ",
"verilog": " ",
- "vfl": " ",
+ "vfl": " ",
"video": " ",
"vim": " ",
"virtual": " ",
@@ -1080,7 +1090,7 @@
"vite": " ",
"vitest": " ",
"vlang": " ",
- "vscode": " ",
+ "vscode": " ",
"vue-config": " ",
"vue": " ",
"vuex-store": " ",
@@ -1088,21 +1098,21 @@
"wakatime_light": " ",
"wallaby": " ",
"wally": " ",
- "watchman": " ",
+ "watchman": " ",
"webassembly": " ",
"webhint": " ",
- "webpack": " ",
+ "webpack": " ",
"wepy": " ",
"werf": " ",
"windicss": " ",
- "wolframlanguage": " ",
+ "wolframlanguage": " ",
"word": " ",
"wrangler": " ",
"wxt": " ",
"xaml": " ",
"xmake": " ",
"xml": " ",
- "yaml": " ",
+ "yaml": " ",
"yang": " ",
"yarn": " ",
"zeabur": " ",
diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini
index 2a3bd3e7431..1eea0616a94 100644
--- a/options/locale/locale_cs-CZ.ini
+++ b/options/locale/locale_cs-CZ.ini
@@ -44,7 +44,6 @@ webauthn_use_twofa=Použít dvoufaktorový kód z vašeho telefonu
webauthn_error=Nepodařilo se přečíst váš zabezpečovací klíč.
webauthn_unsupported_browser=Váš prohlížeč momentálně nepodporuje WebAuthn.
webauthn_error_unknown=Došlo k neznámé chybě. Opakujte akci.
-webauthn_error_insecure=`WebAuthn podporuje pouze zabezpečená připojení. Pro testování přes HTTP můžete použít výchozí "localhost" nebo "127.0.0.1"`
webauthn_error_unable_to_process=Server nemohl zpracovat váš požadavek.
webauthn_error_duplicated=Zabezpečovací klíč není pro tento požadavek povolen. Prosím ujistěte se, zda klíč není již registrován.
webauthn_error_empty=Musíte nastavit název tohoto klíče.
@@ -128,7 +127,6 @@ pin=Připnout
unpin=Odepnout
artifacts=Artefakty
-confirm_delete_artifact=Jste si jisti, že chcete odstranit artefakt „%s“?
archived=Archivováno
@@ -165,29 +163,14 @@ no_results_found=Nebyly nalezeny žádné výsledky.
internal_error_skipped=Došlo k vnitřní chybě, ale je přeskočena: %s
[search]
-search=Hledat...
type_tooltip=Druh vyhledávání
fuzzy=Fuzzy
-fuzzy_tooltip=Zahrnout výsledky, které také úzce odpovídají hledanému výrazu
exact=Přesně
exact_tooltip=Zahrnout pouze výsledky, které přesně odpovídají hledanému výrazu
-repo_kind=Hledat repozitáře...
-user_kind=Hledat uživatele...
-org_kind=Hledat organizace...
-team_kind=Hledat týmy...
-code_kind=Hledat kód...
code_search_unavailable=Vyhledávání kódu není momentálně dostupné. Obraťte se na správce webu.
code_search_by_git_grep=Aktuální výsledky vyhledávání kódu jsou poskytovány pomocí „git grep“. Pokud správce webu povolí index repozitáře, mohou být výsledky lepší.
-package_kind=Hledat balíčky...
-project_kind=Hledat projekty...
-branch_kind=Hledat větve...
-tag_kind=Prohledat značky...
tag_tooltip=Hledat odpovídající značky. Použijte „%“ pro vyhledání libovolné posloupnosti číslic.
-commit_kind=Hledat commity...
-runner_kind=Hledat runnery...
no_results=Nebyly nalezeny žádné odpovídající výsledky.
-issue_kind=Hledat úkoly...
-pull_kind=Hledat pull request...
keyword_search_unavailable=Hledání podle klíčového slova není momentálně dostupné. Obraťte se na správce webu.
[aria]
@@ -223,8 +206,6 @@ buttons.enable_monospace_font=Zapnout monospace font
buttons.disable_monospace_font=Vypnout monospace font
[filter]
-string.asc=A – Z
-string.desc=Z – A
[error]
occurred=Došlo k chybě
@@ -245,7 +226,6 @@ license_desc=Vše je na dokumentaci , než budete měnit jakákoliv nastavení.
require_db_desc=Gitea requires MySQL, PostgreSQL, MSSQL, SQLite3 or TiDB (MySQL protocol).
@@ -262,16 +242,10 @@ path=Cesta
sqlite_helper=Cesta k souboru SQLite3 databáze. Pokud spouštíte Gitea jako službu, zadejte absolutní cestu.
reinstall_error=Pokoušíte se nainstalovat do existující databáze Gitea
reinstall_confirm_message=Přeinstalování s existující databází Gitea může způsobit více problémů. Ve většině případů byste měli použít existující „app.ini“ pro spuštění Gitea. Pokud víte, co děláte, potvrďte následující:
-reinstall_confirm_check_1=Data šifrovaná pomocí SECRET_KEY v souboru api.ini mohou být ztracena: uživatelé nemusí být schopni se přihlásit s 2FA/OTP a zrcadla nemusí fungovat správně. Zaškrtnutím tohoto políčka potvrdíte, že aktuální soubor app.ini obsahuje správný SECRET_KEY.
-reinstall_confirm_check_2=Může být nutné znovu synchronizovat repozitáře a nastavení. Zaškrtnutím tohoto políčka potvrzujete, že budete háčky pro repozitáře a soubor authorized_keys znovu synchronizovat ručně. Potvrzujete, že zajistíte správnost nastavení repozitáře a zrcadla.
reinstall_confirm_check_3=Potvrzujete, že jste si naprosto jisti, že tato Gitea je spuštěna se správným umístěním souboru app.ini a že jste si jisti, že musíte provést novou instalaci. Potvrzujete, že berete na vědomí výše uvedená rizika.
err_empty_db_path=Cesta k SQLite3 databázi nemůže být prázdná.
no_admin_and_disable_registration=Nemůžete vypnout registraci účtů bez vytvoření účtu správce.
err_empty_admin_password=Heslo administrátora nemůže být prázdné.
-err_empty_admin_email=Email administrátora nemůže být prázdný.
-err_admin_name_is_reserved=Uživatelské jméno administrátora není platné, uživatelské jméno je rezervované
-err_admin_name_pattern_not_allowed=Uživatelské jméno administrátora je neplatné, uživatelské jméno odpovídá vyhrazenému vzoru
-err_admin_name_is_invalid=Uživatelské jméno administrátora není platné
general_title=Obecná nastavení
app_name=Název stránky
@@ -287,7 +261,6 @@ domain_helper=Adresa domény, nebo hostitele serveru.
ssh_port=Port SSH serveru
ssh_port_helper=Číslo portu, na kterém SSH server naslouchá. Když ponecháte prázdné, SSH server zakážete.
http_port=Port, na kterém Gitea naslouchá HTTP protokolu
-http_port_helper=Číslo portu, na kterém bude naslouchat webový server Gitea.
app_url=Základní URL Gitea
app_url_helper=Základní adresa pro HTTP(S) URL adresy pro klonování a e-mailová oznámení.
log_root_path=Adresář logů
@@ -351,7 +324,6 @@ no_reply_address=Skrytá e-mailová doména
no_reply_address_helper=Název domény pro uživatele se skrytou e-mailovou adresou. Příklad: Pokud je název skryté e-mailové domény nastaven na „noreply.example.org“, uživatelské jméno „joe“ bude zaznamenáno v Gitu jako „joe@noreply.example.org“.
password_algorithm=Hash algoritmus hesla
invalid_password_algorithm=Neplatný algoritmus hash hesla
-password_algorithm_helper=Nastavte algoritmus hashování hesla. Algoritmy mají odlišné požadavky a sílu. Algoritmus argon2 je poměrně bezpečný, ale používá spoustu paměti a může být nevhodný pro malé systémy.
enable_update_checker=Povolit kontrolu aktualizací
enable_update_checker_helper=Kontroluje vydání nových verzí pravidelně připojením ke gitea.io.
env_config_keys=Konfigurace prostředí
@@ -416,8 +388,6 @@ allow_password_change=Vyžádat od uživatele změnu hesla (doporučeno)
reset_password_mail_sent_prompt=Na adresu %s byl zaslán potvrzovací e-mail. Zkontrolujte prosím vaši doručenou poštu během následujících %s, abyste dokončili proces obnovení účtu.
active_your_account=Aktivujte si váš účet
account_activated=Účet byl aktivován
-prohibit_login=Přihlášení zakázáno
-prohibit_login_desc=Vašemu účtu je zakázáno se přihlásit, kontaktujte prosím správce webu.
resent_limit_prompt=Omlouváme se, ale před chvílí jste požádal o zaslání aktivačního e-mailu. Počkejte prosím 3 minuty a pak to zkuste znovu.
has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (%s ). Pokud jste nedostali e-mail pro potvrzení nebo potřebujete zaslat nový, klikněte prosím na tlačítku níže.
change_unconfirmed_mail_address=Pokud je Vaše registrační e-mailová adresa nesprávná, můžete ji zde změnit a znovu odeslat nový potvrzovací e-mail.
@@ -448,24 +418,19 @@ oauth_signin_title=Přihlaste se pro ověření propojeného účtu
oauth_signin_submit=Propojit účet
oauth.signin.error.access_denied=Žádost o autorizaci byla zamítnuta.
oauth.signin.error.temporarily_unavailable=Autorizace se nezdařila, protože ověřovací server je dočasně nedostupný. Opakujte akci později.
-oauth_callback_unable_auto_reg=Automatická registrace je povolena, ale OAuth2 poskytovatel %[1]s vrátil chybějící pole: %[2]s, nelze vytvořit účet automaticky, vytvořte účet nebo se připojte k účtu, nebo kontaktujte správce webu.
openid_connect_submit=Připojit
openid_connect_title=Připojení k existujícímu účtu
openid_connect_desc=Zvolené OpenID URI není známé. Přidružte nový účet zde.
openid_register_title=Vytvořit nový účet
openid_register_desc=Zvolené OpenID URI není známé. Přidružte nový účet zde.
openid_signin_desc=Zadejte vaši OpenID URI. Například: alice.openid.example.org nebo https://openid.example.org/alice.
-disable_forgot_password_mail=Obnovení účtu je zakázáno, protože není nastaven žádný e-mail. Obraťte se na správce webu.
-disable_forgot_password_mail_admin=Obnovení účtu je dostupné pouze po nastavení e-mailu. Pro povolení obnovy účtu nastavte prosím e-mail.
email_domain_blacklisted=Nemůžete se registrovat s vaší e-mailovou adresou.
authorize_application=Autorizovat aplikaci
authorize_redirect_notice=Budete přesměrováni na %s, pokud autorizujete tuto aplikaci.
authorize_application_created_by=Tuto aplikaci vytvořil %s.
-authorize_application_description=Pokud povolíte přístup, bude moci přistupovat a zapisovat do všech vašich informací o účtu včetně soukromých repozitářů a organizací.
authorize_application_with_scopes=S rozsahy působnosti: %s
authorize_title=Autorizovat „%s“ pro přístup k vašemu účtu?
authorization_failed=Autorizace selhala
-authorization_failed_desc=Autorizace selhala, protože jsme detekovali neplatný požadavek. Kontaktujte prosím správce aplikace, kterou jste se pokoušeli autorizovat.
sspi_auth_failed=SSPI autentizace selhala
password_pwned=Heslo, které jste zvolili, je na seznamu odcizených hesel dříve odhalených při narušení veřejných dat. Zkuste to prosím znovu s jiným heslem a zvažte změnu tohoto hesla i jinde.
password_pwned_err=Nelze dokončit požadavek na HaveIBeenPwned
@@ -490,8 +455,6 @@ activate_email.text=Pro aktivaci vašeho účtu do %s klikněte na násle
register_notify=Vítejte v %s
register_notify.title=%[1]s vítejte v %[2]s
-register_notify.text_1=toto je váš potvrzovací e-mail pro %s!
-register_notify.text_2=Nyní se můžete přihlásit přes uživatelské jméno: %s.
register_notify.text_3=Pokud pro vás byl vytvořen tento účet, nejprve nastavte své heslo .
reset_password=Obnovit váš účet
@@ -529,7 +492,6 @@ release.download.targz=Zdrojový kód (TAR.GZ)
repo.transfer.subject_to=%s by chtěl převést „%s“ pro %s
repo.transfer.subject_to_you=%s by Vám chtěl převést „%s“
repo.transfer.to_you=vám
-repo.transfer.body=Chcete-li ji přijmout nebo odmítnout, navštivte %s nebo ji prostě ignorujte.
repo.collaborator.added.subject=%s vás přidal do %s
repo.collaborator.added.text=Byl jste přidán jako spolupracovník repozitáře:
@@ -581,7 +543,6 @@ url_error=`„%s“ není platná adresa URL.`
include_error=` musí obsahovat substring „%s“.`
glob_pattern_error=`zástupný vzor je neplatný: %s.`
regex_pattern_error=` regex vzor je neplatný: %s.`
-username_error=` může obsahovat pouze alfanumerické znaky („0-9“, „a-z“, „A-Z“), pomlčku („-“), podtržítka („_“) a tečka („.“). Nemůže začínat nebo končit nealfanumerickými znaky a po sobě jdoucí nealfanumerické znaky jsou také zakázány.`
invalid_group_team_map_error=` mapování je neplatné: %s`
unknown_error=Neznámá chyba:
captcha_incorrect=CAPTCHA kód není správný.
@@ -596,17 +557,14 @@ username_has_not_been_changed=Uživatelské jméno nebylo změněno
repo_name_been_taken=Název repozitáře je již použit.
repository_force_private=Vynucené soukromí je povoleno: soukromé repozitáře nelze zveřejnit.
repository_files_already_exist=Soubory pro tento repozitář již existují. Obraťte se na správce systému.
-repository_files_already_exist.adopt=Soubory pro tento repozitář již existují a mohou být pouze přijaty.
repository_files_already_exist.delete=Soubory pro tento repozitář již existují. Musíte je odstranit.
repository_files_already_exist.adopt_or_delete=Soubory pro tento repozitář již existují. Přijměte je, nebo je odstraňte.
visit_rate_limit=Dosaženo limitu rychlosti dotazů při vzdáleném přístupu.
-2fa_auth_required=Vzdálený přístup vyžaduje dvoufaktorové ověřování.
org_name_been_taken=Název organizace je již použit.
team_name_been_taken=Název týmu je již použit.
team_no_units_error=Povolit přístup alespoň do jedné sekce repozitáře.
email_been_used=Tato e-mailová adresa je již používána.
email_invalid=Emailová adresa je neplatná.
-email_domain_is_not_allowed=Doména uživatelského e-mailu %s je v rozporu s EMAIL_DOMAIN_ALLOWLIST nebo EMAIL_DOMAIN_BLOCKLIST. Ujistěte se, že je Vaše operace očekávána.
openid_been_used=OpenID addresa „%s“ je již použita.
username_password_incorrect=Uživatelské jméno nebo heslo není správné.
password_complexity=Heslo nesplňuje požadavky na složitost:
@@ -631,14 +589,8 @@ invalid_ssh_key=Nelze ověřit váš SSH klíč: %s
invalid_gpg_key=Nelze ověřit váš GPG klíč: %s
invalid_ssh_principal=Neplatný SSH Principal certifikát: %s
must_use_public_key=Zadaný klíč je soukromý klíč. Nenahrávejte svůj soukromý klíč nikde. Místo toho použijte váš veřejný klíč.
-unable_verify_ssh_key=Nelze ověřit váš SSH klíč.
auth_failed=Ověření selhalo: %v
-still_own_repo=Váš účet vlastní jeden nebo více repozitářů. Nejprve je smažte nebo převeďte.
-still_has_org=Váš účet je členem jedné nebo více organizací. Nejdříve je musíte opustit.
-still_own_packages=Váš účet vlastní jeden nebo více balíčků. Nejprve je musíte odstranit.
-org_still_own_repo=Organizace stále vlastní jeden nebo více repozitářů. Nejdříve je smažte nebo převeďte.
-org_still_own_packages=Organizace stále vlastní jeden nebo více balíčků. Nejdříve je smažte.
target_branch_not_exist=Cílová větev neexistuje.
target_ref_not_exist=Cílové reference neexistuje %s
@@ -669,11 +621,9 @@ settings=Uživatelská nastavení
form.name_reserved=Uživatelské jméno „%s“ je rezervováno.
form.name_pattern_not_allowed=Vzor „%s“ není povolen v uživatelském jméně.
-form.name_chars_not_allowed=Uživatelské jméno „%s“ obsahuje neplatné znaky.
block.block=Blokovat
block.block.user=Zablokovat Uživatele
-block.block.org=Blokovat uživatele pro organizaci
block.block.failure=Nepodařilo se zablokovat uživatele: %s
block.unblock=Odblokovat
block.unblock.failure=Nepodařilo se odblokovat uživatele: %s
@@ -686,7 +636,6 @@ block.info_3=pošle vám oznámení pomocí @zmínění vašeho uživatelského
block.info_4=pozváním vás jako spolupracovníka do jejich repozitářů
block.info_5=oblíbení, rozštěpení nebo sledování repozitářů
block.info_6=otevření a komentování úkolů nebo pull requestů
-block.info_7=reagovat na své komentáře v úkolech nebo pull requestů
block.user_to_block=Uživatel k blokování
block.note=Poznámka
block.note.title=Volitelná poznámka:
@@ -717,7 +666,6 @@ webauthn=Dvoufaktorové ověření (Bezpečnostní klíče)
public_profile=Veřejný profil
biography_placeholder=Řekněte nám něco o sobě! (Můžete použít Markdown)
location_placeholder=Sdílejte svou přibližnou polohu s ostatními
-profile_desc=Nastavte, jak bude váš profil zobrazen ostatním uživatelům. Vaše hlavní e-mailová adresa bude použita pro oznámení, obnovení hesla a operace Git.
full_name=Celé jméno
website=Web
location=Místo
@@ -735,7 +683,6 @@ cancel=Zrušit
language=Jazyk
ui=Motiv vzhledu
hidden_comment_types=Skryté typy komentářů
-hidden_comment_types_description=Zde zaškrtnuté typy komentářů nebudou zobrazeny na stránkách úkolů. Zaškrtnutím položky „Štítek“ například odstraní všechny komentáře „{uživatel} přidal/odstranil {štítek}“.
hidden_comment_types.ref_tooltip=Komentáře, na které se odkazovalo z jiného úkolu/commitu/…
hidden_comment_types.issue_ref_tooltip=Komentáře, kde uživatel změní větev/značku spojenou s úkolem
comment_type_group_reference=Reference
@@ -783,18 +730,14 @@ manage_themes=Vyberte výchozí motiv vzhledu
manage_openid=Správa OpenID adres
email_desc=Vaše hlavní e-mailová adresa bude použita pro oznámení, obnovení hesla, a pokud není skrytá, pro operace Gitu.
theme_desc=Toto bude váš výchozí motiv vzhledu napříč stránkou.
-theme_colorblindness_help=Podpora šablony pro barvoslepost
-theme_colorblindness_prompt=Gitea právě získala některé motivy se základní podporou barvosleposti, které mají pouze několik barev. Práce stále probíhá. Další vylepšení by bylo možné provést definováním více barev v CSS souborů.
primary=Hlavní
activated=Aktivován
requires_activation=Vyžaduje aktivaci
primary_email=Nastavit jako hlavní
activate_email=Odeslat aktivaci
activations_pending=Čekající aktivace
-can_not_add_email_activations_pending=Existuje čekající aktivace, zkuste to znovu za pár minut, pokud chcete přidat nový e-mail.
delete_email=Smazat
email_deletion=Odstranit e-mailovou adresu
-email_deletion_desc=E-mailová adresa a přidružené informace budou z vašeho účtu odstraněny. Commity Gitu s touto e-mailovou adresou zůstanou nezměněny. Pokračovat?
email_deletion_success=E-mailová adresa byla odstraněna.
theme_update_success=Váš motiv vzhledu byl aktualizován.
theme_update_error=Vybraný motiv vzhledu neexistuje.
@@ -837,7 +780,6 @@ gpg_key_matched_identities_long=Vložené identity do tohoto klíče odpovídaj
gpg_key_verified=Ověřený klíč
gpg_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření commitů shodujících se s libovolnou vaší aktivovanou e-mailovou adresou pro tohoto uživatele navíc k jakékoli odpovídající identitě tohoto klíče.
gpg_key_verify=Ověřit
-gpg_invalid_token_signature=Zadaný GPG klíč, podpis a token se neshodují nebo je token zastaralý.
gpg_token_required=Musíte zadat podpis pro níže uvedený token
gpg_token=Token
gpg_token_help=Podpis můžete vygenerovat pomocí:
@@ -847,7 +789,6 @@ verify_gpg_key_success=GPG klíč „%s“ byl ověřen.
ssh_key_verified=Ověřený klíč
ssh_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření commitů shodujících se s libovolnou vaší aktivovanou e-mailovou adresou pro tohoto uživatele.
ssh_key_verify=Ověřit
-ssh_invalid_token_signature=Zadaný SSH klíč, podpis nebo token se neshodují nebo je token zastaralý.
ssh_token_required=Musíte zadat podpis pro níže uvedený token
ssh_token=Token
ssh_token_help=Podpis můžete vygenerovat pomocí:
@@ -868,7 +809,6 @@ gpg_key_deletion=Odstraňte GPG klíč
ssh_principal_deletion=Odstranit SSH Principal certifikát
ssh_key_deletion_desc=Odstranění SSH klíče zruší jeho přístup k vašemu účtu. Pokračovat?
gpg_key_deletion_desc=Odstranění GPG klíče zneplatníte ověření commitů, které jsou jím podepsány. Pokračovat?
-ssh_principal_deletion_desc=Odstranění SSH Principal certifikátu zruší jeho přístup k vašemu účtu. Pokračovat?
ssh_key_deletion_success=SSH klíč byl odstraněn.
gpg_key_deletion_success=GPG klíč byl odstraněn.
ssh_principal_deletion_success=SSH Principal certifikát byl odstraněn.
@@ -927,7 +867,6 @@ create_oauth2_application_button=Vytvořit aplikaci
create_oauth2_application_success=Úspěšně jste vytvořili novou OAuth2 aplikaci.
update_oauth2_application_success=Úspěšně jste aktualizovali OAuth2 aplikaci.
oauth2_application_name=Název aplikace
-oauth2_confidential_client=Důvěrný klient. Vyberte aplikace, které zachovávají důvěrnosti v utajení, jako jsou webové aplikace. Nevybírejte pro nativní aplikace včetně stolních a mobilních aplikací.
oauth2_skip_secondary_authorization=Přeskočit autorizaci pro veřejné klienty po udělení přístupu. Může představovat bezpečnostní riziko.
oauth2_redirect_uris=Přesměrování URI. Použijte nový řádek pro každou URI.
save_application=Uložit
@@ -942,10 +881,8 @@ oauth2_application_remove_description=Odebráním OAuth2 aplikace zabrání př
oauth2_application_locked=Gitea předregistruje některé OAuth2 aplikace při spuštění, pokud je to povoleno v konfiguraci. Aby se zabránilo neočekávanému chování, nelze je upravovat ani odstranit. Více informací naleznete v dokumentaci OAuth2.
authorized_oauth2_applications=Autorizovat OAuth2 aplikaci
-authorized_oauth2_applications_description=Úspěšně jste povolili přístup k vašemu osobnímu účtu této aplikaci třetí strany. Zrušte prosím přístup aplikacím, které již nadále nepotřebujete.
revoke_key=Zrušit
revoke_oauth2_grant=Zrušit přístup
-revoke_oauth2_grant_description=Zrušením přístupu této aplikaci třetí strany ji zabráníte v přístupu k vašim datům. Jste si jisti?
revoke_oauth2_grant_success=Přístup byl úspěšně zrušen.
twofa_desc=Chcete-li svůj účet ochránit před krádeží hesla, můžete použít chytrý telefon nebo jiné zařízení pro příjem jednorázových časových hesel („TOTP“).
@@ -955,7 +892,6 @@ twofa_not_enrolled=Váš účet aktuálně nepoužívá dvoufaktorové ověřov
twofa_disable=Zakázat dvoufaktorové ověřování
twofa_scratch_token_regenerate=Obnovit jednorázový obnovovací klíč
twofa_scratch_token_regenerated=Váš jednorázový obnovovací klíč je nyní %s. Uložte jej na bezpečném místě, protože se znovu nezobrazí.
-twofa_enroll=Povolit dvoufaktorové ověřování
twofa_disable_note=Dvoufaktorové ověřování můžete zakázat, když bude potřeba.
twofa_disable_desc=Zakážete-li dvoufaktorové ověřování, bude váš účet méně zabezpečený. Pokračovat?
regenerate_scratch_token_desc=Jestli jste někam založili váš záložní klíč nebo jste jej již použili k přihlášení, můžete jej resetovat zde.
@@ -971,13 +907,11 @@ webauthn_desc=Bezpečnostní klíče jsou hardwarová zařízení obsahující k
webauthn_register_key=Přidat bezpečnostní klíč
webauthn_nickname=Přezdívka
webauthn_delete_key=Odstranit bezpečnostní klíč
-webauthn_delete_key_desc=Pokud odstraníte bezpečnostní klíč, již se s ním nebudete moci přihlásit. Pokračovat?
webauthn_key_loss_warning=Pokud ztratíte své bezpečnostní klíče, ztratíte přístup k vašemu účtu.
webauthn_alternative_tip=Možná budete chtít nakonfigurovat další metodu ověřování.
manage_account_links=Správa propojených účtů
manage_account_links_desc=Tyto externí účty jsou propojeny s vaším Gitea účtem.
-account_links_not_available=K vašemu Gitea účtu nejsou aktuálně připojené žádné externí účty.
link_account=Propojit účet
remove_account_link=Odstranit propojený účet
remove_account_link_desc=Odstraněním propojeného účtu zrušíte jeho přístup k vašemu Gitea účtu. Pokračovat?
@@ -1014,8 +948,6 @@ new_repo_helper=Repozitář obsahuje všechny projektové soubory, včetně hist
owner=Vlastník
owner_helper=Některé organizace se nemusejí v seznamu zobrazit kvůli maximálnímu dosaženému počtu repozitářů.
repo_name=Název repozitáře
-repo_name_profile_public_hint=.profile je speciální repozitář, který můžete použít k přidání souboru README.md do svého veřejného profilu organizace, který je viditelný pro každého. Ujistěte se, že je veřejný, a pro začátek jej inicializujte pomocí README v adresáři profilu.
-repo_name_profile_private_hint=.profile-private je speciální repozitář, který můžete použít k přidání souboru README.md do profilu člena organizace, který je viditelný pouze pro členy organizace. Ujistěte se, že je soukromý, a pro začátek jej inicializujte pomocí README v adresáři profilu.
repo_name_helper=Dobrá jména repozitářů používají krátká, zapamatovatelná a unikátní klíčová slova. Repozitář s názvem „.profile“ nebo „.profile-private“ lze použít k přidání README.md pro uživatelský/organizační profil.
repo_size=Velikost repozitáře
template=Šablona
@@ -1037,7 +969,6 @@ fork_branch=Větev, která má být klonována pro fork
all_branches=Všechny větve
view_all_branches=Zobrazit všechny větve
view_all_tags=Zobrazit všechny značky
-fork_no_valid_owners=Tento repozitář nemůže být rozštěpen, protože neexistují žádní platní vlastníci.
fork.blocked_user=Nelze rozštěpit repozitář, protože jste blokováni majitelem repozitáře.
use_template=Použít tuto šablonu
open_with_editor=Otevřít pomocí %s
@@ -1081,12 +1012,10 @@ mirror_sync=synchronizováno
mirror_sync_on_commit=Synchronizovat při nahrávání revizí
mirror_address=Klonovat z URL
mirror_address_desc=Zadejte požadované přístupové údaje do sekce Ověření.
-mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny části musíte správně nahradit escape sekvencí.
mirror_address_protocol_invalid=Zadaná URL je neplatná. Mohou být zrcadleny pouze umístění http(s):// nebo git://.
mirror_lfs=Úložiště velkých souborů (LFS)
mirror_lfs_desc=Aktivovat zrcadlení dat LFS.
mirror_lfs_endpoint=Koncový bod LFS
-mirror_lfs_endpoint_desc=Synchronizace se pokusí použít URL pro klonování k určení LFS serveru . Můžete také zadat vlastní koncový bod, pokud jsou data LFS repozitáře uložena někde jinde.
mirror_last_synced=Poslední synchronizace
mirror_password_placeholder=(Nezměněno)
mirror_password_blank_placeholder=(Nenastaveno)
@@ -1099,7 +1028,6 @@ stars=Oblíbené
reactions_more=a %d dalších
unit_disabled=Správce webu zakázal tuto sekci repozitáře.
language_other=Jiný
-adopt_search=Zadejte uživatelské jméno pro hledání nepřijatých repozitářů... (ponechte prázdné pro nalezení všech)
adopt_preexisting_label=Přijmout soubory
adopt_preexisting=Přijmout již existující soubory
adopt_preexisting_content=Vytvořit repozitář z %s
@@ -1140,8 +1068,6 @@ template.issue_labels=Štítky úkolů
template.one_item=Musíte vybrat alespoň jednu položku šablony
template.invalid=Musíte vybrat repositář šablony
-archive.title=Tento repozitář je archivovaný. Můžete prohlížet soubory, klonovat, ale nemůžete nahrávat a vytvářet nové úkoly nebo pull requesty.
-archive.title_date=Tento repositář byl archivován %s. Můžete zobrazit soubory a klonovat je, ale nemůžete nahrávat ani otevírat úkoly nebo pull requesty.
archive.issue.nocomment=Tento repozitář je archivovaný. Nemůžete komentovat úkoly.
archive.pull.nocomment=Tento repozitář je archivovaný. Nemůžete komentovat pull requesty.
@@ -1158,7 +1084,6 @@ migrate_options_lfs=Migrovat LFS soubory
migrate_options_lfs_endpoint.label=Koncový bod LFS
migrate_options_lfs_endpoint.description=Migrace se pokusí použít váš vzdálený Git pro určení LFS serveru . Můžete také zadat vlastní koncový bod, pokud jsou data LFS repozitáře uložena někde jinde.
migrate_options_lfs_endpoint.description.local=Podporována je také cesta k lokálnímu serveru.
-migrate_options_lfs_endpoint.placeholder=Ponecháte-li prázdné, koncový bod bude odvozen z adresy URL klonu
migrate_items=Položky pro migrování
migrate_items_wiki=Wiki
migrate_items_milestones=Milníky
@@ -1170,10 +1095,8 @@ migrate_items_releases=Vydání
migrate_repo=Migrovat repozitář
migrate.clone_address=Migrovat / klonovat z URL
migrate.clone_address_desc=HTTP(S) nebo URL pro klonování existujícího repozitáře
-migrate.github_token_desc=Můžete sem vložit jeden nebo více tokenů oddělených čárkou, abyste urychlili migraci kvůli omezení rychlosti rozhraní GitHub API. VAROVÁNÍ: Zneužití této funkce může vést k porušení zásad poskytovatele služeb a zablokování účtu.
migrate.clone_local_path=nebo místní cesta serveru
migrate.permission_denied=Není dovoleno importovat místní repozitáře.
-migrate.permission_denied_blocked=Nelze importovat z nepovolených hostitelů, prosím požádejte správce, aby zkontroloval nastavení ALLOWED_DOMAINS/ALLOW_LOCALETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Místní cesta je neplatná, buď neexistuje nebo není adresářem.
migrate.invalid_lfs_endpoint=Koncový bod LFS není platný.
migrate.failed=Přenesení selhalo: %v
@@ -1181,7 +1104,6 @@ migrate.migrate_items_options=Pro migraci dalších položek je vyžadován př
migrated_from=Migrováno z %[2]s
migrated_from_fake=Migrováno z %[1]s
migrate.migrate=Migrovat z %s
-migrate.migrating=Probíhá migrace z %s ...
migrate.migrating_failed=Migrace z %s se nezdařila.
migrate.migrating_failed.error=Nepodařilo se migrovat: %s
migrate.migrating_failed_no_addr=Migrace se nezdařila.
@@ -1229,9 +1151,7 @@ clone_this_repo=Naklonovat tento repozitář
cite_this_repo=Citovat tento repozitář
create_new_repo_command=Vytvořit nový repozitář na příkazové řádce
push_exist_repo=Nahrání existujícího repozitáře z příkazové řádky
-empty_message=Tento repozitář nemá žádný obsah.
broken_message=Data gitu, která jsou základem tohoto repozitáře, nelze číst. Kontaktujte správce této instance nebo smažte tento repositář.
-no_branch=Tento repozitář nemá žádné větve.
code=Zdrojový kód
code.desc=Přístup ke zdrojovým kódům, souborům, commitům a větvím.
@@ -1248,7 +1168,6 @@ projects=Projekty
packages=Balíčky
actions=Akce
labels=Štítky
-org_labels_desc=Štítky na úrovni organizace, které mohou být použity se všemi repozitáři v rámci této organizace
org_labels_desc_manage=spravovat
milestone=Milník
@@ -1330,7 +1249,6 @@ editor.update=Aktualizovat %s
editor.delete=Odstranit %s
editor.patch=Použít záplatu
editor.patching=Záplatování:
-editor.fail_to_apply_patch=Nelze použít záplatu „%s“
editor.new_patch=Nová záplata
editor.commit_message_desc=Přidat volitelný rozšířený popis…
editor.signoff_desc=Přidat Signed-off-by podpis přispěvatele na konec zprávy o commitu.
@@ -1346,19 +1264,13 @@ editor.filename_is_invalid=Název souboru je neplatný: „%s“.
editor.branch_does_not_exist=Větev „%s“ v tomto repozitáři neexistuje.
editor.branch_already_exists=Větev „%s“ již existuje v tomto repozitáři.
editor.directory_is_a_file=Jméno adresáře „%s“ je již použito jako jméno souboru v tomto repozitáři.
-editor.file_is_a_symlink=`„%s“ je symbolický odkaz. Symbolické odkazy nemohou být upravovány ve webovém editoru`
editor.filename_is_a_directory=Jméno souboru „%s“ je již použito jako jméno adresáře v tomto repozitáři.
-editor.file_editing_no_longer_exists=Upravovaný soubor „%s“ již není součástí tohoto repozitáře.
-editor.file_deleting_no_longer_exists=Odstraňovaný soubor „%s“ již není součástí tohoto repozitáře.
editor.file_changed_while_editing=Obsah souboru byl změněn od doby, kdy jste začaly s úpravou. Klikněte zde , abyste je zobrazili, nebo potvrďte změny ještě jednou pro jejich přepsání.
editor.file_already_exists=Soubor „%s“ již existuje v tomto repozitáři.
-editor.commit_id_not_matching=ID commitu se neshoduje s ID, když jsi začal/a s úpravami. Odevzdat do záplatové větve a poté sloučit.
editor.push_out_of_date=Nahrání se zdá být zastaralé.
editor.commit_empty_file_header=Odevzdat prázdný soubor
editor.commit_empty_file_text=Soubor, který se chystáte odevzdat, je prázdný. Pokračovat?
editor.no_changes_to_show=Žádné změny k zobrazení.
-editor.fail_to_update_file=Nepodařilo se aktualizovat/vytvořit soubor „%s“.
-editor.fail_to_update_file_summary=Chybové hlášení:
editor.push_rejected_no_message=Změna byla serverem zamítnuta bez zprávy. Prosím, zkontrolujte háčky Gitu.
editor.push_rejected=Změna byla serverem zamítnuta. Prosím, zkontrolujte háčky Gitu.
editor.push_rejected_summary=Úplná zpráva o odmítnutí:
@@ -1373,6 +1285,7 @@ editor.require_signed_commit=Větev vyžaduje podepsaný commit
editor.cherry_pick=Cherry-pick %s na:
editor.revert=Vrátit %s na:
+
commits.desc=Procházet historii změn zdrojového kódu.
commits.commits=Commity
commits.no_commits=Žádné společné commity. „%s“ a „%s“ mají zcela odlišnou historii.
@@ -1470,7 +1383,6 @@ issues.new.clear_assignees=Smazat zpracovatele
issues.new.no_assignees=Bez zpracovatelů
issues.new.no_reviewers=Žádní posuzovatelé
issues.new.blocked_user=Nemůžete vytvořit úkol, protože jste zablokováni zadavatelem příspěvku nebo vlastníkem repozitáře.
-issues.edit.already_changed=Nelze uložit změny v úkolu. Zdá se, že obsah byl již změněn jiným uživatelem. Aktualizujte stránku a zkuste ji znovu problém upravit, abyste se vyhnuli přepsání jejich změn
issues.edit.blocked_user=Nemůžete upravovat obsah, protože jste zablokováni zadavatelem příspěvku nebo vlastníkem repozitáře.
issues.choose.get_started=Začínáme
issues.choose.open_external_link=Otevřít
@@ -1539,7 +1451,6 @@ issues.filter_type.reviewed_by_you=Zkontrolováno vámi
issues.filter_sort=Seřadit
issues.filter_sort.latest=Nejnovější
issues.filter_sort.oldest=Nejstarší
-issues.filter_sort.recentupdate=Nedávno aktualizované
issues.filter_sort.leastupdate=Dlouho neaktualizované
issues.filter_sort.mostcomment=Nejvíce komentované
issues.filter_sort.leastcomment=Nejméně komentované
@@ -1658,7 +1569,6 @@ issues.lock_no_reason=uzamkl/a a omezil/a konverzaci na spolupracovníky %s
issues.unlock_comment=odemkl/a tuto konverzaci %s
issues.lock_confirm=Uzamknout
issues.unlock_confirm=Odemknout
-issues.lock.notice_1=- Další uživatelé nemohou komentovat tento úkol.
issues.lock.notice_2=- Vy a ostatní spolupracovníci s přístupem k tomuto repozitáři můžete stále přidávat komentáře, které ostatní uvidí.
issues.lock.notice_3=- V budoucnu budete moci vždy znovu tento úkol odemknout.
issues.unlock.notice_1=- Všichni budou moci znovu komentovat tento úkol.
@@ -1709,7 +1619,6 @@ issues.due_date_form=rrrr-mm-dd
issues.due_date_form_add=Přidat termín dokončení
issues.due_date_form_edit=Upravit
issues.due_date_form_remove=Odstranit
-issues.due_date_not_writer=Potřebujete přístup k zápisu do tohoto repozitáře, abyste mohli aktualizovat datum dokončení úkolu.
issues.due_date_not_set=Žádný termín dokončení.
issues.due_date_added=přidal/a termín dokončení %s %s
issues.due_date_modified=upravil/a termín termínu z %[2]s na %[1]s %[3]s
@@ -1732,9 +1641,7 @@ issues.dependency.pr_closing_blockedby=Uzavření tohoto pull requestu je blokov
issues.dependency.issue_closing_blockedby=Uzavření tohoto úkolu je blokováno následujícími úkoly
issues.dependency.issue_close_blocks=Tento úkol blokuje uzavření následujících úkolů
issues.dependency.pr_close_blocks=Tento pull request blokuje uzavření následujících úkolů
-issues.dependency.issue_close_blocked=Musíte zavřít všechny úkoly, které blokují tento úkol, aby jej bylo možné zavřít.
issues.dependency.issue_batch_close_blocked=Nelze uzavřít úkoly, které jste vybrali, protože úkol #%d má stále otevřené závislosti
-issues.dependency.pr_close_blocked=Musíte zavřít všechny úkoly, které blokují tento pull request, aby jej bylo možné sloučit.
issues.dependency.blocks_short=Blokuje
issues.dependency.blocked_by_short=Závisí na
issues.dependency.remove_header=Odstranit závislost
@@ -1745,13 +1652,11 @@ issues.dependency.add_error_same_issue=Úkol nemůže záviset sám na sobě.
issues.dependency.add_error_dep_issue_not_exist=Související úkol neexistuje.
issues.dependency.add_error_dep_not_exist=Závislost neexistuje.
issues.dependency.add_error_dep_exists=Závislost již existuje.
-issues.dependency.add_error_cannot_create_circular=Nemůžete vytvořit závislost dvou úkolů, které se vzájemně blokují.
issues.dependency.add_error_dep_not_same_repo=Oba úkoly musí být ve stejném repozitáři.
issues.review.self.approval=Nemůžete schválit svůj pull request.
issues.review.self.rejection=Nemůžete požadovat změny ve svém vlastním pull requestu.
issues.review.approve=schválil tyto změny %s
issues.review.comment=posoudil/a %s
-issues.review.dismissed=zamítl/a posouzení od %s %s
issues.review.dismissed_label=Zamítnuto
issues.review.left_comment=zanechal komentář
issues.review.content.empty=Je potřeba zanechat poznámku s uvedením požadované změny (požadovaných změn).
@@ -1759,7 +1664,6 @@ issues.review.reject=požadované změny %s
issues.review.wait=byl požádán o posouzení %s
issues.review.add_review_request=vyžádal posouzení od %s %s
issues.review.remove_review_request=odstranil/a žádost o posouzení na %s %s
-issues.review.remove_review_request_self=odmítl posoudit %s
issues.review.pending=Čekající
issues.review.pending.tooltip=Tento komentář není momentálně viditelný pro ostatní uživatele. Chcete-li odeslat Vaše čekající komentáře, vyberte „%s“ → „%s/%s/%s“ v horní části stránky.
issues.review.review=Posouzení
@@ -1781,7 +1685,6 @@ issues.review.requested=Čeká na posouzení
issues.review.rejected=Požadovány změny
issues.review.stale=Aktualizováno od schválení
issues.review.unofficial=Nezapočtené schválení
-issues.assignee.error=Ne všichni zpracovatelé byli přidáni z důvodu neočekávané chyby.
issues.reference_issue.body=Tělo zprávy
issues.content_history.deleted=vymazáno
issues.content_history.edited=upraveno
@@ -1798,7 +1701,6 @@ pulls.desc=Povolit pull requesty a posuzování kódu.
pulls.new=Nový pull request
pulls.new.blocked_user=Nemůžete vytvořit pull request, protože jste zablokování vlastníkem repozitáře.
pulls.new.must_collaborator=Musíte být spolupracovníkem pro vytvoření pull requestu.
-pulls.edit.already_changed=Nelze uložit změny v pull requestu. Zdá se, že obsah byl již změněn jiným uživatelem. Aktualizujte stránku a zkuste znovu komentář upravit, abyste se vyhnuli přepsání jejich změn
pulls.view=Zobrazit pull request
pulls.compare_changes=Nový pull request
pulls.allow_edits_from_maintainers=Povolit úpravy od správců
@@ -1819,11 +1721,9 @@ pulls.show_all_commits=Zobrazit všechny commity
pulls.show_changes_since_your_last_review=Zobrazit změny od vašeho posledního posouzení
pulls.showing_only_single_commit=Zobrazuji pouze změny commitu %[1]s
pulls.showing_specified_commit_range=Zobrazují se pouze změny mezi %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Vyberte commit. Podržte klávesu shift + klepněte pro výběr rozsahu
pulls.review_only_possible_for_full_diff=Posouzení je možné pouze při zobrazení plného rozlišení
pulls.filter_changes_by_commit=Filtrovat podle commitu
pulls.nothing_to_compare=Tyto větve jsou stejné. Není potřeba vytvářet pull request.
-pulls.nothing_to_compare_have_tag=Vybraná větev/značka je stejná.
pulls.nothing_to_compare_and_allow_empty_pr=Tyto větve jsou stejné. Tento pull request bude prázdný.
pulls.has_pull_request=`Pull request mezi těmito větvemi již existuje: %[2]s#%[3]d `
pulls.create=Vytvořit pull request
@@ -1871,16 +1771,12 @@ pulls.reject_count_1=%d žádost o změnu
pulls.reject_count_n=%d žádosti o změnu
pulls.waiting_count_1=%d čekající posouzení
pulls.waiting_count_n=%d čekající posouzení
-pulls.wrong_commit_id=ID commitu musí být ID commitu v cílové větvi
pulls.no_merge_desc=Tento pull request nemůže být sloučen, protože všechny možnosti repozitáře na sloučení jsou zakázány.
pulls.no_merge_helper=Povolte možnosti sloučení v nastavení repozitáře nebo proveďte sloučení pull requestu ručně.
pulls.no_merge_wip=Pull request nemůže být sloučen protože je označen jako nedokončený.
-pulls.no_merge_not_ready=Tento pull request není připraven na sloučení, zkontrolujte stav posouzení a kontrolu stavu.
pulls.no_merge_access=Nemáte oprávnění sloučit tento pull request.
pulls.merge_pull_request=Vytvořit slučovací commit
-pulls.rebase_merge_pull_request=Rebase pak fast-forward
-pulls.rebase_merge_commit_pull_request=Rebase a poté vytvořit slučovací commit
pulls.squash_merge_pull_request=Vytvořit squash commit
pulls.fast_forward_only_merge_pull_request=Pouze fast-forward
pulls.merge_manually=Sloučeno ručně
@@ -1888,17 +1784,10 @@ pulls.merge_commit_id=ID slučovacího commitu
pulls.require_signed_wont_sign=Větev vyžaduje podepsané commity, ale toto sloučení nebude podepsáno
pulls.invalid_merge_option=Nemůžete použít tuto možnost sloučení pro tento pull request.
-pulls.merge_conflict=Sloučení selhalo: Došlo ke konfliktu při sloučení. Tip: Zkuste jinou strategii
pulls.merge_conflict_summary=Chybové hlášení
-pulls.rebase_conflict=Sloučení selhalo: Došlo ke konfliktu při rebase commitu: %[1]s. Tip: Zkuste jinou strategii
pulls.rebase_conflict_summary=Chybové hlášení
-pulls.unrelated_histories=Sloučení selhalo: Hlavní a základní revize nesdílí společnou historii. Tip: Zkuste jinou strategii
-pulls.merge_out_of_date=Sloučení selhalo: Základ byl aktualizován při generování sloučení. Tip: Zkuste to znovu.
-pulls.head_out_of_date=Sloučení selhalo: Hlavní revize byla aktualizován při generování sloučení. Tip: Zkuste to znovu.
-pulls.has_merged=Chyba: Pull request byl sloučen, nelze znovu sloučit nebo změnit cílovou větev.
pulls.push_rejected=Nahrání se nezdařilo: Nahrání bylo zamítnuto. Zkontrolujte háčky Gitu pro tento repozitář.
pulls.push_rejected_summary=Úplná zpráva o odmítnutí
-pulls.push_rejected_no_message=Nahrání se nezdařilo: Nahrání bylo odmítnuto, ale nebyla nalezena žádná vzdálená zpráva. Zkontrolujte háčky gitu pro tento repozitář
pulls.open_unmerged_pull_exists=`Nemůžete provést operaci znovuotevření protože je tu čekající pull request (#%d) s identickými vlastnostmi.`
pulls.status_checking=Některé kontroly jsou nedořešeny
pulls.status_checks_success=Všechny kontroly byly úspěšné
@@ -1921,9 +1810,7 @@ pulls.cmd_instruction_checkout_title=Checkout
pulls.cmd_instruction_checkout_desc=Z vašeho repositáře projektu se podívejte na novou větev a vyzkoušejte změny.
pulls.cmd_instruction_merge_title=Sloučit
pulls.cmd_instruction_merge_desc=Slučte změny a aktualizujte je na Gitea.
-pulls.cmd_instruction_merge_warning=Varování: Tato operace nemůže sloučit požadavek na natažení, protože „autodetekce manuálních sloučení“ nebyla povolena
pulls.clear_merge_message=Vymazat zprávu o sloučení
-pulls.clear_merge_message_hint=Vymazání zprávy o sloučení odstraní pouze obsah zprávy a ponechá generované přídavky gitu jako "Co-AuthoreBy …".
pulls.auto_merge_button_when_succeed=(Když kontroly uspějí)
pulls.auto_merge_when_succeed=Automaticky sloučit, když všechny kontroly uspějí
@@ -1984,12 +1871,10 @@ milestones.filter_sort.most_issues=Nejvíce úkolů
milestones.filter_sort.least_issues=Nejméně úkolů
signing.will_sign=Tento commit bude podepsána klíčem „%s“.
-signing.wont_sign.error=Došlo k chybě při kontrole, zda může být commit podepsán.
signing.wont_sign.nokey=K podpisu tohoto commitu není k dispozici žádný klíč.
signing.wont_sign.never=Commity nejsou nikdy podepsány.
signing.wont_sign.always=Commity jsou vždy podepsány.
signing.wont_sign.pubkey=Commit nebude podepsán, protože nemáte veřejný klíč spojený s vaším účtem.
-signing.wont_sign.twofa=Pro podepsání commitů musíte mít povoleno dvoufaktorové ověření.
signing.wont_sign.parentsigned=Commit nebude podepsán, protože nadřazený commit není podepsán.
signing.wont_sign.basesigned=Sloučení nebude podepsáno, protože základní commit není podepsaný.
signing.wont_sign.headsigned=Sloučení nebude podepsáno, protože hlavní revize není podepsána.
@@ -2075,7 +1960,6 @@ activity.title.releases_1=%d Vydání
activity.title.releases_n=%d Vydání
activity.title.releases_published_by=%s publikoval %s
activity.published_release_label=Publikováno
-activity.no_git_activity=V tomto období nebyla žádná aktivita při odevzdání.
activity.git_stats_exclude_merges=Při vyloučení slučování,
activity.git_stats_author_1=%d autor
activity.git_stats_author_n=%d autoři
@@ -2103,7 +1987,6 @@ contributors.contribution_type.additions=Přidání
contributors.contribution_type.deletions=Odstranění
settings=Nastavení
-settings.desc=Nastavení je místo, kde můžete měnit nastavení repozitáře
settings.options=Repozitář
settings.collaboration=Spolupracovníci
settings.collaboration.admin=Správce
@@ -2120,7 +2003,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Nastavte váš p
settings.mirror_settings.docs.disabled_push_mirror.instructions=Nastavte svůj projekt pro automatické natažení commitů, značek a větví z jiného repozitáře.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Právě teď to lze provést pouze v menu "Nová migrace". Pro více informací prosím konzultujte:
settings.mirror_settings.docs.disabled_push_mirror.info=Push zrcadla byla zakázána administrátorem vašeho webu.
-settings.mirror_settings.docs.no_new_mirrors=Váš repozitář zrcadlí změny do nebo z jiného repozitáře. Mějte prosím na paměti, že v tuto chvíli nemůžete vytvořit žádná nová zrcadla.
settings.mirror_settings.docs.can_still_use=I když nemůžete upravit stávající zrcadla nebo vytvořit nová, stále můžete použít své stávající zrcadlo.
settings.mirror_settings.docs.pull_mirror_instructions=Chcete-li nastavit zrcadlo pro natažení, konzultujte prosím:
settings.mirror_settings.docs.more_information_if_disabled=Více informací o zrcadlech pro nahrání a natažení naleznete zde:
@@ -2195,7 +2077,6 @@ settings.admin_indexer_commit_sha=Poslední indexovaná SHA
settings.admin_indexer_unindexed=Neindexováno
settings.reindex_button=Přidat do fronty reindexace
settings.reindex_requested=Požadováno reindexování
-settings.admin_enable_close_issues_via_commit_in_any_branch=Zavřít úkol pomocí commitu v jiné než výchozí větvi
settings.danger_zone=Nebezpečná zóna
settings.new_owner_has_same_repo=Nový vlastník již repozitář se stejným názvem má. Vyberte prosím jiné jméno.
settings.convert=Převést na běžný repozitář
@@ -2217,7 +2098,6 @@ settings.transfer_abort_invalid=Nemůžete zrušit neexistující převod repozi
settings.transfer_abort_success=Převod repozitáře do %s byl úspěšně zrušen.
settings.transfer_desc=Předat tento repozitář uživateli nebo organizaci, ve které máte administrátorská práva.
settings.transfer_form_title=Zadejte jméno repozitáře pro potvrzení:
-settings.transfer_in_progress=V současné době probíhá převod. Zrušte jej, pokud chcete převést tento repozitář jinému uživateli.
settings.transfer_notices_1=- Ztratíte přístup k repozitáři, pokud jej převedete na uživatele.
settings.transfer_notices_2=- Zůstane vám přístup k repozitáři, pokud jej převedete na organizaci kterou (spolu)vlastníte.
settings.transfer_notices_3=- Pokud je repozitář soukromý a je předán jednotlivému uživateli, tato akce se ujistí, že uživatel má alespoň oprávnění ke čtení (a v případě potřeby změní oprávnění).
@@ -2232,13 +2112,9 @@ settings.trust_model.default=Výchozí model důvěry
settings.trust_model.default.desc=Použít výchozí model důvěry pro tuto instalaci.
settings.trust_model.collaborator=Spolupracovník
settings.trust_model.collaborator.long=Spolupracovník: Důvěřovat podpisům spolupracovníků
-settings.trust_model.collaborator.desc=Platné podpisy spolupracovníků tohoto repozitáře budou označeny jako „důvěryhodné“ - (ať se shodují s autorem, či nikoli). V opačném případě budou platné podpisy označeny jako „nedůvěryhodné“, pokud se podpis shoduje s přispěvatelem a „neodpovídající“, pokud ne.
settings.trust_model.committer=Přispěvatel
-settings.trust_model.committer.long=Přispěvatel: Důvěřovat podpisům, které odpovídají autorům (což odpovídá GitHub a přinutí Giteu nastavit jako tvůrce pro Giteou podepsané revize)
-settings.trust_model.committer.desc=Platné podpisy budou označeny pouze jako „důvěryhodné“, pokud se shodují s přispěvatelem, jinak budou označeny jako „neodpovídající“. To přinutí Giteu, aby byla přispěvatelem podepsaných commitů se skutečným přispěvatelem označeným jako Co-authored-by: a Co-committed-by: na konci commitu. Výchozí klíč Gitea musí odpovídat uživateli v databázi.
settings.trust_model.collaboratorcommitter=Spolupracovník+Přispěvatel
settings.trust_model.collaboratorcommitter.long=Spolupracovník+Přispěvatel: Důvěřovat podpisům od spolupracovníků, které odpovídají tvůrci revize
-settings.trust_model.collaboratorcommitter.desc=Platné podpisy spolupracovníků tohoto repozitáře budou označeny jako „důvěryhodné“, pokud se shodují s přispěvatelem. V opačném případě budou platné podpisy označeny jako "nedůvěryhodné", pokud se podpis shoduje s přispěvatelem a „neodpovídajícím“ v opačném případě. To přinutí Giteu, aby byla označena jako přispěvatel podepsaných commitů se skutečným přispěvatelem označeným jako Co-Authored-By: a Co-Committed-By: na konci commitu. Výchozí klíč Gitea musí odpovídat uživateli v databázi.
settings.wiki_delete=Odstranit data Wiki
settings.wiki_delete_desc=Smazání Wiki dat repozitáře je trvalé a nemůže být vráceno zpět.
settings.wiki_delete_notices_1=- Natrvalo odstraní a zakáže wiki repozitáře pro %s.
@@ -2247,7 +2123,6 @@ settings.wiki_deletion_success=Wiki data repozitáře byla odstraněna.
settings.delete=Smazat tento repozitář
settings.delete_desc=Smazání repozitáře je trvalé a nemůže být vráceno zpět.
settings.delete_notices_1=- Tuto operaci nelze zvrátit.
-settings.delete_notices_2=- Tato operace trvale smaže repozitář %s včetně kódu, úkolů, komentářů, Wiki dat a nastavení spolupracovníků.
settings.delete_notices_fork_1=- Rozštěpení repozitáře bude nezávislé po smazání.
settings.deletion_success=Repozitář byl odstraněn.
settings.update_settings_success=Nastavení repozitáře bylo aktualizováno.
@@ -2269,8 +2144,6 @@ settings.team_not_in_organization=Tým není ve stejné organizaci jako repozit
settings.teams=Týmy
settings.add_team=Přidat tým
settings.add_team_duplicate=Tým již má repozitář
-settings.add_team_success=Tým má nyní přístup k repozitáři.
-settings.change_team_permission_tip=Oprávnění týmu je nastaveno na stránce nastavení týmu a nelze je změnit pro každý repozitář
settings.delete_team_tip=Tento tým má přístup ke všem repositářům a nemůže být odstraněn
settings.remove_team_success=Přístup týmu k repozitáři byl odstraněn.
settings.add_webhook=Přidat webový háček
@@ -2279,8 +2152,6 @@ settings.hooks_desc=Webové háčky automaticky vytvářejí dotazy HTTP POST na
settings.webhook_deletion=Odstranit webový háček
settings.webhook_deletion_desc=Odstranění webového háčku smaže jeho nastavení a historii doručení. Pokračovat?
settings.webhook_deletion_success=Webový háček byl smazán.
-settings.webhook.test_delivery=Test doručitelnosti
-settings.webhook.test_delivery_desc=Vyzkoušet tento webový háček pomocí falešné události.
settings.webhook.test_delivery_desc_disabled=Chcete-li tento webový háček otestovat s falešnou událostí, aktivujte ho.
settings.webhook.request=Požadavek
settings.webhook.response=Odpověď
@@ -2327,7 +2198,6 @@ settings.event_repository=Repozitář
settings.event_repository_desc=Repozitář vytvořen nebo smazán.
settings.event_header_issue=Události úkolů
settings.event_issues=Úkoly
-settings.event_issues_desc=Úkol otevřen, uzavřen, znovu otevřen nebo upraven.
settings.event_issue_assign=Úkol přiřazen
settings.event_issue_assign_desc=Úkol přiřazen nebo nepřiřazen.
settings.event_issue_label=Úkol oštítkován
@@ -2338,7 +2208,6 @@ settings.event_issue_comment=Komentář k úkolu
settings.event_issue_comment_desc=Komentář úkolu přidán, upraven nebo smazán.
settings.event_header_pull_request=Události pull requestu
settings.event_pull_request=Pull request
-settings.event_pull_request_desc=Pull request otevřen, uzavřen, znovu otevřen nebo upraven.
settings.event_pull_request_assign=Pull request přiřazen
settings.event_pull_request_assign_desc=Pull request přiřazen nebo nepřiřazen.
settings.event_pull_request_label=Pull request oštítkován
@@ -2478,7 +2347,6 @@ settings.block_on_official_review_requests_desc=Slučování nebude možné, pok
settings.block_outdated_branch=Blokovat sloučení, pokud je pull request zastaralý
settings.block_outdated_branch_desc=Slučování nebude možné, pokud je hlavní větev za základní větví.
settings.block_admin_merge_override=Pravidla pro ochranu větví se vztahují i na administrátory
-settings.block_admin_merge_override_desc=Pravidla pro ochranu větví se vztahují i na administrátory a nesmějí je obcházet.
settings.default_branch_desc=Vybrat výchozí větev repozitáře pro pull requesty a revize kódu:
settings.merge_style_desc=Sloučit styly
settings.default_merge_style_desc=Výchozí styl sloučení
@@ -2505,10 +2373,7 @@ settings.matrix.homeserver_url=URL adresa Homeserveru
settings.matrix.room_id=ID místnosti
settings.matrix.message_type=Typ zprávy
settings.visibility.private.button=Nastavit jako soukromé
-settings.visibility.private.text=Změna viditelnosti na soukromou nejen zviditelní repozitář pouze pro povolené členy, ale může odstranit vztah mezi ním a rozštěpením, sledujícími a oblíbeností.
settings.visibility.private.bullet_title=Změna viditelnosti na soukromou způsobí:
-settings.visibility.private.bullet_one=Zviditelnit repozitář pouze pro povolené členy.
-settings.visibility.private.bullet_two=Může odstranit vztah mezi ním a rozštěpeními , sledujícími a oblíbeností .
settings.visibility.public.button=Nastavit jako veřejné
settings.visibility.public.text=Změna viditelnosti na veřejné učiní repozitář viditelným pro kohokoliv.
settings.visibility.public.bullet_title=Změna viditelnosti na veřejnou způsobí:
@@ -2527,7 +2392,6 @@ settings.archive.tagsettings_unavailable=Nastavení značek není k dispozici, p
settings.archive.mirrors_unavailable=Zrcadla nejsou k dispozici, pokud je repozitář archivován.
settings.unarchive.button=Obnovit repozitář
settings.unarchive.header=Obnovit tento repozitář
-settings.unarchive.text=Obnovení repozitáře vrátí možnost přijímání commitů a nahrávání. Stejně tak se obnoví i možnost zadávání nových úkolů a pull requestů.
settings.unarchive.success=Repozitář byl úspěšně obnoven.
settings.unarchive.error=Nastala chyba při obnovování repozitáře. Prohlédněte si záznam pro více detailů.
settings.update_avatar_success=Avatar repozitáře byl aktualizován.
@@ -2545,11 +2409,9 @@ settings.lfs_invalid_locking_path=Neplatná cesta: %s
settings.lfs_invalid_lock_directory=Adresář nelze uzamknout: %s
settings.lfs_lock_already_exists=Zámek již existuje: %s
settings.lfs_lock=Zámek
-settings.lfs_lock_path=Umístění souboru k zamčení...
settings.lfs_locks_no_locks=Žádné zámky
settings.lfs_lock_file_no_exist=Uzamčený soubor neexistuje ve výchozí větvi
settings.lfs_force_unlock=Vynutit odemknutí
-settings.lfs_pointers.found=Nalezeno %d blob ukazatel(ů) - %d přiřazeno, %d není přiřazeno (%d chybí v úložišti)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=V repozitáři
@@ -2728,7 +2590,6 @@ error.csv.invalid_field_count=Soubor nelze vykreslit, protože má nesprávný p
error.broken_git_hook=Git háčky tohoto repozitáře se zdají být rozbité. Postupujte prosím podle dokumentace , abyste je opravili, a poté nahrajte nějaké commity pro obnovení stavu.
[graphs]
-component_loading=Načítání %s...
component_loading_failed=Nelze načíst %s
component_loading_info=Může to chvíli trvat…
component_failed_to_load=Došlo k neočekávané chybě.
@@ -2766,7 +2627,6 @@ form.create_org_not_allowed=Nemáte oprávnění vytvářet nové organizace.
settings=Nastavení
settings.options=Organizace
settings.full_name=Celé jméno
-settings.email=Kontaktní e-mail
settings.website=Webové stránky
settings.location=Umístění
settings.permission=Oprávnění
@@ -2780,15 +2640,13 @@ settings.visibility.private_shortname=Soukromý
settings.update_settings=Upravit nastavení
settings.update_setting_success=Nastavení organizace bylo upraveno.
-settings.change_orgname_prompt=Poznámka: Změna názvu organizace také změní adresu URL vaší organizace a uvolní staré jméno této organizace.
-settings.change_orgname_redirect_prompt=Staré jméno bude přesměrovávat, dokud nebude znovu obsazeno.
+
+
settings.update_avatar_success=Avatar organizace byl aktualizován.
settings.delete=Smazat organizaci
settings.delete_account=Smazat tuto organizaci
settings.delete_prompt=Organizace bude trvale odstraněna. Tato změna NEMŮŽE být vrácena!
settings.confirm_delete_account=Potvrdit smazání
-settings.delete_org_title=Smazat organizaci
-settings.delete_org_desc=Tato organizace bude trvale smazána. Pokračovat?
settings.hooks_desc=Přidat webové háčky, které budou spouštěny pro všechny repozitáře v této organizaci.
settings.labels_desc=Přidejte štítky, které mohou být použity pro úkoly všech repositářů v rámci této organizace.
@@ -2844,7 +2702,6 @@ teams.remove_all_repos_title=Odstranit všechny repozitáře týmu
teams.remove_all_repos_desc=Tímto odeberete všechny repozitáře z týmu.
teams.add_all_repos_title=Přidat všechny repozitáře
teams.add_all_repos_desc=Tímto přidáte do týmu všechny repozitáře organizace.
-teams.add_nonexistent_repo=Repositář, který se snažíte přidat, neexistuje. Nejdříve jej vytvořte, prosím.
teams.add_duplicate_users=Uživatel je již členem týmu.
teams.repos.none=Tento tým nemůže přistoupit k žádným repozitářům.
teams.members.none=Žádní členové v tomto týmu.
@@ -2877,7 +2734,6 @@ repositories=Repozitáře
hooks=Webové háčky
integrations=Integrace
authentication=Zdroje ověření
-emails=Uživatelské e-maily
config=Nastavení
config_summary=Souhrn
config_settings=Nastavení
@@ -2909,11 +2765,8 @@ dashboard.cron.cancelled=Naplánovaná úloha: %[1]s zrušena: %[3]s
dashboard.cron.error=Chyba v naplánované úloze: %s: %[3]s
dashboard.cron.finished=Naplánovaná úloha: %[1]s skončila
dashboard.delete_inactive_accounts=Smazat všechny neaktivované účty
-dashboard.delete_inactive_accounts.started=Spuštěna úloha mazání všech neaktivovaných účtů.
dashboard.delete_repo_archives=Odstranit všechny archivy repozitáře (ZIP, TAR.GZ, atd.)
-dashboard.delete_repo_archives.started=Spuštěna úloha smazání všech archivovaných repozitářů.
dashboard.delete_missing_repos=Smazat všechny repozitáře, které nemají Git soubory
-dashboard.delete_missing_repos.started=Spuštěna úloha mazání všech repozitářů, které nemají Git soubory.
dashboard.delete_generated_repository_avatars=Odstranit vygenerované avatary repozitářů
dashboard.sync_repo_branches=Synchronizovat chybějící větve z git dat do databází
dashboard.sync_repo_tags=Synchronizovat značky z git dat do databáze
@@ -2921,17 +2774,9 @@ dashboard.update_mirrors=Aktualizovat zrcadla
dashboard.repo_health_check=Kontrola stavu všech repozitářů
dashboard.check_repo_stats=Zkontrolovat všechny statistiky repositáře
dashboard.archive_cleanup=Smazat staré archivy repozitářů
-dashboard.deleted_branches_cleanup=Vyčistit odstraněné větve
dashboard.update_migration_poster_id=Aktualizovat ID autora migrace
-dashboard.git_gc_repos=Provést úklid všech repozitářů
-dashboard.resync_all_sshkeys=Aktualizovat soubor „.ssh/authorized_keys“ pomocí SSH klíčů Gitea.
-dashboard.resync_all_sshprincipals=Aktualizovat soubor '.ssh/authorized_principals' pomocí Gitea SSH Principal certifikátů.
-dashboard.resync_all_hooks=Znovu synchronizovat háčky před přijetím, aktualizace a po přijetí všech repozitářů.
dashboard.reinit_missing_repos=Znovu inicializovat všechny chybějící repozitáře, pro které existují záznamy
dashboard.sync_external_users=Synchronizovat externí uživatelská data
-dashboard.cleanup_hook_task_table=Vyčistit tabulku hook_task
-dashboard.cleanup_packages=Vyčistit prošlé balíčky
-dashboard.cleanup_actions=Vyčištění prostředků akcí, jejichž platnost vypršela
dashboard.server_uptime=Doba provozu serveru
dashboard.current_goroutine=Aktuální Goroutines
dashboard.current_memory_usage=Aktuální využití paměti
@@ -2962,10 +2807,8 @@ dashboard.total_gc_pause=Celková pauza GC
dashboard.last_gc_pause=Poslední pauza GC
dashboard.gc_times=Časy GC
dashboard.delete_old_actions=Odstranit všechny staré aktivity z databáze
-dashboard.delete_old_actions.started=Začalo odstraňování všech starých aktivit z databáze.
dashboard.update_checker=Kontrola aktualizací
dashboard.delete_old_system_notices=Odstranit všechna stará systémová upozornění z databáze
-dashboard.gc_lfs=Úklid LFS meta objektů
dashboard.stop_zombie_tasks=Zastavit zombie úlohy akcí
dashboard.stop_endless_tasks=Zastavit nekonečné úlohy akcí
dashboard.cancel_abandoned_jobs=Zrušit opuštěné úlohy akcí
@@ -2989,7 +2832,6 @@ users.2fa=2FA
users.repos=Repozitáře
users.created=Vytvořen
users.last_login=Poslední přihlášení
-users.never_login=Nikdy nepřihlášen
users.send_register_notify=Odeslat upozornění při registraci uživatele
users.new_success=Uživatelský účet „%s“ byl vytvořen.
users.edit=Upravit
@@ -3016,7 +2858,6 @@ users.still_own_repo=Tento uživatel stále vlastní jeden nebo více repozitá
users.still_has_org=Uživatel je člen organizace. Nejprve odstraňte uživatele ze všech organizací.
users.purge=Vymazat uživatele
users.purge_help=Vynuceně smazat uživatele a všechny repositáře, organizace a balíčky vlastněné uživatelem. Všechny komentáře budou také smazány.
-users.still_own_packages=Tento uživatel stále vlastní jeden nebo více balíčků, nejprve odstraňte tyto balíčky.
users.deletion_success=Uživatelský účet byl smazán.
users.reset_2fa=Resetovat 2FA
users.list_status_filter.menu_text=Filtr
@@ -3036,11 +2877,7 @@ users.details=Detaily uživatele
emails.email_manage_panel=Správa e-mailů uživatele
emails.primary=Hlavní
emails.activated=Aktivován
-emails.filter_sort.email=E-mail
-emails.filter_sort.email_reverse=E-mail (naopak)
emails.filter_sort.name=Uživatelské jméno
-emails.filter_sort.name_reverse=Uživatelské jméno (naopak)
-emails.updated=E-mail aktualizován
emails.not_updated=Aktualizace požadované e-mailové adresy se nezdařila: %v
emails.duplicate_active=Tato e-mailová adresa je již aktivní pro jiného uživatele.
emails.change_email_header=Aktualizovat vlastnosti e-mailu
@@ -3048,7 +2885,6 @@ emails.change_email_text=Opravdu chcete aktualizovat tuto e-mailovou adresu?
emails.delete=Odstranit e-mail
emails.delete_desc=Opravdu chcete odstranit tuto e-mailovou adresu?
emails.deletion_success=E-mailová adresa byla odstraněna.
-emails.delete_primary_email_error=Primární e-mail nelze odstranit.
orgs.org_manage_panel=Správa organizací
orgs.name=Název
@@ -3162,27 +2998,19 @@ auths.oauth2_required_claim_name_helper=Nastavte toto jméno pro omezení přihl
auths.oauth2_required_claim_value=Požadovaná hodnota tvrzení
auths.oauth2_required_claim_value_helper=Nastavte tuto hodnotu pro omezení přihlášení z tohoto zdroje pro uživatele s tvrzením s tímto jménem a hodnotou
auths.oauth2_group_claim_name=Název tvrzení poskytující názvy skupin pro tento zdroj. (nepovinné)
-auths.oauth2_admin_group=Hodnota tvrzení pro skupinu uživatelů administrátorů. (Volitelné - vyžaduje název tvrzení výše)
-auths.oauth2_restricted_group=Hodnota tvrzení pro skupinu omezených uživatelů. (Volitelné - vyžaduje název tvrzení výše)
-auths.oauth2_map_group_to_team=Mapa uváděných skupin do organizačních týmů. (Volitelné - vyžaduje výše uvedené jméno)
auths.oauth2_map_group_to_team_removal=Odebrat uživatele z synchronizovaných týmů, pokud uživatel nepatří do odpovídající skupiny.
auths.enable_auto_register=Povolit zaregistrování se
auths.sspi_auto_create_users=Automaticky vytvářet uživatele
-auths.sspi_auto_create_users_helper=Povolit SSPI autentizační metodě automaticky vytvářet nové účty pro uživatele, kteří se poprvé přihlásili
auths.sspi_auto_activate_users=Automaticky aktivovat uživatele
auths.sspi_auto_activate_users_helper=Povolit SSPI autentizační metodě automaticky aktivovat nové uživatele
auths.sspi_strip_domain_names=Odstranit názvy domén z uživatelských jmen
-auths.sspi_strip_domain_names_helper=Je-li zaškrtnuto, doménová jména budou odstraněna z přihlašovacích jmen (např. „DOMAIN\user“ a „user@example.org“ se stanou jen „user“).
auths.sspi_separator_replacement=Oddělovač použitý místo \, / a @
-auths.sspi_separator_replacement_helper=Znak k nahrazení oddělovače jmen na nižší úrovni (např. „DOMAIN\user“) a uživatelská jména (např. @ v „user@example.org“).
auths.sspi_default_language=Výchozí jazyk uživatele
-auths.sspi_default_language_helper=Výchozí jazyk pro uživatele automaticky vytvořené pomocí SSPI auth metody. Pokud dáváte přednost automatickému zjištění jazyka, ponechte prázdné.
auths.tips=Tipy
auths.tips.oauth2.general=Ověřování OAuth2
auths.tips.oauth2.general.tip=Při registraci nové OAuth2 autentizace by URL callbacku/přesměrování měla být:
auths.tip.oauth2_provider=Poskytovatel OAuth2
auths.tip.bitbucket=Vytvořte nového OAuth konzumenta na %s a přidejte oprávnění „Account“ - „Read“
-auths.tip.nextcloud=Zaregistrujte nového OAuth konzumenta na vaší instanci pomocí následujícího menu „Nastavení -> Zabezpečení -> OAuth 2.0 klient“
auths.tip.dropbox=Vytvořte novou aplikaci na %s
auths.tip.facebook=Registrujte novou aplikaci na %s a přidejte produkt „Facebook Login“
auths.tip.github=Registrujte novou OAuth aplikaci na %s
@@ -3292,7 +3120,6 @@ config.mailer_sendmail_path=Cesta k Sendmail
config.mailer_sendmail_args=Dodatečné argumenty pro Sendmail
config.mailer_sendmail_timeout=Časový limit Sandmail
config.mailer_use_dummy=Fiktivní
-config.test_email_placeholder=E-mail (např.: test@example.com)
config.send_test_mail=Odeslat zkušební e-mail
config.send_test_mail_submit=Odeslat
config.test_mail_failed=Odeslání testovacího e-mailu na „%s“ selhalo: %v
@@ -3366,7 +3193,6 @@ monitor.start=Čas zahájení
monitor.execute_time=Doba provádění
monitor.last_execution_result=Výsledek
monitor.process.cancel=Zrušit proces
-monitor.process.cancel_desc=Zrušení procesu může způsobit ztrátu dat
monitor.process.children=Potomek
monitor.queues=Fronty
@@ -3381,7 +3207,6 @@ monitor.queue.numberinqueue=Číslo ve frontě
monitor.queue.review_add=Posoudit / přidat workery
monitor.queue.settings.title=Nastavení fondu
monitor.queue.settings.desc=Fondy se dynamicky zvětšují v závislosti na blokování jejich pracovních front.
-monitor.queue.settings.maxnumberworkers=Maximální počet workerů
monitor.queue.settings.maxnumberworkers.placeholder=V současné době %[1]d
monitor.queue.settings.maxnumberworkers.error=Maximální počet workerů musí být číslo
monitor.queue.settings.submit=Aktualizovat nastavení
@@ -3407,10 +3232,6 @@ notices.delete_success=Systémové upozornění bylo smazáno.
self_check.no_problem_found=Zatím nebyl nalezen žádný problém.
self_check.startup_warnings=Upozornění při spuštění:
self_check.database_collation_mismatch=Očekávejte, že databáze použije collation: %s
-self_check.database_collation_case_insensitive=Databáze používá collation %s, což je collation nerozlišující velká a malá písmena. Ačkoli s ní Gitea může pracovat, mohou se vyskytnout vzácné případy, kdy nebude fungovat podle očekávání.
-self_check.database_inconsistent_collation_columns=Databáze používá collation %s, ale tyto sloupce používají chybné collation. To může způsobit neočekávané problémy.
-self_check.database_fix_mysql=Pro uživatele MySQL/MariaDB můžete použít příkaz "gitea doctor convert", který opraví problémy s collation, nebo můžete také problém vyřešit příkazem "ALTER ... COLLATE ..." SQL ručně.
-self_check.database_fix_mssql=Uživatelé MSSQL mohou problém vyřešit pouze pomocí příkazu "ALTER ... COLLATE ..." SQL ručně.
self_check.location_origin_mismatch=Aktuální URL (%[1]s) se neshoduje s URL viditelnou pro Gitea (%[2]s). Pokud používáte reverzní proxy, ujistěte se, že hlavičky „Host“ a „X-Forwarded-Proto“ jsou nastaveny správně.
[action]
@@ -3494,8 +3315,6 @@ error.no_committer_account=Žádný účet není propojen s e-mailovou adresou p
error.no_gpg_keys_found=V databázi nebyl nalezen žádný známý klíč pro tento podpis
error.not_signed_commit=Nepodepsaná revize
error.failed_retrieval_gpg_keys=Nelze získat žádný klíč propojený s účtem přispěvatele
-error.probable_bad_signature=VAROVÁNÍ! Přestože v databázi existuje klíč s tímto ID, tuto revizi neověřuje! Tato revize je PODEZŘELÁ.
-error.probable_bad_default_signature=VAROVÁNÍ! Ačkoli výchozí klíč má toto ID, neověřuje tuto revizi! Tato revize je PODEZŘELÁ.
[units]
unit=Jednotka
@@ -3534,7 +3353,6 @@ versions.view_all=Zobrazit všechny
dependency.id=ID
dependency.version=Verze
search_in_external_registry=Hledat v %s
-alpine.registry=Nastavte tento registr přidáním URL do /etc/apk/repositories:
alpine.registry.key=Stáhněte si veřejný RSA klíč registru do složky /etc/apk/keys/ pro ověření podpisu indexu:
alpine.registry.info=Vyberte $branch a $repository ze seznamu níže.
alpine.install=Pro instalaci balíčku spusťte následující příkaz:
@@ -3547,18 +3365,13 @@ arch.install=Synchronizovat balíček s pacman:
arch.repository=Informace o repozitáři
arch.repository.repositories=Repozitáře
arch.repository.architectures=Architektury
-cargo.registry=Nastavte tento registr v konfiguračním souboru Cargo (například ~/.cargo/config.toml):
cargo.install=Chcete-li nainstalovat balíček pomocí Cargo, spusťte následující příkaz:
-chef.registry=Nastavit tento registr v souboru ~/.chef/config.rb:
chef.install=Pro instalaci balíčku spusťte následující příkaz:
-composer.registry=Nastavit tento registr v souboru ~/.composer/config.json:
composer.install=Pro instalaci balíčku pomocí Compposer spusťte následující příkaz:
composer.dependencies=Závislosti
composer.dependencies.development=Vývojové závislosti
conan.details.repository=Repozitář
-conan.registry=Nastavte tento registr z příkazového řádku:
conan.install=Pro instalaci balíčku pomocí Conan spusťte následující příkaz:
-conda.registry=Nastavte tento registr jako Conda repozitář ve vašem .condarc:
conda.install=Pro instalaci balíčku pomocí Conda spusťte následující příkaz:
container.details.type=Typ obrazu
container.details.platform=Platforma
@@ -3570,9 +3383,7 @@ container.layers=Vrstvy obrazů
container.labels=Štítky
container.labels.key=Klíč
container.labels.value=Hodnota
-cran.registry=Nastavte tento registr v souboru Rprofile.site:
cran.install=Pro instalaci balíčku spusťte následující příkaz:
-debian.registry=Nastavte tento registr z příkazového řádku:
debian.registry.info=Vyberte $distribution a $component ze seznamu níže.
debian.install=Pro instalaci balíčku spusťte následující příkaz:
debian.repository=Informace o repozitáři
@@ -3581,16 +3392,11 @@ debian.repository.components=Komponenty
debian.repository.architectures=Architektury
generic.download=Stáhnout balíček z příkazové řádky:
go.install=Nainstalujte balíček z příkazové řádky:
-helm.registry=Nastavte tento registr z příkazového řádku:
helm.install=Pro instalaci balíčku spusťte následující příkaz:
-maven.registry=Nastavte tento registr ve vašem projektu pom.xml souboru:
-maven.install=Pro použití balíčku uveďte následující v bloku dependencies v souboru pom.xml:
maven.install2=Spustit pomocí příkazové řádky:
maven.download=Chcete-li stáhnout závislost, spusťte přes příkazový řádek:
-nuget.registry=Nastavte tento registr z příkazového řádku:
nuget.install=Chcete-li nainstalovat balíček pomocí NuGet, spusťte následující příkaz:
nuget.dependency.framework=Cílový Framework
-npm.registry=Nastavte tento registr ve vašem projektu v souboru .npmrc:
npm.install=Pro instalaci balíčku pomocí npm spusťte následující příkaz:
npm.install2=nebo ho přidejte do souboru package.json:
npm.dependencies=Závislosti
@@ -3602,7 +3408,6 @@ npm.details.tag=Značka
pub.install=Chcete-li nainstalovat balíček pomocí Dart, spusťte následující příkaz:
pypi.requires=Vyžaduje Python
pypi.install=Pro instalaci balíčku pomocí pip spusťte následující příkaz:
-rpm.registry=Nastavte tento registr z příkazového řádku:
rpm.distros.redhat=na distribuce založené na RedHat
rpm.distros.suse=na distribuce založené na SUSE
rpm.install=Pro instalaci balíčku spusťte následující příkaz:
@@ -3615,7 +3420,6 @@ rubygems.dependencies.runtime=Běhové závislosti
rubygems.dependencies.development=Vývojové závislosti
rubygems.required.ruby=Vyžaduje verzi Ruby
rubygems.required.rubygems=Vyžaduje verzi RubyGem
-swift.registry=Nastavte tento registr z příkazového řádku:
swift.install=Přidejte balíček do svého Package.swift souboru:
swift.install2=a spustit následující příkaz:
vagrant.install=Pro přidání Vagrant box spusťte následující příkaz:
@@ -3638,7 +3442,6 @@ owner.settings.cargo.initialize.success=Index Cargo byl úspěšně vytvořen.
owner.settings.cargo.rebuild=Znovu vytvořit Index
owner.settings.cargo.rebuild.description=Obnova může být užitečná, pokud index není synchronizován s uloženými balíčky Cargo.
owner.settings.cargo.rebuild.error=Obnovení Cargo indexu se nezdařilo: %v
-owner.settings.cargo.rebuild.success=Cargo Index byl úspěšně obnoven.
owner.settings.cleanuprules.title=Spravovat pravidla pro čištění
owner.settings.cleanuprules.add=Přidat pravidlo pro čištění
owner.settings.cleanuprules.edit=Upravit pravidlo pro čištění
@@ -3721,7 +3524,6 @@ runners.delete_runner=Odstranit tento runner
runners.delete_runner_success=Runner byl úspěšně odstraněn
runners.delete_runner_failed=Odstranění runneru selhalo
runners.delete_runner_header=Potvrdit odstranění tohoto runneru
-runners.delete_runner_notice=Pokud na tomto runneru běží úloha, bude ukončena a označena jako neúspěšná. Může dojít k přerušení vytváření pracovního postupu.
runners.none=Žádné runnery nejsou k dispozici
runners.status.unspecified=Neznámý
runners.status.idle=Nečinný
diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini
index f115dee2479..6d86a0c8fd3 100644
--- a/options/locale/locale_de-DE.ini
+++ b/options/locale/locale_de-DE.ini
@@ -44,7 +44,6 @@ webauthn_use_twofa=Zwei-Faktor-Authentifizierung via Handy verwenden
webauthn_error=Dein Sicherheitsschlüssel konnte nicht gelesen werden.
webauthn_unsupported_browser=Dein Browser unterstützt derzeit keinen WebAuthn.
webauthn_error_unknown=Ein unbekannter Fehler ist aufgetreten. Bitte versuche es erneut.
-webauthn_error_insecure=WebAuthn unterstützt nur sichere Verbindungen. Zum Testen über HTTP kannst Du "localhost" oder "127.0.0.1" als Host verwenden
webauthn_error_unable_to_process=Der Server konnte deine Anfrage nicht bearbeiten.
webauthn_error_duplicated=Für diese Anfrage ist der Sicherheitsschlüssel nicht erlaubt. Bitte stell sicher, dass er nicht bereits registriert ist.
webauthn_error_empty=Du musst einen Namen für diesen Schlüssel festlegen.
@@ -113,6 +112,7 @@ copy_type_unsupported=Dieser Dateityp kann nicht kopiert werden
write=Verfassen
preview=Vorschau
loading=Laden…
+files=Dateien
error=Fehler
error404=Die Seite, die Du versuchst aufzurufen, existiert nicht oder Du bist nicht berechtigt , diese anzusehen.
@@ -128,7 +128,7 @@ pin=Anheften
unpin=Loslösen
artifacts=Artefakte
-confirm_delete_artifact=Bist du sicher, dass du das Artefakt '%s' löschen möchtest?
+expired=Abgelaufen
archived=Archiviert
@@ -165,29 +165,18 @@ no_results_found=Es wurden keine Ergebnisse gefunden.
internal_error_skipped=Ein interner Fehler ist aufgetreten, wurde aber übersprungen: %s
[search]
-search=Suche ...
type_tooltip=Suchmodus
fuzzy=Ähnlich
-fuzzy_tooltip=Ergebnisse einbeziehen, die dem Suchbegriff ähnlich sind
+words=Wörter
+words_tooltip=Nur Suchbegriffe einbeziehen, die den Suchbegriffen exakt entsprechen
+regexp=Regexp
+regexp_tooltip=Nur Suchbegriffe einbeziehen, die dem Regexp exakt entsprechen
exact=Exakt
exact_tooltip=Nur Suchbegriffe einbeziehen, die dem exakten Suchbegriff entsprechen
-repo_kind=Repositories durchsuchen ...
-user_kind=Benutzer durchsuchen ...
-org_kind=Organisationen durchsuchen ...
-team_kind=Teams durchsuchen ...
-code_kind=Code durchsuchen ...
code_search_unavailable=Zurzeit ist die Code-Suche nicht verfügbar. Bitte wende dich an den Website-Administrator.
code_search_by_git_grep=Aktuelle Code-Suchergebnisse werden von "git grep" bereitgestellt. Es könnte bessere Ergebnisse geben, wenn der Website-Administrator den Repository-Indexer aktiviert.
-package_kind=Pakete durchsuchen ...
-project_kind=Projekte durchsuchen ...
-branch_kind=Branches durchsuchen ...
-tag_kind=Tags durchsuchen...
tag_tooltip=Suche nach passenden Tags. Benutze '%', um jede Sequenz von Zahlen zu treffen.
-commit_kind=Commits durchsuchen ...
-runner_kind=Runner durchsuchen ...
no_results=Es wurden keine passenden Ergebnisse gefunden.
-issue_kind=Issues durchsuchen ...
-pull_kind=Pull-Requests durchsuchen...
keyword_search_unavailable=Zurzeit ist die Stichwort-Suche nicht verfügbar. Bitte wende dich an den Website-Administrator.
[aria]
@@ -223,8 +212,6 @@ buttons.enable_monospace_font=Monospace-Schrift aktivieren
buttons.disable_monospace_font=Monospace-Schrift deaktivieren
[filter]
-string.asc=A–Z
-string.desc=Z–A
[error]
occurred=Ein Fehler ist aufgetreten
@@ -245,7 +232,6 @@ license_desc=Hol dir den Code unter Dokumentation , bevor du irgendwelche Einstellungen veränderst.
require_db_desc=Gitea benötigt MySQL, PostgreSQL, MSSQL, SQLite3 oder TiDB (MySQL-Protokoll).
@@ -262,16 +248,10 @@ path=Pfad
sqlite_helper=Dateipfad zur SQLite3 Datenbank. Gebe einen absoluten Pfad an, wenn Gitea als Service gestartet wird.
reinstall_error=Du versuchst, in eine bereits existierende Gitea Datenbank zu installieren
reinstall_confirm_message=Eine Neuinstallation mit einer bestehenden Gitea-Datenbank kann mehrere Probleme verursachen. In den meisten Fällen solltest du deine vorhandene "app.ini" verwenden, um Gitea auszuführen. Wenn du weist, was du tust, bestätigen 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 & Spiegelungen könnten nicht mehr richtig funktionieren. Durch Ankreuzung dieses Kästchens bestätigst du, dass die aktuelle app.ini Datei den korrekten SECRET_KEY enthält.
-reinstall_confirm_check_2=Die Repositories und Einstellungen müssen eventuell neu synchronisiert werden. Durch das Ankreuzen dieses Kästchens bestätigst Du, dass Du die Hooks für die Repositories und die authorized_keys Datei manuell neu synchronisierst. Du bestätigst, dass Du sicherstellst, dass die Repository- und Spiegel-Einstellungen korrekt sind.
reinstall_confirm_check_3=Du bestätigst, dass du absolut sicher bist, dass diese Gitea 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.
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.
-err_admin_name_is_reserved=Administratornutzername ist ungültig, der Nutzername ist reserviert
-err_admin_name_pattern_not_allowed=Administrator-Benutzername ist ungültig, der Benutzername entspricht einem reservierten Muster
-err_admin_name_is_invalid=Administratornutzername ist ungültig
general_title=Allgemeine Einstellungen
app_name=Seitentitel
@@ -287,7 +267,6 @@ domain_helper=Domain oder Host-Adresse für den Server.
ssh_port=SSH-Server-Port
ssh_port_helper=Der Port deines SSH-Servers. Leer lassen, um SSH zu deaktivieren.
http_port=Gitea-HTTP-Listen-Port
-http_port_helper=Port, unter dem der Gitea-Webserver laufen soll.
app_url=Gitea-Basis-URL
app_url_helper=Adresse für HTTP(S)-Klon-URLs und E-Mail-Benachrichtigungen.
log_root_path=Logdateipfad
@@ -351,7 +330,6 @@ no_reply_address=Versteckte E-Mail-Domain
no_reply_address_helper=Domain-Name für Benutzer mit einer versteckten Emailadresse. Zum Beispiel wird der Benutzername „Joe“ in Git als „joe@noreply.example.org“ protokolliert, wenn die versteckte E-Mail-Domain „noreply.example.org“ festgelegt ist.
password_algorithm=Passwort Hashing Algorithmus
invalid_password_algorithm=Ungültiger Passwort-Hash-Algorithmus
-password_algorithm_helper=Lege einen Passwort-Hashing-Algorithmus fest. Algorithmen haben unterschiedliche Anforderungen und Stärken. Der argon2-Algorithmus ist ziemlich sicher, aber er verbraucht viel Speicher und kann für kleine Systeme ungeeignet sein.
enable_update_checker=Aktualisierungsprüfung aktivieren
enable_update_checker_helper=Stellt regelmäßig eine Verbindung zu gitea.io her, um nach neuen Versionen zu prüfen.
env_config_keys=Umgebungskonfiguration
@@ -422,8 +400,6 @@ allow_password_change=Verlange vom Benutzer das Passwort zu ändern (empfohlen)
reset_password_mail_sent_prompt=Eine Bestätigungs-E-Mail wurde an %s gesendet. Bitte überprüfe dein Postfach innerhalb von %s, um den Wiederherstellungsprozess abzuschließen.
active_your_account=Aktiviere dein Konto
account_activated=Konto wurde aktiviert
-prohibit_login=Anmelden verboten
-prohibit_login_desc=Die Anmeldung mit diesem Konto ist nicht gestattet. Bitte kontaktiere den Administrator.
resent_limit_prompt=Du hast bereits eine Aktivierungs-E-Mail angefordert. Bitte warte 3 Minuten und probiere es dann nochmal.
has_unconfirmed_mail=Hallo %s, du hast eine unbestätigte E-Mail-Adresse (%s ). Wenn du keine Bestätigungs-E-Mail erhalten hast oder eine neue senden möchtest, klicke bitte auf den folgenden Button.
change_unconfirmed_mail_address=Wenn deine Registrierungs-E-Mail-Adresse falsch ist, kannst du sie hier ändern und eine neue Bestätigungs-E-Mail senden.
@@ -452,26 +428,22 @@ oauth_signup_submit=Konto vervollständigen
oauth_signin_tab=Mit existierendem Konto verbinden
oauth_signin_title=Anmelden um verbundenes Konto zu autorisieren
oauth_signin_submit=Konto verbinden
+oauth.signin.error.general=Beim Verarbeiten der Autorisierungsanfrage ist ein Fehler aufgetreten: %s. Wenn dieser Fehler weiterhin besteht, wende dich bitte an den Administrator.
oauth.signin.error.access_denied=Die Autorisierungsanfrage wurde abgelehnt.
oauth.signin.error.temporarily_unavailable=Autorisierung fehlgeschlagen, da der Authentifizierungsserver vorübergehend nicht verfügbar ist. Bitte versuch es später erneut.
-oauth_callback_unable_auto_reg=Automatische Registrierung ist aktiviert, aber der OAuth2-Provider %[1]s hat fehlende Felder zurückgegeben: %[2]s, kann den Account nicht automatisch erstellen. Bitte erstelle oder verbinde einen Account oder kontaktieren den Administrator.
openid_connect_submit=Verbinden
openid_connect_title=Mit bestehendem Konto verbinden
openid_connect_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu.
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.
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.
authorize_application_created_by=Diese Anwendung wurde von %s erstellt.
-authorize_application_description=Wenn du diese Anwendung autorisierst, wird sie die Berechtigung erhalten, alle Informationen zu deinem Account zu bearbeiten oder zu lesen. Dies beinhaltet auch private Repositories und Organisationen.
authorize_application_with_scopes=Mit Bereichen: %s
authorize_title=`"%s" den Zugriff auf deinen Account gestatten?`
authorization_failed=Autorisierung fehlgeschlagen
-authorization_failed_desc=Die Autorisierung ist fehlgeschlagen, da wir eine ungültige Anfrage erkannt haben. Bitte kontaktiere den Betreuer der App, die du zu autorisieren versucht hast.
sspi_auth_failed=SSPI-Authentifizierung fehlgeschlagen
password_pwned=Das von dir gewählte Passwort befindet sich auf einer Liste gestohlener Passwörter , die öffentlich verfügbar sind. Bitte versuche es erneut mit einem anderen Passwort und ziehe in Erwägung, auch anderswo deine Passwörter zu ändern.
password_pwned_err=Anfrage an HaveIBeenPwned konnte nicht abgeschlossen werden
@@ -496,8 +468,6 @@ activate_email.text=Bitte klicke innerhalb von %s auf folgenden Link, um
register_notify=Willkommen bei %s
register_notify.title=%[1]s, willkommen bei %[2]s
-register_notify.text_1=dies ist deine Bestätigungs-E-Mail für %s!
-register_notify.text_2=Du kannst dich jetzt mit dem Benutzernamen "%s" anmelden.
register_notify.text_3=Wenn dieser Account von dir erstellt wurde, musst du zuerst dein Passwort setzen .
reset_password=Stelle dein Konto wieder her
@@ -535,7 +505,6 @@ release.download.targz=Quellcode (TAR.GZ Datei)
repo.transfer.subject_to=%s möchte "%s" an %s übertragen
repo.transfer.subject_to_you=%s möchte dir "%s" übertragen
repo.transfer.to_you=dir
-repo.transfer.body=Um es anzunehmen oder abzulehnen, öffne %s, oder ignoriere es einfach.
repo.collaborator.added.subject=%s hat dich zu %s hinzugefügt
repo.collaborator.added.text=Du wurdest als Mitarbeiter für folgendes Repository hinzugefügt:
@@ -587,7 +556,6 @@ url_error=`"%s" ist keine gültige URL.`
include_error=` muss den Text "%s" enthalten.`
glob_pattern_error=` Der Glob Pattern ist ungültig: %s.`
regex_pattern_error=` regex ist ungültig: %s.`
-username_error=` darf nur alphanumerische Zeichen ('0-9','a-z','A-Z'), Bindestriche ('-'), Unterstriche ('_') und Punkte ('.') enthalten. Es kann nicht mit nicht-alphanumerischen Zeichen beginnen oder enden und aufeinanderfolgende nicht-alphanumerische Zeichen sind ebenfalls verboten.`
invalid_group_team_map_error=` Zuordnung ist ungültig: %s`
unknown_error=Unbekannter Fehler:
captcha_incorrect=Der eingegebene CAPTCHA-Code ist falsch.
@@ -602,17 +570,14 @@ username_has_not_been_changed=Benutzername wurde nicht geändert
repo_name_been_taken=Der Repository-Name wird schon verwendet.
repository_force_private=Privat erzwingen ist aktiviert: Private Repositories können nicht veröffentlicht werden.
repository_files_already_exist=Dateien für dieses Repository sind bereits vorhanden. Kontaktiere den Systemadministrator.
-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.
-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.
team_no_units_error=Das Team muss auf mindestens einen Bereich Zugriff haben.
email_been_used=Die E-Mail-Adresse wird bereits verwendet.
email_invalid=Die E-Mail-Adresse ist ungültig.
-email_domain_is_not_allowed=Die Domain der Benutzer-E-Mail %s steht im Widerspruch zu EMAIL_DOMAIN_ALLOWLIST oder EMAIL_DOMAIN_BLOCKLIST. Bitte stelle sicher, dass deine Operation erwartet ist.
openid_been_used=Die OpenID-Adresse "%s" wird bereits verwendet.
username_password_incorrect=Benutzername oder Passwort ist falsch.
password_complexity=Das Passwort erfüllt nicht die Komplexitätsanforderungen:
@@ -637,14 +602,8 @@ invalid_ssh_key=Dein SSH-Key kann nicht überprüft werden: %s
invalid_gpg_key=Dein GPG-Key kann nicht überprüft werden: %s
invalid_ssh_principal=Ungültige Identität: %s
must_use_public_key=Der von Dir bereitgestellte Key ist ein privater Key. Bitte lade Deinen privaten Key nirgendwo hoch. Verwende stattdessen Deinen öffentlichen Key.
-unable_verify_ssh_key=Der SSH-Key kann nicht verifiziert werden, überprüfe ihn auf Fehler.
auth_failed=Authentifizierung fehlgeschlagen: %v
-still_own_repo=Dein Konto besitzt ein oder mehrere Repositories. Diese müssen erst gelöscht oder übertragen werden.
-still_has_org=Dein Konto ist Mitglied einer oder mehrerer Organisationen, verlasse diese zuerst.
-still_own_packages=Dein Konto besitzt ein oder mehrere Pakete, lösche diese zuerst.
-org_still_own_repo=Diese Organisation besitzt noch ein oder mehrere Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
-org_still_own_packages=Diese Organisation besitzt noch ein oder mehrere Pakete, lösche diese zuerst.
target_branch_not_exist=Der Ziel-Branch existiert nicht.
target_ref_not_exist=Zielreferenz existiert nicht %s
@@ -675,11 +634,9 @@ settings=Benutzereinstellungen
form.name_reserved=Der Benutzername "%s" ist reserviert.
form.name_pattern_not_allowed=Das Muster "%s" ist nicht in einem Benutzernamen erlaubt.
-form.name_chars_not_allowed=Benutzername "%s" enthält ungültige Zeichen.
block.block=Sperren
block.block.user=Benutzer sperren
-block.block.org=Benutzer für Organisation sperren
block.block.failure=Fehler beim Sperren des Benutzers: %s
block.unblock=Entsperren
block.unblock.failure=Fehler beim Entsperren des Benutzers: %s
@@ -692,7 +649,6 @@ block.info_3=dir Benachrichtigungen durch @Erwähnung deines Benutzernamens send
block.info_4=dich als Mitarbeiter in deren Repositories einladen
block.info_5=Repositories favorisieren, forken oder beobachten
block.info_6=Issues oder Pull Requests öffnen und kommentieren
-block.info_7=auf deine Kommentare in Issues oder Pull Requests reagieren
block.user_to_block=Zu sperrender Benutzer
block.note=Anmerkung
block.note.title=Optionale Anmerkung:
@@ -723,7 +679,8 @@ webauthn=Zwei-Faktor-Authentifizierung (Hardware-Sicherheitsschlüssel)
public_profile=Öffentliches Profil
biography_placeholder=Erzähle uns ein wenig über Dich selbst! (Du kannst Markdown verwenden)
location_placeholder=Teile Deinen ungefähren Standort mit anderen
-profile_desc=Lege fest, wie dein Profil anderen Benutzern angezeigt wird. Deine primäre E-Mail-Adresse wird für Benachrichtigungen, Passwort-Wiederherstellung und webbasierte Git-Operationen verwendet.
+password_username_disabled=Du bist nicht berechtigt, den Benutzernamen zu ändern. Bitte kontaktiere Deinen Seitenadministrator für weitere Details.
+password_full_name_disabled=Du bist nicht berechtigt, den vollständigen Namen zu ändern. Bitte kontaktiere Deinen Seitenadministrator für weitere Details.
full_name=Vollständiger Name
website=Webseite
location=Standort
@@ -741,7 +698,6 @@ cancel=Abbrechen
language=Sprache
ui=Theme
hidden_comment_types=Ausgeblendeter Kommentartypen
-hidden_comment_types_description=Die hier markierten Kommentartypen werden nicht innerhalb der Issue-Seiten angezeigt. Beispielsweise entfernt das Markieren von "Label" alle "{user} hat {label} hinzugefügt/entfernt"-Kommentare.
hidden_comment_types.ref_tooltip=Kommentare, in denen dieses Issue von einem anderen Issue/Commit referenziert wurde
hidden_comment_types.issue_ref_tooltip=Kommentare, bei denen der Benutzer den Branch/Tag des Issues ändert
comment_type_group_reference=Verweis auf Mitglieder
@@ -789,18 +745,14 @@ manage_themes=Standard-Theme auswählen
manage_openid=OpenID-Adressen verwalten
email_desc=Deine primäre E-Mail-Adresse wird für Benachrichtigungen, Passwort-Wiederherstellung und, sofern sie nicht versteckt ist, web-basierte Git-Operationen verwendet.
theme_desc=Dies wird dein Standard-Theme auf der Seite sein.
-theme_colorblindness_help=Hilfe zum Theme für Farbenblinde
-theme_colorblindness_prompt=Gitea erhält aktuell einfache Unterstützung für Farbenblinde durch einige Themes, die nur wenige Farben definiert haben. Die Arbeit ist noch im Gange. Weitere Verbesserungen können durch die Definition von mehr Farben in den CSS-Theme-Dateien vorgenommen werden.
primary=Primär
activated=Aktiviert
requires_activation=Erfordert Aktivierung
primary_email=Als primäre E-Mail-Adresse verwenden
activate_email=Aktivierung senden
activations_pending=Aktivierung ausstehend
-can_not_add_email_activations_pending=Es gibt eine ausstehende Aktivierung, versuche es in ein paar Minuten erneut, wenn du eine neue E-Mail hinzufügen möchtest.
delete_email=Löschen
email_deletion=E-Mail-Adresse löschen
-email_deletion_desc=Die E-Mail-Adresse und die damit verbundenen Informationen werden von deinem Konto entfernt. Git-Commits von dieser E-Mail-Addresse bleiben unverändert. Fortfahren?
email_deletion_success=Die E-Mail-Adresse wurde entfernt.
theme_update_success=Deine Theme-Auswahl wurde gespeichert.
theme_update_error=Das ausgewählte Theme existiert nicht.
@@ -843,7 +795,6 @@ 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_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:
@@ -853,7 +804,6 @@ verify_gpg_key_success=GPG-Schlüssel "%s" wurde verifiziert.
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=Token
ssh_token_help=Du kannst eine Signatur wie folgt generieren:
@@ -874,7 +824,6 @@ gpg_key_deletion=GPG-Schlüssel entfernen
ssh_principal_deletion=SSH-Zertifik-Identität 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_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.
@@ -918,6 +867,9 @@ permission_not_set=Nicht festgelegt
permission_no_access=Kein Zugriff
permission_read=Lesen
permission_write=Lesen und Schreiben
+permission_anonymous_read=Anonymes Lesen
+permission_everyone_read=Alle lesen
+permission_everyone_write=Alle schreiben
access_token_desc=Ausgewählte Token-Berechtigungen beschränken die Authentifizierung auf die entsprechenden API -Routen. Lies die Dokumentation für mehr Informationen.
at_least_one_permission=Du musst mindestens eine Berechtigung auswählen, um ein Token zu erstellen
permissions_list=Berechtigungen:
@@ -933,7 +885,6 @@ create_oauth2_application_button=Anwendung erstellen
create_oauth2_application_success=Du hast erfolgreich eine neue OAuth2-Anwendung erstellt.
update_oauth2_application_success=Du hast die OAuth2-Anwendung erfolgreich aktualisiert.
oauth2_application_name=Name der Anwendung
-oauth2_confidential_client=Vertraulicher Client. Für Anwendungen aktivieren, die das Geheimnis sicher speichern, z. B. Webanwendungen. Wähle diese Option nicht für native Anwendungen für PCs und Mobilgeräte.
oauth2_skip_secondary_authorization=Autorisierung für öffentliche Clients nach einmaliger Gewährung des Zugriffs überspringen. Dies kann ein Sicherheitsrisiko darstellen.
oauth2_redirect_uris=URIs für die Weiterleitung. Bitte verwende eine neue Zeile für jede URI.
save_application=Speichern
@@ -948,10 +899,8 @@ oauth2_application_remove_description=Das Entfernen einer OAuth2-Anwendung hat z
oauth2_application_locked=Wenn es in der Konfiguration aktiviert ist, registriert Gitea einige OAuth2-Anwendungen beim Starten vor. Um unerwartetes Verhalten zu verhindern, können diese weder bearbeitet noch entfernt werden. Weitere Informationen findest Du in der OAuth2-Dokumentation.
authorized_oauth2_applications=Autorisierte OAuth2-Anwendungen
-authorized_oauth2_applications_description=Den folgenden Drittanbieter-Apps hast Du Zugriff auf Deinen persönlichen Gitea-Account gewährt. Bitte widerrufe die Autorisierung für Apps, die Du nicht mehr nutzt.
revoke_key=Widerrufen
revoke_oauth2_grant=Autorisierung widerrufen
-revoke_oauth2_grant_description=Wenn du die Autorisierung widerrufst, kann die Anwendung nicht mehr auf deine Daten zugreifen. Bist du dir sicher?
revoke_oauth2_grant_success=Zugriff erfolgreich widerrufen.
twofa_desc=Um dein Konto vor Passwortdiebstahl zu schützen, kannst du ein Smartphone oder ein anderes Gerät verwenden, um zeitbasierte Einmalpasswörter ("TOTP") zu erhalten.
@@ -961,7 +910,6 @@ twofa_not_enrolled=Für dein Konto ist die Zwei-Faktor-Authentifizierung momenta
twofa_disable=Zwei-Faktor-Authentifizierung deaktivieren
twofa_scratch_token_regenerate=Einweg-Wiederherstellungsschlüssel neu generieren
twofa_scratch_token_regenerated=Dein Einweg-Wiederherstellungsschlüssel ist jetzt %s. Speichere ihn an einem sicheren Ort, er wird nie wieder angezeigt.
-twofa_enroll=Zwei-Faktor-Authentifizierung aktivieren
twofa_disable_note=Du kannst die Zwei-Faktor-Authentifizierung auch wieder deaktivieren.
twofa_disable_desc=Wenn du die Zwei-Faktor-Authentifizierung deaktivierst, wird die Sicherheit deines Kontos verringert. Fortfahren?
regenerate_scratch_token_desc=Wenn du deinen Wiederherstellungsschlüssel verlegt oder bereits benutzt hast, kannst du ihn hier zurücksetzen.
@@ -977,13 +925,11 @@ webauthn_desc=Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel
webauthn_register_key=Sicherheitsschlüssel hinzufügen
webauthn_nickname=Nickname
webauthn_delete_key=Sicherheitsschlüssel entfernen
-webauthn_delete_key_desc=Wenn du einen Sicherheitsschlüssel entfernst, kannst du dich nicht mehr mit ihm anmelden. Fortfahren?
webauthn_key_loss_warning=Wenn du deine Sicherheitsschlüssel verlierst, verlierst du den Zugriff auf dein Konto.
webauthn_alternative_tip=Möglicherweise möchtest du eine zusätzliche Authentifizierungsmethode konfigurieren.
manage_account_links=Verknüpfte Accounts verwalten
manage_account_links_desc=Diese externen Accounts sind mit deinem Gitea-Account verknüpft.
-account_links_not_available=Es sind keine externen Accounts mit diesem Gitea-Account verknüpft.
link_account=Account verbinden
remove_account_link=Verknüpften Account entfernen
remove_account_link_desc=Wenn du den verknüpften Account entfernst, wirst du darüber nicht mehr auf deinen Gitea-Account zugreifen können. Fortfahren?
@@ -1020,6 +966,7 @@ new_repo_helper=Ein Repository enthält alle Projektdateien, einschließlich des
owner=Besitzer
owner_helper=Einige Organisationen könnten in der Dropdown-Liste nicht angezeigt werden, da die Anzahl an Repositories begrenzt ist.
repo_name=Repository-Name
+repo_name_helper=Ein guter Repository-Name besteht normalerweise aus kurzen, unvergesslichen und einzigartigen Schlagwörtern. Ein Repository namens ".profile" or ".profile-private" kann verwendet werden, um die README.md auf dem Benutzer- oder Organisationsprofil anzuzeigen.
repo_size=Repository-Größe
template=Template
template_select=Vorlage auswählen
@@ -1040,7 +987,6 @@ fork_branch=Branch, der zum Fork geklont werden soll
all_branches=Alle Branches
view_all_branches=Alle Branches anzeigen
view_all_tags=Alle Tags anzeigen
-fork_no_valid_owners=Dieses Repository kann nicht geforkt werden, da keine gültigen Besitzer vorhanden sind.
fork.blocked_user=Das Repository kann nicht geforkt werden, da du vom Repository-Eigentümer blockiert wurdest.
use_template=Dieses Template verwenden
open_with_editor=Mit %s öffnen
@@ -1084,12 +1030,10 @@ mirror_sync=synchronisiert
mirror_sync_on_commit=Synchronisieren, wenn Commits gepusht wurden
mirror_address=Klonen via URL
mirror_address_desc=Gib alle erforderlichen Anmeldedaten im Abschnitt "Authentifizierung" ein.
-mirror_address_url_invalid=Die angegebene URL ist ungültig. Achte darauf, alle URL-Komponenten korrekt zu maskieren.
mirror_address_protocol_invalid=Die angegebene URL ist ungültig. Nur URLs beginnend mit http(s):// oder git:// sind möglich.
mirror_lfs=Großdatei-Speicher (LFS)
mirror_lfs_desc=Mirroring von LFS-Dateien aktivieren.
mirror_lfs_endpoint=LFS-Endpunkt
-mirror_lfs_endpoint_desc=Sync wird versuchen, die Klon-URL zu verwenden, um den LFS-Server zu bestimmen . Du kannst auch einen eigenen Endpunkt angeben, wenn die LFS-Dateien woanders gespeichert werden.
mirror_last_synced=Zuletzt synchronisiert
mirror_password_placeholder=(unverändert)
mirror_password_blank_placeholder=(Nicht gesetzt)
@@ -1102,7 +1046,6 @@ stars=Favoriten
reactions_more=und %d weitere
unit_disabled=Der Administrator hat diesen Repository-Bereich deaktiviert.
language_other=Andere
-adopt_search=Geben einen Benutzernamen ein, um nach nicht angenommenen Repositories zu suchen... (leer lassen um alle zu finden)
adopt_preexisting_label=Dateien übernehmen
adopt_preexisting=Vorhandene Dateien übernehmen
adopt_preexisting_content=Repository aus %s erstellen
@@ -1116,6 +1059,7 @@ blame.ignore_revs=Revisionen in .git-blame-ignore-revs werden i
blame.ignore_revs.failed=Fehler beim Ignorieren der Revisionen in .git-blame-ignore-revs .
user_search_tooltip=Zeigt maximal 30 Benutzer
+tree_path_not_found=Pfad %[1]s existiert nicht in %[2]s
transfer.accept=Übertragung Akzeptieren
transfer.accept_desc=`Übertragung nach "%s"`
@@ -1126,6 +1070,7 @@ transfer.no_permission_to_reject=Du hast keine Berechtigung, diesen Transfer abz
desc.private=Privat
desc.public=Öffentlich
+desc.public_access=Öffentlicher Zugriff
desc.template=Template
desc.internal=Intern
desc.archived=Archiviert
@@ -1142,8 +1087,6 @@ template.issue_labels=Issue Label
template.one_item=Es muss mindestens ein Template ausgewählt werden
template.invalid=Es muss ein Template-Repository ausgewählt werden
-archive.title=Dieses Repository ist archiviert. Du kannst Dateien ansehen und es klonen, kannst aber nicht pushen oder Issues/Pull-Requests öffnen.
-archive.title_date=Dieses Repository wurde am %s archiviert. Du kannst Dateien ansehen und es klonen, aber nicht pushen oder Issues/Pull-Requests öffnen.
archive.issue.nocomment=Dieses Repo ist archiviert. Du kannst Issues nicht kommentieren.
archive.pull.nocomment=Dieses Repo ist archiviert. Du kannst Pull-Requests nicht kommentieren.
@@ -1160,7 +1103,6 @@ migrate_options_lfs=LFS-Dateien migrieren
migrate_options_lfs_endpoint.label=LFS-Endpunkt
migrate_options_lfs_endpoint.description=Migration wird versuchen, über den entfernten Git-Server den LFS-Server zu bestimmen . Du kannst auch einen eigenen Endpunkt angeben, wenn die LFS-Dateien woanders gespeichert werden.
migrate_options_lfs_endpoint.description.local=Ein lokaler Serverpfad wird ebenfalls unterstützt.
-migrate_options_lfs_endpoint.placeholder=Wenn leer gelassen, wird der Endpunkt von der Clone-URL abgeleitet
migrate_items=Migrationselemente
migrate_items_wiki=Wiki
migrate_items_milestones=Meilensteine
@@ -1172,10 +1114,8 @@ migrate_items_releases=Releases
migrate_repo=Repository migrieren
migrate.clone_address=Migrations- / Klon-URL
migrate.clone_address_desc=Die HTTP(S)- oder „git clone“-URL eines bereits existierenden Repositories
-migrate.github_token_desc=Du kannst hier ein oder mehrere Token durch Komma getrennt eintippen, um die Migration aufgrund der Github API Ratenlimitierung zu beschleunigen. WARNUNG: Der Missbrauch dieser Funktion kann gegen die Richtlinien des Diensteanbieters verstoßen und zur Kontosperrung führen.
migrate.clone_local_path=oder ein lokaler Serverpfad
migrate.permission_denied=Du hast keine Berechtigung zum Importieren lokaler Repositories.
-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.failed=Fehler bei der Migration: %v
@@ -1183,7 +1123,6 @@ migrate.migrate_items_options=Zugangs-Token wird benötigt, um zusätzliche Elem
migrated_from=Migriert von %[2]s
migrated_from_fake=Migriert von %[1]s
migrate.migrate=Migrieren von %s
-migrate.migrating=Migriere von %s ...
migrate.migrating_failed=Migrieren von %s fehlgeschlagen.
migrate.migrating_failed.error=Migration fehlgeschlagen: %s
migrate.migrating_failed_no_addr=Migration fehlgeschlagen.
@@ -1231,7 +1170,6 @@ clone_this_repo=Dieses Repository klonen
cite_this_repo=Dieses Repository zitieren
create_new_repo_command=Erstelle ein neues Repository von der Kommandozeile aus
push_exist_repo=Bestehendes Repository via Kommandozeile pushen
-empty_message=Dieses Repository hat keinen Inhalt.
broken_message=Die Git-Daten, die diesem Repository zugrunde liegen, können nicht gelesen werden. Kontaktiere den Administrator deiner Instanz oder lösche dieses Repository.
code=Code
@@ -1249,7 +1187,6 @@ projects=Projekte
packages=Pakete
actions=Actions
labels=Label
-org_labels_desc=Labels der Organisationsebene, die mit allen Repositories in dieser Organisation verwendet werden können
org_labels_desc_manage=verwalten
milestone=Meilenstein
@@ -1331,7 +1268,6 @@ editor.update=%s aktualisiert
editor.delete=%s gelöscht
editor.patch=Patch anwenden
editor.patching=Patche:
-editor.fail_to_apply_patch=Patch "%s" nicht anwendbar
editor.new_patch=Neuer Patch
editor.commit_message_desc=Eine ausführlichere (optionale) Beschreibung hinzufügen…
editor.signoff_desc=Am Ende der Commit Nachricht einen Signed-off-by Anhang vom Committer hinzufügen.
@@ -1347,19 +1283,13 @@ editor.filename_is_invalid=Ungültiger Dateiname: "%s".
editor.branch_does_not_exist=Branch "%s" existiert nicht in diesem Repository.
editor.branch_already_exists=Branch "%s" existiert bereits in diesem Repository.
editor.directory_is_a_file=Der Verzeichnisname "%s" wird bereits als Dateiname in diesem Repository verwendet.
-editor.file_is_a_symlink=`"%s" ist ein symbolischer Link. Symbolische Links können mit dem Web-Editor nicht bearbeitet werden`
editor.filename_is_a_directory=Der Dateiname "%s" wird bereits als Verzeichnisname in diesem Repository verwendet.
-editor.file_editing_no_longer_exists=Die bearbeitete Datei "%s" existiert nicht mehr in diesem Repository.
-editor.file_deleting_no_longer_exists=Die zu löschende Datei "%s" existiert nicht mehr in diesem Repository.
editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. Hier klicken , um die Änderungen anzusehen, oder Änderungen erneut comitten , um sie zu überschreiben.
editor.file_already_exists=Eine Datei mit dem Namen '%s' existiert bereits in diesem Repository.
-editor.commit_id_not_matching=Die Commit-ID stimmt nicht mit der ID überein, bei welcher du mit der Bearbeitung begonnen hast. Commite in einen Patch-Branch und merge daraufhin.
editor.push_out_of_date=Der Push scheint veraltet zu sein.
editor.commit_empty_file_header=Leere Datei committen
editor.commit_empty_file_text=Die Datei, die du commiten willst, ist leer. Fortfahren?
editor.no_changes_to_show=Keine Änderungen vorhanden.
-editor.fail_to_update_file=Fehler beim Aktualisieren/Erstellen der Datei "%s".
-editor.fail_to_update_file_summary=Fehlermeldung:
editor.push_rejected_no_message=Die Änderung wurde vom Server ohne Nachricht abgelehnt. Bitte überprüfe die Git Hooks.
editor.push_rejected=Die Änderung wurde vom Server abgelehnt. Bitte überprüfe die Git Hooks.
editor.push_rejected_summary=Vollständige Ablehnungsmeldung:
@@ -1374,6 +1304,7 @@ editor.require_signed_commit=Branch erfordert einen signierten Commit
editor.cherry_pick=Cherry-Picke %s von:
editor.revert=%s zurücksetzen auf:
+
commits.desc=Durchsuche die Quellcode-Änderungshistorie.
commits.commits=Commits
commits.no_commits=Keine gemeinsamen Commits. "%s" und "%s" haben vollständig unterschiedliche Historien.
@@ -1392,6 +1323,7 @@ commits.signed_by_untrusted_user_unmatched=Signiert von nicht vertrauenswürdige
commits.gpg_key_id=GPG-Schlüssel-ID
commits.ssh_key_fingerprint=SSH-Key-Fingerabdruck
commits.view_path=An diesem Punkt im Verlauf anzeigen
+commits.view_file_diff=Änderungen an dieser Datei in diesem Commit anzeigen
commit.operations=Operationen
commit.revert=Zurücksetzen
@@ -1452,6 +1384,8 @@ issues.filter_milestones=Meilenstein filtern
issues.filter_projects=Projekt filtern
issues.filter_labels=Label filtern
issues.filter_reviewers=Reviewer filtern
+issues.filter_no_results=Keine Ergebnisse
+issues.filter_no_results_placeholder=Versuche, deine Suchfilter anzupassen.
issues.new=Neues Issue
issues.new.title_empty=Der Titel kann nicht leer sein
issues.new.labels=Label
@@ -1471,7 +1405,6 @@ issues.new.clear_assignees=Zuständige entfernen
issues.new.no_assignees=Niemand zuständig
issues.new.no_reviewers=Keine Reviewer
issues.new.blocked_user=Das Issue kann nicht erstellt werden, da du vom Repository-Eigentümer blockiert wurdest.
-issues.edit.already_changed=Änderungen zum Issue konnten nicht gespeichert werden. Es scheint, dass der Inhalt bereits von einem anderen Benutzer geändert wurde. Bitte aktualisiere die Seite und bearbeite diese erneut, um zu verhindern, dass die Änderungen des anderen Benutzers überschrieben werden
issues.edit.blocked_user=Der Inhalt kann nicht bearbeitet werden, da du vom Repository-Eigentümer blockiert wurdest.
issues.choose.get_started=Los geht's
issues.choose.open_external_link=Öffnen
@@ -1527,11 +1460,14 @@ issues.filter_project=Projekt
issues.filter_project_all=Alle Projekte
issues.filter_project_none=Kein Projekt
issues.filter_assignee=Zuständig
+issues.filter_assignee_no_assignee=Niemandem zugewiesen
+issues.filter_assignee_any_assignee=Jemandem zugewiesen
issues.filter_poster=Autor
issues.filter_user_placeholder=Benutzer suchen
issues.filter_user_no_select=Alle Benutzer
issues.filter_type=Typ
issues.filter_type.all_issues=Alle Issues
+issues.filter_type.all_pull_requests=Alle Pull-Requests
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
@@ -1540,7 +1476,6 @@ issues.filter_type.reviewed_by_you=Bewertet von dir
issues.filter_sort=Sortieren
issues.filter_sort.latest=Neueste
issues.filter_sort.oldest=Älteste
-issues.filter_sort.recentupdate=Kürzlich aktualisiert
issues.filter_sort.leastupdate=Am Längsten nicht aktualisiert
issues.filter_sort.mostcomment=Am meisten kommentiert
issues.filter_sort.leastcomment=Am wenigsten kommentiert
@@ -1623,12 +1558,15 @@ issues.save=Speichern
issues.label_title=Labelname
issues.label_description=Labelbeschreibung
issues.label_color=Labelfarbe
+issues.label_color_invalid=Ungültige Farbe
issues.label_exclusive=Exklusiv
issues.label_archive=Label archivieren
issues.label_archived_filter=Archivierte Labels anzeigen
issues.label_archive_tooltip=Archivierte Labels werden bei der Suche nach Label standardmäßig von den Vorschlägen ausgeschlossen.
issues.label_exclusive_desc=Nenne das Label Bereich/Element um es gegenseitig ausschließend mit anderen Bereich/ Labels zu machen.
issues.label_exclusive_warning=Alle im Konflikt stehenden Labels werden beim Bearbeiten der Labels eines Issues oder eines Pull-Requests entfernt.
+issues.label_exclusive_order=Sortierreihenfolge
+issues.label_exclusive_order_tooltip=Exklusive Labels im gleichen Bereich werden nach dieser numerischen Reihenfolge sortiert.
issues.label_count=%d Label
issues.label_open_issues=%d offene Issues
issues.label_edit=Bearbeiten
@@ -1659,7 +1597,6 @@ issues.lock_no_reason=gesperrt und Diskussion auf Mitarbeiter beschränkt %s
issues.unlock_comment=hat diese Diskussion %s entsperrt
issues.lock_confirm=Sperren
issues.unlock_confirm=Entsperren
-issues.lock.notice_1=- Andere Nutzer können keine neuen Kommentare beisteuern.
issues.lock.notice_2=- Du und andere Mitarbeiter mit Zugriff auf dieses Repository können weiterhin für andere sichtbare Kommentare hinterlassen.
issues.lock.notice_3=- Du kannst die Diskussion jederzeit wieder entsperren.
issues.unlock.notice_1=- Jeder wird wieder in der Lage sein, zu diesem Issue zu kommentieren.
@@ -1680,14 +1617,18 @@ issues.timetracker_timer_manually_add=Zeit hinzufügen
issues.time_estimate_set=Geschätzte Zeit festlegen
issues.time_estimate_display=Schätzung: %s
+issues.change_time_estimate_at=Zeitschätzung geändert zu %[1]s %[2]s
issues.remove_time_estimate_at=Zeitschätzung %s entfernt
issues.time_estimate_invalid=Format der Zeitschätzung ist ungültig
issues.start_tracking_history=hat die Zeiterfassung %s gestartet
issues.tracker_auto_close=Der Timer wird automatisch gestoppt, wenn dieser Issue geschlossen wird
issues.tracking_already_started=`Du hast die Zeiterfassung bereits in diesem Issue gestartet!`
+issues.stop_tracking=Timer stoppen
+issues.stop_tracking_history=hat für %[1]s %[2]s gearbeitet
issues.cancel_tracking=Verwerfen
issues.cancel_tracking_history=`hat die Zeiterfassung %s abgebrochen`
issues.del_time=Diese Zeiterfassung löschen
+issues.add_time_history=hat %[1]s %[2]s gearbeitete Zeit hinzugefügt
issues.del_time_history=`hat %s gearbeitete Zeit gelöscht`
issues.add_time_manually=Zeit manuell hinzufügen
issues.add_time_hours=Stunden
@@ -1708,7 +1649,6 @@ issues.due_date_form=JJJJ-MM-TT
issues.due_date_form_add=Fälligkeitsdatum hinzufügen
issues.due_date_form_edit=Bearbeiten
issues.due_date_form_remove=Entfernen
-issues.due_date_not_writer=Du musst Schreibrechte für dieses Repository haben, um das Fälligkeitsdatum zu ändern.
issues.due_date_not_set=Kein Fälligkeitsdatum gesetzt.
issues.due_date_added=hat %[2]s das Fälligkeitsdatum %[1]s hinzugefügt
issues.due_date_modified=ändert das Abgabedatum von %[2]s auf %[1]s %[3]s s
@@ -1731,9 +1671,7 @@ issues.dependency.pr_closing_blockedby=Das Schließen dieses Pull-Requests wird
issues.dependency.issue_closing_blockedby=Das Schließen dieses Issues wird von den folgenden Issues blockiert
issues.dependency.issue_close_blocks=Dieses Issue blockiert die Schließung der folgenden Issues
issues.dependency.pr_close_blocks=Dieser Pull-Request blockiert die Schließung der folgenden Issues
-issues.dependency.issue_close_blocked=Du musst alle Issues, die dieses Issue blockieren, schließen, bevor du es schließen kannst.
issues.dependency.issue_batch_close_blocked=Das Schließen der ausgewählten Issues ist nicht möglich, da das Issue #%d noch offene Abhängigkeiten hat
-issues.dependency.pr_close_blocked=Du musst alle Issues, die diesen Pull-Request blockieren, schließen, bevor du ihn mergen kannst.
issues.dependency.blocks_short=Blockiert
issues.dependency.blocked_by_short=Abhängig von
issues.dependency.remove_header=Abhängigkeit löschen
@@ -1744,13 +1682,11 @@ issues.dependency.add_error_same_issue=Du kannst ein Issue nicht von sich selbst
issues.dependency.add_error_dep_issue_not_exist=Abhängiges Issue existiert nicht.
issues.dependency.add_error_dep_not_exist=Abhängigkeit existiert nicht.
issues.dependency.add_error_dep_exists=Abhängigkeit existiert bereits.
-issues.dependency.add_error_cannot_create_circular=Du kannst keine Abhängigkeit erstellen, bei welcher sich zwei Issues gegenseitig blockieren.
issues.dependency.add_error_dep_not_same_repo=Beide Issues müssen sich im selben Repository befinden.
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 ü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.
@@ -1758,7 +1694,6 @@ 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 %s %s angefragt
issues.review.remove_review_request=hat die Aufforderung zum Review an %s %s entfernt
-issues.review.remove_review_request_self=hat das Review verweigert %s
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
@@ -1780,7 +1715,6 @@ issues.review.requested=Prüfung ausstehend
issues.review.rejected=Änderungen angefordert
issues.review.stale=Aktualisiert seit der Genehmigung
issues.review.unofficial=Ungezählte Genehmigung
-issues.assignee.error=Aufgrund eines unerwarteten Fehlers konnten nicht alle Beauftragten hinzugefügt werden.
issues.reference_issue.body=Beschreibung
issues.content_history.deleted=gelöscht
issues.content_history.edited=bearbeitet
@@ -1797,7 +1731,6 @@ pulls.desc=Pull-Requests und Code-Reviews aktivieren.
pulls.new=Neuer Pull-Request
pulls.new.blocked_user=Der Pull Request kann nicht erstellt werden, da du vom Repository-Eigentümer blockiert wurdest.
pulls.new.must_collaborator=Du musst Mitarbeiter sein, um Pull-Requests zu erstellen.
-pulls.edit.already_changed=Änderungen zum Pull-Request konnten nicht gespeichert werden. Es scheint, dass der Inhalt bereits von einem anderen Benutzer geändert wurde. Bitte aktualisieren die Seite und bearbeite diesen erneut, um zu verhindern, dass die Änderungen des anderen Benutzers überschrieben werden
pulls.view=Pull-Request ansehen
pulls.compare_changes=Neuer Pull-Request
pulls.allow_edits_from_maintainers=Änderungen von Maintainern erlauben
@@ -1818,11 +1751,9 @@ pulls.show_all_commits=Alle Commits anzeigen
pulls.show_changes_since_your_last_review=Zeige Änderungen seit deinem letzten Review
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.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_have_tag=Der ausgewählte Branch und Tag sind gleich.
pulls.nothing_to_compare_and_allow_empty_pr=Diese Branches sind gleich. Der Pull-Request wird leer sein.
pulls.has_pull_request=`Es existiert bereits ein Pull-Request zwischen diesen beiden Branches: %[2]s#%[3]d `
pulls.create=Pull-Request erstellen
@@ -1870,16 +1801,12 @@ 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.wrong_commit_id=die Commit ID muss eine Commit ID auf dem Zielbranch sein
pulls.no_merge_desc=Dieser Pull-Request kann nicht gemerged werden, da keine Mergeoptionen aktiviert sind.
pulls.no_merge_helper=Aktiviere Mergeoptionen in den Repositoryeinstellungen oder merge den Pull-Request manuell.
pulls.no_merge_wip=Dieser Pull Request kann nicht gemergt werden, da er als Work In Progress gekennzeichnet ist.
-pulls.no_merge_not_ready=Dieser Pull-Request kann nicht gemergt werden, überprüfe den Reviewstatus und die Statusprüfungen.
pulls.no_merge_access=Du bist nicht berechtigt, diesen Pull-Request zu mergen.
pulls.merge_pull_request=Merge Commit erstellen
-pulls.rebase_merge_pull_request=Rebasen und dann fast-forwarden
-pulls.rebase_merge_commit_pull_request=Rebasen und dann mergen
pulls.squash_merge_pull_request=Squash Commit erstellen
pulls.fast_forward_only_merge_pull_request=Nur Fast-forward
pulls.merge_manually=Manuell mergen
@@ -1887,17 +1814,10 @@ pulls.merge_commit_id=Der Mergecommit ID
pulls.require_signed_wont_sign=Der Branch erfordert einen signierten Commit, aber dieser Merge wird nicht signiert
pulls.invalid_merge_option=Du kannst diese Mergeoption auf diesen Pull-Request nicht anwenden.
-pulls.merge_conflict=Merge fehlgeschlagen: Beim Mergen gab es einen Konflikt. Hinweis: Probiere eine andere Strategie
pulls.merge_conflict_summary=Fehlermeldung
-pulls.rebase_conflict=Merge fehlgeschlagen: Es gab einen Konflikt beim Rebasen des Commits: %[1]s. Hinweis: Versuche eine andere Strategie
pulls.rebase_conflict_summary=Fehlermeldung
-pulls.unrelated_histories=Merge fehlgeschlagen: Der Head des Merges und die Basis haben keinen gemeinsamen Verlauf. Hinweis: Versuche eine andere Strategie
-pulls.merge_out_of_date=Merge fehlgeschlagen: Während des Mergens wurde die Basis aktualisiert. Hinweis: Versuche es erneut.
-pulls.head_out_of_date=Mergen fehlgeschlagen: Der Head wurde aktualisiert während der Merge erstellt wurde. Tipp: Versuche es erneut.
-pulls.has_merged=Fehler: Der Pull-Request wurde gemerged, du kannst den Zielbranch nicht wieder mergen oder ändern.
pulls.push_rejected=Push fehlgeschlagen: Der Push wurde abgelehnt. Überprüfe die Git Hooks für dieses Repository.
pulls.push_rejected_summary=Vollständige Ablehnungsmeldung
-pulls.push_rejected_no_message=Push fehlgeschlagen: Der Push wurde abgelehnt, aber es gab keine Fehlermeldung. Überprüfe die Git Hooks für dieses Repository
pulls.open_unmerged_pull_exists=`Du kannst diesen Pull-Request nicht erneut öffnen, da noch ein anderer (#%d) mit identischen Eigenschaften offen ist.`
pulls.status_checking=Einige Prüfungen sind noch ausstehend
pulls.status_checks_success=Alle Prüfungen waren erfolgreich
@@ -1916,13 +1836,12 @@ pulls.outdated_with_base_branch=Dieser Branch enthält nicht die neusten Commits
pulls.close=Pull-Request schließen
pulls.closed_at=`hat diesen Pull-Request %[2]s geschlossen`
pulls.reopened_at=`hat diesen Pull-Request %[2]s wieder geöffnet`
+pulls.cmd_instruction_hint=Zeige Kommandozeilenanweisungen
pulls.cmd_instruction_checkout_title=Checkout
pulls.cmd_instruction_checkout_desc=Wechsle auf einen neuen Branch in deinem lokalen Repository und teste die Änderungen.
pulls.cmd_instruction_merge_title=Mergen
pulls.cmd_instruction_merge_desc=Die Änderungen mergen und auf Gitea aktualisieren.
-pulls.cmd_instruction_merge_warning=Warnung: Dieser Vorgang kann den Pull-Request nicht mergen, da "manueller Merge" nicht aktiviert wurde
pulls.clear_merge_message=Merge-Nachricht löschen
-pulls.clear_merge_message_hint=Das Löschen der Merge-Nachricht wird nur den Inhalt der Commit-Nachricht entfernen und generierte Git-Trailer wie "Co-Authored-By …" erhalten.
pulls.auto_merge_button_when_succeed=(Wenn die Checks erfolgreich sind)
pulls.auto_merge_when_succeed=Automergen, sobald alle Checks erfüllt sind
@@ -1944,6 +1863,7 @@ pulls.upstream_diverging_prompt_behind_1=Dieser Branch ist %[1]d Commit hinter %
pulls.upstream_diverging_prompt_behind_n=Dieser Branch ist %[1]d Commits hinter %[2]s
pulls.upstream_diverging_prompt_base_newer=Der Basis-Branch %s hat neue Änderungen
pulls.upstream_diverging_merge=Fork synchronisieren
+pulls.upstream_diverging_merge_confirm=Möchtest du „%[1]s“ in „%[2]s“ mergen?
pull.deleted_branch=(gelöscht):%s
pull.agit_documentation=Dokumentation zu AGit durchschauen
@@ -1982,12 +1902,10 @@ milestones.filter_sort.most_issues=Meiste Issues
milestones.filter_sort.least_issues=Wenigste Issues
signing.will_sign=Dieser Commit wird mit dem Key "%s" signiert werden.
-signing.wont_sign.error=Es gab einen Fehler bei der Prüfung, ob der Commit signiert werden kann.
signing.wont_sign.nokey=Es ist kein Schlüssel zum Signieren dieses Commits verfügbar.
signing.wont_sign.never=Commits werden nie signiert.
signing.wont_sign.always=Commits werden immer signiert.
signing.wont_sign.pubkey=Der Commit wird nicht signiert, da du keinen öffentlichen Schlüssel mit deinem Account verknüpft hast.
-signing.wont_sign.twofa=Du musst Zwei-Faktor-Authentifizierung aktivieren, damit Commits signiert werden.
signing.wont_sign.parentsigned=Der Commit wird nicht signiert werden, da der vorherige Commit nicht signiert ist.
signing.wont_sign.basesigned=Der Merge Commit wird nicht signiert werden, da der Basis-Commit nicht signiert ist.
signing.wont_sign.headsigned=Der Merge Commit wird nicht signiert werden, da der Head-Commit nicht signiert ist.
@@ -2073,7 +1991,6 @@ activity.title.releases_1=%d Release
activity.title.releases_n=%d Releases
activity.title.releases_published_by=%s von %s veröffentlicht
activity.published_release_label=Veröffentlicht
-activity.no_git_activity=In diesem Zeitraum sind keine Commit-Aktivität vorhanden.
activity.git_stats_exclude_merges=Merges ausgenommen,
activity.git_stats_author_1=%d Autor
activity.git_stats_author_n=%d Autoren
@@ -2101,8 +2018,12 @@ contributors.contribution_type.additions=Ergänzungen
contributors.contribution_type.deletions=Löschungen
settings=Einstellungen
-settings.desc=In den Einstellungen kannst du die Einstellungen des Repositories anpassen
settings.options=Repository
+settings.public_access=Öffentlicher Zugriff
+settings.public_access_desc=Konfiguriere die Zugriffsrechte öffentlicher Besucher, um die Standardwerte dieses Repositorys zu überschreiben.
+settings.public_access.docs.not_set=Nicht gesetzt: keine zusätzliche öffentliche Zugriffsberechtigung. Die Berechtigung der Besucher folgt den Sichtbarkeits- und Mitgliedsberechtigungen des Repositorys.
+settings.public_access.docs.anonymous_read=Anonymes Lesen: Nicht angemeldete Benutzer können mit Leseberechtigung auf die Einheit zugreifen.
+settings.public_access.docs.everyone_write=Alle Schreiben: Alle angemeldeten Benutzer haben Schreibrechte auf die Einheit. Nur die Wiki-Einheit unterstützt diese Berechtigung.
settings.collaboration=Mitarbeiter
settings.collaboration.admin=Administrator
settings.collaboration.write=Schreibrechte
@@ -2118,7 +2039,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Richte Dein Proj
settings.mirror_settings.docs.disabled_push_mirror.instructions=Richte Dein Repository so ein, dass es automatisch Commits, Tags und Branches aus einem anderen Repository pullen kann.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Im Moment ist dies nur im Menü "Neue Migration" möglich. Für weitere Informationen konsultiere bitte:
settings.mirror_settings.docs.disabled_push_mirror.info=Push-Mirrors wurden von Ihrem Administrator deaktiviert.
-settings.mirror_settings.docs.no_new_mirrors=Dein Repository spiegelt Änderungen von oder zu einem anderen Repository. Bitte beachte, dass du gerade keine neuen Mirror anlegen kannst.
settings.mirror_settings.docs.can_still_use=Obwohl du existierende Mirrors gerade nicht bearbeiten oder neu anlegen kannst, sind bestehende Mirrors weiterhin nutzbar.
settings.mirror_settings.docs.pull_mirror_instructions=Um einen Pull-Mirror einzurichten, konsultiere bitte:
settings.mirror_settings.docs.more_information_if_disabled=Hier kannst du mehr über Push- und Pull-Mirrors erfahren:
@@ -2193,7 +2113,6 @@ settings.admin_indexer_commit_sha=Zuletzt indexierter SHA
settings.admin_indexer_unindexed=Unindiziert
settings.reindex_button=Zur Warteschlange für erneutes Indexieren hinzufügen
settings.reindex_requested=Erneutes Indexieren angefordert
-settings.admin_enable_close_issues_via_commit_in_any_branch=Einen Issue mit einem Commit auf einem nicht-Standard-Branch schließen
settings.danger_zone=Gefahrenzone
settings.new_owner_has_same_repo=Der neue Eigentümer hat bereits ein Repository mit dem gleichen Namen. Bitte wähle einen anderen Namen.
settings.convert=In ein normales Repository umwandeln
@@ -2215,7 +2134,6 @@ settings.transfer_abort_invalid=Du kannst nur eingeleitete Repository-Übertragu
settings.transfer_abort_success=Die Repository-Übertragung zu %s wurde abgebrochen.
settings.transfer_desc=Übertrage dieses Repository auf einen anderen Benutzer oder eine Organisation, in der du Admin-Rechte hast.
settings.transfer_form_title=Gib den Repository-Namen zur Bestätigung ein:
-settings.transfer_in_progress=Es gibt derzeit eine laufende Übertragung. Bitte brich diese ab, wenn du dieses Repository an einen anderen Benutzer übertragen möchtest.
settings.transfer_notices_1=– Du wirst keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist.
settings.transfer_notices_2=– Du wirst weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
settings.transfer_notices_3=- Wenn das Repository privat ist und an einen einzelnen Benutzer übertragen wird, wird sichergestellt, dass der Benutzer mindestens Leserechte hat (und die Berechtigungen werden gegebenenfalls ändert).
@@ -2230,13 +2148,9 @@ settings.trust_model.default=Standardvertrauensmodell
settings.trust_model.default.desc=Verwende das Standardvertrauensmodell für diese Installation.
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, unabhängig ob die Signatur mit dem Committer übereinstimmt oder nicht.
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 Gitea dazu, Gitea als Committer zu haben)
-settings.trust_model.committer.desc=Gültige Signaturen von Mitwirkenden werden als "vertrauenswürdig" gekennzeichnet, wenn sie mit ihrem Committer übereinstimmen. Ansonsten werden sie als "nicht übereinstimmend" markiert. Das führt dazu, dass Gitea 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 Gitea Standard-Key muss auf einen User in der Datenbank zeigen.
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 als "nicht übereinstimmend". Dies zwingt Gitea als Committer bei signierten Commits mit dem tatsächlichen Committer als Co-Authored-By: und Co-Committed-By: Trailer im Commit. Der Standard-Gitea-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.
@@ -2245,7 +2159,6 @@ settings.wiki_deletion_success=Repository-Wiki-Daten wurden gelöscht.
settings.delete=Dieses Repository löschen
settings.delete_desc=Wenn dieses Repository gelöscht wurde, gibt es keinen Weg zurück. Bitte sei vorsichtig.
settings.delete_notices_1=– Diese Operation KANN NICHT rückgängig gemacht werden.
-settings.delete_notices_2=– Die Operation wird das %s -Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen.
settings.delete_notices_fork_1=- Forks dieses Repositories werden nach dem Löschen unabhängig.
settings.deletion_success=Das Repository wurde gelöscht.
settings.update_settings_success=Repository-Einstellungen wurden aktualisiert.
@@ -2267,8 +2180,6 @@ settings.team_not_in_organization=Das Team ist nicht in der gleichen Organisatio
settings.teams=Teams
settings.add_team=Team hinzufügen
settings.add_team_duplicate=Das Team ist dem Repository schon zugeordnet
-settings.add_team_success=Das Team hat nun Zugriff auf das Repository.
-settings.change_team_permission_tip=Die Team-Berechtigung ist auf der Team-Einstellungsseite festgelegt und kann nicht für ein Repository geändert werden
settings.delete_team_tip=Dieses Team hat Zugriff auf alle Repositories und kann nicht entfernt werden
settings.remove_team_success=Der Zugriff des Teams auf das Repository wurde zurückgezogen.
settings.add_webhook=Webhook hinzufügen
@@ -2277,8 +2188,6 @@ settings.hooks_desc=Webhooks senden bei bestimmten Gitea-Events automatisch „H
settings.webhook_deletion=Webhook löschen
settings.webhook_deletion_desc=Das Entfernen eines Webhooks löscht seine Einstellungen und Zustellungsverlauf. Fortfahren?
settings.webhook_deletion_success=Webhook wurde entfernt.
-settings.webhook.test_delivery=Senden testen
-settings.webhook.test_delivery_desc=Teste diesen Webhook mit einem Fake-Event.
settings.webhook.test_delivery_desc_disabled=Um diesen Webhook mit einem Fake-Event zu testen, aktiviere ihn.
settings.webhook.request=Anfrage
settings.webhook.response=Antwort
@@ -2316,6 +2225,8 @@ settings.event_fork=Fork
settings.event_fork_desc=Repository geforkt.
settings.event_wiki=Wiki
settings.event_wiki_desc=Wiki-Seite erstellt, umbenannt, bearbeitet oder gelöscht.
+settings.event_statuses=Status
+settings.event_statuses_desc=Commit-Status von der API aktualisiert.
settings.event_release=Release
settings.event_release_desc=Release in einem Repository veröffentlicht, aktualisiert oder gelöscht.
settings.event_push=Push
@@ -2325,7 +2236,6 @@ settings.event_repository=Repository
settings.event_repository_desc=Repository erstellt oder gelöscht.
settings.event_header_issue=Issue Ereignisse
settings.event_issues=Issues
-settings.event_issues_desc=Issue geöffnet, geschlossen, wieder geöffnet oder bearbeitet.
settings.event_issue_assign=Issue zugewiesen
settings.event_issue_assign_desc=Issue zugewiesen oder Zuweisung entfernt.
settings.event_issue_label=Issue mit Label versehen
@@ -2336,7 +2246,6 @@ settings.event_issue_comment=Issue-Kommentar
settings.event_issue_comment_desc=Issue-Kommentar angelegt, geändert oder gelöscht.
settings.event_header_pull_request=Pull-Request-Ereignisse
settings.event_pull_request=Pull-Request
-settings.event_pull_request_desc=Pull-Request geöffnet, geschlossen, wieder geöffnet oder bearbeitet.
settings.event_pull_request_assign=Pull-Request zugewiesen
settings.event_pull_request_assign_desc=Pull-Request zugewiesen oder Zuweisung entfernt.
settings.event_pull_request_label=Pull-Request mit Label versehen
@@ -2353,6 +2262,9 @@ settings.event_pull_request_review_request=Überprüfung des Pull-Requests angef
settings.event_pull_request_review_request_desc=Überprüfung des Pull-Requests angefragt oder die Anfrage entfernt.
settings.event_pull_request_approvals=Zustimmungen zum Pull-Request
settings.event_pull_request_merge=Pull-Request-Merge
+settings.event_header_workflow=Workflow-Ereignisse
+settings.event_workflow_job=Workflow-Jobs
+settings.event_workflow_job_desc=Gitea Actions Workflow Job in Warteschlange, wartend, in Bearbeitung oder abgeschlossen.
settings.event_package=Paket
settings.event_package_desc=Paket wurde in einem Repository erstellt oder gelöscht.
settings.branch_filter=Branch-Filter
@@ -2476,7 +2388,6 @@ settings.block_on_official_review_requests_desc=Mergen ist nicht möglich wenn o
settings.block_outdated_branch=Merge blockieren, wenn der Pull-Request veraltet ist
settings.block_outdated_branch_desc=Mergen ist nicht möglich, wenn der Head-Branch hinter dem Basis-Branch ist.
settings.block_admin_merge_override=Administratoren müssen die Schutzregeln für Branches befolgen
-settings.block_admin_merge_override_desc=Administratoren müssen die Schutzregeln für Branches befolgen und können sie nicht umgehen.
settings.default_branch_desc=Wähle einen Standardbranch für Pull-Requests und Code-Commits:
settings.merge_style_desc=Merge-Styles
settings.default_merge_style_desc=Standard-Mergeverhalten für Pull-Requests
@@ -2503,10 +2414,7 @@ settings.matrix.homeserver_url=Homeserver-URL
settings.matrix.room_id=Raum-ID
settings.matrix.message_type=Nachrichtentyp
settings.visibility.private.button=Auf privat setzen
-settings.visibility.private.text=Das Ändern der Sichtbarkeit auf privat wird das Repository nicht nur für erlaubte Mitglieder sichtbar machen, sondern kann auch die Beziehung zwischen ihm und Forks, Beobachtern und Sternen entfernen.
settings.visibility.private.bullet_title=Das Ändern der Sichtbarkeit auf privat wird:
-settings.visibility.private.bullet_one=Das Repository nur für zugelassene Mitglieder sichtbar machen.
-settings.visibility.private.bullet_two=Kann die Beziehung zwischen ihm und Forks , Beobachtern und Sternen entfernen.
settings.visibility.public.button=Auf öffentlich setzen
settings.visibility.public.text=Das Ändern der Sichtbarkeit auf öffentlich macht das Repository für jeden sichtbar.
settings.visibility.public.bullet_title=Das Ändern der Sichtbarkeit auf öffentlich wird:
@@ -2525,7 +2433,6 @@ settings.archive.tagsettings_unavailable=Tag Einstellungen sind nicht verfügbar
settings.archive.mirrors_unavailable=Mirrors sind nicht verfügbar, wenn das Repository archiviert ist.
settings.unarchive.button=Archivieren rückgängig machen
settings.unarchive.header=Archivieren dieses Repositories rückgängig machen
-settings.unarchive.text=Durch das Aufheben der Archivierung kann das Repo wieder Commits und Pushes sowie neue Issues und Pull-Requests empfangen.
settings.unarchive.success=Die Archivierung des Repos wurde erfolgreich wieder rückgängig gemacht.
settings.unarchive.error=Beim Versuch, die Archivierung des Repos aufzuheben, ist ein Fehler aufgetreten. Weitere Details finden sich im Log.
settings.update_avatar_success=Der Repository-Avatar wurde aktualisiert.
@@ -2543,11 +2450,9 @@ settings.lfs_invalid_locking_path=Ungültiger Pfad: %s
settings.lfs_invalid_lock_directory=Verzeichnis kann nicht gesperrt werden: %s
settings.lfs_lock_already_exists=Sperre existiert bereits: %s
settings.lfs_lock=Sperren
-settings.lfs_lock_path=Zu sperrender Dateipfad...
settings.lfs_locks_no_locks=Keine Sperren
settings.lfs_lock_file_no_exist=Gesperrte Datei existiert nicht im Standard-Branch
settings.lfs_force_unlock=Freigabe erzwingen
-settings.lfs_pointers.found=%d Blob-Zeiger gefunden - %d assoziiert, %d nicht assoziiert (%d fehlend im Speicher)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Im Repo
@@ -2615,6 +2520,9 @@ diff.image.overlay=Überlagert
diff.has_escaped=Diese Zeile enthält versteckte Unicode-Zeichen
diff.show_file_tree=Dateibaum anzeigen
diff.hide_file_tree=Dateibaum ausblenden
+diff.submodule_added=Submodul %[1]s hinzugefügt bei %[2]s
+diff.submodule_deleted=Submodul %[1]s gelöscht von %[2]s
+diff.submodule_updated=Submodul %[1]s aktualisiert: %[2]s
releases.desc=Behalte den Überblick über Versionen und Downloads.
release.releases=Releases
@@ -2685,6 +2593,7 @@ branch.restore_success=Branch "%s" wurde wiederhergestellt.
branch.restore_failed=Wiederherstellung vom Branch "%s" gescheitert.
branch.protected_deletion_failed=Branch "%s" ist geschützt und kann nicht gelöscht werden.
branch.default_deletion_failed=Branch "%s" kann nicht gelöscht werden, da dieser Branch der Standard-Branch ist.
+branch.default_branch_not_exist=Standardzweig „%s“ existiert nicht.
branch.restore=Branch "%s" wiederherstellen
branch.download=Branch "%s" herunterladen
branch.rename=Branch "%s" umbenennen
@@ -2699,6 +2608,8 @@ branch.create_branch_operation=Branch erstellen
branch.new_branch=Neue Branch erstellen
branch.new_branch_from=Neuen Branch von "%s" erstellen
branch.renamed=Branch %s wurde in %s umbenannt.
+branch.rename_default_or_protected_branch_error=Nur Administratoren können Standard- oder geschützte Branches umbenennen.
+branch.rename_protected_branch_failed=Dieser Branch ist durch globale Schutzregeln geschützt.
tag.create_tag=Tag %s erstellen
tag.create_tag_operation=Tag erstellen
@@ -2721,7 +2632,6 @@ error.csv.invalid_field_count=Diese Datei kann nicht gerendert werden, da sie ei
error.broken_git_hook=Git-Hooks dieses Repositories scheinen defekt zu sein. Bitte folge der Dokumentation , um dies zu beheben, pushe dann ein paar Commits und den Status zu aktualisieren.
[graphs]
-component_loading=%s werden geladen ...
component_loading_failed=%s konnten nicht geladen werden
component_loading_info=Dies kann ein wenig dauern …
component_failed_to_load=Ein unerwarteter Fehler ist aufgetreten.
@@ -2759,7 +2669,6 @@ form.create_org_not_allowed=Du bist nicht berechtigt, eine Organisation zu erste
settings=Einstellungen
settings.options=Organisation
settings.full_name=Vollständiger Name
-settings.email=Kontakt-E-Mail-Adresse
settings.website=Webseite
settings.location=Standort
settings.permission=Berechtigungen
@@ -2773,15 +2682,13 @@ settings.visibility.private_shortname=Privat
settings.update_settings=Einstellungen speichern
settings.update_setting_success=Organisationseinstellungen wurden aktualisiert.
-settings.change_orgname_prompt=Hinweis: Das Ändern des Organisationsnamens wird auch die URL deiner Organisation ändern und den alten Namen freigeben.
-settings.change_orgname_redirect_prompt=Der alte Name wird weiterleiten, bis er wieder beansprucht wird.
+
+
settings.update_avatar_success=Der Organisationsavatar wurde aktualisiert.
settings.delete=Organisation löschen
settings.delete_account=Diese Organisation löschen
settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies KANN NICHT rückgängig gemacht werden!
settings.confirm_delete_account=Löschen bestätigen
-settings.delete_org_title=Organisation löschen
-settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht. Fortfahren?
settings.hooks_desc=Webhooks hinzufügen, die für alle Repositories dieser Organisation ausgelöst werden.
settings.labels_desc=Labels hinzufügen, die für alle Repositories dieser Organisation genutzt werden können.
@@ -2837,7 +2744,6 @@ teams.remove_all_repos_title=Alle Team-Repositories entfernen
teams.remove_all_repos_desc=Dies entfernt alle Repositories von dem Team.
teams.add_all_repos_title=Alle Repositories hinzufügen
teams.add_all_repos_desc=Dadurch werden alle Repositories der Organisation dem Team hinzugefügt.
-teams.add_nonexistent_repo=Das Repository, das du hinzufügen möchtest, existiert nicht. Bitte erstelle es zuerst.
teams.add_duplicate_users=Dieser Benutzer ist bereits ein Teammitglied.
teams.repos.none=Dieses Team hat Zugang zu keinem Repository.
teams.members.none=Keine Mitglieder in diesem Team.
@@ -2853,7 +2759,11 @@ teams.invite.title=Du wurdest eingeladen, dem Team %s in der Or
teams.invite.by=Von %s eingeladen
teams.invite.description=Bitte klicke auf die folgende Schaltfläche, um dem Team beizutreten.
+view_as_role=Ansehen als: %s
+view_as_public_hint=Du siehst die README als ein öffentlicher Benutzer.
+view_as_member_hint=Du siehst die README als ein Mitglied dieser Organisation.
+worktime=Arbeitszeit
worktime.date_range_start=Startdatum
worktime.date_range_end=Enddatum
worktime.query=Abfrage
@@ -2874,7 +2784,6 @@ repositories=Repositories
hooks=Webhooks
integrations=Integrationen
authentication=Authentifizierungsquellen
-emails=Benutzer E-Mails
config=Konfiguration
config_summary=Übersicht
config_settings=Einstellungen
@@ -2906,11 +2815,8 @@ dashboard.cron.cancelled=Cron: %[1]s abgebrochen: %[3]s
dashboard.cron.error=Fehler in Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s ist beendet
dashboard.delete_inactive_accounts=Alle nicht aktivierten Konten löschen
-dashboard.delete_inactive_accounts.started=Löschen aller nicht aktivierten Account-Aufgabe gestartet.
dashboard.delete_repo_archives=Lösche alle Repository-Archive (ZIP, TAR.GZ, …)
-dashboard.delete_repo_archives.started=Löschen aller Repository-Archive gestartet.
dashboard.delete_missing_repos=Alle Repository-Datensätze mit verloren gegangenen Git-Dateien löschen
-dashboard.delete_missing_repos.started=Alle Repositories löschen, die den Git-File-Task nicht gestartet haben.
dashboard.delete_generated_repository_avatars=Generierte Repository-Avatare löschen
dashboard.sync_repo_branches=Fehlende Branches aus den Git-Daten in die Datenbank synchronisieren
dashboard.sync_repo_tags=Tags von Git-Daten in die Datenbank synchronisieren
@@ -2918,17 +2824,9 @@ dashboard.update_mirrors=Mirrors aktualisieren
dashboard.repo_health_check=Healthchecks für alle Repositories 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.git_gc_repos=Garbage-Collection für alle Repositories ausführen
-dashboard.resync_all_sshkeys=Die Datei '.ssh/authorized_keys' mit Gitea SSH-Schlüsseln aktualisieren.
-dashboard.resync_all_sshprincipals=Aktualisiere die Datei '.ssh/authorized_principals' mit Gitea SSH Identitäten.
-dashboard.resync_all_hooks=Die „pre-receive“-, „update“- und „post-receive“-Hooks für alle Repositories erneut synchronisieren.
dashboard.reinit_missing_repos=Alle Git-Repositories neu einlesen, für die Einträge existieren
dashboard.sync_external_users=Externe Benutzerdaten synchronisieren
-dashboard.cleanup_hook_task_table=Hook-Task-Tabelle bereinigen
-dashboard.cleanup_packages=Veraltete Pakete löschen
-dashboard.cleanup_actions=Abgelaufene Ressourcen von Actions bereinigen
dashboard.server_uptime=Server-Uptime
dashboard.current_goroutine=Aktuelle Goroutinen
dashboard.current_memory_usage=Aktuelle Speichernutzung
@@ -2959,10 +2857,8 @@ dashboard.total_gc_pause=Gesamte GC-Pause
dashboard.last_gc_pause=Letzte GC-Pause
dashboard.gc_times=Anzahl GC
dashboard.delete_old_actions=Alle alten Aktionen aus der Datenbank löschen
-dashboard.delete_old_actions.started=Löschen aller alten Aktionen in 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.stop_zombie_tasks=Zombie-Aufgaben stoppen
dashboard.stop_endless_tasks=Endlose Aktionen stoppen
dashboard.cancel_abandoned_jobs=Aufgegebene Jobs abbrechen
@@ -2986,7 +2882,6 @@ users.2fa=2FA
users.repos=Repos
users.created=Registriert am
users.last_login=Letzte Anmeldung
-users.never_login=Hat sich noch nie eingeloggt
users.send_register_notify=Benutzer-Registrierungsbenachrichtigung senden
users.new_success=Der Account "%s" wurde erstellt.
users.edit=Bearbeiten
@@ -3013,7 +2908,6 @@ users.still_own_repo=Dieser Benutzer besitzt noch mindestens ein Repository. Bit
users.still_has_org=Dieser Nutzer ist Mitglied einer Organisation. Du musst ihn zuerst aus allen Organisationen entfernen.
users.purge=Benutzer löschen
users.purge_help=Erzwinge das Löschen des Benutzers inklusive aller seiner Repositories, Organisationen, Pakete und Kommentare.
-users.still_own_packages=Dieser Benutzer besitzt noch ein oder mehrere Pakete, lösche diese Pakete zuerst.
users.deletion_success=Der Account wurde gelöscht.
users.reset_2fa=2FA zurücksetzen
users.list_status_filter.menu_text=Filter
@@ -3033,11 +2927,7 @@ users.details=Benutzerdetails
emails.email_manage_panel=Benutzer-E-Mail-Verwaltung
emails.primary=Primär
emails.activated=Aktiviert
-emails.filter_sort.email=E-Mail
-emails.filter_sort.email_reverse=E-Mail (umgekehrt)
emails.filter_sort.name=Benutzername
-emails.filter_sort.name_reverse=Benutzername (umgekehrt)
-emails.updated=E-Mail aktualisiert
emails.not_updated=Fehler beim Aktualisieren der angeforderten E-Mail-Adresse: %v
emails.duplicate_active=Diese E-Mail-Adresse wird bereits von einem Nutzer verwendet.
emails.change_email_header=E-Mail-Eigenschaften aktualisieren
@@ -3045,7 +2935,6 @@ emails.change_email_text=Bist du dir sicher, dass du diese E-Mail-Adresse aktual
emails.delete=E-Mail löschen
emails.delete_desc=Willst du diese E-Mail-Adresse wirklich löschen?
emails.deletion_success=Die E-Mail-Adresse wurde gelöscht.
-emails.delete_primary_email_error=Du kannst die primäre E-Mail-Adresse nicht löschen.
orgs.org_manage_panel=Organisationsverwaltung
orgs.name=Name
@@ -3159,27 +3048,19 @@ auths.oauth2_required_claim_name_helper=Setze diesen Namen, damit Nutzer aus die
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_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)
auths.oauth2_map_group_to_team_removal=Benutzer aus synchronisierten Teams entfernen, wenn der Benutzer nicht zur entsprechenden Gruppe gehört.
auths.enable_auto_register=Automatische Registrierung aktivieren
auths.sspi_auto_create_users=Benutzer automatisch anlegen
-auths.sspi_auto_create_users_helper=Erlaube der SSPI Authentifikationsmethode, automatisch neue Konten für unbekannte Benutzer anzulegen
auths.sspi_auto_activate_users=Benutzer automatisch aktivieren
auths.sspi_auto_activate_users_helper=Erlaube der SSPI Authentifikationsmethode, automatisch neue Benutzerkonten zu aktivieren
auths.sspi_strip_domain_names=Domain vom Nutzernamen entfernen
-auths.sspi_strip_domain_names_helper=Falls aktiviert werden Domainnamen bei Loginnamen entfernt (z.B. "DOMAIN\nutzer" und "nutzer@example.ort" werden beide nur "nutzer").
auths.sspi_separator_replacement=Trennzeichen als Ersatz für \, / und @
-auths.sspi_separator_replacement_helper=Das zu verwendende Trennzeichen um Logon-Namen (zB. \ in "DOMAIN\user") und die Hauptnamen von Benutzern (z. B. das @ in "user@example.org") zu separieren.
auths.sspi_default_language=Standardsprache für Benutzer
-auths.sspi_default_language_helper=Standardsprache für Benutzer, die automatisch mit der SSPI Authentifizierungsmethode erstellt wurden. Leer lassen, wenn du es bevorzugst, dass eine Sprache automatisch erkannt wird.
auths.tips=Tipps
auths.tips.oauth2.general=OAuth2-Authentifizierung
auths.tips.oauth2.general.tip=Beim Registrieren einer OAuth2-Anwendung sollte die Callback-URL folgendermaßen lauten:
auths.tip.oauth2_provider=OAuth2-Anbieter
auths.tip.bitbucket=Registriere einen neuen OAuth-Consumer unter %s und füge die Berechtigung 'Account' - 'Read' hinzu
-auths.tip.nextcloud=Registriere über das "Settings -> Security -> OAuth 2.0 client"-Menü einen neuen "OAuth consumer" auf der Nextcloud-Instanz
auths.tip.dropbox=Erstelle eine neue App auf %s
auths.tip.facebook=Erstelle eine neue Anwendung auf %s und füge das Produkt „Facebook Login“ hinzu
auths.tip.github=Erstelle unter %s eine neue OAuth-Anwendung
@@ -3289,7 +3170,6 @@ config.mailer_sendmail_path=Sendmail-Pfad
config.mailer_sendmail_args=Zusätzliche Argumente für Sendmail
config.mailer_sendmail_timeout=Sendmail Timeout
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=E-Mail (z.B. test@example.com)
config.send_test_mail=Test-E-Mail senden
config.send_test_mail_submit=Senden
config.test_mail_failed=Das Senden der Test-E-Mail an '%s' ist fehlgeschlagen: %v
@@ -3354,6 +3234,8 @@ monitor.previous=Letzte Ausführung
monitor.execute_times=Ausführungen
monitor.process=Laufende Prozesse
monitor.stacktrace=Stacktraces
+monitor.trace=Ablaufverfolgung
+monitor.performance_logs=Leistungsprotokolle
monitor.processes_count=%d Prozesse
monitor.download_diagnosis_report=Diagnosebericht herunterladen
monitor.desc=Beschreibung
@@ -3361,7 +3243,6 @@ monitor.start=Startzeit
monitor.execute_time=Ausführungszeit
monitor.last_execution_result=Ergebnis
monitor.process.cancel=Prozess abbrechen
-monitor.process.cancel_desc=Abbrechen eines Prozesses kann Datenverlust verursachen
monitor.process.children=Subprozesse
monitor.queues=Warteschlangen
@@ -3376,7 +3257,6 @@ monitor.queue.numberinqueue=Nummer in der Warteschlange
monitor.queue.review_add=Worker hinzufügen / prüfen
monitor.queue.settings.title=Pool-Einstellungen
monitor.queue.settings.desc=Pools wachsen dynamisch basierend auf der Blockierung der Arbeitswarteschlange.
-monitor.queue.settings.maxnumberworkers=Maximale Anzahl an Workern
monitor.queue.settings.maxnumberworkers.placeholder=Derzeit %[1]d
monitor.queue.settings.maxnumberworkers.error=Die Anzahl der Worker muss eine Zahl sein
monitor.queue.settings.submit=Einstellungen aktualisieren
@@ -3402,10 +3282,6 @@ notices.delete_success=Diese Systemmeldung wurde gelöscht.
self_check.no_problem_found=Bisher wurde kein Problem festgestellt.
self_check.startup_warnings=Warnungen beim Start:
self_check.database_collation_mismatch=Erwarte Datenbank-Kollation: %s
-self_check.database_collation_case_insensitive=Die Datenbank verwendet die Kollation %s, was eine unsensible Kollation ist. Obwohl Gitea damit arbeiten könnte, gibt es vielleicht einige seltene Fälle, die nicht wie erwartet funktionieren.
-self_check.database_inconsistent_collation_columns=Die Datenbank verwendet die Kollation %s, aber diese Spalten verwenden unzutreffende Kollationen. Dies könnte zu unerwarteten Problemen führen.
-self_check.database_fix_mysql=Für MySQL/MariaDB-Benutzer kann man den Befehl "gitea doctor convert" oder manuell auch "ALTER ... COLLATE ..."-SQLs verwenden, um die Sortierprobleme zu beheben.
-self_check.database_fix_mssql=Für MSSQL-Benutzer kann das Problem im Moment nur durch "ALTER ... COLLATE ..." SQLs manuell behoben werden.
self_check.location_origin_mismatch=Aktuelle URL (%[1]s) stimmt nicht mit der URL überein, die Gitea (%[2]s) sieht. Wenn du einen Reverse-Proxy verwendest, stelle bitte sicher, dass die Header "Host" und "X-Forwarded-Proto" korrekt gesetzt sind.
[action]
@@ -3489,8 +3365,6 @@ error.no_committer_account=Es ist kein Account mit der E-Mail-Adresse des Commit
error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
error.not_signed_commit=Kein signierter Commit
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos
-error.probable_bad_signature=WARNHINWEIS! Obwohl es einen Schlüssel mit dieser ID in der Datenbank gibt, wird dieser Commit nicht verifiziert! Dieser Commit ist nicht vertrauenswürdig.
-error.probable_bad_default_signature=WARNHINWEIS! Obwohl der Standardschlüssel diese ID hat, wird der Commit nicht verifiziert! Dieser Commit ist NICHT vertrauenswürdig.
[units]
unit=Einheit
@@ -3528,7 +3402,7 @@ versions=Versionen
versions.view_all=Alle anzeigen
dependency.id=ID
dependency.version=Version
-alpine.registry=Richte diese Registry ein, indem Du die URL in die /etc/apk/repositories-Datei hinzufügst:
+search_in_external_registry=In %s suchen
alpine.registry.key=Lade den öffentlichen RSA-Key der Registry in den /etc/apk/keys/-Ordner, um die Signatur zu überprüfen:
alpine.registry.info=Wähle $branch und $repository aus der Liste unten.
alpine.install=Nutze folgenden Befehl, um das Paket zu installieren:
@@ -3541,30 +3415,25 @@ arch.install=Paket mit pacman synchronisieren:
arch.repository=Repository-Informationen
arch.repository.repositories=Repositories
arch.repository.architectures=Architekturen
-cargo.registry=Richte diese Registry in der Cargo-Konfigurationsdatei ein (z.B. ~/.cargo/config.toml):
cargo.install=Um das Paket mit Cargo zu installieren, führe den folgenden Befehl aus:
-chef.registry=Richte diese Registry in deiner ~/.chef/config.rb Datei ein:
chef.install=Nutze folgenden Befehl, um das Paket zu installieren:
-composer.registry=Setze diese Paketverwaltung in deiner ~/.composer/config.json Datei auf:
composer.install=Nutze folgenden Befehl, um das Paket mit Composer zu installieren:
composer.dependencies=Abhängigkeiten
composer.dependencies.development=Entwicklungsabhängigkeiten
conan.details.repository=Repository
-conan.registry=Diese Registry über die Kommandozeile einrichten:
conan.install=Um das Paket mit Conan zu installieren, führe den folgenden Befehl aus:
-conda.registry=Richte diese Registry als Conda-Repository in deiner .condarc Datei ein:
conda.install=Um das Paket mit Conda zu installieren, führe den folgenden Befehl aus:
container.details.type=Container-Image Typ
container.details.platform=Plattform
container.pull=Downloade das Container-Image aus der Kommandozeile:
+container.images=Images
+container.digest=Digest
container.multi_arch=Betriebsystem / Architektur
container.layers=Container-Image Ebenen
container.labels=Labels
container.labels.key=Schlüssel
container.labels.value=Wert
-cran.registry=Richte diese Registry in deiner Rprofile.site Datei ein:
cran.install=Nutze folgenden Befehl, um das Paket zu installieren:
-debian.registry=Diese Registry über die Kommandozeile einrichten:
debian.registry.info=Wähle $distribution und $component aus der Liste unten.
debian.install=Nutze folgenden Befehl, um das Paket zu installieren:
debian.repository=Repository-Informationen
@@ -3573,16 +3442,11 @@ debian.repository.components=Komponenten
debian.repository.architectures=Architekturen
generic.download=Downloade das Paket aus der Kommandozeile:
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:
-maven.registry=Setze diese Paketverwaltung in der pom.xml deines Projektes auf:
-maven.install=Nimm Folgendes in den dependencies deiner pom.xml auf, um das Paket zu installieren:
maven.install2=Über die Kommandozeile ausführen:
maven.download=Nutze folgendes Kommando, um die Dependency herunterzuladen:
-nuget.registry=Diese Registry über die Kommandozeile einrichten:
nuget.install=Um das Paket mit NuGet zu installieren, führe den folgenden Befehl aus:
nuget.dependency.framework=Zielframework
-npm.registry=Setze diese Paketverwaltung in der .npmrc deines Projektes auf:
npm.install=Um das Paket mit npm zu installieren, führe den folgenden Befehl aus:
npm.install2=oder füge es zur package.json-Datei hinzu:
npm.dependencies=Abhängigkeiten
@@ -3594,7 +3458,6 @@ npm.details.tag=Tag
pub.install=Um das Paket mit Dart zu installieren, führe den folgenden Befehl aus:
pypi.requires=Erfordert Python
pypi.install=Nutze folgenden Befehl, um das Paket mit pip zu installieren:
-rpm.registry=Diese Registry über die Kommandozeile einrichten:
rpm.distros.redhat=auf RedHat-basierten Distributionen
rpm.distros.suse=auf SUSE-basierten Distributionen
rpm.install=Nutze folgenden Befehl, um das Paket zu installieren:
@@ -3607,7 +3470,6 @@ rubygems.dependencies.runtime=Laufzeitabhängigkeiten
rubygems.dependencies.development=Entwicklungsabhängigkeiten
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 Package.swift 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:
@@ -3630,7 +3492,6 @@ owner.settings.cargo.initialize.success=Der Cargo-Index wurde erfolgreich erstel
owner.settings.cargo.rebuild=Index neu erstellen
owner.settings.cargo.rebuild.description=Neubauen kann hilfreich sein, wenn der Index nicht mit den gespeicherten Cargo-Paketen synchronisiert ist.
owner.settings.cargo.rebuild.error=Cargo-Index konnte nicht neu erstellt werden: %v
-owner.settings.cargo.rebuild.success=Der Cargo-Index wurde erfolgreich neu erstellt.
owner.settings.cleanuprules.title=Bereinigungsregeln verwalten
owner.settings.cleanuprules.add=Bereinigungsregel hinzufügen
owner.settings.cleanuprules.edit=Bereinigungsregel bearbeiten
@@ -3664,8 +3525,13 @@ none=Noch keine Secrets vorhanden.
creation.description=Beschreibung
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.description_placeholder=Gib eine Kurzbeschreibung ein (optional).
+save_success=Das Secret "%s" wurde gespeichert.
+save_failed=Secret konnte nicht gespeichert werden.
+add_secret=Secret hinzufügen
+edit_secret=Secret bearbeiten
deletion=Secret entfernen
deletion.description=Das Entfernen eines Secrets kann nicht rückgängig gemacht werden. Fortfahren?
deletion.success=Das Secret wurde entfernt.
@@ -3713,7 +3579,6 @@ runners.delete_runner=Diesen Runner löschen
runners.delete_runner_success=Runner erfolgreich gelöscht
runners.delete_runner_failed=Der Runner konnte nicht gelöscht werden
runners.delete_runner_header=Bestätigen, um diesen Runner zu löschen
-runners.delete_runner_notice=Wenn eine Aufgabe auf diesem Runner ausgeführt wird, wird sie beendet und als fehlgeschlagen markiert. Dies könnte Workflows zerstören.
runners.none=Keine Runner verfügbar
runners.status.unspecified=Unbekannt
runners.status.idle=Leerlauf
@@ -3743,6 +3608,10 @@ runs.no_workflows.documentation=Weitere Informationen zu Gitea Actions findest d
runs.no_runs=Der Workflow hat noch keine Ausführungen.
runs.empty_commit_message=(leere Commit-Nachricht)
runs.expire_log_message=Protokolle wurden geleert, weil sie zu alt waren.
+runs.delete=Workflow-Ausführung löschen
+runs.delete.description=Bist du sicher, dass du diese Workflow-Ausführung dauerhaft löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.
+runs.not_done=Diese Workflow-Ausführung ist noch nicht abgeschlossen.
+runs.view_workflow_file=Workflow-Datei anzeigen
workflow.disable=Workflow deaktivieren
workflow.disable_success=Workflow '%s' erfolgreich deaktiviert.
@@ -3754,6 +3623,7 @@ workflow.not_found=Workflow '%s' wurde nicht gefunden.
workflow.run_success=Workflow '%s' erfolgreich ausgeführt.
workflow.from_ref=Nutze Workflow von
workflow.has_workflow_dispatch=Dieser Workflow hat einen workflow_dispatch Event-Trigger.
+workflow.has_no_workflow_dispatch=Der Workflow '%s' hat keinen workflow_dispatch Event-Trigger.
need_approval_desc=Um Workflows für den Pull-Request eines Forks auszuführen, ist eine Genehmigung erforderlich.
@@ -3781,6 +3651,8 @@ deleted.display_name=Gelöschtes Projekt
type-1.display_name=Individuelles Projekt
type-2.display_name=Repository-Projekt
type-3.display_name=Organisationsprojekt
+enter_fullscreen=Vollbild
+exit_fullscreen=Vollbild verlassen
[git.filemode]
changed_filemode=%[1]s → %[2]s
diff --git a/options/locale/locale_el-GR.ini b/options/locale/locale_el-GR.ini
index 444fbd26c9a..4b34b157382 100644
--- a/options/locale/locale_el-GR.ini
+++ b/options/locale/locale_el-GR.ini
@@ -43,7 +43,6 @@ webauthn_use_twofa=Χρησιμοποιήστε έναν κωδικό δύο π
webauthn_error=Αδύνατη η ανάγνωση του κλειδιού ασφαλείας.
webauthn_unsupported_browser=Το πρόγραμμα περιήγησής σας δεν υποστηρίζει επί του παρόντος WebAuthn.
webauthn_error_unknown=Παρουσιάστηκε ένα άγνωστο σφάλμα. Παρακαλώ προσπαθήστε ξανά.
-webauthn_error_insecure=`Το WebAuthn υποστηρίζει μόνο ασφαλείς συνδέσεις. Για δοκιμές πάνω από HTTP, μπορείτε να χρησιμοποιήσετε την προέλευση "localhost" ή "127.0.0.1"`
webauthn_error_unable_to_process=Ο διακομιστής δεν μπόρεσε να επεξεργαστεί το αίτημά σας.
webauthn_error_duplicated=Το κλειδί ασφαλείας δεν επιτρέπεται για αυτό το αίτημα. Βεβαιωθείτε ότι το κλειδί δεν έχει ήδη καταχωρηθεί.
webauthn_error_empty=Πρέπει να ορίσετε ένα όνομα για αυτό το κλειδί.
@@ -181,8 +180,6 @@ buttons.enable_monospace_font=Ενεργοποίηση σταθερής γραμ
buttons.disable_monospace_font=Απενεργοποίηση σταθερής γραμματοσειράς
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=Παρουσιάστηκε ένα σφάλμα
@@ -215,16 +212,10 @@ path=Διαδρομή
sqlite_helper=Διαδρομή αρχείου για τη βάση δεδομένων SQLite3. Εισάγετε μια απόλυτη διαδρομή αν εκτελείτε το Gitea ως υπηρεσία.
reinstall_error=Προσπαθείτε να εγκαταστήσετε σε μια υπάρχουσα βάση δεδομένων Gitea
reinstall_confirm_message=Η επανεγκατάσταση με μια υπάρχουσα βάση δεδομένων Gitea μπορεί να προκαλέσει πολλαπλά προβλήματα. Στις περισσότερες περιπτώσεις, θα πρέπει να χρησιμοποιήσετε το υπάρχον "app.ini" για να εκτελέσετε το Gitea. Αν γνωρίζετε τι κάνετε, επιβεβαιώστε τα εξής:
-reinstall_confirm_check_1=Τα δεδομένα που κρυπτογραφούνται από το SECRET_KEY στο app.ini μπορεί να χαθούν: οι χρήστες ενδέχεται να μην μπορούν να συνδεθούν μέσω 2FA/OTP και η αντιγραφή αποθετηρίων να μην λειτουργεί σωστά. Επιλέγοντας αυτό το κουτί επιβεβαιώνετε ότι το τρέχον αρχείο app.ini περιέχει το σωστό SECRET_KEY.
-reinstall_confirm_check_2=Τα αποθετήρια και οι ρυθμίσεις μπορεί να χρειαστεί να επανασυγχρονιστούν. Επιλέγοντας αυτό το κουτί επιβεβαιώνετε ότι θα επανασυγχρονίσετε τα άγκιστρα αποθετηρίων και το αρχείο authorized_keys χειροκίνητα. Επιβεβαιώνετε ότι θα βεβαιωθείτε ότι το αποθετήριο και οι ρυθμίσεις κατόπτρου είναι σωστές.
reinstall_confirm_check_3=Επιβεβαιώνετε ότι είστε απολύτως σίγουροι ότι αυτό το Gitea τρέχει στη σωστή τοποθεσία στο app.ini και ότι είστε σίγουροι ότι θα πρέπει να επανεγκαταστήσετε. Επιβεβαιώνετε ότι αναγνωρίζετε τους παραπάνω κινδύνους.
err_empty_db_path=Η διαδρομή της βάσης δεδομένων SQLite3 δεν μπορεί να είναι κενή.
no_admin_and_disable_registration=Δεν μπορείτε να απενεργοποιήσετε την ιδιο-εγγραφή χρήστη χωρίς να έχετε δημιουργήσει διαχειριστικό λογαριασμό.
err_empty_admin_password=Ο κωδικός πρόσβασης του διαχειριστή δεν μπορεί να είναι κενός.
-err_empty_admin_email=Το email του διαχειριστή δεν μπορεί να είναι κενό.
-err_admin_name_is_reserved=Το Όνομα χρήστη του Διαχειριστή δεν είναι έγκυρο, είναι δεσμευμένο
-err_admin_name_pattern_not_allowed=Το Όνομα χρήστη του Διαχειριστή δεν είναι έγκυρο, ταιριάζει σε μια δεσμευμένη μορφή
-err_admin_name_is_invalid=Το Όνομα Χρήστη του Διαχειριστή δεν είναι έγκυρο
general_title=Γενικές Ρυθμίσεις
app_name=Τίτλος Ιστοτόπου
@@ -240,7 +231,6 @@ domain_helper=Όνομα domain διακομιστή ή η διεύθυνση τ
ssh_port=Θύρα της υπηρεσίας SSH
ssh_port_helper=Αριθμός θύρας που ακούει η υπηρεσία SSH. Αφήστε κενό για να το απενεργοποιήσετε.
http_port=Η HTTP θύρα που ακούει το Gitea
-http_port_helper=Αριθμός θύρας που θα ακούει η υπηρεσία web του Gitea.
app_url=Βασικό URL του Gitea
app_url_helper=Βασική Διεύθυνση για τα URL κλωνοποίησης μέσω HTTP(S) και για τις ειδοποιήσεις μέσω email.
log_root_path=Διαδρομή Αρχείων Καταγραφής
@@ -303,7 +293,6 @@ no_reply_address=Κρυφό Όνομα Τομέα Email
no_reply_address_helper=Όνομα τομέα για χρήστες με μια κρυφή διεύθυνση email. Για παράδειγμα, το όνομα χρήστη 'nikos' θα συνδεθεί στο Git ως 'nikos@noreply.example.org' αν ο κρυφός τομέας email έχει οριστεί ως 'noreply.example.org'.
password_algorithm=Αλγόριθμος Hash Κωδικού Πρόσβασης
invalid_password_algorithm=Μη έγκυρος αλγόριθμος κωδικού πρόσβασης
-password_algorithm_helper=Ορίστε τον αλγόριθμο κατακερματισμού για το κωδικό πρόσβασης. Οι αλγόριθμοι διαφέρουν σε απαιτήσεις και αντοχή. Ο αλγόριθμος argon2 είναι αρκετά ασφαλής, αλλά χρησιμοποιεί πολλή μνήμη και μπορεί να είναι ακατάλληλος για μικρά συστήματα.
enable_update_checker=Ενεργοποίηση Ελεγκτή Ενημερώσεων
enable_update_checker_helper=Ελέγχει περιοδικά για νέες εκδόσεις κάνοντας σύνδεση στο gitea.io.
env_config_keys=Ρυθμίσεις Περιβάλλοντος
@@ -361,8 +350,6 @@ allow_password_change=Απαιτείται από το χρήστη να αλλ
reset_password_mail_sent_prompt=Ένα email επιβεβαίωσης έχει σταλεί στο %s . Παρακαλώ ελέγξτε τα εισερχόμενα σας στις επόμενες %s για να ολοκληρώσετε τη διαδικασία ανάκτησης λογαριασμού.
active_your_account=Ενεργοποιήστε Το Λογαριασμό Σας
account_activated=Ο λογαριασμός έχει ενεργοποιηθεί
-prohibit_login=Απαγορεύεται η Σύνδεση
-prohibit_login_desc=Ο λογαριασμός σας δεν επιτρέπεται να συνδεθεί, παρακαλούμε επικοινωνήστε με το διαχειριστή σας.
resent_limit_prompt=Έχετε ήδη ζητήσει ένα email ενεργοποίησης πρόσφατα. Παρακαλώ περιμένετε 3 λεπτά και προσπαθήστε ξανά.
has_unconfirmed_mail=Γεια σας %s, έχετε μια ανεπιβεβαίωτη διεύθυνση ηλεκτρονικού ταχυδρομείου (%s ). Εάν δεν έχετε λάβει email επιβεβαίωσης ή χρειάζεται να αποστείλετε εκ νέου ένα νέο, παρακαλώ κάντε κλικ στο παρακάτω κουμπί.
resend_mail=Κάντε κλικ εδώ για να στείλετε ξανά το email ενεργοποίησης
@@ -398,16 +385,12 @@ openid_connect_desc=Το επιλεγμένο OpenID URI είναι άγνωστ
openid_register_title=Δημιουργία νέου λογαριασμού
openid_register_desc=Το επιλεγμένο OpenID URI είναι άγνωστο. Συνδέστε το με ένα νέο λογαριασμό εδώ.
openid_signin_desc=Εισάγετε το OpenID URI σας. Για παράδειγμα: alice.openid.example.org ή https://openid.example.org/alice.
-disable_forgot_password_mail=Η ανάκτηση λογαριασμού είναι απενεργοποιημένη επειδή δεν έχει οριστεί email. Παρακαλούμε επικοινωνήστε με το διαχειριστή.
-disable_forgot_password_mail_admin=Η ανάκτηση λογαριασμού είναι διαθέσιμη μόνο όταν έχει οριστεί το email. Παρακαλούμε ορίστει το email σας για να ενεργοποιήσετε την ανάκτηση λογαριασμού.
email_domain_blacklisted=Δεν μπορείτε να εγγραφείτε με τη διεύθυνση email σας.
authorize_application=Εξουσιοδότηση Εφαρμογής
authorize_redirect_notice=Θα μεταφερθείτε στο %s εάν εξουσιοδοτήσετε αυτήν την εφαρμογή.
authorize_application_created_by=Αυτή η εφαρμογή δημιουργήθηκε από %s.
-authorize_application_description=Εάν παραχωρήσετε την πρόσβαση, θα μπορεί να έχει πρόσβαση και να γράφει σε όλες τις πληροφορίες του λογαριασμού σας, συμπεριλαμβανομένων των ιδιωτικών αποθετηρίων και οργανισμών.
authorize_title=Εξουσιοδότηση του "%s" για έχει πρόσβαση στο λογαριασμό σας;
authorization_failed=Αποτυχία εξουσιοδότησης
-authorization_failed_desc=Η εξουσιοδότηση απέτυχε επειδή εντοπίστηκε μια μη έγκυρη αίτηση. Παρακαλούμε επικοινωνήστε με το συντηρητή της εφαρμογής που προσπαθήσατε να εξουσιοδοτήσετε.
sspi_auth_failed=Αποτυχία ταυτοποίησης SSPI
password_pwned_err=Δεν ήταν δυνατή η ολοκλήρωση του αιτήματος προς το HaveIBeenPwned
@@ -427,8 +410,6 @@ activate_email.title=%s, παρακαλώ επαληθεύστε τη διεύθ
activate_email.text=Παρακαλώ κάντε κλικ στον παρακάτω σύνδεσμο για να επαληθεύσετε τη διεύθυνση email σας στο %s :
register_notify.title=%[1]s, καλώς ήρθατε στο %[2]s
-register_notify.text_1=αυτό είναι το email επιβεβαίωσης εγγραφής για το %s!
-register_notify.text_2=Τώρα μπορείτε να συνδεθείτε μέσω του ονόματος χρήστη: %s.
register_notify.text_3=Εάν αυτός ο λογαριασμός έχει δημιουργηθεί για εσάς, παρακαλώ ορίστε πρώτα τον κωδικό πρόσβασής σας .
reset_password=Ανάκτηση του λογαριασμού σας
@@ -466,7 +447,6 @@ release.download.targz=Πηγαίος Κώδικας (TAR.GZ)
repo.transfer.subject_to=%s θα ήθελε να μεταφέρει το "%s" σε %s
repo.transfer.subject_to_you=`%s θα ήθελε να σας μεταφέρει το "%s"`
repo.transfer.to_you=εσάς
-repo.transfer.body=Για να το αποδεχτείτε ή να το απορρίψετε, επισκεφθείτε το %s ή απλά αγνοήστε το.
repo.collaborator.added.subject=%s σας πρόσθεσε στο %s
repo.collaborator.added.text=Έχετε προστεθεί ως συνεργάτης του αποθετηρίου:
@@ -518,7 +498,6 @@ url_error=`Το "%s" δεν είναι ένα έγκυρο URL.`
include_error=` πρέπει να περιέχει το μέρος "%s".`
glob_pattern_error=` το μοτίβο ταιριάσματος (glob) δεν είναι έγκυρο: %s.`
regex_pattern_error=` το μοτίβο regex δεν είναι έγκυρο: %s.`
-username_error=` μπορεί να περιέχει μόνο αλφαριθμητικούς χαρακτήρες ('0-9','a-z','A-Z'), παύλα ('-'), κάτω παύλα ('_') και τελεία ('.'). Δεν μπορεί να ξεκινά ή να τελειώνει με μη αλφαριθμητικούς χαρακτήρες, επίσης απαγορεύονται οι διαδοχικοί μη αλφαριθμητικοί χαρακτήρες.`
invalid_group_team_map_error=` η αντιστοίχιση δεν είναι έγκυρη: %s`
unknown_error=Άγνωστο σφάλμα:
captcha_incorrect=Ο κωδικός CAPTCHA είναι λάθος.
@@ -531,11 +510,9 @@ username_has_not_been_changed=Το όνομα χρήστη δεν άλλαξε
repo_name_been_taken=Το όνομα του αποθετηρίου χρησιμοποιείται ήδη.
repository_force_private=Η επιλογή Μόνο Ιδιωτικά είναι ενεργοποιημένη: τα ιδιωτικά αποθετήρια δεν μπορούν να δημοσιευθούν.
repository_files_already_exist=Αρχεία υπάρχουν ήδη για αυτό το αποθετήριο. Επικοινωνήστε με το διαχειριστή του συστήματος.
-repository_files_already_exist.adopt=Αρχεία υπάρχουν ήδη για αυτό το αποθετήριο και μπορούν να Υιοθετηθούν μόνο.
repository_files_already_exist.delete=Τα αρχεία υπάρχουν ήδη για αυτόν το αποθετήριο. Πρέπει να τα διαγράψετε.
repository_files_already_exist.adopt_or_delete=Τα αρχεία υπάρχουν ήδη για αυτόν το αποθετήριο. Είτε υιοθετήστε τα είτε διαγράψτε τα.
visit_rate_limit=Συναντήθηκε το όριο ρυθμού κατά την απομακρυσμένη πρόσβαση.
-2fa_auth_required=Απαιτήθηκε ταυτοποίηση δύο παραγόντων κατά την απομακρυσμένη πρόσβαση.
org_name_been_taken=Το όνομα του οργανισμού χρησιμοποιείται ήδη.
team_name_been_taken=Το όνομα της ομάδας χρησιμοποιείται ήδη.
team_no_units_error=Να επιτρέπεται η πρόσβαση σε τουλάχιστον μία ενότητα αποθετηρίου.
@@ -563,14 +540,8 @@ invalid_ssh_key=Δεν είναι δυνατή η επαλήθευση του SS
invalid_gpg_key=Δεν είναι δυνατή η επαλήθευση του GPG κλειδιού σας: %s
invalid_ssh_principal=Μη έγκυρη αρχή: %s
must_use_public_key=Το κλειδί που δώσατε είναι ένα ιδιωτικό κλειδί. Παρακαλώ μην ανεβάζετε το ιδιωτικό σας κλειδί οπουδήποτε. Χρησιμοποιήστε το δημόσιο κλειδί αντί αυτού.
-unable_verify_ssh_key=Αδυναμία επαλήθευσης του κλειδιού SSH, ελέγξτε το ξανά για λάθη.
auth_failed=Αποτυχία ταυτοποίησης: %v
-still_own_repo=Ο λογαριασμός σας κατέχει ένα ή περισσότερα αποθετήρια, διαγράψτε ή μεταφέρετε τα πρώτα.
-still_has_org=Ο λογαριασμός σας είναι μέλος σε ένα ή περισσότερους οργανισμούς, φύγετε από αυτούς πρώτα.
-still_own_packages=Ο λογαριασμός σας κατέχει ένα ή περισσότερα πακέτα, διαγράψτε τα πρώτα.
-org_still_own_repo=Αυτός ο οργανισμός κατέχει ακόμα ένα ή περισσότερα αποθετήρια, διαγράψτε τα ή μεταφέρετε τα πρώτα.
-org_still_own_packages=Αυτός ο οργανισμός κατέχει ακόμα ένα ή περισσότερα πακέτα, διαγράψτε τα πρώτα.
target_branch_not_exist=Ο κλάδος προορισμού δεν υπάρχει.
@@ -599,7 +570,6 @@ settings=Ρυθμίσεις Χρήστη
form.name_reserved=Το όνομα χρήστη "%s" είναι δεσμευμένο.
form.name_pattern_not_allowed=Το μοτίβο "%s" δεν επιτρέπεται μέσα σε ένα όνομα χρήστη.
-form.name_chars_not_allowed=Το όνομα χρήστη "%s" περιέχει μη έγκυρους χαρακτήρες.
[settings]
@@ -622,7 +592,6 @@ uid=UID
public_profile=Δημόσιο Προφίλ
biography_placeholder=Πείτε μας λίγο για τον εαυτό σας! (Μπορείτε να γράψετε με Markdown)
location_placeholder=Μοιραστείτε την κατά προσέγγιση τοποθεσία σας με άλλους
-profile_desc=Ελέγξτε πώς εμφανίζεται το προφίλ σας σε άλλους χρήστες. Η κύρια διεύθυνση email σας θα χρησιμοποιηθεί για ειδοποιήσεις, ανάκτηση κωδικού πρόσβασης και λειτουργίες Git που βασίζονται στο web.
full_name=Πλήρες Όνομα
website=Ιστοσελίδα
location=Τοποθεσία
@@ -692,10 +661,8 @@ requires_activation=Απαιτείται ενεργοποίηση
primary_email=Αλλαγή κυριότητας
activate_email=Αποστολή Ενεργοποίησης
activations_pending=Εκκρεμούν Ενεργοποιήσεις
-can_not_add_email_activations_pending=Εκκρεμεί μια ενεργοποίηση, δοκιμάστε ξανά σε λίγα λεπτά αν θέλετε να προσθέσετε ένα νέο email.
delete_email=Αφαίρεση
email_deletion=Αφαίρεση Διεύθυνσης Email
-email_deletion_desc=Η διεύθυνση ηλεκτρονικού ταχυδρομείου και οι σχετικές πληροφορίες θα αφαιρεθούν από τον λογαριασμό σας. Οι υποβολές Git από αυτή τη διεύθυνση email θα παραμείνουν αμετάβλητες. Συνέχεια;
email_deletion_success=Η διεύθυνση email σας έχει καταργηθεί.
theme_update_success=Το θέμα διεπαφής σας ενημερώθηκε.
theme_update_error=Το επιλεγμένο θέμα διεπαφής δεν υπάρχει.
@@ -738,7 +705,6 @@ gpg_key_matched_identities_long=Οι ενσωματωμένες ταυτότητ
gpg_key_verified=Επαληθευμένο Κλειδί
gpg_key_verified_long=Το κλειδί έχει επαληθευτεί με ένα διακριτικό (token) και μπορεί να χρησιμοποιηθεί για να επαληθεύσει τις υποβολές που ταιριάζουν με οποιεσδήποτε ενεργοποιημένες διευθύνσεις email για αυτόν το χρήστη εκτός από οποιαδήποτε αντιστοιχισμένη ταυτότητα για αυτό το κλειδί.
gpg_key_verify=Επαλήθευση
-gpg_invalid_token_signature=Το κλειδί GPG, η υπογραφή και το διακριτικό (token) δεν ταιριάζουν ή το διακριτικό (token) είναι παρωχημένο.
gpg_token_required=Πρέπει να δώσετε μια υπογραφή για το παρακάτω διακριτικό
gpg_token=Διακριτικό
gpg_token_help=Μπορείτε να δημιουργήσετε μια υπογραφή χρησιμοποιώντας:
@@ -748,7 +714,6 @@ verify_gpg_key_success=Το κλειδί GPG "%s" επαληθεύτηκε.
ssh_key_verified=Επαληθευμένο Κλειδί
ssh_key_verified_long=Το κλειδί έχει επαληθευτεί με ένα διακριτικό και μπορεί να χρησιμοποιηθεί για να επαληθεύσει τα commits που ταιριάζουν με οποιεσδήποτε ενεργοποιημένες διευθύνσεις ηλεκτρονικού ταχυδρομείου για αυτόν το χρήστη.
ssh_key_verify=Επαλήθευση
-ssh_invalid_token_signature=Το παρεχόμενο κλειδί SSH, υπογραφή ή διακριτικό δεν ταιριάζει ή το διακριτικό έληξε.
ssh_token_required=Πρέπει να δώσετε μια υπογραφή για το παρακάτω διακριτικό
ssh_token=Διακριτικό
ssh_token_help=Μπορείτε να δημιουργήσετε μια υπογραφή χρησιμοποιώντας:
@@ -769,7 +734,6 @@ gpg_key_deletion=Διαγραφή Κλειδιού GPG
ssh_principal_deletion=Διαγραφή Αρχών Πιστοποιητικού SSH
ssh_key_deletion_desc=Η διαγραφή ενός κλειδιού SSH ανακαλεί την πρόσβασή του στο λογαριασμό σας. Συνέχεια;
gpg_key_deletion_desc=Η διαγραφή ενός κλειδιού GPG απο-επαληθεύει τις υποβολές που έχουν υπογραφεί από αυτό. Συνέχεια;
-ssh_principal_deletion_desc=Η διαγραφή μιας αρχής πιστοποιητικού SSH ανακαλεί την πρόσβασή της στο λογαριασμό σας. Συνέχεια;
ssh_key_deletion_success=Το SSH κλειδί έχει διαγραφεί.
gpg_key_deletion_success=Το κλειδί GPG έχει διαγραφεί.
ssh_principal_deletion_success=Η αρχή πιστοποιητικού έχει διαγραφεί.
@@ -827,7 +791,6 @@ create_oauth2_application_button=Δημιουργία Εφαρμογής
create_oauth2_application_success=Έχετε δημιουργήσει με επιτυχία μια νέα εφαρμογή OAuth2.
update_oauth2_application_success=Έχετε ενημερώσει με επιτυχία την εφαρμογή OAuth2.
oauth2_application_name=Όνομα Εφαρμογής
-oauth2_confidential_client=Εμπιστευτικός Πελάτης. Επιλέξτε το για εφαρμογές που διατηρούν το μυστικό κωδικό κρυφό, όπως πχ οι εφαρμογές ιστού. Μην επιλέγετε για εγγενείς εφαρμογές, συμπεριλαμβανομένων εφαρμογών επιφάνειας εργασίας και εφαρμογών για κινητά.
oauth2_redirect_uris=URI Ανακατεύθυνσης. Χρησιμοποιήστε μια νέα γραμμή για κάθε URI.
save_application=Αποθήκευση
oauth2_client_id=Ταυτότητα Πελάτη
@@ -841,10 +804,8 @@ oauth2_application_remove_description=Αφαιρώντας μια εφαρμογ
oauth2_application_locked=Το Gitea κάνει προεγγραφή σε μερικές εφαρμογές OAuth2 κατά την εκκίνηση αν είναι ενεργοποιημένες στις ρυθμίσεις. Για την αποφυγή απροσδόκητης συμπεριφοράς, αυτές δεν μπορούν ούτε να επεξεργαστούν ούτε να καταργηθούν. Παρακαλούμε ανατρέξτε στην τεκμηρίωση OAuth2 για περισσότερες πληροφορίες.
authorized_oauth2_applications=Εξουσιοδοτημένες Εφαρμογές OAuth2
-authorized_oauth2_applications_description=Έχετε χορηγήσει πρόσβαση στον προσωπικό σας λογαριασμό σε αυτές τις εφαρμογές τρίτων. Ανακαλέστε την πρόσβαση για εφαρμογές που δεν χρειάζεστε πλέον.
revoke_key=Ανάκληση
revoke_oauth2_grant=Ανάκληση Πρόσβασης
-revoke_oauth2_grant_description=Η ανάκληση πρόσβασης για αυτή την εξωτερική εφαρμογή θα αποτρέψει αυτή την εφαρμογή από την πρόσβαση στα δεδομένα σας. Σίγουρα;
revoke_oauth2_grant_success=Η πρόσβαση ανακλήθηκε επιτυχώς.
twofa_recovery_tip=Αν χάσετε τη συσκευή σας, θα είστε σε θέση να χρησιμοποιήσετε ένα κλειδί ανάκτησης μιας χρήσης για να ανακτήσετε την πρόσβαση στο λογαριασμό σας.
@@ -852,7 +813,6 @@ twofa_is_enrolled=Ο λογαριασμός σας είναι εγγεγ
twofa_not_enrolled=Ο λογαριασμός σας δεν είναι εγγεγραμμένος σε έλεγχο ταυτότητας δύο παραγόντων.
twofa_disable=Απενεργοποίηση Ταυτοποίησης Δύο Παραμέτρων
twofa_scratch_token_regenerated=Το κλειδί ανάκτησης μιας χρήσης είναι τώρα %s. Αποθηκεύστε το σε ασφαλές μέρος, καθώς δε θα εμφανιστεί ξανά.
-twofa_enroll=Εγγραφή στην ταυτοποίηση δύο παραγόντων
twofa_disable_note=Μπορείτε να απενεργοποιήσετε την ταυτοποίηση δύο παραγόντων αν χρειαστεί.
twofa_disable_desc=Η απενεργοποίηση της ταυτοποίησης δύο παραγόντων θα καταστήσει τον λογαριασμό σας λιγότερο ασφαλή. Συνέχεια;
twofa_disabled=Η ταυτοποίηση δύο παραγόντων έχει απενεργοποιηθεί.
@@ -865,13 +825,11 @@ twofa_failed_get_secret=Αποτυχία λήψης μυστικού.
webauthn_register_key=Προσθήκη Κλειδιού Ασφαλείας
webauthn_nickname=Ψευδώνυμο
webauthn_delete_key=Αφαίρεση Κλειδιού Ασφαλείας
-webauthn_delete_key_desc=Αν αφαιρέσετε ένα κλειδί ασφαλείας δεν μπορείτε πλέον να συνδεθείτε με αυτό. Συνέχεια;
webauthn_key_loss_warning=Αν χάσετε τα κλειδιά ασφαλείας σας, θα χάσετε την πρόσβαση στο λογαριασμό σας.
webauthn_alternative_tip=Μπορεί να θέλετε να ρυθμίσετε μια πρόσθετη μέθοδο ταυτοποίησης.
manage_account_links=Διαχείριση Συνδεδεμένων Λογαριασμών
manage_account_links_desc=Αυτοί οι εξωτερικοί λογαριασμοί είναι συνδεδεμένοι στον Gitea λογαριασμό σας.
-account_links_not_available=Προς το παρόν δεν υπάρχουν εξωτερικοί λογαριασμοί συνδεδεμένοι με τον λογαριασμό σας στο Gitea.
link_account=Σύνδεση Λογαριασμού
remove_account_link=Αφαίρεση Συνδεδεμένου Λογαριασμού
remove_account_link_desc=Η κατάργηση ενός συνδεδεμένου λογαριασμού θα ανακαλέσει την πρόσβασή του στο λογαριασμό σας στο Gitea. Συνέχεια;
@@ -926,7 +884,6 @@ fork_to_different_account=Fork σε διαφορετικό λογαριασμό
fork_visibility_helper=Η ορατότητα ενός fork αποθετηρίου δεν μπορεί να αλλάξει.
fork_branch=Κλάδος που θα κλωνοποιηθεί στο fork
all_branches=Όλοι οι κλάδοι
-fork_no_valid_owners=Αυτό το αποθετήριο δεν μπορεί να γίνει fork επειδή δεν υπάρχουν έγκυροι ιδιοκτήτες.
use_template=Χρήση αυτού του πρότυπου
download_zip=Λήψη ZIP
download_tar=Λήψη TAR.GZ
@@ -962,12 +919,10 @@ mirror_interval_invalid=Το χρονικό διάστημα του ειδώλο
mirror_sync_on_commit=Συγχρονισμός κατά την ώθηση
mirror_address=Κλωνοποίηση Από Το URL
mirror_address_desc=Τοποθετήστε όλα τα απαιτούμενα διαπιστευτήρια στην ενότητα Εξουσιοδότηση.
-mirror_address_url_invalid=Η διεύθυνση URL που δόθηκε δεν είναι έγκυρη. Πρέπει να κάνετε escape όλα τα στοιχεία του url σωστά.
mirror_address_protocol_invalid=Η παρεχόμενη διεύθυνση URL δεν είναι έγκυρη. Μόνο οι τοποθεσίες http(s):// ή git:// μπορούν να χρησιμοποιηθούν για τη δημιουργία ειδώλου.
mirror_lfs=Large File Storage (LFS)
mirror_lfs_desc=Ενεργοποίηση αντικατοπτρισμού δεδομένων LFS.
mirror_lfs_endpoint=Άκρο LFS
-mirror_lfs_endpoint_desc=Ο συγχρονισμός θα προσπαθήσει να χρησιμοποιήσει το url κλωνοποίησης για να καθορίσει τον διακομιστή LFS . Μπορείτε επίσης να καθορίσετε μια άλλη διεύθυνση αν τα δεδομένα LFS του αποθετηρίου αποθηκεύονται κάπου αλλού.
mirror_last_synced=Τελευταίος Συγχρονισμός
mirror_password_placeholder=(Χωρίς αλλαγή)
mirror_password_blank_placeholder=(Μη ορισμένο)
@@ -979,7 +934,6 @@ forks=Forks
reactions_more=και %d περισσότερα
unit_disabled=Ο διαχειριστής του ιστότοπου έχει απενεργοποιήσει αυτήν την ενότητα αποθετηρίου.
language_other=Άλλο
-adopt_search=Εισάγετε όνομα χρήστη για αναζήτηση μη υιοθετημένων αποθετηρίων... (αφήστε κενό για να βρείτε όλα)
adopt_preexisting_label=Υιοθέτηση Αρχείων
adopt_preexisting=Υιοθετήστε τα προϋπάρχοντα αρχεία
adopt_preexisting_content=Δημιουργία αποθετηρίου από %s
@@ -1015,8 +969,6 @@ template.issue_labels=Σήματα Ζητήματος
template.one_item=Πρέπει να επιλέξετε τουλάχιστον ένα αντικείμενο στο πρότυπο
template.invalid=Πρέπει να επιλέξετε ένα πρότυπο αποθετήριο
-archive.title=Αυτό το αποθετήρειο αρχειοθετήθηκε. Μπορείτε να προβάλετε αρχεία και να τα κλωνοποιήσετε, αλλά δεν μπορείτε να ωθήσετε ή να ανοίξετε ζητήματα ή pull requests.
-archive.title_date=Αυτό το αποθετήριο έχει αρχειοθετηθεί στο %s. Μπορείτε να προβάλετε αρχεία και να κλωνοποιήσετε, αλλά δεν μπορείτε να ωθήσετε ή να ανοίξετε ζητήματα ή pull requests.
archive.issue.nocomment=Αυτό το αποθετήριο αρχειοθετήθηκε. Δεν μπορείτε να σχολιάσετε σε ζητήματα.
archive.pull.nocomment=Αυτό το repo αρχειοθετήθηκε. Δεν μπορείτε να σχολιάσετε στα pull requests.
@@ -1033,7 +985,6 @@ migrate_options_lfs=Μεταφορά αρχείων LFS
migrate_options_lfs_endpoint.label=Άκρο LFS
migrate_options_lfs_endpoint.description=Η μεταφορά θα προσπαθήσει να χρησιμοποιήσει το Git remote για να καθορίσει τον διακομιστή LFS . Μπορείτε επίσης να καθορίσετε ένα δικό σας endpoint αν τα δεδομένα LFS του αποθετηρίου αποθηκεύονται κάπου αλλού.
migrate_options_lfs_endpoint.description.local=Μια διαδρομή στο τοπικό διακομιστή επίσης υποστηρίζεται.
-migrate_options_lfs_endpoint.placeholder=Αν αφεθεί κενό, το άκρο θα προκύψει από το URL του κλώνου
migrate_items=Στοιχεία Μεταφοράς
migrate_items_wiki=Wiki
migrate_items_milestones=Ορόσημα
@@ -1045,10 +996,8 @@ migrate_items_releases=Κυκλοφορίες
migrate_repo=Μεταφορά Αποθετηρίου
migrate.clone_address=Μεταφορά / Κλωνοποίηση Από Το URL
migrate.clone_address_desc=Το HTTP(S) ή Git URL 'κλωνοποίησης' ενός υπάρχοντος αποθετηρίου
-migrate.github_token_desc=Μπορείτε να βάλετε ένα ή περισσότερα διακριτικά εδώ, χωρισμένα με κόμμα, για να κάνετε τη μετεγκατάσταση πιο γρήγορα, λόγω του ορίου ρυθμού του GitHub API. ΠΡΟΣΟΧΗ: Η κατάχρηση αυτής της δυνατότητας μπορεί να παραβιάσει την πολιτική του παρόχου υπηρεσιών και να οδηγήσει σε αποκλεισμό του λογαριασμού σας.
migrate.clone_local_path=ή μια διαδρομή τοπικού διακομιστή
migrate.permission_denied=Δεν επιτρέπεται η εισαγωγή τοπικών αποθετηρίων.
-migrate.permission_denied_blocked=Δεν μπορείτε να εισαγάγετε από μη επιτρεπόμενους υπολογιστές, παρακαλούμε ζητήστε από τον διαχειριστή να ελέγξει τις ρυθμίσεις ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Η τοπική διαδρομή δεν είναι έγκυρη. Δεν υπάρχει ή δεν είναι φάκελος.
migrate.invalid_lfs_endpoint=Η διεύθυνση LFS δεν είναι έγκυρο.
migrate.failed=Η μεταφορά απέτυχε: %v
@@ -1056,7 +1005,6 @@ migrate.migrate_items_options=Το Διακριτικό Πρόσβασης απ
migrated_from=Μεταφέρθηκε από %[2]s
migrated_from_fake=Μεταφέρθηκε από %[1]s
migrate.migrate=Μεταφορά Από %s
-migrate.migrating=Γίνεται μεταφορά από %s ...
migrate.migrating_failed=Η μετεγρατάσταση από %s απέτυχε.
migrate.migrating_failed.error=Αποτυχία μεταφοράς: %s
migrate.migrating_failed_no_addr=Η μεταφορά απέτυχε.
@@ -1098,7 +1046,6 @@ clone_this_repo=Κλωνοποίηση αυτού του αποθετηρίου
cite_this_repo=Αναφορά σε αυτό το αποθετήριο
create_new_repo_command=Δημιουργία νέου αποθετηρίου στη γραμμή εντολών
push_exist_repo=Προώθηση ενός υπάρχοντος αποθετηρίου από τη γραμμή εντολών
-empty_message=Αυτό το αποθετήριο δεν περιέχει τίποτα.
broken_message=Τα δεδομένα Git που διέπουν αυτό το αποθετήριο δεν μπορούν να διαβαστούν. Επικοινωνήστε με το διαχειριστή ή διαγράψτε αυτό το αποθετήριο.
code=Κώδικας
@@ -1116,7 +1063,6 @@ projects=Έργα
packages=Πακέτα
actions=Δράσεις
labels=Σήματα
-org_labels_desc=Τα σήματα στο επίπεδο οργανισμού, που μπορούν να χρησιμοποιηθούν με όλα τα αποθετήρια κάτω από αυτόν τον οργανισμό
org_labels_desc_manage=διαχείριση
milestone=Ορόσημο
@@ -1190,7 +1136,6 @@ editor.update=Ενημέρωση %s
editor.delete=Διαγραφή %s
editor.patch=Εφαρμογή Διόρθωσης
editor.patching=Επιδιόρθωση:
-editor.fail_to_apply_patch=`Αδυναμία εφαρμογής της επιδιόρθωσης "%s"`
editor.new_patch=Νέα Διόρθωση
editor.commit_message_desc=Προσθήκη προαιρετικής εκτενούς περιγραφής…
editor.signoff_desc=Προσθέστε ένα πρόσθετο Signed-off-by στο τέλος του μηνύματος καταγραφής της υποβολής.
@@ -1206,17 +1151,12 @@ editor.filename_is_invalid=Το όνομα αρχείου δεν είναι έγ
editor.branch_does_not_exist=Ο κλάδος "%s" δεν υπάρχει σε αυτό το αποθετήριο.
editor.branch_already_exists=Ο κλάδος "%s" υπάρχει ήδη σε αυτό το αποθετήριο.
editor.directory_is_a_file=Το όνομα φακέλου "%s" χρησιμοποιείται ήδη ως όνομα αρχείου σε αυτό το αποθετήριο.
-editor.file_is_a_symlink=`Το "%s" είναι συμβολικός σύνδεσμος. Οι συμβολικοί σύνδεσμοι δεν μπορούν να επεξεργαστούν στην ενσωματωμένη εφαρμογή`
editor.filename_is_a_directory=Το όνομα αρχείου "%s" χρησιμοποιείται ήδη ως όνομα φακέλου σε αυτό το αποθετήριο.
-editor.file_editing_no_longer_exists=Το αρχείο "%s" που επεξεργάζεται, δεν υπάρχει πλέον σε αυτό το αποθετήριο.
-editor.file_deleting_no_longer_exists=Το αρχείο "%s" που διαγράφεται, δεν υπάρχει πλέον σε αυτό το αποθετήριο.
editor.file_changed_while_editing=Τα περιεχόμενα του αρχείου άλλαξαν από τότε που ξεκίνησε η επεξεργασία. Κάντε κλικ εδώ για να τα δείτε ή Υποβολή Αλλαγών ξανά για να τα αντικαταστήσετε.
editor.file_already_exists=Ένα αρχείο με το όνομα "%s" υπάρχει ήδη σε αυτό το αποθετήριο.
editor.commit_empty_file_header=Υποβολή ενός κενού αρχείου
editor.commit_empty_file_text=Το αρχείο που πρόκειται να υποβληθεί είναι κενό. Συνέχεια;
editor.no_changes_to_show=Δεν υπάρχουν αλλαγές για εμφάνιση.
-editor.fail_to_update_file=Αποτυχία ενημέρωσης/δημιουργίας του αρχείου "%s".
-editor.fail_to_update_file_summary=Μήνυμα Σφάλματος:
editor.push_rejected_no_message=Η αλλαγή απορρίφθηκε από το διακομιστή χωρίς κάποιο μήνυμα. Παρακαλώ ελέγξτε τα Άγκιστρα Git.
editor.push_rejected=Η αλλαγή απορρίφθηκε από τον διακομιστή. Παρακαλώ ελέγξτε τα Άγκιστρα Git.
editor.push_rejected_summary=Μήνυμα Πλήρους Απόρριψης:
@@ -1231,6 +1171,7 @@ editor.require_signed_commit=Ο κλάδος απαιτεί υπογεγραμμ
editor.cherry_pick=Ανθολόγηση (cherry-pic) του %s στο:
editor.revert=Απόσυρση του %s στο:
+
commits.desc=Δείτε το ιστορικό αλλαγών του πηγαίου κώδικα.
commits.commits=Υποβολές
commits.no_commits=Δεν υπάρχουν κοινές υποβολές. Τα "%s" και "%s" έχουν εντελώς διαφορετικές ιστορίες.
@@ -1387,7 +1328,6 @@ issues.filter_type.reviewed_by_you=Ελέγχθηκε από εσάς
issues.filter_sort=Ταξινόμηση
issues.filter_sort.latest=Νεότερα
issues.filter_sort.oldest=Παλαιότερα
-issues.filter_sort.recentupdate=Ενημερώθηκαν πρόσφατα
issues.filter_sort.leastupdate=Ενημερώθηκαν παλαιότερα
issues.filter_sort.mostcomment=Περισσότερο σχολιασμένα
issues.filter_sort.leastcomment=Λιγότερο σχολιασμένα
@@ -1503,7 +1443,6 @@ issues.lock_no_reason=κλειδωμένη και περιορισμένη συ
issues.unlock_comment=ξεκλείδωσε αυτή τη συνομιλία %s
issues.lock_confirm=Κλείδωμα
issues.unlock_confirm=Ξεκλείδωμα
-issues.lock.notice_1=- Άλλοι χρήστες δεν μπορούν να προσθέσουν νέα σχόλια σε αυτό το ζήτημα.
issues.lock.notice_2=- Εσείς και άλλοι συνεργάτες με πρόσβαση σε αυτό το αποθετήριο μπορούν ακόμα να αφήσουν σχόλια που μπορούν να δουν άλλοι.
issues.lock.notice_3=- Μπορείτε πάντα να ξεκλειδώσετε αυτό το ζήτημα ξανά στο μέλλον.
issues.unlock.notice_1=- Όλοι θα ήταν σε θέση να σχολιάσουν αυτό το ζήτημα για άλλη μια φορά.
@@ -1541,7 +1480,6 @@ issues.due_date_form=εεεε-μμ-ηη
issues.due_date_form_add=Προσθήκη ημερομηνίας παράδοσης
issues.due_date_form_edit=Επεξεργασία
issues.due_date_form_remove=Διαγραφή
-issues.due_date_not_writer=Χρειάζεστε πρόσβαση εγγραφής στο αποθετήριο για να ενημερώσετε την ημερομηνία λήξης ενός προβλήματος.
issues.due_date_not_set=Δεν ορίστηκε ημερομηνία παράδοσης.
issues.due_date_added=πρόσθεσε την ημερομηνία παράδοσης %s %s
issues.due_date_modified=τροποποίησε την ημερομηνία παράδοσης από %[2]s σε %[1]s %[3]s
@@ -1564,9 +1502,7 @@ issues.dependency.pr_closing_blockedby=Το κλείσιμο αυτού pull req
issues.dependency.issue_closing_blockedby=Το κλείσιμο αυτού του ζητήματος εμποδίζεται από τα ακόλουθα ζητήματα
issues.dependency.issue_close_blocks=Αυτό το ζήτημα εμποδίζει το κλείσιμο των ακόλουθων ζητημάτων
issues.dependency.pr_close_blocks=Αυτό το pull request εμποδίζει το κλείσιμο των ακόλουθων ζητημάτων
-issues.dependency.issue_close_blocked=Πρέπει να κλείσετε όλα τα ζητήματα που εμποδίζουν αυτό το ζήτημα πριν το κλείσετε.
issues.dependency.issue_batch_close_blocked=Δεν είναι δυνατό το ομαδικό κλείσιμο ζητημάτων που επιλέξατε, επειδή το ζήτημα #%d ακόμα έχει ανοιχτές εξαρτήσεις
-issues.dependency.pr_close_blocked=Πρέπει να κλείσετε όλα τα ζητήματα που εμποδίζουν αυτό το pull request για να μπορέσετε να το συγχωνεύσετε.
issues.dependency.blocks_short=Μπλοκάρει
issues.dependency.blocked_by_short=Εξαρτάται από
issues.dependency.remove_header=Αφαίρεση Εξάρτησης
@@ -1577,12 +1513,10 @@ issues.dependency.add_error_same_issue=Δεν μπορείτε να εξαρτά
issues.dependency.add_error_dep_issue_not_exist=Εξαρτώμενο ζήτημα δεν υπάρχει.
issues.dependency.add_error_dep_not_exist=Δεν υπάρχει η Εξάρτηση.
issues.dependency.add_error_dep_exists=Η Εξάρτηση υπάρχει ήδη.
-issues.dependency.add_error_cannot_create_circular=Δεν μπορείτε να δημιουργήσετε μια εξάρτηση με δύο ζητήματα που μπλοκάρουν το ένα το άλλο.
issues.dependency.add_error_dep_not_same_repo=Και τα δύο ζητήματα πρέπει να βρίσκονται στο ίδιο αποθετήριο.
issues.review.self.approval=Δεν μπορείτε να εγκρίνετε το δικό σας pull request.
issues.review.self.rejection=Δεν μπορείτε να ζητήσετε αλλαγές στο δικό σας pull request.
issues.review.approve=ενέκρινε αυτές τις αλλαγές %s
-issues.review.dismissed=απέρριψε την αξιολόγηση %s %s
issues.review.dismissed_label=Απορρίφθηκε
issues.review.left_comment=άφησε ένα σχόλιο
issues.review.content.empty=Θα πρέπει να αφήσετε ένα σχόλιο υποδεικνύοντας την ζητούμενη αλλαγή(ές).
@@ -1590,7 +1524,6 @@ issues.review.reject=ζήτησε αλλαγές %s
issues.review.wait=ζητήθηκε για αναθεώρηση %s
issues.review.add_review_request=ζητήθηκε αναθεώρηση από %s %s
issues.review.remove_review_request=αφαιρέθηκε αίτηση αναθεώρησης για %s %s
-issues.review.remove_review_request_self=αρνήθηκε να αναθεωρήσει %s
issues.review.pending=Εκκρεμεί
issues.review.pending.tooltip=Αυτό το σχόλιο προς το παρόν δεν είναι ορατό από άλλους χρήστες. Για να υποβάλετε τα σχόλιά σας, επιλέξτε "%s" -> "%s/%s/%s" στη κορυφή της σελίδας.
issues.review.review=Αξιολόγηση
@@ -1607,7 +1540,6 @@ issues.review.resolve_conversation=Επίλυση συνομιλίας
issues.review.un_resolve_conversation=Ανεπίλυτη συνομιλία
issues.review.resolved_by=σημείωση αυτή την συνομιλία ως επιλυμένη
issues.review.commented=Σχόλιο
-issues.assignee.error=Δεν προστέθηκαν όλοι οι παραλήπτες λόγω απροσδόκητου σφάλματος.
issues.reference_issue.body=Σώμα
issues.content_history.deleted=διαγράφηκε
issues.content_history.edited=επεξεργάστηκε
@@ -1642,7 +1574,6 @@ pulls.show_all_commits=Εμφάνιση όλων των υποβολών
pulls.show_changes_since_your_last_review=Εμφάνιση αλλαγών από την τελευταία αξιολόγηση
pulls.showing_only_single_commit=Εμφάνιση μόνο αλλαγών της υποβολής %[1]s
pulls.showing_specified_commit_range=Εμφάνιση μόνο των αλλαγών μεταξύ %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Επιλέξτε υποβολή. Κρατήστε πατημένο το shift + κάντε κλικ για να επιλέξετε ένα εύρος
pulls.review_only_possible_for_full_diff=Η αξιολόγηση είναι δυνατή μόνο κατά την προβολή της πλήρης διαφοράς
pulls.filter_changes_by_commit=Φιλτράρισμα κατά υποβολή
pulls.nothing_to_compare=Αυτοί οι κλάδοι είναι όμοιοι. Δεν υπάρχει ανάγκη να δημιουργήσετε ένα pull request.
@@ -1691,30 +1622,20 @@ pulls.reject_count_1=%d αίτημα αλλαγής
pulls.reject_count_n=%d αιτήματα αλλαγής
pulls.waiting_count_1=%d αναμονή αναθεώρησης
pulls.waiting_count_n=%d αναμονή αναθεωρήσεων
-pulls.wrong_commit_id=Το id υποβολής πρέπει να είναι ένα id υποβολής στον κλάδο προορισμού
pulls.no_merge_desc=Αυτό το pull request δεν μπορεί να συγχωνευθεί επειδή όλες οι επιλογές συγχώνευσης αποθετηρίων είναι απενεργοποιημένες.
pulls.no_merge_helper=Ενεργοποιήστε τις επιλογές συγχώνευσης στις ρυθμίσεις αποθετηρίου ή συγχωνεύστε το pull request χειροκίνητα.
pulls.no_merge_wip=Αυτό το pull request δεν μπορεί να συγχωνευθεί, επειδή έχει επισημανθεί ως μια εργασία σε εξέλιξη.
-pulls.no_merge_not_ready=Αυτό το pull request δεν είναι έτοιμο για συγχώνευση, ελέγξτε την κατάσταση εξέτασης και τους ελέγχους κατάστασης.
pulls.no_merge_access=Δεν είστε εξουσιοδοτημένοι να συγχωνεύσετε αυτό το pull request.
pulls.merge_pull_request=Δημιουργία υποβολής συγχώνευσης
-pulls.rebase_merge_pull_request=Αλλαγή βάσης και μετά γρήγορα-μπροστά
-pulls.rebase_merge_commit_pull_request=Αλλαγής βάσης και δημιουργία υποβολής συγχώνευσης
pulls.squash_merge_pull_request=Δημιουργία υποβολής squash
pulls.merge_manually=Συγχωνεύτηκαν χειροκίνητα
pulls.merge_commit_id=Το ID της υποβολής συγχώνευσης
pulls.require_signed_wont_sign=Ο κλάδος απαιτεί υπογεγραμμένες υποβολές αλλά αυτή η συγχώνευση δεν θα υπογραφεί
pulls.invalid_merge_option=Δεν μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή συγχώνευσης για αυτό το pull request.
-pulls.merge_conflict=Η Συγχώνευση Απέτυχε: Υπήρξε μια διένεξη κατά τη συγχώνευση. Υπόδειξη: Δοκιμάστε μια διαφορετική στρατηγική
pulls.merge_conflict_summary=Μήνυμα Σφάλματος
-pulls.rebase_conflict=Η Συγχώνευση Απέτυχε: Υπήρξε μια σύγκρουση κατά την αλλαγή βάσης της υποβολής: %[1]s. Υπόδειξη: Δοκιμάστε μια διαφορετική στρατηγική
pulls.rebase_conflict_summary=Μήνυμα Σφάλματος
-pulls.unrelated_histories=H Συγχώνευση Απέτυχε: Η κεφαλή και η βάση της συγχώνευσης δεν μοιράζονται μια κοινή ιστορία. Συμβουλή: Δοκιμάστε μια διαφορετική στρατηγική
-pulls.merge_out_of_date=Η συγχώνευση απέτυχε: Κατά τη δημιουργία της συγχώνευσης, η βάση ενημερώθηκε. Συμβουλή: Δοκιμάστε ξανά.
-pulls.head_out_of_date=Η συγχώνευση απέτυχε: Κατά τη δημιουργία της συγχώνευσης, το HEAD ενημερώθηκε. Συμβουλή: Δοκιμάστε ξανά.
-pulls.has_merged=Αποτυχία: Το pull request έχει συγχωνευθεί, δεν είναι δυνατή η συγχώνευση ξανά ή να αλλάξει ο κλάδος προορισμού.
pulls.push_rejected_summary=Μήνυμα Πλήρους Απόρριψης
pulls.open_unmerged_pull_exists=`Δεν μπορείτε να ανοίξετε εκ νέου, επειδή υπάρχει ένα εκκρεμές pull request (#%d) με πανομοιότυπες ιδιότητες.`
pulls.status_checking=Μερικοί έλεγχοι εκκρεμούν
@@ -1739,7 +1660,6 @@ pulls.cmd_instruction_checkout_desc=Από το αποθετήριο του έρ
pulls.cmd_instruction_merge_title=Συγχώνευση
pulls.cmd_instruction_merge_desc=Συγχώνευση των αλλαγών και ενημέρωση στο Gitea.
pulls.clear_merge_message=Εκκαθάριση μηνύματος συγχώνευσης
-pulls.clear_merge_message_hint=Η εκκαθάριση του μηνύματος συγχώνευσης θα αφαιρέσει μόνο το περιεχόμενο του μηνύματος υποβολής και θα διατηρήσει τα παραγόμενα git trailers όπως "Co-Authored-By …".
pulls.auto_merge_button_when_succeed=(Όταν οι έλεγχοι πετύχουν)
pulls.auto_merge_when_succeed=Αυτόματη συγχώνευση όταν όλοι οι έλεγχοι πετύχουν
@@ -1792,12 +1712,10 @@ milestones.filter_sort.most_issues=Περισσότερα ζητήματα
milestones.filter_sort.least_issues=Λιγότερα ζητήματα
signing.will_sign=Αυτή η υποβολή θα υπογραφεί με το κλειδί "%s".
-signing.wont_sign.error=Παρουσιάστηκε σφάλμα κατά τον έλεγχο για το αν η υποβολή μπορεί να υπογραφεί.
signing.wont_sign.nokey=Δεν υπάρχει διαθέσιμο κλειδί για να υπογραφεί αυτή η υποβολή.
signing.wont_sign.never=Οι υποβολές δεν υπογράφονται ποτέ.
signing.wont_sign.always=Οι υποβολές υπογράφονται πάντα.
signing.wont_sign.pubkey=Η υποβολή δε θα υπογραφεί επειδή δεν υπάρχει δημόσιο κλειδί που να συνδέεται με το λογαριασμό σας.
-signing.wont_sign.twofa=Πρέπει να έχετε ενεργοποιημένη την ταυτοποίηση δύο παραγόντων για να υπογράφεται υποβολές.
signing.wont_sign.parentsigned=Η υποβολή δε θα υπογραφεί καθώς η γονική υποβολή δεν έχει υπογραφεί.
signing.wont_sign.basesigned=Η συγχώνευση δε θα υπογραφεί καθώς η βασική υποβολή δεν έχει υπογραφή της βάσης.
signing.wont_sign.headsigned=Η συγχώνευση δε θα υπογραφεί καθώς δεν έχει υπογραφή η υποβολή της κεφαλής.
@@ -1879,7 +1797,6 @@ activity.title.releases_1=%d Κυκλοφορία
activity.title.releases_n=%d Εκδόσεις
activity.title.releases_published_by=%s δημοσιεύτηκε από %s
activity.published_release_label=Δημοσιεύθηκε
-activity.no_git_activity=Δεν έχει υπάρξει καμία δραστηριότητα υποβολών σε αυτήν την περίοδο.
activity.git_stats_exclude_merges=Εκτός τις συγχωνεύσεις,
activity.git_stats_author_1=%d συγγραφέας
activity.git_stats_author_n=%d συγγραφείς
@@ -1904,7 +1821,6 @@ activity.git_stats_deletion_n=%d διαγραφές
contributors.contribution_type.commits=Υποβολές
settings=Ρυθμίσεις
-settings.desc=Στις Ρυθμίσεις μπορείτε να διαχειριστείτε τις ρυθμίσεις για το αποθετήριο
settings.options=Αποθετήριο
settings.collaboration=Συνεργάτες
settings.collaboration.admin=Διαχειριστής
@@ -1921,7 +1837,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Ρυθμίστε
settings.mirror_settings.docs.disabled_push_mirror.instructions=Ρυθμίστε το έργο σας να τραβά αυτόματα υποβολές, ετικέτες και κλάδους από ένα άλλο αποθετήριο.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Αυτή τη στιγμή, αυτό μπορεί να γίνει μόνο στο μενού "Νέα Μεταφορά". Για περισσότερες πληροφορίες, συμβουλευτείτε το:
settings.mirror_settings.docs.disabled_push_mirror.info=Τα είδωλα ώθησης έχουν απενεργοποιηθεί από το διαχειριστή σας.
-settings.mirror_settings.docs.no_new_mirrors=Το αποθετήριο σας αντιγράφει τις αλλαγές προς ή από ένα άλλο αποθετήριο. Λάβετε υπόψη ότι δεν μπορείτε να δημιουργήσετε νέα είδωλα αυτή τη στιγμή.
settings.mirror_settings.docs.can_still_use=Αν και δεν μπορείτε να τροποποιήσετε τα υπάρχοντα είδωλα ή να δημιουργήσετε νέα, μπορείτε να χρησιμοποιείται ακόμα το υπάρχων είδωλο.
settings.mirror_settings.docs.pull_mirror_instructions=Για να ορίσετε έναν είδωλο έλξης, παρακαλούμε συμβουλευθείτε:
settings.mirror_settings.docs.more_information_if_disabled=Μπορείτε να μάθετε περισσότερα για τα είδωλα ώθησης και έλξης εδώ:
@@ -1989,7 +1904,6 @@ settings.admin_indexer_commit_sha=Τελευταίο Indexed SHA
settings.admin_indexer_unindexed=Unindexed
settings.reindex_button=Προσθήκη στην Ουρά Reindex
settings.reindex_requested=Αιτήθηκε Reindex
-settings.admin_enable_close_issues_via_commit_in_any_branch=Κλείσιμο ενός ζητήματος μέσω μιας υποβολής που έγινε σε έναν μη προεπιλεγμένο κλάδο
settings.danger_zone=Επικίνδυνη Περιοχή
settings.new_owner_has_same_repo=Ο νέος ιδιοκτήτης έχει ήδη ένα αποθετήριο με το ίδιο όνομα. Παρακαλώ επιλέξτε ένα άλλο όνομα.
settings.convert=Μετατροπή σε Κανονικό Αποθετήριο
@@ -2010,7 +1924,6 @@ settings.transfer_abort_invalid=Δεν μπορείτε να ακυρώσετε
settings.transfer_abort_success=Η μεταφορά αποθετηρίου στο %s ακυρώθηκε με επιτυχία.
settings.transfer_desc=Μεταβιβάστε αυτό το αποθετήριο σε έναν χρήστη ή σε έναν οργανισμό για τον οποίο έχετε δικαιώματα διαχειριστή.
settings.transfer_form_title=Εισάγετε το όνομα του αποθετηρίου ως επιβεβαίωση:
-settings.transfer_in_progress=Αυτή τη στιγμή υπάρχει μια εν εξελίξει μεταβίβαση. Παρακαλούμε ακυρώστε την αν θέλετε να μεταβιβάσετε αυτό το αποθετήριο σε άλλο χρήστη.
settings.transfer_notices_1=- Θα χάσετε την πρόσβαση στο αποθετήριο αν το μεταβιβάσετε σε έναν μεμονωμένο χρήστη.
settings.transfer_notices_2=- Θα διατηρήσετε την πρόσβαση στο αποθετήριο αν το μεταβιβάσετε σε έναν οργανισμό που είστε (συν)ιδιοκτήτης.
settings.transfer_notices_3=- Εάν το αποθετήριο είναι ιδιωτικό και μεταβιβάζεται σε μεμονωμένο χρήστη, αυτή η ενέργεια εξασφαλίζει ότι ο χρήστης έχει τουλάχιστον άδεια ανάγνωσης (και αλλάζει τα δικαιώματα εάν είναι απαραίτητο).
@@ -2024,13 +1937,9 @@ settings.trust_model.default=Προεπιλεγμένο Μοντέλο Εμπι
settings.trust_model.default.desc=Χρησιμοποιήστε το προεπιλεγμένο μοντέλο εμπιστοσύνης αποθετηρίου για αυτήν την εγκατάσταση.
settings.trust_model.collaborator=Συνεργάτης
settings.trust_model.collaborator.long=Συνεργάτης: Εμπιστοσύνη υπογραφών από συνεργάτες
-settings.trust_model.collaborator.desc=Οι έγκυρες υπογραφές από συνεργάτες αυτού του αποθετηρίου θα επισημαίνονται ως "αξιόπιστη" - (είτε ταιριάζουν με τον υποβολέα είτε όχι). Διαφορετικά, οι έγκυρες υπογραφές θα επισημανθούν "μη αξιόπιστη" αν η υπογραφή ταιριάζει με τον υποβολέα και "δεν ταιριάζει" αν όχι.
settings.trust_model.committer=Υποβολέας
-settings.trust_model.committer.long=Υποβολέας: Οι υπογραφές εμπιστοσύνης που ταιριάζουν σε υποβολείς (Αυτό ταιριάζει με το GitHub και θα αναγκάσει τις υπογεγραμμένες υποβολές από το Gitea να το έχουν ως υποβολέα)
-settings.trust_model.committer.desc=Οι έγκυρες υπογραφές θα σημαίνονται ώς "αξιόπιστη" μόνο εάν ταιριάζουν με τον υποβολέα, διαφορετικά θα σημαίνωνται ως "δεν ταιριάζει". Αυτό αναγκάζει το Gitea να είναι ο υποβολέας στις υπογεγραμμένες υποβολές με τον πραγματικό υποβολέα να αναφέρεται στην σημείωση Co-authored-by: και Co-committed-by: στην υποβολή. Το προεπιλεγμένο κλειδί Gitea πρέπει να ταιριάζει σε ένα Χρήστη στη βάση δεδομένων.
settings.trust_model.collaboratorcommitter=Συνεργάτης+Υποβολέας
settings.trust_model.collaboratorcommitter.long=Συνεργάτης+Υποβολέας: Εμπιστοσύνη υπογραφών από συνεργάτες που ταιριάζουν με τον υποβολέα
-settings.trust_model.collaboratorcommitter.desc=Έγκυρες υπογραφές από συνεργάτες αυτού του αποθετηρίου θα επισημανθούν ως "αξιόπιστες" αν ταιριάζουν με τον υποβολέα. Διαφορετικά, οι έγκυρες υπογραφές θα φέρουν την ένδειξη "μη αξιόπιστη" αν η υπογραφή ταιριάζει με τον υποβολέα και "δεν ταιριάζει" διαφορετικά. Αυτό θα αναγκάσει το Gitea να επισημανθεί ως ο υποβολέας στις υπογεγραμμένες υποβολές με τον πραγματικό υποβολέα να σημειώνεται ως Co-Authored-By: και Co-Committed-By: στο τέλος της υποβολής. Το προεπιλεγμένο κλειδί Gitea πρέπει να ταιριάζει με έναν χρήστη στη βάση δεδομένων.
settings.wiki_delete=Διαγραφή Δεδομένων Wiki
settings.wiki_delete_desc=Η διαγραφή των δεδομένων του wiki του αποθετηρίου είναι μόνιμη και δεν μπορεί να αναιρεθεί.
settings.wiki_delete_notices_1=- Αυτό θα διαγράψει μόνιμα και θα απενεργοποιήσει το wiki του αποθετηρίου για %s.
@@ -2039,7 +1948,6 @@ settings.wiki_deletion_success=Τα δεδομένα wiki του αποθετη
settings.delete=Διαγραφή Αυτού Του Αποθετηρίου
settings.delete_desc=Η διαγραφή ενός αποθετηρίου είναι μόνιμη και δεν μπορεί να αναιρεθεί.
settings.delete_notices_1=- Αυτή η ενέργεια ΔΕΝ ΜΠΟΡΕΙ να αναιρεθεί.
-settings.delete_notices_2=- Αυτή η ενέργεια θα διαγράψει μόνιμα το αποθετήριο %s συμπεριλαμβανομένου του κώδικα, των προβλημάτων, σχολίων, δεδομένων wiki και των ρυθμίσεων συνεργατών.
settings.delete_notices_fork_1=- Τα Forks αυτού του αποθετηρίου θα γίνουν ανεξάρτητα μετά τη διαγραφή.
settings.deletion_success=Το αποθετήριο έχει διαγραφεί.
settings.update_settings_success=Οι ρυθμίσεις του αποθετηρίου έχουν ενημερωθεί.
@@ -2060,8 +1968,6 @@ settings.team_not_in_organization=Η ομάδα δεν είναι στον ίδ
settings.teams=Ομάδες
settings.add_team=Προσθήκη Ομάδας
settings.add_team_duplicate=Η ομάδα έχει ήδη το αποθετήριο
-settings.add_team_success=Η ομάδα έχει πλέον πρόσβαση στο αποθετήριο.
-settings.change_team_permission_tip=Τα δικαιώματα της ομάδας έχουν οριστεί στη σελίδα ρυθμίσεων της ομάδας και δεν μπορούν να αλλάξουν ανά αποθετήριο
settings.delete_team_tip=Αυτή η ομάδα έχει πρόσβαση σε όλα τα αποθετήρια και δεν μπορεί να αφαιρεθεί
settings.remove_team_success=Έχει αφαιρεθεί η πρόσβαση της ομάδας στο αποθετήριο.
settings.add_webhook=Προσθήκη Webhook
@@ -2070,8 +1976,6 @@ settings.hooks_desc=Τα Webhooks κάνουν αυτόματα αιτήσεις
settings.webhook_deletion=Αφαίρεση Webhook
settings.webhook_deletion_desc=Η αφαίρεση ενός webhook διαγράφει τις ρυθμίσεις και το ιστορικό παραδόσεων. Συνέχεια;
settings.webhook_deletion_success=Το webhook έχει αφαιρεθεί.
-settings.webhook.test_delivery=Δοκιμή Παράδοσης
-settings.webhook.test_delivery_desc=Δοκιμάστε αυτό το webhook με ένα ψεύτικο συμβάν.
settings.webhook.test_delivery_desc_disabled=Για να δοκιμάσετε αυτό το webhook με μια ψεύτικη κλήση, ενεργοποιήστε το.
settings.webhook.request=Αίτημα
settings.webhook.response=Απάντηση
@@ -2117,7 +2021,6 @@ settings.event_repository=Αποθετήριο
settings.event_repository_desc=Το αποθετήριο δημιουργήθηκε ή διαγράφηκε.
settings.event_header_issue=Γεγονότα Ζητήματος
settings.event_issues=Ζητήματα
-settings.event_issues_desc=Το ζήτημα άνοιξε, έκλεισε, ανοίχθηκε εκ νέου ή επεξεργάστηκε.
settings.event_issue_assign=Ζήτημα Ανατέθηκε
settings.event_issue_assign_desc=Ζήτημα εκχωρημένο ή μη εκχωρημένο.
settings.event_issue_label=Σήμανση Ζητήματος
@@ -2128,7 +2031,6 @@ settings.event_issue_comment=Σχόλιο Ζητήματος
settings.event_issue_comment_desc=Το σχόλιο στο ζήτημα δημιουργήθηκε, επεξεργάστηκε ή διαγράφηκε.
settings.event_header_pull_request=Γεγονότα Pull Requests
settings.event_pull_request=Pull Request
-settings.event_pull_request_desc=Το pull request άνοιξε, έκλεισε, άνοιξε εκ νέου ή επεξεργάστηκε.
settings.event_pull_request_assign=Το Pull Request Ανατέθηκε
settings.event_pull_request_assign_desc=Το pull request ανατέθηκε ή έγινε αδιάθετο.
settings.event_pull_request_label=Σήμανση Pull Request
@@ -2267,7 +2169,6 @@ settings.archive.branchsettings_unavailable=Οι ρυθμίσεις του κλ
settings.archive.tagsettings_unavailable=Οι ρυθμίσεις της ετικέτας δεν είναι διαθέσιμες αν το αποθετήριο είναι αρχειοθετημένο.
settings.unarchive.button=Απο-Αρχειοθέτηση αποθετηρίου
settings.unarchive.header=Απο-Αρχειοθέτηση του αποθετηρίου
-settings.unarchive.text=Η απο-αρχειοθέτηση του αποθετηρίου θα αποκαταστήσει την ικανότητά του να λαμβάνει υποβολές και ωθήσεις, καθώς και νέα ζητήματα και pull-requests.
settings.unarchive.success=Το αποθετήριο απο-αρχειοθετήθηκε με επιτυχία.
settings.unarchive.error=Παρουσιάστηκε σφάλμα κατά την προσπάθεια απο-αρχειοθέτησης του αποθετηρίου. Δείτε τις καταγραφές για περισσότερες λεπτομέρειες.
settings.update_avatar_success=Η εικόνα του αποθετηρίου έχει ενημερωθεί.
@@ -2285,11 +2186,9 @@ settings.lfs_invalid_locking_path=Μη έγκυρη διαδρομή: %s
settings.lfs_invalid_lock_directory=Αδυναμία κλειδώματος φακέλου: %s
settings.lfs_lock_already_exists=Το κλείδωμα υπάρχει ήδη: %s
settings.lfs_lock=Κλείδωμα
-settings.lfs_lock_path=Διαδρομή αρχείου για να κλειδωθεί...
settings.lfs_locks_no_locks=Χωρίς Κλειδώματα
settings.lfs_lock_file_no_exist=Το κλειδωμένο αρχείο δεν υπάρχει στον προεπιλεγμένο κλάδο
settings.lfs_force_unlock=Εξαναγκασμός Ξεκλειδώματος
-settings.lfs_pointers.found=Βρέθηκαν %d δείκτης(ες) blob - %d συσχετίστηκαν, %d δεν συσχετίστηκαν (%d λείπουν από το χώρο αποθήκευσης)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Στο Αποθετήριο
@@ -2491,7 +2390,6 @@ form.create_org_not_allowed=Δεν επιτρέπεται να δημιουργ
settings=Ρυθμίσεις
settings.options=Οργανισμός
settings.full_name=Πλήρες Όνομα
-settings.email=Email Επικοινωνίας
settings.website=Ιστοσελίδα
settings.location=Τοποθεσία
settings.permission=Δικαιώματα
@@ -2505,15 +2403,13 @@ settings.visibility.private_shortname=Ιδιωτικός
settings.update_settings=Ενημέρωση Ρυθμίσεων
settings.update_setting_success=Οι ρυθμίσεις του οργανισμού έχουν ενημερωθεί.
-settings.change_orgname_prompt=Σημείωση: Η αλλαγή του ονόματος του οργανισμού θα αλλάξει επίσης τη διεύθυνση URL του οργανισμού σας και θα απελευθερώσει το παλιό όνομα.
-settings.change_orgname_redirect_prompt=Το παλιό όνομα θα ανακατευθύνει μέχρι να διεκδικηθεί.
+
+
settings.update_avatar_success=Η εικόνα του οργανισμού έχει ενημερωθεί.
settings.delete=Διαγραφή Οργανισμού
settings.delete_account=Διαγραφή Αυτού Του Οργανισμού
settings.delete_prompt=Ο οργανισμός θα αφαιρεθεί οριστικά. Αυτό το ΔΕΝ ΜΠΟΡΕΙ να αναιρεθεί!
settings.confirm_delete_account=Επιβεβαίωση Διαγραφής
-settings.delete_org_title=Διαγραφή Οργανισμού
-settings.delete_org_desc=Αυτός ο οργανισμός θα διαγραφεί οριστικά. Συνέχεια;
settings.hooks_desc=Προσθήκη webhooks που θα ενεργοποιούνται για όλα τα αποθετήρια κάτω από αυτό τον οργανισμό.
settings.labels_desc=Προσθήκη σημάτων που μπορούν να χρησιμοποιηθούν σε ζητήματα για όλα τα αποθετήρια κάτω από αυτό τον οργανισμό.
@@ -2568,7 +2464,6 @@ teams.remove_all_repos_title=Αφαίρεση όλων των αποθετηρί
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.members.none=Δεν υπάρχουν μέλη σε αυτήν την ομάδα.
@@ -2595,7 +2490,6 @@ repositories=Αποθετήρια
hooks=Webhooks
integrations=Ενσωματώσεις
authentication=Πηγές Ταυτοποίησης
-emails=Email Χρήστη
config=Διαμόρφωση
config_summary=Περίληψη
config_settings=Ρυθμίσεις
@@ -2625,27 +2519,17 @@ dashboard.cron.cancelled=Προγραμματισμένη εργασία: %[1]s
dashboard.cron.error=Σφάλμα στη Προγραμματισμένη Εργασία: %s: %[3]s
dashboard.cron.finished=Προγραμματισμένη Εργασία: %[1]s τελείωσε
dashboard.delete_inactive_accounts=Διαγραφή όλων των μη ενεργοποιημένων λογαριασμών
-dashboard.delete_inactive_accounts.started=Η διαγραφή όλων των μη ενεργοποιημένων λογαριασμών ξεκίνησε.
dashboard.delete_repo_archives=Διαγραφή όλων των αρχείων λήψης του αποθετηρίου (ZIP, TAR.GZ, κλπ..)
-dashboard.delete_repo_archives.started=Η διαγραφή όλων των αρχείων λήψης του αποθετηρίου ξεκίνησε.
dashboard.delete_missing_repos=Διαγραφή όλων των αποθετηρίων που δεν έχουν τα αρχεία Git τους
-dashboard.delete_missing_repos.started=Η διαγραφή όλων των αποθετηρίων που δεν έχουν αρχεία Git τους, ξεκίνησε.
dashboard.delete_generated_repository_avatars=Διαγραφή δημιουργημένων εικόνων αποθετηρίων
dashboard.sync_repo_branches=Συγχρονισμός κλάδων που λείπουν, από τα δεδομένα git στις βάσεις δεδομένων
dashboard.update_mirrors=Ενημέρωση Ειδώλων
dashboard.repo_health_check=Έλεγχος υγείας σε όλα τα αποθετήρια
dashboard.check_repo_stats=Έλεγχος όλων των στατιστικών αποθετηρίων
dashboard.archive_cleanup=Διαγραφή παλαιών αρχείων λήψης αποθετηρίων
-dashboard.deleted_branches_cleanup=Εκκαθάριση διαγραμμένων κλάδων
dashboard.update_migration_poster_id=Ενημέρωση των ID συντακτών στη μεταγκατάσταση
-dashboard.git_gc_repos=Garbage collect όλων των αποθετηρίων
-dashboard.resync_all_sshkeys=Ενημέρωση του αρχείου '.ssh/authorized_keys' με τα κλειδιά SSH του Gitea.
-dashboard.resync_all_sshprincipals=Ενημέρωση του αρχείου '.ssh/authorized_principals' με τις αρχές SSH του Gitea.
-dashboard.resync_all_hooks=Επανασυγχρονισμός των hook pre-receive, update και post-receive όλων των αποθετηρίων.
dashboard.reinit_missing_repos=Επανεκκινήστε όλα τα αποθετήρια Git που λείπουν και για τα οποία υπάρχουν εγγραφές
dashboard.sync_external_users=Συγχρονισμός δεδομένων εξωτερικών χρηστών
-dashboard.cleanup_hook_task_table=Εκκαθάριση πίνακα hook_task
-dashboard.cleanup_packages=Εκκαθάριση ληγμένων πακέτων
dashboard.server_uptime=Διάρκεια Διακομιστή
dashboard.current_goroutine=Τρέχουσες Goroutines
dashboard.current_memory_usage=Τρέχουσα Χρήση Μνήμης
@@ -2677,7 +2561,6 @@ dashboard.last_gc_pause=Τελευταία Παύση GC
dashboard.gc_times=Πλήθος GC
dashboard.update_checker=Ελεγκτής ενημερώσεων
dashboard.delete_old_system_notices=Διαγραφή όλων των παλιών ειδοποιήσεων συστήματος από τη βάση δεδομένων
-dashboard.gc_lfs=Συλλογή απορριμάτων στα μετα-αντικείμενα LFS
dashboard.sync_branch.started=Ο Συγχρονισμός των Κλάδων ξεκίνησε
dashboard.rebuild_issue_indexer=Αναδόμηση ευρετηρίου ζητημάτων
@@ -2695,7 +2578,6 @@ users.2fa=2FA
users.repos=Αποθετήρια
users.created=Δημιουργήθηκε
users.last_login=Τελευταία Σύνδεση
-users.never_login=Καμία Σύνδεση
users.send_register_notify=Αποστολή Ειδοποίησης Εγγραφής Χρήστη
users.new_success=Ο λογαριασμός χρήστη "%s" δημιουργήθηκε.
users.edit=Επεξεργασία
@@ -2722,7 +2604,6 @@ users.still_own_repo=Αυτός ο χρήστης εξακολουθεί να κ
users.still_has_org=Αυτός ο χρήστης είναι μέλος ενός οργανισμού. Αφαιρέστε πρώτα τον χρήστη από οποιονδήποτε οργανισμό.
users.purge=Εκκαθάριση Χρήστη
users.purge_help=Αναγκαστική διαγραφή χρήστη και των αποθετηρίων, οργανισμών και πακέτων που του ανήκουν. Όλα τα σχόλια επίσης θα διαγραφούν.
-users.still_own_packages=Αυτός ο χρήστης εξακολουθεί να κατέχει ένα ή περισσότερα πακέτα, διαγράψτε αυτά τα πακέτα πρώτα.
users.deletion_success=Ο λογαριασμός χρήστη έχει διαγραφεί.
users.reset_2fa=Επαναφορά 2FA
users.list_status_filter.menu_text=Φίλτρο
@@ -2742,11 +2623,7 @@ users.details=Λεπτομέρειες Χρήστη
emails.email_manage_panel=Διαχείριση Email Χρήστη
emails.primary=Κύριο
emails.activated=Ενεργοποιήθηκε
-emails.filter_sort.email=Email
-emails.filter_sort.email_reverse=Email (αντίστροφη)
emails.filter_sort.name=Όνομα Χρήστη
-emails.filter_sort.name_reverse=Όνομα Χρήστη (αντίστροφα)
-emails.updated=Το email ενημερώθηκε
emails.not_updated=Αποτυχία ενημέρωσης της ζητούμενης διεύθυνσης email: %v
emails.duplicate_active=Αυτή η διεύθυνση email είναι ήδη ενεργή σε διαφορετικό χρήστη.
emails.change_email_header=Ενημέρωση Ιδιοτήτων Email
@@ -2862,26 +2739,18 @@ auths.oauth2_required_claim_name_helper=Ορίστε αυτό το όνομα γ
auths.oauth2_required_claim_value=Απαιτούμενη Τιμή Claim
auths.oauth2_required_claim_value_helper=Ορίστε αυτήν την τιμή για να περιορίσετε τη σύνδεση από αυτή την πηγή στους χρήστες με ένα claim με αυτό το όνομα και την τιμή
auths.oauth2_group_claim_name=Όνομα claim που παρέχει ονόματα ομάδων για αυτήν την πηγή. (Προαιρετικό)
-auths.oauth2_admin_group=Τιμή Group Claim για διαχειριστές. (Προαιρετικό - απαιτεί όνομα claim παραπάνω)
-auths.oauth2_restricted_group=Τιμή Group Claim για περιορισμένους χρήστες (Προαιρετικό - απαιτεί όνομα claim παραπάνω)
-auths.oauth2_map_group_to_team=Αντιστοίχιση των απαιτούμενων ομάδων σε ομάδες Οργανισμού. (Προαιρετικό - απαιτείται το όνομα της απαίτησης παραπάνω)
auths.oauth2_map_group_to_team_removal=Αφαίρεση χρηστών από τις συγχρονισμένες ομάδες, εάν ένας χρήστης δεν ανήκει στην αντίστοιχη ομάδα.
auths.enable_auto_register=Ενεργοποίηση Αυτόματης Εγγραφής
auths.sspi_auto_create_users=Αυτόματη δημιουργία χρηστών
-auths.sspi_auto_create_users_helper=Επιτρέψτε στη μέθοδο πιστοποίησης SSPI να δημιουργεί αυτόματα νέους λογαριασμούς για χρήστες που συνδέονται για πρώτη φορά
auths.sspi_auto_activate_users=Αυτόματη ενεργοποίηση χρηστών
auths.sspi_auto_activate_users_helper=Επιτρέψτε στη μέθοδο πιστοποίησης SSPI να ενεργοποιεί αυτόματα νέους χρήστες
auths.sspi_strip_domain_names=Αφαίρεση του ονόματος domain από το ονόμα χρήστη
-auths.sspi_strip_domain_names_helper=Αν επιλεχθεί, τα ονόματα τομέα θα αφαιρεθούν από τα ονόματα σύνδεσης (π.χ. "DOMAIN\user" και "user@example.org" θα γίνουν μόνο "user").
auths.sspi_separator_replacement=Διαχωριστικό για χρήση αντί του \, / και του @
-auths.sspi_separator_replacement_helper=Ο χαρακτήρας που θα χρησιμοποιηθεί για να αντικαταστήσει τους διαχωριστές των ονομάτων σύνδεσης (π.χ. το \ στο "DOMAIN\user") και κύρια ονόματα χρηστών (π.χ. το @ στο "user@example.org").
auths.sspi_default_language=Προεπιλεγμένη γλώσσα χρήστη
-auths.sspi_default_language_helper=Προεπιλεγμένη γλώσσα για τους χρήστες που δημιουργούνται αυτόματα με τη μέθοδο ταυτοποίησης SSPI. Αφήστε κενό αν προτιμάτε η γλώσσα να εντοπιστεί αυτόματα.
auths.tips=Συμβουλές
auths.tips.oauth2.general=Ταυτοποίηση OAuth2
auths.tips.oauth2.general.tip=Κατά την εγγραφή μιας νέας ταυτοποίησης OAuth2, το URL κλήσης/ανακατεύθυνσης πρέπει να είναι:
auths.tip.oauth2_provider=Πάροχος OAuth2
-auths.tip.nextcloud=`Καταχωρήστε ένα νέο καταναλωτή OAuth στην υπηρεσία σας χρησιμοποιώντας το παρακάτω μενού "Settings -> Security -> OAuth 2.0 client"`
auths.tip.mastodon=Εισαγάγετε ένα προσαρμομένο URL για την υπηρεσία mastodon με την οποία θέλετε να πιστοποιήσετε (ή να χρησιμοποιήσετε την προεπιλεγμένη)
auths.edit=Επεξεργασία Πηγής Ταυτοποίησης
auths.activated=Αυτή η Πηγή Ταυτοποίησης είναι Ενεργοποιημένη
@@ -2981,7 +2850,6 @@ config.mailer_sendmail_path=Διαδρομή Sendmail
config.mailer_sendmail_args=Επιπλέον παράμετροι για το Sendmail
config.mailer_sendmail_timeout=Χρονικό Όριο Sendmail
config.mailer_use_dummy=Ψεύτικο
-config.test_email_placeholder=Email (π.χ. test@example.com)
config.send_test_mail=Αποστολή Δοκιμαστικού Email
config.send_test_mail_submit=Αποστολή
config.test_mail_failed=Αποτυχία αποστολής ενός δοκιμαστικού email στο"%s": %v
@@ -3061,7 +2929,6 @@ monitor.queue.numberinqueue=Πλήθος Ουράς
monitor.queue.review_add=Εξέταση / Προσθήκη Εργατών
monitor.queue.settings.title=Ρυθμίσεις Δεξαμενής
monitor.queue.settings.desc=Οι δεξαμενές αυξάνονται δυναμικά όταν υπάρχει φραγή της ουράς των εργατών τους.
-monitor.queue.settings.maxnumberworkers=Μέγιστος Αριθμός Εργατών
monitor.queue.settings.maxnumberworkers.placeholder=Αυτή τη στιγμή %[1]d
monitor.queue.settings.maxnumberworkers.error=Ο μέγιστος αριθμός εργατών πρέπει να είναι αριθμός
monitor.queue.settings.submit=Ενημέρωση Ρυθμίσεων
@@ -3164,8 +3031,6 @@ 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=Μονάδα
@@ -3202,7 +3067,6 @@ versions=Εκδόσεις
versions.view_all=Προβολή όλων
dependency.id=ID
dependency.version=Έκδοση
-alpine.registry=Ρυθμίστε αυτό το μητρώο προσθέτοντας το url στο αρχείο /etc/apk/repositories:
alpine.registry.key=Αποθηκεύστε το δημόσιο κλειδί RSA του μητρώου στο φάκελο /etc/apk/keys/ για να επαληθεύσετε την υπογραφή ευρετηρίου:
alpine.registry.info=Επιλέξτε $branch και $repository από την παρακάτω λίστα.
alpine.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
@@ -3213,18 +3077,13 @@ alpine.repository.architectures=Αρχιτεκτονικές
arch.repository=Πληροφορίες Αποθετηρίου
arch.repository.repositories=Αποθετήρια
arch.repository.architectures=Αρχιτεκτονικές
-cargo.registry=Ρυθμίστε αυτό το μητρώο στις ρυθμίσεις του Cargo (για παράδειγμα ~/.cargo/config.toml):
cargo.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το Cargo, εκτελέστε την ακόλουθη εντολή:
-chef.registry=Ρυθμίστε αυτό το μητρώο στο αρχείο ~/.chef/config.rb:
chef.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
-composer.registry=Ρυθμίστε αυτό το μητρώο στο αρχείο ~/.composer/config.json:
composer.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το Composer, εκτελέστε την ακόλουθη εντολή:
composer.dependencies=Εξαρτήσεις
composer.dependencies.development=Εξαρτήσεις Ανάπτυξης
conan.details.repository=Αποθετήριο
-conan.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
conan.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το Conan, εκτελέστε την ακόλουθη εντολή:
-conda.registry=Ρυθμίστε αυτό το μητρώο ως αποθετήριο Conda στο αρχείο .condarc:
conda.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το Conda, εκτελέστε την ακόλουθη εντολή:
container.details.type=Τύπος Εικόνας
container.details.platform=Πλατφόρμα
@@ -3234,9 +3093,7 @@ container.layers=Στρώματα Εικόνας
container.labels=Ετικέτες
container.labels.key=Κλειδί
container.labels.value=Τιμή
-cran.registry=Ρυθμίστε αυτό το μητρώο στο αρχείο Rprofile.site:
cran.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
-debian.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
debian.registry.info=Επιλέξτε $distribution και $component από την παρακάτω λίστα.
debian.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
debian.repository=Πληροφορίες Αποθετηρίου
@@ -3245,16 +3102,11 @@ debian.repository.components=Συστατικά
debian.repository.architectures=Αρχιτεκτονικές
generic.download=Λήψη πακέτου από τη γραμμή εντολών:
go.install=Εγκαταστήστε το πακέτο από τη γραμμή εντολών:
-helm.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
helm.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
-maven.registry=Ρυθμίστε αυτό το μητρώο στο αρχείο pom.xml του έργου σας:
-maven.install=Για να χρησιμοποιήσετε το πακέτο, συμπεριλάβετε τα ακόλουθα στη περιοχή dependencies στο αρχείο pom.xml:
maven.install2=Εκτέλεση μέσω γραμμής εντολών:
maven.download=Για να κατεβάσετε την εξάρτηση, εκτελέστε μέσω της γραμμής εντολών:
-nuget.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
nuget.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το NuGet, εκτελέστε την ακόλουθη εντολή:
nuget.dependency.framework=Πλαίσιο Ανάπτυξης
-npm.registry=Ρυθμίστε αυτό το μητρώο στο αρχείο .npmrc του έργου σας:
npm.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας npm, εκτελέστε την ακόλουθη εντολή:
npm.install2=ή προσθέστε το στο αρχείο package.json:
npm.dependencies=Εξαρτήσεις
@@ -3265,7 +3117,6 @@ npm.details.tag=Σήμανση
pub.install=Για να εγκαταστήσετε το πακέτο μέσω του Dart, εκτελέστε την ακόλουθη εντολή:
pypi.requires=Απαιτεί Python
pypi.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το pip, εκτελέστε την ακόλουθη εντολή:
-rpm.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
rpm.distros.redhat=σε διανομές βασισμένες στο RedHat
rpm.distros.suse=σε διανομές με βάση το SUSE
rpm.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
@@ -3277,7 +3128,6 @@ rubygems.dependencies.runtime=Εξαρτήσεις Εκτέλεσης
rubygems.dependencies.development=Εξαρτήσεις Ανάπτυξης
rubygems.required.ruby=Απαιτεί την έκδοση Ruby
rubygems.required.rubygems=Απαιτεί έκδοση RubyGem
-swift.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμή εντολών:
swift.install=Προσθέστε το πακέτο στο αρχείο Package.swift:
swift.install2=και εκτελέστε την ακόλουθη εντολή:
vagrant.install=Για προσθήκη ενός κυτίου Vagrant, εκτελέστε την ακόλουθη εντολή:
@@ -3300,7 +3150,6 @@ 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.cleanuprules.title=Διαχείριση Κανόνων Εκκαθάρισης
owner.settings.cleanuprules.add=Προσθήκη Κανόνα Εκκαθάρισης
owner.settings.cleanuprules.edit=Επεξεργασία Κανόνα Εκκαθάρισης
@@ -3383,7 +3232,6 @@ runners.delete_runner=Διαγραφή του εκτελεστή
runners.delete_runner_success=Ο εκτελεστής διαγράφηκε επιτυχώς
runners.delete_runner_failed=Αποτυχία διαγραφής εκτελεστή
runners.delete_runner_header=Επιβεβαιώστε για τη διαγραφή του εκτελεστή
-runners.delete_runner_notice=Αν μια εργασία εκτελείται σε αυτόν τον εκτελεστή, θα τερματιστεί και θα επισημανθεί ως αποτυχημένη. Μπορεί να σπάσει το χτίσιμο της ροής εργασίας.
runners.none=Δεν υπάρχουν διαθέσιμοι εκτελεστές
runners.status.unspecified=Άγνωστη
runners.status.idle=Αδρανής
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 75aadb148db..09a17c645d6 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -44,7 +44,7 @@ webauthn_use_twofa = Use a two-factor code from your phone
webauthn_error = Could not read your security key.
webauthn_unsupported_browser = Your browser does not currently support WebAuthn.
webauthn_error_unknown = An unknown error occurred. Please retry.
-webauthn_error_insecure = WebAuthn only supports secure connections. For testing over HTTP, you can use the origin "localhost" or "127.0.0.1"
+webauthn_error_insecure = WebAuthn only supports secure connections. For testing over HTTP, you can use the origin "localhost" or "127.0.0.1".
webauthn_error_unable_to_process = The server could not process your request.
webauthn_error_duplicated = The security key is not permitted for this request. Please make sure that the key is not already registered.
webauthn_error_empty = You must set a name for this key.
@@ -117,9 +117,10 @@ files = Files
error = Error
error404 = The page you are trying to reach either does not exist or you are not authorized to view it.
-error503 = The server was unable to complete your request. Please try again later.
+error503 = The server could not complete your request. Please try again later.
go_back = Go Back
invalid_data = Invalid data: %v
+nothing_has_been_changed = Nothing has been changed.
never = Never
unknown = Unknown
@@ -131,7 +132,7 @@ unpin = Unpin
artifacts = Artifacts
expired = Expired
-confirm_delete_artifact = Are you sure you want to delete the artifact '%s' ?
+confirm_delete_artifact = Are you sure you want to delete the artifact '%s'?
archived = Archived
@@ -168,33 +169,33 @@ no_results_found = No results found.
internal_error_skipped = Internal error occurred but is skipped: %s
[search]
-search = Search...
+search = Search…
type_tooltip = Search type
fuzzy = Fuzzy
-fuzzy_tooltip = Include results that also match the search term closely
+fuzzy_tooltip = Include results that closely match the search term
words = Words
words_tooltip = Include only results that match the search term words
regexp = Regexp
regexp_tooltip = Include only results that match the regexp search term
exact = Exact
exact_tooltip = Include only results that match the exact search term
-repo_kind = Search repos...
-user_kind = Search users...
-org_kind = Search orgs...
-team_kind = Search teams...
-code_kind = Search code...
+repo_kind = Search repos…
+user_kind = Search users…
+org_kind = Search orgs…
+team_kind = Search teams…
+code_kind = Search code…
code_search_unavailable = Code search is currently not available. Please contact the site administrator.
code_search_by_git_grep = Current code search results are provided by "git grep". There might be better results if site administrator enables Repository Indexer.
-package_kind = Search packages...
-project_kind = Search projects...
-branch_kind = Search branches...
-tag_kind = Search tags...
+package_kind = Search packages…
+project_kind = Search projects…
+branch_kind = Search branches…
+tag_kind = Search tags…
tag_tooltip = Search for matching tags. Use '%' to match any sequence of numbers.
-commit_kind = Search commits...
-runner_kind = Search runners...
+commit_kind = Search commits…
+runner_kind = Search runners…
no_results = No matching results found.
-issue_kind = Search issues...
-pull_kind = Search pulls...
+issue_kind = Search issues…
+pull_kind = Search pull requests…
keyword_search_unavailable = Searching by keyword is currently not available. Please contact the site administrator.
[aria]
@@ -230,8 +231,8 @@ buttons.enable_monospace_font = Enable monospace font
buttons.disable_monospace_font = Disable monospace font
[filter]
-string.asc = A - Z
-string.desc = Z - A
+string.asc = A–Z
+string.desc = Z–A
[error]
occurred = An error occurred
@@ -252,7 +253,7 @@ license_desc = Go get
[install]
install = Installation
-installing_desc = Installing now, please wait...
+installing_desc = Installing now, please wait…
title = Initial Configuration
docker_helper = If you run Gitea inside Docker, please read the documentation before changing any settings.
require_db_desc = Gitea requires MySQL, PostgreSQL, MSSQL, SQLite3 or TiDB (MySQL protocol).
@@ -269,16 +270,16 @@ path = Path
sqlite_helper = File path for the SQLite3 database. Enter an absolute path if you run Gitea as a service.
reinstall_error = You are trying to install into an existing Gitea database
reinstall_confirm_message = Re-installing with an existing Gitea database can cause multiple problems. In most cases, you should use your existing "app.ini" to run Gitea. If you know what you are doing, confirm the following:
-reinstall_confirm_check_1 = The data encrypted by the SECRET_KEY in app.ini may be lost: users may not be able to log in with 2FA/OTP & mirrors may not function correctly. By checking this box you confirm that the current app.ini file contains the correct the SECRET_KEY.
-reinstall_confirm_check_2 = The repositories and settings may need to be re-synchronized. By checking this box you confirm that you will resynchronize the hooks for the repositories and authorized_keys file manually. You confirm that you will ensure that repository and mirror settings are correct.
+reinstall_confirm_check_1 = The data encrypted by the SECRET_KEY in app.ini may be lost: users may not be able to log in with 2FA/OTP and mirrors may not function correctly. By checking this box, you confirm that the current app.ini file contains the correct SECRET_KEY.
+reinstall_confirm_check_2 = The repositories and settings may need to be resynchronized. By checking this box, you confirm that you will resynchronize the hooks for the repositories and authorized_keys file manually. You confirm that you will ensure that repository and mirror settings are correct.
reinstall_confirm_check_3 = You confirm that you are absolutely sure that this Gitea is running with the correct app.ini location and that you are sure that you have to re-install. You confirm that you acknowledge the above risks.
err_empty_db_path = The SQLite3 database path cannot be empty.
no_admin_and_disable_registration = You cannot disable user self-registration without creating an administrator account.
err_empty_admin_password = The administrator password cannot be empty.
-err_empty_admin_email = The administrator email cannot be empty.
-err_admin_name_is_reserved = Administrator Username is invalid, username is reserved
-err_admin_name_pattern_not_allowed = Administrator username is invalid, the username matches a reserved pattern
-err_admin_name_is_invalid = Administrator Username is invalid
+err_empty_admin_email = The administrator email address cannot be empty.
+err_admin_name_is_reserved = Administrator username is invalid. Username is reserved.
+err_admin_name_pattern_not_allowed = Administrator username is invalid. The username matches a reserved pattern.
+err_admin_name_is_invalid = Administrator username is invalid
general_title = General Settings
app_name = Site Title
@@ -294,7 +295,7 @@ domain_helper = Domain or host address for the server.
ssh_port = SSH Server Port
ssh_port_helper = Port number your SSH server listens on. Leave empty to disable.
http_port = Gitea HTTP Listen Port
-http_port_helper = Port number the Giteas web server will listen on.
+http_port_helper = Port number the Gitea web server will listen on.
app_url = Gitea Base URL
app_url_helper = Base address for HTTP(S) clone URLs and email notifications.
log_root_path = Log Path
@@ -358,7 +359,7 @@ no_reply_address = Hidden Email Domain
no_reply_address_helper = Domain name for users with a hidden email address. For example, the username 'joe' will be logged in Git as 'joe@noreply.example.org' if the hidden email domain is set to 'noreply.example.org'.
password_algorithm = Password Hash Algorithm
invalid_password_algorithm = Invalid password hash algorithm
-password_algorithm_helper = Set the password hashing algorithm. Algorithms have differing requirements and strength. The argon2 algorithm is rather secure but uses a lot of memory and may be inappropriate for small systems.
+password_algorithm_helper = Set the password hashing algorithm. Algorithms have differing requirements and strengths. The argon2 algorithm is rather secure but uses a lot of memory and may be inappropriate for small systems.
enable_update_checker = Enable Update Checker
enable_update_checker_helper = Checks for new version releases periodically by connecting to gitea.io.
env_config_keys = Environment Configuration
@@ -421,6 +422,7 @@ remember_me.compromised = The login token is not valid anymore which may indicat
forgot_password_title= Forgot Password
forgot_password = Forgot password?
need_account = Need an account?
+sign_up_tip = You are registering the first account in the system, which has administrator privileges. Please carefully remember your username and password. If you forget the username or password, please refer to the Gitea documentation to recover the account.
sign_up_now = Register now.
sign_up_successful = Account was successfully created. Welcome!
confirmation_mail_sent_prompt_ex = A new confirmation email has been sent to %s . Please check your inbox within the next %s to complete the registration process. If your registration email address is incorrect, you can sign in again and change it.
@@ -429,8 +431,8 @@ allow_password_change = Require user to change password (recommended)
reset_password_mail_sent_prompt = A confirmation email has been sent to %s . Please check your inbox within the next %s to complete the account recovery process.
active_your_account = Activate Your Account
account_activated = Account has been activated
-prohibit_login = Sign In Prohibited
-prohibit_login_desc = Your account is prohibited from signing in, please contact your site administrator.
+prohibit_login = Sign-In Prohibited
+prohibit_login_desc = Your account is prohibited from signing in. Please contact your site administrator.
resent_limit_prompt = You have already requested an activation email recently. Please wait 3 minutes and try again.
has_unconfirmed_mail = Hi %s, you have an unconfirmed email address (%s ). If you haven't received a confirmation email or need to resend a new one, please click on the button below.
change_unconfirmed_mail_address = If your registration email address is incorrect, you can change it here and resend a new confirmation email.
@@ -451,7 +453,7 @@ use_scratch_code = Use a scratch code
twofa_scratch_used = You have used your scratch code. You have been redirected to the two-factor settings page so you may remove your device enrollment or generate a new scratch code.
twofa_passcode_incorrect = Your passcode is incorrect. If you misplaced your device, use your scratch code to sign in.
twofa_scratch_token_incorrect = Your scratch code is incorrect.
-twofa_required = You must setup Two-Factor Authentication to get access to repositories, or try to login again.
+twofa_required = You must set up two-factor authentication to get access to repositories, or try to log in again.
login_userpass = Sign In
login_openid = OpenID
oauth_signup_tab = Register New Account
@@ -463,24 +465,24 @@ oauth_signin_submit = Link Account
oauth.signin.error.general = There was an error processing the authorization request: %s. If this error persists, please contact the site administrator.
oauth.signin.error.access_denied = The authorization request was denied.
oauth.signin.error.temporarily_unavailable = Authorization failed because the authentication server is temporarily unavailable. Please try again later.
-oauth_callback_unable_auto_reg = Auto Registration is enabled, but OAuth2 Provider %[1]s returned missing fields: %[2]s, unable to create an account automatically, please create or link to an account, or contact the site administrator.
+oauth_callback_unable_auto_reg = Auto Registration is enabled, but OAuth2 Provider %[1]s returned missing fields: %[2]s, unable to create an account automatically. Please create or link to an account, or contact the site administrator.
openid_connect_submit = Connect
openid_connect_title = Connect to an existing account
openid_connect_desc = The chosen OpenID URI is unknown. Associate it with a new account here.
openid_register_title = Create new account
openid_register_desc = The chosen OpenID URI is unknown. Associate it with a new account here.
openid_signin_desc = Enter your OpenID URI. For example: alice.openid.example.org or https://openid.example.org/alice.
-disable_forgot_password_mail = Account recovery is disabled because no email is set up. Please contact your site administrator.
-disable_forgot_password_mail_admin = Account recovery is only available when email is set up. Please set up email to enable account recovery.
+disable_forgot_password_mail = Account recovery is disabled because no email address is set up. Please contact your site administrator.
+disable_forgot_password_mail_admin = Account recovery is only available when an email address is set up.
email_domain_blacklisted = You cannot register with your email address.
authorize_application = Authorize Application
authorize_redirect_notice = You will be redirected to %s if you authorize this application.
authorize_application_created_by = This application was created by %s.
-authorize_application_description = If you grant the access, it will be able to access and write to all your account information, including private repos and organisations.
+authorize_application_description = If you grant access, it will be able to access and write to all your account information, including private repos and organizations.
authorize_application_with_scopes = With scopes: %s
authorize_title = Authorize "%s" to access your account?
authorization_failed = Authorization failed
-authorization_failed_desc = The authorization failed because we detected an invalid request. Please contact the maintainer of the app you have tried to authorize.
+authorization_failed_desc = The authorization failed because we detected an invalid request. Please contact the maintainer of the app you tried to authorize.
sspi_auth_failed = SSPI authentication failed
password_pwned = The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password and consider changing this password elsewhere too.
password_pwned_err = Could not complete request to HaveIBeenPwned
@@ -505,8 +507,8 @@ activate_email.text = Please click the following link to verify your email addre
register_notify = Welcome to %s
register_notify.title = %[1]s, welcome to %[2]s
-register_notify.text_1 = this is your registration confirmation email for %s!
-register_notify.text_2 = You can now login via username: %s.
+register_notify.text_1 = This is your registration confirmation email for %s!
+register_notify.text_2 = You can now log in via username: %s.
register_notify.text_3 = If this account has been created for you, please set your password first.
reset_password = Recover your account
@@ -544,7 +546,7 @@ release.download.targz = Source Code (TAR.GZ)
repo.transfer.subject_to = %s would like to transfer "%s" to %s
repo.transfer.subject_to_you = %s would like to transfer "%s" to you
repo.transfer.to_you = you
-repo.transfer.body = To accept or reject it visit %s or just ignore it.
+repo.transfer.body = To accept or reject it, visit %s or just ignore it.
repo.collaborator.added.subject = %s added you to %s
repo.collaborator.added.text = You have been added as a collaborator of repository:
@@ -596,7 +598,7 @@ url_error = `"%s" is not a valid URL.`
include_error = ` must contain substring "%s".`
glob_pattern_error = ` glob pattern is invalid: %s.`
regex_pattern_error = ` regex pattern is invalid: %s.`
-username_error = ` can only contain alphanumeric chars ('0-9','a-z','A-Z'), dash ('-'), underscore ('_') and dot ('.'). It cannot begin or end with non-alphanumeric chars, and consecutive non-alphanumeric chars are also forbidden.`
+username_error = ` can only contain alphanumeric characters ('0-9','a-z','A-Z'), dash ('-'), underscore ('_') and dot ('.'). It cannot begin or end with non-alphanumeric characters, and consecutive non-alphanumeric characters are also forbidden.`
invalid_group_team_map_error = ` mapping is invalid: %s`
unknown_error = Unknown error:
captcha_incorrect = The CAPTCHA code is incorrect.
@@ -611,17 +613,17 @@ username_has_not_been_changed = Username has not been changed
repo_name_been_taken = The repository name is already used.
repository_force_private = Force Private is enabled: private repositories cannot be made public.
repository_files_already_exist = Files already exist for this repository. Contact the system administrator.
-repository_files_already_exist.adopt = Files already exist for this repository and can only be Adopted.
+repository_files_already_exist.adopt = Files already exist for this repository and can only be adopted.
repository_files_already_exist.delete = Files already exist for this repository. You must delete them.
repository_files_already_exist.adopt_or_delete = Files already exist for this repository. Either adopt them or delete them.
visit_rate_limit = Remote visit addressed rate limitation.
-2fa_auth_required = Remote visit required two factors authentication.
+2fa_auth_required = Remote visit required two-factor authentication.
org_name_been_taken = The organization name is already taken.
team_name_been_taken = The team name is already taken.
team_no_units_error = Allow access to at least one repository section.
email_been_used = The email address is already used.
email_invalid = The email address is invalid.
-email_domain_is_not_allowed = The domain of user email %s conflicts with EMAIL_DOMAIN_ALLOWLIST or EMAIL_DOMAIN_BLOCKLIST. Please ensure your operation is expected.
+email_domain_is_not_allowed = The domain of user email address %s conflicts with EMAIL_DOMAIN_ALLOWLIST or EMAIL_DOMAIN_BLOCKLIST. Please ensure your operation is expected.
openid_been_used = The OpenID address "%s" is already used.
username_password_incorrect = Username or password is incorrect.
password_complexity = Password does not pass complexity requirements:
@@ -646,14 +648,14 @@ invalid_ssh_key = Cannot verify your SSH key: %s
invalid_gpg_key = Cannot verify your GPG key: %s
invalid_ssh_principal = Invalid principal: %s
must_use_public_key = The key you provided is a private key. Please do not upload your private key anywhere. Use your public key instead.
-unable_verify_ssh_key = "Cannot verify the SSH key, double-check it for mistakes."
+unable_verify_ssh_key = "Cannot verify the SSH key. Double-check it for mistakes."
auth_failed = Authentication failed: %v
-still_own_repo = "Your account owns one or more repositories, delete or transfer them first."
-still_has_org = "Your account is a member of one or more organizations, leave them first."
-still_own_packages = "Your account owns one or more packages, delete them first."
-org_still_own_repo = "This organization still owns one or more repositories, delete or transfer them first."
-org_still_own_packages = "This organization still owns one or more packages, delete them first."
+still_own_repo = "Your account owns one or more repositories. Delete or transfer them first."
+still_has_org = "Your account is a member of one or more organizations. Leave them first."
+still_own_packages = "Your account owns one or more packages. Delete them first."
+org_still_own_repo = "This organization still owns one or more repositories. Delete or transfer them first."
+org_still_own_packages = "This organization still owns one or more packages. Delete them first."
target_branch_not_exist = Target branch does not exist.
target_ref_not_exist = Target ref does not exist %s
@@ -684,11 +686,11 @@ settings = User Settings
form.name_reserved = The username "%s" is reserved.
form.name_pattern_not_allowed = The pattern "%s" is not allowed in a username.
-form.name_chars_not_allowed = User name "%s" contains invalid characters.
+form.name_chars_not_allowed = Username "%s" contains invalid characters.
block.block = Block
block.block.user = Block user
-block.block.org = Block user for organization
+block.block.org = Block user from organization
block.block.failure = Failed to block user: %s
block.unblock = Unblock
block.unblock.failure = Failed to unblock user: %s
@@ -701,7 +703,7 @@ block.info_3 = send you notifications by @mentioning your username
block.info_4 = inviting you as a collaborator to their repositories
block.info_5 = starring, forking or watching on repositories
block.info_6 = opening and commenting on issues or pull requests
-block.info_7 = reacting on your comments in issues or pull requests
+block.info_7 = reacting to your comments in issues or pull requests
block.user_to_block = User to block
block.note = Note
block.note.title = Optional note:
@@ -732,7 +734,7 @@ webauthn = Two-Factor Authentication (Security Keys)
public_profile = Public Profile
biography_placeholder = Tell us a little bit about yourself! (You can use Markdown)
location_placeholder = Share your approximate location with others
-profile_desc = Control how your profile is show to other users. Your primary email address will be used for notifications, password recovery and web-based Git operations.
+profile_desc = Control how your profile is shown to other users. Your primary email address will be used for notifications, password recovery and web-based Git operations.
password_username_disabled = You are not allowed to change your username. Please contact your site administrator for more details.
password_full_name_disabled = You are not allowed to change your full name. Please contact your site administrator for more details.
full_name = Full Name
@@ -752,7 +754,7 @@ cancel = Cancel
language = Language
ui = Theme
hidden_comment_types = Hidden comment types
-hidden_comment_types_description = Comment types checked here will not be shown inside issue pages. Checking "Label" for example removes all "{user} added/removed {label}" comments.
+hidden_comment_types_description = Comment types checked here will not be shown on issue pages. Checking "Label", for example, removes all "{user} added/removed {label}" comments.
hidden_comment_types.ref_tooltip = Comments where this issue was referenced from another issue/commit/…
hidden_comment_types.issue_ref_tooltip = Comments where the user changes the branch/tag associated with the issue
comment_type_group_reference = Reference
@@ -800,18 +802,18 @@ manage_themes = Select default theme
manage_openid = Manage OpenID Addresses
email_desc = Your primary email address will be used for notifications, password recovery and, provided that it is not hidden, web-based Git operations.
theme_desc = This will be your default theme across the site.
-theme_colorblindness_help = Colorblindness Theme Support
-theme_colorblindness_prompt = Gitea just gets some themes with basic colorblindness support, which only have a few colors defined. The work is still in progress. More improvements could be done by defining more colors in the theme CSS files.
+theme_colorblindness_help = Color blindness Theme Support
+theme_colorblindness_prompt = Gitea only has a few themes with basic color blindness support, which only have a few colors defined. The work is still in progress. More improvements could be made by defining more colors in the theme CSS files.
primary = Primary
activated = Activated
requires_activation = Requires activation
primary_email = Make Primary
activate_email = Send Activation
activations_pending = Activations Pending
-can_not_add_email_activations_pending = There is a pending activation, try again in a few minutes if you want to add a new email.
+can_not_add_email_activations_pending = There is a pending activation. Try again in a few minutes if you want to add a new email address.
delete_email = Remove
email_deletion = Remove Email Address
-email_deletion_desc = The email address and related information will be removed from your account. Git commits by this email address will remain unchanged. Continue?
+email_deletion_desc = This email address and related information will be removed from your account. Git commits by this email address will remain unchanged. Continue?
email_deletion_success = The email address has been removed.
theme_update_success = Your theme was updated.
theme_update_error = The selected theme does not exist.
@@ -854,7 +856,7 @@ gpg_key_matched_identities_long=The embedded identities in this key match the fo
gpg_key_verified=Verified Key
gpg_key_verified_long=Key has been verified with a token and can be used to verify commits matching any activated email addresses for this user in addition to any matched identities for this key.
gpg_key_verify=Verify
-gpg_invalid_token_signature = The provided GPG key, signature and token do not match or token is out-of-date.
+gpg_invalid_token_signature = The provided GPG key, signature and token do not match, or the token is out-of-date.
gpg_token_required = You must provide a signature for the below token
gpg_token = Token
gpg_token_help = You can generate a signature using:
@@ -864,7 +866,7 @@ verify_gpg_key_success = GPG key "%s" has been verified.
ssh_key_verified=Verified Key
ssh_key_verified_long=Key has been verified with a token and can be used to verify commits matching any activated email addresses for this user.
ssh_key_verify=Verify
-ssh_invalid_token_signature = The provided SSH key, signature or token do not match or token is out-of-date.
+ssh_invalid_token_signature = The provided SSH key, signature or token do not match, or the token is out-of-date.
ssh_token_required = You must provide a signature for the below token
ssh_token = Token
ssh_token_help = You can generate a signature using:
@@ -885,7 +887,7 @@ gpg_key_deletion = Remove GPG Key
ssh_principal_deletion = Remove SSH Certificate Principal
ssh_key_deletion_desc = Removing an SSH key revokes its access to your account. Continue?
gpg_key_deletion_desc = Removing a GPG key un-verifies commits signed by it. Continue?
-ssh_principal_deletion_desc = Removing a SSH Certificate Principal revokes its access to your account. Continue?
+ssh_principal_deletion_desc = Removing an SSH Certificate Principal revokes its access to your account. Continue?
ssh_key_deletion_success = The SSH key has been removed.
gpg_key_deletion_success = The GPG key has been removed.
ssh_principal_deletion_success = The principal has been removed.
@@ -947,7 +949,7 @@ create_oauth2_application_button = Create Application
create_oauth2_application_success = You have successfully created a new OAuth2 application.
update_oauth2_application_success = You have successfully updated the OAuth2 application.
oauth2_application_name = Application Name
-oauth2_confidential_client = Confidential Client. Select for apps that keep the secret confidential, such as web apps. Do not select for native apps including desktop and mobile apps.
+oauth2_confidential_client = Confidential Client. Select for apps that keep the secret confidential, such as web apps. Do not select for native apps, including desktop and mobile apps.
oauth2_skip_secondary_authorization = Skip authorization for public clients after granting access once. May pose a security risk.
oauth2_redirect_uris = Redirect URIs. Please use a new line for every URI.
save_application = Save
@@ -962,10 +964,10 @@ oauth2_application_remove_description = Removing an OAuth2 application will prev
oauth2_application_locked = Gitea pre-registers some OAuth2 applications on startup if enabled in config. To prevent unexpected behavior, these can neither be edited nor removed. Please refer to the OAuth2 documentation for more information.
authorized_oauth2_applications = Authorized OAuth2 Applications
-authorized_oauth2_applications_description = You have granted access to your personal Gitea account to these third party applications. Please revoke access for applications you no longer need.
+authorized_oauth2_applications_description = You have granted access to your personal Gitea account to these third-party applications. Please revoke access for applications you no longer need.
revoke_key = Revoke
revoke_oauth2_grant = Revoke Access
-revoke_oauth2_grant_description = Revoking access for this third party application will prevent this application from accessing your data. Are you sure?
+revoke_oauth2_grant_description = Revoking access for this third-party application will prevent this application from accessing your data. Are you sure?
revoke_oauth2_grant_success = Access revoked successfully.
twofa_desc = To protect your account against password theft, you can use a smartphone or another device for receiving time-based one-time passwords ("TOTP").
@@ -975,7 +977,7 @@ twofa_not_enrolled = Your account is not currently enrolled in two-factor authen
twofa_disable = Disable Two-Factor Authentication
twofa_scratch_token_regenerate = Regenerate Single-Use Recovery Key
twofa_scratch_token_regenerated = Your single-use recovery key is now %s. Store it in a safe place, as it will not be shown again.
-twofa_enroll = Enroll into Two-Factor Authentication
+twofa_enroll = Enroll in Two-Factor Authentication
twofa_disable_note = You can disable two-factor authentication if needed.
twofa_disable_desc = Disabling two-factor authentication will make your account less secure. Continue?
regenerate_scratch_token_desc = If you misplaced your recovery key or have already used it to sign in, you can reset it here.
@@ -991,13 +993,13 @@ webauthn_desc = Security keys are hardware devices containing cryptographic keys
webauthn_register_key = Add Security Key
webauthn_nickname = Nickname
webauthn_delete_key = Remove Security Key
-webauthn_delete_key_desc = If you remove a security key you can no longer sign in with it. Continue?
+webauthn_delete_key_desc = If you remove a security key, you can no longer sign in with it. Continue?
webauthn_key_loss_warning = If you lose your security keys, you will lose access to your account.
webauthn_alternative_tip = You may want to configure an additional authentication method.
manage_account_links = Manage Linked Accounts
manage_account_links_desc = These external accounts are linked to your Gitea account.
-account_links_not_available = There are currently no external accounts linked to your Gitea account.
+account_links_not_available = No external accounts are currently linked to your Gitea account.
link_account = Link Account
remove_account_link = Remove Linked Account
remove_account_link_desc = Removing a linked account will revoke its access to your Gitea account. Continue?
@@ -1020,6 +1022,8 @@ email_notifications.onmention = Only Email on Mention
email_notifications.disable = Disable Email Notifications
email_notifications.submit = Set Email Preference
email_notifications.andyourown = And Your Own Notifications
+email_notifications.actions.desc = Notifications for workflow runs on repositories set up with Gitea Actions .
+email_notifications.actions.failure_only = Only notify for failed workflow runs
visibility = User visibility
visibility.public = Public
@@ -1034,8 +1038,8 @@ new_repo_helper = A repository contains all project files, including revision hi
owner = Owner
owner_helper = Some organizations may not show up in the dropdown due to a maximum repository count limit.
repo_name = Repository Name
-repo_name_profile_public_hint= .profile is a special repository that you can use to add README.md to your public organization profile, visible to anyone. Make sure it’s public and initialize it with a README in the profile directory to get started.
-repo_name_profile_private_hint = .profile-private is a special repository that you can use to add a README.md to your organization member profile, visible only to organization members. Make sure it’s private and initialize it with a README in the profile directory to get started.
+repo_name_profile_public_hint= .profile is a special repository that you can use to add README.md to your public organization profile, visible to anyone. Make sure it's public and initialize it with a README in the profile directory to get started.
+repo_name_profile_private_hint = .profile-private is a special repository that you can use to add a README.md to your organization member profile, visible only to organization members. Make sure it's private and initialize it with a README in the profile directory to get started.
repo_name_helper = Good repository names use short, memorable and unique keywords. A repository named ".profile" or ".profile-private" could be used to add a README.md for the user/organization profile.
repo_size = Repository Size
template = Template
@@ -1057,7 +1061,7 @@ fork_branch = Branch to be cloned to the fork
all_branches = All branches
view_all_branches = View all branches
view_all_tags = View all tags
-fork_no_valid_owners = This repository can not be forked because there are no valid owners.
+fork_no_valid_owners = This repository cannot be forked because there are no valid owners.
fork.blocked_user = Cannot fork the repository because you are blocked by the repository owner.
use_template = Use this template
open_with_editor = Open with %s
@@ -1101,12 +1105,12 @@ mirror_sync = synced
mirror_sync_on_commit = Sync when commits are pushed
mirror_address = Clone From URL
mirror_address_desc = Put any required credentials in the Authorization section.
-mirror_address_url_invalid = The provided URL is invalid. You must escape all components of the url correctly.
+mirror_address_url_invalid = The provided URL is invalid. Make sure all components of the URL are escaped correctly.
mirror_address_protocol_invalid = The provided URL is invalid. Only http(s):// or git:// locations can be used for mirroring.
mirror_lfs = Large File Storage (LFS)
mirror_lfs_desc = Activate mirroring of LFS data.
mirror_lfs_endpoint = LFS Endpoint
-mirror_lfs_endpoint_desc = Sync will attempt to use the clone url to determine the LFS server . You can also specify a custom endpoint if the repository LFS data is stored somewhere else.
+mirror_lfs_endpoint_desc = Sync will attempt to use the clone URL to determine the LFS server . You can also specify a custom endpoint if the repository LFS data is stored somewhere else.
mirror_last_synced = Last Synchronized
mirror_password_placeholder = (Unchanged)
mirror_password_blank_placeholder = (Unset)
@@ -1119,7 +1123,7 @@ stars = Stars
reactions_more = and %d more
unit_disabled = The site administrator has disabled this repository section.
language_other = Other
-adopt_search = Enter username to search for unadopted repositories... (leave blank to find all)
+adopt_search = Enter username to search for unadopted repositories… (leave blank to find all)
adopt_preexisting_label = Adopt Files
adopt_preexisting = Adopt pre-existing files
adopt_preexisting_content = Create repository from %s
@@ -1161,8 +1165,8 @@ template.issue_labels = Issue Labels
template.one_item = Must select at least one template item
template.invalid = Must select a template repository
-archive.title = This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
-archive.title_date = This repository has been archived on %s. You can view files and clone it, but cannot push or open issues or pull requests.
+archive.title = This repo is archived. You can view files and clone it. You cannot open issues or pull requests or push a commit.
+archive.title_date = This repository has been archived on %s. You can view files and clone it. You cannot open issues or pull requests or push a commit.
archive.issue.nocomment = This repo is archived. You cannot comment on issues.
archive.pull.nocomment = This repo is archived. You cannot comment on pull requests.
@@ -1179,7 +1183,7 @@ migrate_options_lfs = Migrate LFS files
migrate_options_lfs_endpoint.label = LFS Endpoint
migrate_options_lfs_endpoint.description = Migration will attempt to use your Git remote to determine the LFS server . You can also specify a custom endpoint if the repository LFS data is stored somewhere else.
migrate_options_lfs_endpoint.description.local = A local server path is supported too.
-migrate_options_lfs_endpoint.placeholder = If left blank, the endpoint will be derived from the clone URL
+migrate_options_lfs_endpoint.placeholder = If left blank, the endpoint will be derived from the clone URL.
migrate_items = Migration Items
migrate_items_wiki = Wiki
migrate_items_milestones = Milestones
@@ -1191,10 +1195,10 @@ migrate_items_releases = Releases
migrate_repo = Migrate Repository
migrate.clone_address = Migrate / Clone From URL
migrate.clone_address_desc = The HTTP(S) or Git 'clone' URL of an existing repository
-migrate.github_token_desc = You can put one or more tokens with comma separated here to make migrating faster because of GitHub API rate limit. WARN: Abusing this feature may violate the service provider's policy and lead to account blocking.
+migrate.github_token_desc = You can put one or more tokens here, separated by commas, to make migrating faster by circumventing the GitHub API rate limit. WARNING: Abusing this feature may violate the service provider's policy and may lead to getting your account(s) blocked.
migrate.clone_local_path = or a local server path
migrate.permission_denied = You are not allowed to import local repositories.
-migrate.permission_denied_blocked = You cannot import from disallowed hosts, please ask the admin to check ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS settings.
+migrate.permission_denied_blocked = You cannot import from disallowed hosts. Please ask the admin to check ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS settings.
migrate.invalid_local_path = "The local path is invalid. It doesn't exist or is not a directory."
migrate.invalid_lfs_endpoint = The LFS endpoint is not valid.
migrate.failed = Migration failed: %v
@@ -1202,7 +1206,7 @@ migrate.migrate_items_options = Access Token is required to migrate additional i
migrated_from = Migrated from %[2]s
migrated_from_fake = Migrated From %[1]s
migrate.migrate = Migrate From %s
-migrate.migrating = Migrating from %s ...
+migrate.migrating = Migrating from %s …
migrate.migrating_failed = Migrating from %s failed.
migrate.migrating_failed.error = Failed to migrate: %s
migrate.migrating_failed_no_addr = Migration failed.
@@ -1228,7 +1232,7 @@ migrate.migrating_issues = Migrating Issues
migrate.migrating_pulls = Migrating Pull Requests
migrate.cancel_migrating_title = Cancel Migration
migrate.cancel_migrating_confirm = Do you want to cancel this migration?
-migrating_status = Migrating status
+migration_status = Migration status
mirror_from = mirror of
forked_from = forked from
@@ -1251,9 +1255,9 @@ clone_this_repo = Clone this repository
cite_this_repo = Cite this repository
create_new_repo_command = Creating a new repository on the command line
push_exist_repo = Pushing an existing repository from the command line
-empty_message = This repository does not contain any content.
+empty_message = This repository does not have any content.
broken_message = The Git data underlying this repository cannot be read. Contact the administrator of this instance or delete this repository.
-no_branch = This repository doesn’t have any branches.
+no_branch = This repository doesn't have any branches.
code = Code
code.desc = Access source code, files, commits and branches.
@@ -1270,7 +1274,7 @@ projects = Projects
packages = Packages
actions = Actions
labels = Labels
-org_labels_desc = Organization level labels that can be used with all repositories under this organization
+org_labels_desc = Organization-level labels that can be used with all repositories under this organization
org_labels_desc_manage = manage
milestone = Milestone
@@ -1319,6 +1323,7 @@ commit_graph.color = Color
commit.contained_in = This commit is contained in:
commit.contained_in_default_branch = This commit is part of the default branch
commit.load_referencing_branches_and_tags = Load branches and tags referencing this commit
+commit.merged_in_pr = This commit was merged in pull request %s.
blame = Blame
download_file = Download file
normal_view = Normal View
@@ -1332,7 +1337,9 @@ editor.upload_file = Upload File
editor.edit_file = Edit File
editor.preview_changes = Preview Changes
editor.cannot_edit_lfs_files = LFS files cannot be edited in the web interface.
+editor.cannot_edit_too_large_file = The file is too large to be edited.
editor.cannot_edit_non_text_files = Binary files cannot be edited in the web interface.
+editor.file_not_editable_hint = But you can still rename or move it.
editor.edit_this_file = Edit File
editor.this_file_locked = File is locked
editor.must_be_on_a_branch = You must be on a branch to make or propose changes to this file.
@@ -1352,7 +1359,7 @@ editor.update = Update %s
editor.delete = Delete %s
editor.patch = Apply Patch
editor.patching = Patching:
-editor.fail_to_apply_patch = Unable to apply patch "%s"
+editor.fail_to_apply_patch = Unable to apply patch
editor.new_patch = New Patch
editor.commit_message_desc = Add an optional extended description…
editor.signoff_desc = Add a Signed-off-by trailer by the committer at the end of the commit log message.
@@ -1365,24 +1372,21 @@ editor.new_branch_name_desc = New branch name…
editor.cancel = Cancel
editor.filename_cannot_be_empty = The filename cannot be empty.
editor.filename_is_invalid = The filename is invalid: "%s".
-editor.commit_email = Commit email
-editor.invalid_commit_email = The email for the commit is invalid.
+editor.commit_email = Commit email address
+editor.invalid_commit_email = The email address for the commit is invalid.
editor.branch_does_not_exist = Branch "%s" does not exist in this repository.
editor.branch_already_exists = Branch "%s" already exists in this repository.
editor.directory_is_a_file = Directory name "%s" is already used as a filename in this repository.
-editor.file_is_a_symlink = `"%s" is a symbolic link. Symbolic links cannot be edited in the web editor`
+editor.file_is_a_symlink = `"%s" is a symbolic link. Symbolic links cannot be edited in the web editor.`
editor.filename_is_a_directory = Filename "%s" is already used as a directory name in this repository.
-editor.file_editing_no_longer_exists = The file being edited, "%s", no longer exists in this repository.
-editor.file_deleting_no_longer_exists = The file being deleted, "%s", no longer exists in this repository.
+editor.file_modifying_no_longer_exists = The file being modified, "%s", no longer exists in this repository.
editor.file_changed_while_editing = The file contents have changed since you started editing. Click here to see them or Commit Changes again to overwrite them.
editor.file_already_exists = A file named "%s" already exists in this repository.
-editor.commit_id_not_matching = The Commit ID does not match the ID when you began editing. Commit into a patch branch and then merge.
+editor.commit_id_not_matching = The Commit ID does not match the ID when you began editing. Commit into a patch branch and then merge.
editor.push_out_of_date = The push appears to be out of date.
editor.commit_empty_file_header = Commit an empty file
editor.commit_empty_file_text = The file you're about to commit is empty. Proceed?
editor.no_changes_to_show = There are no changes to show.
-editor.fail_to_update_file = Failed to update/create file "%s".
-editor.fail_to_update_file_summary = Error Message:
editor.push_rejected_no_message = The change was rejected by the server without a message. Please check Git Hooks.
editor.push_rejected = The change was rejected by the server. Please check Git Hooks.
editor.push_rejected_summary = Full Rejection Message:
@@ -1396,6 +1400,15 @@ editor.user_no_push_to_branch = User cannot push to branch
editor.require_signed_commit = Branch requires a signed commit
editor.cherry_pick = Cherry-pick %s onto:
editor.revert = Revert %s onto:
+editor.failed_to_commit = Failed to commit changes.
+editor.failed_to_commit_summary = Error Message:
+
+editor.fork_create = Fork Repository to Propose Changes
+editor.fork_create_description = You cannot edit this repository directly. Instead you can create a fork, make edits and create a pull request.
+editor.fork_edit_description = You cannot edit this repository directly. The changes will be written to your fork %s , so you can create a pull request.
+editor.fork_not_editable = You have forked this repository but your fork is not editable.
+editor.fork_failed_to_push_branch = Failed to push branch %s to your repository.
+editor.fork_branch_exists = Branch "%s" already exists in your fork. Please choose a new branch name.
commits.desc = Browse source code change history.
commits.commits = Commits
@@ -1497,7 +1510,7 @@ issues.new.clear_assignees = Clear assignees
issues.new.no_assignees = No Assignees
issues.new.no_reviewers = No Reviewers
issues.new.blocked_user = Cannot create issue because you are blocked by the repository owner.
-issues.edit.already_changed = Unable to save changes to the issue. It appears the content has already been changed by another user. Please refresh the page and try editing again to avoid overwriting their changes
+issues.edit.already_changed = Unable to save changes to the issue. It appears the content has already been changed by another user. Please refresh the page and try editing again to avoid overwriting their changes.
issues.edit.blocked_user = Cannot edit content because you are blocked by the poster or repository owner.
issues.choose.get_started = Get Started
issues.choose.open_external_link = Open
@@ -1569,7 +1582,7 @@ issues.filter_type.reviewed_by_you = Reviewed by you
issues.filter_sort = Sort
issues.filter_sort.latest = Newest
issues.filter_sort.oldest = Oldest
-issues.filter_sort.recentupdate = Recently updated
+issues.filter_sort.recentupdate = Most recently updated
issues.filter_sort.leastupdate = Least recently updated
issues.filter_sort.mostcomment = Most commented
issues.filter_sort.leastcomment = Least commented
@@ -1702,7 +1715,7 @@ issues.lock_no_reason = "locked and limited conversation to collaborators %s"
issues.unlock_comment = "unlocked this conversation %s"
issues.lock_confirm = Lock
issues.unlock_confirm = Unlock
-issues.lock.notice_1 = - Other users can’t add new comments to this issue.
+issues.lock.notice_1 = - Other users cannot add new comments to this issue.
issues.lock.notice_2 = - You and other collaborators with access to this repository can still leave comments that others can see.
issues.lock.notice_3 = - You can always unlock this issue again in the future.
issues.unlock.notice_1 = - Everyone would be able to comment on this issue once more.
@@ -1728,6 +1741,8 @@ issues.remove_time_estimate_at = removed time estimate %s
issues.time_estimate_invalid = Time estimate format is invalid
issues.start_tracking_history = started working %s
issues.tracker_auto_close = Timer will be stopped automatically when this issue gets closed
+issues.stopwatch_already_stopped = The timer for this issue is already stopped
+issues.stopwatch_already_created = The timer for this issue already exists
issues.tracking_already_started = `You have already started time tracking on another issue !`
issues.stop_tracking = Stop Timer
issues.stop_tracking_history = worked for %[1]s %[2]s
@@ -1755,7 +1770,7 @@ issues.due_date_form = "yyyy-mm-dd"
issues.due_date_form_add = "Add due date"
issues.due_date_form_edit = "Edit"
issues.due_date_form_remove = "Remove"
-issues.due_date_not_writer = "You need write access to this repository in order to update the due date of an issue."
+issues.due_date_not_writer = "You need write access to this repository to update the due date of an issue."
issues.due_date_not_set = "No due date set."
issues.due_date_added = "added the due date %s %s"
issues.due_date_modified = "modified the due date from %[2]s to %[1]s %[3]s"
@@ -1778,9 +1793,9 @@ issues.dependency.pr_closing_blockedby = Closing this pull request is blocked by
issues.dependency.issue_closing_blockedby = Closing this issue is blocked by the following issues
issues.dependency.issue_close_blocks = This issue blocks closing of the following issues
issues.dependency.pr_close_blocks = This pull request blocks closing of the following issues
-issues.dependency.issue_close_blocked = You need to close all issues blocking this issue before you can close it.
+issues.dependency.issue_close_blocked = You need to close all issues that are blocking this issue before you can close it.
issues.dependency.issue_batch_close_blocked = "Cannot batch close issues that you choose, because issue #%d still has open dependencies"
-issues.dependency.pr_close_blocked = You need to close all issues blocking this pull request before you can merge it.
+issues.dependency.pr_close_blocked = You need to close all issues that are blocking this pull request before you can merge it.
issues.dependency.blocks_short = Blocks
issues.dependency.blocked_by_short = Depends on
issues.dependency.remove_header = Remove Dependency
@@ -1791,13 +1806,13 @@ issues.dependency.add_error_same_issue = You cannot make an issue depend on itse
issues.dependency.add_error_dep_issue_not_exist = Dependent issue does not exist.
issues.dependency.add_error_dep_not_exist = Dependency does not exist.
issues.dependency.add_error_dep_exists = Dependency already exists.
-issues.dependency.add_error_cannot_create_circular = You cannot create a dependency with two issues blocking each other.
+issues.dependency.add_error_cannot_create_circular = You cannot create a dependency with two issues that block each other.
issues.dependency.add_error_dep_not_same_repo = Both issues must be in the same repository.
issues.review.self.approval = You cannot approve your own pull request.
issues.review.self.rejection = You cannot request changes on your own pull request.
issues.review.approve = "approved these changes %s"
issues.review.comment = "reviewed %s"
-issues.review.dismissed = "dismissed %s’s review %s"
+issues.review.dismissed = "dismissed %s's review %s"
issues.review.dismissed_label = Dismissed
issues.review.left_comment = left a comment
issues.review.content.empty = You need to leave a comment indicating the requested change(s).
@@ -1805,7 +1820,7 @@ issues.review.reject = "requested changes %s"
issues.review.wait = "was requested for review %s"
issues.review.add_review_request = "requested review from %s %s"
issues.review.remove_review_request = "removed review request for %s %s"
-issues.review.remove_review_request_self = "refused to review %s"
+issues.review.remove_review_request_self = "declined to review %s"
issues.review.pending = Pending
issues.review.pending.tooltip = This comment is not currently visible to other users. To submit your pending comments, select "%s" -> "%s/%s/%s" at the top of the page.
issues.review.review = Review
@@ -1827,7 +1842,7 @@ issues.review.requested = Review pending
issues.review.rejected = Changes requested
issues.review.stale = Updated since approval
issues.review.unofficial = Uncounted approval
-issues.assignee.error = Not all assignees was added due to an unexpected error.
+issues.assignee.error = Not all assignees were added, due to an unexpected error.
issues.reference_issue.body = Body
issues.content_history.deleted = deleted
issues.content_history.edited = edited
@@ -1844,7 +1859,7 @@ pulls.desc = Enable pull requests and code reviews.
pulls.new = New Pull Request
pulls.new.blocked_user = Cannot create pull request because you are blocked by the repository owner.
pulls.new.must_collaborator = You must be a collaborator to create pull request.
-pulls.edit.already_changed = Unable to save changes to the pull request. It appears the content has already been changed by another user. Please refresh the page and try editing again to avoid overwriting their changes
+pulls.edit.already_changed = Unable to save changes to the pull request. It appears the content has already been changed by another user. Please refresh the page and try editing again to avoid overwriting their changes.
pulls.view = View Pull Request
pulls.compare_changes = New Pull Request
pulls.allow_edits_from_maintainers = Allow edits from maintainers
@@ -1865,11 +1880,11 @@ pulls.show_all_commits = Show all commits
pulls.show_changes_since_your_last_review = Show changes since your last review
pulls.showing_only_single_commit = Showing only changes of commit %[1]s
pulls.showing_specified_commit_range = Showing only changes between %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range = Select commit. Hold shift + click to select a range
+pulls.select_commit_hold_shift_for_range = Select commit. Hold Shift and click to select a range.
pulls.review_only_possible_for_full_diff = Review is only possible when viewing the full diff
pulls.filter_changes_by_commit = Filter by commit
pulls.nothing_to_compare = These branches are equal. There is no need to create a pull request.
-pulls.nothing_to_compare_have_tag = The selected branch/tag are equal.
+pulls.nothing_to_compare_have_tag = The selected branches/tags are equal.
pulls.nothing_to_compare_and_allow_empty_pr = These branches are equal. This PR will be empty.
pulls.has_pull_request = `A pull request between these branches already exists: %[2]s#%[3]d `
pulls.create = Create Pull Request
@@ -1894,7 +1909,7 @@ pulls.add_prefix = Add %s prefix
pulls.remove_prefix = Remove %s prefix
pulls.data_broken = This pull request is broken due to missing fork information.
pulls.files_conflicted = This pull request has changes conflicting with the target branch.
-pulls.is_checking = Checking for merge conflicts ...
+pulls.is_checking = Checking for merge conflicts…
pulls.is_ancestor = "This branch is already included in the target branch. There is nothing to merge."
pulls.is_empty = "The changes on this branch are already on the target branch. This will be an empty commit."
pulls.required_status_check_failed = Some required checks were not successful.
@@ -1918,16 +1933,16 @@ pulls.reject_count_1 = "%d change request"
pulls.reject_count_n = "%d change requests"
pulls.waiting_count_1 = "%d waiting review"
pulls.waiting_count_n = "%d waiting reviews"
-pulls.wrong_commit_id = "commit id must be a commit id on the target branch"
+pulls.wrong_commit_id = "commit ID must be a commit ID on the target branch"
pulls.no_merge_desc = This pull request cannot be merged because all repository merge options are disabled.
pulls.no_merge_helper = Enable merge options in the repository settings or merge the pull request manually.
pulls.no_merge_wip = This pull request cannot be merged because it is marked as being a work in progress.
-pulls.no_merge_not_ready = This pull request is not ready to be merged, check review status and status checks.
+pulls.no_merge_not_ready = This pull request is not ready to be merged. Check review status and status checks.
pulls.no_merge_access = You are not authorized to merge this pull request.
pulls.merge_pull_request = Create merge commit
-pulls.rebase_merge_pull_request = Rebase then fast-forward
-pulls.rebase_merge_commit_pull_request = Rebase then create merge commit
+pulls.rebase_merge_pull_request = Rebase, then fast-forward
+pulls.rebase_merge_commit_pull_request = Rebase, then create merge commit
pulls.squash_merge_pull_request = Create squash commit
pulls.fast_forward_only_merge_pull_request = Fast-forward only
pulls.merge_manually = Manually merged
@@ -1935,17 +1950,17 @@ pulls.merge_commit_id = The merge commit ID
pulls.require_signed_wont_sign = The branch requires signed commits but this merge will not be signed
pulls.invalid_merge_option = You cannot use this merge option for this pull request.
-pulls.merge_conflict = Merge Failed: There was a conflict whilst merging. Hint: Try a different strategy
+pulls.merge_conflict = Merge Failed: There was a conflict while merging. Hint: Try a different strategy.
pulls.merge_conflict_summary = Error Message
-pulls.rebase_conflict = Merge Failed: There was a conflict whilst rebasing commit: %[1]s. Hint: Try a different strategy
+pulls.rebase_conflict = Merge Failed: There was a conflict while rebasing commit: %[1]s. Hint: Try a different strategy.
pulls.rebase_conflict_summary = Error Message
-pulls.unrelated_histories = Merge Failed: The merge head and base do not share a common history. Hint: Try a different strategy
-pulls.merge_out_of_date = Merge Failed: Whilst generating the merge, the base was updated. Hint: Try again.
-pulls.head_out_of_date = Merge Failed: Whilst generating the merge, the head was updated. Hint: Try again.
-pulls.has_merged = Failed: The pull request has been merged, you cannot merge again or change the target branch.
+pulls.unrelated_histories = Merge Failed: The merge head and base do not share a common history. Hint: Try a different strategy.
+pulls.merge_out_of_date = Merge Failed: While generating the merge, the base was updated. Hint: Try again.
+pulls.head_out_of_date = Merge Failed: While generating the merge, the head was updated. Hint: Try again.
+pulls.has_merged = Failed: The pull request has been merged. You cannot merge again or change the target branch.
pulls.push_rejected = Push Failed: The push was rejected. Review the Git Hooks for this repository.
pulls.push_rejected_summary = Full Rejection Message
-pulls.push_rejected_no_message = Push Failed: The push was rejected but there was no remote message. Review the Git Hooks for this repository
+pulls.push_rejected_no_message = Push Failed: The push was rejected but there was no remote message. Review the Git Hooks for this repository.
pulls.open_unmerged_pull_exists = `You cannot perform a reopen operation because there is a pending pull request (#%d) with identical properties.`
pulls.status_checking = Some checks are pending
pulls.status_checks_success = All checks were successful
@@ -1969,9 +1984,9 @@ pulls.cmd_instruction_checkout_title = Checkout
pulls.cmd_instruction_checkout_desc = From your project repository, check out a new branch and test the changes.
pulls.cmd_instruction_merge_title = Merge
pulls.cmd_instruction_merge_desc = Merge the changes and update on Gitea.
-pulls.cmd_instruction_merge_warning = Warning: This operation can not merge pull request because "autodetect manual merge" was not enable
+pulls.cmd_instruction_merge_warning = Warning: This operation cannot merge pull request because "autodetect manual merge" is not enabled.
pulls.clear_merge_message = Clear merge message
-pulls.clear_merge_message_hint = Clearing the merge message will only remove the commit message content and keep generated git trailers such as "Co-Authored-By …".
+pulls.clear_merge_message_hint = Clearing the merge message will only remove the commit message content and keep generated git trailers such as "Co-Authored-By…".
pulls.auto_merge_button_when_succeed = (When checks succeed)
pulls.auto_merge_when_succeed = Auto merge when all checks succeed
@@ -2032,12 +2047,12 @@ milestones.filter_sort.most_issues = Most issues
milestones.filter_sort.least_issues = Least issues
signing.will_sign = This commit will be signed with key "%s".
-signing.wont_sign.error = There was an error whilst checking if the commit could be signed.
+signing.wont_sign.error = There was an error while checking if the commit could be signed.
signing.wont_sign.nokey = There is no key available to sign this commit.
signing.wont_sign.never = Commits are never signed.
signing.wont_sign.always = Commits are always signed.
signing.wont_sign.pubkey = The commit will not be signed because you do not have a public key associated with your account.
-signing.wont_sign.twofa = You must have two factor authentication enabled to have commits signed.
+signing.wont_sign.twofa = You must have two-factor authentication enabled to have commits signed.
signing.wont_sign.parentsigned = The commit will not be signed as the parent commit is not signed.
signing.wont_sign.basesigned = The merge will not be signed as the base commit is not signed.
signing.wont_sign.headsigned = The merge will not be signed as the head commit is not signed.
@@ -2123,7 +2138,7 @@ activity.title.releases_1 = %d Release
activity.title.releases_n = %d Releases
activity.title.releases_published_by = %s published by %s
activity.published_release_label = Published
-activity.no_git_activity = There has not been any commit activity in this period.
+activity.no_git_activity = There has been no commit activity in this period.
activity.git_stats_exclude_merges = Excluding merges,
activity.git_stats_author_1 = %d author
activity.git_stats_author_n = %d authors
@@ -2151,13 +2166,13 @@ contributors.contribution_type.additions = Additions
contributors.contribution_type.deletions = Deletions
settings = Settings
-settings.desc = Settings is where you can manage the settings for the repository
+settings.desc = Settings is where you can manage the settings for the repository.
settings.options = Repository
settings.public_access = Public Access
settings.public_access_desc = Configure public visitor's access permissions to override the defaults of this repository.
settings.public_access.docs.not_set = Not Set: no extra public access permission. The visitor's permission follows the repository's visibility and member permissions.
settings.public_access.docs.anonymous_read = Anonymous Read: users who are not logged in can access the unit with read permission.
-settings.public_access.docs.everyone_read = Everyone Read: all logged-in users can access the unit with read permission. Read permission of issues/pull-requests units also means users can create new issues/pull-requests.
+settings.public_access.docs.everyone_read = Everyone Read: all logged-in users can access the unit with read permission. Read permission of issue/pull-request units also means users can create new issues/pull requests.
settings.public_access.docs.everyone_write = Everyone Write: all logged-in users have write permission to the unit. Only Wiki unit supports this permission.
settings.collaboration = Collaborators
settings.collaboration.admin = Administrator
@@ -2165,6 +2180,7 @@ settings.collaboration.write = Write
settings.collaboration.read = Read
settings.collaboration.owner = Owner
settings.collaboration.undefined = Undefined
+settings.collaboration.per_unit = Unit Permissions
settings.hooks = Webhooks
settings.githooks = Git Hooks
settings.basic_settings = Basic Settings
@@ -2174,7 +2190,7 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions = Set up your pr
settings.mirror_settings.docs.disabled_push_mirror.instructions = Set up your project to automatically pull commits, tags and branches from another repository.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning = Right now, this can only be done in the "New Migration" menu. For more information, please consult:
settings.mirror_settings.docs.disabled_push_mirror.info = Push mirrors have been disabled by your site administrator.
-settings.mirror_settings.docs.no_new_mirrors = Your repository is mirroring changes to or from another repository. Please keep in mind that you can't create any new mirrors at this time.
+settings.mirror_settings.docs.no_new_mirrors = Your repository is mirroring changes to or from another repository. Please keep in mind that you currently can't create any new mirrors.
settings.mirror_settings.docs.can_still_use = Although you can't modify existing mirrors or create new ones, you may still use your existing mirror.
settings.mirror_settings.docs.pull_mirror_instructions = To set up a pull mirror, please consult:
settings.mirror_settings.docs.more_information_if_disabled = You can find out more about push and pull mirrors here:
@@ -2249,7 +2265,7 @@ settings.admin_indexer_commit_sha = Last Indexed SHA
settings.admin_indexer_unindexed = Unindexed
settings.reindex_button = Add to Reindex Queue
settings.reindex_requested=Reindex Requested
-settings.admin_enable_close_issues_via_commit_in_any_branch = Close an issue via a commit made in a non default branch
+settings.admin_enable_close_issues_via_commit_in_any_branch = Close an issue via a commit made in a non-default branch
settings.danger_zone = Danger Zone
settings.new_owner_has_same_repo = The new owner already has a repository with same name. Please choose another name.
settings.convert = Convert to Regular Repository
@@ -2271,7 +2287,7 @@ settings.transfer_abort_invalid = You cannot cancel a non existent repository tr
settings.transfer_abort_success = The repository transfer to %s was successfully canceled.
settings.transfer_desc = Transfer this repository to a user or to an organization for which you have administrator rights.
settings.transfer_form_title = Enter the repository name as confirmation:
-settings.transfer_in_progress = There is currently an ongoing transfer. Please cancel it if you will like to transfer this repository to another user.
+settings.transfer_in_progress = There is currently an ongoing transfer. Please cancel it if you would like to transfer this repository to another user.
settings.transfer_notices_1 = - You will lose access to the repository if you transfer it to an individual user.
settings.transfer_notices_2 = - You will keep access to the repository if you transfer it to an organization that you (co-)own.
settings.transfer_notices_3 = - If the repository is private and is transferred to an individual user, this action makes sure that the user does have at least read permission (and changes permissions if necessary).
@@ -2286,13 +2302,13 @@ settings.trust_model.default = Default Trust Model
settings.trust_model.default.desc= Use the default repository trust model for this installation.
settings.trust_model.collaborator = Collaborator
settings.trust_model.collaborator.long = Collaborator: Trust signatures by collaborators
-settings.trust_model.collaborator.desc = Valid signatures by collaborators of this repository will be marked "trusted" - (whether they match the committer or not). Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" if not.
+settings.trust_model.collaborator.desc = Valid signatures by collaborators of this repository will be marked "trusted", whether they match the committer or not. Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" if not.
settings.trust_model.committer = Committer
-settings.trust_model.committer.long = Committer: Trust signatures that match committers (This matches GitHub and will force Gitea signed commits to have Gitea as the committer)
-settings.trust_model.committer.desc = Valid signatures will only be marked "trusted" if they match the committer, otherwise they will be marked "unmatched". This forces Gitea to be the committer on signed commits with the actual committer marked as Co-authored-by: and Co-committed-by: trailer in the commit. The default Gitea key must match a User in the database.
+settings.trust_model.committer.long = Committer: Trust signatures that match committers. This matches GitHub's behavior and will force commits signed by Gitea to have Gitea as the committer.
+settings.trust_model.committer.desc = Valid signatures will only be marked "trusted" if they match the committer, otherwise they will be marked "unmatched". This forces Gitea to be the committer on signed commits, with the actual committer marked as Co-authored-by: and Co-committed-by: trailer in the commit. The default Gitea key must match a user in the database.
settings.trust_model.collaboratorcommitter = Collaborator+Committer
settings.trust_model.collaboratorcommitter.long = Collaborator+Committer: Trust signatures by collaborators which match the committer
-settings.trust_model.collaboratorcommitter.desc = Valid signatures by collaborators of this repository will be marked "trusted" if they match the committer. Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" otherwise. This will force Gitea to be marked as the committer on signed commits with the actual committer marked as Co-Authored-By: and Co-Committed-By: trailer in the commit. The default Gitea key must match a User in the database.
+settings.trust_model.collaboratorcommitter.desc = Valid signatures by collaborators of this repository will be marked "trusted" if they match the committer. Otherwise, valid signatures will be marked "untrusted" if the signature matches the committer and "unmatched" otherwise. This will force Gitea to be marked as the committer on signed commits, with the actual committer marked as Co-Authored-By: and Co-Committed-By: trailer in the commit. The default Gitea key must match a user in the database.
settings.wiki_delete = Delete Wiki Data
settings.wiki_delete_desc = Deleting repository wiki data is permanent and cannot be undone.
settings.wiki_delete_notices_1 = - This will permanently delete and disable the repository wiki for %s.
@@ -2301,7 +2317,7 @@ settings.wiki_deletion_success = The repository wiki data has been deleted.
settings.delete = Delete This Repository
settings.delete_desc = Deleting a repository is permanent and cannot be undone.
settings.delete_notices_1 = - This operation CANNOT be undone.
-settings.delete_notices_2 = - This operation will permanently delete the %s repository including code, issues, comments, wiki data and collaborator settings.
+settings.delete_notices_2 = - This operation will permanently delete the %s repository, including code, issues, comments, wiki data and collaborator settings.
settings.delete_notices_fork_1 = - Forks of this repository will become independent after deletion.
settings.deletion_success = The repository has been deleted.
settings.update_settings_success = The repository settings have been updated.
@@ -2323,8 +2339,8 @@ settings.team_not_in_organization = The team is not in the same organization as
settings.teams = Teams
settings.add_team = Add Team
settings.add_team_duplicate = Team already has the repository
-settings.add_team_success = The team now have access to the repository.
-settings.change_team_permission_tip = Team's permission is set on the team setting page and can't be changed per repository
+settings.add_team_success = The team now has access to the repository.
+settings.change_team_permission_tip = Team's permission is set on the team settings page and can't be changed per repository
settings.delete_team_tip = This team has access to all repositories and can't be removed
settings.remove_team_success = The team's access to the repository has been removed.
settings.add_webhook = Add Webhook
@@ -2333,8 +2349,8 @@ settings.hooks_desc = Webhooks automatically make HTTP POST requests to a server
settings.webhook_deletion = Remove Webhook
settings.webhook_deletion_desc = Removing a webhook deletes its settings and delivery history. Continue?
settings.webhook_deletion_success = The webhook has been removed.
-settings.webhook.test_delivery = Test Delivery
-settings.webhook.test_delivery_desc = Test this webhook with a fake event.
+settings.webhook.test_delivery = Test Push Event
+settings.webhook.test_delivery_desc = Test this webhook with a fake push event.
settings.webhook.test_delivery_desc_disabled = To test this webhook with a fake event, activate it.
settings.webhook.request = Request
settings.webhook.response = Response
@@ -2354,6 +2370,7 @@ settings.payload_url = Target URL
settings.http_method = HTTP Method
settings.content_type = POST Content Type
settings.secret = Secret
+settings.webhook_secret_desc = If the webhook server supports using secret, you can follow the webhook's manual and fill in a secret here.
settings.slack_username = Username
settings.slack_icon_url = Icon URL
settings.slack_color = Color
@@ -2383,7 +2400,7 @@ settings.event_repository = Repository
settings.event_repository_desc = Repository created or deleted.
settings.event_header_issue = Issue Events
settings.event_issues = Issues
-settings.event_issues_desc = Issue opened, closed, reopened, or edited.
+settings.event_issues_desc = Issue opened, closed, reopened, edited or deleted.
settings.event_issue_assign = Issue Assigned
settings.event_issue_assign_desc = Issue assigned or unassigned.
settings.event_issue_label = Issue Labeled
@@ -2394,7 +2411,7 @@ settings.event_issue_comment = Issue Comment
settings.event_issue_comment_desc = Issue comment created, edited, or deleted.
settings.event_header_pull_request = Pull Request Events
settings.event_pull_request = Pull Request
-settings.event_pull_request_desc = Pull request opened, closed, reopened, or edited.
+settings.event_pull_request_desc = Pull request opened, closed, reopened, edited or deleted.
settings.event_pull_request_assign = Pull Request Assigned
settings.event_pull_request_assign_desc = Pull request assigned or unassigned.
settings.event_pull_request_label = Pull Request Labeled
@@ -2412,6 +2429,8 @@ settings.event_pull_request_review_request_desc = Pull request review requested
settings.event_pull_request_approvals = Pull Request Approvals
settings.event_pull_request_merge = Pull Request Merge
settings.event_header_workflow = Workflow Events
+settings.event_workflow_run = Workflow Run
+settings.event_workflow_run_desc = Gitea Actions Workflow run queued, waiting, in progress, or completed.
settings.event_workflow_job = Workflow Jobs
settings.event_workflow_job_desc = Gitea Actions Workflow job queued, waiting, in progress, or completed.
settings.event_package = Package
@@ -2537,7 +2556,7 @@ settings.block_on_official_review_requests_desc = Merging will not be possible w
settings.block_outdated_branch = Block merge if pull request is outdated
settings.block_outdated_branch_desc = Merging will not be possible when head branch is behind base branch.
settings.block_admin_merge_override = Administrators must follow branch protection rules
-settings.block_admin_merge_override_desc = Administrators must follow branch protection rules and can not circumvent it.
+settings.block_admin_merge_override_desc = Administrators must follow branch protection rules and cannot circumvent it.
settings.default_branch_desc = Select a default repository branch for pull requests and code commits:
settings.merge_style_desc = Merge Styles
settings.default_merge_style_desc = Default Merge Style
@@ -2564,10 +2583,10 @@ settings.matrix.homeserver_url = Homeserver URL
settings.matrix.room_id = Room ID
settings.matrix.message_type = Message Type
settings.visibility.private.button = Make Private
-settings.visibility.private.text = Changing the visibility to private will not only make the repo visible to only allowed members but may remove the relation between it and forks, watchers, and stars.
+settings.visibility.private.text = Changing the visibility to private will make the repo visible only to allowed members and may remove the relationship between it and existing forks, watchers, and stars.
settings.visibility.private.bullet_title = Changing the visibility to private will:
-settings.visibility.private.bullet_one = Make the repo visible to only allowed members.
-settings.visibility.private.bullet_two = May remove the relation between it and forks , watchers , and stars .
+settings.visibility.private.bullet_one = Make the repo visible only to allowed members.
+settings.visibility.private.bullet_two = May remove the relationship between it and forks , watchers , and stars .
settings.visibility.public.button = Make Public
settings.visibility.public.text = Changing the visibility to public will make the repo visible to anyone.
settings.visibility.public.bullet_title= Changing the visibility to public will:
@@ -2586,7 +2605,7 @@ settings.archive.tagsettings_unavailable = Tag settings are not available if the
settings.archive.mirrors_unavailable = Mirrors are not available if the repo is archived.
settings.unarchive.button = Unarchive repo
settings.unarchive.header = Unarchive this repo
-settings.unarchive.text = Unarchiving the repo will restore its ability to receive commits and pushes, as well as new issues and pull-requests.
+settings.unarchive.text = Unarchiving the repo will restore its ability to receive commits and pushes, as well as new issues and pull requests.
settings.unarchive.success = The repo was successfully unarchived.
settings.unarchive.error = An error occurred while trying to unarchive the repo. See the log for more details.
settings.update_avatar_success = The repository avatar has been updated.
@@ -2604,11 +2623,11 @@ settings.lfs_invalid_locking_path=Invalid path: %s
settings.lfs_invalid_lock_directory=Cannot lock directory: %s
settings.lfs_lock_already_exists=Lock already exists: %s
settings.lfs_lock=Lock
-settings.lfs_lock_path=Filepath to lock...
+settings.lfs_lock_path=Filepath to lock…
settings.lfs_locks_no_locks=No Locks
settings.lfs_lock_file_no_exist=Locked file does not exist in default branch
settings.lfs_force_unlock=Force Unlock
-settings.lfs_pointers.found=Found %d blob pointer(s) - %d associated, %d unassociated (%d missing from store)
+settings.lfs_pointers.found=Found %d blob pointer(s) — %d associated, %d unassociated (%d missing from store)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=In Repo
@@ -2767,6 +2786,8 @@ branch.new_branch_from = Create new branch from "%s"
branch.renamed = Branch %s was renamed to %s.
branch.rename_default_or_protected_branch_error = Only admins can rename default or protected branches.
branch.rename_protected_branch_failed = This branch is protected by glob-based protection rules.
+branch.commits_divergence_from = Commit divergence: %[1]d behind and %[2]d ahead of %[3]s
+branch.commits_no_divergence = The same as branch %[1]s
tag.create_tag = Create tag %s
tag.create_tag_operation = Create tag
@@ -2780,6 +2801,7 @@ topic.done = Done
topic.count_prompt = You cannot select more than 25 topics
topic.format_prompt = Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
+find_file.follow_symlink= Follow this symlink to where it is pointing at
find_file.go_to_file = Go to file
find_file.no_matching = No matching file found
@@ -2789,7 +2811,7 @@ error.csv.invalid_field_count = Can't render this file because it has a wrong nu
error.broken_git_hook = Git hooks of this repository seem to be broken. Please follow the documentation to fix them, then push some commits to refresh the status.
[graphs]
-component_loading = Loading %s...
+component_loading = Loading %s…
component_loading_failed = Could not load %s
component_loading_info = This might take a bit…
component_failed_to_load = An unexpected error happened.
@@ -2820,6 +2842,7 @@ team_permission_desc = Permission
team_unit_desc = Allow Access to Repository Sections
team_unit_disabled = (Disabled)
+form.name_been_taken = The organization name "%s" has already been taken.
form.name_reserved = The organization name "%s" is reserved.
form.name_pattern_not_allowed = The pattern "%s" is not allowed in an organization name.
form.create_org_not_allowed = You are not allowed to create an organization.
@@ -2827,12 +2850,17 @@ form.create_org_not_allowed = You are not allowed to create an organization.
settings = Settings
settings.options = Organization
settings.full_name = Full Name
-settings.email = Contact Email
+settings.email = Contact Email Address
settings.website = Website
settings.location = Location
settings.permission = Permissions
settings.repoadminchangeteam = Repository admin can add and remove access for teams
settings.visibility = Visibility
+settings.change_visibility = Change Visibility
+settings.change_visibility_notices_1 = If the organization is converted to private, the repository stars will be removed and cannot be restored.
+settings.change_visibility_notices_2 = Non-members will lose access to the organization’s repositories if visibility is changed to private.
+settings.change_visibility_success = The visibility of organization %s has been successfully changed.
+settings.visibility_desc = Change who can view the organization and its repositories.
settings.visibility.public = Public
settings.visibility.limited = Limited (Visible to authenticated users only)
settings.visibility.limited_shortname = Limited
@@ -2841,15 +2869,28 @@ settings.visibility.private_shortname = Private
settings.update_settings = Update Settings
settings.update_setting_success = Organization settings have been updated.
-settings.change_orgname_prompt = Note: Changing the organization name will also change your organization's URL and free the old name.
-settings.change_orgname_redirect_prompt = The old name will redirect until it is claimed.
+
+settings.rename = Rename Organization
+settings.rename_desc = Changing the organization name will also change your organization's URL and free the old name.
+settings.rename_success = Organization %[1]s has been renamed to %[2]s successfully.
+settings.rename_no_change = Organization name is not changed.
+settings.rename_new_org_name = New Organization Name
+settings.rename_failed = Renaming organization failed because of an internal error
+settings.rename_notices_1 = This operation CANNOT be undone.
+settings.rename_notices_2 = The old name will redirect until it is claimed.
+
settings.update_avatar_success = The organization's avatar has been updated.
settings.delete = Delete Organization
settings.delete_account = Delete This Organization
settings.delete_prompt = The organization will be permanently removed. This CANNOT be undone!
+settings.name_confirm = Enter the organization name as confirmation:
+settings.delete_notices_1 = This operation CANNOT be undone.
+settings.delete_notices_2 = This operation will permanently delete all the repositories of %s , including code, issues, comments, wiki data and collaborator settings.
+settings.delete_notices_3 = This operation will permanently delete all the packages of %s .
+settings.delete_notices_4 = This operation will permanently delete all the projects of %s .
settings.confirm_delete_account = Confirm Deletion
-settings.delete_org_title = Delete Organization
-settings.delete_org_desc = This organization will be deleted permanently. Continue?
+settings.delete_failed = Deleting organization failed due to an internal error
+settings.delete_successful = Organization %s has been deleted successfully.
settings.hooks_desc = Add webhooks which will be triggered for all repositories under this organization.
settings.labels_desc = Add labels which can be used on issues for all repositories under this organization.
@@ -2905,7 +2946,7 @@ teams.remove_all_repos_title = Remove all team repositories
teams.remove_all_repos_desc = This will remove all repositories from the team.
teams.add_all_repos_title = Add all repositories
teams.add_all_repos_desc = This will add all the organization's repositories to the team.
-teams.add_nonexistent_repo = "The repository you're trying to add doesn't exist, please create it first."
+teams.add_nonexistent_repo = "The repository you're trying to add doesn't exist. Please create it first."
teams.add_duplicate_users = User is already a team member.
teams.repos.none = No repositories could be accessed by this team.
teams.members.none = No members on this team.
@@ -2946,7 +2987,7 @@ repositories = Repositories
hooks = Webhooks
integrations = Integrations
authentication = Authentication Sources
-emails = User Emails
+emails = User Email Addresses
config = Configuration
config_summary = Summary
config_settings = Settings
@@ -2978,11 +3019,11 @@ dashboard.cron.cancelled=Cron: %[1]s canceled: %[3]s
dashboard.cron.error=Error in Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s has finished
dashboard.delete_inactive_accounts = Delete all unactivated accounts
-dashboard.delete_inactive_accounts.started = Delete all unactivated accounts task started.
+dashboard.delete_inactive_accounts.started = Task to delete all unactivated accounts started
dashboard.delete_repo_archives = "Delete all repositories' archives (ZIP, TAR.GZ, etc..)"
-dashboard.delete_repo_archives.started = Delete all repository archives task started.
+dashboard.delete_repo_archives.started = Task to delete all repository archives started
dashboard.delete_missing_repos = Delete all repositories missing their Git files
-dashboard.delete_missing_repos.started = Delete all repositories missing their Git files task started.
+dashboard.delete_missing_repos.started = Task to delete all repositories missing their Git files started
dashboard.delete_generated_repository_avatars = Delete generated repository avatars
dashboard.sync_repo_branches = Sync missed branches from git data to databases
dashboard.sync_repo_tags = Sync tags from git data to database
@@ -2990,17 +3031,17 @@ dashboard.update_mirrors = Update Mirrors
dashboard.repo_health_check = Health check all repositories
dashboard.check_repo_stats = Check all repository statistics
dashboard.archive_cleanup = Delete old repository archives
-dashboard.deleted_branches_cleanup = Clean-up deleted branches
+dashboard.deleted_branches_cleanup = Clean up deleted branches
dashboard.update_migration_poster_id = Update migration poster IDs
-dashboard.git_gc_repos = Garbage collect all repositories
-dashboard.resync_all_sshkeys = Update the '.ssh/authorized_keys' file with Gitea SSH keys.
-dashboard.resync_all_sshprincipals = Update the '.ssh/authorized_principals' file with Gitea SSH principals.
-dashboard.resync_all_hooks = Resynchronize pre-receive, update and post-receive hooks of all repositories.
+dashboard.git_gc_repos = Garbage-collect all repositories
+dashboard.resync_all_sshkeys = Update the '.ssh/authorized_keys' file with Gitea SSH keys
+dashboard.resync_all_sshprincipals = Update the '.ssh/authorized_principals' file with Gitea SSH principals
+dashboard.resync_all_hooks = Resynchronize pre-receive, update and post-receive hooks of all repositories
dashboard.reinit_missing_repos = Reinitialize all missing Git repositories for which records exist
dashboard.sync_external_users = Synchronize external user data
-dashboard.cleanup_hook_task_table = Cleanup hook_task table
-dashboard.cleanup_packages = Cleanup expired packages
-dashboard.cleanup_actions = Cleanup expired actions resources
+dashboard.cleanup_hook_task_table = Clean up hook_task table
+dashboard.cleanup_packages = Clean up expired packages
+dashboard.cleanup_actions = Clean up expired actions' resources
dashboard.server_uptime = Server Uptime
dashboard.current_goroutine = Current Goroutines
dashboard.current_memory_usage = Current Memory Usage
@@ -3031,10 +3072,10 @@ dashboard.total_gc_pause = Total GC Pause
dashboard.last_gc_pause = Last GC Pause
dashboard.gc_times = GC Times
dashboard.delete_old_actions = Delete all old activities from database
-dashboard.delete_old_actions.started = Delete all old activities from database started.
+dashboard.delete_old_actions.started = Deletion of all old activities from database started
dashboard.update_checker = Update checker
dashboard.delete_old_system_notices = Delete all old system notices from database
-dashboard.gc_lfs = Garbage collect LFS meta objects
+dashboard.gc_lfs = Garbage-collect LFS meta objects
dashboard.stop_zombie_tasks = Stop actions zombie tasks
dashboard.stop_endless_tasks = Stop actions endless tasks
dashboard.cancel_abandoned_jobs = Cancel actions abandoned jobs
@@ -3058,7 +3099,7 @@ users.2fa = 2FA
users.repos = Repos
users.created = Created
users.last_login = Last Sign-In
-users.never_login = Never Signed-In
+users.never_login = Never Signed In
users.send_register_notify = Send User Registration Notification
users.new_success = The user account "%s" has been created.
users.edit = Edit
@@ -3085,7 +3126,7 @@ users.still_own_repo = This user still owns one or more repositories. Delete or
users.still_has_org = This user is a member of an organization. Remove the user from any organizations first.
users.purge = Purge User
users.purge_help = Forcibly delete user and any repositories, organizations, and packages owned by the user. All comments will be deleted too.
-users.still_own_packages = This user still owns one or more packages, delete these packages first.
+users.still_own_packages = This user still owns one or more packages. Delete these packages first.
users.deletion_success = The user account has been deleted.
users.reset_2fa = Reset 2FA
users.list_status_filter.menu_text = Filter
@@ -3105,11 +3146,11 @@ users.details = User Details
emails.email_manage_panel = User Email Management
emails.primary = Primary
emails.activated = Activated
-emails.filter_sort.email = Email
-emails.filter_sort.email_reverse = Email (reverse)
-emails.filter_sort.name = User Name
-emails.filter_sort.name_reverse = User Name (reverse)
-emails.updated = Email updated
+emails.filter_sort.email = Email address
+emails.filter_sort.email_reverse = Email address (reverse)
+emails.filter_sort.name = Username
+emails.filter_sort.name_reverse = Username (reverse)
+emails.updated = Email address updated
emails.not_updated = Failed to update the requested email address: %v
emails.duplicate_active = This email address is already active for a different user.
emails.change_email_header = Update Email Properties
@@ -3117,7 +3158,7 @@ emails.change_email_text = Are you sure you want to update this email address?
emails.delete = Delete Email
emails.delete_desc = Are you sure you want to delete this email address?
emails.deletion_success = The email address has been deleted.
-emails.delete_primary_email_error = You can not delete the primary email.
+emails.delete_primary_email_error = You cannot delete the primary email address.
orgs.org_manage_panel = Organization Management
orgs.name = Name
@@ -3231,27 +3272,29 @@ auths.oauth2_required_claim_name_helper = Set this name to restrict login from t
auths.oauth2_required_claim_value = Required Claim Value
auths.oauth2_required_claim_value_helper = Set this value to restrict login from this source to users with a claim with this name and value
auths.oauth2_group_claim_name = Claim name providing group names for this source. (Optional)
-auths.oauth2_admin_group = Group Claim value for administrator users. (Optional - requires claim name above)
-auths.oauth2_restricted_group = Group Claim value for restricted users. (Optional - requires claim name above)
-auths.oauth2_map_group_to_team = Map claimed groups to Organization teams. (Optional - requires claim name above)
+auths.oauth2_full_name_claim_name = Full Name Claim Name. (Optional — if set, the user's full name will always be synchronized with this claim)
+auths.oauth2_ssh_public_key_claim_name = SSH Public Key Claim Name
+auths.oauth2_admin_group = Group Claim value for administrator users. (Optional — requires claim name above)
+auths.oauth2_restricted_group = Group Claim value for restricted users. (Optional — requires claim name above)
+auths.oauth2_map_group_to_team = Map claimed groups to Organization teams. (Optional — requires claim name above)
auths.oauth2_map_group_to_team_removal = Remove users from synchronized teams if user does not belong to corresponding group.
auths.enable_auto_register = Enable Auto Registration
auths.sspi_auto_create_users = Automatically create users
-auths.sspi_auto_create_users_helper = Allow SSPI auth method to automatically create new accounts for users that login for the first time
+auths.sspi_auto_create_users_helper = Allow SSPI auth method to automatically create new accounts for users that log in for the first time
auths.sspi_auto_activate_users = Automatically activate users
auths.sspi_auto_activate_users_helper = Allow SSPI auth method to automatically activate new users
auths.sspi_strip_domain_names = Remove domain names from usernames
-auths.sspi_strip_domain_names_helper = If checked, domain names will be removed from logon names (eg. "DOMAIN\user" and "user@example.org" both will become just "user").
+auths.sspi_strip_domain_names_helper = If checked, domain names will be removed from logon names (e.g. "DOMAIN\user" and "user@example.org" both will become just "user").
auths.sspi_separator_replacement = Separator to use instead of \, / and @
-auths.sspi_separator_replacement_helper = The character to use to replace the separators of down-level logon names (eg. the \ in "DOMAIN\user") and user principal names (eg. the @ in "user@example.org").
+auths.sspi_separator_replacement_helper = The character to use to replace the separators of down-level logon names (e.g. the \ in "DOMAIN\user") and user principal names (e.g. the @ in "user@example.org").
auths.sspi_default_language = Default user language
-auths.sspi_default_language_helper = Default language for users automatically created by SSPI auth method. Leave empty if you prefer language to be automatically detected.
+auths.sspi_default_language_helper = Default language for users automatically created by SSPI auth method. Leave empty if you prefer the language to be automatically detected.
auths.tips = Tips
auths.tips.oauth2.general = OAuth2 Authentication
auths.tips.oauth2.general.tip = When registering a new OAuth2 authentication, the callback/redirect URL should be:
auths.tip.oauth2_provider = OAuth2 Provider
auths.tip.bitbucket = Register a new OAuth consumer on %s and add the permission 'Account' - 'Read'
-auths.tip.nextcloud = Register a new OAuth consumer on your instance using the following menu "Settings -> Security -> OAuth 2.0 client"
+auths.tip.nextcloud = Register a new OAuth consumer on your instance by selecting "Settings -> Security -> OAuth 2.0 client" in the menu
auths.tip.dropbox = Create a new application at %s
auths.tip.facebook = Register a new application at %s and add the product "Facebook Login"
auths.tip.github = Register a new OAuth application on %s
@@ -3361,7 +3404,7 @@ config.mailer_sendmail_path = Sendmail Path
config.mailer_sendmail_args = Extra Arguments to Sendmail
config.mailer_sendmail_timeout = Sendmail Timeout
config.mailer_use_dummy = Dummy
-config.test_email_placeholder = Email (e.g. test@example.com)
+config.test_email_placeholder = Email Address (e.g. test@example.com)
config.send_test_mail = Send Testing Email
config.send_test_mail_submit = Send
config.test_mail_failed = Failed to send a testing email to "%s": %v
@@ -3394,6 +3437,7 @@ config.picture_service = Picture Service
config.disable_gravatar = Disable Gravatar
config.enable_federated_avatar = Enable Federated Avatars
config.open_with_editor_app_help = The "Open with" editors for the clone menu. If left empty, the default will be used. Expand to see the default.
+config.git_guide_remote_name = Repository remote name for git commands in the guide
config.git_config = Git Configuration
config.git_disable_diff_highlight = Disable Diff Syntax Highlight
@@ -3435,7 +3479,7 @@ monitor.start = Start Time
monitor.execute_time = Execution Time
monitor.last_execution_result = Result
monitor.process.cancel = Cancel process
-monitor.process.cancel_desc = Cancelling a process may cause data loss
+monitor.process.cancel_desc = Canceling a process may cause data loss
monitor.process.children = Children
monitor.queues = Queues
@@ -3450,7 +3494,7 @@ monitor.queue.numberinqueue = Number in Queue
monitor.queue.review_add = Review / Add Workers
monitor.queue.settings.title = Pool Settings
monitor.queue.settings.desc = Pools dynamically grow in response to their worker queue blocking.
-monitor.queue.settings.maxnumberworkers = Max Number of workers
+monitor.queue.settings.maxnumberworkers = Max number of workers
monitor.queue.settings.maxnumberworkers.placeholder = Currently %[1]d
monitor.queue.settings.maxnumberworkers.error = Max number of workers must be a number
monitor.queue.settings.submit = Update Settings
@@ -3476,10 +3520,10 @@ notices.delete_success = The system notices have been deleted.
self_check.no_problem_found = No problem found yet.
self_check.startup_warnings = Startup warnings:
self_check.database_collation_mismatch = Expect database to use collation: %s
-self_check.database_collation_case_insensitive = Database is using a collation %s, which is an insensitive collation. Although Gitea could work with it, there might be some rare cases which don't work as expected.
-self_check.database_inconsistent_collation_columns = Database is using collation %s, but these columns are using mismatched collations. It might cause some unexpected problems.
-self_check.database_fix_mysql = For MySQL/MariaDB users, you could use the "gitea doctor convert" command to fix the collation problems, or you could also fix the problem by "ALTER ... COLLATE ..." SQLs manually.
-self_check.database_fix_mssql = For MSSQL users, you could only fix the problem by "ALTER ... COLLATE ..." SQLs manually at the moment.
+self_check.database_collation_case_insensitive = Database is using collation %s, which is a case-insensitive collation. Although Gitea could work with it, there might be some rare cases which don't work as expected.
+self_check.database_inconsistent_collation_columns = Database is using collation %s, but these columns are using mismatched collations. This might cause some unexpected problems.
+self_check.database_fix_mysql = For MySQL/MariaDB users, you could use the "gitea doctor convert" command to fix the collation problems, or you could also fix the problem manually with "ALTER ... COLLATE ..." SQL queries.
+self_check.database_fix_mssql = For MSSQL users, you could only fix the problem manually with "ALTER ... COLLATE ..." SQL queries at the moment.
self_check.location_origin_mismatch = Current URL (%[1]s) doesn't match the URL seen by Gitea (%[2]s). If you are using a reverse proxy, please make sure the "Host" and "X-Forwarded-Proto" headers are set correctly.
[action]
@@ -3563,8 +3607,8 @@ error.no_committer_account = No account linked to committer's email address
error.no_gpg_keys_found = "No known key found for this signature in database"
error.not_signed_commit = "Not a signed commit"
error.failed_retrieval_gpg_keys = "Failed to retrieve any key attached to the committer's account"
-error.probable_bad_signature = "WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS."
-error.probable_bad_default_signature = "WARNING! Although the default key has this ID it does not verify this commit! This commit is SUSPICIOUS."
+error.probable_bad_signature = "WARNING! Although there is a key with this ID in the database, it does not verify this commit! This commit is SUSPICIOUS."
+error.probable_bad_default_signature = "WARNING! Although the default key has this ID, it does not verify this commit! This commit is SUSPICIOUS."
[units]
unit = Unit
@@ -3603,7 +3647,7 @@ versions.view_all = View all
dependency.id = ID
dependency.version = Version
search_in_external_registry = Search in %s
-alpine.registry = Setup this registry by adding the url in your /etc/apk/repositories file:
+alpine.registry = Set up this registry by adding the URL in your /etc/apk/repositories file:
alpine.registry.key = Download the registry public RSA key into the /etc/apk/keys/ folder to verify the index signature:
alpine.registry.info = Choose $branch and $repository from the list below.
alpine.install = To install the package, run the following command:
@@ -3616,18 +3660,18 @@ arch.install = Sync package with pacman:
arch.repository = Repository Info
arch.repository.repositories = Repositories
arch.repository.architectures = Architectures
-cargo.registry = Setup this registry in the Cargo configuration file (for example ~/.cargo/config.toml):
+cargo.registry = Set up this registry in the Cargo configuration file (for example ~/.cargo/config.toml):
cargo.install = To install the package using Cargo, run the following command:
-chef.registry = Setup this registry in your ~/.chef/config.rb file:
+chef.registry = Set up this registry in your ~/.chef/config.rb file:
chef.install = To install the package, run the following command:
-composer.registry = Setup this registry in your ~/.composer/config.json file:
+composer.registry = Set up this registry in your ~/.composer/config.json file:
composer.install = To install the package using Composer, run the following command:
composer.dependencies = Dependencies
composer.dependencies.development = Development Dependencies
conan.details.repository = Repository
-conan.registry = Setup this registry from the command line:
+conan.registry = Set up this registry from the command line:
conan.install = To install the package using Conan, run the following command:
-conda.registry = Setup this registry as a Conda repository in your .condarc file:
+conda.registry = Set up this registry as a Conda repository in your .condarc file:
conda.install = To install the package using Conda, run the following command:
container.details.type = Image Type
container.details.platform = Platform
@@ -3639,9 +3683,9 @@ container.layers = Image Layers
container.labels = Labels
container.labels.key = Key
container.labels.value = Value
-cran.registry = Setup this registry in your Rprofile.site file:
+cran.registry = Set up this registry in your Rprofile.site file:
cran.install = To install the package, run the following command:
-debian.registry = Setup this registry from the command line:
+debian.registry = Set up this registry from the command line:
debian.registry.info = Choose $distribution and $component from the list below.
debian.install = To install the package, run the following command:
debian.repository = Repository Info
@@ -3650,16 +3694,16 @@ debian.repository.components = Components
debian.repository.architectures = Architectures
generic.download = Download package from the command line:
go.install = Install the package from the command line:
-helm.registry = Setup this registry from the command line:
+helm.registry = Set up this registry from the command line:
helm.install = To install the package, run the following command:
-maven.registry = Setup this registry in your project pom.xml file:
-maven.install = To use the package include the following in the dependencies block in the pom.xml file:
+maven.registry = Set up this registry in your project pom.xml file:
+maven.install = To use the package, include the following in the dependencies block in the pom.xml file:
maven.install2 = Run via command line:
maven.download = To download the dependency, run via command line:
-nuget.registry = Setup this registry from the command line:
+nuget.registry = Set up this registry from the command line:
nuget.install = To install the package using NuGet, run the following command:
nuget.dependency.framework = Target Framework
-npm.registry = Setup this registry in your project .npmrc file:
+npm.registry = Set up this registry in your project .npmrc file:
npm.install = To install the package using npm, run the following command:
npm.install2 = or add it to the package.json file:
npm.dependencies = Dependencies
@@ -3671,7 +3715,7 @@ npm.details.tag = Tag
pub.install = To install the package using Dart, run the following command:
pypi.requires = Requires Python
pypi.install = To install the package using pip, run the following command:
-rpm.registry = Setup this registry from the command line:
+rpm.registry = Set up this registry from the command line:
rpm.distros.redhat = on RedHat based distributions
rpm.distros.suse = on SUSE based distributions
rpm.install = To install the package, run the following command:
@@ -3684,7 +3728,7 @@ rubygems.dependencies.runtime = Runtime Dependencies
rubygems.dependencies.development = Development Dependencies
rubygems.required.ruby = Requires Ruby version
rubygems.required.rubygems = Requires RubyGem version
-swift.registry = Setup this registry from the command line:
+swift.registry = Set up this registry from the command line:
swift.install = Add the package in your Package.swift file:
swift.install2 = and run the following command:
vagrant.install = To add a Vagrant box, run the following command:
@@ -3707,7 +3751,7 @@ owner.settings.cargo.initialize.success = The Cargo index was successfully creat
owner.settings.cargo.rebuild = Rebuild Index
owner.settings.cargo.rebuild.description = Rebuilding can be useful if the index is not synchronized with the stored Cargo packages.
owner.settings.cargo.rebuild.error = Failed to rebuild Cargo index: %v
-owner.settings.cargo.rebuild.success = The Cargo index was successfully rebuild.
+owner.settings.cargo.rebuild.success = The Cargo index was successfully rebuilt.
owner.settings.cleanuprules.title = Manage Cleanup Rules
owner.settings.cleanuprules.add = Add Cleanup Rule
owner.settings.cleanuprules.edit = Edit Cleanup Rule
@@ -3795,7 +3839,7 @@ runners.delete_runner = Delete this runner
runners.delete_runner_success = Runner deleted successfully
runners.delete_runner_failed = Failed to delete runner
runners.delete_runner_header = Confirm to delete this runner
-runners.delete_runner_notice = If a task is running on this runner, it will be terminated and mark as failed. It may break building workflow.
+runners.delete_runner_notice = If a task is running on this runner, it will be terminated and marked as failed. It may break building workflow.
runners.none = No runners available
runners.status.unspecified = Unknown
runners.status.idle = Idle
@@ -3826,6 +3870,7 @@ runs.no_runs = The workflow has no runs yet.
runs.empty_commit_message = (empty commit message)
runs.expire_log_message = Logs have been purged because they were too old.
runs.delete = Delete workflow run
+runs.cancel = Cancel workflow run
runs.delete.description = Are you sure you want to permanently delete this workflow run? This action cannot be undone.
runs.not_done = This workflow run is not done.
runs.view_workflow_file = View workflow file
diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini
index 521583395ec..0f24e6227f7 100644
--- a/options/locale/locale_es-ES.ini
+++ b/options/locale/locale_es-ES.ini
@@ -42,7 +42,6 @@ webauthn_use_twofa=Utilice un código de doble factor desde su teléfono móvil
webauthn_error=No se pudo leer su llave de seguridad.
webauthn_unsupported_browser=Su navegador no soporta actualmente WebAuthn.
webauthn_error_unknown=Ha ocurrido un error desconocido. Por favor, inténtelo de nuevo.
-webauthn_error_insecure=`WebAuthn sólo soporta conexiones seguras. Para probar sobre HTTP, puede utilizar el origen "localhost" o "127.0.0.1"`
webauthn_error_unable_to_process=El servidor no pudo procesar su solicitud.
webauthn_error_duplicated=La clave de seguridad no está permitida para esta solicitud. Por favor, asegúrese de que la clave no está ya registrada.
webauthn_error_empty=Debe establecer un nombre para esta clave.
@@ -179,8 +178,6 @@ buttons.enable_monospace_font=Activar fuente monoespaciada
buttons.disable_monospace_font=Desactivar fuente monoespaciada
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=Ha ocurrido un error
@@ -213,16 +210,10 @@ path=Ruta
sqlite_helper=Ruta del archivo de la base de datos SQLite3. Escriba una ruta de acceso absoluta si ejecuta Gitea como servicio.
reinstall_error=Usted está intentando instalar en una base de datos de Gitea existente
reinstall_confirm_message=Reinstalar con una base de datos de Gitea existente puede causar múltiples problemas. En la mayoría de los casos, debería utilizar su actual "app.ini" para ejecutar Gitea. Si sabe lo que está haciendo, confirme lo siguiente:
-reinstall_confirm_check_1=Los datos cifrados por el SECRET_KEY en el app.ini puede perderse: es posible que los usuarios no puedan iniciar sesión con 2FA/OTP & réplicas no funcionen correctamente. Marcando esta casilla confirma que el archivo app.ini actual contiene el SECRET_KEY.
-reinstall_confirm_check_2=Es posible que los repositorios y configuraciones tengan que volver a sincronizarse. Al marcar esta casilla confirma que resincronizará manualmente los ganchos de los repositorios y el archivo authorized_keys. Confirma que se asegurará de que la configuración del repositorio y la réplica son correctas.
reinstall_confirm_check_3=Confirma que está absolutamente seguro de que este Gitea se está ejecutando con el app.ini correcto y que está seguro de que tiene que volver a instalar. Confirma que reconoce los riesgos anteriores.
err_empty_db_path=La ruta a la base de datos SQLite3 no puede estar vacía.
no_admin_and_disable_registration=No puede deshabilitar el auto-registro sin crear una cuenta de administrador.
err_empty_admin_password=La contraseña del administrador no puede estar vacía.
-err_empty_admin_email=El correo electrónico del administrador no puede estar vacío.
-err_admin_name_is_reserved=Nombre de usuario del administrador no es válido, el nombre de usuario está reservado
-err_admin_name_pattern_not_allowed=El nombre de usuario del administrador no es válido, el nombre de usuario coincide con un patrón reservado
-err_admin_name_is_invalid=Nombre de usuario del administrador no es válido
general_title=Configuración general
app_name=Título del sitio
@@ -238,7 +229,6 @@ domain_helper=Dominio o dirección de host para el servidor.
ssh_port=Puerto de servidor SSH
ssh_port_helper=Número de puerto en el que está escuchando su servidor SSH. Déjelo vacío para deshabilitarlo.
http_port=Puerto de escucha HTTP de Gitea
-http_port_helper=Número de puerto en el que escuchará el servidor web de Gitea.
app_url=URL base de Gitea
app_url_helper=Dirección base para URLs de clonación HTTP(S) y notificaciones de correo electrónico.
log_root_path=Ruta del registro
@@ -301,7 +291,6 @@ no_reply_address=Dominio de correos electrónicos ocultos
no_reply_address_helper=Nombre de dominio para usuarios con dirección de correo electrónico oculta. Por ejemplo, el usuario 'joe' quedará registrado en Git como 'joe@noreply.example.org' si el dominio de correo electrónico oculto se establece a 'noreply.example.org'.
password_algorithm=Algoritmo Hash de Contraseña
invalid_password_algorithm=Algoritmo hash de contraseña no válido
-password_algorithm_helper=Establece el algoritmo de hashing de contraseña. Los algoritmos tienen diferentes requisitos y fuerza. El algoritmo argon2 es bastante seguro, pero usa mucha memoria y puede ser inapropiado para sistemas pequeños.
enable_update_checker=Activar comprobador de actualizaciones
enable_update_checker_helper=Comprueba el lanzamiento de nuevas versiones periódicamente en gitea.io.
env_config_keys=Configuración del entorno
@@ -358,8 +347,6 @@ allow_password_change=Obligar al usuario a cambiar la contraseña (recomendado)
reset_password_mail_sent_prompt=Un correo de confirmación se ha enviado a %s . Compruebe su bandeja de entrada en las siguientes %s para completar el proceso de recuperación de la cuenta.
active_your_account=Activa tu cuenta
account_activated=La cuenta ha sido activada
-prohibit_login=Ingreso prohibido
-prohibit_login_desc=Su cuenta no puede iniciar sesión, póngase en contacto con el administrador de su sitio.
resent_limit_prompt=Ya ha solicitado recientemente un correo de activación. Por favor, espere 3 minutos y vuelva a intentarlo.
has_unconfirmed_mail=Hola %s, su correo electrónico (%s ) no está confirmado. Si no ha recibido un correo de confirmación o necesita que lo enviemos de nuevo, por favor, haga click en el siguiente botón.
resend_mail=Haga click aquí para reenviar su correo electrónico de activación
@@ -395,16 +382,12 @@ openid_connect_desc=La URI OpenID elegida es desconocida. Asóciela a una nueva
openid_register_title=Crear una nueva cuenta
openid_register_desc=La URI OpenID elegida es desconocida. Asóciela a una nueva cuenta aquí.
openid_signin_desc=Introduzca su URI de OpenID. Por ejemplo: alice.openid.example.org o https://openid.example.org/alice.
-disable_forgot_password_mail=La recuperación de cuentas está desactivada porque no hay correo electrónico configurado. Por favor, contacte con el administrador del sitio.
-disable_forgot_password_mail_admin=La recuperación de cuentas solo está disponible cuando se configura el correo electrónico configurado. Por favor, configure el correo electrónico para permitir la recuperación de cuentas.
email_domain_blacklisted=No puede registrarse con su correo electrónico.
authorize_application=Autorizar aplicación
authorize_redirect_notice=Será redirigido a %s si autoriza esta aplicación.
authorize_application_created_by=Esta aplicación fue creada por %s.
-authorize_application_description=Si concede el acceso, podrá acceder y escribir a toda la información de su cuenta, incluyendo repositorios privado y organizaciones.
authorize_title=¿Autorizar a "%s" a acceder a su cuenta?
authorization_failed=Autorización fallida
-authorization_failed_desc=La autorización ha fallado porque hemos detectado una solicitud no válida. Por favor, póngase en contacto con el responsable de la aplicación que ha intentado autorizar.
sspi_auth_failed=Fallo en la autenticación SSPI
password_pwned_err=No se pudo completar la solicitud a HaveIBeenPwned
@@ -424,8 +407,6 @@ activate_email.title=%s, por favor verifique su dirección de correo electrónic
activate_email.text=Por favor, haga clic en el siguiente enlace para verificar su dirección de correo electrónico dentro de %s :
register_notify.title=%[1]s, bienvenido a %[2]s
-register_notify.text_1=este es tu correo de confirmación de registro para %s!
-register_notify.text_2=Ahora puede iniciar sesión vía nombre de usuario: %s.
register_notify.text_3=Si esta cuenta ha sido creada para usted, por favor establezca su contraseña primero.
reset_password=Recupere su cuenta
@@ -463,7 +444,6 @@ release.download.targz=Código fuente (TAR.GZ)
repo.transfer.subject_to=%s desea transferir "%s" a %s
repo.transfer.subject_to_you=%s desea transferir "%s" a usted
repo.transfer.to_you=usted
-repo.transfer.body=Para aceptarlo o rechazarlo, visita %s o simplemente ignórelo.
repo.collaborator.added.subject=%s le añadió en %s
repo.collaborator.added.text=Has sido añadido como colaborador del repositorio:
@@ -515,7 +495,6 @@ url_error=`"%s" no es una URL válida.`
include_error=` debe contener la subcadena "%s".`
glob_pattern_error=` el patrón globo no es válido: %s.`
regex_pattern_error=` el patrón de regex no es válido: %s.`
-username_error=` sólo puede contener caracteres alfanuméricos ('0-9','a-z','A-Z'), guión ('-'), guión bajo ('_') y punto ('.'). No puede comenzar o terminar con caracteres no alfanuméricos, y los caracteres no alfanuméricos consecutivos también están prohibidos.`
invalid_group_team_map_error=` la asignación no es válida: %s`
unknown_error=Error desconocido:
captcha_incorrect=El código CAPTCHA no es correcto.
@@ -528,11 +507,9 @@ username_has_not_been_changed=El nombre de usuario no ha sido cambiado
repo_name_been_taken=El nombre del repositorio ya está usado.
repository_force_private=Forzar Privado está habilitado: los repositorios privados no pueden hacerse públicos.
repository_files_already_exist=Ya existen archivos para este repositorio. Póngase en contacto con el administrador del sistema.
-repository_files_already_exist.adopt=Los archivos ya existen para este repositorio y sólo pueden ser aprobados.
repository_files_already_exist.delete=Ya existen archivos para este repositorio. Debe eliminarlos.
repository_files_already_exist.adopt_or_delete=Ya existen archivos para este repositorio. Adoptarlos o eliminarlos.
visit_rate_limit=Remoto tiene limitación de tasa de acceso.
-2fa_auth_required=Requerir autenticación de doble factor a visitas remotas.
org_name_been_taken=Ya existe una organización con este nombre.
team_name_been_taken=Ya existe un equipo con este nombre.
team_no_units_error=Permitir el acceso a por lo menos una sección del repositorio.
@@ -560,14 +537,8 @@ invalid_ssh_key=No se puede verificar su clave SSH: %s
invalid_gpg_key=No se puede verificar su clave GPG: %s
invalid_ssh_principal=Principal no válido: %s
must_use_public_key=La clave que proporcionó es una clave privada. No cargue su clave privada en ningún sitio. Utilice su clave pública en su lugar.
-unable_verify_ssh_key=No se puede verificar la clave SSH, comprueba si hay errores.
auth_failed=Autenticación fallo: %v
-still_own_repo=Su cuenta posee uno o más repositorios, elimínalos o transfiérelos primero.
-still_has_org=Tu cuenta es miembro de una o más organizaciones, déjalas primero.
-still_own_packages=Su cuenta posee uno o más paquetes, elimínalos primero.
-org_still_own_repo=Esta organización todavía posee uno o más repositorios, elimínalos o transfiérelos primero.
-org_still_own_packages=Esta organización todavía posee uno o más paquetes, elimínalos primero.
target_branch_not_exist=La rama de destino no existe
@@ -596,7 +567,6 @@ settings=Ajustes del usuario
form.name_reserved=El nombre de usuario "%s" está reservado.
form.name_pattern_not_allowed=El patrón "%s" no está permitido en un nombre de usuario.
-form.name_chars_not_allowed=El nombre de usuario "%s" contiene caracteres no válidos.
[settings]
@@ -619,7 +589,6 @@ uid=UID
public_profile=Perfil público
biography_placeholder=¡Cuéntanos un poco sobre ti mismo! (Puedes usar Markdown)
location_placeholder=Comparte tu ubicación aproximada con otros
-profile_desc=Controla cómo se muestra su perfil a otros usuarios. Tu dirección de correo electrónico principal se utilizará para notificaciones, recuperación de contraseña y operaciones de Git basadas en la web.
full_name=Nombre completo
website=Página web
location=Localización
@@ -689,10 +658,8 @@ requires_activation=Requiere activación
primary_email=Hacer primaria
activate_email=Enviar email de activación
activations_pending=Activaciones pendientes
-can_not_add_email_activations_pending=Hay una activación pendiente, inténtelo de nuevo en unos minutos si desea agregar un nuevo correo electrónico.
delete_email=Eliminar
email_deletion=Eliminar dirección de correo electrónico
-email_deletion_desc=La dirección de correo electrónico e información relacionada se eliminará de su cuenta. Los commits de Git hechos por esta dirección de correo electrónico permanecerán inalterados. ¿Continuar?
email_deletion_success=La dirección de correo electrónico ha sido eliminada.
theme_update_success=Su tema fue actualizado.
theme_update_error=El tema seleccionado no existe.
@@ -734,7 +701,6 @@ gpg_key_matched_identities_long=Las identidades incrustadas en esta clave coinci
gpg_key_verified=Clave verificada
gpg_key_verified_long=La clave ha sido verificada con un token y puede ser usada para verificar confirmaciones que coincidan con cualquier dirección de correo electrónico activada para este usuario, además de cualquier identidad coincidente para esta clave.
gpg_key_verify=Verificar
-gpg_invalid_token_signature=La clave GPG proporcionada, la firma y el token no coinciden o el token está desactualizado.
gpg_token_required=Debe proporcionar una firma para el token de abajo
gpg_token=Token
gpg_token_help=Puede generar una firma de la siguiente manera:
@@ -744,7 +710,6 @@ verify_gpg_key_success=La clave GPG "%s" ha sido verificada.
ssh_key_verified=Clave verificada
ssh_key_verified_long=La clave ha sido verificada con un token y puede ser usada para verificar confirmaciones que coincidan con cualquier dirección de correo electrónico activada para este usuario.
ssh_key_verify=Verificar
-ssh_invalid_token_signature=La clave SSH proporcionada, la firma o el token no coinciden o el token está desactualizado.
ssh_token_required=Debe proporcionar una firma para el token de abajo
ssh_token=Token
ssh_token_help=Puede generar una firma de la siguiente manera:
@@ -765,7 +730,6 @@ gpg_key_deletion=Eliminar clave GPG
ssh_principal_deletion=Eliminar principal de certificado SSH
ssh_key_deletion_desc=Eliminando una clave SSH se revoca su acceso a su cuenta. ¿Continuar?
gpg_key_deletion_desc=Eliminando una clave GPG se des-verifican los commits firmados con ella. ¿Continuar?
-ssh_principal_deletion_desc=Eliminar un principal de certificado SSH revoca su acceso a su cuenta. ¿Continuar?
ssh_key_deletion_success=La clave SSH ha sido eliminada.
gpg_key_deletion_success=La clave GPG ha sido eliminada.
ssh_principal_deletion_success=El principal ha sido eliminado.
@@ -823,7 +787,6 @@ create_oauth2_application_button=Crear Aplicación
create_oauth2_application_success=Ha creado con éxito una nueva aplicación de OAuth2.
update_oauth2_application_success=Ha actualizado correctamente la aplicación de OAuth2.
oauth2_application_name=Nombre de la Aplicación
-oauth2_confidential_client=Cliente confidencial. Seleccione para aplicaciones que mantengan el secreto confidencial, tales como aplicaciones web. No seleccione para aplicaciones nativas, incluyendo aplicaciones de escritorio y móviles.
oauth2_redirect_uris=Redirigir URIs. Por favor, usa una nueva línea para cada URI.
save_application=Guardar
oauth2_client_id=ID de cliente
@@ -836,16 +799,13 @@ oauth2_application_create_description=Las aplicaciones OAuth2 le dan acceso a su
oauth2_application_remove_description=Eliminar una aplicación de OAuth2 evitará que acceda a cuentas de usuario autorizadas en esta instancia. ¿Continuar?
authorized_oauth2_applications=Aplicaciones OAuth2 autorizadas
-authorized_oauth2_applications_description=Has concedido acceso a tu cuenta personal de Gitea a estas aplicaciones de terceros. Por favor, revoca el acceso para las aplicaciones que ya no necesitas.
revoke_key=Revocar
revoke_oauth2_grant=Revocar acceso
-revoke_oauth2_grant_description=Revocar el acceso a esta aplicación impedirá que esta aplicación acceda a sus datos. ¿Está seguro?
revoke_oauth2_grant_success=Acceso revocado correctamente.
twofa_is_enrolled=Su cuenta actualmente está registrada en la autenticación de doble factor.
twofa_not_enrolled=Tu cuenta no está actualmente inscrita en la autenticación de doble factor.
twofa_disable=Deshabilitar autenticación de doble factor
-twofa_enroll=Inscribirse en la autenticación de doble factor
twofa_disable_note=Puede deshabilitar la autenticación de doble factor si lo necesita.
twofa_disable_desc=Deshabilitar la autenticación de doble factor hará su cuenta menos segura. ¿Continuar?
twofa_disabled=La autenticación de doble factor ha sido deshabilitada.
@@ -858,11 +818,9 @@ twofa_failed_get_secret=No se pudo obtener el secreto.
webauthn_register_key=Añadir clave de seguridad
webauthn_nickname=Apodo
webauthn_delete_key=Eliminar clave de seguridad
-webauthn_delete_key_desc=Si elimina una llave de seguridad ya no podrá utilizarla para iniciar sesión con ella. ¿Continuar?
manage_account_links=Administrar cuentas vinculadas
manage_account_links_desc=Estas cuentas externas están vinculadas a su cuenta de Gitea.
-account_links_not_available=Actualmente no hay cuentas externas vinculadas a su cuenta de Gitea.
link_account=Enlazar cuenta
remove_account_link=Eliminar cuenta vinculada
remove_account_link_desc=Eliminar una cuenta vinculada revocará su acceso a su cuenta de Gitea. ¿Continuar?
@@ -916,7 +874,6 @@ fork_to_different_account=Forkear a una cuenta diferente
fork_visibility_helper=La visibilidad de un repositorio del cual se ha hecho fork no puede ser cambiada.
fork_branch=Rama a clonar en la bifurcación
all_branches=Todas las ramas
-fork_no_valid_owners=Este repositorio no puede ser bifurcado porque no hay propietarios válidos.
use_template=Utilizar esta plantilla
download_zip=Descargar ZIP
download_tar=Descargar TAR.GZ
@@ -952,12 +909,10 @@ mirror_interval_invalid=El intervalo de réplica no es válido.
mirror_sync_on_commit=Sincronizar cuando los commits sean subidos
mirror_address=Clonar desde URL
mirror_address_desc=Ponga cualquier credencial requerida en la sección de Autorización.
-mirror_address_url_invalid=La URL proporcionada no es válida. Debe escapar todos los componentes de la url correctamente.
mirror_address_protocol_invalid=La URL proporcionada no es válida. Sólo http(s):// o git:// se puede utilizar para ser replicadas.
mirror_lfs=Almacenamiento de archivos grande (LFS)
mirror_lfs_desc=Activar la reproducción de datos LFS.
mirror_lfs_endpoint=Punto final de LFS
-mirror_lfs_endpoint_desc=Sync intentará usar la url del clon para determinar el servidor LFS . También puede especificar un punto final personalizado si los datos LFS del repositorio se almacenan en otro lugar.
mirror_last_synced=Sincronizado por última vez
mirror_password_placeholder=(Sin cambios)
mirror_password_blank_placeholder=(Indefinido)
@@ -969,7 +924,6 @@ forks=Forks
reactions_more=y %d más
unit_disabled=El administrador del sitio ha deshabilitado esta sección del repositorio.
language_other=Otros
-adopt_search=Introduzca el nombre de usuario para buscar repositorios no adoptados... (déjelo en blanco para encontrar todos)
adopt_preexisting_label=Adoptar archivos
adopt_preexisting=Adoptar archivos preexistentes
adopt_preexisting_content=Crear repositorio desde %s
@@ -1005,8 +959,6 @@ template.issue_labels=Etiquetas de incidencia
template.one_item=Debe seleccionar al menos un elemento de plantilla
template.invalid=Debe seleccionar una plantilla de repositorio
-archive.title=Este repositorio está archivado. Usted puede ver los archivos y clonarlos, pero no puede hace push o abrir incidencias o pull requests.
-archive.title_date=Este repositorio ha sido archivado en %s. Puedes ver archivos y clonarlo, pero no puedes hacer push o abrir incidencias o pull request.
archive.issue.nocomment=Este repositorio está archivado. No se puede comentar en las incidencias.
archive.pull.nocomment=Este repositorio está archivado. No se puede comentar en los pull requests.
@@ -1023,7 +975,6 @@ migrate_options_lfs=Migrar archivos LFS
migrate_options_lfs_endpoint.label=Punto final de LFS
migrate_options_lfs_endpoint.description=Migración intentará usar su mando Git para determinar el servidor LFS . También puede especificar un punto final personalizado si los datos LFS del repositorio se almacenan en otro lugar.
migrate_options_lfs_endpoint.description.local=También se admite una ruta del servidor local.
-migrate_options_lfs_endpoint.placeholder=Si se deja en blanco, el punto final se derivará de la URL de clonación
migrate_items=Objetos de migración
migrate_items_wiki=Wiki
migrate_items_milestones=Hitos
@@ -1035,10 +986,8 @@ migrate_items_releases=Lanzamientos
migrate_repo=Migrar Repositorio
migrate.clone_address=Migrar / Clonar desde URL
migrate.clone_address_desc=La URL HTTP(S) o de Git 'clone' de un repositorio existente
-migrate.github_token_desc=Puedes poner uno o más tokens con comas separadas aquí para hacer migrar más rápido debido al límite de velocidad de GitHub API. PRECAUCIÓN: Abusar esta característica puede violar la política del proveedor de servicios y llevar a bloquear la cuenta.
migrate.clone_local_path=o una ruta local del servidor
migrate.permission_denied=No te está permitido importar repositorios locales.
-migrate.permission_denied_blocked=No puede importar desde hosts no permitidos, por favor pida al administrador que marque ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS configuración.
migrate.invalid_local_path=La ruta local no es válida. No existe o no es un directorio.
migrate.invalid_lfs_endpoint=El punto final de LFS no es válido.
migrate.failed=Migración fallida: %v
@@ -1046,7 +995,6 @@ migrate.migrate_items_options=Un token de acceso es necesario para migrar elemen
migrated_from=Migrado desde %[2]s
migrated_from_fake=Migrado desde %[1]s
migrate.migrate=Migrar desde %s
-migrate.migrating=Migrando desde %s ...
migrate.migrating_failed=La migración desde %s ha fallado.
migrate.migrating_failed.error=Error al migrar: %s
migrate.migrating_failed_no_addr=Migración fallida.
@@ -1088,7 +1036,6 @@ clone_this_repo=Clonar este repositorio
cite_this_repo=Citar este repositorio
create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
push_exist_repo=Hacer push de un repositorio existente desde línea de comandos
-empty_message=Este repositorio no contiene ningún contenido.
broken_message=Los datos de Git subyacentes a este repositorio no pueden ser leídos. Contacte con el administrador de esta instancia o elimine este repositorio.
code=Código
@@ -1106,7 +1053,6 @@ projects=Proyectos
packages=Paquetes
actions=Acciones
labels=Etiquetas
-org_labels_desc=Etiquetas de nivel de la organización que pueden ser utilizadas con todos los repositorios bajo esta organización
org_labels_desc_manage=gestionar
milestone=Hito
@@ -1180,7 +1126,6 @@ editor.update=Actualizar %s
editor.delete=Eliminar %s
editor.patch=Aplicar parche
editor.patching=Parcheando:
-editor.fail_to_apply_patch=`No se puede aplicar el parche "%s"`
editor.new_patch=Nuevo parche
editor.commit_message_desc=Añadir una descripción extendida opcional…
editor.signoff_desc=Añadir un trailer firmado por el committer al final del mensaje de registro de confirmación.
@@ -1196,17 +1141,12 @@ editor.filename_is_invalid=El nombre de archivo no es válido: "%s".
editor.branch_does_not_exist=La rama "%s" no existe en este repositorio.
editor.branch_already_exists=La rama "%s" ya existe en este repositorio.
editor.directory_is_a_file=Nombre del directorio "%s" ya se utiliza como nombre de archivo en este repositorio.
-editor.file_is_a_symlink=`"%s" es un enlace simbólico. Los enlaces simbólicos no se pueden editar en el editor web`
editor.filename_is_a_directory=Nombre de archivo "%s" ya se utiliza como nombre de directorio en este repositorio.
-editor.file_editing_no_longer_exists=El archivo que se está editando, "%s", ya no existe en este repositorio.
-editor.file_deleting_no_longer_exists=El archivo que se está eliminando, "%s", ya no existe en este repositorio.
editor.file_changed_while_editing=Desde que comenzó a editar, el contenido del archivo ha sido cambiado. Haga clic aquí para ver qué ha cambiado o presione confirmar de nuevo para sobrescribir los cambios.
editor.file_already_exists=Ya existe un archivo llamado "%s" en este repositorio.
editor.commit_empty_file_header=Commit un archivo vacío
editor.commit_empty_file_text=El archivo que estás tratando de commit está vacío. ¿Proceder?
editor.no_changes_to_show=No existen cambios para mostrar.
-editor.fail_to_update_file=Error al actualizar/crear el archivo "%s".
-editor.fail_to_update_file_summary=Mensaje de error
editor.push_rejected_no_message=El cambio fue rechazado por el servidor sin un mensaje. Por favor, compruebe Git Hooks.
editor.push_rejected=El cambio fue rechazado por el servidor. Por favor, comprueba los Git Hooks.
editor.push_rejected_summary=Mensaje completo de rechazo
@@ -1221,6 +1161,7 @@ editor.require_signed_commit=Esta rama requiere un commit firmado
editor.cherry_pick=Hacer Cherry-pick %s en:
editor.revert=Revertir %s en:
+
commits.desc=Ver el historial de cambios de código fuente.
commits.commits=Commits
commits.no_commits=No hay commits en común. "%s" y "%s" tienen historias totalmente diferentes.
@@ -1377,7 +1318,6 @@ issues.filter_type.reviewed_by_you=Revisado por ti
issues.filter_sort=Ordenar
issues.filter_sort.latest=Más recientes
issues.filter_sort.oldest=Más antiguas
-issues.filter_sort.recentupdate=Actualizada recientemente
issues.filter_sort.leastupdate=Actualizada menos recientemente
issues.filter_sort.mostcomment=Más comentadas
issues.filter_sort.leastcomment=Menos comentadas
@@ -1493,7 +1433,6 @@ issues.lock_no_reason=conversación limitada y bloqueada a los colaboradores %s
issues.unlock_comment=desbloqueó esta conversación %s
issues.lock_confirm=Bloquear
issues.unlock_confirm=Desbloquear
-issues.lock.notice_1=- Otros usuarios no pueden añadir nuevos comentarios a esta incidencia.
issues.lock.notice_2=- Usted y otros colaboradores con acceso a este repositorio todavía pueden dejar comentarios que otros pueden ver.
issues.lock.notice_3=- Siempre puede desbloquear esta incidencia de nuevo en el futuro.
issues.unlock.notice_1=- Todos podrían comentar esta incidencia de nuevo.
@@ -1531,7 +1470,6 @@ issues.due_date_form=aaaa-mm-dd
issues.due_date_form_add=Añadir fecha de vencimiento
issues.due_date_form_edit=Editar
issues.due_date_form_remove=Eliminar
-issues.due_date_not_writer=Necesita acceso de escritura a este repositorio para actualizar la fecha límite de de una incidencia.
issues.due_date_not_set=Sin fecha de vencimiento.
issues.due_date_added=añadió la fecha de vencimiento %s %s
issues.due_date_modified=modificó la fecha de vencimiento de %[2]s a %[1]s %[3]s
@@ -1554,9 +1492,7 @@ issues.dependency.pr_closing_blockedby=Cerrando este pull request es bloqueado p
issues.dependency.issue_closing_blockedby=Cerrando esta incidencia esta bloqueado por las siguientes incidencias
issues.dependency.issue_close_blocks=Esta incidencia bloquea el cierre de las siguientes incidencias
issues.dependency.pr_close_blocks=Este pull request bloquea el cierre de las siguientes incidencias
-issues.dependency.issue_close_blocked=Necesita cerrar todos las incidencias que bloquean esta incidencia antes de que se puede cerrar.
issues.dependency.issue_batch_close_blocked=No se pueden cerrar por lotes las incidencias que has seleccionado, ya que la incidencia #%d todavía tiene dependencias abiertas
-issues.dependency.pr_close_blocked=Necesita cerrar todos las incidencias que bloquean este pull request antes de poder fusionarse.
issues.dependency.blocks_short=Bloquea
issues.dependency.blocked_by_short=Depende de
issues.dependency.remove_header=Eliminar dependencia
@@ -1567,12 +1503,10 @@ issues.dependency.add_error_same_issue=No se puede hacer que una incidencia depe
issues.dependency.add_error_dep_issue_not_exist=Incidencia dependiente no existe.
issues.dependency.add_error_dep_not_exist=La dependencia no existe.
issues.dependency.add_error_dep_exists=La dependencia ya existe.
-issues.dependency.add_error_cannot_create_circular=No puede crear una depenciena con dos issues que se estan bloqueando mutuamente.
issues.dependency.add_error_dep_not_same_repo=Ambas incidencias deben estar en el mismo repositorio.
issues.review.self.approval=No puede aprobar su propio pull request.
issues.review.self.rejection=No puede sugerir cambios en su propio pull request.
issues.review.approve=aprobado estos cambios %s
-issues.review.dismissed=descartó la revisión de %s %s
issues.review.dismissed_label=Descartado
issues.review.left_comment=dejó un comentario
issues.review.content.empty=Es necesario dejar un comentario indicando los cambios solicitados.
@@ -1580,7 +1514,6 @@ issues.review.reject=cambios solicitados %s
issues.review.wait=se solicitó para revisión %s
issues.review.add_review_request=solicitud de revisión de %s %s
issues.review.remove_review_request=solicitud de revisión eliminada para %s %s
-issues.review.remove_review_request_self=rechazó revisar %s
issues.review.pending=Pendiente
issues.review.pending.tooltip=Este comentario no es visible actualmente para otros usuarios. Para enviar sus comentarios pendientes, seleccione "%s" -> "%s/%s/%s" en la parte superior de la página.
issues.review.review=Revisar
@@ -1597,7 +1530,6 @@ issues.review.resolve_conversation=Resolver conversación
issues.review.un_resolve_conversation=Marcar conversación sin resolver
issues.review.resolved_by=ha marcado esta conversación como resuelta
issues.review.commented=Comentario
-issues.assignee.error=No todos los asignados fueron añadidos debido a un error inesperado.
issues.reference_issue.body=Cuerpo
issues.content_history.deleted=borrado
issues.content_history.edited=editado
@@ -1632,7 +1564,6 @@ pulls.show_all_commits=Mostrar todos los commits
pulls.show_changes_since_your_last_review=Mostrar cambios desde tu última revisión
pulls.showing_only_single_commit=Mostrando solo los cambios del commit %[1]s
pulls.showing_specified_commit_range=Mostrando solo cambios entre %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Seleccionar commit. Mantener pulsado shift + clic para seleccionar un rango
pulls.review_only_possible_for_full_diff=La revisión solo es posible cuando se ve la diff completa
pulls.filter_changes_by_commit=Filtrar por commit
pulls.nothing_to_compare=Estas ramas son iguales. No hay necesidad para crear un pull request.
@@ -1681,30 +1612,20 @@ pulls.reject_count_1=%d solicitud de cambio
pulls.reject_count_n=%d solicitudes de cambio
pulls.waiting_count_1=%d esperando revisión
pulls.waiting_count_n=%d esperando revisiónes
-pulls.wrong_commit_id=la identificación de commit debe ser para un commit en la rama de destino
pulls.no_merge_desc=Este pull request no se puede combinar porque todas las opciones de combinación del repositorio están deshabilitadas.
pulls.no_merge_helper=Habilite las opciones de combinación en la configuración del repositorio o fusione el pull request manualmente.
pulls.no_merge_wip=Este pull request no se puede combinar porque está marcada como un trabajo en progreso.
-pulls.no_merge_not_ready=Este pull request no está listo para ser fusionado, compruebe el estado de revisión y las comprobaciones de estado.
pulls.no_merge_access=No está autorizado para fusionar de este pull request.
pulls.merge_pull_request=Crear commit fusionado
-pulls.rebase_merge_pull_request=Rebase y luego fast-forward
-pulls.rebase_merge_commit_pull_request=Rebase y luego crear commit fusionado
pulls.squash_merge_pull_request=Crear commit squash
pulls.merge_manually=Fusionado manualmente
pulls.merge_commit_id=La identificación del commit fusionado
pulls.require_signed_wont_sign=Esta rama requiere commits firmados pero esta fusión no será firmada
pulls.invalid_merge_option=No puede utilizar esta opción de combinación para esta solicitud de extracción.
-pulls.merge_conflict=Fusión fallida: Hubo un conflicto mientras se fusionaba. Pista: Pruebe una estrategia diferente
pulls.merge_conflict_summary=Mensaje de error
-pulls.rebase_conflict=Fusión fallida: Hubo un conflicto mientras se rebasaba el commit: %[1]s. Pista: Prueba una estrategia diferente
pulls.rebase_conflict_summary=Mensaje de error
-pulls.unrelated_histories=Fusionar Fallidos: El jefe de fusión y la base no comparten un historial común. Pista: Prueba una estrategia diferente
-pulls.merge_out_of_date=Fusión fallida: Mientras se generaba la fusión, la base fue actualizada. Pista: Inténtelo de nuevo.
-pulls.head_out_of_date=Fusión fallida: Mientras se generaba la fusión, la cabeza fue actualizada. Pista: Inténtelo de nuevo.
-pulls.has_merged=Error: La pull request ha sido fusionada, no puedes fusionarla de nuevo ni cambiar la rama objetivo.
pulls.push_rejected_summary=Mensaje completo de rechazo
pulls.open_unmerged_pull_exists=`No puede realizar la reapertura porque hay un pull request pendiente (#%d) con propiedades idénticas.`
pulls.status_checking=Algunas comprobaciones están pendientes
@@ -1723,7 +1644,6 @@ pulls.close=Cerrar Pull Request
pulls.closed_at=`cerró este pull request %[2]s `
pulls.reopened_at=`reabrió este pull request %[2]s `
pulls.clear_merge_message=Borrar mensaje de fusión
-pulls.clear_merge_message_hint=Limpiar el mensaje de fusión solo eliminará el contenido del mensaje de commit y mantendrá frases generadas como "Co-Autorizado por …".
pulls.auto_merge_button_when_succeed=(cuando las comprobaciones tengan éxito)
pulls.auto_merge_when_succeed=Fusionar automática cuando todas las comprobaciones tengan éxito
@@ -1776,12 +1696,10 @@ milestones.filter_sort.most_issues=Mayoría de los problemas
milestones.filter_sort.least_issues=Menos problemas
signing.will_sign=Este commit se firmará con la clave "%s".
-signing.wont_sign.error=Hubo un error mientras se comprobaba si la confirmación podía ser firmada.
signing.wont_sign.nokey=No hay ninguna clave disponible para firmar este commit.
signing.wont_sign.never=Nunca se firman los commits.
signing.wont_sign.always=Siempre se firman los commits.
signing.wont_sign.pubkey=El commit no se firmará porque no tiene una clave pública asociada a su cuenta.
-signing.wont_sign.twofa=Debe tener habilitada la autenticación de doble factor para tener los commits firmados.
signing.wont_sign.parentsigned=El commit no será firmado ya que el commit padre no está firmado.
signing.wont_sign.basesigned=La fusión no se firmará ya que el commit base no está firmado.
signing.wont_sign.headsigned=La fusión no se firmará ya que el commit principal no está firmado.
@@ -1863,7 +1781,6 @@ activity.title.releases_1=%d Lanzamiento
activity.title.releases_n=%d Lanzamientos
activity.title.releases_published_by=%s publicado por %s
activity.published_release_label=Publicado
-activity.no_git_activity=No ha habido ningún commit en este período.
activity.git_stats_exclude_merges=Excluyendo fusiones,
activity.git_stats_author_1=%d autor
activity.git_stats_author_n=%d autores
@@ -1888,7 +1805,6 @@ activity.git_stats_deletion_n=%d eliminaciones
contributors.contribution_type.commits=Commits
settings=Configuración
-settings.desc=La configuración es donde puede administrar la configuración del repositorio
settings.options=Repositorio
settings.collaboration=Colaboradores
settings.collaboration.admin=Administrador
@@ -1905,7 +1821,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Configure su pro
settings.mirror_settings.docs.disabled_push_mirror.instructions=Configure su proyecto para extraer automáticamente commits, etiquetas y ramas de otro repositorio.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Ahora mismo, esto solo se puede hacer en el menú "Nueva Migración". Para más información, por favor consulta:
settings.mirror_settings.docs.disabled_push_mirror.info=Las réplicas push han sido desactivadas por el administrador del sitio.
-settings.mirror_settings.docs.no_new_mirrors=Su repositorio está reproduciendo los cambios en o desde otro repositorio. Por favor, tenga en cuenta que no puede crear nuevas réplicas en este momento.
settings.mirror_settings.docs.can_still_use=Aunque no puede modificar las réplicas existentes o crear otras nuevas, puede usar su réplica existente.
settings.mirror_settings.docs.pull_mirror_instructions=Para crear un pull mirror, consulte por favor:
settings.mirror_settings.docs.more_information_if_disabled=Puedes encontrar más información sobre push y pull mirrors aquí:
@@ -1973,7 +1888,6 @@ settings.admin_indexer_commit_sha=Último SHA indexado
settings.admin_indexer_unindexed=Sin indexar
settings.reindex_button=Añadir a la cola de reindexación
settings.reindex_requested=Reindexar Solicitado
-settings.admin_enable_close_issues_via_commit_in_any_branch=Cerrar una incidencia a través de un commit realizado en una rama no principal
settings.danger_zone=Zona de Peligro
settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con el mismo nombre.
settings.convert=Convertir en repositorio normal
@@ -1994,7 +1908,6 @@ settings.transfer_abort_invalid=No puede cancelar una transferencia de repositor
settings.transfer_abort_success=La transferencia del repositorio a %s fue cancelada.
settings.transfer_desc=Transferir este repositorio a un usuario o una organizacion de la cual disponga de privilegios administrativos.
settings.transfer_form_title=Escriba el nombre del repositorio como confirmación:
-settings.transfer_in_progress=Actualmente hay una transferencia en curso. Por favor, cancela si quieres transferir este repositorio a otro usuario.
settings.transfer_notices_1=- Perderá el acceso al repositorio si lo transfiere a un usuario individual.
settings.transfer_notices_2=- Mantendrá el acceso al repositorio si lo transfiere a una organización que usted (co-)posee.
settings.transfer_notices_3=- Si el repositorio es privado y se transfiere a un usuario individual, esta acción se asegura de que el usuario tenga al menos permisos de lectura (y cambie los permisos si es necesario).
@@ -2008,13 +1921,9 @@ settings.trust_model.default=Modelo de confianza por defecto
settings.trust_model.default.desc=Utilice el modelo de confianza de repositorio por defecto para esta instalación.
settings.trust_model.collaborator=Colaborador
settings.trust_model.collaborator.long=Colaborador: Confiar en firmas de colaboradores
-settings.trust_model.collaborator.desc=Las firmas válidas de los colaboradores de este repositorio serán marcadas como "confiables" - (coincidan o no con el committer). De lo contrario, las firmas válidas serán marcadas como "no confiables" si la firma coincide con el committer y "no coincidente" si no lo es.
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: Firmas de confianza que coinciden con los committers (Esto coincide con GitHub y obligará a Gitea a firmar los commits a tener a Gitea como el committer)
-settings.trust_model.committer.desc=Las firmas válidas sólo se marcarán como "confiables" si coinciden con el committer, de lo contrario se marcarán como "no confiable". Esto obliga a Gitea a ser el committer en commits firmados con el commit real marcado como Co-autorizado por: y Co-commited por: en el tráiler. La clave de Gitea por defecto debe coincidir con un usuario en la base de datos.
settings.trust_model.collaboratorcommitter=Colaborador+Comitter
settings.trust_model.collaboratorcommitter.long=Colaborador+Comitter: Confiar en firmas de colaboradores que coincidan con el committer
-settings.trust_model.collaboratorcommitter.desc=Las firmas válidas de los colaboradores de este repositorio se marcarán como "de confianza" si coinciden con el confirmador. De lo contrario, las firmas válidas se marcarán como "no confiables" si la firma coincide con el autor de la confirmación y como "no coincidentes" en caso contrario. Esto obligará a Gitea a ser marcado como el confirmador en los compromisos firmados con el confirmador real marcado como Coautor por: y Cocommitido por: tráiler en el compromiso. La clave Gitea predeterminada debe coincidir con un usuario en la base de datos.
settings.wiki_delete=Eliminar datos de Wiki
settings.wiki_delete_desc=Eliminar los datos del wiki del repositorio es permanente y no se puede deshacer.
settings.wiki_delete_notices_1=- Esto eliminará y desactivará permanentemente el wiki del repositorio para %s.
@@ -2023,7 +1932,6 @@ settings.wiki_deletion_success=La wiki del repositorio ha sido eliminada.
settings.delete=Eliminar este repositorio
settings.delete_desc=Eliminar un repositorio es permanente y no se puede deshacer.
settings.delete_notices_1=- Esta operación NO PUEDE revertirse.
-settings.delete_notices_2=- Esta operación eliminará permanentemente todo en el repositorio de %s , incluidas asociaciones de código, problemas, comentarios, wiki y colaboradores.
settings.delete_notices_fork_1=Los forks de este repositorio serán independientes después de eliminarlo.
settings.deletion_success=El repositorio ha sido eliminado.
settings.update_settings_success=Las opciones del repositorio han sido actualizadas.
@@ -2044,8 +1952,6 @@ settings.team_not_in_organization=El equipo no pertenece a la misma organizació
settings.teams=Equipos
settings.add_team=Añadir equipo
settings.add_team_duplicate=El equipo ya tiene acceso al repositorio
-settings.add_team_success=Ahora el equipo ya tiene acceso al repositorio.
-settings.change_team_permission_tip=El permiso del equipo está establecido en la página de configuración del equipo y no puede ser cambiado por repositorio
settings.delete_team_tip=Este equipo tiene acceso a todos los repositorios y no puede ser eliminado
settings.remove_team_success=Se ha eliminado el acceso del equipo al repositorio.
settings.add_webhook=Añadir Webhook
@@ -2054,8 +1960,6 @@ settings.hooks_desc=Los webhooks automáticamente hacen peticiones HTTP POST a u
settings.webhook_deletion=Eliminar Webhook
settings.webhook_deletion_desc=Eliminar un webhook borra sus ajustes e historial de entrega. ¿Continuar?
settings.webhook_deletion_success=El webhook ha sido eliminado.
-settings.webhook.test_delivery=Test de entrega
-settings.webhook.test_delivery_desc=Prueba este webhook con un evento falso.
settings.webhook.test_delivery_desc_disabled=Para probar este webhook con un evento falso, actívalo.
settings.webhook.request=Petición
settings.webhook.response=Respuesta
@@ -2101,7 +2005,6 @@ settings.event_repository=Repositorio
settings.event_repository_desc=Repositorio creado o eliminado.
settings.event_header_issue=Eventos de incidencias
settings.event_issues=Incidencias
-settings.event_issues_desc=Incidencia abierta, cerrada, reabierta o editada.
settings.event_issue_assign=Incidencia asignada
settings.event_issue_assign_desc=Incidencia asignada o no asignada.
settings.event_issue_label=Incidencia etiquetada
@@ -2112,7 +2015,6 @@ settings.event_issue_comment=Comentario de incidencia
settings.event_issue_comment_desc=Comentario de incidencias creado, editado o borrado.
settings.event_header_pull_request=Eventos de Pull Requests
settings.event_pull_request=Pull Request
-settings.event_pull_request_desc=Pull request abierto, cerrado, reabierto o editado.
settings.event_pull_request_assign=Pull Request asignado
settings.event_pull_request_assign_desc=Pull Request asignado o no asignado.
settings.event_pull_request_label=Pull Request Etiquetado
@@ -2249,7 +2151,6 @@ settings.archive.branchsettings_unavailable=Los ajustes de rama no están dispon
settings.archive.tagsettings_unavailable=Los ajustes de las etiquetas no están disponibles si el repositorio está archivado.
settings.unarchive.button=Desarchivar repositorio
settings.unarchive.header=Desarchivar este repositorio
-settings.unarchive.text=La desarchivación del repositorio restablecerá su capacidad de recibir commits y pushes, así como nuevas incidencias y pull requests.
settings.unarchive.success=El repositorio se ha desarchivado correctamente.
settings.unarchive.error=Ocurrió un error mientras se trataba de des-archivar el repositorio. Revisa el registro para más detalles.
settings.update_avatar_success=El avatar del repositorio ha sido actualizado.
@@ -2267,11 +2168,9 @@ settings.lfs_invalid_locking_path=Ruta no válida: %s
settings.lfs_invalid_lock_directory=No se puede bloquear el directorio: %s
settings.lfs_lock_already_exists=El bloqueo ya existe: %s
settings.lfs_lock=Bloquear
-settings.lfs_lock_path=Ruta del archivo a bloquear...
settings.lfs_locks_no_locks=Sin bloqueos
settings.lfs_lock_file_no_exist=El archivo bloqueado no existe en la rama por defecto
settings.lfs_force_unlock=Forzar desbloqueo
-settings.lfs_pointers.found=Encontrados %d punteros - %d asociados, %d no asociados (%d falta en el almacén)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=En repositorio
@@ -2473,7 +2372,6 @@ form.create_org_not_allowed=No tiene permisos para crear organizaciones.
settings=Configuración
settings.options=Organización
settings.full_name=Nombre completo
-settings.email=Email de contacto
settings.website=Página web
settings.location=Localización
settings.permission=Permisos
@@ -2487,15 +2385,13 @@ settings.visibility.private_shortname=Privado
settings.update_settings=Actualizar configuración
settings.update_setting_success=Configuración de la organización se han actualizado.
-settings.change_orgname_prompt=Nota: Cambiar el nombre de la organización también cambiará la URL de su organización y liberará el nombre antiguo.
-settings.change_orgname_redirect_prompt=El nombre antiguo se redirigirá hasta que se reclame.
+
+
settings.update_avatar_success=Se ha actualizado el avatar de la organización.
settings.delete=Eliminar organización
settings.delete_account=Eliminar esta organización
settings.delete_prompt=La organización será eliminada permanentemente. ¡Esta acción NO PUEDE deshacerse!
settings.confirm_delete_account=Confirmar eliminación
-settings.delete_org_title=Eliminar organización
-settings.delete_org_desc=Esta organización se eliminará permanentemente. ¿Continuar?
settings.hooks_desc=Añadir webhooks que serán ejecutados para todos los repositorios de esta organización.
settings.labels_desc=Añadir etiquetas que pueden ser utilizadas en problemas para todos los repositorios bajo esta organización.
@@ -2550,7 +2446,6 @@ teams.remove_all_repos_title=Eliminar todos los repositorios del equipo
teams.remove_all_repos_desc=Esto eliminará todos los repositorios del equipo.
teams.add_all_repos_title=Añadir todos los repositorios
teams.add_all_repos_desc=Esto añadirá todos los repositorios de la organización al equipo.
-teams.add_nonexistent_repo=El repositorio que estás intentando añadir no existe, por favor créalo primero.
teams.add_duplicate_users=El usuario ya es miembro del equipo.
teams.repos.none=Este equipo no tiene repositorios accesibles.
teams.members.none=No hay miembros en este equipo.
@@ -2577,7 +2472,6 @@ repositories=Repositorios
hooks=Webhooks
integrations=Integraciones
authentication=Orígenes de autenticación
-emails=Correos de usuario
config=Configuración
config_summary=Resumen
config_settings=Configuración
@@ -2607,27 +2501,17 @@ dashboard.cron.cancelled=Cron: %[1]s cancelada: %[3]s
dashboard.cron.error=Error en Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s ha finalizado
dashboard.delete_inactive_accounts=Eliminar todas las cuentas inactivas
-dashboard.delete_inactive_accounts.started=Se ha iniciado la tarea: "Eliminar todas las cuentas inactivas".
dashboard.delete_repo_archives=Eliminar todos los archivos del repositorio (ZIP, TAR.GZ, etc.)
-dashboard.delete_repo_archives.started=Se ha iniciado la tarea: "Eliminar todos los archivos del repositorios".
dashboard.delete_missing_repos=Eliminar todos los repositorios que faltan sus archivos Git
-dashboard.delete_missing_repos.started=Se ha iniciado la tarea: "Eliminar todos los repositorios que faltan sus archivos Git".
dashboard.delete_generated_repository_avatars=Eliminar avatares generados del repositorio
dashboard.sync_repo_branches=Sincronizar ramas perdidas de datos git a bases de datos
dashboard.update_mirrors=Actualizar réplicas
dashboard.repo_health_check=Chequear de estado de salud de todos los repositorios
dashboard.check_repo_stats=Comprobar todas las estadísticas de todos los repositorios
dashboard.archive_cleanup=Eliminar archivos antiguos de los repositorios
-dashboard.deleted_branches_cleanup=Limpiar ramas eliminadas
dashboard.update_migration_poster_id=Actualizar ID de usuario en migraciones
-dashboard.git_gc_repos=Ejecutar la recolección de basura en los repositorios
-dashboard.resync_all_sshkeys=Actualizar el archivo '.ssh/authorized_keys' con claves SSH de Gitea.
-dashboard.resync_all_sshprincipals=Actualizar el archivo '.ssh/authorized_principals' con los principales de certificado SSH de Gitea.
-dashboard.resync_all_hooks=Resincronizar los hooks de pre-recepción, actualización y post-recepción de todos los repositorios.
dashboard.reinit_missing_repos=Reiniciar todos los repositorios Git faltantes de los que existen registros
dashboard.sync_external_users=Sincronizar datos de usuario externo
-dashboard.cleanup_hook_task_table=Limpiar tabla hook_task
-dashboard.cleanup_packages=Limpieza de paquetes caducados
dashboard.server_uptime=Tiempo de actividad del servidor
dashboard.current_goroutine=Gorutinas actuales
dashboard.current_memory_usage=Uso de memoria actual
@@ -2659,7 +2543,6 @@ dashboard.last_gc_pause=Última Pausa por GC
dashboard.gc_times=Ejecuciones GC
dashboard.update_checker=Buscador de actualizaciones
dashboard.delete_old_system_notices=Borrar todos los avisos antiguos del sistema de la base de datos
-dashboard.gc_lfs=Recoger basura meta-objetos LFS
dashboard.sync_branch.started=Sincronización de ramas iniciada
dashboard.rebuild_issue_indexer=Reconstruir indexador de incidencias
@@ -2677,7 +2560,6 @@ users.2fa=2FA
users.repos=Repositorios
users.created=Creado
users.last_login=Último registro
-users.never_login=Nunca registrado
users.send_register_notify=Enviar notificación de registro de usuario
users.new_success=Se ha creado la cuenta de usuario "%s".
users.edit=Editar
@@ -2704,7 +2586,6 @@ users.still_own_repo=Este usuario todavía posee uno o más depósitos. Eliminar
users.still_has_org=Este usuario es un miembro de una organización. Primero retire el usuario de cualquier organización.
users.purge=Borrar usuario
users.purge_help=Borrar forzosamente el usuario y cualquier repositorio, organización y paquete propiedad del usuario. Todos los comentarios también serán borrados.
-users.still_own_packages=Este usuario todavía posee uno o más paquetes, elimina estos paquetes primero.
users.deletion_success=La cuenta de usuario ha sido eliminada.
users.reset_2fa=Reiniciar 2FA
users.list_status_filter.menu_text=Filtro
@@ -2724,11 +2605,7 @@ users.details=Detalles del usuario
emails.email_manage_panel=Gestion de Correo del Usuario
emails.primary=Principal
emails.activated=Activado
-emails.filter_sort.email=Correo electrónico
-emails.filter_sort.email_reverse=Email (invertir)
-emails.filter_sort.name=Nombre de Usuario
-emails.filter_sort.name_reverse=Nombre de usuario (invertir)
-emails.updated=Email actualizado
+emails.filter_sort.name=Nombre de usuario
emails.not_updated=Error al actualizar la dirección de correo electrónico solicitada: %v
emails.duplicate_active=Esta dirección de correo está asignada a un usuario diferente.
emails.change_email_header=Actualizar Propiedades de Correo
@@ -2842,26 +2719,18 @@ auths.oauth2_required_claim_name_helper=Establecer este nombre para restringir e
auths.oauth2_required_claim_value=Valor de notificación requerida
auths.oauth2_required_claim_value_helper=Establecer este valor para restringir el inicio de sesión de esta fuente a usuarios con una notificación (OAuth2 claim) con este nombre y valor
auths.oauth2_group_claim_name=Nombre de notificación (OAuth2 claim) que proporciona nombres de grupo para esta fuente. (Opcional)
-auths.oauth2_admin_group=Valor de notificación de grupo para los usuarios administradores. (Opcional - requiere nombre de notificación arriba)
-auths.oauth2_restricted_group=Valor de notificación de grupo para usuarios restringidos. (Opcional - requiere nombre de notificación arriba)
-auths.oauth2_map_group_to_team=Mapear grupos reclamados a equipos de la organización. (Opcional - requiere nombre de reclamación arriba)
auths.oauth2_map_group_to_team_removal=Eliminar usuarios de equipos sincronizados si el usuario no pertenece al grupo correspondiente.
auths.enable_auto_register=Hablilitar Auto-Registro
auths.sspi_auto_create_users=Crear usuarios automáticamente
-auths.sspi_auto_create_users_helper=Permitir al método de autenticación SSPI crear automáticamente nuevas cuentas para los usuarios que se conectan por primera vez
auths.sspi_auto_activate_users=Activar los usuarios automáticamente
auths.sspi_auto_activate_users_helper=Permitir al método de autenticación SSPI activar automáticamente los nuevos usuarios
auths.sspi_strip_domain_names=Eliminar los nombres de dominio de nombres de usuario
-auths.sspi_strip_domain_names_helper=Si está marcado, los nombres de dominio se eliminarán de los nombres de inicio de sesión (por ejemplo, "DOMINIO\usuario" y "usuario@ejemplo.org" se convertirán en sólo "usuario").
auths.sspi_separator_replacement=Separador a usar en lugar de \, / y @
-auths.sspi_separator_replacement_helper=El carácter a usar para reemplazar los separadores de los nombres de inicio de sesión de nivel inferior (por ejemplo, la \ en "DOMINIO\usuario") y en los nombres principales del usuario (por ejemplo, la @ en "user@example.org").
auths.sspi_default_language=Idioma predeterminado del usuario
-auths.sspi_default_language_helper=Idioma predeterminado para los usuarios creados automáticamente por el método de autenticación SSPI. Deje vacío si prefiere que el idioma sea detectado automáticamente.
auths.tips=Consejos
auths.tips.oauth2.general=Autenticación OAuth2
auths.tips.oauth2.general.tip=Al registrar una nueva autenticación de OAuth2, la URL de devolución de llamada/redirección debe ser:
auths.tip.oauth2_provider=Proveedor OAuth2
-auths.tip.nextcloud=`Registre un nuevo consumidor OAuth en su instancia usando el siguiente menú "Configuración-> Seguridad-> cliente OAuth 2.0"`
auths.tip.mastodon=Introduzca una URL de instancia personalizada para la instancia mastodon con la que desea autenticarse (o utilice la predeterminada)
auths.edit=Editar origen de autenticación
auths.activated=Este origen de autenticación ha sido activado
@@ -2961,7 +2830,6 @@ config.mailer_sendmail_path=Ruta de Sendmail
config.mailer_sendmail_args=Argumentos adicionales por Sendmail
config.mailer_sendmail_timeout=Tiempo de espera de Sendmail
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=Correo electrónico (ej. test@ejemplo.com)
config.send_test_mail=Enviar prueba de correo
config.send_test_mail_submit=Enviar
config.test_mail_failed=Fallo al enviar un correo electrónico de prueba a "%s": %v
@@ -3041,7 +2909,6 @@ monitor.queue.numberinqueue=Número en cola
monitor.queue.review_add=Revisar / Añadir Trabajadores
monitor.queue.settings.title=Ajustes del grupo
monitor.queue.settings.desc=Los grupos de trabajadores crecen dinámicamente en respuesta al bloqueo de cola de sus trabajadores.
-monitor.queue.settings.maxnumberworkers=Número máximo de trabajadores
monitor.queue.settings.maxnumberworkers.placeholder=Actualmente %[1]d
monitor.queue.settings.maxnumberworkers.error=El número máximo de trabajadores debe ser un número
monitor.queue.settings.submit=Actualizar ajustes
@@ -3144,8 +3011,6 @@ error.no_committer_account=Ninguna cuenta vinculada a la dirección de correo el
error.no_gpg_keys_found=No se encontró ninguna clave conocida en la base de datos para esta firma
error.not_signed_commit=No es un commit firmado
error.failed_retrieval_gpg_keys=No se pudo recuperar cualquier clave adjunta a la cuenta del committer
-error.probable_bad_signature=¡ADVERTENCIA! ¡Hay una clave con este ID en la base de datos, pero esa clave no verifica este commit! Este commit es SOSPECHOSO.
-error.probable_bad_default_signature=¡ADVERTENCIA! ¡La clave por defecto tiene este ID pero esa clave no verifica este commit! Este commit es SOSPECHOSO.
[units]
unit=Unidad
@@ -3182,7 +3047,6 @@ versions=Versiones
versions.view_all=Ver todo
dependency.id=Id.
dependency.version=Versión
-alpine.registry=Configura este registro agregando la url en tu archivo ./apk/repositories:
alpine.registry.key=Descargue la clave RSA pública del registro en la carpeta ./apk/keys/ para verificar la firma del índice:
alpine.registry.info=Seleccione $branch y $repository de la siguiente lista.
alpine.install=Para instalar el paquete, ejecute el siguiente comando:
@@ -3193,18 +3057,13 @@ alpine.repository.architectures=Arquitecturas
arch.repository=Información del repositorio
arch.repository.repositories=Repositorios
arch.repository.architectures=Arquitecturas
-cargo.registry=Configurar este registro en el archivo de configuración de Cargo (por ejemplo ~/.cargo/config.toml):
cargo.install=Para instalar el paquete usando Cargo, ejecute el siguiente comando:
-chef.registry=Configura este registro en tu archivo ~/.chef/config.rb:
chef.install=Para instalar el paquete, ejecute el siguiente comando:
-composer.registry=Configura este registro en el archivo ~/.composer/config.json:
composer.install=Para instalar el paquete usando Composer, ejecute el siguiente comando:
composer.dependencies=Dependencias
composer.dependencies.development=Dependencias de desarrollo
conan.details.repository=Repositorio
-conan.registry=Configurar este registro desde la línea de comandos:
conan.install=Para instalar el paquete usando Conan, ejecuta el siguiente comando:
-conda.registry=Configura este registro como un repositorio Conda en tu archivo .condarc:
conda.install=Para instalar el paquete usando Conda, ejecute el siguiente comando:
container.details.type=Tipo de imagen
container.details.platform=Plataforma
@@ -3214,9 +3073,7 @@ container.layers=Capas de imagen
container.labels=Etiquetas
container.labels.key=Clave
container.labels.value=Valor
-cran.registry=Configurar este registro en su archivo Rprofile.site:
cran.install=Para instalar el paquete, ejecute el siguiente comando:
-debian.registry=Configurar este registro desde la línea de comandos:
debian.registry.info=Seleccione $distribution y $component de la siguiente lista.
debian.install=Para instalar el paquete, ejecute el siguiente comando:
debian.repository=Información del repositorio
@@ -3225,16 +3082,11 @@ debian.repository.components=Componentes
debian.repository.architectures=Arquitecturas
generic.download=Descargar paquete desde la línea de comandos:
go.install=Instalar el paquete desde la línea de comandos:
-helm.registry=Configurar este registro desde la línea de comandos:
helm.install=Para instalar el paquete, ejecute el siguiente comando:
-maven.registry=Configure este registro en su proyecto pom.xml archivo:
-maven.install=Para usar el paquete incluya lo siguiente en el bloque dependencias en el archivo pom.xml:
maven.install2=Ejecutar vía línea de comandos:
maven.download=Para descargar la dependencia, ejecute vía línea de comandos:
-nuget.registry=Configurar este registro desde la línea de comandos:
nuget.install=Para instalar el paquete usando NuGet, ejecute el siguiente comando:
nuget.dependency.framework=Marco de destino
-npm.registry=Configura este registro en tu proyecto .npmrc archivo:
npm.install=Para instalar el paquete usando npm, ejecute el siguiente comando:
npm.install2=o añádelo al archivo package.json:
npm.dependencies=Dependencias
@@ -3245,7 +3097,6 @@ npm.details.tag=Etiqueta
pub.install=Para instalar el paquete usando Dart, ejecute el siguiente comando:
pypi.requires=Requiere Python
pypi.install=Para instalar el paquete usando pip, ejecute el siguiente comando:
-rpm.registry=Configurar este registro desde la línea de comandos:
rpm.distros.redhat=en distribuciones basadas en RedHat
rpm.distros.suse=en distribuciones basadas en SUSE
rpm.install=Para instalar el paquete, ejecute el siguiente comando:
@@ -3257,7 +3108,6 @@ rubygems.dependencies.runtime=Dependencias en tiempo de ejecución
rubygems.dependencies.development=Dependencias de desarrollo
rubygems.required.ruby=Requiere versión Ruby
rubygems.required.rubygems=Requiere la versión de RubyGem
-swift.registry=Configurar este registro desde la línea de comandos:
swift.install=Añade el paquete en tu archivo Package.swift:
swift.install2=y ejecuta el siguiente comando:
vagrant.install=Para añadir un paquete Vagrant, ejecuta el siguiente comando:
@@ -3280,7 +3130,6 @@ owner.settings.cargo.initialize.success=El índice de Cargo se ha creado correct
owner.settings.cargo.rebuild=Reconstruir índice
owner.settings.cargo.rebuild.description=Reconstruir puede ser útil si el índice no se sincroniza con los paquetes de Cargo almacenados.
owner.settings.cargo.rebuild.error=Fallo al reconstruir el índice de Cargo: %v
-owner.settings.cargo.rebuild.success=El índice de Cargo se ha reconstruido correctamente.
owner.settings.cleanuprules.title=Administrar reglas de limpieza
owner.settings.cleanuprules.add=Añadir regla de limpieza
owner.settings.cleanuprules.edit=Editar regla de limpieza
@@ -3363,7 +3212,6 @@ runners.delete_runner=Eliminar este nodo
runners.delete_runner_success=Nodo eliminado con éxito
runners.delete_runner_failed=Fallo al eliminar el nodo
runners.delete_runner_header=Confirma para eliminar el nodo
-runners.delete_runner_notice=Si una tarea se está ejecutando en este nodo, se terminará y marcará como fallida. Puede romper el flujo de trabajo en curso.
runners.none=No hay nodos disponibles
runners.status.unspecified=Desconocido
runners.status.idle=Inactivo
diff --git a/options/locale/locale_fa-IR.ini b/options/locale/locale_fa-IR.ini
index 18abc0f401a..023a3ed2ea6 100644
--- a/options/locale/locale_fa-IR.ini
+++ b/options/locale/locale_fa-IR.ini
@@ -145,16 +145,10 @@ path=مسیر
sqlite_helper=مسیر فایل برای دیتابیس SQLite3. اگر گیتی را به عنوان یک سرویس اجرا میکنید، یک مسیر کامل وارد کنید.
reinstall_error=شما در حال تلاش هستید برای نصب روی یک پایگاه داده Gitea که موجود است
reinstall_confirm_message=نصب مجدد با پایگاه داده Gitea موجود می تواند مشکلات متعددی ایجاد کند. در بیشتر موارد، باید از "app.ini" موجود خود برای اجرای Gitea استفاده کنید. اگر می دانید چه کاری انجام می دهید، موارد زیر را تأیید کنید:
-reinstall_confirm_check_1=ممکن است دادههای رمزگذاریشده توسط SECRET_KEY در app.ini از بین بروند: کاربران ممکن است نتوانند با 2FA/OTP وارد سیستم شوند و mirror ها ممکن است به درستی کار نکنند. با علامت زدن این کادر تأیید می کنید که فایل app.ini فعلی حاوی SECRET_KEY صحیح است.
-reinstall_confirm_check_2=ممکن است لازم باشد مخازن و تنظیمات مجدداً همگام شوند. با علامت زدن این کادر تأیید میکنید که قلابهای مخازن و فایل autorized_keys را به صورت دستی مجدداً همگامسازی میکنید. شما تأیید می کنید که از درست بودن تنظیمات مخزن و آینه اطمینان حاصل می کنید.
reinstall_confirm_check_3=شما تأیید می کنید که کاملاً مطمئن هستید که این Gitea با مکان صحیح app.ini اجرا می شود و مطمئن هستید که باید دوباره نصب کنید. شما تأیید می کنید که خطرات فوق را تأیید می کنید.
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_pattern_not_allowed=نام کاربری مدیر اشتباه است. نام کاربری قبلا استفاده شده است
-err_admin_name_is_invalid=نام کابری مدیر اشتباه است
general_title=تنظیمات عمومی
app_name=عنوان سایت
@@ -169,7 +163,6 @@ domain_helper=آدرس میزبان یا دامنه برای سرور.
ssh_port=پورت SSH سرور
ssh_port_helper=شماره درگاهی که سرور SSH گوش می دهد. برای غیر فعال کردن خالی بگذارید.
http_port=پورت HTTP گیتی
-http_port_helper=پورت سرور وب گیتی.
app_url=آدرس پایه گیتی
app_url_helper=آدرس پایه برای URLهای اجماع HTTP(S) و هشدار های رایانامه (ایمیل).
log_root_path=مسیر گزارشها
@@ -276,7 +269,6 @@ allow_password_change=نیاز به کاربر برای تغییرگذرواژه
reset_password_mail_sent_prompt=ایمیل تاییدیه جدیدی به %s ارسال شد. لطفا صندوق ورودی خود را در %s آینده برای فرآیند بازیابی حساب کاربری خود بررسی کنید.
active_your_account=حساب خود را فعال کنید
account_activated=حساب فعال شده است
-prohibit_login=ورود به سیستم ممنوع است
resent_limit_prompt=با عرض پوزش، شما به تازگی یک ایمیل فعالسازی را درخواست کرده اید. لطفا سه دقیقه منتظر بمانید سپس درخواست خود را تکرار کنید.
has_unconfirmed_mail=سلام %s, شما آدرس ایمیل (%s ) را تایید نکرده اید. لطفا اگر شما ایمیلی دریافت نکرداید و یا نیاز به ارسال دوباره دارید، بر روید دکمه زیر کلیک نمایید.
resend_mail=برای ارسال نامه فعال سازی اینجا را کلیک کنید
@@ -306,13 +298,10 @@ openid_connect_title=اتصال به حساب های موجود
openid_connect_desc=نشانی OpenID URI وارد شده شناخته نشد. آن را با یک حساب جدید متصل کنید.
openid_register_title=ایجاد یک حساب جدید
openid_register_desc=نشانی URI وارد شده شناخته نشد. آن را با یک حساب جدید متصل کنید.
-disable_forgot_password_mail=بازیابی حساب به دلیل عدم تعیین آدرس ایمیل غیرفعال شده است. لطفا با مدیر سایت تماس بگیرید.
-disable_forgot_password_mail_admin=بازیابی حساب وقتی ممکن است که ایمیل تنظیم شده باشد. لطفا ایمیل را ثبت کنید تا بازیابی حساب فعال شود.
email_domain_blacklisted=شما نمیتوانید با ایمیل خود ثبت نام کنید.
authorize_application=برنامه احراز هویت
authorize_redirect_notice=اگر شما این برنامه را تایید کنید، به %s منتقل خواهید شد.
authorize_application_created_by=این برنامه توسط %s ساخته شده است.
-authorize_application_description=اگر شما دسترسی داشته باشید. میتوانید تمامی فیلد های حساب کاربری خود را تغییر دهید. از جمله مخازن و سازمان های خصوصی.
authorize_title=تاییدیه "%s" برای دسترسی به اکانت شما؟
authorization_failed=احراز هویت انجام نشد
sspi_auth_failed=SSPI عدم احراز هویت
@@ -332,8 +321,6 @@ activate_email=نشانی ایمیل خود را تایید کنید
activate_email.text=لطفاً روی پیوند زیر کلیک کنید تا رایانامهی خود را در %s تأیید کنید:
register_notify.title=%[1]s، به %[2]s خوشآمدید
-register_notify.text_1=این رایانامهی تأیید عضویت شما در %s است!
-register_notify.text_2=حالا شما میتوانید با نام کاربری وارد شوید: %s.
register_notify.text_3=اگر این حساب برای شما ایجاد شده، لطفاً ابتدا گذرواژهی خود را تنظیم کنید .
reset_password=حساب خود را دوباره فعال کنید
@@ -371,7 +358,6 @@ release.download.targz=کد منبع (TAR.GZ)
repo.transfer.subject_to=%s میخواهد "%s" را به %s منتقل کند
repo.transfer.subject_to_you=%s میخواهد %s را به شما منتقل کند
repo.transfer.to_you=شما
-repo.transfer.body=برای تایید یا رد آن %s را ببینید یا فقط بیخیالش شوید.
repo.collaborator.added.subject=%s شما را به پروژه %s اضافه کرد
repo.collaborator.added.text=شما به عنوان مشارکتکننده در این مخزن اضافه شدید:
@@ -425,11 +411,9 @@ username_been_taken=این نام کاربری قبلا ثبت شده است.
username_change_not_local_user=کاربران غیر بومی مجاز به تغییر نامکاربری نیستند.
repo_name_been_taken=نام مخزن قبلا ثبت شده است.
repository_files_already_exist=در حال حاضر این فایل در این مخزن موجود است. با مدیر سیستم خود تماس بگیرید.
-repository_files_already_exist.adopt=این فایل در این مخزن موجود است و فقط میتوان از آن استفاده کرد.
repository_files_already_exist.delete=فایلها در این مخزن موجود است. ابتدا باید آن را پاک کنید.
repository_files_already_exist.adopt_or_delete=این فایل در این مخزن موجود است. یا از آن استفاده کرده یا آن را پاک کنید.
visit_rate_limit=دسترسی نشانی ثبت شده دارای نرخ محدودیت است.
-2fa_auth_required=دسترسی از راه دور بازدید نیازمند دو روش احراز هویت است.
org_name_been_taken=نام سازمان قبلا ثبت شده است.
team_name_been_taken=نام تیم قبلا ثبت شده است.
team_no_units_error=اجازه دسترسی به حداقل یک بخش مخزن.
@@ -541,7 +525,6 @@ activate_email=ارسال فعالسازی
activations_pending=کدهای فعالسازی در انتظار
delete_email=حذف
email_deletion=حذف نشانی ایمیل
-email_deletion_desc=نشانی ایمیل و اطلاعات مربوطه از حساب شما حذف خواهد شد. تمامی کامیت ها توسط این نشانی ایمیل بدون تغییر باقی می ماند. ادامه می دهید؟
email_deletion_success=آدرس ایمیل شما حذف شده است.
theme_update_success=پوسته شما آپدیت شد.
theme_update_error=پوسته انتخاب شده موجود نیست.
@@ -582,7 +565,6 @@ gpg_key_matched_identities_long=هویت های جاسازی شده در این
gpg_key_verified=کلید تأیید شده
gpg_key_verified_long=کلید با یک ژتون تأیید شده است و می تواند برای تأیید کامیتهایی که مطابق با آدرس ایمیل فعال شده برای این کاربر است، علاوه بر هویتهای منطبق با این کلید، استفاده شود.
gpg_key_verify=اعتبارسنجی
-gpg_invalid_token_signature=کلید GPG ارائه شده، امضا و ژتون به هم نمیخورند یا ژتون تاریخگذشته است.
gpg_token_required=باید یک امضا برای ژتون زیر ارائه کنید
gpg_token=توکن
gpg_token_help=با این میتوانید یک امضاء بسازید:
@@ -604,7 +586,6 @@ gpg_key_deletion=حذف کلید GPG
ssh_principal_deletion=گواهی SSH اصلی را حذف کنید
ssh_key_deletion_desc=حذف کلید SSH خود دسترسی به حساب خود را لغو می شود. ادامه می دهید؟
gpg_key_deletion_desc=حذف کلید GPG تمامی commit های که با این کلید زدهاید را غیر معتبر میکند. آیا ادامه میدهید؟
-ssh_principal_deletion_desc=حذف یک کلید SSH اصلی، تمامی دسترسیها به حساب کاربری را میگیرد. ادامه میدهید؟
ssh_key_deletion_success=کلید SSH حذف شد.
gpg_key_deletion_success=کلید GPG حذف شد.
ssh_principal_deletion_success=کلید SSH اصلی حذف شد.
@@ -657,12 +638,10 @@ oauth2_application_create_description=برنامههای OAuth2 این امک
authorized_oauth2_applications=برنامه OAuth2 تایید شد
revoke_key=ابطال
revoke_oauth2_grant=ابطال دسترسی
-revoke_oauth2_grant_description=لغو دسترسی برای این برنامه شخص ثالث از دسترسی این برنامه به داده های شما جلوگیری می کند. شما مطمئن هستید؟
twofa_is_enrolled=احراز هویت دو مرحله ای برای حساب شما اجرا میشود.
twofa_not_enrolled=حساب کاربری شما اکنون احراز هویت دو مرحله ای ندارد.
twofa_disable=غیرفعالکردن احراز هویت دو مرحله ای
-twofa_enroll=فعالکردن احراز هویت دوگانه
twofa_disable_note=در صورت لزوم، شما می توانید احراز هویت دو مرحله ای را غیر فعال کنید.
twofa_disable_desc=غیر فعال کردن احراز هویت دو مرحله ای امنیت حساب کاربری شما را کمتر میکند. آیا ادامه میدهید؟
twofa_disabled=احراز هویت دو مرحله ای غیر فعال گشت.
@@ -675,7 +654,6 @@ twofa_failed_get_secret=خطا در دریافت رمز.
manage_account_links=مدیریت حساب های مرتبط شده
manage_account_links_desc=این حساب های خارجی به حساب Gitea ارتباط دارد.
-account_links_not_available=اکنون دیگر هیچ پیوند حسابهای کاربری خارجی به حساب کاربری شما وجود ندارد.
link_account=پیوند به حساب
remove_account_link=حذف حساب پیوند خرده
remove_account_link_desc=با حذف پیوند خارجی حساب کاربری دسترسی شما به حساب کابریتان توسط آن از بین میرود. آیا ادامه میدهید؟
@@ -753,7 +731,6 @@ mirror_address_desc=هر گونه اعتبار مورد نیاز را در قس
mirror_lfs=ذخیره سازی فایل های بزرگ(LFS)
mirror_lfs_desc=انعکاس داده های LFS را فعال کنید.
mirror_lfs_endpoint=نشانهای پایانی LFS
-mirror_lfs_endpoint_desc=همگامسازی سعی میکند از آدرس اینترنتی کلون برای تعیین سرور LFS استفاده کند. همچنین اگر داده های LFS مخزن در جای دیگری ذخیره شده باشد، می توانید یک نقطه پایانی سفارشی را مشخص کنید.
mirror_last_synced=آخرین همگام سازی
mirror_password_placeholder=(بدون تغییر)
mirror_password_blank_placeholder=(تنظیم نشده)
@@ -764,7 +741,6 @@ forks=انشعابها
reactions_more=و %d بیشتر
unit_disabled=مدیر سایت این قسمت مخزن را غیرفعال کرده است.
language_other=دیگر
-adopt_search=نام کاربری را برای جستجو در مخازن بدون دسترسی وارد کنید... (برای جستجوی همه موارد خالی بگذارید)
adopt_preexisting_label=فایلهای پذیرش یافته
adopt_preexisting=فایلهای موجود برای پذیرش
adopt_preexisting_content=ایجاد مخزن از %s
@@ -821,14 +797,12 @@ migrate.clone_address=انتقال / همسانسازی از نشانی
migrate.clone_address_desc=HTTP(S) or Git 'همسانسازی' نشانیهای موجود در این مخزن
migrate.clone_local_path=یا مسیر سرویس دهنده محلی
migrate.permission_denied=شما مجاز به واردات مخازن محلی نیستید.
-migrate.permission_denied_blocked=نمیتوانید از میزبانهای غیرمجاز وارد کنید، لطفاً از سرپرست بخواهید تنظیمات ALLOWED_DOMAINS / ALLOW_LOCALNETWORKS / BLOCKED_DOMAINS را بررسی کند.
migrate.invalid_lfs_endpoint=نقطه پایانی LFS معتبر نیست
migrate.failed=انتقال انجام نشد: %v
migrate.migrate_items_options=نشانی دسترسی برای مهاجرت موارد اضافی مورد نیاز است
migrated_from=مهاجرت از %[2]s
migrated_from_fake=مهاجرت از %[1]s
migrate.migrate=مهاجرت از %s
-migrate.migrating=مهاجرت از %s ...
migrate.migrating_failed=مهاجرت از %s ناموفق بود.
migrate.migrating_failed_no_addr=مهاجرت ناموفق بود.
migrate.git.description=کوچ یک مخزن فقط از یک سرویس Git.
@@ -864,7 +838,6 @@ quick_guide=راهنمای سریع
clone_this_repo=همسانسازی این مخزن
create_new_repo_command=ایجاد یک مخزن جدید در خط فرمان
push_exist_repo=درج تغییرات مخزن موجود از خط فرمان
-empty_message=این مخزن هنوز هیچ محتوایی ندارد.
code=کد
code.desc=دسترسی به کدهای منبع، فایلها، کامیت های و شاخه ها.
@@ -879,7 +852,6 @@ issues=مسائل
pulls=تقاضاهای واکشی
projects=پروژهها
labels=برچسبها
-org_labels_desc=برچسب های سطح سازمان که می توانند برای تمامی مخازن ذیل این سازمان استفاده شوند
org_labels_desc_manage=مدیریت
milestones=نقاط عطف
@@ -943,13 +915,13 @@ editor.file_changed_while_editing=محتوای پرونده تغییر میکن
editor.commit_empty_file_header=کامیت کردن یک پرونده خالی
editor.commit_empty_file_text=فایلی که درخواست ارسال دارید خالی است. ادامه بدم?
editor.no_changes_to_show=تغییری برای نمایش وجود ندارد.
-editor.fail_to_update_file_summary=متن خطا:
editor.push_rejected_summary=متن کامل پیام دلیل رد شدن:
editor.add_subdir=افزودن پوشه…
editor.no_commit_to_branch=نمیتوان به طور مستقیم درمورد شاخه نطر داد زیرا:
editor.user_no_push_to_branch=کاربر نمیتواند به شاخه ارسال کند
editor.require_signed_commit=شاخه یک کامیت امضا شده لازم دارد
+
commits.desc=تاریخچه تغییرات کد منبع را مرور کنید.
commits.commits=کامیتها
commits.nothing_to_compare=این شاخه ها برابرند.
@@ -1067,7 +1039,6 @@ issues.filter_type.review_requested=بررسی درخواست ها
issues.filter_sort=مرتبسازی
issues.filter_sort.latest=جدیدترین
issues.filter_sort.oldest=قدیمیترین
-issues.filter_sort.recentupdate=اخیراً به روز شده
issues.filter_sort.leastupdate=به تازگی بهروز شده
issues.filter_sort.mostcomment=بیشترین دیدگاهها
issues.filter_sort.leastcomment=کمترین دیدگاهها
@@ -1152,7 +1123,6 @@ issues.lock_no_reason=قفل شده و مکالمه برای همکاران %s
issues.unlock_comment=باز کردن این مکالمه %s
issues.lock_confirm=قفل کردن
issues.unlock_confirm=رفع انسداد
-issues.lock.notice_1=- دیگر کاربران نمیتوانند یک مولفه جدید به مسئله اضافه کنند.
issues.lock.notice_2=- شما و سایر همکاران با دسترسی به این مخزن هنوز میتوانید اظهار نظر کنید و سایرین آن را مشاهده میکنند.
issues.lock.notice_3=- شما همیشه میتوانید مجدداً در آینده این مسئله را باز کنید.
issues.unlock.notice_1=- همه می توانند بار دیگر درباره این موضوع اظهارنظر کنند.
@@ -1203,8 +1173,6 @@ issues.dependency.pr_closing_blockedby=بستن این درخواست کشش ب
issues.dependency.issue_closing_blockedby=بستن این مورد توسط موارد زیر مسدود شده است
issues.dependency.issue_close_blocks=این مسئله با توجه به موضوعات مطرح شده مسدود شده است
issues.dependency.pr_close_blocks=این تقاضای واکشی با توجه به موضوعات مطرح شده مسدود شده است
-issues.dependency.issue_close_blocked=شما نیاز به بستن تمامی مسائل مسدود شده مسئله قبل بستن آن هستید.
-issues.dependency.pr_close_blocked=شما می بایستی تمامی مسائل این تقاضای واکشی را ببنید تا بتوانید آن را ادغام کنید.
issues.dependency.blocks_short=بلوکها
issues.dependency.blocked_by_short=وابسته به
issues.dependency.remove_header=حذف وابستگی
@@ -1215,12 +1183,10 @@ issues.dependency.add_error_same_issue=شما نمیتوانید این مس
issues.dependency.add_error_dep_issue_not_exist=مسئله وابسته وجود ندارد.
issues.dependency.add_error_dep_not_exist=وابستگی وجود ندارد.
issues.dependency.add_error_dep_exists=این وابستگی پیش از این وجود داشته است.
-issues.dependency.add_error_cannot_create_circular=شما نمیتوانید دو مسئله را که به دیگر مسائل وابسته میشوند را وابسته کنید.
issues.dependency.add_error_dep_not_same_repo=هر دو موضوع باید از یک مخزن باشند.
issues.review.self.approval=شما نمیتوانید تقاضای واکشی خود را تایید کنید.
issues.review.self.rejection=شما نمیتوانید تقاضا تغییرات تقاضای واکشی خود را تغییر دهید.
issues.review.approve=این تغییرات را تایید شدند %s
-issues.review.dismissed=بررسی %s %s را رد شده
issues.review.dismissed_label=رها شده
issues.review.left_comment=یک نظر ثبت کرد
issues.review.content.empty=شما میبایستی در مورد تقاضای تغییرات اظهار نظر کنید.
@@ -1228,7 +1194,6 @@ issues.review.reject=تقاضا شد برای تغییر %s
issues.review.wait=%s درخواست بازبینی کرده است
issues.review.add_review_request=از %s %s درخواست بازبینی کرد
issues.review.remove_review_request=برای %s %s درخواست بازبینی را حذف کرد
-issues.review.remove_review_request_self=%s از بازبینی خودداری کرد
issues.review.pending=در انتظار
issues.review.review=بازبینی
issues.review.reviewers=بازبینیکنندگان
@@ -1241,7 +1206,6 @@ issues.review.resolve_conversation=مکالمه را بعنوان حل شده ع
issues.review.un_resolve_conversation=مکالمه را بعنوان حل نشده علامت گذاری کردن
issues.review.resolved_by=علامت گذاری این مکالمه بعنوان حل شده
issues.review.commented=دیدگاه
-issues.assignee.error=به دلیل خطای غیرمنتظره همه تکالیف اضافه نشد.
issues.reference_issue.body=Body
issues.content_history.deleted=حذف شده
issues.content_history.edited=ویرایش شده
@@ -1298,28 +1262,20 @@ pulls.reject_count_1=%d درخواست تغییر
pulls.reject_count_n=%d درخواست تغییر
pulls.waiting_count_1=%d منتظر بازبینی
pulls.waiting_count_n=%d منتظر بازبینی
-pulls.wrong_commit_id=commit id باید یک شناسه commit در شاخه هدف باشد
pulls.no_merge_desc=این تقاضای واکشی قابل ادغام نیست لذا تمامی گزینه های ادغام مخزن غیر فعال هستند.
pulls.no_merge_helper=گزینه های ادغام را در تنظیمات مخزن فعال کنید یا از تقاضای واکشی به صورت دستی ادغام نمایید.
pulls.no_merge_wip=این تقاضای واکشی قابل ادغام نیست لذا اکنون به این مخزن درحال پردازش علامت گذاری شده است.
-pulls.no_merge_not_ready=این درخواست واکشی آماده ادغام نیست، وضعیت بازبینی را چک کنید.
pulls.no_merge_access=شما مجاز به ادغام این درخواست واکشی نیستید.
pulls.merge_pull_request=ایجاد commit ادغام
-pulls.rebase_merge_pull_request=Rebase سپس به fast-forward
-pulls.rebase_merge_commit_pull_request=Rebase کنید سپس commit merge را ایجاد کنید
pulls.squash_merge_pull_request=ایجاد commit اسکواش
pulls.merge_manually=بصورت دستی ادغام شد
pulls.merge_commit_id=شماره کامیت ادغام
pulls.require_signed_wont_sign=انشعاب نیازمند تغییرات امضا شده است اما این ادغام امضا نخواهد شد
pulls.invalid_merge_option=شما نمیتوانید از این گزینه برای تقاضای واکشی استفاده کنید.
-pulls.merge_conflict=ادغام ناموفق بود: در حین ادغام مغایرت وجود داشت. نکته: استراتژی متفاوتی را امتحان کنید
pulls.merge_conflict_summary=پیغام خطا
-pulls.rebase_conflict=ادغام ناموفق بود: در حین تغییر پایه، یک مغایرت وجود داشت: %[1]s. نکته: استراتژی متفاوتی را امتحان کنید
pulls.rebase_conflict_summary=پیام خطا
-pulls.unrelated_histories=ادغام ناموفق: سر و پایه ادغام یک تاریخ مشترک ندارند. نکته: یک استراتژی متفاوت را امتحان کنید
-pulls.merge_out_of_date=ادغام ناموفق: در حالی که ادغام را ایجاد می کند ، پایگاه به روز شد. نکته: دوباره امتحان کنید.
pulls.push_rejected_summary=پیام رد کامل
pulls.open_unmerged_pull_exists=`شما نمیتوانید یک عملیات را انجام داده یا بازگشایی نمایید لذا (#%d) مورد تقاضای واکشی با ویژگی منحصر به فرد هنوز رسیدگی نشده (معلق) است. `
pulls.status_checking=برخی از بررسیها در حال تعلیق هستند
@@ -1437,7 +1393,6 @@ activity.title.releases_1=%d انتشار
activity.title.releases_n=%d انتشار
activity.title.releases_published_by=%s منشتر شده توسط %s
activity.published_release_label=منتشر شده
-activity.no_git_activity=در این دوره فعالیت کامیتی ارسال نشده است.
activity.git_stats_exclude_merges=به استثنای ادغامها ،
activity.git_stats_author_1=%d بانی
activity.git_stats_author_n=%d بانی
@@ -1462,7 +1417,6 @@ activity.git_stats_deletion_n=%d مذحوف
contributors.contribution_type.commits=کامیتها
settings=تنظيمات
-settings.desc=تنظیمات جایی است که شما میتوانید تنظیمات مخزن خود را مدیریت کنید
settings.options=مخزن
settings.collaboration=همكار
settings.collaboration.admin=مدیر
@@ -1514,7 +1468,6 @@ settings.pulls.enable_autodetect_manual_merge=ادغام دستی تشخیص خ
settings.pulls.default_delete_branch_after_merge=پس از ادغام به طور پیش فرض شاخه درخواست pull را حذف کنید
settings.admin_settings=تنظیمات مدیران
settings.admin_enable_health_check=فعال کردن بررسی سلامت مخزن (git fsck)
-settings.admin_enable_close_issues_via_commit_in_any_branch=اسنداد یک مسئله با کامیت آن شاخه را با غیر پیش فرض تبدیل میکند
settings.danger_zone=منطقه خطرناک
settings.new_owner_has_same_repo=مالک جدید مخزن با همین نام است. لطفاً نام دیگری را انتخاب کنید.
settings.convert=تبدیل به یک مخزن عادی
@@ -1534,7 +1487,6 @@ settings.transfer_abort=لغو انتقال
settings.transfer_abort_invalid=شما نمی توانید یک انتقال انبار موجود را لغو کنید.
settings.transfer_desc=انتقال مالکیت این مخزن به کاربر بانی یا سازمانی که شما حق مدیریت در آن دارید.
settings.transfer_form_title=نام مخزن را برای تایید عمل خورد اینجا وارد کنید:
-settings.transfer_in_progress=در حال حاضر یک انتقال در حال انجام است. اگر می خواهید این انبار را به کاربر دیگری منتقل کنید، لطفاً آن را لغو کنید.
settings.transfer_notices_1=- شما دسترسی خود را نسبت مخزن را از دست میدهید اگر مالکیت آن را به یک کاربری مفرد انتقال دهید.
settings.transfer_notices_2=- شما دسترسی خود را نسبت مخزن را حفظ میکنید. اگر مالکیت آن را به یک سازمانی که در آن مالکیت دارید انتقال دهید.
settings.transfer_notices_3=- اگر انبار خصوصی است و به یک کاربر جداگانه منتقل می شود، این عمل مطمئن می شود که کاربر حداقل مجوز خواندن را دارد (و در صورت لزوم مجوزها را تغییر می دهد).
@@ -1548,12 +1500,9 @@ settings.trust_model.default=مدل اعتماد پیشفرض
settings.trust_model.default.desc=برای این نصب از مدل اعتماد انبار پیش فرض استفاده کنید.
settings.trust_model.collaborator=Collaborator
settings.trust_model.collaborator.long=Collaborator: اعتماد توسط همکاران امضا میکند
-settings.trust_model.collaborator.desc=امضاهای معتبر توسط همکاران این انبار با علامت "trusted" مشخص می شوند (خواه با committer مطابقت داشته باشند یا نه). در غیر این صورت، امضاهای معتبر در صورتی که امضا با committer مطابقت داشته باشد "untrusted" و در غیر این صورت "unmatched" علامت گذاری می شوند.
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: به امضاهایی اعتماد کنید که با committer ها مطابقت دارند (این با GitHub مطابقت دارد و commit های امضا شده Gitea را مجبور می کند که Gitea را به عنوان committer داشته باشند)
settings.trust_model.collaboratorcommitter=Collaborator+Committer
settings.trust_model.collaboratorcommitter.long=Collaborator+Committer: به امضاهای collaborator ها که با committer مطابقت دارند اعتماد کنید
-settings.trust_model.collaboratorcommitter.desc=امضاهای معتبر توسط همکاران این مخزن در صورتی که با committer مطابقت داشته باشند، علامت "trusted" خواهند بود. در غیر این صورت، امضاهای معتبر در صورتی که امضا با committer مطابقت داشته باشد "untrusted" و در غیر این صورت "unmatched" علامت گذاری می شوند. این باعث میشود که Gitea به عنوان committer در commitهای امضا شده با committer واقعی که بهعنوان Co-Authored-By: و Co-Committed-By: تریلر در commit علامتگذاری شده است، علامتگذاری شود. کلید پیشفرض Gitea باید با یک کاربر در پایگاه داده مطابقت داشته باشد.
settings.wiki_delete=حذف اطلاعات دانشنامه
settings.wiki_delete_desc=حذف اطلاعات دانشنامه مخزن همیشگی بوده و قابل بازگشت نخواهد بود.
settings.wiki_delete_notices_1=- این به صورت کامل حذف خواهد کرد و دانشنامه این برای محزن %s غیر فعال میکند.
@@ -1562,7 +1511,6 @@ settings.wiki_deletion_success=اطلاعات دانشنامه این محزن
settings.delete=حذف این مخزن
settings.delete_desc=حذف مخزن همیشگی بوده و قابل بازگشت نخواهد بود.
settings.delete_notices_1=این عملیات غیرقابل برگشت است.
-settings.delete_notices_2=این عملیات برای همیشه مخزن %s از بین میبرد تیز مشمول کد و مسائل، دیدگاهها، دانشنامه، همکاران و تنظیمات نیز میشود.
settings.delete_notices_fork_1=- پس از حذف مخازن منشعب شده به صورت مستقل تبدیل میشود.
settings.deletion_success=مخزن مورد نظر حذف شد.
settings.update_settings_success=تنظیمات این مخزن بهروز شد.
@@ -1581,8 +1529,6 @@ settings.team_not_in_organization=تیم همانند ارگان برای این
settings.teams=تیم ها
settings.add_team=افزودن تیم
settings.add_team_duplicate=تیم پیش از این مخزن داشته
-settings.add_team_success=تیم هماکنون به مخزن دسترسی دارد.
-settings.change_team_permission_tip=دسترسی تیم در صفحه تنظیمات تیم انجام شده و برای هر مخزن نمی تواند تغییر یابد
settings.delete_team_tip=این تیم به تمامی مخازن دسترسی دارد و نمی تواند حذف شود
settings.remove_team_success=دسترسی تیم به مخزن حذف شد.
settings.add_webhook=اضافهکردن Webhook
@@ -1591,8 +1537,6 @@ settings.hooks_desc=هوک تحت وب به صورت خودکار درخواست
settings.webhook_deletion=حذف Webhook
settings.webhook_deletion_desc=حذف هوک تحت وب موجب حذف تنظیمات آن و تاریخچه تحویل آن میشود. همچنان ادامه میدهید؟
settings.webhook_deletion_success=هوک تحت وب حذف شد.
-settings.webhook.test_delivery=امتحانکردن تحویل
-settings.webhook.test_delivery_desc=Webhook را با رویداد جعلی امتحان کنید.
settings.webhook.request=درخواست
settings.webhook.response=پاسخ
settings.webhook.headers=سربرگها
@@ -1632,7 +1576,6 @@ settings.event_repository=مخزن
settings.event_repository_desc=مخزن ساخته یا حذف شد.
settings.event_header_issue=رویدادهای مساله
settings.event_issues=مسائل
-settings.event_issues_desc=مساله باز شد، بسته شد، دوباره باز شد، یا ویرایش شد.
settings.event_issue_assign=مساله تعیین شد
settings.event_issue_assign_desc=مساله واگذار شده یا واگذار نشده است.
settings.event_issue_label=مساله برجسب خورد
@@ -1643,7 +1586,6 @@ settings.event_issue_comment=دیدگاه های مسئله
settings.event_issue_comment_desc=نظر در مسئله ایجاد شد، ویرایش شد یا حذف شد.
settings.event_header_pull_request=رویداد های درخواست pull
settings.event_pull_request=تقاضای واکشی
-settings.event_pull_request_desc=درخواست pull باز شد، بسته شد، دوباره باز شد، یا ویرایش شد.
settings.event_pull_request_assign=درخواست pull واگذار شد
settings.event_pull_request_assign_desc=درخواست pull واگذاری شده یا واگذاری نشده.
settings.event_pull_request_label=درخواست pull برچسب دار شد
@@ -1748,11 +1690,9 @@ settings.lfs_invalid_locking_path=مسیر ناصحیح: %s
settings.lfs_invalid_lock_directory=نمیتوان این پوشه را قفل کرد: %s
settings.lfs_lock_already_exists=قفل پیش از این بود: %s
settings.lfs_lock=قفل
-settings.lfs_lock_path=مسر فایل قفل...
settings.lfs_locks_no_locks=بدون قفل
settings.lfs_lock_file_no_exist=فایل های قفل شده در شاخه پیش فرض وجود ندارد
settings.lfs_force_unlock=قفل گشایی زوری
-settings.lfs_pointers.found=حباب اشاره گر %d پیدا شده - %d نسبت داده شده - %d نیست داده نشده ( %d از دست رفته از انبار)
settings.lfs_pointers.sha=حباب SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=در خزن
@@ -1920,14 +1860,13 @@ settings.visibility.private_shortname=پوشیده
settings.update_settings=به روزرسانی تنظیمات
settings.update_setting_success=تنظیمات این سازمان بهروز شد.
-settings.change_orgname_redirect_prompt=نام قدیمی تا زمانی که ادعا شود تغییر مسیر می دهد.
+
+
settings.update_avatar_success=آواتار این سازمان بهروز شد.
settings.delete=حذف سازمان
settings.delete_account=حذف این سازمان
settings.delete_prompt=سازمان برای همیشه حذف خواهد شد. این قابل برگشت نخواهد بود !
settings.confirm_delete_account=تاییدیه حذف
-settings.delete_org_title=حذف سازمان
-settings.delete_org_desc=سازمان برای همیشه حذف خواهد شد. آیا همچنان ادامه میدهید؟
settings.hooks_desc=افزودن webhook های که برای تمام مخازن این سازمان اجرا میشود.
settings.labels_desc=تگ هایی را اضافه کنید که میتوانند برای مشکلات همه مخازن تحت این سازمان استفاده شوند.
@@ -1996,7 +1935,6 @@ organizations=تشکیلات
repositories=مخازن
hooks=وب هوک ها
authentication=منابع احراز هویت
-emails=ایمیل های کاربر
config=پیکربندی
config_summary=چکیده
config_settings=تنظيمات
@@ -2023,25 +1961,16 @@ dashboard.cron.process=Cron: %[1]s
dashboard.cron.error=خطا در Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s پایان یافته است
dashboard.delete_inactive_accounts=حذف تمام حساب های کاربری غیرفعال
-dashboard.delete_inactive_accounts.started=تسک حذف تمام حساب های کاربری غیرفعال شروع شد.
dashboard.delete_repo_archives=حذف تمام انبار های آرشیو شده (ZIP, TAR.GZ, etc..)
-dashboard.delete_repo_archives.started=تسک حذف تمام آرشیو های انبار شروع شد.
dashboard.delete_missing_repos=حذف تمامی مخازنی که پروندههای گیت آنها از بین رفته است
-dashboard.delete_missing_repos.started=تسک تمام انبار هایی که فایل های گیتشان از دست رفته شروع شد.
dashboard.delete_generated_repository_avatars=حذف آواتار هایی که برای مخزن تولید شده اند
dashboard.update_mirrors=میرور ها بروزرسانی شود
dashboard.repo_health_check=سلامت تمام انبار ها چک شود
dashboard.check_repo_stats=تمام آمار انبارها چک شود
dashboard.archive_cleanup=آرشیوهای انبار قدیمی را حذف کنید
-dashboard.deleted_branches_cleanup=شاخه های حذف شده را پاک کنید
dashboard.update_migration_poster_id=شناسه های پوستر مهاجرت را به روز کنید
-dashboard.git_gc_repos=متراکم کردن تمامی زبالههای مخازن
-dashboard.resync_all_sshkeys=فایل '.ssh/authorized_keys' را با کلیدهای Gitea SSH به روز کنید.
-dashboard.resync_all_sshprincipals=فایل '.ssh/authorized_principals' را با اصول Gitea SSH به روز کنید.
-dashboard.resync_all_hooks=همگام سازی مجدد hook های pre-receive و update و post-receive برای تمامی مخازن.
dashboard.reinit_missing_repos=تمامی مخازنی که سوابقشان وجود دارند مجدداً گیت آنها مفقود شده است مجدداً مقدمات آنها فراهم شود
dashboard.sync_external_users=همگام سازی اطلاعات کاربر خارجی
-dashboard.cleanup_hook_task_table=جدول hook_task تمیز کردن
dashboard.server_uptime=فعالیت بیوقفه سرور
dashboard.current_goroutine=Goroutine های فعلی
dashboard.current_memory_usage=میزان مصرف فعلی از حافظه
@@ -2083,7 +2012,6 @@ users.2fa=2FA
users.repos=مخازن
users.created=ایجاد شده
users.last_login=آخرین ورود
-users.never_login=هرگز وارد نشده
users.send_register_notify=ارسال اعلان ثبت نام کاربر
users.edit=ویرایش
users.auth_source=منبع احراز هویت
@@ -2124,11 +2052,7 @@ users.list_status_filter.not_2fa_enabled=2FA غیرفعال است
emails.email_manage_panel=مدیریت ایمیل کاربر
emails.primary=اولیه
emails.activated=فعال شده
-emails.filter_sort.email=ایمیل
-emails.filter_sort.email_reverse=ایمیل (معکوس)
-emails.filter_sort.name=نام کاربری
-emails.filter_sort.name_reverse=نام کاربری(معکوس)
-emails.updated=ایمیل به روز شد
+emails.filter_sort.name=نامکاربری
emails.not_updated=آدرس ایمیل درخواستی بهروزرسانی نشد: %v
emails.duplicate_active=این آدرس ایمیل از قبل برای کاربر دیگری فعال است.
emails.change_email_header=به روز رسانی ویژگی های ایمیل
@@ -2226,19 +2150,14 @@ auths.skip_local_two_fa_helper=تنظیم نشده به این معنی است
auths.oauth2_tenant=مستاجر
auths.enable_auto_register=فعال سازی ثبت نام خودکار
auths.sspi_auto_create_users=ساخت کاربر خودکار
-auths.sspi_auto_create_users_helper=به روش SSPI auth اجازه دهید تا برای اولین بار به طور خودکار حساب های جدیدی را برای کاربرانی ایجاد کند که وارد سایت شوند
auths.sspi_auto_activate_users=فعال سازی خودکار کاربران
auths.sspi_auto_activate_users_helper=به روش SSPI auth اجازه دهید تا کاربران جدید را به طور خودکار فعال کند
auths.sspi_strip_domain_names=نام دامنه را از نام کاربری حذف کنید
-auths.sspi_strip_domain_names_helper=اگر بررسی شود ، نام دامنه از نامهای ورود به سیستم حذف می شود(eg. "DOMAIN\user" and "user@example.org" هر برای کاربر خواهند شد "user").
auths.sspi_separator_replacement=جداکننده برای استفاده به جای \, / و @
-auths.sspi_separator_replacement_helper=کاراکتر مورد استفاده برای جایگزینی جداکنندگان نامهای ورود به سطح پایین (eg. the \ in "DOMAIN\user") و نامهای اصلی کاربر (eg. the @ in "user@example.org").
auths.sspi_default_language=زبان پیش فرض کاربر
-auths.sspi_default_language_helper=زبان پیش فرض برای کاربران بطور خودکار با روش SSPI auth ایجاد شده است. اگر ترجیح می دهید زبان به طور خودکار شناسایی شود ، خالی بگذارید.
auths.tips=ﻧﮑﺎﺕ
auths.tips.oauth2.general=احراز هویت OAuth2
auths.tip.oauth2_provider=تامین کننده OAuth2
-auths.tip.nextcloud=با استفاده از منوی زیر "تنظیمات -> امنیت -> مشتری OAuth 2.0" مصرف کننده OAuth جدیدی را در نمونه خود ثبت کنید
auths.tip.mastodon=یک URL نمونه سفارشی برای نمونه ماستودون که می خواهید با آن احراز هویت کنید وارد کنید (یا از یک پیش فرض استفاده کنید)
auths.edit=ویرایش منبع احراز هویت
auths.activated=این منبع احراز هویت فعال شده است
@@ -2328,7 +2247,6 @@ config.mailer_use_sendmail=استفاده از ارسال رایانامه (ای
config.mailer_sendmail_path=مسیر ارسال ایمیل مستقیم
config.mailer_sendmail_args=برهان های اضافی برای ارسال مستقیم ایمیل
config.mailer_sendmail_timeout=مهلت زمانی ارسال نامه
-config.test_email_placeholder=ایمیل (نمونه test@example.com)
config.send_test_mail=ارسال ایمیل آزمایشی
config.oauth_config=پیکربندی OAuth
@@ -2394,7 +2312,6 @@ monitor.queue.exemplar=نوع نمونه
monitor.queue.numberworkers=تعداد کارگران
monitor.queue.maxnumberworkers=بیشینه تعداد کارگران
monitor.queue.settings.title=تنظیمات استخر
-monitor.queue.settings.maxnumberworkers=بیشینه تعداد کارگران
monitor.queue.settings.maxnumberworkers.placeholder=در حال حاضر %[1]v
monitor.queue.settings.maxnumberworkers.error=حداکثر تعداد کارگران باید یک عدد باشد
monitor.queue.settings.submit=بالا بردن ساماندهی
@@ -2490,8 +2407,6 @@ 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]
error.no_unit_allowed_repo=شما اجازه دسترسی به هیچ قسمت از این مخزن را ندارید.
diff --git a/options/locale/locale_fi-FI.ini b/options/locale/locale_fi-FI.ini
index b925d6f43a9..cd4c06c0138 100644
--- a/options/locale/locale_fi-FI.ini
+++ b/options/locale/locale_fi-FI.ini
@@ -39,7 +39,6 @@ webauthn_use_twofa=Käytä kaksivaihesta vahvistusta puhelimestasi
webauthn_error=Turva-avainta ei voitu lukea.
webauthn_unsupported_browser=Selaimesi ei tällä hetkellä tue WebAuthnia.
webauthn_error_unknown=Tuntematon virhe. Yritä uudelleen.
-webauthn_error_insecure=`WebAuthn tukee vain suojattuja yhteyksiä. Testaukseen HTTP:n yli, voit käyttää osoitetta "localhost" tai "127.0.0.1"`
webauthn_error_unable_to_process=Palvelin ei pystynyt toteuttamaan kutsua.
webauthn_error_duplicated=Turva-avainta ei ole sallittu tässä pyynnössä. Varmista, ettei avainta ole jo rekisteröity.
webauthn_error_empty=Sinun täytyy asettaa nimi tälle avaimelle.
@@ -163,15 +162,10 @@ path=Polku
sqlite_helper=SQLite3-tietokannan tiedostopolku. Syötä absoluuttinen polku, jos ajat Giteaa palveluna.
reinstall_error=Yrität asentaa olemassa olevaan Gitea tietokantaan
reinstall_confirm_message=Asentaminen uudelleen olemassa olevalla Gitea-tietokannalla voi aiheuttaa useita ongelmia. Useimmissa tapauksissa sinun pitäisi käyttää olemassa olevia "app.ini" asetuksia Gitean käyttöön. Jos tiedät mitä teet, vahvista seuraavat seikat:
-reinstall_confirm_check_1=Tiedot, jotka on salattu SECRET_KEY:llä app.ini:ssä saatetaan menettää: käyttäjät eivät ehkä voi kirjautua sisään 2FA/OTP:lla ja peilit eivät välttämättä toimi oikein. Ruksaamalla tämän vahvistat, että nykyinen app.ini -tiedosto sisältää oikean SECRET_KEY:n.
-reinstall_confirm_check_2=Repot ja asetukset saattaa olla tarpeen uudelleensynkronoida. Valitsemalla tämän vahvistat, että uudelleensynkronoit repojen koukut ja authorized_keys -tiedoston manuaalisesti. Varmistat, että repon ja peilin asetukset ovat oikeat.
reinstall_confirm_check_3=Vahvistat, että olet täysin varma siitä, että tämä Gitea toimii oikealla app.ini sijainnilla ja että olet varma, että sinun täytyy asentaa uudelleen. Vahvistat, että tunnustat edellä mainitut riskit.
err_empty_db_path=SQLite3-tietokannan polku ei voi olla tyhjä.
no_admin_and_disable_registration=Et voi kytkeä rekisteröintiä pois luomatta sitä ennen ylläpitotiliä.
err_empty_admin_password=Ylläpitäjän salasana ei voi olla tyhjä.
-err_empty_admin_email=Ylläpitäjän sähköpostiosoite ei voi olla tyhjä.
-err_admin_name_is_reserved=Ylläpitäjän käyttäjätunnus on virheellinen: käyttäjätunnus on varattu
-err_admin_name_is_invalid=Ylläpitäjän käyttäjätunnus on virheellinen
general_title=Yleiset asetukset
app_name=Sivuston otsikko
@@ -185,7 +179,6 @@ domain=Palvelimen verkkotunnus
ssh_port=SSH-palvelimen portti
ssh_port_helper=Porttinumero, jossa SSH-palvelimesi kuuntelee. Jätä tyhjäksi kytkeäksesi pois.
http_port=Gitean HTTP-kuunteluportti
-http_port_helper=Portti, jossa Gitean web-palvelin kuuntelee.
app_url=Gitean juuriosoite
app_url_helper=Juuriosoite HTTP(S)-klooniosoitteille ja sähköpostimuistutuksille.
log_root_path=Lokin polku
@@ -286,7 +279,6 @@ allow_password_change=Vaadi käyttäjää vaihtamaan salasanansa (suositeltava)
reset_password_mail_sent_prompt=Varmistussähköposti on lähetetty osoitteeseen %s . Tarkista saapuneet seuraavan %s tunnin sisällä saadaksesi tilin palauttamisen valmiiksi.
active_your_account=Aktivoi tilisi
account_activated=Tili on aktivoitu
-prohibit_login=Kirjautuminen estetty
resent_limit_prompt=Olet jo tilannut aktivointisähköpostin hetki sitten. Ole hyvä ja odota 3 minuuttia ja yritä sitten uudelleen.
has_unconfirmed_mail=Hei %s, sinulla on varmistamaton sähköposti osoite (%s ). Jos et ole saanut varmistus sähköpostia tai tarvitset uudelleenlähetyksen, ole hyvä ja klikkaa allaolevaa painiketta.
resend_mail=Klikkaa tästä uudelleenlähettääksesi aktivointi sähköpostisi
@@ -321,7 +313,6 @@ email_domain_blacklisted=Et voi rekisteröityä sähköpostiosoittellasi.
authorize_application=Valtuuta sovellus
authorize_redirect_notice=Sinut uudelleen ohjataan osoitteeseen %s jos valtuutat tämän sovelluksen.
authorize_application_created_by=Tämän sovelluksen on luonnut %s.
-authorize_application_description=Jos myönnät valtuuden, sovellus voi käyttää kaikkia tilitietojasi ja kirjoittaa niihin, mukaan lukien yksityiset repot ja organisaatiot.
authorize_title=Valtuutatko "%s" pääsemään tilillesi?
authorization_failed=Käyttöoikeuden varmistus epäonnistui
sspi_auth_failed=SSPI todennus epäonnistui
@@ -335,7 +326,6 @@ activate_account=Ole hyvä ja aktivoi tilisi
activate_email=Vahvista sähköpostiosoitteesi
-register_notify.text_2=Voit nyt kirjautua käyttäjätunnuksella: %s.
reset_password=Palauta käyttäjätili
reset_password.title=%s, olet pyytänyt tilisi palauttamista
@@ -513,7 +503,6 @@ activate_email=Lähetä aktivointi
activations_pending=Odottaa aktivointia
delete_email=Poista
email_deletion=Poista sähköpostiosoite
-email_deletion_desc=Sähköpostiosoite ja siihen liittyvät tiedot poistetaan tililtäsi. Kyseisen sähköpostiosoitteen sisältävät commitit pysyvät muuttumattomia. Jatketaanko?
email_deletion_success=Sähköpostiosoite on poistettu.
theme_update_success=Teemasi on päivitetty.
theme_update_error=Valittua teemaa ei löydy.
@@ -604,7 +593,6 @@ oauth2_application_edit=Muokkaa
twofa_is_enrolled=Tilisi käyttää kaksivaiheista vahvistusta.
twofa_not_enrolled=Tilisi ei tällä hetkellä käytä kaksivaiheista vahvistusta.
-twofa_enroll=Ota kaksivaiheinen vahvistus käyttöön
twofa_disabled=Kaksivaiheinen todennus on otettu pois käytöstä.
scan_this_image=Skannaa tämä kuva tunnistautumissovelluksellasi:
or_enter_secret=Tai kirjoita salainen avain: %s
@@ -690,11 +678,9 @@ migrate_items_pullrequests=Vetopyynnöt
migrate_items_releases=Julkaisut
migrate_repo=Siirrä repo
migrate.clone_address=Migraation / Kloonaa URL osoitteesta
-migrate.github_token_desc=Voit laittaa yhden tai useamman pääsymerkin pilkulla erotellen tähän nopeuttaaksesi migraatiota GitHub APIn vauhtirajojen takia. VAROITUS: Tämän ominaisuuden väärinkäyttö voi rikkoa palveluntarjoajan ehtoja ja johtaa tilin estämiseen.
migrate.permission_denied=Sinun ei sallita tuovan paikallisia repoja.
migrate.failed=Siirto epäonnistui: %v
migrate.migrate_items_options=Pääsymerkki vaaditaan lisäkohteiden siirtämiseen
-migrate.migrating=Tuodaan kohteesta %s ...
migrate.migrating_failed=Tuonti kohteesta %s epäonnistui.
migrate.migrating_git=Tuodaan Git-tietoja
@@ -764,6 +750,7 @@ editor.no_changes_to_show=Ei muutoksia näytettäväksi.
editor.add_subdir=Lisää hakemisto…
editor.require_signed_commit=Haara vaatii vahvistetun commitin
+
commits.commits=Commitit
commits.nothing_to_compare=Nämä haarat vastaavat toisiaan.
commits.search_all=Kaikki haarat
@@ -845,7 +832,6 @@ issues.filter_type.review_requested=Arvostelua pyydetty
issues.filter_sort=Lajittele
issues.filter_sort.latest=Uusin
issues.filter_sort.oldest=Vanhin
-issues.filter_sort.recentupdate=Äskettäin päivitetty
issues.filter_sort.leastupdate=Kauiten aikaa sitten päivitetty
issues.filter_sort.mostcomment=Eniten kommentoidut
issues.filter_sort.leastcomment=Vähiten kommentoidut
@@ -907,7 +893,6 @@ issues.unlock=Avaa keskustelu
issues.unlock_comment=aukaisi tämän keskustelun uudelleen %s
issues.lock_confirm=Lukitse
issues.unlock_confirm=Avaa
-issues.lock.notice_1=- Muut käyttäjät eivät voi lisätä uusia kommentteja tähän ongelmaan.
issues.lock.notice_3=- Voit aina myöhemmin avata tämän ongelman lukituksesta.
issues.unlock.notice_2=- Voit aina myöhemmin lukita tämän ongelman uudelleen.
issues.lock.reason=Lukitsemisen syy
@@ -1096,7 +1081,6 @@ settings.teams=Tiimit
settings.add_team=Lisää tiimi
settings.add_webhook=Lisää webkoukku
settings.webhook_deletion=Poista webkoukku
-settings.webhook.test_delivery=Testitoimitus
settings.webhook.request=Pyyntö
settings.webhook.response=Vastaus
settings.webhook.headers=Otsikot
@@ -1128,7 +1112,6 @@ settings.event_repository=Repo
settings.event_repository_desc=Repo luotu tai poistettu.
settings.event_header_issue=Ongelmien tapahtumat
settings.event_issues=Ongelmat
-settings.event_issues_desc=Ongelma avattu, suljettu, avattu uudelleen tai muokattu.
settings.event_issue_assign=Ongelma määritetty
settings.event_issue_assign_desc=Ongelma osoitettu tai osoitus poistettu.
settings.event_issue_label_desc=Ongelman tunnisteet päivitetty tai tyhjennetty.
@@ -1204,11 +1187,9 @@ settings.lfs_locks=Lukot
settings.lfs_invalid_locking_path=Virheellinen polku: %s
settings.lfs_invalid_lock_directory=Hakemistoa ei voida lukita: %s
settings.lfs_lock_already_exists=Lukitus on jo olemassa: %s
-settings.lfs_lock_path=Lukittavan tiedostopolku...
settings.lfs_locks_no_locks=Ei lukkoja
settings.lfs_lock_file_no_exist=Lukittua tiedostoa ei ole olemassa oletushaarassa
settings.lfs_force_unlock=Pakota lukituksen avaus
-settings.lfs_pointers.found=Löytyi %d blob osoitinta - %d yhdistettyö, %d yhdistämätöntä (%d puuttuu varastosta)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Repossa
@@ -1318,11 +1299,12 @@ settings.visibility.private=Yksityinen (näkyvä vain organisaation jäsenille)
settings.visibility.private_shortname=Yksityinen
settings.update_settings=Päivitä asetukset
+
+
settings.delete=Poista organisaatio
settings.delete_account=Poista tämä organisaatio
settings.delete_prompt=Organisaatio poistetaan pysyvästi, ja tätä EI VOI peruuttaa myöhemmin!
settings.confirm_delete_account=Vahvista poisto
-settings.delete_org_title=Poista organisaatio
settings.hooks_desc=Lisää webkoukkuja, jotka suoritetaan kaikissa repoissa tässä organisaatiossa.
@@ -1371,7 +1353,6 @@ users=Käyttäjätilit
organizations=Organisaatiot
repositories=Repot
authentication=Todennuslähteet
-emails=Käyttäjien sähköpostit
config=Asetukset
config_summary=Yhteenveto
config_settings=Asetukset
@@ -1427,7 +1408,6 @@ users.2fa=2FA
users.repos=Repot
users.created=Luotu
users.last_login=Viimeksi kirjautunut
-users.never_login=Ei koskaan kirjautunut
users.edit=Muokkaa
users.auth_source=Todennuslähde
users.local=Paikallinen
@@ -1459,10 +1439,7 @@ users.list_status_filter.not_2fa_enabled=2FA ei käytössä
emails.email_manage_panel=Käyttäjien sähköpostien hallinta
emails.primary=Ensisijainen
emails.activated=Aktivoitu
-emails.filter_sort.email=Sähköposti
-emails.filter_sort.email_reverse=Sähköposti (käänteinen)
-emails.filter_sort.name=Käyttäjänimi
-emails.filter_sort.name_reverse=Käyttäjänimi (käänteinen)
+emails.filter_sort.name=Käyttäjätunnus
emails.duplicate_active=Tämä sähköpostiosoite on jo käytössä toisella käyttäjällä.
orgs.org_manage_panel=Organisaatioiden hallinta
diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini
index 2cc0ca72025..c9e074b6594 100644
--- a/options/locale/locale_fr-FR.ini
+++ b/options/locale/locale_fr-FR.ini
@@ -44,7 +44,7 @@ webauthn_use_twofa=Utilisez l'authentification à deux facteurs avec votre tél
webauthn_error=Impossible de lire votre clé de sécurité.
webauthn_unsupported_browser=Votre navigateur ne prend actuellement pas en charge WebAuthn.
webauthn_error_unknown=Une erreur indéterminée s'est produite. Veuillez réessayer.
-webauthn_error_insecure=`WebAuthn ne prend en charge que les connexions sécurisées. Pour les tests via HTTP, vous pouvez utiliser l'origine "localhost" ou "127.0.0.1"`
+webauthn_error_insecure=WebAuthn ne prend en charge que les connexions sécurisées. Pour des tests via HTTP, vous pouvez utiliser « localhost » ou « 127.0.0.1 ».
webauthn_error_unable_to_process=Le serveur n'a pas pu traiter votre demande.
webauthn_error_duplicated=La clé de sécurité n’est pas autorisée pour cette demande. Veuillez vous assurer que la clé n’est pas déjà enregistrée.
webauthn_error_empty=Vous devez définir un nom pour cette clé.
@@ -117,7 +117,7 @@ files=Fichiers
error=Erreur
error404=La page que vous essayez d'atteindre n'existe pas ou vous n'êtes pas autorisé à la voir.
-error503=Le serveur n’a pas pu répondre à votre requête. Veuillez réessayer plus tard.
+error503=Le serveur n’a pas pu répondre à votre demande. Veuillez réessayer plus tard.
go_back=Retour
invalid_data=Données invalides : %v
@@ -131,7 +131,7 @@ unpin=Désépingler
artifacts=Artefacts
expired=Expiré
-confirm_delete_artifact=Êtes-vous sûr de vouloir supprimer l‘artefact « %s » ?
+confirm_delete_artifact=Êtes-vous sûr de vouloir supprimer l’artefact « %s » ?
archived=Archivé
@@ -230,8 +230,8 @@ buttons.enable_monospace_font=Activer la police à chasse fixe
buttons.disable_monospace_font=Désactiver la police à chasse fixe
[filter]
-string.asc=A - Z
-string.desc=Z - A
+string.asc=A–Z
+string.desc=Z–A
[error]
occurred=Une erreur s’est produite
@@ -269,16 +269,16 @@ path=Emplacement
sqlite_helper=Chemin d'accès pour la base de données SQLite3. Entrer un chemin absolu si vous exécutez Gitea en tant que service.
reinstall_error=Vous essayez d'installer dans une base de données Gitea existante
reinstall_confirm_message=La réinstallation avec une base de données Gitea existante peut causer plusieurs problèmes. Dans la plupart des cas, vous devriez utiliser votre "app.ini" existant pour exécuter Gitea. Si vous savez ce que vous faites, confirmez ce qui suit :
-reinstall_confirm_check_1=Les données chiffrées par la clé SECRET_KEY dans l'application peuvent être perdu : les utilisateurs pourrait ne pas pouvoir se connecter avec 2FA/OTP et les miroirs pourrait ne pas fonctionner correctement. En cochant cette case, vous confirmez que le fichier app.ini actuel contient la bonne SECRET_KEY.
+reinstall_confirm_check_1=Les données chiffrées par la valeur de SECRET_KEY dans app.ini peuvent être invalidés, empêchant les utilisateurs de se connecter via 2FA/OTP et les miroirs de se synchroniser. En cochant cette case, vous confirmez que le fichier app.ini actuel contient la bonne clé SECRET_KEY.
reinstall_confirm_check_2=Les dépôts et les paramètres peuvent avoir besoin d'être re-synchronisés. En cochant cette case, vous confirmez que vous resynchroniserez manuellement les liens des dépôts et du fichier authorized_keys. Vous confirmez que vous allez vous assurer que les paramètres du dépôt et du miroir sont corrects.
reinstall_confirm_check_3=Vous confirmez : vous êtes absolument certain que ce Gitea fonctionne avec le bon emplacement de app.ini et vous êtes certain de devoir réinstaller. Vous confirmez également que vous avez pris connaissance des risques exposés ci-dessus.
err_empty_db_path=Le chemin de la base de données SQLite3 ne peut être vide.
no_admin_and_disable_registration=Vous ne pouvez pas désactiver la création de nouveaux utilisateurs avant d'avoir créé un compte administrateur.
err_empty_admin_password=Le mot de passe administrateur ne peut pas être vide.
-err_empty_admin_email=L’adresse courriel de l'administrateur ne peut être vide.
-err_admin_name_is_reserved=Le nom d'utilisateur de l'administrateur est invalide, le nom d'utilisateur est réservé
-err_admin_name_pattern_not_allowed=Le nom d'utilisateur de l'administrateur est invalide, le nom d'utilisateur est réservé
-err_admin_name_is_invalid=Le nom d'utilisateur de l'administrateur est invalide
+err_empty_admin_email=Le courriel de l’administrateur ne peut être vide.
+err_admin_name_is_reserved=Le nom de l’administrateur est invalide, ce nom d’utilisateur est réservé.
+err_admin_name_pattern_not_allowed=Le nom de l’administrateur est invalide, ce nom utilise un motif réservé.
+err_admin_name_is_invalid=Le nom de l’administrateur est invalide.
general_title=Configuration générale
app_name=Titre du site
@@ -294,7 +294,7 @@ domain_helper=Domaine ou adresse d'hôte pour le serveur.
ssh_port=Port du serveur SSH
ssh_port_helper=Port d'écoute du serveur SSH. Laissez le vide pour le désactiver.
http_port=Port d'écoute HTTP de Gitea
-http_port_helper=Port sur lequel le serveur web Gitea attendra des requêtes.
+http_port_helper=Port d’écoute du serveur web Gitea.
app_url=URL de base de Gitea
app_url_helper=Adresse HTTP(S) de base pour les clones git et les notifications par courriel.
log_root_path=Chemin des journaux
@@ -309,7 +309,7 @@ smtp_from_invalid=L’adresse « Envoyer le courriel sous » est invalide
smtp_from_helper=Adresse courriel utilisée par Gitea. Utilisez directement votre adresse ou la forme « Nom ».
mailer_user=Utilisateur SMTP
mailer_password=Mot de passe SMTP
-register_confirm=Exiger la confirmation du courriel lors de l'inscription
+register_confirm=Exiger la confirmation du courriel lors de l’inscription
mail_notify=Activer les notifications par courriel
server_service_title=Paramètres Serveur et Tierce Parties
offline_mode=Activer le mode hors-ligne
@@ -349,7 +349,7 @@ save_config_failed=L'enregistrement de la configuration %v a échoué
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
invalid_log_root_path=Le répertoire des fichiers de journalisation est invalide : %v
default_keep_email_private=Masquer les adresses courriels par défaut
-default_keep_email_private_popup=Masquer par défaut les adresses courriels des nouveaux utilisateurs.
+default_keep_email_private_popup=Masquer par défaut les courriels des nouveaux utilisateurs.
default_allow_create_organization=Autoriser la création d'organisations par défaut
default_allow_create_organization_popup=Permettre aux nouveaux comptes utilisateurs de créer des organisations par défaut.
default_enable_timetracking=Activer le suivi de temps par défaut
@@ -421,6 +421,7 @@ remember_me.compromised=Le jeton de connexion n’est plus valide, ce qui peut i
forgot_password_title=Mot de passe oublié
forgot_password=Mot de passe oublié ?
need_account=Besoin d‘un compte ?
+sign_up_tip=Vous êtes en train d’enregistrer le premier compte du système, doté des privilèges administrateur. Veuillez conserver précieusement ses nom d’utilisateur et mot de passe. En cas d’oublie, consultez la documentation de Gitea pour en récupérer l’accès.
sign_up_now=Inscrivez-vous dès maintenant !
sign_up_successful=Le compte a été créé avec succès. Bienvenue !
confirmation_mail_sent_prompt_ex=Un nouveau courriel de confirmation a été envoyé à %s . Veuillez vérifier votre boîte de réception dans la prochaine %s pour terminer le processus d’inscription. Si votre adresse courriel est incorrecte, vous pouvez vous reconnecter et la modifier.
@@ -430,11 +431,11 @@ reset_password_mail_sent_prompt=Un mail de confirmation a été envoyé à %s
active_your_account=Activer votre compte
account_activated=Le compte a été activé
prohibit_login=Connexion interdite
-prohibit_login_desc=Votre compte n'autorise pas la connexion, veuillez contacter l'administrateur de votre site.
-resent_limit_prompt=Désolé, vous avez récemment demandé un courriel d'activation. Veuillez réessayer dans 3 minutes.
-has_unconfirmed_mail=Bonjour %s, votre adresse courriel (%s ) n’a pas été confirmée. Si vous n’avez reçu aucun mail de confirmation ou souhaitez renouveler l’envoi, cliquez sur le bouton ci-dessous.
-change_unconfirmed_mail_address=Si votre adresse courriel d’inscription est incorrecte, vous pouvez la modifier ici et renvoyer un nouvel courriel de confirmation.
-resend_mail=Cliquez ici pour renvoyer un mail de confirmation
+prohibit_login_desc=Votre compte n’autorise pas la connexion, veuillez contacter l’administrateur de votre site.
+resent_limit_prompt=Désolé, vous avez récemment demandé un courriel d’activation. Veuillez réessayer dans 3 minutes.
+has_unconfirmed_mail=Bonjour %s, votre adresse courriel %s n’a pas été confirmée. Si vous n’avez reçu aucun mail de confirmation ou souhaitez renouveler l’envoi, cliquez sur le bouton ci-dessous.
+change_unconfirmed_mail_address=Si votre adresse courriel d’inscription est incorrecte, vous pouvez la modifier ici et renvoyer un nouveau courriel de confirmation.
+resend_mail=Cliquez ici pour renvoyer un courriel de confirmation
email_not_associate=L’adresse courriel n’est associée à aucun compte.
send_reset_mail=Envoyer un courriel de récupération du compte
reset_password=Récupération du compte
@@ -470,17 +471,17 @@ openid_connect_desc=L'URI OpenID choisie est inconnue. Associez-le à un nouveau
openid_register_title=Créer un nouveau compte
openid_register_desc=L'URI OpenID choisie est inconnue. Associez-le à un nouveau compte ici.
openid_signin_desc=Entrez l'URI de votre OpenID. Par exemple : alice.openid.example.org ou https://openid.example.org/alice.
-disable_forgot_password_mail=La récupération du compte est désactivée car aucune adresse courriel n’est configurée. Veuillez contacter l'administrateur de votre site.
-disable_forgot_password_mail_admin=La récupération du compte est disponible uniquement lorsque l’adresse courriel est configurée. Veuillez configurer l’adresse courriel pour activer la récupération du compte.
+disable_forgot_password_mail=La récupération du compte est désactivée car aucun courriel n’est configuré. Veuillez contacter l’administrateur de votre site.
+disable_forgot_password_mail_admin=La récupération du compte n’est possible que lorsqu’un courriel est configurée. Veuillez ajouter une adresse courriel à votre compte.
email_domain_blacklisted=Vous ne pouvez pas vous enregistrer avec votre adresse courriel.
authorize_application=Autoriser l'application
authorize_redirect_notice=Vous serez redirigé vers %s si vous autorisez cette application.
authorize_application_created_by=Cette application a été créée par %s.
-authorize_application_description=Si vous accordez l'accès, il sera en mesure d'accéder et d'écrire toutes les informations de votre compte, y compris les dépôts privés et les organisations.
+authorize_application_description=Si vous accordez l’accès, elle pourra accéder et modifier toutes les informations de votre compte, y compris vos dépôts privés et vos organisations.
authorize_application_with_scopes=Avec des contextes : %s
authorize_title=Autoriser "%s" à accéder à votre compte ?
authorization_failed=L’autorisation a échoué
-authorization_failed_desc=L'autorisation a échoué car nous avons détecté une demande incorrecte. Veuillez contacter le responsable de l'application que vous avez essayé d'autoriser.
+authorization_failed_desc=L'autorisation a échoué en raison d’une requête invalide. Veuillez contacter le responsable de l'application que vous avez essayé d'autoriser.
sspi_auth_failed=Échec de l'authentification SSPI
password_pwned=Le mot de passe que vous avez choisi fait partit des mots de passe ayant fuité sur internet. Veuillez réessayer avec un mot de passe différent et considérez remplacer ce mot de passe si vous l’utilisez ailleurs.
password_pwned_err=Impossible d'envoyer la demande à HaveIBeenPwned
@@ -501,12 +502,12 @@ activate_account.text_2=Veuillez cliquer sur ce lien pour activer votre compte c
activate_email=Veuillez vérifier votre adresse courriel
activate_email.title=%s, veuillez vérifier votre adresse courriel
-activate_email.text=Veuillez cliquer sur le lien suivant pour vérifier votre adresse courriel dans %s :
+activate_email.text=Veuillez cliquer sur le lien suivant pour vérifier votre adresse courriel dans %s :
register_notify=Bienvenue sur %s
register_notify.title=%[1]s, bienvenue à %[2]s
-register_notify.text_1=ceci est votre courriel de confirmation d'inscription pour %s!
-register_notify.text_2=Vous pouvez maintenant vous connecter avec le nom d'utilisateur : %s.
+register_notify.text_1=Voici votre courriel d’inscription pour %s !
+register_notify.text_2=Vous pouvez maintenant vous connecter avec le nom d’utilisateur : %s.
register_notify.text_3=Si ce compte a été créé pour vous, veuillez définir votre mot de passe d'abord.
reset_password=Récupérer votre compte
@@ -544,7 +545,7 @@ release.download.targz=Code source (TAR.GZ)
repo.transfer.subject_to=%s aimerait transférer "%s" à %s
repo.transfer.subject_to_you=`%s aimerait vous transférer "%s"`
repo.transfer.to_you=vous
-repo.transfer.body=Pour l'accepter ou le rejeter, visitez %s ou ignorez-le.
+repo.transfer.body=Pour l’accepter ou le rejeter, visitez %s ou ignorez-le.
repo.collaborator.added.subject=%s vous a ajouté à %s
repo.collaborator.added.text=Vous avez été ajouté en tant que collaborateur du dépôt :
@@ -596,7 +597,7 @@ url_error=`« %s » n'est pas une URL valide.`
include_error=` doit contenir "%s".`
glob_pattern_error=` a un motif glob invalide : %s.`
regex_pattern_error=` a un motif regex invalide : %s.`
-username_error=` ne peut contenir que des caractères alphanumériques, trait d'union « - », tiret bas « _ » et point « . », ne peux commencer que par des caractères alphanumériques et avoir des symboles consécutifs.`
+username_error=` ne peut contenir que des caractères alphanumériques « a-z, A-Z, 0-9 », des traits d'union « - », des tirets bas « _ » et des points « . » et ne peux ni commencer, ni finir par des symboles, ni contenir des symboles consécutifs.`
invalid_group_team_map_error=` a une cartographie invalide : %s`
unknown_error=Erreur inconnue :
captcha_incorrect=Le code CAPTCHA est incorrect.
@@ -615,13 +616,13 @@ repository_files_already_exist.adopt=Des fichiers existent déjà dans ce dépô
repository_files_already_exist.delete=Des fichiers existent déjà pour ce dépôt. Vous devez les supprimer.
repository_files_already_exist.adopt_or_delete=Des fichiers existent déjà dans ce dépôt. Veuillez les adopter ou les supprimer.
visit_rate_limit=Le taux d'appel à distance autorisé a été dépassé.
-2fa_auth_required=L'accès à distance requiert une authentification à deux facteurs.
+2fa_auth_required=L’accès à distance requiert une authentification à deux facteurs.
org_name_been_taken=Ce nom d'organisation est déjà pris.
team_name_been_taken=Le nom d'équipe est déjà pris.
team_no_units_error=Autoriser l’accès à au moins une section du dépôt.
-email_been_used=Cette adresse courriel est déjà utilisée.
-email_invalid=Cette adresse courriel est invalide.
-email_domain_is_not_allowed=Le domaine %s du courriel utilisateur entre en conflit avec EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Veuillez vous assurer que votre opération est attendue.
+email_been_used=Ce courriel est déjà utilisé.
+email_invalid=Ce courriel est invalide.
+email_domain_is_not_allowed=Le domaine du courriel %s est en conflit avec EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Veuillez vous assurer que votre opération est attendue.
openid_been_used=Adresse OpenID "%s" déjà utilisée.
username_password_incorrect=Identifiant ou mot de passe invalide.
password_complexity=Le mot de passe ne respecte pas les exigences de complexité:
@@ -678,17 +679,17 @@ unfollow=Ne plus suivre
user_bio=Biographie
disabled_public_activity=Cet utilisateur a désactivé la visibilité publique de l'activité.
email_visibility.limited=Votre adresse courriel est visible pour tous les utilisateurs authentifiés
-email_visibility.private=Votre adresse courriel n'est visible que pour vous et les administrateurs
+email_visibility.private=Votre adresse courriel n’est visible que pour vous et les administrateurs
show_on_map=Afficher ce lieu sur une carte
settings=Paramètres utilisateur
form.name_reserved=Le nom d’utilisateur "%s" est réservé.
form.name_pattern_not_allowed=Le motif « %s » n’est pas autorisé dans un nom de d'utilisateur.
-form.name_chars_not_allowed=Le nom d'utilisateur "%s" contient des caractères non valides.
+form.name_chars_not_allowed=Le nom d’utilisateur « %s » contient des caractères interdits.
block.block=Bloquer
block.block.user=Bloquer l’utilisateur
-block.block.org=Bloquer l’utilisateur pour l’organisation
+block.block.org=Bloquer l’utilisateur de l’organisation
block.block.failure=Impossible de bloquer l’utilisateur : %s
block.unblock=Débloquer
block.unblock.failure=Impossible de débloquer l’utilisateur : %s
@@ -798,36 +799,36 @@ emails=Adresses courriels
manage_emails=Gérer les adresses courriels
manage_themes=Sélectionner le thème par défaut
manage_openid=Gérer les adresses OpenID
-email_desc=Votre adresse courriel principale sera utilisée pour les notifications, la récupération de mot de passe et, à condition qu'elle ne soit pas cachée, les opérations Git basées sur le Web.
+email_desc=Votre courriel principal sera utilisé pour les notifications, la récupération de mot de passe et, à condition qu’il ne soit pas caché, les opérations Git basées sur le Web.
theme_desc=Ce sera votre thème par défaut sur le site.
theme_colorblindness_help=Support du thème daltonien
theme_colorblindness_prompt=Gitea fournit depuis peu des thèmes daltonien basé sur un spectre coloré réduit. Encore en développement, de futures améliorations devraient enrichir les fichiers de thèmes CSS.
primary=Principale
activated=Activé
requires_activation=Nécessite une activation
-primary_email=Faire de cette adresse votre adresse principale
+primary_email=Rendre Principal
activate_email=Envoyer l’activation
activations_pending=Activations en attente
-can_not_add_email_activations_pending=Il y a une activation en attente, réessayez dans quelques minutes si vous souhaitez ajouter un nouvel e-mail.
+can_not_add_email_activations_pending=Il y a une activation en attente, réessayez dans quelques minutes si vous souhaitez ajouter un nouveau courriel.
delete_email=Exclure
-email_deletion=Supprimer l'adresse e-mail
-email_deletion_desc=L’adresse e-mail et les informations associées seront retirées de votre compte. Les révisions Git effectuées par cette adresse resteront inchangées. Continuer ?
-email_deletion_success=L'adresse e-mail a été supprimée.
+email_deletion=Supprimer l’adresse courriel
+email_deletion_desc=Le courriel et les informations associées seront retirées de votre compte. Les révisions Git effectuées par cette adresse resteront inchangées. Continuer ?
+email_deletion_success=L’adresse courriel a été supprimée.
theme_update_success=Votre thème a été mis à jour.
theme_update_error=Le thème sélectionné n'existe pas.
openid_deletion=Supprimer l’adresse OpenID
openid_deletion_desc=Supprimer cette adresse OpenID de votre compte vous empêchera de vous connecter avec. Continuer ?
openid_deletion_success=L'adresse OpenID a été supprimée.
-add_new_email=Ajouter une nouvelle adresse e-mail
+add_new_email=Ajouter un nouveau courriel
add_new_openid=Ajouter une nouvelle URI OpenID
-add_email=Ajouter une adresse e-mail
+add_email=Ajouter un courriel
add_openid=Ajouter une URI OpenID
-add_email_confirmation_sent=Un e-mail de confirmation a été envoyé à "%s". Veuillez vérifier votre boîte de réception dans les %s suivants pour confirmer votre adresse e-mail.
-add_email_success=La nouvelle adresse e-mail a été ajoutée.
-email_preference_set_success=L'e-mail de préférence a été défini avec succès.
+add_email_confirmation_sent=Un courriel de confirmation a été envoyé à « %s ». Veuillez vérifier votre boîte de réception dans les %s suivants pour confirmer votre adresse.
+add_email_success=La nouvelle adresse a été ajoutée.
+email_preference_set_success=Le courriel de préférence a été défini avec succès.
add_openid_success=La nouvelle adresse OpenID a été ajoutée.
-keep_email_private=Cacher l'adresse e-mail
-keep_email_private_popup=Ceci masquera votre adresse e-mail de votre profil, de vos demandes d’ajout et des fichiers modifiés depuis l'interface Web. Les révisions déjà soumises ne seront pas modifiés. Utilisez %s dans les révisions pour les associer à votre compte.
+keep_email_private=Cacher l’adresse e-mail
+keep_email_private_popup=Ceci masquera votre adresse courriel de votre profil, de vos demandes d’ajout et des fichiers modifiés depuis l’interface Web. Les révisions déjà soumises ne seront pas modifiés. Utilisez %s dans les révisions pour les associer à votre compte.
openid_desc=OpenID vous permet de confier l'authentification à une tierce partie.
manage_ssh_keys=Gérer les clés SSH
@@ -848,13 +849,13 @@ ssh_key_been_used=Cette clé SSH a déjà été ajoutée au serveur.
ssh_key_name_used=Une clé SSH avec le même nom existe déjà sur votre compte.
ssh_principal_been_used=Ce principal a déjà été ajouté au serveur.
gpg_key_id_used=Une clé publique GPG avec le même ID existe déjà.
-gpg_no_key_email_found=Cette clé GPG ne correspond à aucune adresse e-mail activée associée à votre compte. Elle peut toujours être ajoutée si vous signez le jeton fourni.
+gpg_no_key_email_found=Cette clé GPG ne correspond à aucun courriel actif associé à votre compte. Elle peut toujours être ajoutée si vous signez le jeton fourni.
gpg_key_matched_identities=Identités correspondantes :
-gpg_key_matched_identities_long=Les identités intégrées dans cette clé correspondent aux adresses e-mail activées suivantes pour cet utilisateur. Les révisions correspondant à ces adresses e-mail peuvent être vérifiés avec cette clé.
+gpg_key_matched_identities_long=Les identités intégrées dans cette clé correspondent aux courriels actifs suivants pour cet utilisateur. Les révisions correspondant à ces courriels peuvent être vérifiés avec cette clé.
gpg_key_verified=Clé vérifiée
gpg_key_verified_long=Cette clé a été vérifiée à l’aide d’un jeton et peut dorénavant être utilisée pour authentifier vos révisions lorsqu’elles contiennent l’un de vos courriels actifs ou des identités associées à cette clé.
gpg_key_verify=Vérifier
-gpg_invalid_token_signature=La clé GPG, la signature et le jeton fournis ne correspondent pas ou le jeton n'est pas à jour.
+gpg_invalid_token_signature=La clé GPG, la signature et le jeton fournis ne correspondent pas ou le jeton est périmé.
gpg_token_required=Vous devez fournir une signature pour le jeton ci-dessous
gpg_token=Jeton
gpg_token_help=Vous pouvez générer une signature en utilisant :
@@ -862,7 +863,7 @@ gpg_token_signature=Signature GPG renforcée
key_signature_gpg_placeholder=Commence par '-----BEGIN PGP SIGNATURE-----'
verify_gpg_key_success=La clé GPG "%s" a été vérifiée.
ssh_key_verified=Clé vérifiée
-ssh_key_verified_long=La clé a été vérifiée avec un jeton et peut dorénavant être utilisée pour vérifier les révisions comportant l'une des adresses e-mails activées de cet utilisateur.
+ssh_key_verified_long=La clé a été vérifiée avec un jeton et peut dorénavant être utilisée pour vérifier les révisions comportant l’un des courriels actifs de cet utilisateur.
ssh_key_verify=Vérifier
ssh_invalid_token_signature=La clé SSH, la signature ou le jeton fournis ne correspondent pas ou le jeton est périmé.
ssh_token_required=Vous devez fournir une signature pour le jeton ci-dessous
@@ -902,7 +903,7 @@ principal_state_desc=Ce Principal a été utilisé au cours des 7 derniers jours
show_openid=Afficher sur le profil
hide_openid=Masquer du profil
ssh_disabled=SSH désactivé
-ssh_signonly=SSH étant désactivé, ces clés ne servent qu'à vérifier la signature des révisions.
+ssh_signonly=SSH étant désactivé, ces clés ne servent qu’à vérifier la signature des révisions.
ssh_externally_managed=Cette clé SSH est gérée de manière externe pour cet utilisateur
manage_social=Gérer les réseaux sociaux associés
social_desc=Ces comptes sociaux peuvent être utilisés pour vous connecter à votre compte. Assurez-vous de les reconnaître tous.
@@ -962,10 +963,10 @@ oauth2_application_remove_description=La suppression d'une application OAuth2 l'
oauth2_application_locked=Gitea préinstalle des applications OAuth2 au démarrage si elles sont activées dans la configuration. Pour éviter des comportements inattendus, celles-ci ne peuvent être éditées ni supprimées. Veuillez vous référer à la documentation OAuth2 pour plus d'informations.
authorized_oauth2_applications=Applications OAuth2 autorisées
-authorized_oauth2_applications_description=Vous avez autorisé l'accès à votre compte personnel Gitea à ces applications tierces. Veuillez révoquer l'accès aux applications dont vous n'avez plus besoin.
+authorized_oauth2_applications_description=Vous avez autorisé l’accès à votre compte personnel Gitea à ces applications tierces. Veuillez révoquer l’accès aux applications dont vous n’avez plus besoin.
revoke_key=Révoquer
revoke_oauth2_grant=Révoquer l'accès
-revoke_oauth2_grant_description=La révocation de l'accès à cette application tierce l'empêchera d'accéder à vos données. Vous êtes sûr ?
+revoke_oauth2_grant_description=Révoquer l’accès de cette application tierce l’empêchera d’accéder à vos données. Vous êtes sûr ?
revoke_oauth2_grant_success=Accès révoqué avec succès.
twofa_desc=Pour protéger votre compte contre les vols de mot de passes, vous pouvez utiliser un smartphone ou autres appareils pour recevoir un code temporaire à usage unique (TOTP).
@@ -975,7 +976,7 @@ twofa_not_enrolled=Votre compte n'est pas inscrit à l'authentification à deux
twofa_disable=Désactiver l'authentification à deux facteurs
twofa_scratch_token_regenerate=Régénérer une clé de secours à usage unique
twofa_scratch_token_regenerated=Votre clé de secours à usage unique est désormais « %s ». Stockez-la dans un endroit sûr, elle ne sera plus jamais affichée.
-twofa_enroll=Activer l'authentification à deux facteurs
+twofa_enroll=Activer l‘authentification à deux facteurs
twofa_disable_note=Vous pouvez désactiver l'authentification à deux facteurs si nécessaire.
twofa_disable_desc=Désactiver l'authentification à deux facteurs rendra votre compte plus vulnérable. Confirmer ?
regenerate_scratch_token_desc=Si vous avez égaré votre clé de secours ou avez dû l’utiliser pour vous authentifier, vous pouvez la régénérer.
@@ -991,13 +992,13 @@ webauthn_desc=Les clés de sécurité sont des dispositifs matériels contenant
webauthn_register_key=Ajouter une clé de sécurité
webauthn_nickname=Pseudonyme
webauthn_delete_key=Retirer la clé de sécurité
-webauthn_delete_key_desc=Si vous retirez une clé de sécurité, vous ne pourrez plus l'utiliser pour vous connecter. Continuer ?
+webauthn_delete_key_desc=Si vous retirez une clé de sécurité, vous ne pourrez plus l’utiliser pour vous connecter. Continuer ?
webauthn_key_loss_warning=Si vous perdez vos clés de sécurité, vous perdrez l’accès à votre compte.
webauthn_alternative_tip=Vous devriez configurer une méthode d’authentification supplémentaire.
manage_account_links=Gérer les comptes liés
manage_account_links_desc=Ces comptes externes sont liés à votre compte Gitea.
-account_links_not_available=Il n'y a pour l'instant pas de compte externe connecté à votre compte Gitea.
+account_links_not_available=Il n’y a pour l’instant pas de compte externe connecté à votre compte Gitea.
link_account=Lier un Compte
remove_account_link=Supprimer un compte lié
remove_account_link_desc=La suppression d'un compte lié révoquera son accès à votre compte Gitea. Continuer ?
@@ -1015,11 +1016,13 @@ confirm_delete_account=Confirmer la suppression
delete_account_title=Supprimer cet utilisateur
delete_account_desc=Êtes-vous sûr de vouloir supprimer définitivement ce compte d'utilisateur ?
-email_notifications.enable=Activer les notifications par e-mail
-email_notifications.onmention=N'envoyer un e-mail que si vous êtes mentionné
-email_notifications.disable=Désactiver les notifications par e-mail
-email_notifications.submit=Définir les préférences d'e-mail
-email_notifications.andyourown=Et vos propres notifications
+email_notifications.enable=Notifier par courriel
+email_notifications.onmention=Seulement sur Mention
+email_notifications.disable=Ne pas notifier
+email_notifications.submit=Définir les préférences de courriel
+email_notifications.andyourown=Inclure vos propres notifications
+email_notifications.actions.desc=Notification pour les executions de workflows sur les dépôts configurés avec les Actions Gitea .
+email_notifications.actions.failure_only=Ne notifier que pour les exécutions échouées
visibility=Visibilité de l'utilisateur
visibility.public=Public
@@ -1034,8 +1037,8 @@ new_repo_helper=Un dépôt contient tous les fichiers d’un projet, ainsi que l
owner=Propriétaire
owner_helper=Certaines organisations peuvent ne pas apparaître dans la liste déroulante en raison d'une limite maximale du nombre de dépôts.
repo_name=Nom du dépôt
-repo_name_profile_public_hint=.profile est un dépôt spécial que vous pouvez utiliser pour ajouter un README.md à votre profil public d’organisation, visible à tout le monde. Assurez-vous qu’il soit public et initialisez-le avec un README dans le répertoire de profil pour commencer.
-repo_name_profile_private_hint=.profile-private est un dépôt spécial que vous pouvez utiliser pour ajouter un README.md à votre profil d’organisation, visible uniquement aux membres de l’organisation. Assurez-vous qu’il soit privé et initialisez-le avec un README dans le répertoire de profil pour commencer.
+repo_name_profile_public_hint=.profile est un dépôt spécial que vous pouvez utiliser pour ajouter un README.md à votre profil public d’organisation, visible par tous. Assurez-vous qu’il soit public et initialisez-le avec un README dans le répertoire de profil pour commencer.
+repo_name_profile_private_hint=.profile-private est un dépôt spécial que vous pouvez utiliser pour ajouter un README.md à votre profil d’organisation, visible uniquement à ses membres. Assurez-vous qu’il soit privé et initialisez-le avec un README dans le répertoire de profil pour commencer.
repo_name_helper=Idéalement, le nom d’un dépôt devrait être court, mémorisable et unique. Vous pouvez personnaliser votre profil ou celui de votre organisation en créant un dépôt nommé « .profile » ou « .profile-private » et contenant un README.md.
repo_size=Taille du dépôt
template=Modèle
@@ -1057,7 +1060,7 @@ fork_branch=Branche à cloner sur la bifurcation
all_branches=Toutes les branches
view_all_branches=Voir toutes les branches
view_all_tags=Voir toutes les étiquettes
-fork_no_valid_owners=Ce dépôt ne peut pas être bifurqué car il n’a pas de propriétaire valide.
+fork_no_valid_owners=Ce dépôt ne peut pas être bifurqué car il n'y a pas de propriétaire(s) valide(s).
fork.blocked_user=Impossible de bifurquer le dépôt car vous êtes bloqué par son propriétaire.
use_template=Utiliser ce modèle
open_with_editor=Ouvrir avec %s
@@ -1086,13 +1089,13 @@ readme_helper_desc=Le README est l'endroit idéal pour décrire votre projet et
auto_init=Initialiser le dépôt (avec un .gitignore, une Licence et un README.md)
trust_model_helper=Choisissez, parmi les éléments suivants, les règles de confiance des signatures paraphant les révisions :
trust_model_helper_collaborator=Collaborateur : ne se fier qu'aux signatures des collaborateurs du dépôt
-trust_model_helper_committer=Auteur : ne se fier qu'aux signatures des auteurs de révisions
+trust_model_helper_committer=Auteur : ne se fier qu’aux signatures des auteurs de révisions
trust_model_helper_collaborator_committer=Collaborateur et Auteur : ne se fier qu'aux signatures des auteurs collaborant au dépôt
trust_model_helper_default=Par défaut : valeur configurée par défaut pour cette instance Gitea
create_repo=Créer un dépôt
default_branch=Branche par défaut
default_branch_label=défaut
-default_branch_helper=La branche par défaut est la branche de base pour les demandes d'ajout et les révisions de code.
+default_branch_helper=La branche par défaut est la branche de base pour les demandes d’ajout et les révisions de code.
mirror_prune=Purger
mirror_prune_desc=Supprimer les références externes obsolètes
mirror_interval=Intervalle de synchronisation (les unités de temps valides sont 'h', 'm' et 's'). 0 pour désactiver la synchronisation automatique. (Intervalle minimum : %s)
@@ -1101,12 +1104,12 @@ mirror_sync=synchronisé
mirror_sync_on_commit=Synchroniser quand les révisions sont soumis
mirror_address=Cloner depuis une URL
mirror_address_desc=Insérez tous les identifiants requis dans la section Autorisation.
-mirror_address_url_invalid=L’URL fournie est invalide. Vous devez échapper tous les composants de l'URL correctement.
+mirror_address_url_invalid=L’URL fournie est invalide. Vous devez échapper tous les composants de l’URL correctement.
mirror_address_protocol_invalid=L'URL fournie est invalide. Seuls les protocoles http(s):// ou git:// peuvent référencer un miroir.
mirror_lfs=Stockage de fichiers volumineux (LFS)
mirror_lfs_desc=Activer la mise en miroir des données LFS.
mirror_lfs_endpoint=Point d'accès LFS
-mirror_lfs_endpoint_desc=La synchronisation tentera d'utiliser l'url de clonage pour déterminer le serveur LFS . Vous pouvez également spécifier un point d'accès personnalisé si les données LFS du dépôt sont stockées ailleurs.
+mirror_lfs_endpoint_desc=La synchronisation tentera d’utiliser l’URL de clonage pour identifier le serveur LFS . Vous pouvez spécifier un point d’accès personnalisé si les données LFS du dépôt sont stockées ailleurs.
mirror_last_synced=Dernière synchronisation
mirror_password_placeholder=(Aucune modification)
mirror_password_blank_placeholder=(Non défini)
@@ -1161,8 +1164,8 @@ template.issue_labels=Labels de ticket
template.one_item=Vous devez sélectionner au moins un élément du modèle
template.invalid=Vous devez sélectionner un modèle de dépôt
-archive.title=Ce dépôt est archivé. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
-archive.title_date=Ce dépôt a été archivé le %s. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
+archive.title=Ce dépôt est archivé. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d’ajout, ni soumettre de changements.
+archive.title_date=Ce dépôt a été archivé le %s. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d’ajout, ni soumettre de changements.
archive.issue.nocomment=Ce dépôt est archivé. Vous ne pouvez pas commenter de tickets.
archive.pull.nocomment=Ce dépôt est archivé. Vous ne pouvez pas commenter de demande d'ajout.
@@ -1179,7 +1182,7 @@ migrate_options_lfs=Migrer les fichiers LFS
migrate_options_lfs_endpoint.label=Point d'accès LFS
migrate_options_lfs_endpoint.description=La migration va tenter d'utiliser votre dépôt Git distant pour déterminer le serveur LFS . Vous pouvez également spécifier un point d'accès personnalisé si les données LFS du dépôt sont stockées ailleurs.
migrate_options_lfs_endpoint.description.local=Un chemin de serveur local est également pris en charge.
-migrate_options_lfs_endpoint.placeholder=Si laissé vide, le point de terminaison sera dérivé de l'URL du clone
+migrate_options_lfs_endpoint.placeholder=Si laissé vide, le point d’accès sera déterminé à partir de l’URL de clonage.
migrate_items=Éléments à migrer
migrate_items_wiki=Wiki
migrate_items_milestones=Jalons
@@ -1194,7 +1197,7 @@ migrate.clone_address_desc=L'URL HTTP(S) ou Git "clone" d'un dépôt existant
migrate.github_token_desc=Vous pouvez mettre un ou plusieurs jetons séparés par des virgules ici pour rendre la migration plus rapide et contourner la limite de débit de l’API GitHub. ATTENTION : Abuser de cette fonctionnalité peut enfreindre la politique du fournisseur de service et entraîner un blocage de votre compte.
migrate.clone_local_path=ou un chemin serveur local
migrate.permission_denied=Vous n'êtes pas autorisé à importer des dépôts locaux.
-migrate.permission_denied_blocked=Vous ne pouvez pas importer depuis des hôtes interdits, veuillez demander à l'administrateur de vérifier les paramètres ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
+migrate.permission_denied_blocked=Vous ne pouvez pas importer depuis des domaines bannis, veuillez demander à votre administrateur de vérifier les paramètres ALLOWED_DOMAINS, ALLOW_LOCALNETWORKS ou BLOCKED_DOMAINS.
migrate.invalid_local_path=Le chemin local n’est pas valide, n’existe pas ou n’est pas un dossier.
migrate.invalid_lfs_endpoint=Le point d'accès LFS n'est pas valide.
migrate.failed=Echec de migration: %v
@@ -1202,7 +1205,7 @@ migrate.migrate_items_options=Un jeton d'accès est requis pour migrer des élé
migrated_from=Migré de %[2]s
migrated_from_fake=Migré de %[1]s
migrate.migrate=Migrer depuis %s
-migrate.migrating=Migration de %s ...
+migrate.migrating=Migration de %s …
migrate.migrating_failed=La migration de %s a échoué.
migrate.migrating_failed.error=Échec de la migration : %s
migrate.migrating_failed_no_addr=Échec de la migration.
@@ -1228,7 +1231,7 @@ migrate.migrating_issues=Migration des tickets
migrate.migrating_pulls=Migration des demandes d'ajout
migrate.cancel_migrating_title=Annuler la migration
migrate.cancel_migrating_confirm=Voulez-vous abandonner cette migration ?
-migrating_status=Migration des statuts
+migration_status=Statut de la migration
mirror_from=miroir de
forked_from=bifurqué depuis
@@ -1251,7 +1254,7 @@ clone_this_repo=Cloner ce dépôt
cite_this_repo=Citer ce dépôt
create_new_repo_command=Création d'un nouveau dépôt en ligne de commande
push_exist_repo=Soumission d'un dépôt existant par ligne de commande
-empty_message=Ce dépôt n'a pas de contenu.
+empty_message=Ce dépôt n’a pas de contenu.
broken_message=Les données git de ce dépôt ne peuvent pas être lues. Contactez l'administrateur de cette instance ou supprimez ce dépôt.
no_branch=Ce dépôt n’a aucune branche.
@@ -1313,12 +1316,13 @@ vendored=Externe
generated=Générée
commit_graph=Graphe des révisions
commit_graph.select=Sélectionner les branches
-commit_graph.hide_pr_refs=Masquer les demandes d'ajout
+commit_graph.hide_pr_refs=Masquer les demandes d’ajout
commit_graph.monochrome=Monochrome
commit_graph.color=Couleur
commit.contained_in=Cette révision appartient à :
commit.contained_in_default_branch=Cette révision appartient à la branche par défaut
commit.load_referencing_branches_and_tags=Charger les branches et étiquettes référençant cette révision
+commit.merged_in_pr=Cette révision a été fusionnée dans la demande d’ajout %s.
blame=Annotations
download_file=Télécharger le fichier
normal_view=Vue normale
@@ -1332,7 +1336,9 @@ editor.upload_file=Téléverser un fichier
editor.edit_file=Modifier le fichier
editor.preview_changes=Aperçu des modifications
editor.cannot_edit_lfs_files=Les fichiers LFS ne peuvent pas être modifiés dans l'interface web.
+editor.cannot_edit_too_large_file=Le fichier est trop gros pour être édité.
editor.cannot_edit_non_text_files=Les fichiers binaires ne peuvent pas être édités dans l'interface web.
+editor.file_not_editable_hint=Mais vous pouvez toujours le renommer ou le déplacer.
editor.edit_this_file=Modifier le fichier
editor.this_file_locked=Le fichier est verrouillé
editor.must_be_on_a_branch=Vous devez être sur une branche pour appliquer ou proposer des modifications à ce fichier.
@@ -1344,7 +1350,7 @@ editor.name_your_file=Nommez votre fichier…
editor.filename_help=Ajoutez un dossier en entrant son nom suivi d'une barre oblique ('/'). Supprimez un dossier avec un retour arrière au début du champ.
editor.or=ou
editor.cancel_lower=Annuler
-editor.commit_signed_changes=Réviser les changements (signé)
+editor.commit_signed_changes=Réviser les changements signés
editor.commit_changes=Réviser les changements
editor.add_tmpl=Ajouter {filename}
editor.add=Ajouter %s
@@ -1352,7 +1358,7 @@ editor.update=Actualiser %s
editor.delete=Supprimer %s
editor.patch=Appliquer le correctif
editor.patching=Correction:
-editor.fail_to_apply_patch=`Impossible d'appliquer le correctif "%s"`
+editor.fail_to_apply_patch=Impossible d’appliquer le correctif.
editor.new_patch=Nouveau correctif
editor.commit_message_desc=Ajouter une description détaillée facultative…
editor.signoff_desc=Créditer l'auteur "Signed-off-by:" en pied de révision.
@@ -1366,14 +1372,13 @@ editor.cancel=Annuler
editor.filename_cannot_be_empty=Le nom de fichier ne peut être vide.
editor.filename_is_invalid=Le nom du fichier est invalide : "%s".
editor.commit_email=Courriel de la révision
-editor.invalid_commit_email=Le courriel pour la révision n’est pas valide.
+editor.invalid_commit_email=Le courriel de la révision n’est pas valide.
editor.branch_does_not_exist=La branche "%s" n'existe pas dans ce dépôt.
editor.branch_already_exists=La branche "%s" existe déjà dans ce dépôt.
editor.directory_is_a_file=Le nom de dossier "%s" est déjà utilisé comme nom de fichier dans ce dépôt.
-editor.file_is_a_symlink=`« %s » est un lien symbolique. Ce type de fichiers ne peut être modifié dans l'éditeur web.`
+editor.file_is_a_symlink=`« %s » est un lien symbolique. Ce type de fichiers ne peut être modifié dans l’éditeur web.`
editor.filename_is_a_directory=« %s » est déjà utilisé comme nom de dossier dans ce dépôt.
-editor.file_editing_no_longer_exists=Impossible de modifier le fichier « %s » car il n’existe plus dans ce dépôt.
-editor.file_deleting_no_longer_exists=Impossible de supprimer le fichier « %s » car il n’existe plus dans ce dépôt.
+editor.file_modifying_no_longer_exists=Le fichier en cours d’édition, '%s', n’existe plus dans ce dépôt.
editor.file_changed_while_editing=Le contenu du fichier a changé depuis que vous avez commencé à éditer. Cliquez ici pour voir les changements ou soumettez de nouveau pour les écraser.
editor.file_already_exists=Un fichier nommé "%s" existe déjà dans ce dépôt.
editor.commit_id_not_matching=L’ID de la révision ne correspond pas à l’ID lorsque vous avez commencé à éditer. Faites une révision dans une branche de correctif puis fusionnez.
@@ -1381,8 +1386,6 @@ editor.push_out_of_date=Cet envoi semble être obsolète.
editor.commit_empty_file_header=Réviser un fichier vide
editor.commit_empty_file_text=Le fichier que vous allez réviser est vide. Continuer ?
editor.no_changes_to_show=Il n’y a aucune modification à afficher.
-editor.fail_to_update_file=Impossible de mettre à jour/créer le fichier "%s".
-editor.fail_to_update_file_summary=Message d'erreur :
editor.push_rejected_no_message=La modification a été rejetée par le serveur sans message. Veuillez vérifier les Git Hooks.
editor.push_rejected=La modification a été rejetée par le serveur. Veuillez vérifier vos Git Hooks.
editor.push_rejected_summary=Message de rejet complet :
@@ -1396,6 +1399,15 @@ editor.user_no_push_to_branch=L'utilisateur ne peut pas pousser vers la branche
editor.require_signed_commit=Cette branche nécessite une révision signée
editor.cherry_pick=Picorer %s vers:
editor.revert=Rétablir %s sur:
+editor.failed_to_commit=Impossible de réviser les modifications.
+editor.failed_to_commit_summary=Message d’erreur :
+
+editor.fork_create=Bifurquer le Dépôt pour proposer vos modifications
+editor.fork_create_description=Vous ne pouvez pas modifier ce dépôt directement. Cependant, vous pouvez bifurquer ce dépôt, et créer une demande d’ajout avec vos contributions.
+editor.fork_edit_description=Vous ne pouvez pas modifier ce dépôt directement. Les modifications seront écrites sur une bifurcation %s , vous permettant de faire une demande d’ajout.
+editor.fork_not_editable=Vous avez bifurqué ce dépôt mais votre copie n’est pas modifiable.
+editor.fork_failed_to_push_branch=Impossible de pousser la branche %s vers votre dépôt.
+editor.fork_branch_exists=La branche « %s » existe déjà dans votre bifurcation, veuillez choisir un nouveau nom.
commits.desc=Naviguer dans l'historique des modifications.
commits.commits=Révisions
@@ -1652,6 +1664,7 @@ issues.save=Enregistrer
issues.label_title=Nom du label
issues.label_description=Description du label
issues.label_color=Couleur du label
+issues.label_color_invalid=Couleur invalide
issues.label_exclusive=Exclusif
issues.label_archive=Archivé
issues.label_archived_filter=Afficher les labels archivés
@@ -1716,6 +1729,8 @@ issues.remove_time_estimate_at=a supprimé le temps estimé %s
issues.time_estimate_invalid=Le format du temps estimé est invalide
issues.start_tracking_history=`a commencé son travail %s.`
issues.tracker_auto_close=Le minuteur sera automatiquement arrêté quand le ticket sera fermé.
+issues.stopwatch_already_stopped=Le minuteur pour ce ticket est déjà arrêtée.
+issues.stopwatch_already_created=Le minuteur pour ce ticket existe déjà.
issues.tracking_already_started=`Vous avez déjà un minuteur en cours sur un autre ticket !`
issues.stop_tracking=Arrêter le minuteur
issues.stop_tracking_history=a travaillé %[1]s %[2]s
@@ -1766,9 +1781,9 @@ issues.dependency.pr_closing_blockedby=La fermeture de cette demande d’ajout e
issues.dependency.issue_closing_blockedby=La fermeture de ce ticket est bloquée par les tickets suivants
issues.dependency.issue_close_blocks=Ce ticket empêche la clôture des tickets suivants
issues.dependency.pr_close_blocks=Cette demande d’ajout empêche la clôture des tickets suivants
-issues.dependency.issue_close_blocked=Vous devez fermer tous les tickets qui bloquent ce ticket avant de pouvoir le fermer.
+issues.dependency.issue_close_blocked=Vous devez fermer tous les tickets qui bloquent celui-ci avant de pouvoir le fermer.
issues.dependency.issue_batch_close_blocked=Impossible de fermer tous les tickets que vous avez choisis, car le ticket #%d a toujours des dépendances ouvertes.
-issues.dependency.pr_close_blocked=Vous devez fermer tous les tickets qui bloquent cette demande d'ajout avant de pouvoir la fusionner.
+issues.dependency.pr_close_blocked=Vous devez fermer tous les tickets qui bloquent cette demande d’ajout avant de pouvoir la fusionner.
issues.dependency.blocks_short=Bloque
issues.dependency.blocked_by_short=Dépend de
issues.dependency.remove_header=Supprimer cette dépendance
@@ -1779,7 +1794,7 @@ issues.dependency.add_error_same_issue=Vous ne pouvez pas faire dépendre un tic
issues.dependency.add_error_dep_issue_not_exist=Le ticket dépendant n'existe pas.
issues.dependency.add_error_dep_not_exist=La dépendance n'existe pas.
issues.dependency.add_error_dep_exists=La dépendance existe déjà.
-issues.dependency.add_error_cannot_create_circular=Vous ne pouvez pas créer une dépendance avec deux tickets qui se bloquent l'un l'autre.
+issues.dependency.add_error_cannot_create_circular=Vous ne pouvez pas créer une dépendance si les deux tickets se bloquent mutuellement.
issues.dependency.add_error_dep_not_same_repo=Les deux tickets doivent être dans le même dépôt.
issues.review.self.approval=Vous ne pouvez approuver vos propres demandes d'ajout.
issues.review.self.rejection=Vous ne pouvez demander de changements sur vos propres demandes de changement.
@@ -1793,7 +1808,7 @@ issues.review.reject=a requis les changements %s
issues.review.wait=a été sollicité pour évaluer cette demande d’ajout %s.
issues.review.add_review_request=a demandé à %s une évaluation %s.
issues.review.remove_review_request=a retiré la demande d’évaluation pour %s %s.
-issues.review.remove_review_request_self=a refusé d’évaluer cette demande d’ajout %s.
+issues.review.remove_review_request_self=a décliné son invitation à évaluer %s.
issues.review.pending=En attente
issues.review.pending.tooltip=Ce commentaire n'est pas encore visible par les autres utilisateurs. Pour soumettre vos commentaires en attente, sélectionnez "%s" → "%s/%s/%s" en haut de la page.
issues.review.review=Évaluation
@@ -1815,7 +1830,7 @@ issues.review.requested=Évaluation en attente
issues.review.rejected=Changements demandées
issues.review.stale=Modifiée depuis la dernière approbation
issues.review.unofficial=Approbation non comptabilisée
-issues.assignee.error=Tous les assignés n'ont pas été ajoutés en raison d'une erreur inattendue.
+issues.assignee.error=Tous les assignés n’ont pas été ajoutés en raison d’une erreur inattendue.
issues.reference_issue.body=Corps
issues.content_history.deleted=a supprimé
issues.content_history.edited=a édité
@@ -1853,7 +1868,7 @@ pulls.show_all_commits=Afficher toutes les révisions
pulls.show_changes_since_your_last_review=Affiche les modifications depuis votre dernière évaluation.
pulls.showing_only_single_commit=Affiche uniquement les changements de la révision %[1]s
pulls.showing_specified_commit_range=Affichage des changements filtré entre %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Maintenir Maj et cliquer sur des révisions pour faire un intervalle
+pulls.select_commit_hold_shift_for_range=Maintenir Maj et cliquer sur des révisions pour sélectionner un ensemble de révisions.
pulls.review_only_possible_for_full_diff=Une évaluation n'est possible que lorsque vous affichez le différentiel complet.
pulls.filter_changes_by_commit=Filtrer par révision
pulls.nothing_to_compare=Ces branches sont identiques. Il n’y a pas besoin de créer une demande d'ajout.
@@ -1906,15 +1921,15 @@ pulls.reject_count_1=%d changement requis
pulls.reject_count_n=%d changements requis
pulls.waiting_count_1=%d évaluation en attente
pulls.waiting_count_n=%d évaluations en attente
-pulls.wrong_commit_id=l'ID de la révision doit être un ID de révision sur la branche cible
+pulls.wrong_commit_id=l’ID de la révision doit être une ID de révision sur la branche cible
pulls.no_merge_desc=Cette demande d’ajout ne peut être fusionnée car toutes les options de fusion du dépôt sont désactivées.
pulls.no_merge_helper=Activez des options de fusion dans les paramètres du dépôt ou fusionnez la demande manuellement.
pulls.no_merge_wip=Cette demande d’ajout ne peut pas être fusionnée car elle est marquée en chantier.
-pulls.no_merge_not_ready=Cette demande d’ajout n’est pas prête à être fusionnée, vérifiez les évaluations en cours et le contrôle qualité.
+pulls.no_merge_not_ready=Cette demande d’ajout n’est pas prête à être fusionnée, vérifiez les évaluations et le contrôle qualité.
pulls.no_merge_access=Vous n'êtes pas autorisé⋅e à fusionner cette demande d'ajout.
pulls.merge_pull_request=Créer une révision de fusion
-pulls.rebase_merge_pull_request=Rebaser puis avancer rapidement
+pulls.rebase_merge_pull_request=Rebaser puis rattraper
pulls.rebase_merge_commit_pull_request=Rebaser puis créer une révision de fusion
pulls.squash_merge_pull_request=Créer une révision de concaténation
pulls.fast_forward_only_merge_pull_request=Avance rapide uniquement
@@ -1923,17 +1938,17 @@ pulls.merge_commit_id=L'ID de la révision de fusion
pulls.require_signed_wont_sign=La branche nécessite des révisions signées mais cette fusion ne sera pas signée
pulls.invalid_merge_option=Vous ne pouvez pas utiliser cette option de fusion pour cette demande.
-pulls.merge_conflict=Échec de la fusion : il y a eu un conflit lors de la fusion. Indice : Essayez une autre stratégie
+pulls.merge_conflict=Échec de la fusion : il y a eu un conflit lors de la fusion. Conseil : Essayez une stratégie différente.
pulls.merge_conflict_summary=Message d'erreur
-pulls.rebase_conflict=Fusion échouée : il y a eu un conflit lors du rebasage de la révision %[1]s. Astuce : Essayez une stratégie différente
+pulls.rebase_conflict=Échec de la fusion : il y a eu un conflit lors du rebasage de la révision %[1]s. Conseil : Essayez une stratégie différente.
pulls.rebase_conflict_summary=Message d'erreur
-pulls.unrelated_histories=Échec de la fusion: La tête de fusion et la base ne partagent pas d'historique commun. Indice : Essayez une stratégie différente
-pulls.merge_out_of_date=Échec de la fusion: La base a été mise à jour en cours de fusion. Indice : Réessayez.
+pulls.unrelated_histories=Échec de la fusion : La tête de fusion et la base ne partagent pas d’historique commun. Conseil : Essayez une stratégie différente.
+pulls.merge_out_of_date=Échec de la fusion : La base a été mise à jour pendant la fusion. Conseil : Réessayez.
pulls.head_out_of_date=Échec de la fusion : L’en-tête a été mis à jour pendant la fusion. Conseil : réessayez.
pulls.has_merged=Échec : La demande d’ajout est déjà fusionnée, vous ne pouvez plus la fusionner, ni modifier sa branche cible.
pulls.push_rejected=Échec de la fusion : la soumission a été rejetée. Revoyez les déclencheurs Git pour ce dépôt.
pulls.push_rejected_summary=Message de rejet complet
-pulls.push_rejected_no_message=Échec de la fusion : la soumission a été rejetée sans raison. Revoyez les déclencheurs Git pour ce dépôt.
+pulls.push_rejected_no_message=Échec de la fusion : la soumission a été rejetée sans raison. Contrôler les déclencheurs Git pour ce dépôt.
pulls.open_unmerged_pull_exists=`Vous ne pouvez pas rouvrir ceci car la demande d’ajout #%d, en attente, a des propriétés identiques.`
pulls.status_checking=Certains contrôles sont en attente
pulls.status_checks_success=Tous les contrôles ont réussi
@@ -2025,7 +2040,7 @@ signing.wont_sign.nokey=Aucune clé n’est disponible pour signer cette révisi
signing.wont_sign.never=Les révisions ne sont jamais signées.
signing.wont_sign.always=Les révisions sont toujours signées.
signing.wont_sign.pubkey=La révision ne sera pas signée car vous votre compte ne possède pas de clé publique.
-signing.wont_sign.twofa=Vous devez activer l'authentification à deux facteurs pour signer vos révisions.
+signing.wont_sign.twofa=Vous devez activer l’authentification à deux facteurs pour signer vos révisions.
signing.wont_sign.parentsigned=Cette révision ne sera pas signée car son parent n’est pas signée.
signing.wont_sign.basesigned=La fusion ne sera pas signée car la première révision n’est pas signée.
signing.wont_sign.headsigned=La fusion ne sera pas signée car la dernière révision n’est pas signée.
@@ -2111,7 +2126,7 @@ activity.title.releases_1=%d publication
activity.title.releases_n=%d publications
activity.title.releases_published_by=%s publiée par %s
activity.published_release_label=Publiée
-activity.no_git_activity=Il n'y a pas eu de nouvelle révision dans cette période.
+activity.no_git_activity=Il n’y a pas de révision durant cette période.
activity.git_stats_exclude_merges=En excluant les fusions,
activity.git_stats_author_1=%d auteur
activity.git_stats_author_n=%d auteurs
@@ -2139,20 +2154,21 @@ contributors.contribution_type.additions=Ajouts
contributors.contribution_type.deletions=Suppressions
settings=Paramètres
-settings.desc=Les paramètres sont l'endroit où gérer les options du dépôt
+settings.desc=Les paramètres sont l’endroit où gérer les options du dépôt.
settings.options=Dépôt
settings.public_access=Accès public
settings.public_access_desc=Configurer les permissions des visiteurs publics remplaçant les valeurs par défaut de ce dépôt.
settings.public_access.docs.not_set=Non défini : ne donne aucune permission supplémentaire. Les règles du dépôt et les permissions des utilisateurs font foi.
settings.public_access.docs.anonymous_read=Lecture anonyme : les utilisateurs qui ne sont pas connectés peuvent consulter la ressource.
-settings.public_access.docs.everyone_read=Consultation publique : tous les utilisateurs connectés peuvent consulter la ressource. Mettre les tickets et demandes d’ajouts en accès public signifie que les utilisateurs connectés peuvent en créer.
-settings.public_access.docs.everyone_write=Participation publique : tous les utilisateurs connectés ont la permission d’écrire sur la ressource. Seule le Wiki supporte cette autorisation.
+settings.public_access.docs.everyone_read=Consultation collective : tous les utilisateurs connectés peuvent consulter la ressource. Mettre les tickets et demandes d’ajouts en accès public signifie que les utilisateurs connectés peuvent en créer.
+settings.public_access.docs.everyone_write=Participation collective : tous les utilisateurs connectés ont la permission d’écrire sur la ressource. Seule le Wiki supporte cette autorisation.
settings.collaboration=Collaborateurs
settings.collaboration.admin=Administrateur
settings.collaboration.write=Écriture
settings.collaboration.read=Lecture
settings.collaboration.owner=Propriétaire
settings.collaboration.undefined=Indéfini
+settings.collaboration.per_unit=Permissions de ressource
settings.hooks=Webhooks
settings.githooks=Déclencheurs Git
settings.basic_settings=Paramètres de base
@@ -2259,7 +2275,7 @@ settings.transfer_abort_invalid=Vous ne pouvez pas annuler un transfert de dép
settings.transfer_abort_success=Le transfert du dépôt vers %s a bien été stoppé.
settings.transfer_desc=Transférer ce dépôt à un autre utilisateur ou une organisation dont vous possédez des droits d'administrateur.
settings.transfer_form_title=Entrez le nom du dépôt pour confirmer :
-settings.transfer_in_progress=Il y a actuellement un transfert en cours. Veuillez l'annuler si vous souhaitez transférer ce dépôt à un autre utilisateur.
+settings.transfer_in_progress=Il y a actuellement un transfert en cours. Veuillez l’annuler si vous souhaitez transférer ce dépôt à un autre utilisateur.
settings.transfer_notices_1=- Vous perdrez l'accès à ce dépôt si vous le transférez à un autre utilisateur.
settings.transfer_notices_2=- Vous conserverez l'accès à ce dépôt si vous le transférez à une organisation dont vous êtes (co-)propriétaire.
settings.transfer_notices_3=- Si le dépôt est privé et est transféré à un utilisateur individuel, cette action s'assure que l'utilisateur a au moins la permission de lire (et modifie les permissions si nécessaire).
@@ -2274,13 +2290,13 @@ settings.trust_model.default=Par défaut
settings.trust_model.default.desc=Utiliser le niveau de confiance configuré par défaut pour cette instance Gitea.
settings.trust_model.collaborator=Collaborateur
settings.trust_model.collaborator.long=Collaborateur : ne se fier qu'aux signatures des collaborateurs du dépôt
-settings.trust_model.collaborator.desc=La signature d'une révision est dite « fiable » si elle correspond à un collaborateur du dépôt, indépendamment de son auteur. À défaut, si elle correspond à l'auteur de la révision, elle sera « dilettante », et « discordante » sinon.
+settings.trust_model.collaborator.desc=La signature d’une révision est dite « fiable » si elle correspond à un collaborateur du dépôt, indépendamment de son auteur. À défaut, si elle correspond à l’auteur de la révision, elle sera « dilettante », et « discordante » sinon.
settings.trust_model.committer=Auteur
-settings.trust_model.committer.long=Auteur : ne se fier qu'aux signatures des auteurs des révisions (mimique GitHub en forçant Gitea à co-signer ses révisions)
-settings.trust_model.committer.desc=La signature d'une révision est dite « fiable » si elle corresponds à son auteur, autrement elle est « discordante ». Pour les révisions déléguées à Gitea, elles seront signées par Gitea et l'auteur original sera crédité "Co-authored-by:" et "Co-committed-by:" en pied de révision. Pour cela, la clé configurée par défaut de Gitea doit correspondre à celle d'un utilisateur.
+settings.trust_model.committer.long=Auteur : ne se fier qu’aux signatures des auteurs des révisions (mimique GitHub en forçant Gitea à co-signer ses révisions).
+settings.trust_model.committer.desc=La signature d’une révision est dite « fiable » si elle corresponds à son auteur, autrement elle est « discordante ». Pour les révisions déléguées à Gitea, elles seront signées par Gitea et l’auteur original sera crédité "Co-authored-by:" et "Co-committed-by:" en pied de révision. Pour cela, la clé configurée par défaut de Gitea doit correspondre à celle d’un utilisateur.
settings.trust_model.collaboratorcommitter=Collaborateur et Auteur
settings.trust_model.collaboratorcommitter.long=Collaborateur et Auteur : ne se fier qu'aux signatures des auteurs collaborant au dépôt
-settings.trust_model.collaboratorcommitter.desc=La signature d'une révision est dite « fiable » si elle correponds à l'auteur collaborant au dépôt. Elle est « dilettante » si elle ne correponds qu'à l'auteur, et autrement « discordante ». Pour les révisions déléguées à Gitea, elles seront signées par Gitea et l'auteur original sera crédité "Co-authored-by:" et "Co-committed-by:" en pied de révision. Pour cela, la clé configurée par défaut de Gitea doit correspondre à celle d'un utilisateur.
+settings.trust_model.collaboratorcommitter.desc=La signature d’une révision est dite « fiable » si elle correponds à l’auteur collaborant au dépôt. Elle est « dilettante » si elle ne correponds qu’à l'auteur, et autrement « discordante ». Pour les révisions déléguées à Gitea, elles seront signées par Gitea et l’auteur original sera crédité "Co-authored-by:" et "Co-committed-by:" en pied de révision. Pour cela, la clé configurée par défaut de Gitea doit correspondre à celle d’un utilisateur.
settings.wiki_delete=Supprimer les données du Wiki
settings.wiki_delete_desc=Supprimer les données du wiki d'un dépôt est permanent. Cette action est irréversible.
settings.wiki_delete_notices_1=- Ceci supprimera de manière permanente et désactivera le wiki de dépôt pour %s.
@@ -2311,8 +2327,8 @@ settings.team_not_in_organization=L'équipe n'est pas dans la même organisation
settings.teams=Équipes
settings.add_team=Ajouter une équipe
settings.add_team_duplicate=L'équipe a déjà le dépôt
-settings.add_team_success=L'équipe a maintenant accès au dépôt.
-settings.change_team_permission_tip=La permission de l'équipe est définie sur la page de configuration de l'équipe et ne peut pas être modifiée par dépôt
+settings.add_team_success=L’équipe a maintenant accès au dépôt.
+settings.change_team_permission_tip=Les permissions d’équipes sont à définir sur la page de configuration des équipes, et non celle des dépôts.
settings.delete_team_tip=Cette équipe a accès à tous les dépôts et ne peut pas être supprimée
settings.remove_team_success=L'accès de l'équipe au dépôt a été supprimé.
settings.add_webhook=Ajouter un Webhook
@@ -2321,7 +2337,7 @@ settings.hooks_desc=Les Webhooks font automatiquement des requêtes HTTP POST à
settings.webhook_deletion=Retirer le Webhook
settings.webhook_deletion_desc=Supprimer un webhook supprime ses paramètres et son historique. Continuer ?
settings.webhook_deletion_success=Le webhook a été supprimé.
-settings.webhook.test_delivery=Tester l'envoi
+settings.webhook.test_delivery=Tester l’envoi
settings.webhook.test_delivery_desc=Testez ce webhook avec un faux événement.
settings.webhook.test_delivery_desc_disabled=Pour tester ce webhook avec un faux événement, activez-le.
settings.webhook.request=Requête
@@ -2342,6 +2358,7 @@ settings.payload_url=URL cible
settings.http_method=Méthode HTTP
settings.content_type=Type de contenu POST
settings.secret=Secret
+settings.webhook_secret_desc=Si le serveur webhook supporte l’usage de secrets, vous pouvez indiquer un secret ici en vous basant sur leur documentation.
settings.slack_username=Nom d'utilisateur
settings.slack_icon_url=URL de l'icône
settings.slack_color=Couleur
@@ -2371,7 +2388,7 @@ settings.event_repository=Dépôt
settings.event_repository_desc=Dépôt créé ou supprimé.
settings.event_header_issue=Événements de ticket
settings.event_issues=Ticket
-settings.event_issues_desc=Ticket ouvert, rouvert, fermé ou modifié.
+settings.event_issues_desc=Ticket ouvert, rouvert, fermé, modifié ou supprimé.
settings.event_issue_assign=Assignation
settings.event_issue_assign_desc=Ticket assigné ou dé-assigné.
settings.event_issue_label=Labellisation
@@ -2382,7 +2399,7 @@ settings.event_issue_comment=Commentaire
settings.event_issue_comment_desc=Commentaire créé, modifié ou supprimé.
settings.event_header_pull_request=Événements de demande d'ajout
settings.event_pull_request=Demande d'ajout
-settings.event_pull_request_desc=Demande d’ajout ouverte, rouverte, fermée ou modifiée.
+settings.event_pull_request_desc=Demande d’ajout ouverte, rouverte, fermée, modifiée ou supprimée.
settings.event_pull_request_assign=Assignation
settings.event_pull_request_assign_desc=Demande d'ajout assignée ou non assignée.
settings.event_pull_request_label=Labellisation
@@ -2400,8 +2417,10 @@ settings.event_pull_request_review_request_desc=Création ou suppresion de deman
settings.event_pull_request_approvals=Approbations de demande d'ajout
settings.event_pull_request_merge=Fusion de demande d'ajout
settings.event_header_workflow=Événements du flux de travail
+settings.event_workflow_run=Exécution du flux de travail
+settings.event_workflow_run_desc=Tâche du flux de travail Gitea Actions ajoutée, en attente, en cours ou terminée.
settings.event_workflow_job=Tâches du flux de travail
-settings.event_workflow_job_desc=Tâche du flux de travail Gitea Actions en file d’attente, en attente, en cours ou terminée.
+settings.event_workflow_job_desc=Travaux du flux de travail Gitea Actions en file d’attente, en attente, en cours ou terminée.
settings.event_package=Paquet
settings.event_package_desc=Paquet créé ou supprimé.
settings.branch_filter=Filtre de branche
@@ -2554,8 +2573,8 @@ settings.matrix.message_type=Type de message
settings.visibility.private.button=Rendre privé
settings.visibility.private.text=Rendre le dépôt privé rendra non seulement le dépôt visible uniquement aux membres autorisés, mais peut également rompre la relation entre lui et ses bifurcations, observateurs, et favoris.
settings.visibility.private.bullet_title=Changer la visibilité en privé :
-settings.visibility.private.bullet_one=Va rendre le dépôt visible uniquement par les membres autorisés
-settings.visibility.private.bullet_two=Peut supprimer la relation avec ses bifurcations , ses observateurs et ses favoris
+settings.visibility.private.bullet_one=Rendra le dépôt visible uniquement aux membres autorisés.
+settings.visibility.private.bullet_two=Peut supprimer la relation avec ses bifurcations , ses observateurs et ses favoris .
settings.visibility.public.button=Rendre public
settings.visibility.public.text=Rendre le dépôt public rendra le dépôt visible à tout le monde.
settings.visibility.public.bullet_title=Changer la visibilité en public va :
@@ -2574,7 +2593,7 @@ settings.archive.tagsettings_unavailable=Le paramétrage des étiquettes n'est p
settings.archive.mirrors_unavailable=Les miroirs ne sont pas disponibles lorsque le dépôt est archivé.
settings.unarchive.button=Réhabiliter
settings.unarchive.header=Réhabiliter ce dépôt
-settings.unarchive.text=Réhabiliter un dépôt dégèle les actions de révisions et de soumissions, la gestion des tickets et des demandes d'ajouts.
+settings.unarchive.text=Réhabiliter un dépôt dégèle les actions de révisions et de soumissions, la gestion des tickets et des demandes d’ajouts.
settings.unarchive.success=Le dépôt a bien été réhabilité.
settings.unarchive.error=Une erreur est survenue en essayant deréhabiliter ce dépôt. Voir le journal pour plus de détails.
settings.update_avatar_success=L'avatar du dépôt a été mis à jour.
@@ -2592,11 +2611,11 @@ settings.lfs_invalid_locking_path=Chemin invalide : %s
settings.lfs_invalid_lock_directory=Impossible de verrouiller le répertoire : %s
settings.lfs_lock_already_exists=Verrou déjà existant : %s
settings.lfs_lock=Verrou
-settings.lfs_lock_path=Chemin de fichier à verrouiller...
+settings.lfs_lock_path=Chemin de fichier à verrouiller…
settings.lfs_locks_no_locks=Pas de verrous
settings.lfs_lock_file_no_exist=Le fichier verrouillé n'existe pas dans la branche par défaut
settings.lfs_force_unlock=Forcer le déverrouillage
-settings.lfs_pointers.found=%d pointeur(s) sur blob trouvés - %d associés, %d non associés (%d manquant dans le magasin)
+settings.lfs_pointers.found=%d pointeur(s) trouvés : %d associés, %d non associés (%d manquant dans le magasin)
settings.lfs_pointers.sha=SHA du Blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Dans le dépôt
@@ -2754,6 +2773,8 @@ branch.new_branch_from=`Créer une nouvelle branche à partir de "%s"`
branch.renamed=La branche %s à été renommée en %s.
branch.rename_default_or_protected_branch_error=Seuls les administrateurs peuvent renommer les branches par défaut ou protégées.
branch.rename_protected_branch_failed=Cette branche est protégée par des règles de protection basées sur des globs.
+branch.commits_divergence_from=Divergence de révisions : %[1]d en retard et %[2]d en avance sur %[3]s
+branch.commits_no_divergence=Identique à la branche %[1]s
tag.create_tag=Créer l'étiquette %s
tag.create_tag_operation=Créer une étiquette
@@ -2767,6 +2788,7 @@ topic.done=Terminé
topic.count_prompt=Vous ne pouvez pas sélectionner plus de 25 sujets
topic.format_prompt=Les sujets doivent commencer par un caractère alphanumérique, peuvent inclure des traits d’union « - » et des points « . », et mesurer jusqu'à 35 caractères. Les lettres doivent être en minuscules.
+find_file.follow_symlink=Suivre ce lien symbolique vers sa cible
find_file.go_to_file=Aller au fichier
find_file.no_matching=Aucun fichier correspondant trouvé
@@ -2807,6 +2829,7 @@ team_permission_desc=Autorisation
team_unit_desc=Permettre l’accès aux Sections du dépôt
team_unit_disabled=(Désactivé)
+form.name_been_taken=Le nom d’organisation « %s » a déjà été utilisé.
form.name_reserved=Le nom d'organisation "%s" est réservé.
form.name_pattern_not_allowed=Le motif « %s » n'est pas autorisé dans un nom d'organisation.
form.create_org_not_allowed=Vous n'êtes pas autorisé à créer une organisation.
@@ -2828,15 +2851,28 @@ settings.visibility.private_shortname=Privé
settings.update_settings=Appliquer les paramètres
settings.update_setting_success=Les paramètres de l'organisation ont été mis à jour.
-settings.change_orgname_prompt=Remarque : Changer le nom de l'organisation changera également l'URL de votre organisation et libèrera l'ancien nom.
-settings.change_orgname_redirect_prompt=L'ancien nom d'utilisateur redirigera jusqu'à ce qu'il soit réclamé.
+
+settings.rename=Renommer l’organisation
+settings.rename_desc=Changer le nom de l’organisation changera également l’URL de votre organisation et libèrera l’ancien nom.
+settings.rename_success=L’organisation %[1]s a bien été renommé en %[2]s.
+settings.rename_no_change=Le nom de l’organisation n’a pas été modifié.
+settings.rename_new_org_name=Nouveau nom d’organisation
+settings.rename_failed=Le renommage de l’organisation a échoué en raison d’une erreur interne.
+settings.rename_notices_1=Cette opération ne peut pas être annulée.
+settings.rename_notices_2=L’ancien nom redirigera jusqu'à ce qu'il soit réclamé.
+
settings.update_avatar_success=L'avatar de l'organisation a été mis à jour.
settings.delete=Supprimer l'organisation
settings.delete_account=Supprimer cette organisation
settings.delete_prompt=Cette organisation sera supprimée définitivement. Cette action est IRRÉVERSIBLE !
+settings.name_confirm=Entrez le nom de l’organisation pour confirmer :
+settings.delete_notices_1=Cette opération ne peut pas être annulée.
+settings.delete_notices_2=Cette opération supprimera définitivement tous les dépôts de %s , y compris le code, les tickets, les commentaires, les données de wiki et les accès des collaborateurs.
+settings.delete_notices_3=Cette opération supprimera définitivement tous les paquets de %s .
+settings.delete_notices_4=Cette opération supprimera définitivement tous les projets de %s .
settings.confirm_delete_account=Confirmer la suppression
-settings.delete_org_title=Supprimer l'organisation
-settings.delete_org_desc=Cette organisation sera supprimée définitivement. Voulez-vous continuer ?
+settings.delete_failed=La suppression de l’organisation a échoué en raison d’une erreur interne.
+settings.delete_successful=L’organisation %s a été supprimée avec succès.
settings.hooks_desc=Vous pouvez ajouter des webhooks qui seront activés pour tous les dépôts de cette organisation.
settings.labels_desc=Ajoute des labels qui peuvent être utilisés sur les tickets pour tous les dépôts de cette organisation.
@@ -2892,7 +2928,7 @@ teams.remove_all_repos_title=Supprimer tous les dépôts de l'équipe
teams.remove_all_repos_desc=Ceci supprimera tous les dépôts de l'équipe.
teams.add_all_repos_title=Ajouter tous les dépôts
teams.add_all_repos_desc=Ceci ajoutera tous les dépôts de l'organisation à l'équipe.
-teams.add_nonexistent_repo=Le dépôt que vous essayez d'ajouter n'existe pas, veuillez le créer d'abord.
+teams.add_nonexistent_repo=Le dépôt que vous essayez d’ajouter n’existe pas, veuillez le créer d’abord.
teams.add_duplicate_users=L’utilisateur est déjà un membre de l’équipe.
teams.repos.none=Aucun dépôt n'est accessible par cette équipe.
teams.members.none=Aucun membre dans cette équipe.
@@ -2933,7 +2969,7 @@ repositories=Dépôts
hooks=Déclencheurs web
integrations=Intégrations
authentication=Sources d'authentification
-emails=Emails de l'utilisateur
+emails=Courriels de l’utilisateur
config=Configuration
config_summary=Résumé
config_settings=Paramètres
@@ -2965,11 +3001,11 @@ dashboard.cron.cancelled=Tâche récurrente %[1]s annulée : %[3]s
dashboard.cron.error=Erreur dans la tâche récurrente %s : %[3]s
dashboard.cron.finished=Tâche récurrente %[1]s terminée
dashboard.delete_inactive_accounts=Supprimer tous les comptes non actifs
-dashboard.delete_inactive_accounts.started=Tâche de suppression de tous les comptes inactifs démarrée.
+dashboard.delete_inactive_accounts.started=Début de la suppression de tous les comptes inactifs.
dashboard.delete_repo_archives=Supprimer toutes les archives des dépôts (ZIP, TAR.GZ, etc..)
-dashboard.delete_repo_archives.started=Tâche de suppression de toutes les archives de dépôts démarrée.
+dashboard.delete_repo_archives.started=Début de la suppression de toutes les archives de dépôts.
dashboard.delete_missing_repos=Supprimer tous les dépôts dont les fichiers Git sont manquants
-dashboard.delete_missing_repos.started=Tâche de suppression de tous les dépôts sans fichiers Git démarrée.
+dashboard.delete_missing_repos.started=Début de la suppression de tous les dépôts dépourvus de Git.
dashboard.delete_generated_repository_avatars=Supprimer les avatars de dépôt générés
dashboard.sync_repo_branches=Synchroniser les branches manquantes depuis Git vers la base de donnée.
dashboard.sync_repo_tags=Synchroniser les étiquettes git depuis les dépôts vers la base de données
@@ -3018,10 +3054,10 @@ dashboard.total_gc_pause=Pause GC
dashboard.last_gc_pause=Dernière Pause GC
dashboard.gc_times=Nombres de GC
dashboard.delete_old_actions=Supprimer toutes les anciennes activités de la base de données
-dashboard.delete_old_actions.started=La suppression des anciennes activités de la base de données a démarré.
+dashboard.delete_old_actions.started=Début de la suppression des plus vielles activités de la base de données.
dashboard.update_checker=Vérificateur de mise à jour
dashboard.delete_old_system_notices=Supprimer toutes les anciennes observations de la base de données
-dashboard.gc_lfs=Épousseter les métaobjets LFS
+dashboard.gc_lfs=Purger les métaobjets LFS
dashboard.stop_zombie_tasks=Arrêter les tâches zombies
dashboard.stop_endless_tasks=Arrêter les tâches interminables
dashboard.cancel_abandoned_jobs=Annuler les travaux abandonnés
@@ -3089,22 +3125,22 @@ users.list_status_filter.is_2fa_enabled=2FA Activé
users.list_status_filter.not_2fa_enabled=2FA désactivé
users.details=Informations de l’utilisateur
-emails.email_manage_panel=Gestion des emails des utilisateurs
+emails.email_manage_panel=Gestion des courriels des utilisateurs
emails.primary=Principale
emails.activated=Activée
emails.filter_sort.email=Courriel
emails.filter_sort.email_reverse=Courriel (inversé)
-emails.filter_sort.name=Nom d'utilisateur
-emails.filter_sort.name_reverse=Nom d'utilisateur (inverse)
+emails.filter_sort.name=Nom d’utilisateur
+emails.filter_sort.name_reverse=Nom d’utilisateur (inversé)
emails.updated=Courriel mis à jour
-emails.not_updated=Impossible de mettre à jour l’adresse courriel demandée : %v
-emails.duplicate_active=Cette adresse courriel est déjà active pour un autre utilisateur.
+emails.not_updated=Impossible de mettre à jour le courriel demandé : %v
+emails.duplicate_active=Ce courriel est déjà attribué à un autre utilisateur.
emails.change_email_header=Mettre à jour les propriétés du courriel
emails.change_email_text=Êtes-vous sûr de vouloir mettre à jour cette adresse courriel ?
-emails.delete=Supprimer l’e-mail
-emails.delete_desc=Êtes-vous sûr de vouloir supprimer cette adresse e-mail ?
-emails.deletion_success=L’adresse e-mail a été supprimée.
-emails.delete_primary_email_error=Vous ne pouvez pas supprimer l’e-mail principal.
+emails.delete=Supprimer le courriel
+emails.delete_desc=Êtes-vous sûr de vouloir supprimer ce courriel ?
+emails.deletion_success=L’adresse courriel a été supprimée.
+emails.delete_primary_email_error=Vous ne pouvez pas supprimer le courriel principal.
orgs.org_manage_panel=Gestion des organisations
orgs.name=Nom
@@ -3167,7 +3203,7 @@ auths.attribute_username=Attribut nom d'utilisateur
auths.attribute_username_placeholder=Laisser vide afin d'utiliser le nom d'utilisateur spécifié dans Gitea.
auths.attribute_name=Attribut prénom
auths.attribute_surname=Attribut nom de famille
-auths.attribute_mail=Attribut e-mail
+auths.attribute_mail=Attribut courriel
auths.attribute_ssh_public_key=Attribut clé SSH publique
auths.attribute_avatar=Attribut de l'avatar
auths.attributes_in_bind=Aller chercher les attributs dans le contexte de liaison DN
@@ -3208,7 +3244,7 @@ auths.oauth2_use_custom_url=Utiliser des URLs personnalisées au lieu de l’URL
auths.oauth2_tokenURL=URL du jeton
auths.oauth2_authURL=URL d'autorisation
auths.oauth2_profileURL=URL du profil
-auths.oauth2_emailURL=URL de l'e-mail
+auths.oauth2_emailURL=URL du courriel
auths.skip_local_two_fa=Ignorer l’authentification à deux facteurs locale
auths.skip_local_two_fa_helper=Laisser indéfini signifie que les utilisateurs locaux avec l’authentification à deux facteurs activée devront tout de même s’y soumettre pour se connecter
auths.oauth2_tenant=Locataire
@@ -3218,27 +3254,29 @@ auths.oauth2_required_claim_name_helper=Définissez ce nom pour restreindre la c
auths.oauth2_required_claim_value=Valeur de réclamation requise
auths.oauth2_required_claim_value_helper=Restreindre la connexion depuis cette source aux utilisateurs ayant réclamé cette valeur.
auths.oauth2_group_claim_name=Réclamer le nom fournissant les noms de groupe pour cette source. (facultatif)
+auths.oauth2_full_name_claim_name=Nom complet réclamé. (Optionnel. Si défini, le nom complet de l’utilisateur sera toujours synchronisé avec cette réclamation)
+auths.oauth2_ssh_public_key_claim_name=Nom réclamé de la clé publique SSH
auths.oauth2_admin_group=Valeur de réclamation de groupe pour les administrateurs. (Optionnel, nécessite un nom de réclamation)
auths.oauth2_restricted_group=Valeur de réclamation de groupe pour les utilisateurs restreints. (Optionnel, nécessite un nom de réclamation)
-auths.oauth2_map_group_to_team=Associe les groupes réclamés avec les équipes de l'organisation. (Optionnel, nécessite un nom de réclamation)
+auths.oauth2_map_group_to_team=Associe les groupes réclamés avec les équipes de l’organisation. (Optionnel, nécessite un nom de réclamation)
auths.oauth2_map_group_to_team_removal=Supprimer les utilisateurs des équipes synchronisées si l'utilisateur n'appartient pas au groupe correspondant.
auths.enable_auto_register=Connexion Automatique
auths.sspi_auto_create_users=Créer automatiquement des utilisateurs
-auths.sspi_auto_create_users_helper=Autoriser la méthode d'authentification SSPI à créer automatiquement de nouveaux comptes pour les utilisateurs qui se connectent pour la première fois
+auths.sspi_auto_create_users_helper=Autoriser la méthode d’authentification SSPI à créer automatiquement de nouveaux comptes pour les utilisateurs qui se connectent pour la première fois.
auths.sspi_auto_activate_users=Activer automatiquement les utilisateurs
auths.sspi_auto_activate_users_helper=Autoriser la méthode d'authentification SSPI à activer automatiquement les nouveaux utilisateurs
auths.sspi_strip_domain_names=Supprimer les noms de domaine des utilisateurs
-auths.sspi_strip_domain_names_helper=Si cette case est cochée, les noms de domaine seront supprimés des noms de connexion (par exemple "DOMAIN\user" et "user@example.org" ne deviendront que "user").
+auths.sspi_strip_domain_names_helper=Nettoie les domaines des noms d’utilisateur (ex. : « DOMAINE\utilisateur » et « utilisateur@exemple.org » ne deviendront que « utilisateur »).
auths.sspi_separator_replacement=Séparateur à utiliser au lieu de \, / et @
-auths.sspi_separator_replacement_helper=Le caractère à utiliser pour remplacer les séparateurs des noms de connexion au niveau inférieur (par ex. le \ dans "DOMAIN\user") et les noms principaux de l'utilisateur (par exemple le @ dans "user@example.org").
+auths.sspi_separator_replacement_helper=Le caractère à utiliser pour remplacer les séparateurs dans le nom d’utilisateur (ex. : « \ » dans « DOMAINE\utilisateur », « @ » dans « utilisateur@exemple.org »).
auths.sspi_default_language=Langue par défaut de l'utilisateur
-auths.sspi_default_language_helper=Langue par défaut pour les utilisateurs créés automatiquement par la méthode d'authentification SSPI. Laissez vide si vous préférez que la langue soit déterminée automatiquement.
+auths.sspi_default_language_helper=Langue par défaut pour les utilisateurs créés automatiquement par la méthode d’authentification SSPI. Laissez vide si vous préférez que la langue soit déterminée automatiquement.
auths.tips=Conseils
auths.tips.oauth2.general=Authentification OAuth2
auths.tips.oauth2.general.tip=Lors de l'enregistrement d'une nouvelle authentification OAuth2, l'URL de rappel/redirection doit être :
auths.tip.oauth2_provider=Fournisseur OAuth2
auths.tip.bitbucket=Créez un nouveau jeton OAuth sur %s et ajoutez la permission « Compte » → « Lecture ».
-auths.tip.nextcloud=`Enregistrez un nouveau consommateur OAuth sur votre instance en utilisant le menu "Paramètres -> Sécurité -> Client OAuth 2.0"`
+auths.tip.nextcloud=Enregistrez un nouveau client OAuth sur votre instance en atteignant le réglage Paramètres → Sécurité → Client OAuth 2.0.
auths.tip.dropbox=Créez une nouvelle application sur %s
auths.tip.facebook=Enregistrez une nouvelle application sur%s et ajoutez le produit « Facebook Login ».
auths.tip.github=Créez une nouvelle application OAuth sur %s
@@ -3248,7 +3286,7 @@ auths.tip.openid_connect=Utilisez l’URL de découverte OpenID « https://{ser
auths.tip.twitter=Rendez-vous sur %s, créez une application et assurez-vous que l’option « Autoriser l’application à être utilisée avec Twitter Connect » est activée.
auths.tip.discord=Enregistrer une nouvelle application sur %s
auths.tip.gitea=Enregistrez une nouvelle application OAuth2. Le guide peut être trouvé sur %s.
-auths.tip.yandex=Créez une nouvelle application sur %s. Sélectionnez les autorisations suivantes dans la section « Yandex.Passport API » : « Accès à l’adresse e-mail », « Accès à l’avatar de l’utilisateur » et « Accès au nom d’utilisateur, prénom, surnom et genre ».
+auths.tip.yandex=Créez une nouvelle application sur %s. Sélectionnez les autorisations suivantes dans la section « Yandex.Passport API » : « Accès au courriel », « Accès à l’avatar de l’utilisateur » et « Accès au nom d’utilisateur, prénom, surnom et genre ».
auths.tip.mastodon=Entrez une URL d'instance personnalisée pour l'instance mastodon avec laquelle vous voulez vous authentifier (ou utiliser celle par défaut)
auths.edit=Mettre à jour la source d'authentification
auths.activated=Cette source d'authentification est activée
@@ -3309,7 +3347,7 @@ config.db_ssl_mode=SSL
config.db_path=Emplacement
config.service_config=Configuration du service
-config.register_email_confirm=Exiger la confirmation de l'e-mail lors de l'inscription
+config.register_email_confirm=Exiger la confirmation du courriel lors de l’inscription
config.disable_register=Désactiver le formulaire d'inscription
config.allow_only_internal_registration=Autoriser l'inscription uniquement via Gitea lui-même
config.allow_only_external_registration=N'autoriser l'inscription qu'à partir des services externes
@@ -3317,16 +3355,16 @@ config.enable_openid_signup=Activer l'inscription avec OpenID
config.enable_openid_signin=Activer la connexion avec OpenID
config.show_registration_button=Afficher le bouton d'enregistrement
config.require_sign_in_view=Exiger la connexion pour afficher les pages
-config.mail_notify=Activer les notifications par e-mail
+config.mail_notify=Activer les notifications par courriel
config.enable_captcha=Activer le CAPTCHA
config.active_code_lives=Limites de Code Actif
config.reset_password_code_lives=Durée d'expiration du code de récupération de compte
-config.default_keep_email_private=Masquer les adresses e-mail par défaut
+config.default_keep_email_private=Masquer les adresses courriels par défaut
config.default_allow_create_organization=Autoriser la création d'organisations par défaut
config.enable_timetracking=Activer le suivi du temps
config.default_enable_timetracking=Activer le suivi de temps par défaut
config.default_allow_only_contributors_to_track_time=Restreindre le suivi de temps aux contributeurs
-config.no_reply_address=Domaine pour les e-mails cachés
+config.no_reply_address=Domaine pour les courriels cachés
config.default_visibility_organization=Visibilité par défaut des nouvelles organisations
config.default_enable_dependencies=Activer les dépendances pour les tickets par défaut
@@ -3348,11 +3386,11 @@ config.mailer_sendmail_path=Chemin d’accès à Sendmail
config.mailer_sendmail_args=Arguments supplémentaires pour Sendmail
config.mailer_sendmail_timeout=Délai d’attente de Sendmail
config.mailer_use_dummy=Factice
-config.test_email_placeholder=E-mail (ex: test@example.com)
-config.send_test_mail=Envoyer un e-mail de test
+config.test_email_placeholder=Courriel (ex : test@exemple.com)
+config.send_test_mail=Envoyer un courriel de test
config.send_test_mail_submit=Envoyer
-config.test_mail_failed=Impossible d'envoyer un email de test à "%s" : %v
-config.test_mail_sent=Un e-mail de test a été envoyé à "%s".
+config.test_mail_failed=Impossible d’envoyer un courriel de test à « %s » : %v
+config.test_mail_sent=Un courriel de test a été envoyé à « %s ».
config.oauth_config=Configuration OAuth
config.oauth_enabled=Activé
@@ -3432,12 +3470,12 @@ monitor.queue.type=Type
monitor.queue.exemplar=Type d'exemple
monitor.queue.numberworkers=Nombre de processus
monitor.queue.activeworkers=Processus actifs
-monitor.queue.maxnumberworkers=Nombre maximale de processus
+monitor.queue.maxnumberworkers=Nombre maximal de processus
monitor.queue.numberinqueue=Position dans la queue
monitor.queue.review_add=Examiner / ajouter des processus
monitor.queue.settings.title=Paramètres du réservoir
monitor.queue.settings.desc=Les bassins croissent proportionnellement au besoin de leurs exécuteurs.
-monitor.queue.settings.maxnumberworkers=Nombre maximale de processus
+monitor.queue.settings.maxnumberworkers=Nombre maximal de processus
monitor.queue.settings.maxnumberworkers.placeholder=Actuellement %[1]d
monitor.queue.settings.maxnumberworkers.error=Le nombre de processus doit être un nombre
monitor.queue.settings.submit=Appliquer les paramètres
@@ -3546,15 +3584,15 @@ no_subscriptions=Pas d'abonnements
default_key=Signé avec la clé par défaut
error.extract_sign=Impossible d'extraire la signature
error.generate_hash=Impossible de générer la chaine de hachage de la révision
-error.no_committer_account=Aucun compte lié à l'adresse e-mail de l'auteur
+error.no_committer_account=Aucun compte lié au courriel de l’auteur
error.no_gpg_keys_found=Signature inconnue de Gitea
error.not_signed_commit=Révision non signée
error.failed_retrieval_gpg_keys=Impossible de récupérer la clé liée au compte de l'auteur
-error.probable_bad_signature=AVERTISSEMENT ! Bien qu'il y ait une clé avec cet ID dans la base de données, il ne vérifie pas cette livraison ! Cette livraison est SUSPECTE.
-error.probable_bad_default_signature=AVERTISSEMENT ! Bien que la clé par défaut ait cet ID, elle ne vérifie pas cette livraison ! Cette livraison est SUSPECTE.
+error.probable_bad_signature=AVERTISSEMENT ! Bien qu’il y ait une clé avec cet ID dans la base de données, elle ne vérifie pas cette révision ! Cette révision est SUSPECTE.
+error.probable_bad_default_signature=AVERTISSEMENT ! Bien que la clé par défaut ait cet ID, elle ne vérifie pas cette révision ! Cette révision est SUSPECTE.
[units]
-unit=Unité
+unit=Ressource
error.no_unit_allowed_repo=Vous n'êtes pas autorisé à accéder à n'importe quelle section de ce dépôt.
error.unit_not_allowed=Vous n'êtes pas autorisé à accéder à cette section du dépôt.
@@ -3590,7 +3628,7 @@ versions.view_all=Voir tout
dependency.id=ID
dependency.version=Version
search_in_external_registry=Rechercher dans %s
-alpine.registry=Configurez ce registre en ajoutant l’URL dans votre fichier /etc/apk/repositories :
+alpine.registry=Configurez ce registre en ajoutant l’URL dans votre fichier /etc/apk/repositories :
alpine.registry.key=Téléchargez la clé RSA publique du registre dans le dossier /etc/apk/keys/ pour vérifier la signature de l'index :
alpine.registry.info=Choisissez $branch et $repository dans la liste ci-dessous.
alpine.install=Pour installer le paquet, exécutez la commande suivante :
@@ -3603,18 +3641,18 @@ arch.install=Synchroniser le paquet avec pacman :
arch.repository=Informations sur le Dépôt
arch.repository.repositories=Dépôts
arch.repository.architectures=Architectures
-cargo.registry=Configurez ce registre dans le fichier de configuration Cargo (par exemple ~/.cargo/config.toml) :
+cargo.registry=Configurez ce registre dans le fichier de configuration Cargo (par exemple ~/.cargo/config.toml) :
cargo.install=Pour installer le paquet en utilisant Cargo, exécutez la commande suivante :
-chef.registry=Configurer ce registre dans votre fichier ~/.chef/config.rb:
+chef.registry=Configurer ce registre dans votre fichier ~/.chef/config.rb :
chef.install=Pour installer le paquet, exécutez la commande suivante :
-composer.registry=Configurez ce registre dans votre fichier ~/.composer/config.json :
+composer.registry=Configurez ce registre dans votre fichier ~/.composer/config.json :
composer.install=Pour installer le paquet en utilisant Composer, exécutez la commande suivante :
composer.dependencies=Dépendances
composer.dependencies.development=Dépendances de développement
conan.details.repository=Dépôt
-conan.registry=Configurez ce registre à partir d'un terminal :
+conan.registry=Configurez ce registre à partir d'un terminal :
conan.install=Pour installer le paquet en utilisant Conan, exécutez la commande suivante :
-conda.registry=Configurez ce registre en tant que dépôt Conda dans le fichier .condarc :
+conda.registry=Configurez ce registre en tant que dépôt Conda dans le fichier .condarc :
conda.install=Pour installer le paquet en utilisant Conda, exécutez la commande suivante :
container.details.type=Type d'image
container.details.platform=Plateforme
@@ -3626,9 +3664,9 @@ container.layers=Calques d'image
container.labels=Labels
container.labels.key=Clé
container.labels.value=Valeur
-cran.registry=Configurez ce registre dans le fichier Rprofile.site :
+cran.registry=Configurez ce registre dans le fichier Rprofile.site :
cran.install=Pour installer le paquet, exécutez la commande suivante :
-debian.registry=Configurez ce registre à partir d'un terminal :
+debian.registry=Configurez ce registre à partir d'un terminal :
debian.registry.info=Choisissez $distribution et $component dans la liste ci-dessous.
debian.install=Pour installer le paquet, exécutez la commande suivante :
debian.repository=Infos sur le Dépôt
@@ -3637,16 +3675,16 @@ debian.repository.components=Composants
debian.repository.architectures=Architectures
generic.download=Télécharger le paquet depuis un terminal :
go.install=Installer le paquet à partir de la ligne de commande :
-helm.registry=Configurer ce registre à partir d'un terminal :
+helm.registry=Configurer ce registre à partir d'un terminal :
helm.install=Pour installer le paquet, exécutez la commande suivante :
-maven.registry=Configurez ce registre dans le fichier pom.xml de votre projet :
-maven.install=Pour utiliser le paquet, inclure ce qui suit dans le bloc dependencies dans le fichier pom.xml :
+maven.registry=Configurez ce registre dans le fichier pom.xml de votre projet :
+maven.install=Pour utiliser le paquet, inclure ce qui suit dans le bloc dependencies dans le fichier pom.xml :
maven.install2=Exécuter dans un terminal :
maven.download=Pour télécharger la dépendance, exécutez dans un terminal :
-nuget.registry=Configurer ce registre à partir d'un terminal :
+nuget.registry=Configurer ce registre à partir d'un terminal :
nuget.install=Pour installer le paquet en utilisant NuGet, exécutez la commande suivante :
nuget.dependency.framework=Cadriciel cible
-npm.registry=Configurez ce registre dans le fichier .npmrc de votre projet :
+npm.registry=Configurez ce registre dans le fichier .npmrc de votre projet :
npm.install=Pour installer le paquet en utilisant npm, exécutez la commande suivante :
npm.install2=ou ajoutez-le au fichier package.json :
npm.dependencies=Dépendances
@@ -3658,7 +3696,7 @@ npm.details.tag=Balise
pub.install=Pour installer le paquet en utilisant Dart, exécutez la commande suivante :
pypi.requires=Nécessite Python
pypi.install=Pour installer le paquet en utilisant pip, exécutez la commande suivante :
-rpm.registry=Configurez ce registre à partir d'un terminal :
+rpm.registry=Configurez ce registre à partir d'un terminal :
rpm.distros.redhat=sur les distributions basées sur RedHat
rpm.distros.suse=sur les distributions basées sur SUSE
rpm.install=Pour installer le paquet, exécutez la commande suivante :
@@ -3671,7 +3709,7 @@ rubygems.dependencies.runtime=Dépendances d'exécution
rubygems.dependencies.development=Dépendances de développement
rubygems.required.ruby=Nécessite Ruby en version
rubygems.required.rubygems=Nécessite RubyGem en version
-swift.registry=Configurez ce registre à partir d'un terminal :
+swift.registry=Configurez ce registre à partir d'un terminal :
swift.install=Ajoutez le paquet dans votre fichier Package.swift:
swift.install2=et exécutez la commande suivante :
vagrant.install=Pour ajouter une machine Vagrant, exécutez la commande suivante :
@@ -3694,7 +3732,7 @@ owner.settings.cargo.initialize.success=L'index Cargo a été créé avec succè
owner.settings.cargo.rebuild=Reconstruire l'index
owner.settings.cargo.rebuild.description=La reconstruction peut être utile si l'index n'est pas synchronisé avec les paquets Cargo stockés.
owner.settings.cargo.rebuild.error=Impossible de reconstruire l'index Cargo : %v
-owner.settings.cargo.rebuild.success=L'index Cargo a été reconstruit avec succès.
+owner.settings.cargo.rebuild.success=L’index Cargo a été reconstruit avec succès.
owner.settings.cleanuprules.title=Gérer les règles de nettoyage
owner.settings.cleanuprules.add=Ajouter une règle de nettoyage
owner.settings.cleanuprules.edit=Modifier la règle de nettoyage
@@ -3813,6 +3851,7 @@ runs.no_runs=Le flux de travail n'a pas encore d'exécution.
runs.empty_commit_message=(message de révision vide)
runs.expire_log_message=Les journaux ont été supprimés car ils étaient trop anciens.
runs.delete=Supprimer cette exécution
+runs.cancel=Annuler l’exécution du flux
runs.delete.description=Êtes-vous sûr de vouloir supprimer définitivement cette exécution ? Cette action ne peut pas être annulée.
runs.not_done=Cette exécution du flux de travail n’est pas terminée.
runs.view_workflow_file=Voir le fichier du flux de travail
diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini
index 79df1d26d05..cb0c2373ede 100644
--- a/options/locale/locale_ga-IE.ini
+++ b/options/locale/locale_ga-IE.ini
@@ -44,7 +44,7 @@ webauthn_use_twofa=Úsáid cód dhá fhachtóir ó do ghuthán
webauthn_error=Ní fhéadfaí do eochair slándála a léamh.
webauthn_unsupported_browser=Ní thacaíonn do bhrabhsálaí le WebAuthn faoi láthair.
webauthn_error_unknown=Tharla earráid anaithnid. Déan iarracht arís.
-webauthn_error_insecure=Ní thacaíonn WebAuthn ach le naisc slán. Le haghaidh tástála thar HTTP, is féidir leat an bunús “localhost” nó "127.0.0.1" a úsáid
+webauthn_error_insecure=Ní thacaíonn WebAuthn ach le naisc shlána. Chun tástáil a dhéanamh thar HTTP, is féidir leat an bunús "localhost" nó "127.0.0.1" a úsáid.
webauthn_error_unable_to_process=Ní fhéadfadh an freastalaí d'iarratas a phróiseáil.
webauthn_error_duplicated=Ní cheadaítear an eochair slándála don iarratas seo. Déan cinnte le do thoil nach bhfuil an eochair cláraithe cheana féin.
webauthn_error_empty=Ní mór duit ainm a shocrú don eochair seo.
@@ -117,7 +117,7 @@ files=Comhaid
error=Earráid
error404=Níl an leathanach atá tú ag iarraidh a bhaint amach ann nó níl tú údaraithe chun é a fheiceáil.
-error503=Níorbh fhéidir leis an bhfreastalaí d'iarratas a chur i gcrích. Bain triail eile as ar ball.
+error503=Níorbh fhéidir leis an bhfreastalaí d’iarratas a chomhlánú. Déan iarracht arís ar ball.
go_back=Ar ais
invalid_data=Sonraí neamhbhailí: %v
@@ -131,7 +131,7 @@ unpin=Díphoráil
artifacts=Déantáin
expired=Imithe in éag
-confirm_delete_artifact=An bhfuil tú cinnte gur mhaith leat an déantán '%s' a scriosadh?
+confirm_delete_artifact=An bhfuil tú cinnte gur mian leat an déantán '%s' a scriosadh?
archived=Cartlann
@@ -168,33 +168,33 @@ no_results_found=Níor aimsíodh aon torthaí.
internal_error_skipped=Tharla earráid inmheánach ach éirithe as: %s
[search]
-search=Cuardaigh...
+search=Cuardaigh…
type_tooltip=Cineál cuardaigh
fuzzy=Doiléir
-fuzzy_tooltip=Cuir san áireamh torthaí a mheaitseálann an téarma cuardaigh go dlúth freisin
+fuzzy_tooltip=Cuir torthaí san áireamh a mheaitseálann go dlúth leis an téarma cuardaigh
words=Focail
words_tooltip=Ná cuir san áireamh ach torthaí a mheaitseálann na focail téarma cuardaigh
regexp=Nathanna Rialta
regexp_tooltip=Ná cuir ach torthaí a mheaitseálann an téarma cuardaigh nathanna rialta san áireamh
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órais…
+user_kind=Cuardaigh úsáideoirí…
+org_kind=Cuardaigh eagraíochtaí…
+team_kind=Cuardaigh foirne…
+code_kind=Cuardaigh cód…
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.
code_search_by_git_grep=Soláthraíonn “git grep” torthaí cuardaigh cód reatha. D'fhéadfadh torthaí níos fearr a bheith ann má chuireann riarthóir an láithreáin ar chumas Innéacsaithe
-package_kind=Cuardaigh pacáistí...
-project_kind=Cuardaigh tionscadail...
-branch_kind=Cuardaigh brainsí...
-tag_kind=Cuardaigh clibeanna...
+package_kind=Cuardaigh pacáistí…
+project_kind=Cuardaigh tionscadail…
+branch_kind=Cuardaigh brainsí…
+tag_kind=Cuardaigh clibeanna…
tag_tooltip=Cuardaigh clibeanna meaitseála. Úsáid '%' le haon seicheamh uimhreacha a mheaitseáil.
-commit_kind=Cuardaigh tiomáintí...
-runner_kind=Cuardaigh reathaithe...
+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=Cuardaigh saincheisteanna…
+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]
@@ -252,7 +252,7 @@ license_desc=Téigh go bhfaighidh doiciméadúchán roimh aon socruithe a athrú.
require_db_desc=Éilíonn Gitea MySQL, PostgreSQL, MSSQL, SQLite3 nó TiDB (prótacal MySQL).
@@ -269,16 +269,16 @@ path=Cosán
sqlite_helper=Conair comhad don bhunachar sonraí SQLite3. Cuir isteach cosán iomlán má reáchtáil tú Gitea mar sheirbhís.
reinstall_error=Tá tú ag iarraidh a shuiteáil i mbunachar sonraí Gitea atá ann cheana
reinstall_confirm_message=Is féidir fadhbanna iolracha a bheith ina chúis le hathshuiteáil le bunachar sonraí Gitea I bhformhór na gcásanna, ba chóir duit an "app.ini" atá agat cheana a úsáid chun Gitea a reáchtáil. Má tá a fhios agat cad atá á dhéanamh agat, deimhnigh an méid seo a leanas:
-reinstall_confirm_check_1=Féadfaidh na sonraí criptithe ag an SECRET_KEY i app.ini a chailleadh: b'fhéidir nach mbeidh úsáideoirí in ann logáil isteach le 2FA/OTP & b'fhéidir nach bhfeidhmeoidh scátháin i gceart. Trí an bhosca seo a sheiceáil deimhníonn tú go bhfuil an ceart an SECRET_KEY sa chomhad reatha app.ini.
-reinstall_confirm_check_2=B'fhéidir go gcaithfear na stórais agus na socruithe a athshioncronú. Trí an bhosca seo a sheiceáil deimhníonn tú go ndéanfaidh tú na crúcaí do na stórálacha agus an chomhad authorized_keys a athshioncronú de láimh. Deimhníonn tú go gcinnteoidh tú go bhfuil socruithe stórais agus scátháin ceart.
+reinstall_confirm_check_1=D’fhéadfadh sé go gcaillfí na sonraí atá criptithe ag an SECRET_KEY in app.ini: b’fhéidir nach mbeidh úsáideoirí in ann logáil isteach le 2FA/OTP agus b’fhéidir nach bhfeidhmeoidh scátháin i gceart. Tríd an mbosca seo a sheiceáil, dearbhaíonn tú go bhfuil an SECRET_KEY ceart sa chomhad app.ini reatha.
+reinstall_confirm_check_2=B’fhéidir go mbeadh gá na stórtha agus na socruithe a athshioncrónú. Trí tic a chur sa bhosca seo, deimhníonn tú go ndéanfaidh tú na crúcaí do na stórtha agus don chomhad authorized_keys a athshioncrónú de láimh. Deimhníonn tú go gcinnteoidh tú go bhfuil socruithe an stórtha agus an scátháin ceart.
reinstall_confirm_check_3=Deimhníonn tú go bhfuil tú cinnte go bhfuil an Gitea seo ag rith leis an suíomh ceart app.ini agus go bhfuil tú cinnte go gcaithfidh tú athshuiteáil. Deimhníonn tú go n-admhaíonn tú na rioscaí thuas.
err_empty_db_path=Ní féidir cosán bunachar sonraí SQLite3 a bheith folamh.
no_admin_and_disable_registration=Ní féidir leat féinchlárú úsáideora a dhíchumasú gan cuntas riarthóra a chruthú.
err_empty_admin_password=Ní féidir le pasfhocal an riarthóra a bheith folamh.
-err_empty_admin_email=Ní féidir le ríomhphost an riarthóra a bheith folamh.
-err_admin_name_is_reserved=Riarthóir Tá an t-ainm úsáideora neamhbhailí, tá an t-ainm úsáideora curtha in áirithe
-err_admin_name_pattern_not_allowed=Tá ainm úsáideora an riarthóra neamhbhailí, meaitseálann an t-ainm úsáideora patrún in áirithe
-err_admin_name_is_invalid=Tá an t-ainm úsáideora Riarthóra neamhbhailí
+err_empty_admin_email=Ní féidir seoladh ríomhphoist an riarthóra a fhágáil folamh.
+err_admin_name_is_reserved=Tá ainm úsáideora an riarthóra neamhbhailí. Tá ainm úsáideora curtha in áirithe.
+err_admin_name_pattern_not_allowed=Tá ainm úsáideora an riarthóra neamhbhailí. Tá patrún atá curtha in áirithe ag teacht leis an ainm úsáideora.
+err_admin_name_is_invalid=Ainm úsáideora an riarthóra neamhbhailí
general_title=Socruithe Ginearálta
app_name=Teideal an tSuímh
@@ -294,7 +294,7 @@ domain_helper=Seoladh fearainn nó óstach don fhreastalaí.
ssh_port=Port Freastalaí SSH
ssh_port_helper=Uimhir chalafoirt éisteann do fhreastalaí SSH air. Fág folamh le díchumasú.
http_port=Port Éisteachta HTTP Gitea
-http_port_helper=Uimhir chalafoirt a éistfidh an freastalaí gréasáin Gitea air.
+http_port_helper=Uimhir an phoirt a n-éistfidh freastalaí gréasáin Gitea leis.
app_url=URL Bonn Gitea
app_url_helper=Seoladh bonn le haghaidh URLanna clóin HTTP(S) agus fógraí ríomhphoist.
log_root_path=Cosán Logála
@@ -358,7 +358,7 @@ no_reply_address=Fearann Ríomhphoist Folaite
no_reply_address_helper=Ainm fearainn d'úsáideoirí a bhfuil seoladh ríomhphoist i bhfolach acu. Mar shampla, logálfar an t-ainm úsáideora 'joe' i Git mar 'joe@noreply.example.org' má tá an fearainn ríomhphoist i bhfolach socraithe go 'noreply.example.org'.
password_algorithm=Algartam Hais Pasfhocal
invalid_password_algorithm=Algartam hais pasfhocail neamhbhailí
-password_algorithm_helper=Socraigh an algartam hashing pasfhocal. Tá riachtanais agus neart éagsúla ag halgartaim. Tá an algartam argon2 sách slán ach úsáideann sé go leor cuimhne agus d'fhéadfadh sé a bheith míchuí do chórais bheaga.
+password_algorithm_helper=Socraigh an algartam haiseála pasfhocail. Bíonn riachtanais agus láidreachtaí difriúla ag halgartaim. Tá an algartam argon2 sách slán ach úsáideann sé go leor cuimhne agus d'fhéadfadh sé a bheith mí-oiriúnach do chórais bheaga.
enable_update_checker=Cumasaigh Seiceoir Nuashonraithe
enable_update_checker_helper=Seiceálacha ar eisiúintí leagan nua go tréimhsiúil trí nascadh le gitea.io.
env_config_keys=Cumraíocht Comhshaoil
@@ -421,6 +421,7 @@ remember_me.compromised=Níl an comhartha logála isteach bailí níos mó a d'f
forgot_password_title=Dearmad ar an bPasfhocal
forgot_password=Dearmad ar an bPasfhocal?
need_account=An bhfuil cuntas ag teastáil uait?
+sign_up_tip=Tá tú ag clárú an chéad chuntais sa chóras, a bhfuil pribhléidí riarthóra aige. Cuimhnigh go cúramach ar d’ainm úsáideora agus do phasfhocal. Má dhéanann tú dearmad ar an ainm úsáideora nó ar an pasfhocal, féach ar dhoiciméadacht Gitea le do thoil chun an cuntas a aisghabháil.
sign_up_now=Cláraigh anois.
sign_up_successful=Cruthaíodh cuntas go rathúil. Fáilte romhat!
confirmation_mail_sent_prompt_ex=Tá ríomhphost dearbhaithe nua seolta chuig %s . Seiceáil do bhosca isteach laistigh den chéad %s eile chun an próiseas clárúcháin a chur i gcrích. Má tá do sheoladh ríomhphoist clárúcháin mícheart, is féidir leat síniú isteach arís agus é a athrú.
@@ -429,8 +430,8 @@ allow_password_change=A cheangal ar an úsáideoir pasfhocal a athrú (molta)
reset_password_mail_sent_prompt=Seoladh ríomhphost deimhnithe chu ig %s . Seiceáil do bhosca isteach laistigh den chéad %s eile chun an próiseas aisghabhála cuntais a chríochnú.
active_your_account=Gníomhachtaigh do chuntas
account_activated=Cuireadh cuntas gníomhachtaithe
-prohibit_login=Sínigh isteach Toirmiscthe
-prohibit_login_desc=Tá cosc ar do chuntas síniú isteach, déan teagmháil le do riarthóir láithreáin le do thoil.
+prohibit_login=Toirmiscthe ar Shíniú Isteach
+prohibit_login_desc=Tá cosc ar logáil isteach i do chuntas. Téigh i dteagmháil le riarthóir do shuímh, le do thoil.
resent_limit_prompt=D'iarr tú ríomhphost gníomhachtaithe cheana féin le déanaí. Fan 3 nóiméad le do thoil agus bain triail as arís.
has_unconfirmed_mail=Dia duit %s, tá seoladh ríomhphoist neamhdheimhnithe agat (%s ). Mura bhfuair tú ríomhphost dearbhaithe nó mura gcaithfidh tú ceann nua a athsheoladh, cliceáil ar an gcnaipe thíos le do thoil.
change_unconfirmed_mail_address=Má tá do sheoladh ríomhphoist cláraithe mícheart, is féidir leat é a athrú anseo agus ríomhphost dearbhaithe nua a sheoladh arís.
@@ -451,7 +452,7 @@ use_scratch_code=Úsáid cód scratch
twofa_scratch_used=D'úsáid tú do chód scratch. Tá tú atreoraithe chuig an leathanach socruithe dhá fhachtóir ionas gur féidir leat clárú do ghléas a bhaint nó cód scratch nua a ghiniúint.
twofa_passcode_incorrect=Tá do phaschód mícheart. Má chuir tú do ghléas míchuir tú, bain úsáid as do chód scratch chun síniú isteach.
twofa_scratch_token_incorrect=Tá do chód scratch mícheart.
-twofa_required=Ní mór duit Fíordheimhniú Dhá Fhachtóir a shocrú chun rochtain a fháil ar stórtha, nó iarracht a dhéanamh logáil isteach arís.
+twofa_required=Ní mór duit fíordheimhniú dhá fhachtóir a shocrú chun rochtain a fháil ar stórtha, nó iarracht a dhéanamh logáil isteach arís.
login_userpass=Sínigh isteach
login_openid=OpenID
oauth_signup_tab=Cláraigh Cuntas Nua
@@ -463,24 +464,24 @@ oauth_signin_submit=Cuntas Nasc
oauth.signin.error.general=Tharla earráid agus an t-iarratas údaraithe á phróiseáil: %s. Má leanann an earráid seo, téigh i dteagmháil le riarthóir an tsuímh.
oauth.signin.error.access_denied=Diúltaíodh an t-iarratas ar údarú.
oauth.signin.error.temporarily_unavailable=Theip ar údarú toisc nach bhfuil an fhreastalaí fíordheimhnithe ar fáil Bain triail as arís níos déanaí.
-oauth_callback_unable_auto_reg=Tá Clárú Uathoibríoch cumasaithe, ach sheol Soláthraí OAuth2 %[1]s réimsí in easnamh ar ais: %[2]s, ní raibh sé in ann cuntas a chruthú go huathoibríoch, cruthaigh nó nasc le cuntas, nó déan teagmháil le riarthóir an tsuímh.
+oauth_callback_unable_auto_reg=Tá Clárú Uathoibríoch cumasaithe, ach thug Soláthraí OAuth2 %[1]s réimsí ar iarraidh ar ais: %[2]s, ní féidir cuntas a chruthú go huathoibríoch. Cruthaigh cuntas nó déan nasc leis, nó déan teagmháil le riarthóir an tsuímh.
openid_connect_submit=Ceangail
openid_connect_title=Ceangail le cuntas atá ann cheana
openid_connect_desc=Níl an URI OpenID roghnaithe ar eolas. Comhcheangail é le cuntas nua anseo.
openid_register_title=Cruthaigh cuntas nua
openid_register_desc=Níl an URI OpenID roghnaithe ar eolas. Comhcheangail é le cuntas nua anseo.
openid_signin_desc=Cuir isteach do URI OpenID. Mar shampla: alice.openid.example.org nó https://openid.example.org/alice.
-disable_forgot_password_mail=Tá aisghabháil cuntas díchumasaithe toisc nach bhfuil aon ríomhphost ar bun. Téigh i dteagmháil le do riarthóir suíomh.
-disable_forgot_password_mail_admin=Níl aisghabháil cuntas ar fáil ach amháin nuair a bhíonn ríomhphost ar bun. Bunaigh ríomhphost le do thoil chun aisghabháil cuntas a chumasú
+disable_forgot_password_mail=Tá aisghabháil cuntais díchumasaithe mar nach bhfuil aon seoladh ríomhphoist socraithe. Téigh i dteagmháil le riarthóir do shuímh, le do thoil.
+disable_forgot_password_mail_admin=Ní féidir cuntais a aisghabháil ach amháin nuair a bhíonn seoladh ríomhphoist socraithe.
email_domain_blacklisted=Ní féidir leat clárú le do sheoladh ríomhphoist.
authorize_application=Údaraigh an Feidhmchlár
authorize_redirect_notice=Déanfar tú a atreorú chuig %s má údaraíonn tú an feidhmchlár seo.
authorize_application_created_by=Chruthaigh %s an feidhmchlár seo.
-authorize_application_description=Má dheonaíonn tú an rochtain, beidh sé in ann rochtain a fháil agus scríobh chuig faisnéis uile do chuntais, lena n-áirítear repos príobháideacha agus eagraíochtaí.
+authorize_application_description=Má dheonaíonn tú rochtain, beidh sé in ann rochtain a fháil ar fhaisnéis do chuntais go léir agus scríobh chuici, lena n-áirítear stórtha príobháideacha agus eagraíochtaí.
authorize_application_with_scopes=Le scóip: %s
authorize_title=Údaraigh "%s" chun rochtain a fháil ar do chuntas?
authorization_failed=Theip ar údarú
-authorization_failed_desc=Theip ar an údarú toisc gur bhraitheamar iarratas neamhbhailí. Téigh i dteagmháil le cothabhálaí an aip a rinne tú iarracht a údarú.
+authorization_failed_desc=Theip ar an údarú mar gur aimsíodh iarratas neamhbhailí. Téigh i dteagmháil le cothabhálaí an aip a ndearna tú iarracht údarú a thabhairt di.
sspi_auth_failed=Theip ar fhíordheimhniú SSPI
password_pwned=Tá an pasfhocal a roghnaigh tú ar liosta na bhfocal faire goidte a nochtadh cheana i sáruithe sonraí poiblí. Bain triail eile as le pasfhocal eile agus smaoinigh ar an bpasfhocal seo a athrú áit eile freisin.
password_pwned_err=Ní fhéadfaí iarratas a chomhlánú ar HaveIBeenPwned
@@ -505,8 +506,8 @@ activate_email.text=Cliceáil ar an nasc seo a leanas le do sheoladh ríomhphois
register_notify=Fáilte go dtí %s
register_notify.title=%[1]s, fáilte go %[2]s
-register_notify.text_1=is é seo do ríomhphost deimhnithe clárúcháin do %s!
-register_notify.text_2=Is féidir leat logáil isteach anois trí ainm úsáideora: %s.
+register_notify.text_1=Seo do ríomhphost deimhnithe clárúcháin le haghaidh %s!
+register_notify.text_2=Is féidir leat logáil isteach anois tríd an ainm úsáideora: %s.
register_notify.text_3=Má cruthaíodh an cuntas seo duit, socraigh do phasfhocal ar dtús.
reset_password=Aisghabháil do chuntas
@@ -544,7 +545,7 @@ release.download.targz=Cód Foinse (TAR.GZ)
repo.transfer.subject_to=Ba mhaith le %s "%s" a aistriú go %s
repo.transfer.subject_to_you=Ba mhaith le %s "%s" a aistriú chugat
repo.transfer.to_you=tú
-repo.transfer.body=Chun glacadh leis nó a dhiúltú tabhair cuairt ar %s nó neamhaird a dhéanamh air.
+repo.transfer.body=Chun glacadh leis nó diúltú dó, tabhair cuairt ar %s nó déan neamhaird de.
repo.collaborator.added.subject=Chuir %s le %s tú
repo.collaborator.added.text=Cuireadh tú leis mar chomhoibritheoir stórais:
@@ -596,7 +597,7 @@ url_error=`ní URL bailí é "%s".`
include_error=` ní mór fotheaghrán a bheith ann "%s".`
glob_pattern_error=` tá patrún glob neamhbhailí: %s.`
regex_pattern_error=`tá patrún regex neamhbhailí: %s.`
-username_error=` ní féidir ach carachtair alfa-uimhriúla ('0-9', 'a-z', 'A-Z'), dash ('-'), béim ('_') agus ponc ('.') a bheith ann. Ní féidir tús a chur leis ná deireadh a chur le carachtair neamh-alfamanacha, agus tá cosc freisin ar charthanna neamh-alfanuimhriúla i ndiaidh a chéile.`
+username_error=Ní féidir ach carachtair alfa-uimhriúla ('0-9','a-z','A-Z'), fleasc ('-'), fo-líne ('_') agus ponc ('.') a bheith i `. Ní féidir é a thosú ná a chríochnú le carachtair neamh-alfa-uimhriúla, agus tá cosc ar charachtair neamh-alfa-uimhriúla as a chéile ach an oiread.`
invalid_group_team_map_error=` tá mapáil neamhbhailí: %s`
unknown_error=Earráid anaithnid:
captcha_incorrect=Tá an cód CAPTCHA mícheart.
@@ -611,17 +612,17 @@ username_has_not_been_changed=Níor athraíodh ainm úsáideora
repo_name_been_taken=Úsáidtear ainm an stór cheana féin.
repository_force_private=Tá Force Private cumasaithe: ní féidir stórais phríobháideacha a dhéanamh poiblí.
repository_files_already_exist=Tá comhaid ann cheana féin don stór seo. Déan teagmháil leis an riarthóir córais.
-repository_files_already_exist.adopt=Tá comhaid ann cheana don stór seo agus ní féidir iad a ghlacadh ach amháin.
+repository_files_already_exist.adopt=Tá comhaid ann cheana féin don stórlann seo agus ní féidir iad a ghlacadh ach amháin.
repository_files_already_exist.delete=Tá comhaid ann cheana féin don stór seo. Ní mór duit iad a scriosadh.
repository_files_already_exist.adopt_or_delete=Tá comhaid ann cheana féin don stór seo. Glac iad nó scrios iad.
visit_rate_limit=Thug cuairt chianda aghaidh ar theorannú rátaí.
-2fa_auth_required=Bhí fíordheimhniú dhá thoisc ag teastáil ó chianchuairt.
+2fa_auth_required=Bhí fíordheimhniú dhá fhachtóir ag teastáil le haghaidh cuairte iargúlta.
org_name_been_taken=Tá ainm na heagraíochta glactha cheana féin.
team_name_been_taken=Tá ainm na foirne glactha cheana féin.
team_no_units_error=Ceadaigh rochtain ar chuid stórais amháin ar a laghad.
email_been_used=Úsáidtear an seoladh ríomhphoist cheana féin.
email_invalid=Tá an seoladh ríomhphoist neamhbhailí.
-email_domain_is_not_allowed=Tá réimse ríomhphoist úsáideora %s ag teacht i gcoitinne le EMAIL_DOMAIN_ALLOWLIST nó EMAIL_DOMAIN_BLOCKLIST. Déan cinnte go bhfuil súil le d'oibríocht.
+email_domain_is_not_allowed=Tá coimhlint idir fearann seoladh ríomhphoist an úsáideora %s agus EMAIL_DOMAIN_ALLOWLIST nó EMAIL_DOMAIN_BLOCKLIST. Cinntigh le do thoil go bhfuiltear ag súil le d’oibríocht.
openid_been_used=Úsáidtear an seoladh OpenID "%s" cheana féin.
username_password_incorrect=Tá ainm úsáideora nó pasfhocal mícheart.
password_complexity=Ní shásaíonn pasfhocal ceanglais castachta:
@@ -646,14 +647,14 @@ invalid_ssh_key=Ní féidir d'eochair SSH a fhíorú: %s
invalid_gpg_key=Ní féidir d'eochair GPG a fhíorú: %s
invalid_ssh_principal=Príomhoide neamhbhailí: %s
must_use_public_key=Is eochair phríobháideach an eochair a sholáthraíonn tú. Ná uaslódáil d'eochair phríobháideach áit ar bith Úsáid d'eochair phoiblí ina ionad.
-unable_verify_ssh_key=Ní féidir an eochair SSH a fhíorú, seiceáil faoi dhó é le haghaidh botúin.
+unable_verify_ssh_key=Ní féidir an eochair SSH a fhíorú. Déan seiceáil dhúbailte uirthi le haghaidh earráidí.
auth_failed=Theip ar fhíordheimhniú:%v
-still_own_repo=Tá stór amháin nó níos mó ag do chuntas, scriosadh nó aistrigh iad ar dtús.
-still_has_org=Is ball d'eagraíocht amháin nó níos mó é do chuntas, fág iad ar dtús.
-still_own_packages=Tá pacáiste amháin nó níos mó ag do chuntas, scrios iad ar dtús.
-org_still_own_repo=Tá stór amháin nó níos mó ag an eagraíocht seo fós, scriosadh nó aistrigh iad ar dtús.
-org_still_own_packages=Tá pacáiste amháin nó níos mó ag an eagraíocht seo fós, scrios iad ar dtús.
+still_own_repo=Tá stóras amháin nó níos mó i seilbh do chuntais. Scrios nó aistrigh iad ar dtús.
+still_has_org=Is ball d'eagraíocht amháin nó níos mó do chuntas. Fág iad ar dtús.
+still_own_packages=Tá pacáiste amháin nó níos mó i do chuntas. Scrios iad ar dtús.
+org_still_own_repo=Tá stóras amháin nó níos mó fós faoi úinéireacht na heagraíochta seo. Scrios nó aistrigh iad ar dtús.
+org_still_own_packages=Tá pacáiste amháin nó níos mó fós ag an eagraíocht seo. Scrios iad ar dtús.
target_branch_not_exist=Níl spriocbhrainse ann.
target_ref_not_exist=Níl an sprioctagartha %s ann
@@ -684,11 +685,11 @@ settings=Socruithe Úsáideora
form.name_reserved=Tá an t-ainm úsáideora "%s" in áirithe.
form.name_pattern_not_allowed=Ní cheadaítear an patrún "%s" in ainm úsáideora.
-form.name_chars_not_allowed=Tá carachtair neamhbhailí in ainm úsáideora "%s".
+form.name_chars_not_allowed=Tá carachtair neamhbhailí san ainm úsáideora "%s".
block.block=Bloc
block.block.user=Bloc úsáideoir
-block.block.org=Bloc úsáideoir don eagraíocht
+block.block.org=Bac úsáideoir ón eagraíocht
block.block.failure=Theip ar an úsáideoir a bhac: %s
block.unblock=Díbhlocáil
block.unblock.failure=Theip ar an úsáideoir a díbhlocáil: %s
@@ -701,7 +702,7 @@ block.info_3=seol fógraí chugat ag @mentioning d'ainm úsáideora
block.info_4=ag tabhairt cuireadh duit mar chomhoibritheoir chuig a stórtha
block.info_5=ag réaladh, ag forcáil nó ag féachaint ar stórais
block.info_6=ceisteanna nó iarrataí tarraingthe a oscailt agus trácht
-block.info_7=freagairt ar do chuid tuairimí i saincheisteanna nó iarratais tarraingthe
+block.info_7=ag freagairt do do thuairimí i saincheisteanna nó i n-iarratais tarraingthe
block.user_to_block=Úsáideoir chun blocáil
block.note=Nóta
block.note.title=Nóta roghnach:
@@ -732,7 +733,7 @@ webauthn=Fíordheimhniú Dhá-Fachtóir (Eochracha Slándála)
public_profile=Próifíl Phoiblí
biography_placeholder=Inis dúinn beagán fút féin! (Is féidir leat Markdown a úsáid)
location_placeholder=Comhroinn do shuíomh thart le daoine eile
-profile_desc=Rialú conas a thaispeánfar do phróifíl d'úsáideoirí eile. Úsáidfear do phríomhsheoladh ríomhphoist le haghaidh fógraí, aisghabháil pasfhocail agus oibríochtaí Git gréasán-bhunaithe.
+profile_desc=Rialú conas a thaispeántar do phróifíl d'úsáideoirí eile. Úsáidfear do phríomhsheoladh ríomhphoist le haghaidh fógraí, aisghabháil pasfhocal agus oibríochtaí Git gréasánbhunaithe.
password_username_disabled=Níl cead agat d'ainm úsáideora a athrú. Déan teagmháil le do riarthóir suímh le haghaidh tuilleadh sonraí.
password_full_name_disabled=Níl cead agat d’ainm iomlán a athrú. Déan teagmháil le do riarthóir suímh le haghaidh tuilleadh sonraí.
full_name=Ainm Iomlán
@@ -752,7 +753,7 @@ cancel=Cealaigh
language=Teanga
ui=Téama
hidden_comment_types=Cineálacha tráchtaireachta ceilte
-hidden_comment_types_description=Ní thaispeánfar cineálacha tráchta a sheiceáiltear anseo taobh istigh de leathan Cuireann seiceáil “Lipéad” mar shampla baintear gach trácht “{user} cursaí/bainte {label}”.
+hidden_comment_types_description=Ní thaispeánfar cineálacha tráchta atá seiceáilte anseo ar leathanaigh saincheisteanna. Má sheiceálann tú "Lipéad", mar shampla, baintear na tráchtanna uile a dúirt "chuir {user} {label} leis/bhain sé iad".
hidden_comment_types.ref_tooltip=Tuairimí ina dtagraíodh an tsaincheist seo ó shaincheiste/coiste eile...
hidden_comment_types.issue_ref_tooltip=Tuairimí ina n-athraíonn an t-úsáideoir an brainse/clib a bhaineann leis an tsaincheist
comment_type_group_reference=Tagairt
@@ -800,18 +801,18 @@ manage_themes=Roghnaigh téama réamhshocraithe
manage_openid=Seoltaí OpenID a bhainistiú
email_desc=Úsáidfear do phríomhsheoladh ríomhphoist le haghaidh fógraí, aisghabháil pasfhocal agus, ar choinníoll nach bhfuil sé i bhfolach, oibríochtaí Git bunaithe ar an ngréas
theme_desc=Beidh sé seo do théama réamhshocraithe ar fud an láithreáin.
-theme_colorblindness_help=Tacaíocht Téama Dathdallacht
-theme_colorblindness_prompt=Ní fhaigheann Gitea ach roinnt téamaí le tacaíocht bhunúsach daille datha, nach bhfuil ach cúpla dathanna sainithe acu. Tá an obair fós ar siúl. D’fhéadfaí tuilleadh feabhsuithe a dhéanamh trí níos mó dathanna a shainiú sna comhaid CSS téamaí.
+theme_colorblindness_help=Tacaíocht Téama Daille Dathanna
+theme_colorblindness_prompt=Níl ach cúpla téama ag Gitea a thacaíonn le bun-dhall datha, agus níl ach cúpla dath sainmhínithe iontu. Tá an obair fós ar siúl. D’fhéadfaí feabhsuithe breise a dhéanamh trí níos mó dathanna a shainiú i gcomhaid CSS an téama.
primary=Príomhúil
activated=Gníomhachtaithe
requires_activation=Éilíonn gníomhachtú
primary_email=Déan príomhúil
activate_email=Seol Gníomhachtaithe
activations_pending=Gníomhartha ar Feitheamh
-can_not_add_email_activations_pending=Tá gníomhachtú ar feitheamh, déan iarracht arís i gceann cúpla nóiméad más mian leat ríomhphost nua a chur leis.
+can_not_add_email_activations_pending=Tá gníomhachtú ar feitheamh. Déan iarracht arís i gceann cúpla nóiméad más mian leat seoladh ríomhphoist nua a chur leis.
delete_email=Bain
email_deletion=Bain Seoladh R-phoist
-email_deletion_desc=Bainfear an seoladh ríomhphoist agus an fhaisnéis ghaolmhar as do chuntas. Ní bheidh na tiomáintí Git a bhaineann leis an seoladh ríomhphoist seo athraithe. Lean ar aghaidh?
+email_deletion_desc=Bainfear an seoladh ríomhphoist seo agus faisnéis ghaolmhar as do chuntas. Fanfaidh na gealltanais Git ón seoladh ríomhphoist seo gan athrú. Ar mhaith leat leanúint ar aghaidh?
email_deletion_success=Tá an seoladh ríomhphoist bainte.
theme_update_success=Nuashonraíodh do théama.
theme_update_error=Níl an téama roghnaithe ann.
@@ -854,7 +855,7 @@ gpg_key_matched_identities_long=Meaitseálann na haitheantais leabaithe san eoch
gpg_key_verified=Eochair Fhíoraithe
gpg_key_verified_long=Fíoraíodh an eochair le heochairchomhartha agus is féidir í a úsáid chun a fhíorú go bhfuil geallta ag meaitseáil aon seoltaí ríomhphoist gníomhachtaithe don úsáideoir seo chomh maith le haon aitheantas comhoiriúnaithe don eochair seo.
gpg_key_verify=Fíoraigh
-gpg_invalid_token_signature=Ní mheaitseálann an eochair, an síniú agus an comhartha GPG a sholáthraítear nó tá an comhartha as dáta.
+gpg_invalid_token_signature=Ní hionann an eochair GPG, an síniú agus an comhartha a cuireadh ar fáil, nó tá an comhartha as dáta.
gpg_token_required=Ní mór duit síniú a sholáthar don chomhartha thíos
gpg_token=Comhartha
gpg_token_help=Is féidir leat síniú a ghiniúint ag úsáid:
@@ -864,7 +865,7 @@ verify_gpg_key_success=Tá eochair GPG “%s” fíoraithe.
ssh_key_verified=Eochair Fhíoraithe
ssh_key_verified_long=Fíoraíodh an eochair le heochairchomhartha agus is féidir í a úsáid chun a fhíorú go bhfuil geallta ag teacht le haon seoltaí ríomhphoist gníomhachtaithe don úsáideoir seo.
ssh_key_verify=Fíoraigh
-ssh_invalid_token_signature=Ní mheaitseálann an eochair, an síniú nó an comhartha SSH a sholáthraítear nó tá an comhartha as dáta.
+ssh_invalid_token_signature=Ní hionann an eochair SSH, an síniú nó an comhartha a cuireadh ar fáil, nó tá an comhartha as dáta.
ssh_token_required=Ní mór duit síniú a sholáthar don chomhartha thíos
ssh_token=Comhartha
ssh_token_help=Is féidir leat síniú a ghiniúint ag úsáid:
@@ -885,7 +886,7 @@ gpg_key_deletion=Bain Eochair GPG
ssh_principal_deletion=Bain Príomhoide Teastas SSH
ssh_key_deletion_desc=Ag baint eochair SSH, cuirtear a rochtain ar do chuntas a chúlghairm. Lean ar aghaidh?
gpg_key_deletion_desc=Má bhaintear eochair GPG, ní fhíoraítear gealltanais a shínigh sé. An leanfaidh tú ar aghaidh?
-ssh_principal_deletion_desc=Cúlghairtear a rochtain ar do chuntas Príomhoide Teastas SSH. Lean ar aghaidh?
+ssh_principal_deletion_desc=Má bhaintear Príomhoide Teastais SSH, cuirtear a rochtain ar do chuntas ar ceal. Ar aghaidh?
ssh_key_deletion_success=Tá an eochair SSH bainte.
gpg_key_deletion_success=Tá an eochair GPG bainte amach.
ssh_principal_deletion_success=Tá an príomhoide bainte.
@@ -947,7 +948,7 @@ create_oauth2_application_button=Cruthaigh Feidhmchlár
create_oauth2_application_success=D'éirigh leat feidhmchlár nua OAuth2 a chruthú.
update_oauth2_application_success=D'éirigh leat an feidhmchlár OAuth2 a nuashonrú.
oauth2_application_name=Ainm Feidhmchláir
-oauth2_confidential_client=Cliant Rúnda. Roghnaigh le haghaidh aipeanna a choimeádann an rún faoi rún, mar aipeanna gréasáin. Ná roghnaigh le haghaidh aipeanna dúchasacha lena n-áirítear aipeanna deisce agus soghluaiste.
+oauth2_confidential_client=Cliant Rúnda. Roghnaigh le haghaidh aipeanna a choinníonn an rún faoi rún, amhail aipeanna gréasáin. Ná roghnaigh le haghaidh aipeanna dúchasacha, lena n-áirítear aipeanna deisce agus soghluaiste.
oauth2_skip_secondary_authorization=Scipeáil údarú do chliaint poiblí tar éis rochtain a dheonú D'fhéadfadh sé go mbeadh riosca slándála
oauth2_redirect_uris=URIs a atreorú. Úsáid líne nua do gach URI le do thoil.
save_application=Sábháil
@@ -962,10 +963,10 @@ oauth2_application_remove_description=Cuirfear feidhmchlár OAuth2 a bhaint cosc
oauth2_application_locked=Réamhchláraíonn Gitea roinnt feidhmchlár OAuth2 ar thosú má tá sé cumasaithe i gcumraíocht. Chun iompar gan choinne a chosc, ní féidir iad seo a chur in eagar ná a bhaint. Féach do thoil do dhoiciméadú OAuth2 le haghaidh tuilleadh faisnéise.
authorized_oauth2_applications=Feidhmchláir Údaraithe OAuth2
-authorized_oauth2_applications_description=Tá rochtain tugtha agat ar do chuntas pearsanta Gitea ar na feidhmchláir tríú páirtí seo. Cúlghairm rochtain d'iarratais nach bhfuil uait a thuilleadh.
+authorized_oauth2_applications_description=Tá rochtain tugtha agat do na feidhmchláir tríú páirtí seo ar do chuntas pearsanta Gitea. Le do thoil, cuir rochtain ar ceal i gcás feidhmchlár nach bhfuil uait a thuilleadh.
revoke_key=Cúlghairm
revoke_oauth2_grant=Rochtain a chúlghairm
-revoke_oauth2_grant_description=Cuirfidh rochtain ar an bhfeidhmchlár tríú páirtí seo a chúlghairm cosc ar an bhfeidhmchlár seo rochtain An bhfuil tú cinnte?
+revoke_oauth2_grant_description=Má chúlghairtear rochtain don fheidhmchlár tríú páirtí seo, cuirfidh sé cosc ar an fheidhmchlár seo rochtain a fháil ar do shonraí. An bhfuil tú cinnte?
revoke_oauth2_grant_success=Cúlghairtear rochtain go rathúil.
twofa_desc=Chun do chuntas a chosaint ar goid pasfhocal, is féidir leat fón cliste nó gléas eile a úsáid chun pasfhocail aon-uaire bunaithe ar am (“TOTP”) a fháil.
@@ -975,7 +976,7 @@ twofa_not_enrolled=Níl do chuntas cláraithe faoi láthair i bhfíordheimhniú
twofa_disable=Díchumasaigh Fíordheimhniú Dhá-Fachtóir
twofa_scratch_token_regenerate=Athghin Eochair Aisghabhála Aonúsáide
twofa_scratch_token_regenerated=Is é %s d'eochair aisghabhála aonúsáide anois. Stóráil é in áit shábháilte, mar ní thaispeánfar é arís.
-twofa_enroll=Cláraigh le Fíordheimhniú Dhá-Fachtóir
+twofa_enroll=Cláraigh i bhFíordheimhniú Dhá-Fachtóir
twofa_disable_note=Is féidir leat fíordheimhniú dhá fhachtóir a dhíchumasú más gá.
twofa_disable_desc=Má dhíchumasaítear fíordheimhniú dhá fhachtóir beidh do chuntas chomh slán. Lean ar aghaidh?
regenerate_scratch_token_desc=Má chuir tú d'eochair aisghabhála míchuir tú nó má d'úsáid tú é cheana féin chun síniú isteach, is féidir leat é a athshocrú anseo.
@@ -991,7 +992,7 @@ webauthn_desc=Is feistí crua-earraí iad eochracha slándála ina bhfuil eochra
webauthn_register_key=Cuir Eochair Slándála
webauthn_nickname=Leasainm
webauthn_delete_key=Bain Eochair Slándála
-webauthn_delete_key_desc=Má bhaineann tú eochair slándála ní féidir leat síniú leis a thuilleadh. Lean ar aghaidh?
+webauthn_delete_key_desc=Mura mbaintear eochair slándála uait, ní féidir leat síniú isteach léi a thuilleadh. Ar mhaith leat leanúint ar aghaidh?
webauthn_key_loss_warning=Má chailleann tú d'eochracha slándála, caillfidh tú rochtain ar do chuntas.
webauthn_alternative_tip=B'fhéidir gur mhaith leat modh fíordheimhnithe breise a chumrú.
@@ -1020,6 +1021,8 @@ email_notifications.onmention=Ríomhphost amháin ar luaigh
email_notifications.disable=Díchumasaigh Fógraí Ríomhphoist
email_notifications.submit=Socraigh rogha ríomhphoist
email_notifications.andyourown=Agus Do Fógraí Féin
+email_notifications.actions.desc=Fógraí le haghaidh rith sreabha oibre ar stórtha atá socraithe le Gníomhartha Gitea .
+email_notifications.actions.failure_only=Fógra a thabhairt ach amháin i gcás ritheanna sreabha oibre nár éirigh leo
visibility=Infheictheacht úsáideora
visibility.public=Poiblí
@@ -1034,8 +1037,8 @@ new_repo_helper=Tá gach comhad tionscadail i stór, lena n-áirítear stair ath
owner=Úinéir
owner_helper=B'fhéidir nach dtaispeánfar roinnt eagraíochtaí sa anuas mar gheall ar theorainn uasta comhaireamh stórais.
repo_name=Ainm Stórais
-repo_name_profile_public_hint=Is stóras speisialta é .profile is féidir leat a úsáid chun README.md a chur le do phróifíl eagraíochta poiblí, le feiceáil ag aon duine. Cinntigh go bhfuil sé poiblí agus tosaigh é le README san eolaire próifíle le tosú.
-repo_name_profile_private_hint=Is stóras speisialta é .profile-private is féidir leat a úsáid chun README.md a chur le do phróifíl bhall eagraíochta, nach féidir a fheiceáil ach ag baill eagraíochta. Cinntigh go bhfuil sé príobháideach agus tosaigh le README sa eolaire próifíle chun tús a chur leis.
+repo_name_profile_public_hint=Is stóras speisialta é .profile ar féidir leat a úsáid chun README.md a chur le do phróifíl eagraíochta poiblí, le feiceáil ag aon duine. Déan cinnte go bhfuil sé poiblí agus cuir README sa chomhadlann próifíle chun tús a chur leis.
+repo_name_profile_private_hint=Is stóras speisialta é .profile-private ar féidir leat a úsáid chun README.md a chur le próifíl bhall d'eagraíochta, nach mbeidh le feiceáil ach ag baill na heagraíochta. Déan cinnte go bhfuil sé príobháideach agus cuir README sa chomhadlann próifíle chun tús a chur leis.
repo_name_helper=Úsáideann ainmneacha maith stóras focail eochair gairide, áithnid agus uathúla. D'fhéadfaí stóras darbh ainm '.profile' nó '.profile-private' a úsáid chun README.md a chur leis an bpróifíl úsáideora/eagraíochta.
repo_size=Méid an Stóras
template=Teimpléad
@@ -1057,7 +1060,7 @@ fork_branch=Brainse le clónú chuig an bhforc
all_branches=Gach brainse
view_all_branches=Féach ar gach brainse
view_all_tags=Féach ar gach clib
-fork_no_valid_owners=Ní féidir an stór seo a fhorcáil toisc nach bhfuil úinéirí bailí ann.
+fork_no_valid_owners=Ní féidir an stóras seo a fhorcadh mar nach bhfuil aon úinéirí bailí ann.
fork.blocked_user=Ní féidir an stór a fhorcáil toisc go bhfuil úinéir an stórais bac ort.
use_template=Úsáid an teimpléad seo
open_with_editor=Oscail le %s
@@ -1101,12 +1104,12 @@ mirror_sync=sioncronaithe
mirror_sync_on_commit=Sioncrónaigh nuair a bhrúitear geallúintí
mirror_address=Clón Ó URL
mirror_address_desc=Cuir aon dhintiúir riachtanacha sa chuid Údaraithe.
-mirror_address_url_invalid=Tá an URL curtha ar fáil neamhbhailí. Caithfidh tú gach comhpháirt den url a éalú i gceart.
+mirror_address_url_invalid=Tá an URL a cuireadh ar fáil neamhbhailí. Cinntigh go bhfuil gach comhpháirt den URL escaped i gceart.
mirror_address_protocol_invalid=Tá an URL curtha ar fáil neamhbhailí. Ní féidir ach suíomhanna http (s)://nó git://a úsáid le haghaidh scátháin.
mirror_lfs=Stóráil Comhad Móra (LFS)
mirror_lfs_desc=Gníomhachtaigh scáthú sonraí LFS.
mirror_lfs_endpoint=Críochphointe LFS
-mirror_lfs_endpoint_desc=Déanfaidh Sync iarracht an url clónála a úsáid chun an freastalaí LFS a chinneadh . Is féidir leat críochphointe saincheaptha a shonrú freisin má tá na sonraí LFS stórtha stóráilte áit éigin eile.
+mirror_lfs_endpoint_desc=Déanfaidh Sync iarracht an URL clónála a úsáid chun an freastalaí LFS a chinneadh . Is féidir leat críochphointe saincheaptha a shonrú freisin má tá sonraí LFS an stórais stóráilte in áit eile.
mirror_last_synced=Sincronaithe Deireanach
mirror_password_placeholder=(Gan athrú)
mirror_password_blank_placeholder=(Neamhshocraithe)
@@ -1119,7 +1122,7 @@ stars=Réaltaí
reactions_more=agus %d níos mó
unit_disabled=Tá an chuid stórais seo díchumasaithe ag riarthóir an láithreáin.
language_other=Eile
-adopt_search=Iontráil ainm úsáideora chun stórais neamhghlactha a chuardach... (fág bán chun gach rud a fháil)
+adopt_search=Cuir isteach ainm úsáideora chun cuardach a dhéanamh ar stórtha neamhuchtaithe… (fág bán chun gach ceann a aimsiú)
adopt_preexisting_label=Glacadh le Comhaid
adopt_preexisting=Glac le comhaid atá ann cheana
adopt_preexisting_content=Cruthaigh stór ó %s
@@ -1161,8 +1164,8 @@ template.issue_labels=Lipéid Eisiúna
template.one_item=Ní mór mír teimpléad amháin ar a laghad a roghnú
template.invalid=Ní mór stór teimpléad a roghnú
-archive.title=Tá an stóras seo i gcartlann. Is féidir leat comhaid a fheiceáil agus iad a chlónáil, ach ní féidir leat ceisteanna a bhrú ná a oscailt ná iarratais a tharraingt.
-archive.title_date=Tá an stóras seo cartlannaithe ar %s. Is féidir leat comhaid a fheiceáil agus é a chlónú, ach ní féidir leat saincheisteanna a bhrú nó a oscailt ná iarratais a tharraingt.
+archive.title=Tá an stór seo cartlannaithe. Is féidir leat comhaid a fheiceáil agus é a chlónáil. Ní féidir leat saincheisteanna a oscailt ná iarratais a tharraingt ná tiomnú a bhrú.
+archive.title_date=Tá an stórlann seo cartlannaithe ar %s. Is féidir leat comhaid a fheiceáil agus é a chlónáil. Ní féidir leat saincheisteanna a oscailt ná iarratais a tharraingt ná tiomnú a bhrú.
archive.issue.nocomment=Tá an stóras seo i gcartlann. Ní féidir leat trácht a dhéanamh ar shaincheisteanna.
archive.pull.nocomment=Tá an stóras seo i gcartlann. Ní féidir leat trácht a dhéanamh ar iarratais tarraingthe.
@@ -1179,7 +1182,7 @@ migrate_options_lfs=Aimirce comhaid LFS
migrate_options_lfs_endpoint.label=Críochphointe LFS
migrate_options_lfs_endpoint.description=Déanfaidh imirce iarracht do chianda Git a úsáid chun freastalaí LFS a chinneadh . Is féidir leat críochphointe saincheaptha a shonrú freisin má tá na sonraí LFS stórtha stóráilte áit éigin eile.
migrate_options_lfs_endpoint.description.local=Tacaítear le cosán freastalaí áitiúil freisin.
-migrate_options_lfs_endpoint.placeholder=Má fhágtar bán, díorthófar an críochphointe ón URL clóin
+migrate_options_lfs_endpoint.placeholder=Mura bhfágtar bán é, díorthófar an críochphointe ón URL clónála.
migrate_items=Míreanna Imirce
migrate_items_wiki=Wiki
migrate_items_milestones=Clocha míle
@@ -1191,10 +1194,10 @@ migrate_items_releases=Eisiúintí
migrate_repo=Stóras Imirc
migrate.clone_address=Aimirce/ Clón Ó URL
migrate.clone_address_desc=An URL 'clón' HTTP(S) nó Git de stóras atá ann cheana
-migrate.github_token_desc=Is féidir leat comhartha amháin nó níos mó a chur le camóg scartha anseo chun imirce a dhéanamh níos gasta mar gheall ar theorainn ráta API GitHub. RABHADH: D'fhéadfadh mí-úsáid na ngné seo beartas an sholáthraí seirbhíse a shárú agus blocáil cuntais a bheith mar thoradh air.
+migrate.github_token_desc=Is féidir leat comhartha amháin nó níos mó a chur anseo, scartha le camóga, chun an t-aistriú a dhéanamh níos tapúla trí theorainn ráta API GitHub a sheachaint. RABHADH: D’fhéadfadh mí-úsáid a bhaint as an ngné seo sárú a dhéanamh ar pholasaí an tsoláthraí seirbhíse agus d’fhéadfadh sé go gcuirfí bac ar do chuntas(í).
migrate.clone_local_path=nó cosán freastalaí áitiúil
migrate.permission_denied=Ní cheadaítear duit stórais áitiúla a iompórtáil.
-migrate.permission_denied_blocked=Ní féidir leat allmhairiú ó óstaigh neamh-cheadaithe, iarr ar an riarachán socruithe ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS a sheiceáil le do thoil.
+migrate.permission_denied_blocked=Ní féidir leat iompórtáil ó óstaigh neamhcheadaithe. Iarr ar an riarthóir socruithe ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS a sheiceáil.
migrate.invalid_local_path=Tá an cosán áitiúil neamhbhailí. Níl sé ann nó ní eolaire é.
migrate.invalid_lfs_endpoint=Níl an críochphointe LFS bailí.
migrate.failed=Theip ar an imirce:% v
@@ -1202,7 +1205,7 @@ migrate.migrate_items_options=Teastaíonn Comhartha Rochtana chun míreanna brei
migrated_from=Aistríodh ó %[2]s
migrated_from_fake=Aistrithe ó %[1]s
migrate.migrate=Aistrigh Ó %s
-migrate.migrating=Ag aistriú ó %s ...
+migrate.migrating=Ag aistriú ó %s …
migrate.migrating_failed=Theip ar aistriú ó %s .
migrate.migrating_failed.error=Theip ar aistriú: %s
migrate.migrating_failed_no_addr=Theip ar an imirce.
@@ -1228,7 +1231,7 @@ migrate.migrating_issues=Saincheisteanna Imirce
migrate.migrating_pulls=Iarratais Tarraingthe á n-Imirce
migrate.cancel_migrating_title=Cealaigh Imirce
migrate.cancel_migrating_confirm=Ar mhaith leat an imirce seo a chealú?
-migrating_status=Stádas imirce
+migration_status=Stádas imirce
mirror_from=scáthán de
forked_from=forcailte ó
@@ -1251,9 +1254,9 @@ clone_this_repo=Clóin an stóras seo
cite_this_repo=Luaigh an stóras seo
create_new_repo_command=Stóras nua a chruthú ar an líne ordaithe
push_exist_repo=Stóras atá ann cheana a bhrú ón líne ordaithe
-empty_message=Níl aon ábhar sa stóras seo.
+empty_message=Níl aon ábhar sa stórlann seo.
broken_message=Ní féidir na sonraí Git atá mar bhunús leis an stóras seo a léamh. Déan teagmháil le riarthóir an chás seo nó scrios an stóras seo.
-no_branch=Níl aon bhrainsí ag an stóras seo.
+no_branch=Níl aon bhrainse ag an stóras seo.
code=Cód
code.desc=Rochtain ar chód foinse, comhaid, gealltanais agus brainsí.
@@ -1270,7 +1273,7 @@ projects=Tionscadail
packages=Pacáistí
actions=Gníomhartha
labels=Lipéid
-org_labels_desc=Lipéid ar leibhéal eagraíochta is féidir a úsáid le gach stóras faoin eagraíocht seo
+org_labels_desc=Lipéid ar leibhéal na heagraíochta is féidir a úsáid le gach stórlann faoin eagraíocht seo
org_labels_desc_manage=bainistigh
milestone=Cloch Mhíle
@@ -1319,6 +1322,7 @@ commit_graph.color=Dath
commit.contained_in=Tá an tiomantas seo le fáil i:
commit.contained_in_default_branch=Tá an tiomantas seo mar chuid den bhrainse réamhshocraithe
commit.load_referencing_branches_and_tags=Luchtaigh brainsí agus clibeanna a thagraíonn an tiomantas
+commit.merged_in_pr=Cuireadh an tiomantas seo le chéile san iarratas tarraingthe %s.
blame=An milleán
download_file=Íoslódáil comhad
normal_view=Amharc Gnáth
@@ -1332,7 +1336,9 @@ editor.upload_file=Uaslódáil Comhad
editor.edit_file=Cuir Comhad in eagar
editor.preview_changes=Athruithe Réamhamhar
editor.cannot_edit_lfs_files=Ní féidir comhaid LFS a chur in eagar sa chomhéadan gréasáin.
+editor.cannot_edit_too_large_file=Tá an comhad rómhór le cur in eagar.
editor.cannot_edit_non_text_files=Ní féidir comhaid dhénártha a chur in eagar sa chomhéadan gréasáin.
+editor.file_not_editable_hint=Ach is féidir leat é a athainmniú nó a bhogadh fós.
editor.edit_this_file=Cuir Comhad in eagar
editor.this_file_locked=Tá an comhad faoi ghlas
editor.must_be_on_a_branch=Caithfidh tú a bheith ar bhrainse chun athruithe a dhéanamh nó a mholadh ar an gcomhad seo.
@@ -1352,7 +1358,7 @@ editor.update=Nuashonraigh %s
editor.delete=Scrios %s
editor.patch=Cuir paiste i bhfeidh
editor.patching=Paisteáil:
-editor.fail_to_apply_patch=Ní féidir paiste "%s" a chur i bhfeidhm
+editor.fail_to_apply_patch=Ní féidir an paiste a chur i bhfeidhm
editor.new_patch=Paiste Nua
editor.commit_message_desc=Cuir cur síos leathnaithe roghnach leis…
editor.signoff_desc=Cuir leantóir sínithe ag an gcoiteoir ag deireadh na teachtaireachta logála tiomanta.
@@ -1365,24 +1371,21 @@ editor.new_branch_name_desc=Ainm brainse nua…
editor.cancel=Cealaigh
editor.filename_cannot_be_empty=Ní féidir ainm an chomhaid a bheith folamh.
editor.filename_is_invalid=Tá ainm an chomhaid neamhbhailí: "%s".
-editor.commit_email=Tiomantas ríomhphost
-editor.invalid_commit_email=Tá an ríomhphost don ghealltanas neamhbhailí.
+editor.commit_email=Seoladh ríomhphoist tiomanta
+editor.invalid_commit_email=Tá an seoladh ríomhphoist don tiomnú neamhbhailí.
editor.branch_does_not_exist=Níl brainse "%s" ann sa stóras seo.
editor.branch_already_exists=Tá brainse "%s" ann cheana féin sa stóras seo.
editor.directory_is_a_file=Úsáidtear ainm eolaire "%s" cheana féin mar ainm comhaid sa stóras seo.
-editor.file_is_a_symlink=Is nasc siombalach é "%s". Ní féidir naisc shiombalacha a chur in eagar san eagarthóir gréasáin
+editor.file_is_a_symlink=Is nasc siombalach é `"%s". Ní féidir naisc shiombalacha a chur in eagar san eagarthóir gréasáin.`
editor.filename_is_a_directory=Úsáidtear ainm comhaid "%s" cheana féin mar ainm eolaire sa stóras seo.
-editor.file_editing_no_longer_exists=Níl an comhad atá á chur in eagar, "%s", ann sa stóras seo a thuilleadh.
-editor.file_deleting_no_longer_exists=Níl an comhad atá á scriosadh, "%s", ann sa stóras seo a thuilleadh.
+editor.file_modifying_no_longer_exists=Níl an comhad atá á mhodhnú, "%s", sa stóras seo a thuilleadh.
editor.file_changed_while_editing=Tá athrú tagtha ar ábhar an chomhad ó thosaigh tú ag eagarthóireacht Cliceáil anseo chun iad a fheiceáil nó Athru ithe a Tiomantas arís chun iad a fhorscríobh.
editor.file_already_exists=Tá comhad darb ainm "%s" ann cheana féin sa stóras seo.
-editor.commit_id_not_matching=Ní mheaitseálann an ID Tiomanta leis an ID nuair a thosaigh tú ag eagarthóireacht. Tiomanta isteach i mbrainse paiste agus ansin cumaisc.
+editor.commit_id_not_matching=Ní hionann an ID Tiomnaithe agus an ID a bhí ann nuair a thosaigh tú ag eagarthóireacht. Cuir isteach i mbrainse paiste é agus ansin cumasc é.
editor.push_out_of_date=Is cosúil go bhfuil an brú as dáta.
editor.commit_empty_file_header=Tiomantas comhad folamh
editor.commit_empty_file_text=Tá an comhad atá tú ar tí tiomantas folamh. Ar aghaidh?
editor.no_changes_to_show=Níl aon athruithe le taispeáint.
-editor.fail_to_update_file=Theip ar nuashonrú/cruthú comhad "%s".
-editor.fail_to_update_file_summary=Teachtaireacht Earráide:
editor.push_rejected_no_message=Dhiúltaigh an freastalaí an t-athrú gan teachtaireacht. Seiceáil Git Hooks le do thoil.
editor.push_rejected=Dhiúltaigh an freastalaí an t-athrú. Seiceáil Git Hooks le do thoil.
editor.push_rejected_summary=Teachtaireacht Diúltaithe Iomlán:
@@ -1396,6 +1399,15 @@ editor.user_no_push_to_branch=Ní féidir leis an úsáideoir brúigh go dtí an
editor.require_signed_commit=Éilíonn an Brainse tiomantas sínithe
editor.cherry_pick=Roghnaigh silíní %s ar:
editor.revert=Fill %s ar:
+editor.failed_to_commit=Theip ar athruithe a chur i bhfeidhm.
+editor.failed_to_commit_summary=Teachtaireacht Earráide:
+
+editor.fork_create=Stóras Forc chun Athruithe a Mholadh
+editor.fork_create_description=Ní féidir leat an stórlann seo a chur in eagar go díreach. Ina áit sin, is féidir leat forc a chruthú, eagarthóireachtaí a dhéanamh agus iarratas tarraingthe a chruthú.
+editor.fork_edit_description=Ní féidir leat an stórlann seo a chur in eagar go díreach. Scríobhfar na hathruithe chuig do fhorc %s , ionas gur féidir leat iarratas tarraingthe a chruthú.
+editor.fork_not_editable=Tá forc déanta agat ar an stóras seo ach ní féidir do fhorc a chur in eagar.
+editor.fork_failed_to_push_branch=Theip ar bhrainse %s a bhrú chuig do stóras.
+editor.fork_branch_exists=Tá brainse "%s" ann cheana féin i do fhorc. Roghnaigh ainm brainse nua le do thoil.
commits.desc=Brabhsáil stair athraithe cód foinse.
commits.commits=Tiomáintí
@@ -1497,7 +1509,7 @@ issues.new.clear_assignees=Ceannaitheoirí soiléir
issues.new.no_assignees=Gan aon Sannaitheoirí
issues.new.no_reviewers=Gan Léirmheastóirí
issues.new.blocked_user=Ní féidir saincheist a chruthú toisc go bhfuil úinéir an stórais bac ort.
-issues.edit.already_changed=Ní féidir athruithe a shábháil ar an tsaincheist. Dealraíonn sé gur athraigh úsáideoir eile an t-ábhar cheana féin. Athnuachan an leathanach agus déan iarracht eagarthóireacht arís chun a gcuid athruithe a sheachaint
+issues.edit.already_changed=Ní féidir athruithe ar an gceist a shábháil. Is cosúil gur athraigh úsáideoir eile an t-ábhar cheana féin. Athnuachan an leathanach agus déan iarracht eagarthóireacht arís le nach scríobhfar a gcuid athruithe thar a chéile.
issues.edit.blocked_user=Ní féidir ábhar a chur in eagar toisc go bhfuil an póstaer nó úinéir an stórais bac ort.
issues.choose.get_started=Faigh Tosaigh
issues.choose.open_external_link=Oscailte
@@ -1652,6 +1664,7 @@ issues.save=Sábháil
issues.label_title=Ainm
issues.label_description=Cur síos
issues.label_color=Dath
+issues.label_color_invalid=Dath neamhbhailí
issues.label_exclusive=Eisiach
issues.label_archive=Lipéad Cartlann
issues.label_archived_filter=Taispeáin lipéid cartlainne
@@ -1716,6 +1729,8 @@ issues.remove_time_estimate_at=baineadh meastachán ama %s
issues.time_estimate_invalid=Tá formáid meastachán ama neamhbhailí
issues.start_tracking_history=thosaigh ag obair %s
issues.tracker_auto_close=Stopfar ama go huathoibríoch nuair a dhúnfar an tsaincheist seo
+issues.stopwatch_already_stopped=Tá an lasc ama don cheist seo stoptha cheana féin
+issues.stopwatch_already_created=Tá an lasc ama don cheist seo ann cheana féin
issues.tracking_already_started=`Tá tús curtha agat cheana féin ag rianú ama ar eagrán eile !`
issues.stop_tracking=Stad uaineadóir
issues.stop_tracking_history=d'oibrigh do %[1]s %[2]s
@@ -1743,7 +1758,7 @@ issues.due_date_form=bbbb-mm-ll
issues.due_date_form_add=Cuir dáta dlite leis
issues.due_date_form_edit=Cuir in eagar
issues.due_date_form_remove=Bain
-issues.due_date_not_writer=Ní mór duit rochtain scríofa ar an stór seo d'fhonn dáta dlite eisiúna a nuashonrú.
+issues.due_date_not_writer=Ní mór duit rochtain scríbhneoireachta a fháil ar an stóras seo chun dáta dlite saincheiste a nuashonrú.
issues.due_date_not_set=Níl aon dáta dlite socraithe.
issues.due_date_added=cuireadh an dáta dlite %s %s
issues.due_date_modified=d'athraigh an dáta dlite ó %[2]s go %[1]s %[3]s
@@ -1766,9 +1781,9 @@ issues.dependency.pr_closing_blockedby=Cuireann na saincheisteanna seo a leanas
issues.dependency.issue_closing_blockedby=Tá na saincheisteanna seo a leanas bac ar dhúnadh an cheist seo
issues.dependency.issue_close_blocks=Cuireann an tsaincheist seo bac ar dhúnadh na saincheisteanna
issues.dependency.pr_close_blocks=Cuireann an iarratas tarraingthe seo bac ar dhúnadh na saincheisteanna
-issues.dependency.issue_close_blocked=Ní mór duit gach saincheist a chuireann bac ar an gceist seo a dhúnadh sular féidir leat é a dhúnadh.
+issues.dependency.issue_close_blocked=Ní mór duit gach saincheist atá ag cur bac ar an gceist seo a dhúnadh sula bhféadfaidh tú í a dhúnadh.
issues.dependency.issue_batch_close_blocked=Ní féidir saincheisteanna a roghnaíonn tú a dhúnadh, toisc go bhfuil spleáchais oscailte fós ag eisiúint #%d
-issues.dependency.pr_close_blocked=Ní mór duit gach saincheist a bhlocálann an iarratas tarraingthe seo a dhúnadh sula féidir leat é a chumasc.
+issues.dependency.pr_close_blocked=Ní mór duit gach saincheist atá ag cur bac ar an iarratas tarraingthe seo a dhúnadh sula bhféadfaidh tú é a chumasc.
issues.dependency.blocks_short=Bloic
issues.dependency.blocked_by_short=Ag brath ar
issues.dependency.remove_header=Bain spleáchas
@@ -1785,7 +1800,7 @@ issues.review.self.approval=Ní féidir leat d'iarratas tarraingthe féin a chea
issues.review.self.rejection=Ní féidir leat athruithe a iarraidh ar d'iarratas tarraingthe féin.
issues.review.approve=ceadaigh na hathruithe seo %s
issues.review.comment=athbhreithnithe %s
-issues.review.dismissed=dhiúltaigh athbhreithniú %s ó %s
+issues.review.dismissed=léirmheas %s %s curtha ar ceal
issues.review.dismissed_label=Dhiúltaigh
issues.review.left_comment=d'fhág trácht
issues.review.content.empty=Ní mór duit trácht a fhágáil a léiríonn an t-athrú (í) iarrtha.
@@ -1793,7 +1808,7 @@ issues.review.reject=athruithe iarrtha %s
issues.review.wait=iarradh athbhreithniú %s
issues.review.add_review_request=athbhreithniú iarrtha ó %s %s
issues.review.remove_review_request=iarratas athbhreithnithe bainte le haghaidh %s %s
-issues.review.remove_review_request_self=dhiúltaigh %s a athbhreithniú
+issues.review.remove_review_request_self=dhiúltaigh athbhreithniú a dhéanamh ar %s
issues.review.pending=Ar feitheamh
issues.review.pending.tooltip=Níl an nóta tráchta seo le feiceáil ag úsáideoirí eile faoi láthair. Chun do thuairimí ar feitheamh a chur isteach, roghnaigh "%s" -> "%s/%s/%s" ag barr an leathanaigh.
issues.review.review=Léirmheas
@@ -1815,7 +1830,7 @@ issues.review.requested=Athbhreithniú ar feitheamh
issues.review.rejected=Athruithe iarrtha
issues.review.stale=Nuashonraithe ó faomhadh
issues.review.unofficial=Ceadú gan áireamh
-issues.assignee.error=Níor cuireadh gach sannaí leis mar gheall ar earráid gan choinne.
+issues.assignee.error=Níor cuireadh na sannaithe go léir leis, mar gheall ar earráid gan choinne.
issues.reference_issue.body=Comhlacht
issues.content_history.deleted=scriosta
issues.content_history.edited=curtha in eagar
@@ -1832,7 +1847,7 @@ pulls.desc=Cumasaigh iarratais tarraingthe agus athbhreithnithe cód.
pulls.new=Iarratas Tarraingthe Nua
pulls.new.blocked_user=Ní féidir iarratas tarraingthe a chruthú toisc go bhfuil úinéir an stórais bac ort.
pulls.new.must_collaborator=Caithfidh tú a bheith ina chomhoibritheoir chun iarratas tarraingthe a chruthú.
-pulls.edit.already_changed=Ní féidir athruithe a shábháil ar an iarratas tarraingthe. Dealraíonn sé gur athraigh úsáideoir eile an t-ábhar cheana féin. Athnuachan an leathanach agus déan iarracht eagarthóireacht arís chun a gcuid athruithe a sheachaint
+pulls.edit.already_changed=Ní féidir athruithe ar an iarratas tarraingthe a shábháil. Is cosúil gur athraigh úsáideoir eile an t-ábhar cheana féin. Athnuachan an leathanach agus déan iarracht eagarthóireacht arís le nach ndéanfar a gcuid athruithe a fhorscríobh.
pulls.view=Féach ar Iarratas Tarraing
pulls.compare_changes=Iarratas Tarraingthe Nua
pulls.allow_edits_from_maintainers=Ceadaigh eagarthóirí ó chothabhálaí
@@ -1853,11 +1868,11 @@ pulls.show_all_commits=Taispeáin gach gealltanas
pulls.show_changes_since_your_last_review=Taispeáin athruithe ón léirmheas deiridh
pulls.showing_only_single_commit=Ag taispeáint athruithe tiomantais %[1]s amháin
pulls.showing_specified_commit_range=Ag taispeáint athruithe idir %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Roghnaigh tiomantas. Coinnigh shift + cliceáil chun raon a roghnú
+pulls.select_commit_hold_shift_for_range=Roghnaigh tiomantas. Coinnigh síos Shift agus cliceáil chun raon a roghnú.
pulls.review_only_possible_for_full_diff=Ní féidir athbhreithniú a dhéanamh ach amháin nuair a bhreathnaítear ar an difríocht iomlán
pulls.filter_changes_by_commit=Scagaigh de réir tiomantas
pulls.nothing_to_compare=Tá na brainsí seo cothrom. Ní gá iarratas tarraingthe a chruthú.
-pulls.nothing_to_compare_have_tag=Tá an brainse/clib roghnaithe cothrom.
+pulls.nothing_to_compare_have_tag=Tá na brainsí/clibeanna roghnaithe comhionann.
pulls.nothing_to_compare_and_allow_empty_pr=Tá na brainsí seo cothrom. Beidh an PR seo folamh.
pulls.has_pull_request=`Tá iarratas tarraingthe idir na brainsí seo ann cheana: %[2]s#%[3]d `
pulls.create=Cruthaigh Iarratas Tarraing
@@ -1882,7 +1897,7 @@ pulls.add_prefix=Cuir réimír %s leis
pulls.remove_prefix=Bain an réimír %s
pulls.data_broken=Tá an t-iarratas tarraingthe seo briste mar gheall ar fhaisnéis forc a bheith in easnamh.
pulls.files_conflicted=Tá athruithe ag an iarratas tarraingthe seo atá contrártha leis an spriocbhrainse.
-pulls.is_checking=Ag seiceáil le haghaidh coinbhleachtaí cumaisc ...
+pulls.is_checking=Ag seiceáil le haghaidh coinbhleachtaí cumaisc…
pulls.is_ancestor=Tá an brainse seo san áireamh cheana féin sa spriocbhrainse. Níl aon rud le cumasc.
pulls.is_empty=Tá na hathruithe ar an mbrainse seo ar an spriocbhrainse cheana féin. Is tiomantas folamh é seo.
pulls.required_status_check_failed=Níor éirigh le roinnt seiceálacha riachtanacha.
@@ -1906,16 +1921,16 @@ pulls.reject_count_1=%d iarratas athraithe
pulls.reject_count_n=%d iarratas ar athrú
pulls.waiting_count_1=%d athbhreithniú feithimh
pulls.waiting_count_n=%d athbhreithnithe feithimh
-pulls.wrong_commit_id=caithfidh comhad id a bheith ina id tiomanta ar an spriocbhrainse
+pulls.wrong_commit_id=ní mór don ID tiomantais a bheith ina ID tiomantais ar an mbrainse sprice
pulls.no_merge_desc=Ní féidir an t-iarratas tarraingthe seo a chumasc toisc go bhfuil gach rogha cumaisc stór díchumasaithe.
pulls.no_merge_helper=Cumasaigh roghanna cumaisc i socruithe an stór nó cumasc an t-iarratas tarraingthe de láimh.
pulls.no_merge_wip=Ní féidir an t-iarratas tarraingthe seo a chumasc toisc go bhfuil sé marcáilte mar obair atá ar siúl é.
-pulls.no_merge_not_ready=Níl an t-iarratas tarraingthe seo réidh le cumasc, seiceáil stádas athbhreithnithe agus seiceálacha stádais.
+pulls.no_merge_not_ready=Níl an t-iarratas tarraingthe seo réidh le cumasc. Seiceáil stádas an athbhreithnithe agus na seiceálacha stádais.
pulls.no_merge_access=Níl tú údaraithe chun an t-iarratas tarraingthe seo a chumasc.
pulls.merge_pull_request=Cruthaigh tiomantas cumaisc
-pulls.rebase_merge_pull_request=Athbhunaigh ansin go tapa ar aghaidh
-pulls.rebase_merge_commit_pull_request=Rebase ansin cruthaigh tiomantas cumaisc
+pulls.rebase_merge_pull_request=Athbhunús, ansin luasghéarú ar aghaidh
+pulls.rebase_merge_commit_pull_request=Athbhunú, ansin cruthaigh tiomantas cumasc
pulls.squash_merge_pull_request=Cruthaigh tiomantas scuaise
pulls.fast_forward_only_merge_pull_request=Go tapa ar aghaidh amháin
pulls.merge_manually=Cumaisc de láimh
@@ -1923,17 +1938,17 @@ pulls.merge_commit_id=ID an tiomantis cumaisc
pulls.require_signed_wont_sign=Éilíonn an bhrainse tiomáintí shínithe, ach ní shínífear an cumasc seo
pulls.invalid_merge_option=Ní féidir leat an rogha cumaisc seo a úsáid don iarratas tarraingthe seo.
-pulls.merge_conflict=Theip ar Cumaisc: Bhí coinbhleacht ann agus é ag cumasc. Leid: Bain triail as straitéis dhifriúil
+pulls.merge_conflict=Theip ar an gCumasc: Bhí coimhlint ann agus an cumasc á dhéanamh. Leid: Bain triail as straitéis dhifriúil.
pulls.merge_conflict_summary=Teachtaireacht Earráide
-pulls.rebase_conflict=Theip ar Chumasc: Bhí coinbhleacht ann agus tiomantas á athbhunú: %[1]s. Leid: Bain triail as straitéis eile
+pulls.rebase_conflict=Theip ar an gCumasc: Bhí coimhlint ann agus an tiomnú á athbhunú: %[1]s. Leid: Bain triail as straitéis dhifriúil.
pulls.rebase_conflict_summary=Teachtaireacht Earráide
-pulls.unrelated_histories=Theip ar Cumaisc: Ní roinneann an ceann cumaisc agus an bonn stair choiteann. Leid: Bain triail as straitéis dhifriúil
-pulls.merge_out_of_date=Theip ar Cumaisc: Agus an cumaisc á ghiniúint, nuashonraíodh an bonn. Leid: Bain triail as arís.
-pulls.head_out_of_date=Theip ar Cumaisc: Agus an cumaisc á ghiniúint, nuashonraíodh an ceann. Leid: Bain triail as arís.
-pulls.has_merged=Theip ar: Cumaisíodh an t-iarratas tarraingthe, ní féidir leat a chumasc arís nó an spriocbhrainse a athrú.
+pulls.unrelated_histories=Theip ar an gCumasc: Níl stair choiteann ag an gceann agus an bonn cumaisc. Leid: Bain triail as straitéis dhifriúil.
+pulls.merge_out_of_date=Theip ar an gCumasc: Nuashonraíodh an bonn agus an cumasc á ghiniúint. Leid: Bain triail eile as.
+pulls.head_out_of_date=Theip ar an gCumasc: Nuashonraíodh an ceannteideal agus an cumasc á ghiniúint. Leid: Bain triail eile as.
+pulls.has_merged=Theip air: Tá an t-iarratas tarraingthe cumasctha. Ní féidir leat cumasc arís ná an brainse sprice a athrú.
pulls.push_rejected=Theip ar Brúigh: Diúltaíodh don bhrú. Déan athbhreithniú ar na Git Hooks don stór seo.
pulls.push_rejected_summary=Teachtaireacht Diúltaithe Iomlán
-pulls.push_rejected_no_message=Theip ar Brúigh: Diúltaíodh don bhrú ach ní raibh aon teachtaireacht iargúlta ann. Déan athbhreithniú ar Git Hooks don stór seo
+pulls.push_rejected_no_message=Theip ar Bhrú: Diúltaíodh don bhrú ach ní raibh aon teachtaireacht iargúlta ann. Athbhreithnigh na Git Hooks don stór seo.
pulls.open_unmerged_pull_exists=`Ní féidir leat oibríocht athoscailte a dhéanamh toisc go bhfuil iarratas tarraingthe ar feitheamh (#%d) le hairíonna comhionanna. `
pulls.status_checking=Tá roinnt seiceála ar feitheamh
pulls.status_checks_success=D'éirigh le gach seiceáil
@@ -1957,9 +1972,9 @@ pulls.cmd_instruction_checkout_title=Seiceáil
pulls.cmd_instruction_checkout_desc=Ó stór tionscadail, seiceáil brainse nua agus déan tástáil ar na hathruithe.
pulls.cmd_instruction_merge_title=Cumaisc
pulls.cmd_instruction_merge_desc=Cumaisc na hathruithe agus nuashonrú ar Gitea.
-pulls.cmd_instruction_merge_warning=Rabhadh: Ní féidir leis an oibríocht seo an t-iarratas tarraingthe a chumasc toisc nach raibh "cumasc láimhe uathoibríoch" cumasaithe
+pulls.cmd_instruction_merge_warning=Rabhadh: Ní féidir iarratas tarraingthe cumaisc a dhéanamh leis an oibríocht seo mar nach bhfuil "autodetect manual merge" cumasaithe.
pulls.clear_merge_message=Glan an teachtaireacht chumaisc
-pulls.clear_merge_message_hint=Má imrítear an teachtaireacht chumaisc ní bhainfear ach ábhar na teachtaireachta tiomanta agus coimeádfar leantóirí git ginte ar nós "Co-Authored-By …".
+pulls.clear_merge_message_hint=Má ghlanann tú an teachtaireacht chumasc, ní bhainfear ach ábhar na teachtaireachta tiomantais agus coinneofar leantóirí git ginte amhail "Comhúdaraithe ag…".
pulls.auto_merge_button_when_succeed=(Nuair a éiríonn le seiceálacha)
pulls.auto_merge_when_succeed=Cumaisc uathoibríoch nuair a éiríonn
@@ -2020,12 +2035,12 @@ milestones.filter_sort.most_issues=Saincheisteanna is mó
milestones.filter_sort.least_issues=Saincheisteanna is lú
signing.will_sign=Síneofar an gealltanas seo le heochair "%s".
-signing.wont_sign.error=Bhí earráid ann agus tú ag seiceáil an féidir an tiomantas a shíniú.
+signing.wont_sign.error=Tharla earráid agus seiceáil á dhéanamh an bhféadfaí an tiomnú a shíniú.
signing.wont_sign.nokey=Níl aon eochair ar fáil chun an tiomantas seo a shíniú.
signing.wont_sign.never=Ní shínítear tiomáintí riamh.
signing.wont_sign.always=Sínítear tiomáintí i gcónaí.
signing.wont_sign.pubkey=Ní shíníofar an tiomantas toisc nach bhfuil eochair phoiblí agat a bhaineann le do chuntas.
-signing.wont_sign.twofa=Caithfidh fíordheimhniú dhá-fhachtóir a bheith agat chun tiomáintí a shíniú.
+signing.wont_sign.twofa=Ní mór fíordheimhniú dhá fhachtóir a bheith cumasaithe agat le go síneofar gealltanais.
signing.wont_sign.parentsigned=Ní shíníofar an tiomantas toisc nach bhfuil an tiomantas tuismitheora sínithe.
signing.wont_sign.basesigned=Ní shínífear an cumasc toisc nach bhfuil an tiomantas bunaithe sínithe.
signing.wont_sign.headsigned=Ní shínífear an cumasc toisc nach bhfuil an tiomantas ceann sínithe.
@@ -2111,7 +2126,7 @@ activity.title.releases_1=Scaoileadh %d
activity.title.releases_n=Eisiúintí %d
activity.title.releases_published_by=%s foilsithe ag %s
activity.published_release_label=Foilsithe
-activity.no_git_activity=Níor rinneadh aon ghníomhaíocht tiomanta sa tréimhse seo.
+activity.no_git_activity=Ní raibh aon ghníomhaíocht tiomantais ann sa tréimhse seo.
activity.git_stats_exclude_merges=Gan cumaisc a áireamh,
activity.git_stats_author_1=%d údar
activity.git_stats_author_n=%d údair
@@ -2139,13 +2154,13 @@ contributors.contribution_type.additions=Breiseanna
contributors.contribution_type.deletions=Scriosadh
settings=Socruithe
-settings.desc=Is é socruithe an áit ar féidir leat na socruithe don stóras a bhainistiú
+settings.desc=Is i socruithe is féidir leat na socruithe don stór a bhainistiú.
settings.options=Stóras
settings.public_access=Rochtain Phoiblí
settings.public_access_desc=Cumraigh ceadanna rochtana an chuairteora phoiblí chun réamhshocruithe an stóras seo a shárú.
settings.public_access.docs.not_set=Gan Socrú: níl cead rochtana poiblí breise ar bith. Leanann cead an chuairteora infheictheacht an stór agus ceadanna na mball.
settings.public_access.docs.anonymous_read=Léamh gan Ainm: is féidir le húsáideoirí nach bhfuil logáilte isteach rochtain a fháil ar an aonad le cead léite.
-settings.public_access.docs.everyone_read=Léamh ag Gach Duine: is féidir le gach úsáideoir logáilte isteach rochtain a fháil ar an aonad le cead léite. Ciallaíonn cead léite na n-aonad eisiúna/iarrataí tarraingthe freisin gur féidir le húsáideoirí saincheisteanna nua/iarratais tarraingthe a chruthú.
+settings.public_access.docs.everyone_read=Léigh Gach Duine: is féidir le gach úsáideoir atá logáilte isteach rochtain a fháil ar an aonad le cead léite. Ciallaíonn cead léite na n-aonad saincheiste/iarratais tarraingthe freisin gur féidir le húsáideoirí saincheisteanna/iarratais tarraingthe nua a chruthú.
settings.public_access.docs.everyone_write=Scríobh Gach Duine: tá cead scríofa ag gach úsáideoir logáilte isteach don aonad. Ní thacaíonn ach aonad Vicí leis an gcead seo.
settings.collaboration=Comhoibritheoirí
settings.collaboration.admin=Riarthóir
@@ -2153,6 +2168,7 @@ settings.collaboration.write=Scríobh
settings.collaboration.read=Léigh
settings.collaboration.owner=Úinéir
settings.collaboration.undefined=Neamhshainithe
+settings.collaboration.per_unit=Ceadanna Aonaid
settings.hooks=Crúcaí Gréasán
settings.githooks=Crúcanna Git
settings.basic_settings=Socruithe Bunúsacha
@@ -2162,7 +2178,7 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Socraigh do thio
settings.mirror_settings.docs.disabled_push_mirror.instructions=Socraigh do thionscadal chun tiomáintí, clibeanna agus brainsí a tharraingt go huathoibríoch ó stóras eile.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Faoi láthair, ní féidir é seo a dhéanamh ach sa roghchlár "Imirce Nua". Le haghaidh tuilleadh eolais, téigh i gcomhairle le do thoil:
settings.mirror_settings.docs.disabled_push_mirror.info=Chuir riarthóir do shuíomh faoi dhíchumasú scátháin bhrú.
-settings.mirror_settings.docs.no_new_mirrors=Tá do stóras ag teacht le hathruithe chuig nó ó stóras eile. Cuimhnigh le do thoil nach féidir leat scátháin nua a chruthú faoi láthair.
+settings.mirror_settings.docs.no_new_mirrors=Tá do stóras ag scáthánú athruithe chuig nó ó stór eile. Coinnigh i gcuimhne nach féidir leat aon scátháin nua a chruthú faoi láthair.
settings.mirror_settings.docs.can_still_use=Cé nach féidir leat scátháin atá ann cheana a mhodhnú nó cinn nua a chruthú, féadfaidh tú do scáthán atá ann cheana a úsáid fós.
settings.mirror_settings.docs.pull_mirror_instructions=Chun scáthán tarraingthe a shocrú, téigh i gcomhairle le do thoil:
settings.mirror_settings.docs.more_information_if_disabled=Is féidir leat tuilleadh eolais a fháil faoi scátháin bhrú agus tarraingthe anseo:
@@ -2237,7 +2253,7 @@ settings.admin_indexer_commit_sha=SHA Innéacsaithe Deiridh
settings.admin_indexer_unindexed=Neamh-innéacsaithe
settings.reindex_button=Cuir le Scuaine Reindex
settings.reindex_requested=Athinnéacsú Iarrtha
-settings.admin_enable_close_issues_via_commit_in_any_branch=Saincheist a dhúnadh trí ghealltanas a rinneadh i mbrainse neamh-mhainneachtana
+settings.admin_enable_close_issues_via_commit_in_any_branch=Dún saincheist trí thiomantas a rinneadh i mbrainse neamhréamhshocraithe
settings.danger_zone=Crios Contúirte
settings.new_owner_has_same_repo=Tá stóras leis an ainm céanna ag an úinéir nua cheana féin. Roghnaigh ainm eile le do thoil.
settings.convert=Tiontaigh go Stóras Rialta
@@ -2259,7 +2275,7 @@ settings.transfer_abort_invalid=Ní féidir leat aistriú stóras nach bhfuil an
settings.transfer_abort_success=Cuireadh an t-aistriú stóras chuig %s ar ceal go rathúil.
settings.transfer_desc=Aistrigh an stóras seo chuig úsáideoir nó chuig eagraíocht a bhfuil cearta riarthóra agat ina leith.
settings.transfer_form_title=Cuir isteach ainm an stóras mar dhearbhú:
-settings.transfer_in_progress=Tá aistriú leanúnach ann faoi láthair. Cealaigh é más mian leat an stóras seo a aistriú chuig úsáideoir eile.
+settings.transfer_in_progress=Tá aistriú ar siúl faoi láthair. Cealaigh é más mian leat an stóras seo a aistriú chuig úsáideoir eile.
settings.transfer_notices_1=- Caillfidh tú rochtain ar an stóras má aistríonn tú é chuig úsáideoir aonair.
settings.transfer_notices_2=- Coimeádfaidh tú rochtain ar an stóras má aistríonn tú é chuig eagraíocht a bhfuil (comh)úinéir agat.
settings.transfer_notices_3=- Má tá an stóras príobháideach agus má aistrítear é chuig úsáideoir aonair, cinnteoidh an gníomh seo go bhfuil ar a laghad cead léite ag an úsáideoir (agus athraíonn sé ceadanna más gá).
@@ -2274,13 +2290,13 @@ settings.trust_model.default=Múnla Iontaobhais Réamhshocraithe
settings.trust_model.default.desc=Úsáid an tsamhail iontaobhais stórais réamhshocraithe don suiteáil
settings.trust_model.collaborator=Comhoibritheoir
settings.trust_model.collaborator.long=Comhoibritheoir: Sínithe muinín ag comhoibrithe
-settings.trust_model.collaborator.desc=Déanfar sínithe bailí ó chomhoibritheoirí an stóras seo a mharcáil mar 'iontaofa' – (cibé acu a mheaitseálann siad an tiomnóir nó nach bhfuil). Seachas sin, marcálfar sínithe bailí mar 'neamhiontaofa' má mheaitseálann an síniú an tiomnóir agus mar 'neamh-mheaitseáilte' mura bhfuil.
+settings.trust_model.collaborator.desc=Déanfar sínithe bailí ó chomhoibritheoirí an stórais seo a mharcáil mar "iontaofa", cibé acu a mheaitseálann siad an tiomnóir nó nach meaitseálann. Seachas sin, déanfar sínithe bailí a mharcáil mar "neamhiontaofa" má mheaitseálann an síniú an tiomnóir agus "gan mheaitseáil" mura bhfuil.
settings.trust_model.committer=Coimisitheoir
-settings.trust_model.committer.long=Gealltóir: Sínithe iontaobhais a mheaitseálann na coimitheoirí (Meaitseálann sé seo le GitHub agus cuirfidh sé iallach ar Gitea gealltanais sínithe Gitea a bheith mar an tiomnóir)
-settings.trust_model.committer.desc=Ní mharcálfar "muinín" ar shínithe bailí ach amháin má mheaitseálann siad leis an gcoiste, nó déanfar iad a mharcáil "gan mheaitseáil". Cuireann sé seo iachall ar Gitea a bheith mar an tiomnóir ar ghealltanais sínithe agus an fíor-chimisteoir marcáilte mar Comhúdar: agus Co-tiomanta ag: leantóir sa chimiú. Caithfidh an eochair réamhshocraithe Gitea a bheith ag teacht le hÚsáideoir sa bhunachar sonraí.
+settings.trust_model.committer.long=Tiomnaithe: Sínithe muiníne a mheaitseálann tiomnóirí. Meaitseálann sé seo iompar GitHub agus cuirfidh sé iallach ar thiomnóirí atá sínithe ag Gitea Gitea a bheith mar an tiomnóir.
+settings.trust_model.committer.desc=Ní mharcálfar sínithe bailí mar "iontaofa" ach amháin má mheaitseálann siad an tiomnaí, nó marcálfar iad mar "gan mheaitseáil". Cuireann sé seo iallach ar Gitea a bheith ina tiomnaí ar thiomnuithe sínithe, agus an tiomnaí iarbhír marcáilte mar Chomhúdaraithe ag: agus Co-thiomnaithe ag: leantóir sa tiomnú. Caithfidh eochair réamhshocraithe Gitea a bheith ag teacht le húsáideoir sa bhunachar sonraí.
settings.trust_model.collaboratorcommitter=Comhoibritheo+Coimiteoir
settings.trust_model.collaboratorcommitter.long=Comhoibrí+Coiste: sínithe muiníne ó chomhoibrithe a mheaitseálann an tiomnóir
-settings.trust_model.collaboratorcommitter.desc=Déanfar sínithe bailí ó chomhoibritheoirí ar an stór seo a mharcáil "muinín" má mheaitseálann siad leis an gcoiste. Seachas sin, marcálfar "neamhiontaofa" ar shínithe bailí má mheaitseálann an síniú leis an gcoiste agus "gan mheaitseáil" ar shlí eile. Cuirfidh sé seo iallach ar Gitea a mharcáil mar an tiomnóir ar ghealltanais shínithe agus an fíor-choiste a bheith marcáilte mar Comhúdaraithe Ag: agus Comhthiomanta Ag: leantóir sa ghealltanas. Caithfidh an eochair réamhshocraithe Gitea a bheith ag teacht le hÚsáideoir sa bhunachar sonraí.
+settings.trust_model.collaboratorcommitter.desc=Marcálfar sínithe bailí ó chomhoibritheoirí an stórais seo mar "iontaofa" má mheaitseálann siad an tiomnaí. Seachas sin, marcálfar sínithe bailí mar "neamhiontaofa" má mheaitseálann an síniú an tiomnaí agus "gan mheaitseáil" murach sin. Cuirfidh sé seo iallach ar Gitea a bheith marcáilte mar an tiomnaí ar thiomnuithe sínithe, agus an tiomnaí iarbhír marcáilte mar Chomhúdaraithe ag: agus Co-Tiomnaithe ag: leantóir sa tiomnú. Ní mór don eochair réamhshocraithe Gitea a bheith ag teacht le húsáideoir sa bhunachar sonraí.
settings.wiki_delete=Scrios Sonraí Vicí
settings.wiki_delete_desc=Tá sonraí wiki stóras a scriosadh buan agus ní féidir iad a chur ar ais.
settings.wiki_delete_notices_1=- Scriosfaidh agus díchumasóidh sé seo an stóras vicí do %s go buan.
@@ -2289,7 +2305,7 @@ settings.wiki_deletion_success=Scriosadh sonraí vicí an stórais.
settings.delete=Scrios an Stóras seo
settings.delete_desc=Tá scriosadh stóras buan agus ní féidir é a chealú.
settings.delete_notices_1=- NÍ FÉIDIR an oibríocht seo a chealú.
-settings.delete_notices_2=- Scriosfaidh an oibríocht seo stór %s go buan lena n-áirítear cód, ceisteanna, nótaí tráchta, sonraí vicí agus socruithe comhoibrithe.
+settings.delete_notices_2=- Scriosfaidh an oibríocht seo an stórlann %s go buan, lena n-áirítear cód, saincheisteanna, tuairimí, sonraí vicí agus socruithe comhoibrithe.
settings.delete_notices_fork_1=- Beidh forcanna den stóras seo neamhspleách tar éis iad a scriosadh.
settings.deletion_success=Tá an stóras scriosta.
settings.update_settings_success=Nuashonraíodh na socruithe stóras.
@@ -2311,8 +2327,8 @@ settings.team_not_in_organization=Níl an fhoireann san eagraíocht chéanna lei
settings.teams=Foirne
settings.add_team=Cuir Foireann leis
settings.add_team_duplicate=Tá an stóras ag an bhfoireann cheana féin
-settings.add_team_success=Tá rochtain ag an bhfoireann anois ar an stóras.
-settings.change_team_permission_tip=Tá cead na foirne socraithe ar leathanach socraithe foirne agus ní féidir é a athrú in aghaidh an stóras
+settings.add_team_success=Tá rochtain ag an bhfoireann ar an stóras anois.
+settings.change_team_permission_tip=Tá cead na foirne socraithe ar leathanach socruithe na foirne agus ní féidir é a athrú in aghaidh an stórais
settings.delete_team_tip=Tá rochtain ag an bhfoireann seo ar gach stórais agus ní féidir í a bhaint
settings.remove_team_success=Tá rochtain na foirne ar an stóras bainte amach.
settings.add_webhook=Cuir Crúca Gréasán leis
@@ -2321,8 +2337,8 @@ settings.hooks_desc=Déanann Crúcaí Gréasán iarratais HTTP POST go huathoibr
settings.webhook_deletion=Bain Crúca Gréasán
settings.webhook_deletion_desc=Scriostar a shocruithe agus a stair seachadta a bhaineann le Crúca Gréasán a bhaint. Lean ar aghaidh?
settings.webhook_deletion_success=Tá an Crúca Gréasán bainte amach.
-settings.webhook.test_delivery=Seachadadh Tástála
-settings.webhook.test_delivery_desc=Déan tástáil ar an Crúca Gréasán seo le himeacht bhréige.
+settings.webhook.test_delivery=Imeacht Brúigh Tástála
+settings.webhook.test_delivery_desc=Déan tástáil ar an webhook seo le teagmhas brú bréige.
settings.webhook.test_delivery_desc_disabled=Chun an Crúca Gréasán seo a thástáil le himeacht bhréige, gníomhachtaigh é.
settings.webhook.request=Iarratas
settings.webhook.response=Freagra
@@ -2342,6 +2358,7 @@ settings.payload_url=URL spriocdhírithe
settings.http_method=Modh HTTP
settings.content_type=Cineál Ábhar POST
settings.secret=Rúnda
+settings.webhook_secret_desc=Más féidir le freastalaí an webhook rún a úsáid, is féidir leat lámhleabhar an webhook a leanúint agus rún a líonadh isteach anseo.
settings.slack_username=Ainm úsáideora
settings.slack_icon_url=URL deilbhín
settings.slack_color=Dath
@@ -2371,7 +2388,7 @@ settings.event_repository=Stóras
settings.event_repository_desc=Stóras a cruthaíodh nó a scriosadh.
settings.event_header_issue=Imeachtaí Eisiúint
settings.event_issues=Saincheisteanna
-settings.event_issues_desc=Osclaíodh, dúnadh, athosclaíodh nó cuireadh an cheist in eagar.
+settings.event_issues_desc=Ceist oscailte, dúnta, athoscailte, eagarthóireachta nó scriosta.
settings.event_issue_assign=Saincheist Sannaithe
settings.event_issue_assign_desc=Eisiúint sannta nó neamhshannta.
settings.event_issue_label=Eisiúint Lipéadaithe
@@ -2382,7 +2399,7 @@ settings.event_issue_comment=Trácht Eisiúna
settings.event_issue_comment_desc=Trácht eisiúna cruthaithe, curtha in eagar nó a scriosadh.
settings.event_header_pull_request=Tarraingt Imeachtaí Iarratas
settings.event_pull_request=Iarratas Tarraingthe
-settings.event_pull_request_desc=Iarratas tarraingthe oscailte, dúnta, athoscailte nó curtha in eagar.
+settings.event_pull_request_desc=Iarratas tarraingthe a osclaíodh, a dúnadh, a hathosclaíodh, a cuireadh in eagar nó a scriosadh.
settings.event_pull_request_assign=Iarratas Tarraingthe Sannta
settings.event_pull_request_assign_desc=Iarratas tarraingthe sannta nó neamhshannta.
settings.event_pull_request_label=Iarratas Tarraingthe Lipéadaithe
@@ -2400,6 +2417,8 @@ settings.event_pull_request_review_request_desc=Tarraing athbhreithniú iarratai
settings.event_pull_request_approvals=Ceaduithe Iarratais Tarraing
settings.event_pull_request_merge=Cumaisc Iarratas Tarraing
settings.event_header_workflow=Imeachtaí Sreabhadh Oibre
+settings.event_workflow_run=Rith Sreabhadh Oibre
+settings.event_workflow_run_desc=Tá rith Sreabhadh Oibre Gníomhartha Gitea sa scuaine, ag fanacht, ar siúl, nó críochnaithe.
settings.event_workflow_job=Poist Sreabhadh Oibre
settings.event_workflow_job_desc=Gitea Actions Sreabhadh oibre post ciúáilte, ag fanacht, ar siúl, nó críochnaithe.
settings.event_package=Pacáiste
@@ -2525,7 +2544,7 @@ settings.block_on_official_review_requests_desc=Ní bheidh sé indéanta cumasc
settings.block_outdated_branch=Cuir bac ar chumasc má tá an t-iarratas tarraingthe as dáta
settings.block_outdated_branch_desc=Ní bheidh cumasc indéanta nuair a bhíonn ceannbhrainse taobh thiar de bhronnbhrainse.
settings.block_admin_merge_override=Ní mór do riarthóirí rialacha cosanta brainse a leanúint
-settings.block_admin_merge_override_desc=Ní mór do riarthóirí rialacha cosanta brainse a leanúint agus ní féidir leo dul timpeall air.
+settings.block_admin_merge_override_desc=Ní mór do riarthóirí rialacha cosanta brainse a leanúint agus ní féidir leo iad a sheachaint.
settings.default_branch_desc=Roghnaigh brainse stóras réamhshocraithe le haghaidh iarratas tarraingte agus geallann an cód:
settings.merge_style_desc=Stíleanna Cumaisc
settings.default_merge_style_desc=Stíl Cumaisc Réamhshocraithe
@@ -2552,10 +2571,10 @@ settings.matrix.homeserver_url=URL sheirbhíse baile
settings.matrix.room_id=ID seomra
settings.matrix.message_type=Cineál teachtaireachta
settings.visibility.private.button=Déan Príobháideach
-settings.visibility.private.text=Ní amháin go gcuirfidh an infheictheacht a athrú go príobháideach an repo infheicthe amháin do bhaill cheadaithe ach féadfaidh sé an gaol idir é agus forcanna, féachadóirí agus réaltaí a bhaint.
+settings.visibility.private.text=Má athraítear an infheictheacht go príobháideach, ní bheidh an stór le feiceáil ach ag baill cheadaithe agus d’fhéadfadh sé go mbainfí an gaol idir é agus forcanna, faireoirí agus réaltaí atá ann cheana féin.
settings.visibility.private.bullet_title=An infheictheacht a athrú go toil phríobháide
-settings.visibility.private.bullet_one=Déan an stóras infheicthe do chomhaltaí ceadaithe amháin.
-settings.visibility.private.bullet_two=B’fhéidir go mbainfear an gaol idir é agus forcanna , faireoirí , agus réaltaí .
+settings.visibility.private.bullet_one=Déan an stóras le feiceáil ag baill cheadaithe amháin.
+settings.visibility.private.bullet_two=D’fhéadfadh sé an gaol idir é agus forcanna , faireoirí , agus réaltaí a bhaint.
settings.visibility.public.button=Déan Poiblí
settings.visibility.public.text=Má athraíonn an infheictheacht don phobal, beidh an stóras le feiceáil do dhuine ar bith.
settings.visibility.public.bullet_title=Athróidh an infheictheacht go poiblí:
@@ -2574,7 +2593,7 @@ settings.archive.tagsettings_unavailable=Níl socruithe clibeanna ar fáil má t
settings.archive.mirrors_unavailable=Níl scátháin ar fáil má tá an stóras i gcartlann.
settings.unarchive.button=Stóras gan cartlann
settings.unarchive.header=Díchartlannaigh an stóras seo
-settings.unarchive.text=Beidh an stóras a dhícheangal ag athghairm a chumas chun tiomanta agus brúigh a fháil, chomh maith le fadhbanna nua agus iarratais tarraing.
+settings.unarchive.text=Má dhíchartlannaítear an stóras, athbhunófar a chumas chun gealltanais agus brúnna a fháil, chomh maith le saincheisteanna nua agus iarratais tarraingthe.
settings.unarchive.success=Rinneadh an stóras a dhíchartlann go rathúil.
settings.unarchive.error=Tharla earráid agus tú ag iarraidh an stóras a dhíchartlannú. Féach an logáil le haghaidh tuilleadh sonraí.
settings.update_avatar_success=Nuashonraíodh avatar an stóras.
@@ -2592,11 +2611,11 @@ settings.lfs_invalid_locking_path=Cosan neamhbhailí: %s
settings.lfs_invalid_lock_directory=Ní féidir eolaire a ghlasáil: %s
settings.lfs_lock_already_exists=Tá an glas ann cheana féin: %s
settings.lfs_lock=Glas
-settings.lfs_lock_path=Cosán comhad le haghaidh glasáil...
+settings.lfs_lock_path=Cosán comhaid le glasáil…
settings.lfs_locks_no_locks=Gan Glais
settings.lfs_lock_file_no_exist=Níl an comhad faoi ghlas sa bhrainse réamhshocraithe
settings.lfs_force_unlock=Díghlasáil Fórsa
-settings.lfs_pointers.found=Aimsíodh %d pointeoir(í) blob - %d bainteach, %d neamhghaolmhar (%d in easnamh ón siopa)
+settings.lfs_pointers.found=Fuarthas %d pointeoir(í) bloba — %d gaolmhar, %d neamhghaolmhar (%d ar iarraidh ón stóras)
settings.lfs_pointers.sha=SHA Blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=I Stóras
@@ -2754,6 +2773,8 @@ branch.new_branch_from=`Cruthaigh brainse nua ó "%s"`
branch.renamed=Ainmníodh brainse %s go %s.
branch.rename_default_or_protected_branch_error=Ní féidir ach le riarthóirí brainsí réamhshocraithe nó cosanta a athainmniú.
branch.rename_protected_branch_failed=Tá an brainse seo faoi chosaint ag rialacha cosanta domhanda.
+branch.commits_divergence_from=Difríocht tiomantais: %[1]d taobh thiar agus %[2]d chun tosaigh ar %[3]s
+branch.commits_no_divergence=Mar an gcéanna le brainse %[1]s
tag.create_tag=Cruthaigh clib %s
tag.create_tag_operation=Cruthaigh clib
@@ -2767,6 +2788,7 @@ topic.done=Déanta
topic.count_prompt=Ní féidir leat níos mó ná 25 topaicí a roghnú
topic.format_prompt=Ní mór do thopaicí tosú le litir nó uimhir, is féidir daiseanna ('-') agus poncanna ('.') a áireamh, a bheith suas le 35 carachtar ar fad. Ní mór litreacha a bheith i litreacha beaga.
+find_file.follow_symlink=Lean an nasc siombalach seo go dtí an áit a bhfuil sé ag pointeáil air
find_file.go_to_file=Téigh go dtí an comhad
find_file.no_matching=Níl aon chomhad meaitseála le fáil
@@ -2776,7 +2798,7 @@ error.csv.invalid_field_count=Ní féidir an comhad seo a rindreáil toisc go bh
error.broken_git_hook=Is cosúil go bhfuil crúcaí git den stór seo briste. Lean an doiciméadúchán chun iad a cheartú, ansin brúigh roinnt gealltanas chun an stádas a athnuachan.
[graphs]
-component_loading=Á lódáil %s...
+component_loading=Ag lódáil %s…
component_loading_failed=Ní fhéadfaí %s a luchtú
component_loading_info=Seans go dtógfaidh sé seo beagán…
component_failed_to_load=Tharla earráid gan choinne.
@@ -2807,6 +2829,7 @@ team_permission_desc=Cead
team_unit_desc=Ceadaigh Rochtain ar Rannóga Stóras
team_unit_disabled=(Díchumasaithe)
+form.name_been_taken=Tá ainm na heagraíochta "%s" tógtha cheana féin.
form.name_reserved=Tá an t-ainm eagraíochta "%s" curtha in áirithe.
form.name_pattern_not_allowed=Ní cheadaítear an patrún "%s" in ainm eagraíochta.
form.create_org_not_allowed=Níl cead agat eagraíocht a chruthú.
@@ -2814,7 +2837,7 @@ form.create_org_not_allowed=Níl cead agat eagraíocht a chruthú.
settings=Socruithe
settings.options=Eagraíocht
settings.full_name=Ainm Iomlán
-settings.email=Ríomhphost Teagmhála
+settings.email=Seoladh Ríomhphoist Teagmhála
settings.website=Láithreán Gréasáin
settings.location=Suíomh
settings.permission=Ceadanna
@@ -2828,15 +2851,28 @@ settings.visibility.private_shortname=Príobháideach
settings.update_settings=Nuashonrú Socruithe
settings.update_setting_success=Nuashonraíodh socruithe eagraíochta.
-settings.change_orgname_prompt=Nóta: Athróidh ainm na heagraíochta ag athrú URL d'eagraíochta agus saorfar an sean-ainm.
-settings.change_orgname_redirect_prompt=Déanfaidh an sean-ainm a atreorú go dtí go n-éilítear é.
+
+settings.rename=Athainmnigh an Eagraíocht
+settings.rename_desc=Má athraíonn tú ainm na heagraíochta, athrófar URL d’eagraíochta freisin agus saorfar an seanainm.
+settings.rename_success=Athainmníodh an eagraíocht %[1]s go %[2]s go rathúil.
+settings.rename_no_change=Níl ainm na heagraíochta athraithe.
+settings.rename_new_org_name=Ainm Nua na hEagraíochta
+settings.rename_failed=Theip ar athainmniú na heagraíochta mar gheall ar earráid inmheánach
+settings.rename_notices_1=NÍ FÉIDIR an oibríocht seo a chealú.
+settings.rename_notices_2=Déanfar an seanainm a atreorú go dtí go n-éileofar é.
+
settings.update_avatar_success=Nuashonraíodh avatar na heagraíochta.
settings.delete=Scrios Eagraíocht
settings.delete_account=Scrios an Eagraíocht seo
settings.delete_prompt=Bainfear an eagraíocht go buan. NÍ FÉIDIR é seo a chealú!
+settings.name_confirm=Cuir isteach ainm na heagraíochta mar dheimhniú:
+settings.delete_notices_1=NÍ FÉIDIR an oibríocht seo a chealú.
+settings.delete_notices_2=Scriosfaidh an oibríocht seo go buan gach stórais de chuid %s , lena n-áirítear cód, saincheisteanna, tuairimí, sonraí vicí agus socruithe comhoibritheora.
+settings.delete_notices_3=Scriosfaidh an oibríocht seo gach pacáiste de chuid %s go buan.
+settings.delete_notices_4=Scriosfaidh an oibríocht seo gach tionscadal de chuid %s go buan.
settings.confirm_delete_account=Deimhnigh scriosadh
-settings.delete_org_title=Scrios Eagraíocht
-settings.delete_org_desc=Scriosfar an eagraíocht seo go buan. Lean ar aghaidh?
+settings.delete_failed=Theip ar an eagraíocht a scriosadh mar gheall ar earráid inmheánach
+settings.delete_successful=Scriosadh an eagraíocht %s go rathúil.
settings.hooks_desc=Cuir crúcaí gréasán in leis a spreagfar do gach stóras faoin eagraíocht seo.
settings.labels_desc=Cuir lipéid leis ar féidir iad a úsáid ar shaincheisteanna do gach stóras faoin eagraíocht seo.
@@ -2892,7 +2928,7 @@ teams.remove_all_repos_title=Bain gach stórais foirne
teams.remove_all_repos_desc=Bainfidh sé seo gach stórais ón bhfoireann.
teams.add_all_repos_title=Cuir gach stórais leis
teams.add_all_repos_desc=Cuirfidh sé seo stórais uile na heagraíochta leis an bhfoireann.
-teams.add_nonexistent_repo=Níl an stóras atá tú ag iarraidh a chur leis ann, cruthaigh é ar dtús.
+teams.add_nonexistent_repo=Níl an stóras atá tú ag iarraidh a chur leis ann. Cruthaigh í ar dtús le do thoil.
teams.add_duplicate_users=Is ball foirne é an úsáideoir cheana féin.
teams.repos.none=Ní raibh rochtain ag an bhfoireann seo ar aon stóras.
teams.members.none=Níl aon bhaill ar an bhfoireann seo.
@@ -2933,7 +2969,7 @@ repositories=Stórais
hooks=Crúcaí Gréasán
integrations=Comhtháthaithe
authentication=Foinsí Fíordheimhnithe
-emails=Ríomhphoist Úsáideoirí
+emails=Seoltaí Ríomhphoist Úsáideoirí
config=Cumraíocht
config_summary=Achoimre
config_settings=Socruithe
@@ -2965,11 +3001,11 @@ dashboard.cron.cancelled=Cron: %[1]s cealaithe: %[3]s
dashboard.cron.error=Earráid i gCron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s críochnaithe
dashboard.delete_inactive_accounts=Scrios gach cuntas neamhghníomhach
-dashboard.delete_inactive_accounts.started=Tasc scriostha gach cuntas neamhghníomhachtaithe tosaithe.
+dashboard.delete_inactive_accounts.started=Cuireadh tús leis an tasc chun na cuntais dhíghníomhachtaithe go léir a scriosadh
dashboard.delete_repo_archives=Scrios gach cartlann stórais (ZIP, TAR.GZ, srl.)
-dashboard.delete_repo_archives.started=Scrios gach tasc cartlann stórais a thosaigh.
+dashboard.delete_repo_archives.started=Cuireadh tús leis an tasc chun gach cartlann stórtha a scriosadh
dashboard.delete_missing_repos=Scrios gach stóras atá in easnamh ar a gcuid comhad Git
-dashboard.delete_missing_repos.started=Scrios gach stóras atá in easnamh ar a dtasc comhaid Git a thosaigh.
+dashboard.delete_missing_repos.started=Cuireadh tús leis an tasc chun na stórais uile a scriosadh nach bhfuil a gcomhaid Git iontu
dashboard.delete_generated_repository_avatars=Scrios abhatáranna stórtha ginte
dashboard.sync_repo_branches=Sync brainsí caillte ó shonraí git go bunachair sonraí
dashboard.sync_repo_tags=Clibeanna sioncraigh ó shonraí git go bunachar sonraí
@@ -2977,17 +3013,17 @@ dashboard.update_mirrors=Scátháin a nuashonrú
dashboard.repo_health_check=Seiceáil sláinte gach stóras
dashboard.check_repo_stats=Seiceáil gach staitisticí stórais
dashboard.archive_cleanup=Scrios sean-chartlanna stórais
-dashboard.deleted_branches_cleanup=Brainsí scriosta a ghlanadh
+dashboard.deleted_branches_cleanup=Glan suas brainsí scriosta
dashboard.update_migration_poster_id=Nuashonraigh ID póstaer imir
-dashboard.git_gc_repos=Bailíonn truflais gach stórais
-dashboard.resync_all_sshkeys=Nuashonraigh an comhad '.ssh/authorized_keys' le heochracha Gitea SSH.
-dashboard.resync_all_sshprincipals=Nuashonraigh an comhad '.ssh/authorized_principals' le príomhphrionsabail Gitea SSH.
-dashboard.resync_all_hooks=Athshioncrónaigh crúcaí réamhfhála, nuashonraithe agus iar-fhála na stórtha go léir.
+dashboard.git_gc_repos=Bailitheoir bruscair gach stórais
+dashboard.resync_all_sshkeys=Nuashonraigh an comhad '.ssh/authorized_keys' le heochracha SSH Gitea
+dashboard.resync_all_sshprincipals=Nuashonraigh an comhad '.ssh/authorized_principals' le príomhoidí SSH Gitea
+dashboard.resync_all_hooks=Athshioncrónaigh crúcaí réamhghlactha, nuashonraithe agus iarghlactha na stórais uile
dashboard.reinit_missing_repos=Aththosaigh gach stórais Git atá in easnamh a bhfuil taifid ann dóibh
dashboard.sync_external_users=Sioncrónaigh sonraí úsáideoirí seachtracha
-dashboard.cleanup_hook_task_table=Tábla hook_task glantacháin
-dashboard.cleanup_packages=Pacáistí glanta in éag
-dashboard.cleanup_actions=Gníomhaíochtaí glanta in éag acmhainní
+dashboard.cleanup_hook_task_table=Glan suas an tábla hook_task
+dashboard.cleanup_packages=Glan suas pacáistí atá imithe in éag
+dashboard.cleanup_actions=Glan suas acmhainní gníomhartha atá imithe in éag
dashboard.server_uptime=Aga fónaimh Freastalaí
dashboard.current_goroutine=Goroutines Reatha
dashboard.current_memory_usage=Úsáid Cuimhne Reatha
@@ -3018,10 +3054,10 @@ dashboard.total_gc_pause=Sos Iomlán GC
dashboard.last_gc_pause=Sos GC Deireanach
dashboard.gc_times=Amanna GC
dashboard.delete_old_actions=Scrios gach sean-ghníomhaíocht ón mbunachar
-dashboard.delete_old_actions.started=Scrios na sean-ghníomhaíocht go léir ón mbunachar sonraí tosaithe.
+dashboard.delete_old_actions.started=Scriosadh na seanghníomhaíochtaí go léir ón mbunachar sonraí tosaithe
dashboard.update_checker=Seiceoir nuashonraithe
dashboard.delete_old_system_notices=Scrios gach seanfhógra córais ón mbunachar sonraí
-dashboard.gc_lfs=Bailigh truflais meta rudaí LFS
+dashboard.gc_lfs=Bailitheoir bruscair meitea-réada LFS
dashboard.stop_zombie_tasks=Stad gníomhartha tascanna zombie
dashboard.stop_endless_tasks=Stad gníomhartha tascanna gan deireadh
dashboard.cancel_abandoned_jobs=Cealaigh gníomhartha poist tréigthe
@@ -3072,7 +3108,7 @@ users.still_own_repo=Tá stórais amháin nó níos mó fós ag an úsáideoir s
users.still_has_org=Is ball d'eagraíocht é an t-úsáideoir seo. Bain an t-úsáideoir ó aon eagraíochtaí ar dtús.
users.purge=Úsáideoir a Ghlanadh
users.purge_help=Scrios go héigeantach úsáideoir agus aon stórais, eagraíochtaí agus pacáistí atá faoi úinéireacht an úsáideora. Scriosfar gach trácht freisin.
-users.still_own_packages=Tá pacáiste amháin nó níos mó fós ag an úsáideoir seo, scrios na pacáistí seo ar dtús.
+users.still_own_packages=Tá pacáiste amháin nó níos mó fós ag an úsáideoir seo. Scrios na pacáistí seo ar dtús.
users.deletion_success=Scriosadh an cuntas úsáideora.
users.reset_2fa=Athshocraigh 2FA
users.list_status_filter.menu_text=Scagaire
@@ -3092,11 +3128,11 @@ users.details=Sonraí Úsáideora
emails.email_manage_panel=Bainistíocht Ríomhphost Úsáideoir
emails.primary=Bunscoile
emails.activated=Gníomhachtaithe
-emails.filter_sort.email=Ríomhphost
-emails.filter_sort.email_reverse=Ríomhphost (droim ar ais)
-emails.filter_sort.name=Ainm Úsáideora
-emails.filter_sort.name_reverse=Ainm Úsáideora (droim ar ais)
-emails.updated=Nuashonraíodh an ríomhphost
+emails.filter_sort.email=Seoladh ríomhphoist
+emails.filter_sort.email_reverse=Seoladh ríomhphoist (droim ar ais)
+emails.filter_sort.name=Ainm úsáideora
+emails.filter_sort.name_reverse=Ainm úsáideora (droim ar ais)
+emails.updated=Seoladh ríomhphoist nuashonraithe
emails.not_updated=Theip ar an seoladh ríomhphoist iarrtha a nuashonrú: %v
emails.duplicate_active=Tá an seoladh ríomhphoist seo gníomhach cheana féin d'úsáideoir difriúil.
emails.change_email_header=Nuashonraigh Airíonna Ríomhphoist
@@ -3104,7 +3140,7 @@ emails.change_email_text=An bhfuil tú cinnte gur mhaith leat an seoladh ríomhp
emails.delete=Scrios Ríomhphost
emails.delete_desc=An bhfuil tú cinnte gur mhaith leat an seoladh ríomhphoist seo a scriosadh?
emails.deletion_success=Tá an seoladh ríomhphoist scriosta.
-emails.delete_primary_email_error=Ní féidir leat an ríomhphost príomhúil a scriosadh.
+emails.delete_primary_email_error=Ní féidir leat an príomhsheoladh ríomhphoist a scriosadh.
orgs.org_manage_panel=Bainistíocht Eagraíochta
orgs.name=Ainm
@@ -3218,27 +3254,29 @@ auths.oauth2_required_claim_name_helper=Socraigh an t-ainm seo chun logáil iste
auths.oauth2_required_claim_value=Luach Éilimh Riachtanach
auths.oauth2_required_claim_value_helper=Socraigh an luach seo chun logáil isteach ón bhfoinse seo a shrianadh chuig úsáideoirí a bhfuil éileamh acu leis an ainm agus an luach seo
auths.oauth2_group_claim_name=Ainm éileamh ag soláthar ainmneacha grúpa don fhoinse seo (Roghnach)
-auths.oauth2_admin_group=Luach Éilimh Grúpa d'úsáideoirí riarthóra. (Roghnach - teastaíonn ainm éilimh thuas)
-auths.oauth2_restricted_group=Luach Éilimh Grúpa d'úsáideoirí srianta. (Roghnach - teastaíonn ainm éilimh thuas)
-auths.oauth2_map_group_to_team=Map mhaígh grúpaí chuig foirne Eagraíochta. (Roghnach - éilíonn ainm an éilimh thuas)
+auths.oauth2_full_name_claim_name=Ainm Iomlán Éilimh Ainm. (Roghnach — má shocraítear é, déanfar ainm iomlán an úsáideora a shioncrónú leis an éileamh seo i gcónaí)
+auths.oauth2_ssh_public_key_claim_name=Ainm Éilimh Eochrach Phoiblí SSH
+auths.oauth2_admin_group=Luach Éilimh Ghrúpa d'úsáideoirí riarthóra. (Roghnach — éilítear ainm an éilimh thuas)
+auths.oauth2_restricted_group=Luach Éilimh Ghrúpa d'úsáideoirí srianta. (Roghnach — éilítear ainm an éilimh thuas)
+auths.oauth2_map_group_to_team=Mapáil grúpaí éilithe chuig foirne Eagraíochta. (Roghnach — éilítear ainm an éilimh thuas)
auths.oauth2_map_group_to_team_removal=Bain úsáideoirí ó fhoirne sioncronaithe mura mbaineann an t-úsáideoir leis an ngrúpa comhfhreagrach.
auths.enable_auto_register=Cumasaigh Clárú Auto
auths.sspi_auto_create_users=Cruthaigh úsáideoirí go huathoibríoch
-auths.sspi_auto_create_users_helper=Lig do mhodh auth SSPI cuntais nua a chruthú go huathoibríoch d'úsáideoirí a logálann isteach den chéad uair
+auths.sspi_auto_create_users_helper=Ceadaigh don mhodh údaraithe SSPI cuntais nua a chruthú go huathoibríoch d'úsáideoirí a logálann isteach den chéad uair
auths.sspi_auto_activate_users=Gníomhachtaigh úsáideoirí go huathoibríoch
auths.sspi_auto_activate_users_helper=Lig modh auth SSPI úsáideoirí nua a ghníomhachtú go huathoibríoch
auths.sspi_strip_domain_names=Bain ainmneacha fearann ó ainm úsáideora
-auths.sspi_strip_domain_names_helper=Má dhéantar iad a sheiceáil, bainfear ainmneacha fearainn ó ainmneacha logála isteach (m.sh. Beidh “DOMAIN\ user” agus "user@example.org" araon ní bheidh ach “úsáideoir”).
+auths.sspi_strip_domain_names_helper=Má tá sé seo seiceáilte, bainfear ainmneacha fearainn as ainmneacha logála isteach (m.sh. ní bheidh ach "úsáideoir" i gceist le "DOMAIN\user" agus "user@example.org").
auths.sspi_separator_replacement=Deighilteoir le húsáid in ionad\,/agus @
-auths.sspi_separator_replacement_helper=An carachtar a úsáidfear chun na deighilteoirí a chur in ionad na n-ainmneacha logála síos-leibhéil (m.sh. an \ i "DOMAIN\úsáideoir") agus ainmneacha príomhoidí úsáideora (m.sh. an @ in "user@example.org").
+auths.sspi_separator_replacement_helper=An carachtar le húsáid chun deighilteoirí ainmneacha logála isteach ar leibhéal níos ísle (m.sh. an \ i "DOMAIN\user") agus príomhainmneacha úsáideora (m.sh. an @ i "user@example.org") a athsholáthar.
auths.sspi_default_language=Teanga úsáideora réamhshocraithe
-auths.sspi_default_language_helper=Teanga réamhshocraithe d'úsáideoirí cruthaithe go huathoibríoch ag modh auth SSPI. Fág folamh más fearr leat teanga a bhrath go huathoibríoch.
+auths.sspi_default_language_helper=Teanga réamhshocraithe d'úsáideoirí a chruthaítear go huathoibríoch ag modh údaraithe SSPI. Fág folamh más fearr leat go mbraithfí an teanga go huathoibríoch.
auths.tips=Leideanna
auths.tips.oauth2.general=OAuth2 Fíordheimhniú
auths.tips.oauth2.general.tip=Agus fíordheimhniú OAuth2 nua á chlárú agat, ba chóir go mbeadh an URL glaonna ais/atreoraithe:
auths.tip.oauth2_provider=Soláthraí OAuth2
auths.tip.bitbucket=Cláraigh tomhaltóir OAuth nua ar %s agus cuir an cead 'Cuntas' - 'Léigh' leis
-auths.tip.nextcloud=`Cláraigh tomhaltóir OAuth nua ar do chás ag baint úsáide as an roghchlár seo a leanas "Socruithe -> Slándáil -> cliant OAuth 2.0"`
+auths.tip.nextcloud=Cláraigh tomhaltóir OAuth nua ar do chás trí "Socruithe -> Slándáil -> Cliant OAuth 2.0" a roghnú sa roghchlár
auths.tip.dropbox=Cruthaigh feidhmchlár nua ag %s
auths.tip.facebook=Cláraigh feidhmchlár nua ag %s agus cuir an táirge "Facebook Login" leis
auths.tip.github=Cláraigh feidhmchlár OAuth nua ar %s
@@ -3348,7 +3386,7 @@ config.mailer_sendmail_path=Cosán Sendmail
config.mailer_sendmail_args=Argóintí Breise chuig Sendmail
config.mailer_sendmail_timeout=Teorainn Ama Sendmail
config.mailer_use_dummy=Caochadán
-config.test_email_placeholder=Ríomhphost (m.sh. test@example.com)
+config.test_email_placeholder=Seoladh Ríomhphoist (m.sh. test@example.com)
config.send_test_mail=Seol Ríomhphost Tástála
config.send_test_mail_submit=Seol
config.test_mail_failed=Theip ar ríomhphost tástála a sheoladh chuig "%s": %v
@@ -3422,7 +3460,7 @@ monitor.start=Am Tosaigh
monitor.execute_time=Am Forghníomhaithe
monitor.last_execution_result=Toradh
monitor.process.cancel=Cealaigh próiseas
-monitor.process.cancel_desc=Má chuirtear próiseas ar ceal d'fhéadfadh go gcaillfí sonraí
+monitor.process.cancel_desc=D’fhéadfadh caillteanas sonraí a bheith mar thoradh ar phróiseas a chealú
monitor.process.children=Leanaí
monitor.queues=Scuaineanna
@@ -3437,7 +3475,7 @@ monitor.queue.numberinqueue=Uimhir i scuaine
monitor.queue.review_add=Athbhreithniú / Cuir Oibrithe leis
monitor.queue.settings.title=Socruithe Linn
monitor.queue.settings.desc=Fásann linnte go dinimiciúil mar fhreagra ar a gcuid scuaine oibrithe a bhlocáil.
-monitor.queue.settings.maxnumberworkers=Uaslíon na n-oibrithe
+monitor.queue.settings.maxnumberworkers=Uasmhéid líon na n-oibrithe
monitor.queue.settings.maxnumberworkers.placeholder=Faoi láthair %[1]d
monitor.queue.settings.maxnumberworkers.error=Caithfidh uaslíon na n-oibrithe a bheith ina uimhir
monitor.queue.settings.submit=Nuashonrú Socruithe
@@ -3463,10 +3501,10 @@ notices.delete_success=Scriosadh na fógraí córais.
self_check.no_problem_found=Níor aimsíodh aon fhadhb fós.
self_check.startup_warnings=Rabhadh tosaithe:
self_check.database_collation_mismatch=Bí ag súil le comhthiomsú a úsáid sa bhunachar sonraí: %s
-self_check.database_collation_case_insensitive=Tá bunachar sonraí ag baint úsáide as comparáid %s, arb é comhdhlúthú neamhíogair. Cé go bhféadfadh Gitea oibriú leis, d'fhéadfadh go mbeadh roinnt cásanna annamh ann nach n-oibríonn mar a bhíothas ag súil leis.
-self_check.database_inconsistent_collation_columns=Tá comhthiomsú %s in úsáid ag an mbunachar sonraí, ach tá comhthiomsuithe mímheaitseála á n-úsáid ag na colúin seo. D'fhéadfadh sé a bheith ina chúis le roinnt fadhbanna gan choinne.
-self_check.database_fix_mysql=D'úsáideoirí MySQL/MariaDB, d'fhéadfá an t-ordú "gitea doctor convert" a úsáid chun na fadhbanna comhthiomsaithe a réiteach, nó d'fhéadfá an fhadhb a réiteach trí "ALTER ... COLLATE ..." SQLs de láimh freisin.
-self_check.database_fix_mssql=I gcás úsáideoirí MSSQL, ní fhéadfá an fhadhb a réiteach ach trí "ALTER ... COLLATE ..." SQLs de láimh faoi láthair.
+self_check.database_collation_case_insensitive=Tá an bunachar sonraí ag baint úsáide as an gcóimheas %s, arb é atá ann ná cóimheas neamhíogair ó thaobh cás de. Cé gur féidir le Gitea oibriú leis, d'fhéadfadh go mbeadh roinnt cásanna neamhchoitianta ann nach n-oibreoidh mar a bhíothas ag súil leis.
+self_check.database_inconsistent_collation_columns=Tá an bunachar sonraí ag úsáid an chóimheasa %s, ach tá na colúin seo ag úsáid chóimheasa mí-oiriúnacha. D’fhéadfadh sé seo roinnt fadhbanna gan choinne a chruthú.
+self_check.database_fix_mysql=I gcás úsáideoirí MySQL/MariaDB, d'fhéadfá an t-ordú "gitea doctor convert" a úsáid chun na fadhbanna cóimheasa a shocrú, nó d'fhéadfá an fhadhb a shocrú de láimh le fiosrúcháin SQL "ALTER ... COLLATE ...".
+self_check.database_fix_mssql=I gcás úsáideoirí MSSQL, ní fhéadfá an fhadhb a réiteach de láimh ach le fiosrúcháin SQL "ALTER ... COLLATE ..." faoi láthair.
self_check.location_origin_mismatch=Ní mheaitseálann an URL reatha (%[1]s) an URL atá le feiceáil ag Gitea (%[2]s). Má tá seachfhreastalaí droim ar ais á úsáid agat, cinntigh le do thoil go bhfuil na ceanntásca "Óstríomhaire" agus "X-Forwarded-Proto" socraithe i gceart.
[action]
@@ -3550,8 +3588,8 @@ error.no_committer_account=Níl aon chuntas nasctha le seoladh ríomhphoist an t
error.no_gpg_keys_found=Níor aimsíodh aon eochair aithne don síniú seo sa bhunachar
error.not_signed_commit=Ní tiomantas sínithe
error.failed_retrieval_gpg_keys=Theip ar aisghabháil eochair ar bith a bhí ceangailte le cuntas an tiomnóra
-error.probable_bad_signature=RABHADH! Cé go bhfuil eochair leis an ID seo sa bhunachar sonraí ní fhíoraíonn sé an tiomantas seo! Tá an tiomantas seo AMHRASACH.
-error.probable_bad_default_signature=RABHADH! Cé go bhfuil an t-aitheantas seo ag an eochair réamhshocraithe ní fíoraíonn sé an tiomantas seo! Tá an tiomantas seo AMHRASACH.
+error.probable_bad_signature=RABHADH! Cé go bhfuil eochair leis an ID seo sa bhunachar sonraí, ní fhíoraíonn sé an tiomantas seo! Tá AMHRASACH ar an tiomantas seo.
+error.probable_bad_default_signature=RABHADH! Cé go bhfuil an ID seo ag an eochair réamhshocraithe, ní fhíoraíonn sé an tiomantas seo! Tá AMHRASACH ar an tiomantas seo.
[units]
unit=Aonad
@@ -3590,7 +3628,7 @@ versions.view_all=Féach ar gach
dependency.id=ID
dependency.version=Leagan
search_in_external_registry=Cuardaigh i %s
-alpine.registry=Socraigh an chlár seo tríd an url a chur i do chomhad /etc/apk/repositories:
+alpine.registry=Socraigh an clárlann seo tríd an URL a chur i do chomhad /etc/apk/repositories:
alpine.registry.key=Íoslódáil eochair RSA poiblí na clárlainne isteach san fhillteán /etc/apk/keys/ chun an síniú innéacs a fhíorú:
alpine.registry.info=Roghnaigh $branch agus $repository ón liosta thíos.
alpine.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
@@ -3603,7 +3641,7 @@ arch.install=Sioncronaigh pacáiste le pacman:
arch.repository=Eolas Stórais
arch.repository.repositories=Stórais
arch.repository.architectures=Ailtireachtaí
-cargo.registry=Socraigh an clárlann seo sa chomhad cumraíochta lasta (mar shampla ~/.cargo/config.toml):
+cargo.registry=Socraigh an clárlann seo i gcomhad cumraíochta Cargo (mar shampla ~/.cargo/config.toml):
cargo.install=Chun an pacáiste a shuiteáil ag baint úsáide as Cargo, reáchtáil an t-ordú seo a leanas:
chef.registry=Socraigh an clárlann seo i do chomhad ~/.chef/config.rb:
chef.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
@@ -3614,7 +3652,7 @@ composer.dependencies.development=Spleithiúlachtaí Forbartha
conan.details.repository=Stóras
conan.registry=Socraigh an clárlann seo ón líne ordaithe:
conan.install=Chun an pacáiste a shuiteáil ag úsáid Conan, reáchtáil an t-ordú seo a leanas:
-conda.registry=Socraigh an chlár seo mar stóras Conda i do chomhad .condarc:
+conda.registry=Socraigh an clárlann seo mar stóras Conda i do chomhad .condarc:
conda.install=Chun an pacáiste a shuiteáil ag úsáid Conda, reáchtáil an t-ordú seo a leanas:
container.details.type=Cineál Íomhá
container.details.platform=Ardán
@@ -3626,7 +3664,7 @@ container.layers=Sraitheanna Íomhá
container.labels=Lipéid
container.labels.key=Eochair
container.labels.value=Luach
-cran.registry=Cumraigh an chlárlann seo i do chomhad Rprofile.site:
+cran.registry=Socraigh an chlárlann seo i do chomhad Rprofile.site:
cran.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
debian.registry=Socraigh an clárlann seo ón líne ordaithe:
debian.registry.info=Roghnaigh $distribution agus $component ón liosta thíos.
@@ -3640,7 +3678,7 @@ go.install=Suiteáil an pacáiste ón líne ordaithe:
helm.registry=Socraigh an clárlann seo ón líne ordaithe:
helm.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
maven.registry=Socraigh an clárlann seo i do chomhad pom.xml tionscadail:
-maven.install=Chun an pacáiste a úsáid cuir na nithe seo a leanas sa bhloc spleáchais sa chomhad pom.xml:
+maven.install=Chun an pacáiste a úsáid, cuir an méid seo a leanas san áireamh sa bhloc dependencies sa chomhad pom.xml:
maven.install2=Rith tríd an líne ordaithe:
maven.download=Chun an spleáchas a íoslódáil, rith tríd an líne ordaithe:
nuget.registry=Socraigh an clárlann seo ón líne ordaithe:
@@ -3694,7 +3732,7 @@ owner.settings.cargo.initialize.success=Cruthaíodh an t-innéacs Cargo go rath
owner.settings.cargo.rebuild=Innéacs Atógáil
owner.settings.cargo.rebuild.description=Is féidir atógáil a bheith úsáideach mura bhfuil an t-innéacs sioncronaithe leis na pacáistí Cargo stóráilte.
owner.settings.cargo.rebuild.error=Níorbh fhéidir an t-innéacs Cargo a atógáil: %v
-owner.settings.cargo.rebuild.success=D'éirigh leis an innéacs Cargo a atógáil.
+owner.settings.cargo.rebuild.success=Rinneadh innéacs an Charga a atógáil go rathúil.
owner.settings.cleanuprules.title=Bainistigh Rialacha Glanta
owner.settings.cleanuprules.add=Cuir Riail Glantacháin leis
owner.settings.cleanuprules.edit=Cuir Riail Glantacháin in eagar
@@ -3782,7 +3820,7 @@ runners.delete_runner=Scrios an reathaí seo
runners.delete_runner_success=Scriosadh an reathaí go rathúil
runners.delete_runner_failed=Theip ar an reathaí a scriosadh
runners.delete_runner_header=Deimhnigh an reathaí seo a scriosadh
-runners.delete_runner_notice=Má tá tasc ar siúl ar an reathaí seo, cuirfear deireadh leis agus marcáil mar theip. Féadfaidh sé sreabhadh oibre tógála a bhriseadh.
+runners.delete_runner_notice=Má tá tasc á rith ar an rithóir seo, cuirfear deireadh leis agus marcálfar é mar theip air. D’fhéadfadh sé seo cur isteach ar shreabhadh oibre na tógála.
runners.none=Níl aon reathaí ar fáil
runners.status.unspecified=Anaithnid
runners.status.idle=Díomhaoin
@@ -3813,6 +3851,7 @@ runs.no_runs=Níl aon rith ag an sreabhadh oibre fós.
runs.empty_commit_message=(teachtaireacht tiomantas folamh)
runs.expire_log_message=Glanadh logaí toisc go raibh siad ró-sean.
runs.delete=Scrios rith sreabha oibre
+runs.cancel=Cealaigh rith an tsreabha oibre
runs.delete.description=An bhfuil tú cinnte gur mian leat an rith sreabha oibre seo a scriosadh go buan? Ní féidir an gníomh seo a chealú.
runs.not_done=Níl an rith sreabha oibre seo críochnaithe.
runs.view_workflow_file=Féach ar chomhad sreabha oibre
diff --git a/options/locale/locale_hu-HU.ini b/options/locale/locale_hu-HU.ini
index ebc6d5c801d..e86030e1271 100644
--- a/options/locale/locale_hu-HU.ini
+++ b/options/locale/locale_hu-HU.ini
@@ -134,9 +134,6 @@ sqlite_helper=A SQLite3 adatbázis elérési útvonala. Kérjük adjon meg eg
err_empty_db_path=SQLite3 adatbázis elérési útvonala nem lehet üres.
no_admin_and_disable_registration=Nem tilthatja le a regisztrációt, amíg nem hoz létre egy rendszergazdai fiókot.
err_empty_admin_password=A rendszergazdai jelszó nem lehet üres.
-err_empty_admin_email=A rendszergazdai jelszó nem lehet üres.
-err_admin_name_is_reserved=Az rendszergazda felhasználóneve helytelen, vagy foglalt
-err_admin_name_is_invalid=Az rendszergazda felhasználói neve helytelen
general_title=Általános beállítások
app_name=Webhely címe
@@ -149,7 +146,6 @@ run_user=Futtatás mint
ssh_port=SSH szerver port
ssh_port_helper=SSH port amit az ön szervere használni fog. Hagyja üresen a kikapcsoláshoz.
http_port=Gitea HTTP Figyelő Port
-http_port_helper=Port száma, amelyen a Gitea web szervere hallgatni fog.
app_url=Az oldal alapértelmezett címe
app_url_helper=Alapcím HTTP(S) klón címekhez és e-mail értesítésekhez.
log_root_path=Naplófájl elérési útja
@@ -245,7 +241,6 @@ allow_password_change=A felhasználóknak meg kell változtatniuk a jelszavukat(
reset_password_mail_sent_prompt=Megerősítő email lett küldve ide: %s . Ellenőrizze postafiókját az elkövetkező %s a jelszó visszaállítási folyamat befejezéséhez.
active_your_account=Aktiválja a fiókját
account_activated=A fiók aktiválva lett
-prohibit_login=Bejelentkezés letiltva
resent_limit_prompt=Elnézést, de nemrég már kért aktivációs emailt. Kérem várjon 3 percet és utána próbálja újra.
has_unconfirmed_mail=Tisztelt %s, az email címe (%s ) nincsen megerősítve. Amennyiben nem kapta még meg a megerősítő email-t, vagy egy újra van szüksége, az alábbi gombra kattintson.
resend_mail=Kattintson ide az aktivációs email újraküldéséhez
@@ -529,7 +524,6 @@ revoke_oauth2_grant=Hozzáférés megvonása
twofa_is_enrolled=A fiókja jelenleg használ kétlépcsős hitelesítést.
twofa_not_enrolled=A fiókja jelenleg nem használ kétlépcsős hitelesítést.
twofa_disable=Kétlépcsős hitelesítés letiltása
-twofa_enroll=Kétlépcsős hitelesítés használata
twofa_disable_note=A kétlépcsős azonosítás szükség esetén letiltható.
twofa_disable_desc=A kétlépcsős hitelesítés letiltása a fiókot kevésbé biztonságossá teszi. Folytatható?
twofa_disabled=Kétlépcsős hitelesítés letiltva.
@@ -651,7 +645,6 @@ quick_guide=Gyors útmutató
clone_this_repo=Tároló klónozása
create_new_repo_command=Egy új tároló létrehozása a parancssorból
push_exist_repo=Meglévő tároló feltöltése parancssorból
-empty_message=A tároló nem tartalmaz semmit.
code=Kód
branch=Ág
@@ -711,6 +704,7 @@ editor.commit_empty_file_header=Egy üres fájl commitolása
editor.no_changes_to_show=Nincsen megjeleníthető változás.
editor.add_subdir=Mappa hozzáadása…
+
commits.commits=Commit-ok
commits.search_all=Minden ág
commits.author=Szerző
@@ -781,7 +775,6 @@ issues.filter_type.mentioning_you=Engem említ
issues.filter_sort=Rendezés
issues.filter_sort.latest=Legújabb
issues.filter_sort.oldest=Legrégebbi
-issues.filter_sort.recentupdate=Nemrég frissített
issues.filter_sort.leastupdate=Legrégebben frissített
issues.filter_sort.mostcomment=Legtöbbet hozzászólt
issues.filter_sort.leastcomment=Legkevesebbet hozzászólt
@@ -847,7 +840,6 @@ issues.lock_duplicate=Egy hibajegy nem zárható be kétszer.
issues.unlock_error=Nem nyithatsz meg egy hibajegyet ami nincs is lezárva.
issues.lock_confirm=Lezárás
issues.unlock_confirm=Feloldás
-issues.lock.notice_1=- Más felhasználók nem szólhatnak hozzá ehhez a hibajegyhez.
issues.lock.reason=Zárolás oka
issues.lock.title=Beszélgetés lezárása ezen a hibajegyen.
issues.unlock.title=Hibajegy újranyitása.
@@ -896,7 +888,6 @@ issues.review.reviewers=Véleményezők
issues.review.show_outdated=Elavultak mutatása
issues.review.hide_outdated=Elavultak elrejtése
issues.review.commented=Hozzászólás
-issues.assignee.error=Nem minden megbízott lett hozzáadva egy nem várt hiba miatt.
pulls.new=Egyesítési kérés
@@ -1016,7 +1007,6 @@ activity.title.releases_1=%d Kiadás
activity.title.releases_n=%d Kiadások
activity.title.releases_published_by=%s publikálta %s
activity.published_release_label=Publikálva
-activity.no_git_activity=Nem voltak commit-ok ebben az időszakban.
activity.git_stats_commit_1=%d commit
activity.git_stats_commit_n=%d commit
activity.git_stats_file_n=%d fájl
@@ -1174,13 +1164,13 @@ settings.visibility.private_shortname=Privát
settings.update_settings=Beállítások frissítése
settings.update_setting_success=A szervezet beállításai frissültek.
+
+
settings.update_avatar_success=A szervezet avatarja frissítve.
settings.delete=Szervezet törlése
settings.delete_account=A szervezet törlése
settings.delete_prompt=A szervezet véglegesen el lesz távolítva. NEM vonható vissza!
settings.confirm_delete_account=Törlés megerősítése
-settings.delete_org_title=Szervezet törlése
-settings.delete_org_desc=Ez a szervezet véglegesen törölve lesz. Folytatható?
settings.hooks_desc=Webhook hozzáadása a szervezet összes tárolójához .
@@ -1289,7 +1279,6 @@ users.restricted=Korlátozott
users.repos=Tárolók
users.created=Létrehozva
users.last_login=Utolsó bejelentkezés
-users.never_login=Sosem jelentkezett be
users.send_register_notify=Felhasználó regisztráció értesítés küldése
users.edit=Szerkesztés
users.auth_source=Hitelesítési forrás
@@ -1307,7 +1296,6 @@ users.list_status_filter.is_restricted=Korlátozott
emails.primary=Elsődleges
emails.activated=Aktivált
-emails.filter_sort.email=Email
emails.filter_sort.name=Felhasználónév
orgs.org_manage_panel=Szervezetek Kezelése
diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini
index 54b0499d96d..e6d383cff09 100644
--- a/options/locale/locale_id-ID.ini
+++ b/options/locale/locale_id-ID.ini
@@ -35,7 +35,6 @@ webauthn_use_twofa=Gunakan kode dua faktor dari telepon Anda
webauthn_error=Tidak dapat membaca kunci keamanan Anda.
webauthn_unsupported_browser=Browser Anda saat ini tidak mendukung WebAuthn.
webauthn_error_unknown=Terdapat kesalahan yang tidak diketahui. Mohon coba lagi.
-webauthn_error_insecure=`WebAuthn hanya mendukung koneksi aman. Untuk pengujian melalui HTTP, Anda dapat menggunakan "localhost" atau "127.0.0.1"`
webauthn_error_unable_to_process=Server tidak dapat memproses permintaan Anda.
webauthn_error_duplicated=Kunci keamanan tidak diperbolehkan untuk permintaan ini. Pastikan bahwa kunci ini belum terdaftar sebelumnya.
webauthn_error_empty=Anda harus menetapkan nama untuk kunci ini.
@@ -117,7 +116,6 @@ pin=Sematkan
unpin=Lepas sematan
artifacts=Artefak
-confirm_delete_artifact=Apakah Anda yakin ingin menghapus artefak '%s' ?
archived=Diarsipkan
@@ -145,17 +143,9 @@ filter.private=Pribadi
no_results_found=Hasil tidak ditemukan.
[search]
-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...
code_search_unavailable=Pencarian kode saat ini tidak tersedia. Silahkan hubungi administrator.
-branch_kind=Cari cabang...
[aria]
navbar=Bar Navigasi
@@ -187,8 +177,6 @@ buttons.enable_monospace_font=Aktifkan font monospace
buttons.disable_monospace_font=Non-Aktifkan font monospace
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=Terjadi kesalahan
@@ -261,7 +249,6 @@ allow_password_change=Wajibkan pengguna untuk mengganti kata sandi (disarankan)
reset_password_mail_sent_prompt=Surel konfirmasi berhasil dikirim ke %s . Silahkan cek akun email Anda dalam %s jam untuk menyelesaikan proses pemulihan akun.
active_your_account=Aktifkan Akun Anda
account_activated=Akun telah diaktifkan
-prohibit_login=Dilarang Masuk
resent_limit_prompt=Anda telah meminta sebuah aktivasi surel beberapa saat lalu. Silakan tunggu 3 menit dan coba lagi.
has_unconfirmed_mail=Hai %s, anda memiliki sebuah alamat surel yang belum dikonfirmasi (%s ). Jika anda belum menerima surel konfirmasi atau perlu untuk mengirim ulang yang baru, silakan klik pada tombol di bawah.
resend_mail=Klik di sini untuk mengirim ulang surel aktivasi anda
@@ -294,7 +281,6 @@ email_domain_blacklisted=Anda tidak dapat mendaftar dengan alamat email.
authorize_application=Izinkan aplikasi
authorize_redirect_notice=Anda akan dialihkan ke %s apabila Anda mengizinkan aplikasi ini.
authorize_application_created_by=Aplikasi ini dibuat oleh %s.
-authorize_application_description=Jika Anda memberikan akses, itu akan bisa mengakses dan menulis semua informasi akun Anda, termasuk repositori pribadi dan organisasi.
authorize_title=Izinkan "%s" untuk mengakses akun Anda?
authorization_failed=Otorisasi gagal
sspi_auth_failed=Autentikasi SSPI gagal
@@ -361,7 +347,6 @@ lang_select_error=Pilih bahasa dari daftar.
username_been_taken=Nama pengguna sudah terambil.
repo_name_been_taken=Nama repositori sudah digunakan.
visit_rate_limit=Kunjungan remot mengatasi batasan laju.
-2fa_auth_required=Kunjungan remote memerlukan autentikasi dua faktor.
org_name_been_taken=Nama organisasi sudah diambil.
team_name_been_taken=Nama tim sudah diambil.
team_no_units_error=Izinkan akses pada setidaknya satu bagian repositori.
@@ -456,7 +441,6 @@ activated=Diaktifkan
primary_email=Buat Utama
delete_email=Hapus
email_deletion=Hapus Alamat Email
-email_deletion_desc=Alamat email dan informasi terkait akan dihapus dari akun. Git commit dengan alamat email ini akan tetap tidak berubah. Lanjutkan?
email_deletion_success=Alamat email Anda telah dihapus.
theme_update_success=Tema Anda diperbarui.
theme_update_error=Thema yang dipilih tidak ada.
@@ -545,12 +529,10 @@ oauth2_application_create_description=Aplikasi OAuth2 memberikan aplikasi pihak
authorized_oauth2_applications=Aplikasi OAuth2 Terotorisasi
revoke_key=Cabut
revoke_oauth2_grant=Cabut Akses
-revoke_oauth2_grant_description=Mencabut akses untuk aplikasi pihak ketiga ini akan mencegahnya mengakses data Anda. Lanjutkan?
twofa_is_enrolled=Akun anda saat ini terdaftar dalam otentikasi dua-faktor.
twofa_not_enrolled=Akun anda saat ini tidak terdaftar dalam otentikasi dua-faktor.
twofa_disable=Matikan Autentikasi Dua Faktor
-twofa_enroll=Daftarkan ke Autentikasi Dua-Faktor
twofa_disable_note=Anda bisa mematikan autentikasi dua-faktor bila diperlukan.
twofa_disable_desc=Mematikan autentikasi dua-faktor akan membuat akun Anda kurang aman. Lanjutkan?
twofa_disabled=Otentikasi dua-faktor telah dinonaktifkan.
@@ -561,7 +543,6 @@ passcode_invalid=Kode sandi salah. Coba lagi.
manage_account_links=Kelola akun tertaut
manage_account_links_desc=Semua akun eksternal ini sementara tertaut dengan akun Gitea Anda.
-account_links_not_available=Saat ini tidak ada akun eksternal yang tertaut ke akun Gitea ini.
link_account=Tautan Akun
remove_account_link=Hapus Akun Tertaut
remove_account_link_desc=Menghapus akun tertaut akan membuat akun itu tidak bisa mengakses akun Gitea Anda. Lanjutkan?
@@ -645,7 +626,6 @@ migrate.permission_denied=Anda tidak diizinkan untuk mengimpor repositori lokal.
migrate.failed=Migrasi gagal: %v
migrated_from=Termigrasi dari %[2]s
migrated_from_fake=Termigrasi Dari %[1]s
-migrate.migrating=Memigrasi dari %s ...
migrate.migrating_failed=Migrasi dari %s gagal.
mirror_from=duplikat dari
@@ -717,6 +697,7 @@ editor.new_branch_name_desc=Nama branch baru…
editor.cancel=Membatalkan
editor.no_changes_to_show=Tidak ada perubahan untuk ditampilkan.
+
commits.commits=Melakukan
commits.author=Penulis
commits.message=Pesan
@@ -770,7 +751,6 @@ issues.filter_type.mentioning_you=Menyebutkan anda
issues.filter_sort=Sortir
issues.filter_sort.latest=Terbaru
issues.filter_sort.oldest=Terlama
-issues.filter_sort.recentupdate=Baru saja diperbarui
issues.filter_sort.leastupdate=Baru diperbarui
issues.filter_sort.mostcomment=Komentar terbanyak
issues.filter_sort.leastcomment=Komentar paling sedikit
@@ -927,7 +907,6 @@ activity.published_release_label=Dikeluarkan
contributors.contribution_type.commits=Melakukan
settings=Pengaturan
-settings.desc=Pengaturan dimana anda dapat mengelola pengaturan untuk repositori
settings.options=Repositori
settings.collaboration.write=Tulis
settings.collaboration.read=Baca
@@ -955,7 +934,6 @@ settings.delete_notices_1=- Operasi ini TIDAK BISA dibatalkan.
settings.delete_collaborator=Menghapus
settings.teams=Tim
settings.add_webhook=Tambahkan Webhook
-settings.webhook.test_delivery=Percobaan Pengiriman
settings.webhook.request=Permintaan
settings.webhook.response=Tanggapan
settings.webhook.headers=Tajuk
@@ -1055,10 +1033,11 @@ settings.visibility.private_shortname=Pribadi
settings.update_settings=Perbarui Setelan
settings.update_setting_success=Pengaturan organisasi telah diperbarui.
+
+
settings.delete=Menghapus Organisasi
settings.delete_account=Menghapus Organisasi Ini
settings.confirm_delete_account=Konfirmasi Penghapusan
-settings.delete_org_title=Menghapus Organisasi
settings.hooks_desc=Tambahkan webhooks yang akan dipicu untuk semua repositori di bawah organisasi ini.
@@ -1315,7 +1294,6 @@ monitor.queue.exemplar=Contoh Tipe
monitor.queue.numberworkers=Jumlah Worker
monitor.queue.maxnumberworkers=Jumlah Maks. Worker
monitor.queue.settings.title=Pengaturan Kelompok
-monitor.queue.settings.maxnumberworkers=Jumlah Maks. Worker
monitor.queue.settings.maxnumberworkers.error=Jumlah maks. worker haruslah sebuah angka
monitor.queue.settings.submit=Perbarui Pengaturan
monitor.queue.settings.changed=Pengaturan diperbarui
diff --git a/options/locale/locale_is-IS.ini b/options/locale/locale_is-IS.ini
index 42ecfabe221..1e4669e32ba 100644
--- a/options/locale/locale_is-IS.ini
+++ b/options/locale/locale_is-IS.ini
@@ -39,7 +39,6 @@ webauthn_use_twofa=Notaðu tveggja-þátta kóða úr símanum þínum
webauthn_error=Gat ekki lesið öryggislykilinn þinn.
webauthn_unsupported_browser=Vafrinn þinn styður ekki WebAuthn eins og er.
webauthn_error_unknown=Óþekkt villa kom upp. Vinsamlegast reyndu aftur.
-webauthn_error_insecure=WebAuthn styður aðeins öruggar tengingar. Til að prófa yfir HTTP geturðu notað upprunann „localhost“ eða „127.0.0.1“
webauthn_error_unable_to_process=Netþjónninn gat ekki ráðið við beiðni þína.
webauthn_error_duplicated=Öryggislykillinn er ekki leyfður fyrir þessa beiðni. Gakktu úr skugga um að lykillinn sé ekki þegar skráður.
webauthn_error_empty=Þú verður að setja nafn fyrir þennan lykil.
@@ -160,16 +159,10 @@ path=Slóð
sqlite_helper=Skráarslóð fyrir SQLite3 gagnagrunninn. Sláðu inn algjöra slóð ef þú keyrir Gitea sem þjónustu.
reinstall_error=Þú ert að reyna að setja upp í núverandi Gitea gagnagrunn
reinstall_confirm_message=Enduruppsetning með núverandi Gitea gagnagrunni getur valdið mörgum vandamálum. Í flestum tilfellum ættir þú að nota núverandi "app.ini" til að keyra Gitea. Ef þú veist hvað þú ert að gera skaltu staðfesta eftirfarandi:
-reinstall_confirm_check_1=Gögnin sem eru dulkóðuð með SECRET_KEY í app.ini gætu glatast: notendur gætu hugsanlega ekki skráð sig inn með 2FA/OTP og speglar virka kannski ekki rétt. Með því að haka við þennan reit staðfestirðu að núverandi app.ini skrá inniheldur réttan SECRET_KEY.
-reinstall_confirm_check_2=Hugbúnaðarsöfn og stillingar gætu þurft að endursamstilla. Með því að haka við þennan reit staðfestir þú að þú endursamstillir krókana fyrir hugbúnaðarsöfn og authorized_keys skrána handvirkt. Þú staðfestir að þú tryggir að hugbúnaðarsafns- og spegilstillingar séu réttar.
reinstall_confirm_check_3=Þú staðfestir að þú sért alveg viss um að þetta Gitea sé í gangi með réttri app.ini staðsetningu og að þú sért viss um að þú þurfir að setja það upp aftur. Þú staðfestir að þú viðurkennir ofangreindar áhættur.
err_empty_db_path=SQLite3 gagnagrunnsslóðin má ekki vera tóm.
no_admin_and_disable_registration=Þú getur ekki slökkt á sjálfsskráningu notenda án þess að búa til stjórnandanotanda.
err_empty_admin_password=Lykilorð stjórnanda má ekki vera tómt.
-err_empty_admin_email=Netfang stjórnanda má ekki vera tómt.
-err_admin_name_is_reserved=Notandanafn stjórnanda er ógilt. Notandanafnið er frátekið
-err_admin_name_pattern_not_allowed=Notandanafn stjórnanda er ógilt. Notandanafnið passar við frátekið mynstur
-err_admin_name_is_invalid=Notandanafn Stjórnanda er ógilt
general_title=Almennar Stillingar
app_name=Heiti vefsvæðis
@@ -184,7 +177,6 @@ domain_helper=Lén eða hýsilfang fyrir netþjóninn.
ssh_port=SSH Netþjónsgátt
ssh_port_helper=Gátt sem SSH þjónninn þinn hlustar á. Skildu eftir tómt til að slökkva á.
http_port=Gitea HTTP Hlustunargátt
-http_port_helper=Gátt sem Gitea vefþjónninn mun hlusta á.
app_url=Grunnvefslóð Gitea
app_url_helper=Grunnvistfang fyrir HTTP(S) afrit slóð og tölvupósttilkynningar.
log_root_path=Slóð Annáls
@@ -256,7 +248,6 @@ forgot_password=Gleymdirðu Lykilorðinu?
must_change_password=Uppfærðu lykilorðið þitt
active_your_account=Virkjaðu Aðganginn Þinn
account_activated=Aðgangur hefur verið virkjaður
-prohibit_login=Nýskráningar Óheimilar
has_unconfirmed_mail=Halló, %s, þú ert með óstaðfest netfang (%s ). Ef þú hefur ekki fengið staðfestingarpóst eða þarft nýjan, vinsamlegast smelltu á hnappinn hér að neðan.
resend_mail=Smelltu hér til að endursenda virkjunarpóstinn þinn
send_reset_mail=Senda Tölvupóst Til að Endurheimta Reikning
@@ -275,8 +266,6 @@ 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.
-disable_forgot_password_mail_admin=Endurheimting reiknings er aðeins virk þegar tölvupóstur er uppsettur. Vinsamlegast settu upp tölvupóst til að virkja endurheimting reikningar.
authorize_application=Heimilda Forrit
authorize_application_created_by=Þetta forrit var stofnað af %s.
authorize_title=Veita „%s“ aðgang að reikningnum þínum?
@@ -298,8 +287,6 @@ activate_email=Staðfestu netfangið þitt
activate_email.text=Vinsamlegast smelltu á eftirfarandi tengil til að staðfesta netfangið þitt innan %s :
register_notify.title=%[1]s, velkomin(n) í %[2]s
-register_notify.text_1=þetta er staðfestingarpóstur þinn fyrir skráningu á %s!
-register_notify.text_2=Þú getur nú skráð þig inn með notandanafni: %s.
register_notify.text_3=Ef þessi reikningur hefur verið búinn til fyrir þig, vinsamlegast stilltu lykilorðið þitt fyrst.
reset_password=Endurheimta reikning þinn
@@ -334,7 +321,6 @@ release.download.targz=Frumkóði (TAR.GZ)
repo.transfer.subject_to=%s langar að flytja „%s“ til %s
repo.transfer.subject_to_you=%s langar að flytja „%s“ til þín
repo.transfer.to_you=þig
-repo.transfer.body=Til að samþykkja eða hafna því skaltu fara á %s eða hunsa það bara.
repo.collaborator.added.subject=%s bætti þér við í %s
repo.collaborator.added.text=Þér hefur verið bætt við sem aðila hugbúnaðarsafns:
@@ -479,7 +465,6 @@ activate_email=Senda Virkjun
activations_pending=Virkjanir í Bið
delete_email=Fjarlægja
email_deletion=Fjarlægja Netfang
-email_deletion_desc=Netfangið og tengdar upplýsingar verða fjarlægðar af reikningnum þínum. Git framlög með þessu netfangi verða óbreyttar. Halda áfram?
email_deletion_success=Netfangið hefur verið fjarlægt.
theme_update_success=Þeman þín var uppfærð.
theme_update_error=Valin þema er ekki til.
@@ -689,7 +674,7 @@ editor.create_new_branch=Búðu til nýja grein og sameiningarb
editor.create_new_branch_np=Búðu til nýja grein fyrir þetta framlag.
editor.new_branch_name_desc=Heiti nýjar greinar…
editor.cancel=Hætta við
-editor.fail_to_update_file_summary=Villuskilaboð:
+
commits.commits=Framlög
commits.author=Höfundur
@@ -757,7 +742,6 @@ issues.filter_type.mentioning_you=Minnast á þig
issues.filter_sort=Raða
issues.filter_sort.latest=Nýjustu
issues.filter_sort.oldest=Elstu
-issues.filter_sort.recentupdate=Nýlega uppfærð
issues.filter_sort.leastupdate=Síðast uppfærð
issues.filter_sort.mostcomment=Flest ummæli
issues.filter_sort.leastcomment=Fæst ummæli
@@ -1002,7 +986,6 @@ settings.tracker_issue_style.numeric=Tölugildi
settings.danger_zone=Hættusvæði
settings.convert_notices_1=Þessi aðgerð mun breyta speglinum í venjulegt hugbúnaðarsafn og ekki er hægt að afturkalla hana.
settings.transfer=Flytja Eignarhald
-settings.trust_model.collaboratorcommitter.desc=Gildar undirskriftir frá samstarfsaðilum hugbúnaðarsafnsins verða merktar „traust“ ef þær passa við framlagandan. Að öðrum kosti verða gildar undirskriftir merktar „ótraust“ ef undirskriftin passar við framlagandan og „ósamþykkt“ að öðru leyti. Þetta mun neyða Gitea til að vera merkt sem framlagandi á undirrituðum framlögum með raunverulega framlagandan merktan sem Co-Authored-By: og Co-Committed-By: í framlaginu. Sjálfgefinn Gitea lykill verður að passa við notanda í gagnagrunninum.
settings.wiki_delete_desc=Að eyða handbókargögn er varanlegt og ekki er hægt að afturkalla það.
settings.delete=Eyða Þetta Hugbúnaðarsafn
settings.delete_desc=Að eyða hugbúnaðarsafni er varanlegt og ekki er hægt að afturkalla það.
@@ -1027,11 +1010,9 @@ settings.event_release=Útgáfa
settings.event_push=Push
settings.event_repository=Hugbúnaðarsafn
settings.event_issues=Vandamál
-settings.event_issues_desc=Vandamál opið, lokað, enduropnað eða breytt.
settings.event_issue_label=Vandamál Lýst
settings.event_issue_comment=Ummæli um Vandamál
settings.event_pull_request=Sameiningarbeiðni
-settings.event_pull_request_desc=Sameiningarbeiðni opnuð, lokuð, enduropnuð eða breytt.
settings.active=Virkt
settings.update_webhook=Uppfæra Vefkrók
settings.slack_token=Táknlykill
@@ -1118,6 +1099,8 @@ settings.visibility.private_shortname=Einka
settings.update_settings=Uppfæra Stillingar
+
+
members.private=Faldir
members.owner=Eigandi
members.member=Meðlimur
@@ -1173,9 +1156,7 @@ users.list_status_filter.not_prohibit_login=Leyfa Innskráningu
users.list_status_filter.not_2fa_enabled=Tvíþætt Auðkenning Óvirk
emails.primary=Aðal
-emails.filter_sort.email=Tölvupóstur
emails.filter_sort.name=Notandanafn
-emails.updated=Netfang uppfært
orgs.name=Heiti
orgs.teams=Lið
diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini
index 9cc257029b6..f6616418ada 100644
--- a/options/locale/locale_it-IT.ini
+++ b/options/locale/locale_it-IT.ini
@@ -40,7 +40,6 @@ webauthn_use_twofa=Usa un codice a due fattori dal tuo telefono
webauthn_error=Impossibile leggere la tua chiave di sicurezza.
webauthn_unsupported_browser=Il tuo browser al momento non supporta WebAuthn.
webauthn_error_unknown=Si è verificato un errore sconosciuto. Riprova.
-webauthn_error_insecure=`WebAuthn supporta solo connessioni sicure. Per il test su HTTP, è possibile utilizzare l'origine "localhost" o "127.0.0.1"`
webauthn_error_unable_to_process=Il server non può elaborare la richiesta.
webauthn_error_duplicated=La chiave di sicurezza non è consentita per questa richiesta. Assicurati che la chiave non sia già registrata.
webauthn_error_empty=Devi impostare un nome per questa chiave.
@@ -166,16 +165,10 @@ path=Percorso
sqlite_helper=Percorso file del database SQLite3. Inserisci un percorso assoluto se stai usando Gitea come servizio.
reinstall_error=Stai cercando di installare in un database Gitea esistente
reinstall_confirm_message=La reinstallazione con un database Gitea esistente può causare problemi multipli. Nella maggior parte dei casi, dovresti usare il tuo "app.ini" esistente per eseguire Gitea. Se sai cosa stai facendo, confermi quanto segue:
-reinstall_confirm_check_1=I dati crittografati da SECRET_KEY nell'app. ni potrebbe essere perso: gli utenti potrebbero non essere in grado di accedere con 2FA/OTP & mirror potrebbe non funzionare correttamente. Selezionando questa casella confermi che il file attuale app.ini contiene il corretto SECRET_KEY.
-reinstall_confirm_check_2=I repository e le impostazioni potrebbero avere bisogno di essere ri-sincronizzati. Selezionando questa casella confermi che potrai risincronizzare manualmente gli hook per i repository e il file authorized_keys. Confermi che assicurerai che le impostazioni del repository e del mirror siano corrette.
reinstall_confirm_check_3=Confermi di essere assolutamente sicuro che questo Gitea è in esecuzione con l'app corretta. ni posizione e che sei sicuro di dover reinstallare. Confermi di aver riconosciuto i rischi di cui sopra.
err_empty_db_path=Il percorso del database SQLite3 non può essere vuoto.
no_admin_and_disable_registration=Non puoi disabilitare l'auto-registrazione degli utenti senza creare un account amministratore.
err_empty_admin_password=La password dell'amministratore non può essere vuota.
-err_empty_admin_email=L'email dell'amministratore non può essere vuota.
-err_admin_name_is_reserved=Nome utente Administrator non valido, nome utente riservato
-err_admin_name_pattern_not_allowed=Nome utente dell'amministratore non valido. Il nome utente fornito corrisponde ad un pattern riservato
-err_admin_name_is_invalid=Il nome utente Administrator non è valido
general_title=Impostazioni Generali
app_name=Titolo del Sito
@@ -190,7 +183,6 @@ domain_helper=Dominio o indirizzo host per il server.
ssh_port=Porta Server SSH
ssh_port_helper=Numero di porta in ascolto sul server SSH. Lasciare vuoto per disattivare.
http_port=Porta in ascolto HTTP Gitea
-http_port_helper=Numero della porta sul quale i server web Gitea ascolteranno.
app_url=URL di base di Gitea
app_url_helper=URL di base per gli HTTP(S) clone URLs e notifiche email.
log_root_path=Percorso dei log
@@ -298,7 +290,6 @@ allow_password_change=Richiede all'utente di cambiare la password (scelta consig
reset_password_mail_sent_prompt=Una email di conferma è stata inviata a %s . Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di reset della password.
active_your_account=Attiva il tuo Account
account_activated=L'account è stato attivato
-prohibit_login=Accesso proibito
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 (%s ). 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
@@ -330,13 +321,10 @@ openid_connect_title=Connetti a una conta esistente
openid_connect_desc=L'URI OpenID scelto è sconosciuto. Qui puoi associarlo a un nuovo account.
openid_register_title=Crea Nuovo Account
openid_register_desc=L'URI OpenID scelto è sconosciuto. Qui puoi associarlo a un nuovo account.
-disable_forgot_password_mail=Il recupero dell'account è disabilitato perché non è stata impostata alcuna email. Contatta l'amministratore del sito.
-disable_forgot_password_mail_admin=Il recupero dell'account è disponibile solo quando l'email è impostata. Si prega di impostare un'email per abilitare il recupero dell'account.
email_domain_blacklisted=Non è possibile registrarsi con il proprio indirizzo email.
authorize_application=Autorizza applicazione
authorize_redirect_notice=Verrai reindirizzato a %s se autorizzi questa applicazione.
authorize_application_created_by=Questa applicazione è stata creata da %s.
-authorize_application_description=Se concedi l'accesso, l'app sarà in grado di accedere e modificare tutte le informazioni del tuo account, inclusi i repository privati e le organizzazioni.
authorize_title=Vuoi autorizzare "%s" ad accedere al tuo account?
authorization_failed=Autorizzazione fallita
sspi_auth_failed=Autenticazione SSPI fallita
@@ -356,8 +344,6 @@ activate_email=Verifica il tuo indirizzo e-mail
activate_email.text=Clicca sul seguente link per verificare il tuo indirizzo email entro %s :
register_notify.title=%[1]s, benvenuto in %[2]s
-register_notify.text_1=questa è la tua email di conferma di registrazione per %s!
-register_notify.text_2=Ora è possibile accedere tramite nome utente: %s.
register_notify.text_3=Se questo account è stato creato per te, per favore imposta prima la tua password .
reset_password=Recupera il tuo account
@@ -395,7 +381,6 @@ release.download.targz=Codice Sorgente (Tar.Gz)
repo.transfer.subject_to=%s vorrebbe trasferire "%s" a %s
repo.transfer.subject_to_you=%s vorrebbe trasferire "%s" a te
repo.transfer.to_you=tu
-repo.transfer.body=Per accettare o respingerla visita %s o semplicemente ignorarla.
repo.collaborator.added.subject=%s ti ha aggiunto a %s
repo.collaborator.added.text=Sei stato aggiunto come collaboratore del repository:
@@ -450,11 +435,9 @@ username_change_not_local_user=Gli utenti non locali non sono autorizzati a modi
repo_name_been_taken=Il nome del repository esiste già.
repository_force_private=Force Private è abilitato: i repository privati non possono essere resi pubblici.
repository_files_already_exist=File già esistenti per questo repository. Contatta l'amministratore di sistema.
-repository_files_already_exist.adopt=I file esistono già per questo repository e possono essere solo Adottati.
repository_files_already_exist.delete=I file esistono già per questo repository. È necessario eliminarli.
repository_files_already_exist.adopt_or_delete=I file esistono già per questo repository. O li Adotti o li Elimini.
visit_rate_limit=La visita remota ha segnalato un limite raggiunto.
-2fa_auth_required=La visita remota ha richiesto l'autenticazione a due fattori.
org_name_been_taken=Il nome della organizzazione esiste già.
team_name_been_taken=Il nome del team esiste già.
team_no_units_error=Consenti l'accesso ad almeno una sezione del repository.
@@ -581,7 +564,6 @@ activate_email=Invia Attivazione
activations_pending=Attivazioni in sospeso
delete_email=Rimuovi
email_deletion=Rimuovi indirizzo Email
-email_deletion_desc=L'indirizzo email e le relativa informazioni verranno rimosse dal tuo account. I Git commits di questa email rimarranno invariati. Continuare?
email_deletion_success=L'indirizzo email è stato eliminato.
theme_update_success=Il tema è stato aggiornato.
theme_update_error=Il tema selezionato non esiste.
@@ -622,7 +604,6 @@ gpg_key_matched_identities_long=Le identità incorporate in questa chiave corris
gpg_key_verified=Chiave Verificata
gpg_key_verified_long=La chiave è stata verificata con un token e può essere utilizzata per verificare che i commit corrispondano a tutti gli indirizzi email attivati per questo utente oltre a qualsiasi identità corrispondente per questa chiave.
gpg_key_verify=Verifica
-gpg_invalid_token_signature=La chiave GPG fornita, la firma e il token non corrispondono o il token è obsoleto.
gpg_token_required=Devi fornire una firma per il token sottostante
gpg_token=Token
gpg_token_help=È possibile generare una firma utilizzando:
@@ -631,7 +612,6 @@ key_signature_gpg_placeholder=Comincia con '-----BEGIN PGP SIGNATURE-----'
ssh_key_verified=Chiave Verificata
ssh_key_verified_long=La chiave è stata verificata con un token e può essere utilizzata per verificare che i commit corrispondano a tutti gli indirizzi email attivati per questo utente.
ssh_key_verify=Verifica
-ssh_invalid_token_signature=La chiave SSH fornita, la firma o il token non corrispondono o il token è obsoleto.
ssh_token_required=Devi fornire una firma per il token sottostante
ssh_token=Token
ssh_token_help=È possibile generare una firma utilizzando:
@@ -648,7 +628,6 @@ gpg_key_deletion=Rimuovi chiave GPG
ssh_principal_deletion=Rimuovi certificato SSH principale
ssh_key_deletion_desc=Rimuovere una chiave SSH ne revoca l'accesso al tuo account. Continuare?
gpg_key_deletion_desc=La rimozione di una chiave GPG invalida i commits firmati da essa. Continuare?
-ssh_principal_deletion_desc=Rimuovere un Certificato Utente SSH ne revoca l'accesso al tuo account. Continuare?
ssh_key_deletion_success=La chiave SSH è stata rimossa.
gpg_key_deletion_success=La chiave GPG è stata rimossa.
ssh_principal_deletion_success=Il principale è stato rimosso.
@@ -703,12 +682,10 @@ oauth2_application_create_description=OAuth2 da l'accesso al tuo account di ques
authorized_oauth2_applications=Applicazioni OAuth2 autorizzate
revoke_key=Revoca
revoke_oauth2_grant=Revoca accesso
-revoke_oauth2_grant_description=Revocando l'accesso a questa applicazione di terze parti impedirá l'accesso ai tuoi dati. Sei sicuro?
twofa_is_enrolled=La verifica in due passaggi è attualmente abilitata sul tuo account.
twofa_not_enrolled=La verifica in due passaggi al momento non è abilitata sul tuo account.
twofa_disable=Disattiva la verifica in due passaggi
-twofa_enroll=Iscriviti alla verifica in due passaggi
twofa_disable_note=Se necessario, è possibile disattivare la verifica in due passaggi.
twofa_disable_desc=Disattivare la verifica in due passaggi renderà il tuo account meno sicuro. Continuare?
twofa_disabled=L'autenticazione a due fattori è stata disattivata.
@@ -721,11 +698,9 @@ twofa_failed_get_secret=Impossibile ottenere il segreto.
webauthn_register_key=Aggiungi Chiave Di Sicurezza
webauthn_nickname=Soprannome
webauthn_delete_key=Rimuovi Chiave Di Sicurezza
-webauthn_delete_key_desc=Se si rimuove una chiave di sicurezza non è più possibile accedere con esso. Continuare?
manage_account_links=Gestisci gli account collegati
manage_account_links_desc=Questi account esterni sono collegati al tuo account Gitea.
-account_links_not_available=Attualmente non è collegato alcun account esterno al tuo account Gitea.
link_account=Collega Account
remove_account_link=Rimuovi account collegato
remove_account_link_desc=Rimuovere un account collegato ne revoca l'accesso al tuo account Gitea. Continuare?
@@ -808,7 +783,6 @@ mirror_address_desc=Metti tutte le credenziali richieste nella sezione Autorizza
mirror_lfs=Large File Storage (LFS)
mirror_lfs_desc=Attiva il mirroring dei dati LFS.
mirror_lfs_endpoint=Punto d'accesso LFS
-mirror_lfs_endpoint_desc=La sincronizzazione tenterà di utilizzare l'url clone per determinare il server LFS . È inoltre possibile specificare un endpoint personalizzato se il repository dati LFS è memorizzato da qualche altra parte.
mirror_last_synced=Ultima sincronizzazione
mirror_password_placeholder=(Inmodificato)
mirror_password_blank_placeholder=(Disattivato)
@@ -819,7 +793,6 @@ forks=Fork
reactions_more=e %d più
unit_disabled=L'amministratore ha disabilitato questa sezione del repository.
language_other=Altro
-adopt_search=Inserisci il nome utente per cercare i repository non adottati... (lascia vuoto per trovare tutti)
adopt_preexisting_label=Adotta File
adopt_preexisting=Adottare file preesistenti
adopt_preexisting_content=Crea repository da %s
@@ -876,17 +849,14 @@ migrate_items_releases=Rilasci
migrate_repo=Migra Repository
migrate.clone_address=Migra / Clona da URL
migrate.clone_address_desc=URL HTTP (S) o Git 'clone' di un repository esistente
-migrate.github_token_desc=È possibile mettere uno o più token con virgola separati qui per rendere la migrazione più veloce a causa del limite di velocità API GitHub. ATTENZIONE: L'abuso di questa funzione potrebbe violare la politica del fornitore di servizi e portare al blocco dell'account.
migrate.clone_local_path=o un percorso del server locale
migrate.permission_denied=Non è consentito importare repository locali.
-migrate.permission_denied_blocked=Non è possibile importare da host non consentiti, si prega di chiedere all'amministratore di controllare ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS impostazioni.
migrate.invalid_lfs_endpoint=Il punto d'accesso LFS non è valido.
migrate.failed=Migrazione non riuscita: %v
migrate.migrate_items_options=Il Token di accesso è richiesto per migrare elementi aggiuntivi
migrated_from=Migrato da %[2]s
migrated_from_fake=Migrato da %[1]s
migrate.migrate=Migra da %s
-migrate.migrating=Migrazione da %s ...
migrate.migrating_failed=Migrazione da %s fallita.
migrate.migrating_failed_no_addr=Migrazione non riuscita.
migrate.github.description=Migrare i dati da github.com o da altre istanze di GitHub.
@@ -923,7 +893,6 @@ quick_guide=Guida rapida
clone_this_repo=Clona questo repository
create_new_repo_command=Creazione di un nuovo repository da riga di comando
push_exist_repo=Push di un repository esistente da riga di comando
-empty_message=Questo repository non contiene alcun contenuto.
broken_message=I dati Git sottostanti a questo repository non possono essere letti. Contattare l'amministratore di questa istanza o eliminare questo repository.
code=Codice
@@ -940,7 +909,6 @@ pulls=Pull Requests
projects=Progetti
packages=Pacchetti
labels=Etichette
-org_labels_desc=Etichette a livello di organizzazione che possono essere utilizzate con tutti i repository sotto questa organizzazione
org_labels_desc_manage=gestisci
milestone=Traguardo
@@ -1014,7 +982,6 @@ editor.file_changed_while_editing=I contenuti di questo file hanno subito dei ca
editor.commit_empty_file_header=Commit di un file vuoto
editor.commit_empty_file_text=Il file che stai per effettuare il commit è vuoto. Procedere?
editor.no_changes_to_show=Non ci sono cambiamenti da mostrare.
-editor.fail_to_update_file_summary=Messaggio d'errore:
editor.push_rejected_no_message=La modifica è stata rifiutata dal server senza un messaggio. Controlla Git Hooks.
editor.push_rejected=La modifica è stata rifiutata dal server. Controlla Git Hooks.
editor.push_rejected_summary=Messaggio Di Rifiuto Completo:
@@ -1025,6 +992,7 @@ editor.require_signed_commit=Il branch richiede un commit firmato
editor.cherry_pick=Cherry-pick %s suto:
editor.revert=Ripristina %s su:
+
commits.desc=Sfoglia la cronologia di modifiche del codice rogente.
commits.commits=Commit
commits.nothing_to_compare=Questi rami sono uguali.
@@ -1152,7 +1120,6 @@ issues.filter_type.review_requested=Richiesta revisione
issues.filter_sort=Ordina
issues.filter_sort.latest=Più recenti
issues.filter_sort.oldest=Più vecchi
-issues.filter_sort.recentupdate=Aggiornati di recente
issues.filter_sort.leastupdate=Aggiornati tempo fa
issues.filter_sort.mostcomment=I più commentati
issues.filter_sort.leastcomment=I meno commentati
@@ -1242,7 +1209,6 @@ issues.lock_no_reason=ha bloccato e limitato la conversazione ai collaboratori %
issues.unlock_comment=ha sbloccato questa conversazione %s
issues.lock_confirm=Blocca
issues.unlock_confirm=Sblocca
-issues.lock.notice_1=- Altri utenti non possono aggiungere nuovi commenti a questo problema.
issues.lock.notice_2=- Tu e altri collaboratori con accesso a questo repository potete ancora lasciare commenti che altri possono vedere.
issues.lock.notice_3=- Puoi sempre sbloccare questo problema in futuro.
issues.unlock.notice_1=- Tutti potranno commentare nuovamente questo problema.
@@ -1298,8 +1264,6 @@ issues.dependency.pr_closing_blockedby=La chiusura di questa pull request è blo
issues.dependency.issue_closing_blockedby=La chiusura di questo problema è bloccata dai seguenti problemi
issues.dependency.issue_close_blocks=Questo problema impedisce la chiusura dei seguenti problemi
issues.dependency.pr_close_blocks=Questa richiesta di pull impedisce la chiusura dei seguenti problemi
-issues.dependency.issue_close_blocked=Devi chiudere tutte le anomalie che bloiccano questo problema prima di chiudelo.
-issues.dependency.pr_close_blocked=Chiudere tutte le anomalie che bloccano la richiesta di pull prima di effettaure il merge.
issues.dependency.blocks_short=Blocchi
issues.dependency.blocked_by_short=Dipende da
issues.dependency.remove_header=Rimuovi Dipendenza
@@ -1310,12 +1274,10 @@ issues.dependency.add_error_same_issue=Non si può fare dipendere un problema da
issues.dependency.add_error_dep_issue_not_exist=Il problema dipendente non esiste.
issues.dependency.add_error_dep_not_exist=La dipendenza non esiste.
issues.dependency.add_error_dep_exists=La dipendenza esiste già.
-issues.dependency.add_error_cannot_create_circular=Non puoi creare una dipendenza con due problemi che si bloccano a vicenda.
issues.dependency.add_error_dep_not_same_repo=Entrambi i problemi devono essere nello stesso repository.
issues.review.self.approval=Non puoi approvare la tua pull request.
issues.review.self.rejection=Non puoi richiedere modifiche sulla tua pull request.
issues.review.approve=hanno approvato queste modifiche %s
-issues.review.dismissed=recensione %s di %s respinta
issues.review.dismissed_label=Respinta
issues.review.left_comment=lascia un commento
issues.review.content.empty=Devi lasciare un commento che indichi la modifica richiesta.
@@ -1323,7 +1285,6 @@ issues.review.reject=richieste modifiche %s
issues.review.wait=è stato richiesto per la revisione %s
issues.review.add_review_request=recensione richiesta da %s %s
issues.review.remove_review_request=ha rimosso la richiesta di revisione per %s %s
-issues.review.remove_review_request_self=ha rifiutato di rivedere %s
issues.review.pending=In sospeso
issues.review.review=Revisiona
issues.review.reviewers=Revisori
@@ -1336,7 +1297,6 @@ issues.review.resolve_conversation=Risolvi la conversazione
issues.review.un_resolve_conversation=Segnala la conversazione come non risolta
issues.review.resolved_by=ha contrassegnato questa conversazione come risolta
issues.review.commented=Commentare
-issues.assignee.error=Non tutte le assegnazioni sono state aggiunte a causa di un errore imprevisto.
issues.reference_issue.body=Corpo
issues.content_history.deleted=eliminato
issues.content_history.edited=modificato
@@ -1403,29 +1363,20 @@ pulls.reject_count_1=%d richiesta di cambiamento
pulls.reject_count_n=%d richieste di cambiamento
pulls.waiting_count_1=%d in attesa di revisione
pulls.waiting_count_n=%d in attesa di revisione
-pulls.wrong_commit_id=l'id del commit deve essere un id del commit nel branch di destinazione
pulls.no_merge_desc=Questa pull request non può essere unita perché tutte le opzioni di merge del repository sono disattivate.
pulls.no_merge_helper=Attiva le opzioni di merge nelle impostazioni del repository o unisci la pull request manualmente.
pulls.no_merge_wip=Questa pull request non può essere unita perché è contrassegnata come un lavoro in corso.
-pulls.no_merge_not_ready=Questa pull request non è pronta per il merge, controlla lo stato della revisione e i controlli di stato.
pulls.no_merge_access=Non sei autorizzato ad effettuare il merge su questa pull request.
pulls.merge_pull_request=Crea commit unito
-pulls.rebase_merge_pull_request=Ricostruisci poi manda avanti
-pulls.rebase_merge_commit_pull_request=Ricostruisci quindi crea commit unito
pulls.squash_merge_pull_request=Crea commit mescolato
pulls.merge_manually=Unito manualmente
pulls.merge_commit_id=L'ID del commit di merge
pulls.require_signed_wont_sign=Il branch richiede commit firmati ma questo merge non verrà firmato
pulls.invalid_merge_option=Non puoi utilizzare questa opzione di merge per questa pull request.
-pulls.merge_conflict=Unione non riuscita: C'è stato un conflitto durante l'operazione. Suggerimento: Prova una strategia diversa
pulls.merge_conflict_summary=Messaggio d'errore
-pulls.rebase_conflict=Merge non riuscito: c'è stato un conflitto durante il rebase dell'commit: %[1]s. Suggerimento: Prova una strategia diversa
pulls.rebase_conflict_summary=Messaggio d'Errore
-pulls.unrelated_histories=Unione fallita: gli Head del ramo da unire e la base non condividono una storia cronologica in comune. Suggerimento: prova una strategia diversa
-pulls.merge_out_of_date=Unione fallita: Durante la generazione del merge, la base è stata aggiornata. Suggerimento: Riprova.
-pulls.head_out_of_date=Unione non riuscita: durante la generazione della fusione, la testa è stata aggiornata. Suggerimento: Riprova.
pulls.push_rejected_summary=Messaggio Di Rifiuto Completo
pulls.open_unmerged_pull_exists=`Non è possibile riaprire questa pull request perché ne esiste un'altra (#%d) con proprietà identiche.`
pulls.status_checking=Alcuni controlli sono in sospeso
@@ -1555,7 +1506,6 @@ activity.title.releases_1=%d Release
activity.title.releases_n=%d Release
activity.title.releases_published_by=%s pubblicata da %s
activity.published_release_label=Pubblicata
-activity.no_git_activity=In questo periodo non c'è stata alcuna attività di commit.
activity.git_stats_exclude_merges=Escludendo i merge,
activity.git_stats_author_1=%d autore
activity.git_stats_author_n=%d autori
@@ -1580,7 +1530,6 @@ activity.git_stats_deletion_n=%d cancellazioni
contributors.contribution_type.commits=Commit
settings=Impostazioni
-settings.desc=Impostazioni ti permette di gestire le impostazioni del repository
settings.options=Repository
settings.collaboration=Collaboratori
settings.collaboration.admin=Amministratore
@@ -1643,7 +1592,6 @@ settings.admin_indexer_commit_sha=Hash SHA dell'ultimo commit indicizzato
settings.admin_indexer_unindexed=Non indicizzato
settings.reindex_button=Aggiungi alla coda di re-indicizzazione
settings.reindex_requested=Re-indicizzazione richiesta
-settings.admin_enable_close_issues_via_commit_in_any_branch=Chiudi un issue tramite un commit eseguito in un branch non predefinito
settings.danger_zone=Zona Pericolosa
settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome.
settings.convert=Converti in un repository regolare
@@ -1663,7 +1611,6 @@ settings.transfer_abort=Annulla trasferimento
settings.transfer_abort_invalid=Non è possibile annullare un trasferimento di repository non esistente.
settings.transfer_desc=Trasferisci questo repository a un altro utente o a un'organizzazione nella quale hai diritti d'amministratore.
settings.transfer_form_title=Inserisci il nome del repository come conferma:
-settings.transfer_in_progress=Al momento c'è un trasferimento in corso. Si prega di annullarlo se si desidera trasferire questo repository a un altro utente.
settings.transfer_notices_1=-Si perderà l'accesso al repository se lo si trasferisce ad un utente singolo.
settings.transfer_notices_2=-Si manterrà l'accesso al repository se si trasferisce in un'organizzazione che possiedi (o condividi con qualcun'altro).
settings.transfer_notices_3=- Se il repository è privato e viene trasferito a un singolo utente, questa azione si assicura che l'utente abbia almeno i permessi di lettura (e le modifiche se necessario).
@@ -1677,12 +1624,9 @@ settings.trust_model.default=Modello Di Fiducia Predefinito
settings.trust_model.default.desc=Usa il modello di trust del repository predefinito per questa installazione.
settings.trust_model.collaborator=Collaboratore
settings.trust_model.collaborator.long=Collaboratore: Firme di fiducia da parte dei collaboratori
-settings.trust_model.collaborator.desc=Le firme valide da parte dei collaboratori di questo repository saranno contrassegnate con "trusted" (sia che corrispondano al committer o meno). Altrimenti, le firme valide saranno contrassegnate con "untrusted" se la firma corrisponde al committer e "unmatched" se non.
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: firme affidabili che corrispondono ai committer (questo corrisponde a GitHub e costringerà i commit firmati di Gitea ad avere Gitea come committer)
settings.trust_model.collaboratorcommitter=Collaboratore+Committer
settings.trust_model.collaboratorcommitter.long=Collaboratore+Committer: Firme di fiducia da parte dei collaboratori che corrispondono al committer
-settings.trust_model.collaboratorcommitter.desc=Le firme valide da parte dei collaboratori di questa repository saranno contrassegnate "fidate" se corrispondono al committer. Altrimenti le firme saranno contrassegnate con "untrusted" se la firma corrisponde al committer non corrisponde. Questo costringerà Gitea a essere contrassegnato come committer su impegni firmati con l'effettivo committer contrassegnato come Co-Authored-By: e Co-Committed-By: nel commit. La chiave Gitea predefinita deve corrispondere a un utente nel database.
settings.wiki_delete=Elimina dati Wiki
settings.wiki_delete_desc=L'eliminazione dei dati della wiki del repository è permanente e non può essere annullata.
settings.wiki_delete_notices_1=-Questa operazione eliminerà permanentemente e disabiliterà la wiki repository per %s.
@@ -1691,7 +1635,6 @@ settings.wiki_deletion_success=I dati della repository wiki sono stati eliminati
settings.delete=Elimina questo repository
settings.delete_desc=L'eliminazione di un repository è un'operazione permanente e non può essere annullata.
settings.delete_notices_1=-Questa operazione NON PUÒ essere annullata.
-settings.delete_notices_2=-Questa operazione eliminerà definitivamente il repository %s inclusi codice, issue, commenti, dati wiki e impostazioni collaboratore.
settings.delete_notices_fork_1=-I fork di questo repository diventeranno indipendenti dopo la cancellazione.
settings.deletion_success=Il repository è stato eliminato.
settings.update_settings_success=Le impostazioni del repository sono state aggiornate.
@@ -1710,8 +1653,6 @@ settings.team_not_in_organization=Il team non è nella stessa organizzazione del
settings.teams=Gruppi
settings.add_team=Aggiungi Squadra
settings.add_team_duplicate=Il team ha già il repository
-settings.add_team_success=Il team ha ora accesso al repository.
-settings.change_team_permission_tip=Il permesso del team è impostato sulla pagina delle impostazioni del team e non può essere modificato per repository
settings.delete_team_tip=Questo team ha accesso a tutte le repository e non può essere rimosso
settings.remove_team_success=L'accesso del team al repository è stato rimosso.
settings.add_webhook=Aggiungi Webhook
@@ -1720,8 +1661,6 @@ settings.hooks_desc=I Webhook effettuano automaticamente richieste HTTP POST ad
settings.webhook_deletion=Rimuovi Webhook
settings.webhook_deletion_desc=Rimuovere un webhook rimuove le sue impostazioni e la sua cronologia di consegna. Continuare?
settings.webhook_deletion_success=Il webhook è stato rimosso.
-settings.webhook.test_delivery=Test di consegna
-settings.webhook.test_delivery_desc=Prova questo webhook con un evento falso.
settings.webhook.request=Richiesta
settings.webhook.response=Risposta
settings.webhook.headers=Intestazioni
@@ -1764,7 +1703,6 @@ settings.event_repository=Repository
settings.event_repository_desc=Repository creato o eliminato.
settings.event_header_issue=Eventi dei Problemi
settings.event_issues=Issues
-settings.event_issues_desc=Issue aperto, chiuso, riaperto o modificato.
settings.event_issue_assign=Issue Assegnato
settings.event_issue_assign_desc=Issue assegnata o non assegnata.
settings.event_issue_label=Issue etichettato
@@ -1775,7 +1713,6 @@ settings.event_issue_comment=Commento Issue
settings.event_issue_comment_desc=Commento issue creato, modificato o rimosso.
settings.event_header_pull_request=Eventi di Pull Request
settings.event_pull_request=Pull Request
-settings.event_pull_request_desc=Pull request aperta, chiusa, riaperta o modificata.
settings.event_pull_request_assign=Pull Request assegnata
settings.event_pull_request_assign_desc=Pull request assegnata o non assegnata.
settings.event_pull_request_label=Pull Request etichettata
@@ -1899,11 +1836,9 @@ settings.lfs_invalid_locking_path=Percorso non valido: %s
settings.lfs_invalid_lock_directory=Impossibile bloccare la cartella: %s
settings.lfs_lock_already_exists=Il blocco esiste già: %s
settings.lfs_lock=Blocca
-settings.lfs_lock_path=Percorso file da bloccare...
settings.lfs_locks_no_locks=Nessun blocco
settings.lfs_lock_file_no_exist=Il file bloccato non esiste nel ramo predefinito
settings.lfs_force_unlock=Sblocco forzato
-settings.lfs_pointers.found=Trovati %d puntatori blob - %d associati, %d non associati (%d mancanti dalla memoria)
settings.lfs_pointers.sha=SHA Blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Nel repo
@@ -2078,14 +2013,13 @@ settings.visibility.private_shortname=Privato
settings.update_settings=Aggiorna Impostazioni
settings.update_setting_success=Le impostazioni dell'organizzazione sono state aggiornate.
-settings.change_orgname_redirect_prompt=Il vecchio nome reindirizzerà fino a quando non sarà richiesto.
+
+
settings.update_avatar_success=L'avatar dell'organizzazione è stato aggiornato.
settings.delete=Elimina organizzazione
settings.delete_account=Elimina questa organizzazione
settings.delete_prompt=L'organizzazione verrà rimossa definitivamente. Questa operazione NON PUÒ essere annullata!
settings.confirm_delete_account=Conferma Eliminazione
-settings.delete_org_title=Elimina organizzazione
-settings.delete_org_desc=Questa organizzazione verrà eliminata definitivamente. Continuare?
settings.hooks_desc=Aggiungi i webhooks che verranno attivati per tutti i repository sotto questa organizzazione.
settings.labels_desc=Aggiungi i webhooks che verranno attivati per tutti i repository sotto questa organizzazione.
@@ -2158,7 +2092,6 @@ organizations=Organizzazioni
repositories=Repository
hooks=Webhooks
authentication=Fonti di autenticazione
-emails=Email Utente
config=Configurazione
config_summary=Riepilogo
config_settings=Impostazioni
@@ -2185,26 +2118,16 @@ dashboard.cron.process=Cron: %[1]s
dashboard.cron.error=Errore in Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s ha finito
dashboard.delete_inactive_accounts=Elimina tutti gli account non attivati
-dashboard.delete_inactive_accounts.started=Attività di eliminazione degli account non attivati iniziata.
dashboard.delete_repo_archives=Elimina tutti gli archivi dei repository (ZIP, TAR.GZ, etc..)
-dashboard.delete_repo_archives.started=Attività di eliminazione degli archivi del repository iniziata.
dashboard.delete_missing_repos=Elimina tutti i repository mancanti dei loro file Git
-dashboard.delete_missing_repos.started=Elimina tutti i repository mancanti dei loro file Git.
dashboard.delete_generated_repository_avatars=Elimina gli avatar generati nelle repository
dashboard.update_mirrors=Aggiorna Mirror
dashboard.repo_health_check=Controlla integrità di tutti i repository
dashboard.check_repo_stats=Controlla tutte le statistiche del repository
dashboard.archive_cleanup=Elimina vecchi archivi del repository
-dashboard.deleted_branches_cleanup=Pulisci branch eliminati
dashboard.update_migration_poster_id=Aggiorna gli ID del poster di migrazione
-dashboard.git_gc_repos=Esegui la garbage collection su tutti i repository
-dashboard.resync_all_sshkeys=Aggiornare il file '.ssh/authorized_keys' con le chiavi SSH Gitea.
-dashboard.resync_all_sshprincipals=Aggiornare il file '.ssh/authorized_keys' con le chiavi SSH Gitea.
-dashboard.resync_all_hooks=Sincronizza nuovamente gli hook di pre-ricezione, di aggiornamento e di post-ricezione di tutti i repository.
dashboard.reinit_missing_repos=Reinizializza tutti i repository Git mancanti per i quali esistono cambiamenti registrati esistenti
dashboard.sync_external_users=Sincronizza dati utente esterno
-dashboard.cleanup_hook_task_table=Pulisci tabella hook_task
-dashboard.cleanup_packages=Pulizia pacchetti scaduti
dashboard.server_uptime=Tempo in Attività del Server
dashboard.current_goroutine=Goroutine Correnti
dashboard.current_memory_usage=Utilizzo di Memoria Corrente
@@ -2248,7 +2171,6 @@ users.2fa=2FA
users.repos=Repo
users.created=Creato
users.last_login=Ultimo accesso
-users.never_login=Mai effettuato l'accesso
users.send_register_notify=Invia notifica di registrazione utente
users.edit=Modifica
users.auth_source=Fonte di autenticazione
@@ -2292,11 +2214,7 @@ users.list_status_filter.not_2fa_enabled=2FA Disabilitato
emails.email_manage_panel=Gestione delle Email Utente
emails.primary=Primario
emails.activated=Attivato
-emails.filter_sort.email=Email
-emails.filter_sort.email_reverse=Email (inverso)
-emails.filter_sort.name=Nome Utente
-emails.filter_sort.name_reverse=Nome utente (inverso)
-emails.updated=Email aggiornata
+emails.filter_sort.name=Nome utente
emails.not_updated=Impossibile aggiornare l'indirizzo email richiesto: %v
emails.duplicate_active=Questo indirizzo email risulta già attivo per un altro utente.
emails.change_email_header=Aggiorna proprietà email
@@ -2407,23 +2325,16 @@ auths.oauth2_required_claim_name_helper=Imposta questo nome per limitare il logi
auths.oauth2_required_claim_value=Valore Richiesto
auths.oauth2_required_claim_value_helper=Imposta questo valore per limitare il login da questa fonte agli utenti con un reclamo con questo nome e valore
auths.oauth2_group_claim_name=Riscatta nome che fornisce nomi di gruppo per questa fonte (facoltativo)
-auths.oauth2_admin_group=Valore del reclamo di gruppo per gli utenti amministratori. (Opzionale - richiede il nome della richiesta sopra)
-auths.oauth2_restricted_group=Valore di reclamo di gruppo per utenti ristretti. (Facoltativo - richiede il nome di reclamo sopra)
auths.enable_auto_register=Abilitare Registrazione Automatica
auths.sspi_auto_create_users=Crea automaticamente gli utenti
-auths.sspi_auto_create_users_helper=Permetti al metodo di autenticazione SSPI di creare automaticamente nuovi account per gli utenti che accedono per la prima volta
auths.sspi_auto_activate_users=Attiva automaticamente gli utenti
auths.sspi_auto_activate_users_helper=Consenti al metodo di autenticazione SSPI di attivare automaticamente i nuovi utenti
auths.sspi_strip_domain_names=Rimuovi nomi dominio dai nomi utente
-auths.sspi_strip_domain_names_helper=Se selezionato, i nomi di dominio verranno rimossi dai nomi di accesso (es. "DOMAIN\user" e "user@example.org" entrambi diventeranno solo "user").
auths.sspi_separator_replacement=Separatore da utilizzare al posto di \, / e @
-auths.sspi_separator_replacement_helper=Il carattere da utilizzare per sostituire i separatori dei nomi di logon di livello inferiore (es. il \ in "DOMAIN\user") e i nomi dell'utente principale (es. il @ in "user@example.org").
auths.sspi_default_language=Lingua predefinita dell'utente
-auths.sspi_default_language_helper=Lingua predefinita per gli utenti creati automaticamente dal metodo di autenticazione SSPI. Lascia vuoto se preferisci che la lingua venga rilevata automaticamente.
auths.tips=Consigli
auths.tips.oauth2.general=Autenticazione OAuth2
auths.tip.oauth2_provider=OAuth2 Provider
-auths.tip.nextcloud=`Registra un nuovo OAuth sulla tua istanza utilizzando il seguente menu "Impostazioni -> Sicurezza -> OAuth 2.0 client"`
auths.tip.mastodon=Inserisci un URL di istanza personalizzato per l'istanza mastodon con cui vuoi autenticarti (o usa quella predefinita)
auths.edit=Modifica fonte di autenticazione
auths.activated=Questa fonte di autenticazione è attiva
@@ -2518,7 +2429,6 @@ config.mailer_sendmail_path=Percorso Sendmail
config.mailer_sendmail_args=Argomenti aggiuntivi per Sendmail
config.mailer_sendmail_timeout=Timeout Sendmail
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=Email (es. test@example.com)
config.send_test_mail=Invia email di prova
config.oauth_config=Configurazione OAuth
@@ -2586,7 +2496,6 @@ monitor.queue.numberworkers=Numero di workers
monitor.queue.maxnumberworkers=Massimo numero di Workers
monitor.queue.numberinqueue=Numero in coda
monitor.queue.settings.title=Impostazioni pool
-monitor.queue.settings.maxnumberworkers=Massimo numero di workers
monitor.queue.settings.maxnumberworkers.placeholder=Attualmente %[1]d
monitor.queue.settings.maxnumberworkers.error=Il numero massimo di lavoratori deve essere un numero
monitor.queue.settings.submit=Aggiorna Impostazioni
@@ -2681,8 +2590,6 @@ error.no_committer_account=Nessun account collegato all'indirizzo email del comm
error.no_gpg_keys_found=Non sono state trovate chiavi note per questa firma nel database
error.not_signed_commit=Commit non firmato
error.failed_retrieval_gpg_keys=Impossibile recuperare le chiavi associate all'account del committer
-error.probable_bad_signature=ATTENZIONE! Anche se esiste una chiave con questo ID nel database, essa non verifica questo commit! Questo commit è SOSPETTO.
-error.probable_bad_default_signature=ATTENZIONE! Anche se la chiave predefinita ha questo ID essa non verifica questo commit! Questo commit è SOSPETTO.
[units]
unit=Unità
@@ -2720,12 +2627,10 @@ alpine.repository.branches=Branches
alpine.repository.repositories=Repository
arch.repository.repositories=Repository
chef.install=Per installare il pacchetto, eseguire il seguente comando:
-composer.registry=Imposta questo registro nel tuo file ~/.composer/config.json:
composer.install=Per installare il pacchetto utilizzando Composer, eseguire il seguente comando:
composer.dependencies=Dipendenze
composer.dependencies.development=Dipendenze Di Sviluppo
conan.details.repository=Repository
-conan.registry=Configura questo registro dalla riga di comando:
conan.install=Per installare il pacchetto usando Conan, eseguire il seguente comando:
container.details.type=Tipo Immagine
container.details.platform=Piattaforma
@@ -2736,19 +2641,13 @@ container.labels=Etichette
container.labels.key=Chiave
container.labels.value=Valore
cran.install=Per installare il pacchetto, eseguire il seguente comando:
-debian.registry=Configura questo registro dalla riga di comando:
debian.install=Per installare il pacchetto, eseguire il seguente comando:
generic.download=Scarica il pacchetto dalla riga di comando:
-helm.registry=Configura questo registro dalla riga di comando:
helm.install=Per installare il pacchetto, eseguire il seguente comando:
-maven.registry=Configura questo registro nel file pom.xml del tuo progetto:
-maven.install=Per utilizzare il pacchetto includere i seguenti nel blocco dipendenze nel file pom.xml:
maven.install2=Esegui tramite riga di comando:
maven.download=Per scaricare la dipendenza, eseguire tramite riga di comando:
-nuget.registry=Configura questo registro dalla riga di comando:
nuget.install=Per installare il pacchetto utilizzando NuGet, eseguire il seguente comando:
nuget.dependency.framework=Target Framework
-npm.registry=Impostare questo registro nel file del progetto .npmrc:
npm.install=Per installare il pacchetto usando npm, eseguire il seguente comando:
npm.install2=o aggiungerlo al file package.json:
npm.dependencies=Dipendenze
@@ -2759,7 +2658,6 @@ npm.details.tag=Tag
pub.install=Per installare il pacchetto utilizzando NuGet, eseguire il seguente comando:
pypi.requires=Richiede Python
pypi.install=Per installare il pacchetto usando pip, eseguire il seguente comando:
-rpm.registry=Configura questo registro dalla riga di comando:
rpm.install=Per installare il pacchetto, eseguire il seguente comando:
rubygems.install=Per installare il pacchetto usando gem, eseguire il seguente comando:
rubygems.install2=o aggiungerlo al file Gem:
@@ -2767,7 +2665,6 @@ rubygems.dependencies.runtime=Dipendenze Runtime
rubygems.dependencies.development=Dipendenze Di Sviluppo
rubygems.required.ruby=Richiede la versione di Ruby
rubygems.required.rubygems=Richiede la versione RubyGem
-swift.registry=Configura questo registro dalla riga di comando:
settings.link=Collega questo pacchetto a un repository
settings.link.description=Se si collega un pacchetto a un repository, il pacchetto è elencato nell'elenco dei pacchetti del repository.
settings.link.select=Seleziona Repository
diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini
index 2934384052b..312e0dd4f12 100644
--- a/options/locale/locale_ja-JP.ini
+++ b/options/locale/locale_ja-JP.ini
@@ -131,7 +131,7 @@ unpin=ピン留め解除
artifacts=成果物
expired=期限切れ
-confirm_delete_artifact=アーティファクト %s を削除してよろしいですか?
+confirm_delete_artifact=アーティファクト '%s' を削除してよろしいですか?
archived=アーカイブ
@@ -171,30 +171,30 @@ internal_error_skipped=内部エラーが発生しましたがスキップされ
search=検索…
type_tooltip=検索タイプ
fuzzy=あいまい
-fuzzy_tooltip=検索語におおよそ一致する結果も含めます
+fuzzy_tooltip=検索語に近い結果も含めます
words=単語
words_tooltip=検索語と一致する結果だけを含めます
regexp=正規表現
regexp_tooltip=正規表現検索パターンと一致する結果だけを含めます
exact=完全一致
exact_tooltip=検索語と完全に一致する結果だけを含めます
-repo_kind=リポジトリを検索...
-user_kind=ユーザーを検索...
-org_kind=組織を検索...
+repo_kind=リポジトリを検索…
+user_kind=ユーザーを検索…
+org_kind=組織を検索…
team_kind=チームを検索…
-code_kind=コードを検索...
+code_kind=コードを検索…
code_search_unavailable=コード検索は現在利用できません。 サイト管理者にお問い合わせください。
code_search_by_git_grep=現在のコード検索は "git grep" によって行われています。 サイト管理者がリポジトリインデクサーを有効にすれば、より優れた結果が得られる可能性があります。
-package_kind=パッケージを検索...
-project_kind=プロジェクトを検索...
-branch_kind=ブランチを検索...
-tag_kind=タグを検索...
+package_kind=パッケージを検索…
+project_kind=プロジェクトを検索…
+branch_kind=ブランチを検索…
+tag_kind=タグを検索…
tag_tooltip=一致するタグを検索します。任意のシーケンスに一致させるには '%' を使用してください。
-commit_kind=コミットを検索...
-runner_kind=ランナーを検索...
+commit_kind=コミットを検索…
+runner_kind=ランナーを検索…
no_results=一致する結果が見つかりませんでした
-issue_kind=イシューを検索...
-pull_kind=プルリクエストを検索...
+issue_kind=イシューを検索…
+pull_kind=プルリクエストを検索…
keyword_search_unavailable=キーワード検索は現在利用できません。 サイト管理者にお問い合わせください。
[aria]
@@ -230,8 +230,8 @@ buttons.enable_monospace_font=等幅フォントを有効にする
buttons.disable_monospace_font=等幅フォントを無効にする
[filter]
-string.asc=A - Z
-string.desc=Z - A
+string.asc=A–Z
+string.desc=Z–A
[error]
occurred=エラーが発生しました
@@ -252,7 +252,7 @@ license_desc=Go get %[
[install]
install=インストール
-installing_desc=インストール中です、お待ちください...
+installing_desc=インストール中です、お待ちください…
title=初期設定
docker_helper=GiteaをDocker内で実行する場合は、設定を変更する前に ドキュメント を読んでください。
require_db_desc=Giteaには、MySQL、PostgreSQL、MSSQL、SQLite3、またはTiDB(MySQL プロトコル) が必要です。
@@ -277,7 +277,7 @@ no_admin_and_disable_registration=管理者アカウントを作成せずに、
err_empty_admin_password=管理者パスワードは空にできません。
err_empty_admin_email=管理者のメールアドレスは空にできません。
err_admin_name_is_reserved=管理者のユーザー名が不正です。予約済みのユーザー名です。
-err_admin_name_pattern_not_allowed=管理者のユーザー名が不正です。 予約済みのパターンにマッチしています
+err_admin_name_pattern_not_allowed=管理者のユーザー名が不正です。 予約済みのパターンにマッチしています。
err_admin_name_is_invalid=管理者のユーザー名が不正です
general_title=基本設定
@@ -294,7 +294,7 @@ domain_helper=サーバーのドメインまたはホストアドレス。
ssh_port=SSHサーバーのポート
ssh_port_helper=SSHサーバーが使うポート番号。 空の場合はSSHサーバーを無効にします。
http_port=Gitea HTTPポート
-http_port_helper=GiteaのWebサーバーが使うポート番号。
+http_port_helper=GiteaのWebサーバーが接続待ちするポート番号。
app_url=GiteaのベースURL
app_url_helper=HTTP(S)のクローンURLとメール通知で使うベースアドレス。
log_root_path=ログの保存先パス
@@ -421,6 +421,7 @@ remember_me.compromised=ログイントークンはもう有効ではなく、
forgot_password_title=パスワードを忘れた
forgot_password=パスワードをお忘れですか?
need_account=アカウントが必要ですか?
+sign_up_tip=管理者権限を持つ、このシステムの最初のアカウントを登録しようとしています。 ユーザー名とパスワードをよく覚えておいてください。 ユーザー名またはパスワードを忘れた場合は、Giteaのドキュメントを参照してアカウントを復元してください。
sign_up_now=登録はこちら。
sign_up_successful=アカウントは無事に作成されました。ようこそ!
confirmation_mail_sent_prompt_ex=新しい確認メールを %s に送信しました。 %s以内にメールボックスを確認し、登録手続きを完了してください。 登録メールアドレスが間違っている場合は、もういちどサインインすると変更することができます。
@@ -463,15 +464,15 @@ oauth_signin_submit=アカウントにリンク
oauth.signin.error.general=認可リクエストの処理中にエラーが発生しました: %s 。このエラーが解決しない場合は、サイト管理者に問い合わせてください。
oauth.signin.error.access_denied=認可リクエストが拒否されました。
oauth.signin.error.temporarily_unavailable=認証サーバーが一時的に利用できないため、認可に失敗しました。後でもう一度やり直してください。
-oauth_callback_unable_auto_reg=自動登録が有効になっていますが、OAuth2プロバイダー %[1]s の応答はフィールド %[2]s が不足しており、自動でアカウントを作成することができません。 アカウントを作成またはリンクするか、サイト管理者に問い合わせてください。
+oauth_callback_unable_auto_reg=自動登録が有効になっていますが、OAuth2プロバイダー %[1]s の応答はフィールド %[2]s が不足しており、自動でアカウントを作成することができません。 アカウントの作成や連携を行うか、サイト管理者にお問い合わせください。
openid_connect_submit=接続
openid_connect_title=既存のアカウントに接続
openid_connect_desc=選択したOpenID URIは未登録です。 ここで新しいアカウントと関連付けます。
openid_register_title=アカウント新規作成
openid_register_desc=選択したOpenID URIは未登録です。 ここで新しいアカウントと関連付けます。
openid_signin_desc=OpenID URIを入力します。例: alice.openid.example.org または https://openid.example.org/alice
-disable_forgot_password_mail=メール送信設定が無いためアカウントの回復は無効になっています。 サイト管理者にお問い合わせください。
-disable_forgot_password_mail_admin=アカウントの回復はメール送信が設定済みの場合だけ使用できます。 アカウントの回復を有効にするにはメール送信を設定してください。
+disable_forgot_password_mail=メールアドレスが設定されていないためアカウントの回復は無効になっています。 サイト管理者にお問い合わせください。
+disable_forgot_password_mail_admin=アカウントの回復はメールアドレスが設定済みの場合だけ使用できます。
email_domain_blacklisted=あなたのメールアドレスでは登録することはできません。
authorize_application=アプリケーションを許可
authorize_redirect_notice=このアプリケーションを許可すると %s にリダイレクトします。
@@ -610,10 +611,10 @@ change_full_name_disabled=フルネームの変更は無効化されています
username_has_not_been_changed=ユーザー名は変更されていません
repo_name_been_taken=リポジトリ名が既に使用されています。
repository_force_private=強制プライベートが有効です。プライベートリポジトリはパブリックにできません。
-repository_files_already_exist=このリポジトリのファイルはすでに存在します。システム管理者に問い合わせてください。
-repository_files_already_exist.adopt=このリポジトリのファイルはすでに存在しており、それらを登録することしかできません。
-repository_files_already_exist.delete=このリポジトリのファイルはすでに存在しています。 それらを削除する必要があります。
-repository_files_already_exist.adopt_or_delete=このリポジトリのファイルはすでに存在しています。 それらを登録するか削除してください。
+repository_files_already_exist=このリポジトリには既にファイルが存在しています。システム管理者に問い合わせてください。
+repository_files_already_exist.adopt=このリポジトリには既にファイルが存在しており、それらを取り込むことはできます。
+repository_files_already_exist.delete=このリポジトリには既にファイルが存在しています。 それらを削除する必要があります。
+repository_files_already_exist.adopt_or_delete=このリポジトリには既にファイルが存在しています。 それらを取り込むか削除してください。
visit_rate_limit=相手側でアクセス数制限されています。
2fa_auth_required=相手側へのアクセスに2要素認証が必要です。
org_name_been_taken=組織名が既に使用されています。
@@ -646,7 +647,7 @@ invalid_ssh_key=SSHキーが確認できません: %s
invalid_gpg_key=GPGキーが確認できません: %s
invalid_ssh_principal=無効なプリンシパル: %s
must_use_public_key=あなたが提供したキーは秘密鍵です。秘密鍵をどこにもアップロードしないでください。代わりに公開鍵を使用してください。
-unable_verify_ssh_key=SSHキーが確認できません。間違いが無いか、よく確認してください。
+unable_verify_ssh_key=SSHキーが確認できません。間違いが無いかよく確認してください。
auth_failed=認証に失敗しました: %v
still_own_repo=あなたのアカウントは1つ以上のリポジトリを所有しています。 先にそれらを削除するか移転してください。
@@ -678,7 +679,7 @@ unfollow=フォロー解除
user_bio=経歴
disabled_public_activity=このユーザーはアクティビティ表示を公開していません。
email_visibility.limited=あなたのメールアドレスはすべての認証済みユーザーに表示されています
-email_visibility.private=あなたのメールアドレスは、あなたと管理者のみに表示されます
+email_visibility.private=あなたのメールアドレスは、あなたと管理者にのみ表示されます
show_on_map=地図上にこの場所を表示
settings=ユーザー設定
@@ -811,7 +812,7 @@ activations_pending=アクティベーション待ち
can_not_add_email_activations_pending=保留中のアクティベーションがあります。新しいメールを追加する場合は、数分後にもう一度お試しください。
delete_email=削除
email_deletion=メールアドレスの削除
-email_deletion_desc=メールアドレスと関連情報をアカウントから削除します。 このメールアドレスを使ったGitのコミットはそのまま残ります。 続行しますか?
+email_deletion_desc=このメールアドレスと関連情報をアカウントから削除します。 このメールアドレスを使ったGitのコミットはそのまま残ります。 続行しますか?
email_deletion_success=メールアドレスを削除しました。
theme_update_success=テーマを更新しました。
theme_update_error=選択されたテーマが存在しません。
@@ -965,7 +966,7 @@ authorized_oauth2_applications=許可済みOAuth2アプリケーション
authorized_oauth2_applications_description=これらのサードパーティ アプリケーションに、あなたのGiteaアカウントへのアクセスを許可しています。 不要になったアプリケーションはアクセス権を取り消すようにしてください。
revoke_key=取り消し
revoke_oauth2_grant=アクセス権の取り消し
-revoke_oauth2_grant_description=このサードパーティ アプリケーションのアクセス権を取り消し、アプリケーションがあなたのデータへアクセスすることを防ぎます。 続行しますか?
+revoke_oauth2_grant_description=このサードパーティ アプリケーションのアクセス権を取り消し、アプリケーションがあなたのデータへアクセスすることを防ぎます。 よろしいですか?
revoke_oauth2_grant_success=アクセス権を取り消しました。
twofa_desc=パスワードの盗難からアカウントを守るために、スマートフォンや他のデバイスを使用して、時間ベースのワンタイムパスワード("TOTP")を受け取ることができます。
@@ -1020,14 +1021,16 @@ email_notifications.onmention=メンションのみメール通知
email_notifications.disable=メール通知無効
email_notifications.submit=メール設定を保存
email_notifications.andyourown=自分に関する通知も含める
+email_notifications.actions.desc=Gitea Actions が設定されたリポジトリのワークフロー実行に関する通知。
+email_notifications.actions.failure_only=失敗したワークフロー実行についてのみ通知
visibility=ユーザーの公開範囲
visibility.public=パブリック
visibility.public_tooltip=全員に表示されます
visibility.limited=限定
-visibility.limited_tooltip=認証されたユーザーのみに表示されます
+visibility.limited_tooltip=認証されたユーザーにのみ表示されます
visibility.private=プライベート
-visibility.private_tooltip=あなたが参加した組織のメンバーのみに表示されます
+visibility.private_tooltip=あなたが参加した組織のメンバーにのみ表示されます
[repo]
new_repo_helper=リポジトリには、プロジェクトのすべてのファイルとリビジョン履歴が入ります。 すでにほかの場所でホストしていますか? リポジトリを移行 もどうぞ。
@@ -1101,7 +1104,7 @@ mirror_sync=前回の同期
mirror_sync_on_commit=コミットがプッシュされたときに同期
mirror_address=クローンするURL
mirror_address_desc=必要な資格情報は「認証」セクションに設定してください。
-mirror_address_url_invalid=入力したURLは無効です。 URLの構成要素はすべて正しくエスケープする必要があります。
+mirror_address_url_invalid=入力したURLは無効です。 URLの構成要素はすべて正しくエスケープしてください。
mirror_address_protocol_invalid=入力したURLは無効です。 ミラーできるのは、http(s):// または git:// からだけです。
mirror_lfs=Large File Storage (LFS)
mirror_lfs_desc=LFS データのミラーリングを有効にする。
@@ -1119,7 +1122,7 @@ stars=スター
reactions_more=さらに %d 件
unit_disabled=サイト管理者がこのリポジトリセクションを無効にしています。
language_other=その他
-adopt_search=未登録リポジトリを探すユーザー名を入力... (空ですべてを探索)
+adopt_search=未登録リポジトリを探すユーザー名を入力… (空ですべてを探索)
adopt_preexisting_label=ファイルを登録
adopt_preexisting=既存ファイルの登録
adopt_preexisting_content=%s からリポジトリを作成します
@@ -1161,8 +1164,8 @@ template.issue_labels=イシューラベル
template.one_item=最低一つはテンプレート項目を選択する必要があります
template.invalid=テンプレートリポジトリを選択する必要があります
-archive.title=このリポジトリはアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
-archive.title_date=このリポジトリは%sにアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
+archive.title=このリポジトリはアーカイブされています。 ファイルの閲覧とクローンは可能ですが、イシューの作成、プルリクエスト、プッシュはできません。
+archive.title_date=このリポジトリは%sにアーカイブされています。 ファイルの閲覧とクローンは可能ですが、イシューの作成、プルリクエスト、プッシュはできません。
archive.issue.nocomment=このリポジトリはアーカイブされています。 イシューにコメントを追加することはできません。
archive.pull.nocomment=このリポジトリはアーカイブされています。 プルリクエストにコメントを追加することはできません。
@@ -1179,7 +1182,7 @@ migrate_options_lfs=LFS ファイルのマイグレート
migrate_options_lfs_endpoint.label=LFS エンドポイント
migrate_options_lfs_endpoint.description=マイグレーションでは、リモート側のGitをもとにLFSサーバーを決定 しようとします。 リポジトリのLFSデータがほかの場所に保存されている場合は、独自のエンドポイントを指定することができます。
migrate_options_lfs_endpoint.description.local=ローカルサーバーのパスもサポートされています。
-migrate_options_lfs_endpoint.placeholder=空にするとエンドポイントはクローン URL から決定されます
+migrate_options_lfs_endpoint.placeholder=空にするとエンドポイントはクローン URL から決定されます。
migrate_items=移行する項目
migrate_items_wiki=Wiki
migrate_items_milestones=マイルストーン
@@ -1191,7 +1194,7 @@ migrate_items_releases=リリース
migrate_repo=リポジトリを移行
migrate.clone_address=移行 / クローンするURL
migrate.clone_address_desc=既存リポジトリの、HTTP(S)またはGit形式のクローンURL
-migrate.github_token_desc=GitHub APIにはレート制限があります。移行をより速くするために、ここにカンマ区切りで複数のトークンを入力することができます。 警告: この機能を悪用すると、サービスプロバイダのポリシーに違反し、アカウントがブロックされる可能性があります。
+migrate.github_token_desc=GitHub APIのレート制限を回避して移行をより速くするために、複数のトークンをカンマ区切りで入力できます。 警告: この機能を悪用すると、サービスプロバイダのポリシーに違反し、アカウントがブロックされる可能性があります。
migrate.clone_local_path=、またはローカルサーバー上のパス
migrate.permission_denied=ローカルリポジトリをインポートする権限がありません。
migrate.permission_denied_blocked=許可されていないホストからインポートできません。管理者に問い合わせて、ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS の設定を確認してください。
@@ -1202,7 +1205,7 @@ migrate.migrate_items_options=追加の項目を移行するにはアクセス
migrated_from=%[2]s から移行
migrated_from_fake=%[1]sから移行
migrate.migrate=%s からの移行
-migrate.migrating=%s から移行しています ...
+migrate.migrating=%s から移行しています…
migrate.migrating_failed=%s からの移行が失敗しました。
migrate.migrating_failed.error=移行に失敗しました: %s
migrate.migrating_failed_no_addr=移行に失敗しました。
@@ -1228,7 +1231,7 @@ migrate.migrating_issues=イシュー移行中
migrate.migrating_pulls=プルリクエスト移行中
migrate.cancel_migrating_title=移行のキャンセル
migrate.cancel_migrating_confirm=この移行をキャンセルしますか?
-migrating_status=移行状況
+migration_status=移行状況
mirror_from=ミラー元
forked_from=フォーク元
@@ -1332,7 +1335,9 @@ editor.upload_file=ファイルをアップロード
editor.edit_file=ファイルを編集
editor.preview_changes=変更をプレビュー
editor.cannot_edit_lfs_files=LFSのファイルはWebインターフェースで編集できません。
+editor.cannot_edit_too_large_file=このファイルは大きすぎるため、編集できません。
editor.cannot_edit_non_text_files=バイナリファイルはWebインターフェースで編集できません。
+editor.file_not_editable_hint=名前の変更や移動は可能です。
editor.edit_this_file=ファイルを編集
editor.this_file_locked=ファイルはロックされています
editor.must_be_on_a_branch=このファイルを変更したり変更の提案をするには、ブランチ上にいる必要があります。
@@ -1352,7 +1357,7 @@ editor.update=%s を更新
editor.delete=%s を削除
editor.patch=パッチの適用
editor.patching=パッチ:
-editor.fail_to_apply_patch=`パッチを適用できません "%s"`
+editor.fail_to_apply_patch=パッチを適用できません
editor.new_patch=新しいパッチ
editor.commit_message_desc=詳細な説明を追加…
editor.signoff_desc=コミットログメッセージの最後にコミッターの Signed-off-by 行を追加
@@ -1372,8 +1377,7 @@ editor.branch_already_exists=ブランチ "%s" は、このリポジトリに既
editor.directory_is_a_file=ディレクトリ名 "%s" はすでにリポジトリ内のファイルで使用されています。
editor.file_is_a_symlink=`"%s" はシンボリックリンクです。 シンボリックリンクはWebエディターで編集できません。`
editor.filename_is_a_directory=ファイル名 "%s" は、このリポジトリ上でディレクトリ名としてすでに使用されています。
-editor.file_editing_no_longer_exists=編集中のファイル "%s" が、もうリポジトリ内にありません。
-editor.file_deleting_no_longer_exists=削除しようとしたファイル "%s" が、すでにリポジトリ内にありません。
+editor.file_modifying_no_longer_exists=修正中のファイル "%s" が、すでにリポジトリ内にありません。
editor.file_changed_while_editing=あなたが編集を開始したあと、ファイルの内容が変更されました。 ここをクリック して何が変更されたか確認するか、もう一度"変更をコミット"をクリック して上書きします。
editor.file_already_exists=ファイル "%s" は、このリポジトリに既に存在します。
editor.commit_id_not_matching=コミットIDが編集を開始したときのIDと一致しません。 パッチ用のブランチにコミットしたあとマージしてください。
@@ -1381,8 +1385,6 @@ editor.push_out_of_date=このプッシュは最新ではないようです。
editor.commit_empty_file_header=空ファイルのコミット
editor.commit_empty_file_text=コミットしようとしているファイルは空です。 続行しますか?
editor.no_changes_to_show=表示する変更箇所はありません。
-editor.fail_to_update_file=ファイル "%s" を作成または変更できませんでした。
-editor.fail_to_update_file_summary=エラーメッセージ:
editor.push_rejected_no_message=サーバーがメッセージを出さずに変更を拒否しました。 Git フックを確認してください。
editor.push_rejected=サーバーが変更を拒否しました。 Gitフックを確認してください。
editor.push_rejected_summary=拒否メッセージ全体:
@@ -1396,6 +1398,15 @@ editor.user_no_push_to_branch=ユーザーはブランチにプッシュでき
editor.require_signed_commit=ブランチでは署名されたコミットが必須です
editor.cherry_pick=チェリーピック %s:
editor.revert=リバート %s:
+editor.failed_to_commit=変更のコミットに失敗しました。
+editor.failed_to_commit_summary=エラーメッセージ:
+
+editor.fork_create=リポジトリをフォークして変更を提案
+editor.fork_create_description=このリポジトリを直接編集することはできません。 代わりにフォークを作成して編集を行い、プルリクエストを作成してください。
+editor.fork_edit_description=このリポジトリを直接編集することはできません。 変更はあなたのフォーク %s に書き込まれるため、プルリクエストを作成できます。
+editor.fork_not_editable=このリポジトリはフォークしていますが、フォーク側が編集可能ではありません。
+editor.fork_failed_to_push_branch=ブランチ %s をリポジトリにプッシュできませんでした。
+editor.fork_branch_exists=ブランチ "%s" は既にフォークに存在します。新しいブランチ名を選択してください。
commits.desc=ソースコードの変更履歴を参照します。
commits.commits=コミット
@@ -1497,7 +1508,7 @@ issues.new.clear_assignees=担当者をクリア
issues.new.no_assignees=担当者なし
issues.new.no_reviewers=レビューアなし
issues.new.blocked_user=リポジトリのオーナーがあなたをブロックしているため、イシューを作成できません。
-issues.edit.already_changed=イシューの変更を保存できません。 他のユーザーによって内容がすでに変更されているようです。 変更を上書きしないようにするため、ページを更新してからもう一度編集してください
+issues.edit.already_changed=イシューの変更を保存できません。 他のユーザーによって内容がすでに変更されているようです。 変更を上書きしないようにするため、ページを更新してからもう一度編集してください。
issues.edit.blocked_user=投稿者またはリポジトリのオーナーがあなたをブロックしているため、内容を編集できません。
issues.choose.get_started=始める
issues.choose.open_external_link=オープン
@@ -1560,6 +1571,7 @@ issues.filter_user_placeholder=ユーザーを検索
issues.filter_user_no_select=すべてのユーザー
issues.filter_type=タイプ
issues.filter_type.all_issues=すべてのイシュー
+issues.filter_type.all_pull_requests=すべてのプルリクエスト
issues.filter_type.assigned_to_you=自分が担当
issues.filter_type.created_by_you=自分が作成
issues.filter_type.mentioning_you=自分が関係
@@ -1651,6 +1663,7 @@ issues.save=保存
issues.label_title=名前
issues.label_description=説明
issues.label_color=カラー
+issues.label_color_invalid=無効な色です
issues.label_exclusive=排他
issues.label_archive=アーカイブ ラベル
issues.label_archived_filter=アーカイブされたラベルを表示
@@ -1715,6 +1728,8 @@ issues.remove_time_estimate_at=が見積時間を削除 %s
issues.time_estimate_invalid=見積時間のフォーマットが不正です
issues.start_tracking_history=が作業を開始 %s
issues.tracker_auto_close=タイマーは、このイシューがクローズされると自動的に終了します
+issues.stopwatch_already_stopped=このイシューのタイマーはすでに停止しています
+issues.stopwatch_already_created=このイシューのタイマーは既に存在します
issues.tracking_already_started=`別のイシュー で既にタイムトラッキングを開始しています!`
issues.stop_tracking=タイマー終了
issues.stop_tracking_history=が %[1]s の作業を終了 %[2]s
@@ -1765,9 +1780,9 @@ issues.dependency.pr_closing_blockedby=このプルリクエストのクロー
issues.dependency.issue_closing_blockedby=このイシューのクローズは、これらのイシューによりブロックされています
issues.dependency.issue_close_blocks=このイシューは、これらのイシューのクローズをブロックしています
issues.dependency.pr_close_blocks=このプルリクエストは、これらのイシューのクローズをブロックしています
-issues.dependency.issue_close_blocked=このイシューをクローズするには、ブロックしているイシューをすべてクローズする必要があります。
+issues.dependency.issue_close_blocked=このイシューをクローズする前に、ブロックしているイシューをすべてクローズする必要があります。
issues.dependency.issue_batch_close_blocked=選択したイシューの一括クローズはできません。 イシュー #%d に、まだオープン中の依存関係があります。
-issues.dependency.pr_close_blocked=このプルリクエストを操作するには、ブロックしているイシューをすべてクローズする必要があります。
+issues.dependency.pr_close_blocked=このプルリクエストをマージする前に、ブロックしているイシューをすべてクローズする必要があります。
issues.dependency.blocks_short=ブロック対象
issues.dependency.blocked_by_short=依存先
issues.dependency.remove_header=依存関係の削除
@@ -1792,7 +1807,7 @@ issues.review.reject=が変更を要請 %s
issues.review.wait=にレビュー依頼 %s
issues.review.add_review_request=が %s にレビューを依頼 %s
issues.review.remove_review_request=が %s へのレビュー依頼を取り消し %s
-issues.review.remove_review_request_self=がレビューを拒否 %s
+issues.review.remove_review_request_self=がレビューを辞退 %s
issues.review.pending=保留
issues.review.pending.tooltip=このコメントは現在他のユーザーに表示されていません。 保留中のコメントを送信するには、このページの上にある "%s" -> "%s/%s/%s" を選択してください。
issues.review.review=レビュー
@@ -1831,7 +1846,7 @@ pulls.desc=プルリクエストとコードレビューの有効化。
pulls.new=新しいプルリクエスト
pulls.new.blocked_user=リポジトリのオーナーがあなたをブロックしているため、プルリクエストを作成できません。
pulls.new.must_collaborator=プルリクエストを作成するには、共同作業者である必要があります。
-pulls.edit.already_changed=プルリクエストの変更を保存できません。 他のユーザーによって内容がすでに変更されているようです。 変更を上書きしないようにするため、ページを更新してからもう一度編集してください
+pulls.edit.already_changed=プルリクエストの変更を保存できません。 他のユーザーによって内容がすでに変更されているようです。 変更を上書きしないようにするため、ページを更新してからもう一度編集してください。
pulls.view=プルリクエストを表示
pulls.compare_changes=新規プルリクエスト
pulls.allow_edits_from_maintainers=メンテナーからの編集を許可する
@@ -1852,7 +1867,7 @@ pulls.show_all_commits=すべてのコミットを表示
pulls.show_changes_since_your_last_review=前回の自分のレビューからの変更を表示
pulls.showing_only_single_commit=コミット %[1]s の変更だけを表示しています
pulls.showing_specified_commit_range=%[1]s..%[2]s の変更だけを表示しています
-pulls.select_commit_hold_shift_for_range=コミットを選択。シフトを押しながらクリックで範囲選択
+pulls.select_commit_hold_shift_for_range=コミットを選択。シフトを押しながらクリックで範囲選択。
pulls.review_only_possible_for_full_diff=すべての差分を表示しているときだけレビューが可能です
pulls.filter_changes_by_commit=コミットで絞り込み
pulls.nothing_to_compare=同じブランチ同士のため、 プルリクエストを作成する必要がありません。
@@ -1881,7 +1896,7 @@ pulls.add_prefix=先頭に %s を追加
pulls.remove_prefix=先頭の %s を除去
pulls.data_broken=このプルリクエストは、フォークの情報が見つからないため壊れています。
pulls.files_conflicted=このプルリクエストは、ターゲットブランチと競合する変更を含んでいます。
-pulls.is_checking=マージの競合を確認しています...
+pulls.is_checking=マージのコンフリクトを確認中…
pulls.is_ancestor=このブランチは既にターゲットブランチに含まれています。マージするものはありません。
pulls.is_empty=このブランチの変更は既にターゲットブランチにあります。これは空のコミットになります。
pulls.required_status_check_failed=いくつかの必要なステータスチェックが成功していません。
@@ -1922,17 +1937,17 @@ pulls.merge_commit_id=マージコミット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=マージ失敗: マージHEADとベースには共通する履歴がありません。 ヒント: 別のストラテジーを試してみてください
-pulls.merge_out_of_date=マージ失敗: マージの生成中にベースが更新されました。 ヒント: もう一度試してみてください
-pulls.head_out_of_date=マージ失敗: マージの生成中に head が更新されました。 ヒント: もう一度試してみてください
+pulls.unrelated_histories=マージ失敗: マージHEADとベースには共通する履歴がありません。 ヒント: 別のストラテジーを試してみてください。
+pulls.merge_out_of_date=マージ失敗: マージの生成中にベースが更新されました。 ヒント: もう一度試してみてください。
+pulls.head_out_of_date=マージ失敗: マージの生成中にHEADが更新されました。 ヒント: もう一度試してみてください。
pulls.has_merged=失敗: プルリクエストはマージされていました。再度マージしたり、ターゲットブランチを変更することはできません。
pulls.push_rejected=プッシュ失敗: プッシュは拒否されました。 このリポジトリのGitフックを見直してください。
pulls.push_rejected_summary=拒否メッセージ全体:
-pulls.push_rejected_no_message=プッシュ失敗: プッシュは拒否されましたが、リモートからのメッセージがありません。このリポジトリのGitフックを見直してください
+pulls.push_rejected_no_message=プッシュ失敗: プッシュは拒否されましたが、リモートからのメッセージがありません。このリポジトリのGitフックを見直してください。
pulls.open_unmerged_pull_exists=`同じ条件のプルリクエスト (#%d) が未処理のため、再オープンはできません。`
pulls.status_checking=いくつかのステータスチェックが待機中です
pulls.status_checks_success=ステータスチェックはすべて成功しました
@@ -1956,9 +1971,9 @@ pulls.cmd_instruction_checkout_title=チェックアウト
pulls.cmd_instruction_checkout_desc=プロジェクトリポジトリから新しいブランチをチェックアウトし、変更内容をテストします。
pulls.cmd_instruction_merge_title=マージ
pulls.cmd_instruction_merge_desc=変更内容をマージして、Giteaに反映します。
-pulls.cmd_instruction_merge_warning=警告: 「手動マージの自動検出」が有効ではないため、この操作ではプルリクエストをマージできません
+pulls.cmd_instruction_merge_warning=警告: 「手動マージの自動検出」が有効ではないため、この操作ではプルリクエストをマージできません。
pulls.clear_merge_message=マージメッセージをクリア
-pulls.clear_merge_message_hint=マージメッセージのクリアは、コミットメッセージの除去だけを行います。 生成されたGitトレーラー("Co-Authored-By …" 等)はそのまま残ります。
+pulls.clear_merge_message_hint=マージメッセージのクリアは、コミットメッセージの除去だけを行います。 生成されたGitトレーラー("Co-Authored-By…" 等)はそのまま残ります。
pulls.auto_merge_button_when_succeed=(チェックがすべて成功した場合)
pulls.auto_merge_when_succeed=すべてのチェックが成功したら自動マージ
@@ -2138,13 +2153,13 @@ contributors.contribution_type.additions=追加
contributors.contribution_type.deletions=削除
settings=設定
-settings.desc=設定では、リポジトリの設定を管理することができます。
+settings.desc=リポジトリの設定を管理できる場所です。
settings.options=リポジトリ
settings.public_access=公開アクセス
settings.public_access_desc=外部からの訪問者のアクセス権限について、このリポジトリのデフォルト設定を上書きします。
settings.public_access.docs.not_set=設定なし: 公開アクセス権限はありません。訪問者の権限は、リポジトリの公開範囲とメンバーの権限に従います。
settings.public_access.docs.anonymous_read=匿名の読み込み: ログインしていないユーザーは読み取り権限でユニットにアクセスできます。
-settings.public_access.docs.everyone_read=全員の読み込み: すべてのログインユーザーは読み取り権限でユニットにアクセスできます。イシュー/プルリクエストユニットの読み取り権限は、ユーザーが新しいイシュー/プルリクエストを作成できることを意味します。
+settings.public_access.docs.everyone_read=全員の読み込み: すべてのログインユーザーは読み取り権限でユニットにアクセスできます。イシュー/プルリクエストユニットの読み取り権限は、ユーザーが新しいイシュー/プルリクエストを作成できることも意味します。
settings.public_access.docs.everyone_write=全員の書き込み: すべてのログインユーザーに書き込み権限があります。Wikiユニットのみがこの権限をサポートします。
settings.collaboration=共同作業者
settings.collaboration.admin=管理者
@@ -2152,6 +2167,7 @@ settings.collaboration.write=書き込み
settings.collaboration.read=読み取り
settings.collaboration.owner=オーナー
settings.collaboration.undefined=未定義
+settings.collaboration.per_unit=ユニット権限
settings.hooks=Webhook
settings.githooks=Gitフック
settings.basic_settings=基本設定
@@ -2161,7 +2177,7 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=コミット、
settings.mirror_settings.docs.disabled_push_mirror.instructions=コミット、タグ、ブランチを他のリポジトリから自動的にプルするように、このプロジェクトを設定します。
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=現在は「新しい移行」メニューでのみ対応しています。 詳細は次を参照:
settings.mirror_settings.docs.disabled_push_mirror.info=プッシュ方式のミラーはサイト管理者により無効化されています。
-settings.mirror_settings.docs.no_new_mirrors=このリポジトリは他のリポジトリと変更をミラーリングしています。 現時点では新しいミラーを作成することはできないことに留意してください。
+settings.mirror_settings.docs.no_new_mirrors=このリポジトリは他のリポジトリと変更をミラーリングしています。 現在、新しいミラーを作成することはできませんのでご注意ください。
settings.mirror_settings.docs.can_still_use=既存ミラーを変更したりミラーを新規に作成することはできませんが、既存ミラーを利用することは可能です。
settings.mirror_settings.docs.pull_mirror_instructions=プル方式のミラーを設定するには、次を参照:
settings.mirror_settings.docs.more_information_if_disabled=プッシュミラーとプルミラーの詳細は、こちらをご覧ください:
@@ -2273,9 +2289,9 @@ settings.trust_model.default=デフォルトのトラストモデル
settings.trust_model.default.desc=デフォルトのリポジトリトラストモデルを使用します。
settings.trust_model.collaborator=共同作業者
settings.trust_model.collaborator.long=共同作業者: 共同作業者による署名を信頼します
-settings.trust_model.collaborator.desc=このリポジトリの共同作業者による正常な署名は、(署名がコミッターのものかどうかにかかわらず)「信頼済み」とみなします。 署名が共同作業者ではないコミッターのものであれば「信頼不可」、それ以外は「不一致」となります。
+settings.trust_model.collaborator.desc=このリポジトリの共同作業者による正常な署名は、署名がコミッターのものかどうかにかかわらず「信頼済み」とみなします。 それ以外で正常な署名がコミッターのものであれば「信頼不可」、そうでなければ「不一致」となります。
settings.trust_model.committer=コミッター
-settings.trust_model.committer.long=コミッター: コミッターによる署名を信頼します (これはGitHub方式であり、Giteaの署名が付いたコミットはコミッターがGitea自身であることが強制されます)
+settings.trust_model.committer.long=コミッター: コミッターに一致する署名を信頼します。 これはGitHub方式であり、Giteaの署名が付いたコミットはコミッターがGiteaであることが強制されます。
settings.trust_model.committer.desc=正常な署名は、コミッターに一致する場合のみ「信頼済み」とみなし、それ以外は「不一致」となります。 Giteaは署名付きでコミットすることが強制され、本来のコミッターはコミットの最後に Co-authored-by: と Co-committed-by: で追加されます。 Giteaのデフォルト鍵はデータベース内のユーザー1人とマッチしなければなりません。
settings.trust_model.collaboratorcommitter=共同作業者+コミッター
settings.trust_model.collaboratorcommitter.long=共同作業者+コミッター: コミッターと一致する共同作業者による署名を信頼します
@@ -2288,7 +2304,7 @@ settings.wiki_deletion_success=リポジトリのWikiデータを削除しまし
settings.delete=このリポジトリを削除
settings.delete_desc=リポジトリの削除は恒久的で元に戻すことはできません。
settings.delete_notices_1=- この操作は元に戻せません 。
-settings.delete_notices_2=- この操作は、リポジトリ %s のコード、イシュー、コメント、Wiki、共同作業者の関連付けなどを恒久的に削除します。
+settings.delete_notices_2=- この操作は、リポジトリ %s を、コード、イシュー、コメント、Wiki、共同作業者の設定を含めて恒久的に削除します。
settings.delete_notices_fork_1=- このリポジトリのフォークは、このリポジトリを削除すると独立したリポジトリになります。
settings.deletion_success=リポジトリを削除しました。
settings.update_settings_success=リポジトリの設定を更新しました。
@@ -2305,7 +2321,7 @@ settings.collaborator_deletion=共同作業者の削除
settings.collaborator_deletion_desc=共同作業者を削除し、このリポジトリへのアクセス権を取り消します。 続行しますか?
settings.remove_collaborator_success=共同作業者を削除しました。
settings.org_not_allowed_to_be_collaborator=組織を共同作業者として追加することはできません。
-settings.change_team_access_not_allowed=リポジトリに対するチームアクセス権の変更は、組織のオーナーのみに制限されています。
+settings.change_team_access_not_allowed=リポジトリに対するチームアクセス権の変更は、組織のオーナーにのみ制限されています。
settings.team_not_in_organization=チームがリポジトリと同じ組織に属していません。
settings.teams=チーム
settings.add_team=チームを追加
@@ -2320,8 +2336,8 @@ settings.hooks_desc=Webhookは、指定したGiteaイベントが発生したと
settings.webhook_deletion=Webhookの削除
settings.webhook_deletion_desc=Webhook設定と配信履歴が削除されます。 続行しますか?
settings.webhook_deletion_success=Webhookを削除しました。
-settings.webhook.test_delivery=テスト配信
-settings.webhook.test_delivery_desc=ダミーのイベントでこのWebhookをテストします。
+settings.webhook.test_delivery=プッシュ・イベントによるテスト
+settings.webhook.test_delivery_desc=ダミーのプッシュ・イベントでこのWebhookをテストします。
settings.webhook.test_delivery_desc_disabled=このWebhookをダミーのイベントでテストするには、有効にしてください。
settings.webhook.request=リクエスト
settings.webhook.response=レスポンス
@@ -2341,6 +2357,7 @@ settings.payload_url=ターゲットURL
settings.http_method=HTTPメソッド
settings.content_type=POST Content Type
settings.secret=Secret
+settings.webhook_secret_desc=Webhookサーバーがsecretの使用をサポートしている場合は、webhookのマニュアルに従いここにsecretを入力できます。
settings.slack_username=ユーザー名
settings.slack_icon_url=アイコンのURL
settings.slack_color=色
@@ -2370,7 +2387,7 @@ settings.event_repository=リポジトリ
settings.event_repository_desc=リポジトリが作成・削除されたとき。
settings.event_header_issue=イシューのイベント
settings.event_issues=イシュー
-settings.event_issues_desc=イシューがオープン・クローズ・再オープン・編集されたとき。
+settings.event_issues_desc=イシューがオープン・クローズ・再オープン・編集・削除されたとき。
settings.event_issue_assign=イシューのアサイン
settings.event_issue_assign_desc=イシューの担当者が割り当てられたとき、解除されたとき。
settings.event_issue_label=イシューのラベル
@@ -2381,7 +2398,7 @@ settings.event_issue_comment=イシューへのコメント
settings.event_issue_comment_desc=イシューへのコメントが作成・編集・削除されたとき。
settings.event_header_pull_request=プルリクエストのイベント
settings.event_pull_request=プルリクエスト
-settings.event_pull_request_desc=プルリクエストがオープン・クローズ・再オープン・編集されたとき。
+settings.event_pull_request_desc=プルリクエストがオープン・クローズ・再オープン・編集・削除されたとき。
settings.event_pull_request_assign=プルリクエストのアサイン
settings.event_pull_request_assign_desc=プルリクエストの担当者が割り当て・解除されたとき。
settings.event_pull_request_label=プルリクエストのラベル
@@ -2399,6 +2416,8 @@ settings.event_pull_request_review_request_desc=プルリクエストのレビ
settings.event_pull_request_approvals=プルリクエストの承認
settings.event_pull_request_merge=プルリクエストのマージ
settings.event_header_workflow=ワークフローイベント
+settings.event_workflow_run=ワークフロー実行
+settings.event_workflow_run_desc=Gitea Actions のワークフロー実行が、キューに追加、待機中、実行中、完了になったとき。
settings.event_workflow_job=ワークフロージョブ
settings.event_workflow_job_desc=Gitea Actions のワークフロージョブが、キューに追加、待機中、実行中、完了になったとき。
settings.event_package=パッケージ
@@ -2551,9 +2570,9 @@ settings.matrix.homeserver_url=ホームサーバー URL
settings.matrix.room_id=ルーム ID
settings.matrix.message_type=メッセージ種別
settings.visibility.private.button=プライベートにする
-settings.visibility.private.text=プライベートに変更した場合、リポジトリを許可されたメンバーのみが閲覧できるようにするだけでなく、フォーク、ウォッチャー、スターとの関係を解除する可能性もあります。
+settings.visibility.private.text=プライベートに変更することで、リポジトリは許可されたメンバーにのみ表示されるようになり、既存のフォーク、ウォッチャー、スターとの関係は解除される可能性があります。
settings.visibility.private.bullet_title=プライベートに変更すると:
-settings.visibility.private.bullet_one=リポジトリを許可されたメンバーのみが閲覧できるようにします。
+settings.visibility.private.bullet_one=許可されたメンバーにのみリポジトリを表示します。
settings.visibility.private.bullet_two=フォーク 、ウォッチャー 、スター との関係を解除する可能性があります。
settings.visibility.public.button=公開する
settings.visibility.public.text=公開に変更すると、リポジトリを誰でも閲覧できるようにします。
@@ -2591,11 +2610,11 @@ settings.lfs_invalid_locking_path=不正なパス: %s
settings.lfs_invalid_lock_directory=ディレクトリはロックできません: %s
settings.lfs_lock_already_exists=すでにロックされています: %s
settings.lfs_lock=ロック
-settings.lfs_lock_path=ロックするファイルパス...
+settings.lfs_lock_path=ロックするファイルパス…
settings.lfs_locks_no_locks=ロックなし
settings.lfs_lock_file_no_exist=ロックしたファイルがデフォルトブランチにありません
settings.lfs_force_unlock=強制ロック解除
-settings.lfs_pointers.found=%d件のblobポインタ - 登録済 %d件、未登録 %d件 (実体ファイルなし %d件)
+settings.lfs_pointers.found=%d件のblobポインタ — 登録済 %d件、未登録 %d件 (実体ファイルなし %d件)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Repo内
@@ -2753,6 +2772,8 @@ branch.new_branch_from=`"%s" から新しいブランチを作成`
branch.renamed=ブランチ %s は %s にリネームされました。
branch.rename_default_or_protected_branch_error=デフォルトブランチや保護ブランチのリネームが可能なのは管理者だけです。
branch.rename_protected_branch_failed=このブランチはglobベースの保護ルールに従って保護されています。
+branch.commits_divergence_from=コミットの乖離: %[3]s より %[1]d 件遅れ %[2]d 件先行
+branch.commits_no_divergence=%[1]s ブランチと一致
tag.create_tag=タグ %s を作成
tag.create_tag_operation=タグの作成
@@ -2766,6 +2787,7 @@ topic.done=完了
topic.count_prompt=選択できるのは25トピックまでです。
topic.format_prompt=トピック名は英字または数字で始め、ダッシュ('-')やドット('.')を含めることができます。最大35文字までです。文字は小文字でなければなりません。
+find_file.follow_symlink=シンボリックリンクが指し示す先を開く
find_file.go_to_file=ファイルへ移動
find_file.no_matching=一致するファイルが見つかりません
@@ -2775,7 +2797,7 @@ error.csv.invalid_field_count=このファイルは %d 行目のフィールド
error.broken_git_hook=このリポジトリのGitフックが壊れているようです。 ドキュメント に従って修正し、その後いくつかのコミットをプッシュして状態を最新にしてください。
[graphs]
-component_loading=%sを読み込み中...
+component_loading=%sを読み込み中…
component_loading_failed=%sを読み込めませんでした
component_loading_info=少し時間がかかるかもしれません…
component_failed_to_load=予期しないエラーが発生しました。
@@ -2806,6 +2828,7 @@ team_permission_desc=権限
team_unit_desc=リポジトリのセクションへのアクセスを許可
team_unit_disabled=(無効)
+form.name_been_taken=組織名 "%s" は既に使用されています。
form.name_reserved=組織名 "%s" は予約されています。
form.name_pattern_not_allowed=`"%s" の形式は組織名に使用できません。`
form.create_org_not_allowed=組織を作成する権限がありません。
@@ -2827,15 +2850,28 @@ settings.visibility.private_shortname=プライベート
settings.update_settings=設定の更新
settings.update_setting_success=組織の設定を更新しました。
-settings.change_orgname_prompt=注意: 組織名を変更すると組織のURLも変更され、古い名前は解放されます。
-settings.change_orgname_redirect_prompt=古い名前は、再使用されていない限りリダイレクトします。
+
+settings.rename=組織名の変更
+settings.rename_desc=組織名を変更すると組織のURLも変更され、古い名前は解放されます。
+settings.rename_success=組織 %[1]s が正常に %[2]s に改名されました。
+settings.rename_no_change=組織名は変更されません。
+settings.rename_new_org_name=新しい組織名
+settings.rename_failed=内部エラーのため組織名を変更できませんでした
+settings.rename_notices_1=この操作は元に戻せません 。
+settings.rename_notices_2=古い名前は、再使用されるまではリダイレクトします。
+
settings.update_avatar_success=組織のアバターを更新しました。
settings.delete=組織を削除
settings.delete_account=この組織を削除
settings.delete_prompt=組織は恒久的に削除されます。 元に戻すことはできません !
+settings.name_confirm=確認のため組織名を入力:
+settings.delete_notices_1=この操作は元に戻せません 。
+settings.delete_notices_2=この操作により、%s のすべてのリポジトリ が恒久的に削除されます。 コード、イシュー、コメント、Wikiデータ、共同作業者の設定も含まれます。
+settings.delete_notices_3=この操作により、%s のすべてのパッケージ が恒久的に削除されます。
+settings.delete_notices_4=この操作により、%s のすべてのプロジェクト が恒久的に削除されます。
settings.confirm_delete_account=削除を確認
-settings.delete_org_title=組織の削除
-settings.delete_org_desc=組織を恒久的に削除します。 続行しますか?
+settings.delete_failed=内部エラーのため組織を削除できませんでした
+settings.delete_successful=組織の%s の削除に成功しました。
settings.hooks_desc=この組織のすべてのリポジトリ でトリガーされるWebhookを追加します。
settings.labels_desc=この組織のすべてのリポジトリ で使用可能なイシューラベルを追加します。
@@ -2966,9 +3002,9 @@ dashboard.cron.finished=Cron: %[1]s が完了
dashboard.delete_inactive_accounts=アクティベートされていないアカウントをすべて削除
dashboard.delete_inactive_accounts.started=アクティベートされていないアカウントをすべて削除するタスクを開始しました。
dashboard.delete_repo_archives=リポジトリのアーカイブ (ZIP, TAR.GZ, etc..) をすべて削除
-dashboard.delete_repo_archives.started=リポジトリアーカイブをすべて削除するタスクを開始しました。
+dashboard.delete_repo_archives.started=リポジトリアーカイブをすべて削除するタスクを開始しました
dashboard.delete_missing_repos=Gitファイルが存在しないリポジトリをすべて削除
-dashboard.delete_missing_repos.started=Gitファイルが存在しないリポジトリをすべて削除するタスクを開始しました。
+dashboard.delete_missing_repos.started=Gitファイルが存在しないリポジトリをすべて削除するタスクを開始しました
dashboard.delete_generated_repository_avatars=自動生成したリポジトリアバターを削除
dashboard.sync_repo_branches=Gitデータからデータベースへ不足しているブランチを同期
dashboard.sync_repo_tags=Gitデータからデータベースへタグを同期
@@ -2981,7 +3017,7 @@ dashboard.update_migration_poster_id=移行する投稿者IDの更新
dashboard.git_gc_repos=すべてのリポジトリでガベージコレクションを実行
dashboard.resync_all_sshkeys='.ssh/authorized_keys' ファイルをGitea上のSSHキーで更新
dashboard.resync_all_sshprincipals='.ssh/authorized_principals' ファイルをGitea上のSSHプリンシパルで更新
-dashboard.resync_all_hooks=すべてのリポジトリの pre-receive, update, post-receive フックを更新する。
+dashboard.resync_all_hooks=すべてのリポジトリの pre-receive, update, post-receive フックを再同期する
dashboard.reinit_missing_repos=レコードが存在するが見当たらないすべてのGitリポジトリを再初期化する
dashboard.sync_external_users=外部ユーザーデータの同期
dashboard.cleanup_hook_task_table=hook_taskテーブルのクリーンアップ
@@ -3095,7 +3131,7 @@ emails.filter_sort.email=メールアドレス
emails.filter_sort.email_reverse=メールアドレス (逆順)
emails.filter_sort.name=ユーザー名
emails.filter_sort.name_reverse=ユーザー名 (逆順)
-emails.updated=メール設定を更新しました
+emails.updated=メールアドレス設定を更新しました
emails.not_updated=メール設定の更新に失敗しました: %v
emails.duplicate_active=メールアドレスは別のユーザーが既に使用中です。
emails.change_email_header=メール設定の更新
@@ -3217,9 +3253,11 @@ auths.oauth2_required_claim_name_helper=このClaim名を設定すると、こ
auths.oauth2_required_claim_value=必須Claim値
auths.oauth2_required_claim_value_helper=この値を設定すると、このソースからのログインを、指定したClaim名とClaim値を持つユーザーに限定します。
auths.oauth2_group_claim_name=このソースでグループ名を提供するClaim名 (オプション)
-auths.oauth2_admin_group=管理者ユーザーのグループClaim値 (オプション - 上のClaim名が必要)
-auths.oauth2_restricted_group=制限付きユーザーのグループClaim値 (オプション - 上のClaim名が必要)
-auths.oauth2_map_group_to_team=見つかったグループを組織のチームにマップ (オプション - 上のClaim名が必要)
+auths.oauth2_full_name_claim_name=フルネームのClaim名。 (オプション — 設定すると、ユーザーのフルネームは常にこのClaimに同期します)
+auths.oauth2_ssh_public_key_claim_name=SSH公開鍵のClaim名
+auths.oauth2_admin_group=管理者ユーザーのグループClaim値 (オプション — 上のClaim名が必要)
+auths.oauth2_restricted_group=制限付きユーザーのグループClaim値 (オプション — 上のClaim名が必要)
+auths.oauth2_map_group_to_team=見つかったグループを組織のチームにマップ (オプション — 上のClaim名が必要)
auths.oauth2_map_group_to_team_removal=対応するグループにユーザーが含まれない場合、同期しているチームからユーザーを削除する
auths.enable_auto_register=自動登録を有効にする
auths.sspi_auto_create_users=自動的にユーザーを作成
@@ -3231,13 +3269,13 @@ auths.sspi_strip_domain_names_helper=チェックを入れると、ログオン
auths.sspi_separator_replacement=\、/、@の代わりに使用するセパレーター
auths.sspi_separator_replacement_helper=ダウンレベルログオン名のセパレーター (例. "DOMAIN\user" の \ ) やユーザープリンシパル名のセパレーター (例. "user@example.org" の @ ) を置き換えるときに使用する文字です。
auths.sspi_default_language=ユーザーのデフォルトの言語
-auths.sspi_default_language_helper=SSPI認証処理によって自動的に作成されるユーザーのデフォルトの言語です。 言語を自動検出する方が良い場合は空のままにしてください。
+auths.sspi_default_language_helper=SSPI認証処理によって自動的に作成されるユーザーのデフォルトの言語です。 言語を自動検出するほうが良い場合は空のままにしてください。
auths.tips=ヒント
auths.tips.oauth2.general=OAuth2認証
auths.tips.oauth2.general.tip=新しいOAuth2認証を登録するときは、コールバック/リダイレクトURLは以下になります:
auths.tip.oauth2_provider=OAuth2プロバイダー
auths.tip.bitbucket=新しいOAuthコンシューマーを %s から登録し、"アカウント" に "読み取り" 権限を追加してください。
-auths.tip.nextcloud=新しいOAuthコンシューマーを、インスタンスのメニュー "Settings -> Security -> OAuth 2.0 client" から登録してください。
+auths.tip.nextcloud=あなたのインスタンス上でメニュー "Settings -> Security -> OAuth 2.0 client" を選択し、新しいOAuthコンシューマーを登録します
auths.tip.dropbox=新しいアプリケーションを %s から登録してください。
auths.tip.facebook=新しいアプリケーションを %s で登録し、"Facebook Login"を追加してください。
auths.tip.github=新しいOAuthアプリケーションを %s から登録してください。
@@ -3347,7 +3385,7 @@ config.mailer_sendmail_path=Sendmailのパス
config.mailer_sendmail_args=Sendmailの追加引数
config.mailer_sendmail_timeout=Sendmail のタイムアウト
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=Email (例 test@example.com)
+config.test_email_placeholder=メールアドレス (例 test@example.com)
config.send_test_mail=テストメールを送信
config.send_test_mail_submit=送信
config.test_mail_failed=`"%s" へのテストメール送信に失敗しました: %v`
@@ -3549,7 +3587,7 @@ 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_signature=警告! このIDの鍵はデータベースに登録されていますが、その鍵でコミットの検証が通りません! これは疑わしいコミットです。
error.probable_bad_default_signature=警告! これはデフォルト鍵のIDですが、デフォルト鍵ではコミットの検証が通りません! これは疑わしいコミットです。
[units]
@@ -3639,7 +3677,7 @@ go.install=コマンドラインでパッケージをインストール:
helm.registry=このレジストリをコマンドラインからセットアップします:
helm.install=パッケージをインストールするには、次のコマンドを実行します:
maven.registry=あなたのプロジェクトの pom.xml ファイルに、このレジストリをセットアップします:
-maven.install=パッケージを使用するため pom.xml ファイル内の dependencies ブロックに以下を含めます:
+maven.install=パッケージを使用するには、 pom.xml ファイル内の dependencies ブロックに以下を含めます:
maven.install2=コマンドラインで実行します:
maven.download=依存関係をダウンロードするには、コマンドラインでこれを実行します:
nuget.registry=このレジストリをコマンドラインからセットアップします:
@@ -3812,6 +3850,7 @@ runs.no_runs=ワークフローはまだ実行されていません。
runs.empty_commit_message=(空のコミットメッセージ)
runs.expire_log_message=ログは古すぎるため消去されています。
runs.delete=ワークフローの実行を削除
+runs.cancel=ワークフローの実行をキャンセル
runs.delete.description=このワークフローを完全に削除してもよろしいですか?この操作は元に戻せません。
runs.not_done=このワークフローの実行は完了していません。
runs.view_workflow_file=ワークフローファイルを表示
diff --git a/options/locale/locale_ko-KR.ini b/options/locale/locale_ko-KR.ini
index 22bf3e16413..e010d173317 100644
--- a/options/locale/locale_ko-KR.ini
+++ b/options/locale/locale_ko-KR.ini
@@ -125,9 +125,6 @@ sqlite_helper=SQLite3 데이터베이스에 대한 파일 경로입니다. Gi
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_invalid=관리자 사용자 이름이 올바르지 않습니다
general_title=기본설정
app_name=사이트 제목
@@ -140,7 +137,6 @@ run_user=실행 사용자명
ssh_port=SSH 서버 포트
ssh_port_helper=SSH 서버가 실행되고 있는 포트를 입력하세요. 비워둘 경우 SSH를 사용하지 않습니다.
http_port=Gitea HTTP 수신 포트
-http_port_helper=Gitea 웹서버가 수신할 포트 번호
app_url=Gitea 기본 URL
app_url_helper=HTTP(S) clone URL 및 이메일 알림 기본 주소
log_root_path=로그 경로
@@ -230,7 +226,6 @@ allow_password_change=사용자에게 비밀번호 변경을 요청 (권장됨)
reset_password_mail_sent_prompt=확인 메일이 %s 로 전송되었습니다. 받은 편지함으로 도착한 메일을 %s 안에 확인해서 비밀번호 찾기 절차를 완료하십시오.
active_your_account=계정 활성화
account_activated=계정이 활성화 되었습니다
-prohibit_login=로그인이 금지됨
resent_limit_prompt=활성화를 위한 이메일을 이미 전송했습니다. 3분 내로 이메일을 받지 못한 경우 재시도해주세요.
has_unconfirmed_mail=안녕하세요 %s, 이메일 주소(%s )가 확인되지 않았습니다. 확인 메일을 받으시지 못하겼거나 새로운 확인 메일이 필요하다면, 아래 버튼을 클릭해 재발송하실 수 있습니다.
resend_mail=여기를 눌러 확인 메일 재전송
@@ -416,7 +411,6 @@ activated=활성화됨
primary_email=프라이머리로 만들기
delete_email=삭제
email_deletion=이메일 주소 삭제
-email_deletion_desc=계정의 이메일 주소와 관련된 정보가 삭제됩니다. 이메일 주소로 이미 커밋된 내용들은 바뀌지 않고 남아있게 됩니다. 계속 진행하시겠습니까?
email_deletion_success=이메일 주소가 삭제되었습니다.
theme_update_success=테마가 갱신되었습니다.
theme_update_error=선택한 테마가 존재하지 않습니다.
@@ -497,7 +491,6 @@ revoke_oauth2_grant=접근 권한 제거
twofa_is_enrolled=귀하의 계정은 현재 2단계 인증에 등록 되어 있습니다.
twofa_not_enrolled=귀하의 계정은 현재 2단계 인증에 등록되어 있지 않습니다.
twofa_disable=2단계 인증 해제
-twofa_enroll=2단계 인증에 등록하기
twofa_disable_note=필요한 경우 2단계 인증을 해제할 수 있습니다.
twofa_disable_desc=2단계 인증을 해제하면 귀하의 계정이 보안에 취약해질 것 입니다. 계속하시겠습니까?
twofa_disabled=2단계 인증이 해제되었습니다.
@@ -510,7 +503,6 @@ twofa_enrolled=당신의 계정에 2단계 인증이 설정되었습니다. 스
manage_account_links=연결된 계정 관리
manage_account_links_desc=Gitea 계정에 연결된 외부 계정입니다.
-account_links_not_available=현재 Gitea 계정에 연결된 외부 계정이 없습니다.
link_account=계정 연결
remove_account_link=연결된 계정 제거
remove_account_link_desc=해당 계정을 연결해제 하는 경우 Gitea 계정에 대한 접근 권한이 사라지게 됩니다. 계속하시겠습니까?
@@ -601,7 +593,6 @@ quick_guide=퀵 가이드
clone_this_repo=이 저장소 복제
create_new_repo_command=커맨드 라인에서 새 레포리지터리 생성
push_exist_repo=커맨드라인에서 기존 레포지터리 푸시
-empty_message=이 저장소는 아무런 내용을 가지고 있지 않습니다.
code=코드
code.desc=소스 코드 접근, 파일, 커밋 그리고 브랜치
@@ -648,6 +639,7 @@ editor.filename_cannot_be_empty=파일명이 빈칸입니다.
editor.no_changes_to_show=표시할 변경사항이 없습니다.
editor.add_subdir=경로 추가...
+
commits.desc=소스 코드 변경 내역 탐색
commits.commits=커밋
commits.search_all=모든 브랜치
@@ -714,7 +706,6 @@ issues.filter_type.mentioning_you=나를 언급함
issues.filter_sort=정렬
issues.filter_sort.latest=최신
issues.filter_sort.oldest=오래된
-issues.filter_sort.recentupdate=최근 업데이트
issues.filter_sort.leastupdate=가장 최근에 업데이트
issues.filter_sort.mostcomment=가장 많은 코멘트
issues.filter_sort.leastcomment=가장 적은 코멘트
@@ -930,7 +921,6 @@ activity.published_release_label=배포됨
contributors.contribution_type.commits=커밋
settings=설정
-settings.desc=설정은 저장소 설정을 관리할 수 있습니다.
settings.options=저장소
settings.collaboration=공동작업자
settings.collaboration.admin=관리자
@@ -992,8 +982,6 @@ settings.teams=팀
settings.add_webhook=Webhook 추가
settings.webhook_deletion=Webhook 삭제
settings.webhook_deletion_success=Webhook을 삭제했습니다.
-settings.webhook.test_delivery=전달 시험
-settings.webhook.test_delivery_desc=이 웹훅을 가상 이벤트로 테스트
settings.webhook.request=요청
settings.webhook.response=응답
settings.webhook.headers=제목
@@ -1151,12 +1139,12 @@ settings.visibility.private_shortname=비공개
settings.update_settings=설정 업데이트
settings.update_setting_success=조직 설정이 변경되었습니다.
+
+
settings.update_avatar_success=조직의 아바타가 갱신되었습니다.
settings.delete=조직 삭제
settings.delete_account=이 조직을 삭제합니다.
settings.confirm_delete_account=삭제 승인
-settings.delete_org_title=조직 삭제
-settings.delete_org_desc=이 조직이 영구히 삭제됩니다. 계속 하시겠습니까?
members.membership_visibility=회원 표시:
@@ -1210,7 +1198,6 @@ dashboard.system_status=시스템 상태
dashboard.operation_name=작업 명
dashboard.operation_switch=스위치
dashboard.operation_run=실행
-dashboard.git_gc_repos=모든 저장소 가비지 콜렉트
dashboard.sync_external_users=외부 사용자 데이터 동기화
dashboard.server_uptime=서버를 켠 시간
dashboard.current_goroutine=현재 Go루틴
@@ -1251,7 +1238,6 @@ users.admin=관리자
users.repos=저장소
users.created=작성일
users.last_login=마지막 로그인
-users.never_login=로그인 한 적이 없습니다.
users.send_register_notify=사용자 등록 알림 전송
users.edit=수정하기
users.auth_source=인증 소스
@@ -1274,6 +1260,7 @@ users.list_status_filter.is_active=사용
users.list_status_filter.is_admin=관리자
emails.activated=활성화됨
+emails.filter_sort.name=사용자명
orgs.org_manage_panel=조직 관리
orgs.name=이름
diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini
index a746f8738c6..3328a6f759c 100644
--- a/options/locale/locale_lv-LV.ini
+++ b/options/locale/locale_lv-LV.ini
@@ -44,7 +44,6 @@ webauthn_use_twofa=Izmantot divfaktoru kodu no tālruņa
webauthn_error=Nevar nolasīt drošības atslēgu.
webauthn_unsupported_browser=Jūsu pārlūks neatbalsta WebAuthn standartu.
webauthn_error_unknown=Notikusi nezināma kļūda. Atkārtojiet darbību vēlreiz.
-webauthn_error_insecure=`WebAuthn atbalsta tikai drošus savienojumus. Pārbaudīšanai ar HTTP var izmantot izcelsmi "localhost" vai "127.0.0.1"`
webauthn_error_unable_to_process=Serveris nevarēja apstrādāt pieprasījumu.
webauthn_error_duplicated=Drošības atslēga nav atļauta šim pieprasījumam. Pārliecinieties, ka šī atslēga jau nav reģistrēta.
webauthn_error_empty=Jānorāda šīs atslēgas nosaukums.
@@ -184,8 +183,6 @@ buttons.enable_monospace_font=Izmantot vienāda izmēra fontu
buttons.disable_monospace_font=Neizmantot vienāda izmēra fontu
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=Radusies kļūda
@@ -218,16 +215,10 @@ path=Ceļš
sqlite_helper=Faila ceļš SQLite3 datubāzei. Ievadiet absolūto ceļu, ja Gitea tiek startēts kā serviss.
reinstall_error=Nevar instalēt datubāzē, kura jau satur Gitea datus
reinstall_confirm_message=Veicot Gitea datubāzēs atkārtotu instalēšanu, tas var izraisīt vairākas problēmas. Būtu jāizmanto esošais "app.ini", lai palaistu Gitea. Apstipriniet, ja patiešām vēlaties to darīt:
-reinstall_confirm_check_1=Dati, kas šifrēti ar SECRET_KEY atslēgu, kas ir norādīta app.ini failā, var tikt pazaudēti: lietotaji nevārēs autorizēties ar divfaktoru autorizāciju, kā arī spoguļi var pārstāt darboties. Atzīmējot šo pazīmi, apstipriniet, ka pašreizējais app.ini fails satur korektu SECRET_KEY vērtību.
-reinstall_confirm_check_2=Repozitorijus un iestatījumus iespējams nepieciešams pārsinhronizēt. Atzīmējot, apstipriniet, ka vēlaties pārsinhronizēt repozitorija āķus un authorized_keys failu. Pārliecinieties, ka repozitorija un spoguļošanas iestatījumi ir pareizi.
reinstall_confirm_check_3=Apstiprinat, ka esat pārliecināts, ka Gitea izmanto pareizu app.ini faila atrašanās vietu un patiešām vēlaties veikt atkārtotu instalāciju, tāpat apstiprinat, ka tas var radīt augstāk minētās problēmas.
err_empty_db_path=Nav norādīts SQLite3 datu bāzes ceļš.
no_admin_and_disable_registration=Reģistrāciju nevar atslēgt, kamēr nav izveidots administratora konts.
err_empty_admin_password=Administratora kontam ir obligāti jānorāda parole.
-err_empty_admin_email=Administratora e-pasta adrese nevar būt tukša.
-err_admin_name_is_reserved=Administratora lietotājvārds nav korekts, šāds lietotājvārds ir rezervēts
-err_admin_name_pattern_not_allowed=Administratora lietotājvārds nav korekts, šāds lietotājvārds nav atļauts
-err_admin_name_is_invalid=Administratora lietotāja nav korekts
general_title=Vispārīgie iestatījumi
app_name=Vietnes nosaukums
@@ -243,7 +234,6 @@ domain_helper=Domēns vai servera adrese.
ssh_port=SSH servera ports
ssh_port_helper=Porta numurs, kuru SSH serveris klausīsies. Atstājiet tukšu, lai atspējotu.
http_port=Gitea HTTP klausīšanās ports
-http_port_helper=Porta numurs, kuru Gitea tīmekļa serveris klausīsies.
app_url=Gitea pamata URL
app_url_helper=Pamata adrese HTTP(S) klonēšanas URL un e-pastu paziņojumiem.
log_root_path=Žurnalizēšanas ceļš
@@ -306,7 +296,6 @@ no_reply_address=Neatbildēt e-pasta adreses domēns
no_reply_address_helper=Domēns lietotāja e-pasta adresei git žurnālos, ja lietotājs izvēlas paturēt savu e-pasta adresi privātu. Piemēram, ja lietotājs ir 'janis' un domēns 'neatbildet.piemers.lv', tad e-pasta adrese būs 'janis@neatbildet.piemers.lv'.
password_algorithm=Paroles jaucējsummas algoritms
invalid_password_algorithm=Kļūdaina paroles jaucējfunkcija
-password_algorithm_helper=Norādiet paroles jaucējalgoritmu. Algoritmi atšķirās pēc prasībām pret resursiem un stipruma. Argon2 algoritms ir drošs, bet tam nepieciešams daudz operatīvās atmiņas, līdz ar ko tas var nebūt piemērots sistēmām ar maz pieejamajiem resursiem.
enable_update_checker=Iespējot jaunu versiju paziņojumus
enable_update_checker_helper=Periodiski pārbaudīt jaunu version pieejamību, izgūstot datus no gitea.io.
env_config_keys=Vides konfigurācija
@@ -364,8 +353,6 @@ allow_password_change=Pieprasīt lietotājam mainīt paroli (ieteicams)
reset_password_mail_sent_prompt=Apstiprināšanas e-pasts tika nosūtīts uz %s . Pārbaudiet savu e-pasta kontu tuvāko %s laikā, lai pabeigtu paroles atjaunošanas procesu.
active_your_account=Aktivizēt savu kontu
account_activated=Konts ir aktivizēts
-prohibit_login=Pieteikšanās liegta
-prohibit_login_desc=Jūsu konts ir bloķēts, sazinieties ar sistēmas administratoru.
resent_limit_prompt=Jūs pieprasījāt aktivizācijas e-pastu pārāk bieži. Lūdzu, uzgaidiet 3 minūtes un mēģiniet vēlreiz.
has_unconfirmed_mail=Sveiki %s, Jums ir neapstiprināta e-pasta adrese (%s ). Ja neesat saņēmis apstiprināšanas e-pastu vai Jums ir nepieciešams nosūtīt jaunu, lūdzu, nospiediet pogu, kas atrodas zemāk.
resend_mail=Nospiediet šeit, lai vēlreiz nosūtītu aktivizācijas e-pastu
@@ -401,16 +388,12 @@ openid_connect_desc=Izvēlētais OpenID konts sistēmā netika atpazīts, bet J
openid_register_title=Izveidot jaunu kontu
openid_register_desc=Izvēlētais OpenID konts sistēmā netika atpazīts, bet Jūs to varat piesaistīt esošam kontam.
openid_signin_desc=Jāievada OpenID URI. Piemēram, anna.openid.example.org vai https://openid.example.org/anna.
-disable_forgot_password_mail=Konta atjaunošana ir atspējota, jo nav uzstādīti e-pasta servera iestatījumi. Sazinieties ar lapas administratoru.
-disable_forgot_password_mail_admin=Kontu atjaunošana ir pieejama tikai, ja ir veikta e-pasta servera iestatījumu konfigurēšana. Norādiet e-pasta servera iestatījumus, lai iespējotu kontu atjaunošanu.
email_domain_blacklisted=Nav atļauts reģistrēties ar šādu e-pasta adresi.
authorize_application=Autorizēt lietotni
authorize_redirect_notice=Jūs tiksiet nosūtīts uz %s, ja autorizēsiet šo lietotni.
authorize_application_created_by=Šo lietotni izveidoja %s.
-authorize_application_description=Ja piešķirsiet tiesības, tā varēs piekļūt un mainīt Jūsu konta informāciju, ieskaitot privātos repozitorijus un organizācijas.
authorize_title=Autorizēt "%s" piekļuvi jūsu kontam?
authorization_failed=Autorizācija neizdevās
-authorization_failed_desc=Autentifikācija neizdevās, jo tika veikts kļūdains pieprasījums. Sazinieties ar lietojumprogrammas, ar kuru mēģinājāt autentificēties, uzturētāju.
sspi_auth_failed=SSPI autentifikācija neizdevās
password_pwned_err=Neizdevās pabeigt pieprasījumu uz HaveIBeenPwned
@@ -430,8 +413,6 @@ activate_email.title=%s, apstipriniet savu e-pasta adresi
activate_email.text=Nospiediet uz saites, lai apstiprinātu savu e-pasta adresi lapā %s :
register_notify.title=%[1]s, esat reģistrējies %[2]s
-register_notify.text_1=šis ir reģistrācijas apstiprinājuma e-pasts lapai %s!
-register_notify.text_2=Tagad varat autorizēties ar lietotāja vārdu: %s.
register_notify.text_3=Ja šis konts Jums tika izveidots, tad obligāti nomainiet citu paroli .
reset_password=Atgūt kontu
@@ -469,7 +450,6 @@ release.download.targz=Izejas kods (TAR.GZ)
repo.transfer.subject_to=%s vēlas pārsūtīt repozitoriju "%s" organizācijai %s
repo.transfer.subject_to_you=`%s vēlas Jums pārsūtīt repozitoriju "%s"`
repo.transfer.to_you=Jums
-repo.transfer.body=Ja vēlaties to noraidīt vai apstiprināt, tad apmeklējiet saiti %s.
repo.collaborator.added.subject=%s pievienoja Jūs repozitorijam %s
repo.collaborator.added.text=Jūs tikāt pievienots kā līdzstrādnieks repozitorijam:
@@ -521,7 +501,6 @@ url_error=`"%s" nav korekts URL.`
include_error=` ir jāsatur tekstu "%s".`
glob_pattern_error=` glob šablons nav korekts: %s.`
regex_pattern_error=` regulārā izteiksme nav korekta: %s.`
-username_error=` drīkst saturēt tikai burtus un ciparus ('0-9','a-z','A-Z'), domuzīme ('-'), apakšsvītra ('_') un punkts ('.'). Nevar sākties vai beigties ar simbolu, kas nav burts vai skaitlis, kā arī nevar būt vairāki simboli pēc kārtas, kas nav burti vai skaitļi.`
invalid_group_team_map_error=` sasaiste nav korekta: %s`
unknown_error=Nezināma kļūda:
captcha_incorrect=Ievadīts nepareizs drošības kods.
@@ -534,11 +513,9 @@ username_has_not_been_changed=Lietotājvārds netika mainīts
repo_name_been_taken=Jau eksistē repozitorijs ar šādu nosaukumu.
repository_force_private=Ir ieslēgts piespiedu privātais režīms: repozitorijus nav iespējams padarīt publiskus.
repository_files_already_exist=Šī repozitorija faili jau eksistē, sazinieties ar sistēmas administratoru.
-repository_files_already_exist.adopt=Šī repozitorija faili jau eksistē un var tikt tikai pārņemti.
repository_files_already_exist.delete=Šī repozitorija faili jau eksistē, nepieciešams tos dzēst.
repository_files_already_exist.adopt_or_delete=Šī repozitorija faili jau eksistē, tie ir jāpārņem vai jādzēš.
visit_rate_limit=Attālinātā piekļuve ir ierobežota ar ātruma ierobežotāju.
-2fa_auth_required=Attālinātai piekļuvei ir nepieciešama divu faktoru autentifikācija.
org_name_been_taken=Organizācijas nosaukums jau ir aizņemts.
team_name_been_taken=Komandas nosaukums jau ir aizņemts.
team_no_units_error=Komandai ir jābūt iespējotai vismaz vienai sadaļai.
@@ -566,14 +543,8 @@ invalid_ssh_key=Nav iespējams pārbaudīt SSH atslēgu: %s
invalid_gpg_key=Nav iespējams pārbaudīt GPG atslēgu: %s
invalid_ssh_principal=Kļūdaina identitāte: %s
must_use_public_key=Atslēga, ko norādījāt ir privātā atslēga. Nekad nenodotiet savu privātu atslēgu nevienam. Izmantojiet publisko atslēgu.
-unable_verify_ssh_key=SSH atslēgu nav iespējams pārbaudīt, pārliecinieties, ka tajā nav kļūdu.
auth_failed=Autentifikācija neizdevās: %v
-still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku.
-still_has_org=Jūsu konts ir piesaistīts vismaz vienai organizācijai, sākumā nepieciešams to pamest.
-still_own_packages=Jūsu kontam pieder viena vai vairākas pakotnes, tās nepieciešams izdzēst.
-org_still_own_repo=Organizācijai pieder repozitoriji, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku.
-org_still_own_packages=Šai organizācijai pieder viena vai vārākas pakotnes, tās nepieciešams izdzēst.
target_branch_not_exist=Mērķa atzars neeksistē
@@ -602,7 +573,6 @@ settings=Lietotāja iestatījumi
form.name_reserved=Lietotājvārdu "%s" nedrīkst izmantot.
form.name_pattern_not_allowed=Lietotājvārds "%s" nav atļauts.
-form.name_chars_not_allowed=Lietotāja vārds "%s" satur neatļautus simbolus.
[settings]
@@ -625,7 +595,6 @@ uid=UID
public_profile=Publiskais profils
biography_placeholder=Pastāsti mums mazliet par sevi! (Var izmantot Markdown)
location_placeholder=Kopīgot savu aptuveno atrašanās vietu ar citiem
-profile_desc=Norādīt, kā profils tiek attēlots citiem lietotājiem. Primārā e-pasta adrese tiks izmantota paziņojumiem, paroles atjaunošanai un Git tīmekļa darbībām.
full_name=Pilns vārds
website=Mājas lapa
location=Atrašanās vieta
@@ -643,7 +612,6 @@ cancel=Atcelt
language=Valoda
ui=Motīvs
hidden_comment_types=Attēlojot paslēpt šauds komentārus:
-hidden_comment_types_description=Komentāru veidi, kas atzīmēti, netiks rādīti problēmu lapā. Piemēram, atzīmējot "Iezīmes" netiks rādīti komentāri "{lietotājs} pievienoja/noņēma {iezīme} iezīmi".
hidden_comment_types.ref_tooltip=Komentāri, kad problēmai tiek pievienota atsauce uz citu probēmu, komentāru, …
hidden_comment_types.issue_ref_tooltip=Komentāri par lietotāja izmaiņām ar problēmas saistīto atzaru/tagu
comment_type_group_reference=Atsauces
@@ -696,10 +664,8 @@ requires_activation=Nepieciešams aktivizēt
primary_email=Uzstādīt kā primāro
activate_email=Nosūtīt aktivizācijas e-pastu
activations_pending=Gaida aktivizāciju
-can_not_add_email_activations_pending=Ir nepabeigta aktivizācija. Pēc dažām minūtēm mēģiniet vēlreiz, ja ir vēlme pievienot jaunu e-pasta adresi.
delete_email=Noņemt
email_deletion=Dzēst e-pasta adresi
-email_deletion_desc=E-pasta adrese un ar to saistītā informācija tiks dzēsta no šī konta. Git revīzijas ar šo e-pasta adresi netiks mainītas. Vai turpināt?
email_deletion_success=E-pasta adrese ir veiksmīgi izdzēsta.
theme_update_success=Jūsu motīvs tika nomainīts.
theme_update_error=Izvēlētais motīvs neeksistē.
@@ -742,7 +708,6 @@ gpg_key_matched_identities_long=Iegultās identitātes šājā atslēgā atbilst
gpg_key_verified=Pārbaudītā atslēga
gpg_key_verified_long=Atslēga tika apliecināta ar pilnvaru un var tikt izmantota, lai pārbaudītu revīzijas, kas atbilst jebkurai apstiprinātai e-pasta adresei šim lietotājam papildus šīs atslēgas atbilstošajām identitātēm.
gpg_key_verify=Pārbaudīt
-gpg_invalid_token_signature=Norādītā GPG atslēga, paraksts un pilnvara neatbilst vai tai ir beidzies derīguma termiņš.
gpg_token_required=Jānorāda paraksts zemāk esošajai pilnvarai
gpg_token=Pilnvara
gpg_token_help=Parakstu ir iespējams uzģenerēt izmantojot komandu:
@@ -752,7 +717,6 @@ verify_gpg_key_success=GPG atslēga "%s" veiksmīgi pārbaudīta.
ssh_key_verified=Pārbaudīta atslēga
ssh_key_verified_long=Atslēga tika apliecināta ar parakstītu pilnvaru un var tikt izmantota, lai pārbaudītu revīzijas, kas atbilst jebkurai apstiprinātai lietotāja e-pasta adresei.
ssh_key_verify=Pārbaudīt
-ssh_invalid_token_signature=Norādītā SSH atslēga, paraksts un pilnvara neatbilst vai tai ir beidzies derīguma termiņš.
ssh_token_required=Jānorāda paraksts zemāk esošajai pilnvarai
ssh_token=Pilnvara
ssh_token_help=Parakstu ir iespējams uzģenerēt izmantojot komandu:
@@ -773,7 +737,6 @@ gpg_key_deletion=Noņemt GPG atslēgu
ssh_principal_deletion=Noņemt SSH sertifikāta identitāti
ssh_key_deletion_desc=Dzēšot šo SSH atslēgu, ar to vairs nebūs iespējams autorizēties Jūsu kontā. Vai turpināt?
gpg_key_deletion_desc=Noņemot GPG atslēgu, ar to parakstītās revīzijas vairs netiks attēlotas kā verificētas. Vai turpināt?
-ssh_principal_deletion_desc=Noņemot SSH sertifikāta identitāti, ar to vairs nebūs iespējams piekļūt šim kontam. Vai turpināt?
ssh_key_deletion_success=SSH atslēga tika izdzēsta.
gpg_key_deletion_success=GPG atslēga tika izdzēsta.
ssh_principal_deletion_success=Identitāte tika noņemta.
@@ -831,7 +794,6 @@ create_oauth2_application_button=Izveidot lietotni
create_oauth2_application_success=Ir veiksmīgi izveidota jauna OAuth2 lietotne.
update_oauth2_application_success=Ir veiksmīgi atjaunota OAuth2 lietotne.
oauth2_application_name=Lietotnes nosaukums
-oauth2_confidential_client=Konfidenciāls klients. Norādiet lietotēm, kas glabā noslēpumu slepenībā, piemēram, tīmekļa lietotnēm. Nenorādiet instalējamām lietotnēm, tai skaitā darbavirsmas vai mobilajām lietotnēm.
oauth2_redirect_uris=Pārsūtīšanas URI. Norādiet katru URI savā rindā.
save_application=Saglabāt
oauth2_client_id=Klienta ID
@@ -845,10 +807,8 @@ oauth2_application_remove_description=OAuth2 lietotnes noņemšana liegs tai pie
oauth2_application_locked=Gitea sāknēšanas brīdī reģistrē dažas OAuth2 lietotnes, ja tas ir iespējots konfigurācijā. Lai novērstu negaidītu uzvedību, tās nevar ne labot, ne noņemt. Lūgums vērsties OAuth2 dokumentācijā pēc vairāk informācijas.
authorized_oauth2_applications=Autorizētās OAuth2 lietotnes
-authorized_oauth2_applications_description=Ir ļauta piekļuve savam Gitea kontam šīm trešo pušu lietotnēm. Lūgums atsaukt piekļuvi lietotnēm, kas vairs nav nepieciešamas.
revoke_key=Atsaukt
revoke_oauth2_grant=Atsaukt piekļuvi
-revoke_oauth2_grant_description=Atsaucot piekļuvi šai trešas puses lietotnei tiks liegta piekļuve Jūsu datiem. Vai turpināt?
revoke_oauth2_grant_success=Piekļuve veiksmīgi atsaukta.
twofa_recovery_tip=Ja ierīce tiek pazaudēta, iespējams izmantot vienreiz izmantojamo atkopšanas atslēgu, lai atgūtu piekļuvi savam kontam.
@@ -856,7 +816,6 @@ twofa_is_enrolled=Kontam ir ieslēgta divfaktoru autentifikāci
twofa_not_enrolled=Kontam šobrīd nav ieslēgta divfaktoru autentifikācija.
twofa_disable=Atslēgt divfaktoru autentifikāciju
twofa_scratch_token_regenerated=Vienreizējā pilnvara tagad ir %s. Tā ir jāglabā drošā vietā, tā vairs nekad netiks rādīta.
-twofa_enroll=Ieslēgt divfaktoru autentifikāciju
twofa_disable_note=Nepieciešamības gadījumā divfaktoru autentifikāciju ir iespējams atslēgt.
twofa_disable_desc=Atslēdzot divfaktoru autentifikāciju, konts vairs nebūs tik drošs. Vai turpināt?
regenerate_scratch_token_desc=Ja esat aizmirsis vienreizējo kodu vai esat to jau izmantojis, lai pieteiktos, atjaunojiet to šeit.
@@ -870,13 +829,11 @@ twofa_failed_get_secret=Neizdevās ielādēt noslēpumu.
webauthn_register_key=Pievienot drošības atslēgu
webauthn_nickname=Segvārds
webauthn_delete_key=Noņemt drošības atslēgu
-webauthn_delete_key_desc=Noņemot drošības atslēgu ar to vairs nebūs iespējams pieteikties. Vai turpināt?
webauthn_key_loss_warning=Ja tiek pazaudētas drošības atslēgas, tiks zaudēta piekļuve kontam.
webauthn_alternative_tip=Ir vēlams uzstādīt papildu autentifikācijas veidu.
manage_account_links=Pārvaldīt saistītos kontus
manage_account_links_desc=Šādi ārējie konti ir piesaistīti Jūsu Gitea kontam.
-account_links_not_available=Pašlaik nav neviena ārējā konta piesaistīta šim kontam.
link_account=Sasaistīt kontu
remove_account_link=Noņemt saistīto kontu
remove_account_link_desc=Noņemot saistīto kontu, tam tiks liegta piekļuve Jūsu Gitea kontam. Vai turpināt?
@@ -931,7 +888,6 @@ fork_to_different_account=Atdalīt uz citu kontu
fork_visibility_helper=Atdalītam repozitorijam nav iespējams mainīt tā redzamību.
fork_branch=Atzars, ko klonēt atdalītajā repozitorijā
all_branches=Visi atzari
-fork_no_valid_owners=Šim repozitorijam nevar izveidot atdalītu repozitoriju, jo tam nav spēkā esošu īpašnieku.
use_template=Izmantot šo sagatavi
download_zip=Lejupielādēt ZIP
download_tar=Lejupielādēt TAR.GZ
@@ -967,12 +923,10 @@ mirror_interval_invalid=Nekorekts spoguļošanas intervāls.
mirror_sync_on_commit=Sinhronizēt, kad revīzijas tiek iesūtītas
mirror_address=Spoguļa adrese
mirror_address_desc=Pieslēgšanās rekvizītus norādiet autorizācijas sadaļā.
-mirror_address_url_invalid=Norādītais URL ir nederīgs. Visas URL daļas ir jānorāda pareizi.
mirror_address_protocol_invalid=Norādītais URL ir nederīgs. Var spoguļot tikai no http(s):// vai git:// adresēm.
mirror_lfs=Lielu failu glabātuve (LFS)
mirror_lfs_desc=Aktivizēt LFS datu spoguļošanu.
mirror_lfs_endpoint=LFS galapunkts
-mirror_lfs_endpoint_desc=Sinhronizācija mēģinās izmantot klonēsanas URL, lai noteiktu LFS serveri . Var norādīt arī citu galapunktu, ja repozitorija LFS dati ir izvietoti citā vietā.
mirror_last_synced=Pēdējo reizi sinhronizēts
mirror_password_placeholder=(bez izmaiņām)
mirror_password_blank_placeholder=(nav uzstādīts)
@@ -984,7 +938,6 @@ forks=Atdalītie repozitoriji
reactions_more=un vēl %d
unit_disabled=Administrators ir atspējojies šo repozitorija sadaļu.
language_other=Citas
-adopt_search=Ievadiet lietotāja vārdu, lai meklētu nepārņemtos repozitorijus... (atstājiet tukšu, lai meklētu visus)
adopt_preexisting_label=Pārņemt failus
adopt_preexisting=Pārņemt jau eksistējošos failus
adopt_preexisting_content=Izveidot repozitoriju no direktorijas %s
@@ -1021,8 +974,6 @@ template.issue_labels=Problēmu iezīmes
template.one_item=Norādiet vismaz vienu sagataves vienumu
template.invalid=Norādiet sagataves repozitoriju
-archive.title=Šis repozitorijs ir arhivēts. Ir iespējams aplūkot tā failus un to konēt, bet nav iespējams iesūtīt izmaiņas, kā arī izveidot jaunas problēmas vai izmaiņu pieprasījumus.
-archive.title_date=Šis repozitorijs tika arhivēts %s. Ir iespējams aplūkot tā failus un to konēt, bet nav iespējams iesūtīt izmaiņas, kā arī izveidot jaunas problēmas vai izmaiņu pieprasījumus.
archive.issue.nocomment=Repozitorijs ir arhivēts. Problēmām nevar pievienot jaunus komentārus.
archive.pull.nocomment=Repozitorijs ir arhivēts. Izmaiņu pieprasījumiem nevar pievienot jaunus komentārus.
@@ -1039,7 +990,6 @@ migrate_options_lfs=Migrēt LFS failus
migrate_options_lfs_endpoint.label=LFS galapunkts
migrate_options_lfs_endpoint.description=Migrācija mēģinās izmantot attālināto URL, lai noteiktu LFS serveri . Var norādīt arī citu galapunktu, ja repozitorija LFS dati ir izvietoti citā vietā.
migrate_options_lfs_endpoint.description.local=Iespējams norādīt arī servera ceļu.
-migrate_options_lfs_endpoint.placeholder=Ja nav norādīts, galamērķis tiks atvasināts no klonēšanas URL
migrate_items=Vienumi, ko pārņemt
migrate_items_wiki=Vikivietni
migrate_items_milestones=Atskaites punktus
@@ -1051,10 +1001,8 @@ migrate_items_releases=Laidienus
migrate_repo=Migrēt repozitoriju
migrate.clone_address=Klonēšanas adrese
migrate.clone_address_desc=Tā var būt HTTP(S) adrese vai Git 'clone' URL eksistējošam repozitorijam
-migrate.github_token_desc=Ir iespējams izmantot vienu vai ar komantiem atdalītus vairākas pilnvaras, lai veiktu ātrāku migrāciju, ja tā tiek ierobežota ar GitHub API ierobežojumiem. BRĪDINĀJUMS: Šīs iespējas ļaunprātīga izmantošana, var tikt uzskatīta par lietošanas noteikumu pārkāpumu ar no tā izrietošām sekām.
migrate.clone_local_path=vai servera lokālais ceļš
migrate.permission_denied=Jums nav tiesību importēt lokālu repozitoriju.
-migrate.permission_denied_blocked=Nav iespējams importēt no neatļautām adresēm, prasiet administratoram pārskatīt ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS iestatījumus.
migrate.invalid_local_path=Nederīgs lokālais ceļš. Tas neeksistē vai nav direktorija.
migrate.invalid_lfs_endpoint=LFS galapunkts nav korekts.
migrate.failed=Migrācija neizdevās: %v
@@ -1062,7 +1010,6 @@ migrate.migrate_items_options=Piekļuves pilnvara ir nepieciešama, lai pārņem
migrated_from=Migrēts no %[2]s
migrated_from_fake=Migrēts no %[1]s
migrate.migrate=Migrēt no %s
-migrate.migrating=Migrācija no %s ...
migrate.migrating_failed=Migrācija no %s neizdevās.
migrate.migrating_failed.error=Migrācija neizdevās: %s
migrate.migrating_failed_no_addr=Migrācija neizdevās.
@@ -1104,7 +1051,6 @@ clone_this_repo=Klonēt šo repozitoriju
cite_this_repo=Citēt šo repozitoriju
create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
-empty_message=Repozitorijs ir tukšs.
broken_message=Git repozitoriju nav iespējams nolasīt. Sazinieties ar šī servera administratoru vai izdzēsiet šo repozitoriju.
code=Kods
@@ -1122,7 +1068,6 @@ projects=Projekti
packages=Pakotnes
actions=Darbības
labels=Iezīmes
-org_labels_desc=Organizācijas līmeņa iezīmes var tikt izmantotas visiem repozitorijiem šajā organizācijā
org_labels_desc_manage=pārvaldīt
milestone=Atskaites punktus
@@ -1196,7 +1141,6 @@ editor.update=Atjaunot %s
editor.delete=Dzēst %s
editor.patch=Pielietot ielāpu
editor.patching=Pielieto ielāpu:
-editor.fail_to_apply_patch=`Neizdevās pielietot ielāpu "%s"`
editor.new_patch=Jauns ielāps
editor.commit_message_desc=Pievienot neobligātu paplašinātu aprakstu…
editor.signoff_desc=Pievienot revīzijas žurnāla ziņojuma beigās Signed-off-by ar revīzijas autoru.
@@ -1212,17 +1156,12 @@ editor.filename_is_invalid=Faila nosaukums "%s" nav korekts.
editor.branch_does_not_exist=Šajā repozitorijā neeksistē atzars "%s".
editor.branch_already_exists=Atzars "%s" šajā repozitorijā jau eksistē.
editor.directory_is_a_file=Direktorijas nosaukums "%s" vecāka ceļā ir fails nevis direktorija šajā repozitorijā.
-editor.file_is_a_symlink=Fails "%s" ir norāde, kuru nav iespējams labot no tīmekļa redaktora
editor.filename_is_a_directory=Faila nosaukums "%s" sakrīt ar direktorijas nosaukumu šajā repozitorijā.
-editor.file_editing_no_longer_exists=Fails "%s", ko labojat, vairs neeksistē šajā repozitorijā.
-editor.file_deleting_no_longer_exists=Fails "%s", ko dzēšat, vairs neeksistē šajā repozitorijā.
editor.file_changed_while_editing=Faila saturs ir mainījies kopš sākāt to labot. Noklikšķiniet šeit , lai apskatītu, vai Nosūtiet izmaiņas atkārtoti , lai pārrakstītu.
editor.file_already_exists=Fails ar nosaukumu "%s" šajā repozitorijā jau eksistē.
editor.commit_empty_file_header=Iesūtīt tukšu failu
editor.commit_empty_file_text=Fails, ko vēlaties iesūtīt, ir tukšs. Vai turpināt?
editor.no_changes_to_show=Nav izmaiņu, ko rādīt.
-editor.fail_to_update_file=Neizdevās atjaunot/izveidot failu "%s".
-editor.fail_to_update_file_summary=Kļūdas ziņojums:
editor.push_rejected_no_message=Izmaiņu iesūtīšana tika noraidīta, bet serveris neatgrieza paziņojumu. Pārbaudiet git āķus šim repozitorijam.
editor.push_rejected=Serveris noraidīja šo izmaiņu. Pārbaudiet git āķus.
editor.push_rejected_summary=Pilns noraidīšanas ziņojums:
@@ -1237,6 +1176,7 @@ editor.require_signed_commit=Atzarā var iesūtīt tikai parakstītas revīzijas
editor.cherry_pick=Izlasīt %s uz:
editor.revert=Atgriezt %s uz:
+
commits.desc=Pārlūkot pirmkoda izmaiņu vēsturi.
commits.commits=Revīzijas
commits.no_commits=Nav kopīgu revīziju. Atzariem "%s" un "%s" ir pilnībā atšķirīga izmaiņu vēsture.
@@ -1393,7 +1333,6 @@ issues.filter_type.reviewed_by_you=Tavi recenzētie
issues.filter_sort=Kārtot
issues.filter_sort.latest=Jaunākie
issues.filter_sort.oldest=Vecakie
-issues.filter_sort.recentupdate=Nesen atjaunotās
issues.filter_sort.leastupdate=Vissenāk atjaunotās
issues.filter_sort.mostcomment=Visvairāk komentētās
issues.filter_sort.leastcomment=Vismazāk komentētās
@@ -1509,7 +1448,6 @@ issues.lock_no_reason=slēdza un ierobežoja komentāru pievienošanu tikai līd
issues.unlock_comment=atļāva komentēšanu %s
issues.lock_confirm=Slēgt
issues.unlock_confirm=Atļaut
-issues.lock.notice_1=- Citi lietotāji nevar pievienot jaunus komentārus šai problēmai.
issues.lock.notice_2=- Jums un citiem līdzstrādniekiem ar piekļuvi šim repozitorijam tiks saglabāta iespēja pievienot komentārus.
issues.lock.notice_3=- Jūs vienmēr varat atkal atļaut komentēšanu.
issues.unlock.notice_1=- Ikviens varēs atkal pievienot jaunus komentārus.
@@ -1547,7 +1485,6 @@ issues.due_date_form=dd.mm.yyyy
issues.due_date_form_add=Pievienot izpildes termiņu
issues.due_date_form_edit=Labot
issues.due_date_form_remove=Noņemt
-issues.due_date_not_writer=Ir nepieciešama rakstīšanas piekļuve šim repozitorijam, lai varētu mainīt problēmas plānoto izpildes datumu.
issues.due_date_not_set=Izpildes termiņš nav uzstādīts.
issues.due_date_added=pievienoja izpildes termiņu %s %s
issues.due_date_modified=mainīja termiņa datumu no %[2]s uz %[1]s %[3]s
@@ -1570,9 +1507,7 @@ issues.dependency.pr_closing_blockedby=Šī izmaiņu pieprasījuma sapludināša
issues.dependency.issue_closing_blockedby=Šīs problēmas aizvēršanu bloķē sekojošas problēmas
issues.dependency.issue_close_blocks=Šī problēma bloķē sekojošu problēmu aizvēršanu
issues.dependency.pr_close_blocks=Šis izmaiņu pieprasījums bloķē sekojošu problēmu aizvēršanu
-issues.dependency.issue_close_blocked=Nepieciešams aizvērt visas problēmas, kas bloķē šo problēmu, lai to varētu aizērt.
issues.dependency.issue_batch_close_blocked=Nav iespējams aizvērt vairākas atzīmētās problēmas, jo problēmai #%d ir atvērtas atkarības
-issues.dependency.pr_close_blocked=Nepieciešams aizvērt visas problēmas, kas bloķē šo izmaiņu pieprasījumu, lai to varētu sapludināt.
issues.dependency.blocks_short=Bloķē
issues.dependency.blocked_by_short=Atkarīgs no
issues.dependency.remove_header=Noņemt atkarību
@@ -1583,12 +1518,10 @@ issues.dependency.add_error_same_issue=Nevar izveidot atkarību uz pašu problē
issues.dependency.add_error_dep_issue_not_exist=Atkarīgā problēma neeksistē.
issues.dependency.add_error_dep_not_exist=Atkarība neeksistē.
issues.dependency.add_error_dep_exists=Atkarība jau ir pievienota.
-issues.dependency.add_error_cannot_create_circular=Nav iespējams veidot atkarību, kur divas problēmas bloķētu viena otru.
issues.dependency.add_error_dep_not_same_repo=Abām problēmām ir jābūt no viena repozitorija.
issues.review.self.approval=Nevar apstiprināt savu izmaiņu pieprasījumi.
issues.review.self.rejection=Nevar pieprasīt izmaiņas savam izmaiņu pieprasījumam.
issues.review.approve=apstiprināja izmaiņas %s
-issues.review.dismissed=atmeta %s recenziju %s
issues.review.dismissed_label=Atmesta
issues.review.left_comment=atstāja komentāru
issues.review.content.empty=Nepieciešams norādīt komentāru par prasītajām izmaiņām.
@@ -1596,7 +1529,6 @@ issues.review.reject=pieprasīja izmaiņas %s
issues.review.wait=tika pieprasīta recenzija %s
issues.review.add_review_request=pieprasīja recenziju no %s %s
issues.review.remove_review_request=noņema recenzijas pieprasījumu no %s %s
-issues.review.remove_review_request_self=atteicās recenzēt %s
issues.review.pending=Nav iesūtīts
issues.review.pending.tooltip=Šis komentārs nav redzams citiem lietotājiem. Lai padarītu neiesūtītos komentārus pieejamus citiem, nospiediet "%s" -> "%s/%s/%s" lapas augšpusē.
issues.review.review=Recenzija
@@ -1613,7 +1545,6 @@ issues.review.resolve_conversation=Atrisināt sarunu
issues.review.un_resolve_conversation=Atcelt sarunas atrisinājumu
issues.review.resolved_by=atzīmēja sarunu kā atrisinātu
issues.review.commented=Komentēt
-issues.assignee.error=Ne visi atbildīgie tika pievienoti, jo radās neparedzēta kļūda.
issues.reference_issue.body=Saturs
issues.content_history.deleted=dzēsts
issues.content_history.edited=rediģēts
@@ -1648,7 +1579,6 @@ pulls.show_all_commits=Rādīt visas revīzijas
pulls.show_changes_since_your_last_review=Rādīt izmaiņas kopš Tavas pēdējās recenzijas
pulls.showing_only_single_commit=Rāda tikai revīzijas %[1]s izmaiņas
pulls.showing_specified_commit_range=Rāda tikai izmaiņas starp %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Atlasīt revīziju. Jātur Shift + klikšķis, lai atlasītu vairākas
pulls.review_only_possible_for_full_diff=Recenzēšana ir iespējama tikai tad, kad tiek apskatīts pilns salīdzinājums
pulls.filter_changes_by_commit=Atlasīt pēc revīzijas
pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi.
@@ -1697,30 +1627,20 @@ pulls.reject_count_1=%d izmaiņu pieprasījums
pulls.reject_count_n=%d pieprasītas izmaiņas
pulls.waiting_count_1=nepieciešama %d recenzija
pulls.waiting_count_n=nepieciešamas %d recenzijas
-pulls.wrong_commit_id=revīzijas identifikātoram ir jābūt revīzijas identifikatoram no mērķa atzara
pulls.no_merge_desc=Šo izmaiņu pieprasījumu nav iespējams sapludināt, jo nav atļauts neviens sapludināšanas veids.
pulls.no_merge_helper=Lai sapludinātu šo izmaiņu pieprasījumu, iespējojiet vismaz vienu sapludināšanas veidu repozitorija iestatījumos vai sapludiniet to manuāli.
pulls.no_merge_wip=Šo izmaiņu pieprasījumu nav iespējams sapludināt, jo tas ir atzīmēts, ka darbs pie tā vēl nav pabeigts.
-pulls.no_merge_not_ready=Izmaiņu pieprasījumu nav iespējams sapludināt, pārbaudiet recenziju statusu un statusa pārbaudes.
pulls.no_merge_access=Jums nav tiesību sapludināt šo izmaiņu pieprasījumu.
pulls.merge_pull_request=Izveidot sapludināšana revīziju
-pulls.rebase_merge_pull_request=Pārbāzēt un pārtīt uz priekšu
-pulls.rebase_merge_commit_pull_request=Pārbāzēt un izveidot sapludināšanas revīziju
pulls.squash_merge_pull_request=Izveidot saspiešanas revīziju
pulls.merge_manually=Manuāli sapludināts
pulls.merge_commit_id=Sapludināšanas revīzijas ID
pulls.require_signed_wont_sign=Atzarā var iesūtīt tikai parakstītas revīzijas, bet sapludināšanas revīzijas netiks parakstīta
pulls.invalid_merge_option=Nav iespējams izmantot šādu sapludināšanas veidu šim izmaiņu pieprasījumam.
-pulls.merge_conflict=Sapludināšana neizdevās: Veicot sapludināšanu, radās konflikts. Mēģiniet izmantot citu sapludināšanas stratēģiju
pulls.merge_conflict_summary=Kļūdas paziņojums
-pulls.rebase_conflict=Sapludināšana neizdevās: Veicot pārbāzēšanu uz revīziju %[1]s, radās konflikts. Mēģiniet izmantot citu sapludināšanas stratēģiju
pulls.rebase_conflict_summary=Kļūdas paziņojums
-pulls.unrelated_histories=Sapludināšana neizdevās: mērķa un bāzes atzariem nav kopējas vēstures. Ieteikums: izvēlieties citu sapludināšanas stratēģiju
-pulls.merge_out_of_date=Sapludināšana neizdevās: sapludināšanas laikā, bāzes atzarā tika iesūtītas izmaiņas. Ieteikums: mēģiniet atkārtoti.
-pulls.head_out_of_date=Sapludināšana neizdevās: sapludināšanas laikā, bāzes atzarā tika iesūtītas izmaiņas. Ieteikums: mēģiniet atkārtoti.
-pulls.has_merged=Neizdevās: izmaiņu pieprasījums jau ir sapludināts, nevar to darīt atkārtoti vai mainīt mērķa atzaru.
pulls.push_rejected_summary=Pilns noraidīšanas ziņojums
pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) ar šādu sapludināšanas informāciju.`
pulls.status_checking=Dažas pārbaudes vēl tiek veiktas
@@ -1745,7 +1665,6 @@ pulls.cmd_instruction_checkout_desc=Projekta repozitorijā jāizveido jauns atza
pulls.cmd_instruction_merge_title=Sapludināt
pulls.cmd_instruction_merge_desc=Sapludināt izmaiņas un atjaunot tās Gitea.
pulls.clear_merge_message=Notīrīt sapludināšanas ziņojumu
-pulls.clear_merge_message_hint=Notīrot sapludināšanas ziņojumu tiks noņemts tikai pats ziņojums, bet tiks paturēti ģenerētie git ziņojumu, kā "Co-Authored-By …".
pulls.auto_merge_button_when_succeed=(Kad pārbaudes veiksmīgas)
pulls.auto_merge_when_succeed=Automātiski sapludināt, kad visas pārbaudes veiksmīgas
@@ -1798,12 +1717,10 @@ milestones.filter_sort.most_issues=Visvairāk problēmu
milestones.filter_sort.least_issues=Vismazāk problēmu
signing.will_sign=Šī revīzija tiks parakstīta ar atslēgu "%s".
-signing.wont_sign.error=Notika kļūda pārbaudot vai revīzija var tikt parakstīta.
signing.wont_sign.nokey=Nav pieejamas atslēgas, ar ko parakstīt šo revīziju.
signing.wont_sign.never=Revīzijas nekad netiek parakstītas.
signing.wont_sign.always=Revīzijas vienmēr tiek parakstītas.
signing.wont_sign.pubkey=Revīzija netiks parakstīta, jo kontam nav piesaistīta publiskā atslēga.
-signing.wont_sign.twofa=Jābūt iespējotai divfaktoru autentifikācijai, lai parakstītu revīzijas.
signing.wont_sign.parentsigned=Revīzija netiks parakstīta, jo nav parakstīta vecāka revīzija.
signing.wont_sign.basesigned=Sapludināšanas revīzija netiks parakstīta, jo pamata revīzija nav parakstīta.
signing.wont_sign.headsigned=Sapludināšanas revīzija netiks parakstīta, jo galvenā revīzija nav parakstīta.
@@ -1885,7 +1802,6 @@ activity.title.releases_1=%d versiju
activity.title.releases_n=%d versijas
activity.title.releases_published_by=%s publicēja %s
activity.published_release_label=Publicēts
-activity.no_git_activity=Šajā laika periodā nav notikušas nekādas izmaiņas.
activity.git_stats_exclude_merges=Neskaitot sapludināšanas revīzijas,
activity.git_stats_author_1=%d autors
activity.git_stats_author_n=%d autori
@@ -1910,7 +1826,6 @@ activity.git_stats_deletion_n=%d dzēšanas
contributors.contribution_type.commits=Revīzijas
settings=Iestatījumi
-settings.desc=Iestatījumi ir vieta, kur varat pārvaldīt repozitorija iestatījumus
settings.options=Repozitorijs
settings.collaboration=Līdzstrādnieks
settings.collaboration.admin=Administrators
@@ -1927,7 +1842,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Iestatiet, ka vi
settings.mirror_settings.docs.disabled_push_mirror.instructions=Iestatiet, ka visas revīzijas, tagi un atzari tiks automātiski pārņemti no cita repozitorija.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Pašlaik to var izdarīt tikai, izmantojot, sadaļu "Jauna migrācija". Sīkākai informācijai, skatieties:
settings.mirror_settings.docs.disabled_push_mirror.info=Iesūtīšanas spoguļus administrators ir aizliedzis izmantot.
-settings.mirror_settings.docs.no_new_mirrors=Šis repozitorijs spoguļo izmaiņas uz vai no cita repozitorija. Pašlaik vairāk nav iespējams izveidot jaunus spoguļa repozitorijus.
settings.mirror_settings.docs.can_still_use=Lai arī nav iespējams mainīt esošos vai izveidot jaunus spoguļa repozitorijus, esošie turpinās strādāt.
settings.mirror_settings.docs.pull_mirror_instructions=Lai ietatītu atvilkšanas spoguli, sekojiet instrukcijām:
settings.mirror_settings.docs.more_information_if_disabled=Vairāk par piegādāšanas un saņemšanas spoguļiem var uzzināt šeit:
@@ -1995,7 +1909,6 @@ settings.admin_indexer_commit_sha=Pēdējā indeksētā revīzija
settings.admin_indexer_unindexed=Neindeksēts
settings.reindex_button=Pievienot pārindeksēšanas rindai
settings.reindex_requested=Pieprasīta pārindeksēšana
-settings.admin_enable_close_issues_via_commit_in_any_branch=Aizvērt problēmu ar izmaiņu komentāru iesūtītu jebkurā atzarā
settings.danger_zone=Bīstamā zona
settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu.
settings.convert=Konvertēt uz parastu repozitoriju
@@ -2016,7 +1929,6 @@ settings.transfer_abort_invalid=Nevar atcelt neeksistējoša repozitorija īpaš
settings.transfer_abort_success=Repozitorija īpašnieka maiņa uz %s tika veiksmīgi atcelta.
settings.transfer_desc=Mainīt šī repozitorija īpašnieku uz citu lietotāju vai organizāciju, kurai Jums ir administratora tiesības.
settings.transfer_form_title=Ievadiet repozitorija nosaukumu, lai apstiprinātu:
-settings.transfer_in_progress=Pašlaik jau tiek veikta repozitorija īpašnieka maiņa. Atceliet iepriekšējo īpašnieka maiņu, ja vēlaties mainīt uz citu.
settings.transfer_notices_1=- Tiks zaudēta piekļuve repozitorijam, ja jaunais īpašnieks ir individuāls lietotājs.
settings.transfer_notices_2=- Tiks saglabāta piekļuve, ja jaunais īpašnieks ir organizācija un esat viens no tās īpašniekiem.
settings.transfer_notices_3=- Ja repozitorijs ir privāts un tas tiks pārsūtīts lietotājam, tad pārliecināties, ka lietotājam ir vismaz skatīšanās tiesības (veiciet nepieciešamās izmaiņas, ja nepieciešams).
@@ -2030,13 +1942,9 @@ settings.trust_model.default=Noklusējuma uzticēšanās modelis
settings.trust_model.default.desc=Izmantot noklusēto repozitoriju uzticības modeli.
settings.trust_model.collaborator=Līdzstrādnieka
settings.trust_model.collaborator.long=Līdzstrādnieka: Uzticēties līdzstrādnieku parakstiem
-settings.trust_model.collaborator.desc=Derīgi līdzstrādnieku paraksti tiks atzīmēti kā "uzticami" (neatkarīgi no tā vai tie atbilst revīzijas iesūtītājam vai nē). Citos gadījumos derīgi paraksti tiks atzīmēti kā "neuzticami", ja paraksts atbilst revīzijas iesūtītājam vai "nesakrītošs", ja neatbilst.
settings.trust_model.committer=Revīzijas iesūtītāja
-settings.trust_model.committer.long=Revīzijas iesūtītāja: Uzticēties parakstiem, kas atbilst revīzijas iesūtītājiem (Šis atbilst GitHub uzvedībai un piespiedīs Gitea parakstītām revīzijām norādīt Gitea kā revīzijas iesūtītāju)
-settings.trust_model.committer.desc=Derīgi paraksti tiks atzīmēti kā "uzticami", ja tie atbilst revīzijas iesūtītājam, citos gadījumos tie tiks atzīmēti kā "nesakrītoši". Šis nozīmē, ka Gitea būs kā revīzijas iesūtītājs parakstītām revīzijām, kur īstais revīzijas iesūtītājs tiks atīzmēts revīzijas komentāra beigās ar tekstu Co-authored-by: un Co-committed-by:. Noklusētajai Gitea atslēgai ir jāatbilst lietotājam datubāzē.
settings.trust_model.collaboratorcommitter=Līdzstrādnieka un revīzijas iesūtītāja
settings.trust_model.collaboratorcommitter.long=Līdzstrādnieka un revīzijas iesūtītāja: Uzticēties līdzstrādnieku parakstiem, kas atbilst revīzijas iesūtītājam
-settings.trust_model.collaboratorcommitter.desc=Derīgi līdzstrādnieku paraksti tiks atzīmēti kā "uzticami", ja tie atbilst revīzijas iesūtītājam, citos gadījumos tie tiks atzīmēti kā "neuzticami", ja paraksts atbilst revīzijas iesūtītajam, vai "nesakrītoši", ja neatbilst. Šis nozīmē, ka Gitea būs kā revīzijas iesūtītājs parakstītām revīzijām, kur īstais revīzijas iesūtītājs tiks atīzmēts revīzijas komentāra beigās ar tekstu Co-Authored-By: un Co-Committed-By:. Noklusētajai Gitea atslēgai ir jāatbilst lietotājam datubāzē.
settings.wiki_delete=Dzēst vikivietnes datus
settings.wiki_delete_desc=Vikivietnes repozitorija dzēšana ir neatgriezeniska un nav atsaucama.
settings.wiki_delete_notices_1=- Šī darbība dzēsīs un atspējos repozitorija %s vikivietni.
@@ -2045,7 +1953,6 @@ settings.wiki_deletion_success=Repozitorija vikivietnes dati tika izdzēsti.
settings.delete=Dzēst šo repozitoriju
settings.delete_desc=Repozitorija dzēšana ir neatgriezeniska un nav atsaucama.
settings.delete_notices_1=- Šī darbība ir NEATGRIEZENISKA .
-settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visu repozitorijā %s , tai skaitā problēmas, komentārus, vikivietni un līdzstrādnieku piesaisti.
settings.delete_notices_fork_1=- Visi atdalītie repozitoriju pēc dzēšanas kļūs neatkarīgi.
settings.deletion_success=Repozitorijs tika izdzēsts.
settings.update_settings_success=Repozitorija iestatījumi tika saglabāti.
@@ -2066,8 +1973,6 @@ settings.team_not_in_organization=Komanda nav tajā pašā organizācijā kā re
settings.teams=Komandas
settings.add_team=Pievienot komandu
settings.add_team_duplicate=Komandai jau ir piekļuve šim repozitorijam
-settings.add_team_success=Komandai tagad ir piekļuve šim repozitorijam.
-settings.change_team_permission_tip=Komandas tiesības tiek uzstādītas komandas iestatījumu lapā un nevar tikt individuāli mainītas katram repozitorijam atsevišķi
settings.delete_team_tip=Komandai ir piekļuve visiem repozitorijiem un tā nevar tikt noņemta individuāli
settings.remove_team_success=Komandas piekļuve šim repozitorijam ir noņemta.
settings.add_webhook=Pievienot tīmekļa āķi
@@ -2076,8 +1981,6 @@ settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par notei
settings.webhook_deletion=Noņemt tīmekļa āķi
settings.webhook_deletion_desc=Noņemot tīmekļa āķi, tiks dzēsti visi tā iestatījumi un piegādes vēsture. Vai turpināt?
settings.webhook_deletion_success=Tīmekļa āķis tika noņemts.
-settings.webhook.test_delivery=Testa piegāde
-settings.webhook.test_delivery_desc=Veikt viltus push-notikuma piegādi, lai notestētu Jūsu tīmekļa āķa iestatījumus.
settings.webhook.test_delivery_desc_disabled=Lai pārbaudītu šo tīmekļa āķi ar neīstu notikumu, tas ir jāiespējo.
settings.webhook.request=Pieprasījums
settings.webhook.response=Atbilde
@@ -2123,7 +2026,6 @@ settings.event_repository=Repozitorijs
settings.event_repository_desc=Repozitorijs izveidots vai dzēsts.
settings.event_header_issue=Problēmu notikumi
settings.event_issues=Problēmas
-settings.event_issues_desc=Problēma atvērta, aizvērta, atkārtoti atvērta vai mainīta.
settings.event_issue_assign=Problēmas atbildīgie
settings.event_issue_assign_desc=Problēmai piešķirti vai noņemti atbildīgie.
settings.event_issue_label=Problēmu iezīmes
@@ -2134,7 +2036,6 @@ settings.event_issue_comment=Problēmas komentārs
settings.event_issue_comment_desc=Problēmas komentārs pievienots, labots vai dzēsts.
settings.event_header_pull_request=Izmaiņu pieprasījuma notikumi
settings.event_pull_request=Izmaiņu pieprasījums
-settings.event_pull_request_desc=Izmaiņu pieprasījums atvērts, aizvērts, atkārtoti atvērts vai mainīts.
settings.event_pull_request_assign=Izmaiņu pieprasījuma atbildīgie
settings.event_pull_request_assign_desc=Izmaiņu pieprasījumam piešķirti vai noņemti atbildīgie.
settings.event_pull_request_label=Izmaiņu pieprasījuma iezīmes
@@ -2267,7 +2168,6 @@ settings.archive.branchsettings_unavailable=Atzaru iestatījumi nav pieejami, ja
settings.archive.tagsettings_unavailable=Tagu iestatījumi nav pieejami, ja repozitorijs ir arhivēts.
settings.unarchive.button=Atcelt repozitorija arhivēšanu
settings.unarchive.header=Atcelt šī repozitorija arhivēšanu
-settings.unarchive.text=Repozitorija arhivēšanas atcelšana atjaunos tā spēju saņemt izmaiņas, kā arī jaunus problēmu pieteikumus un izmaiņu pieprasījumus.
settings.unarchive.success=Repozitorijam veiksmīgi atcelta arhivācija.
settings.unarchive.error=Repozitorija arhivēšanas atcelšanas laikā atgadījās kļūda. Vairāk ir redzams žurnālā.
settings.update_avatar_success=Repozitorija attēls tika atjaunināts.
@@ -2285,11 +2185,9 @@ settings.lfs_invalid_locking_path=Nekorekts ceļš: %s
settings.lfs_invalid_lock_directory=Nevar bloķēt direktoriju: %s
settings.lfs_lock_already_exists=Fails vai direktorija jau ir bloķēta: %s
settings.lfs_lock=Bloķēt
-settings.lfs_lock_path=Faila ceļš, ko bloķēt...
settings.lfs_locks_no_locks=Nav bloķēts neviens fails
settings.lfs_lock_file_no_exist=Bloķējamais fails neeksistē noklusētajā atzarā
settings.lfs_force_unlock=Piespiedu atbloķēšana
-settings.lfs_pointers.found=Atrasta(s) %d binārā objekta norāde(s) - %d saistītas, %d nesaistītas (%d trūkstošas glabātuvē)
settings.lfs_pointers.sha=Binārā objekta SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Repozitorijā
@@ -2460,7 +2358,6 @@ error.csv.unexpected=Nevar attēlot šo failu, jo tas satur neparedzētu simbolu
error.csv.invalid_field_count=Nevar attēlot šo failu, jo tas satur nepareizu skaitu ar laukiem %d. līnijā.
[graphs]
-component_loading=Ielādē %s...
component_loading_failed=Nevarēja ielādēt %s
component_loading_info=Šis var aizņemt kādu brīdi…
component_failed_to_load=Atgadījās neparedzēta kļūda.
@@ -2495,7 +2392,6 @@ form.create_org_not_allowed=Jums nav tiesību veidot jauno organizāciju.
settings=Iestatījumi
settings.options=Organizācija
settings.full_name=Pilns vārds, uzvārds
-settings.email=E-pasta adrese saziņai
settings.website=Mājas lapa
settings.location=Atrašanās vieta
settings.permission=Tiesības
@@ -2509,15 +2405,13 @@ settings.visibility.private_shortname=Privāta
settings.update_settings=Mainīt iestatījumus
settings.update_setting_success=Organizācijas iestatījumi tika saglabāti.
-settings.change_orgname_prompt=Piezīme: organizācijas nosaukuma maiņa izmainīs arī organizācijas URL un atbrīvos veco nosaukumu.
-settings.change_orgname_redirect_prompt=Vecais vārds pārsūtīs uz jauno, kamēr vien tas nebūs izmantots.
+
+
settings.update_avatar_success=Organizācijas attēls tika saglabāts.
settings.delete=Dzēst organizāciju
settings.delete_account=Dzēst šo organizāciju
settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir NEATGRIEZENISKA !
settings.confirm_delete_account=Apstiprināt dzēšanu
-settings.delete_org_title=Dzēst organizāciju
-settings.delete_org_desc=Organizācija tiks dzēsta neatgriezeniski. Vai turpināt?
settings.labels_desc=Pievienojiet iezīmes, kas var tikt izmantotas visos šīs organizācijas repozitorijos.
@@ -2571,7 +2465,6 @@ teams.remove_all_repos_title=Noņemt visus komandas repozitorijus
teams.remove_all_repos_desc=Šī darbība noņems visus repozitorijus no komandas.
teams.add_all_repos_title=Pievienot visus repozitorijus
teams.add_all_repos_desc=Šī darbība pievienos visus organizācijas repozitorijus šai komandai.
-teams.add_nonexistent_repo=Repozitorijs, kuru mēģinat pievienot neeksistē, sākumā izveidojiet to.
teams.add_duplicate_users=Lietotājs jau ir šajā komandā.
teams.repos.none=Šai komandai nav piekļuves nevienam repozitorijam.
teams.members.none=Šajā komandā nav pievienots neviens lietotājs.
@@ -2599,7 +2492,6 @@ repositories=Repozitoriji
hooks=Tīmekļa āķi
integrations=Integrācijas
authentication=Autentificēšanas avoti
-emails=Lietotāja e-pasts
config=Konfigurācija
config_summary=Kopsavilkums
config_settings=Iestatījumi
@@ -2629,27 +2521,17 @@ dashboard.cron.cancelled=Cron: %[1]s atcelts: %[3]s
dashboard.cron.error=Kļūda Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s pabeigts
dashboard.delete_inactive_accounts=Dzēst visus neaktivizētos kontus
-dashboard.delete_inactive_accounts.started=Uzdevums visu neaktivizēto kontu dzēšanai uzsākts.
dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus (ZIP, TAR.GZ utt.)
-dashboard.delete_repo_archives.started=Uzdevums visu repozitoriju arhīvu dzēšanai uzsākts.
dashboard.delete_missing_repos=Dzēst visus repozitorijus, kam trūkst Git failu
-dashboard.delete_missing_repos.started=Uzdevums visu repozitoriju dzēšanai, kam trūkst git failu, uzsākts.
dashboard.delete_generated_repository_avatars=Dzēst ģenerētos repozitoriju attēlus
dashboard.sync_repo_branches=Sinhronizācija ar dabubāzi izlaida atzarus no git datiem
dashboard.update_mirrors=Atjaunot spoguļus
dashboard.repo_health_check=Pārbaudīt visu repozitoriju veselību
dashboard.check_repo_stats=Pārbaudīt visu repozitoriju statistiku
dashboard.archive_cleanup=Dzēst repozitoriju vecos arhīvus
-dashboard.deleted_branches_cleanup=Notīrīt dzēstos atzarus
dashboard.update_migration_poster_id=Atjaunot migrācijām autoru ID
-dashboard.git_gc_repos=Veikt atkritumu uzkopšanas darbus visiem repozitorijiem
-dashboard.resync_all_sshkeys=Atjaunot '.ssh/authorized_keys' failu ar Gitea SSH atslēgām.
-dashboard.resync_all_sshprincipals=Atjaunot '.ssh/authorized_principals' failu ar Gitea SSH sertifikātu identitātēm.
-dashboard.resync_all_hooks=Pārsinhronizēt pirms-saņemšanas, atjaunošanas un pēc-saņemšanas āķus visiem repozitorijiem.
dashboard.reinit_missing_repos=Atkārtoti inicializēt visus pazaudētos Git repozitorijus par kuriem eksistē ieraksti
dashboard.sync_external_users=Sinhronizēt ārējo lietotāju datus
-dashboard.cleanup_hook_task_table=Iztīrīt tīmekļa āķu vēsturi
-dashboard.cleanup_packages=Notīrīt novecojušās pakotnes
dashboard.server_uptime=Servera darbības laiks
dashboard.current_goroutine=Izmantotās Gorutīnas
dashboard.current_memory_usage=Pašreiz izmantotā atmiņa
@@ -2681,7 +2563,6 @@ dashboard.last_gc_pause=Pedējās GC izpildes laiks
dashboard.gc_times=GC reizes
dashboard.update_checker=Atjauninājumu pārbaudītājs
dashboard.delete_old_system_notices=Dzēst vecos sistēmas paziņojumus no datubāzes
-dashboard.gc_lfs=Veikt atkritumu uzkopšanas darbus LFS meta objektiem
dashboard.rebuild_issue_indexer=Pārbūvēt problēmu indeksu
users.user_manage_panel=Lietotāju kontu pārvaldība
@@ -2698,7 +2579,6 @@ users.2fa=2FA
users.repos=Repozitoriji
users.created=Izveidots
users.last_login=Pēdējā pieteikšanās
-users.never_login=Pieteikšanās nekad nav veikta
users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu
users.new_success=Lietotāja konts "%s" tika izveidots.
users.edit=Labot
@@ -2725,7 +2605,6 @@ users.still_own_repo=Lietotājam pieder repozitoriji, tos sākumā ir nepiecieš
users.still_has_org=Šis lietotājs ir vienas vai vairāku organizāciju biedrs, lietotāju sākumā ir nepieciešams pamest šīs organizācijas vai viņu no tām ir jāizdzēš.
users.purge=Attīrīt lietotu
users.purge_help=Piespiedu dzēst lietotāju un visus tā repozitorijus, organizācijas un pakotnes. Arī visi lietotāja komentāri tiks dzēsti.
-users.still_own_packages=Šim lietotājam pieder viena vai vairākas pakotnes, tās nepieciešams izdzēst.
users.deletion_success=Lietotāja konts veiksmīgi izdzēsts.
users.reset_2fa=Noņemt 2FA
users.list_status_filter.menu_text=Filtrs
@@ -2745,11 +2624,7 @@ users.details=Lietotāja informācija
emails.email_manage_panel=Lietotāju e-pastu pārvaldība
emails.primary=Primārais
emails.activated=Aktivizēts
-emails.filter_sort.email=E-pasts
-emails.filter_sort.email_reverse=E-pasta adrese (pretēji alfabētiski)
emails.filter_sort.name=Lietotājvārds
-emails.filter_sort.name_reverse=Lietotāja vārds (pretēji alfabētiski)
-emails.updated=E-pasts atjaunots
emails.not_updated=Neizdevās atjaunot pieprasīto e-pasta adresi: %v
emails.duplicate_active=E-pasta adrese jau ir aktīva citam lietotājam.
emails.change_email_header=Atjaunot e-pasta rekvizītus
@@ -2865,26 +2740,18 @@ auths.oauth2_required_claim_name_helper=Uzstādiet šo nosaukumu, lai ierobežot
auths.oauth2_required_claim_value=Nepieciešamās prasības vērtība
auths.oauth2_required_claim_value_helper=Uzstādiet šo vērtību, lai ierobežotu, kas var autorizēties, izmantojot, šo avotu, ar norādīto prasības nosaukumu un vertību
auths.oauth2_group_claim_name=Prasības nosaukums, kas nodrošina grupu nosaukumus šim avotam. (Neobligāts)
-auths.oauth2_admin_group=Grupas prasības vērtība administratoriem. (Neobligāta - nepieciešams prasības nosaukums augstāk)
-auths.oauth2_restricted_group=Grupas prasības vērtība ierobežotajiem lietotājiem. (Neobligāta - nepieciešams prasības nosaukums augstāk)
-auths.oauth2_map_group_to_team=Sasaistīt prasības grupas ar organizācijas komandām. (Neobligāts - nepieciešams prasības nosaukums augstāk)
auths.oauth2_map_group_to_team_removal=Noņemt lietotājus no sinhronizētajām komandām, ja lietotājs nav piesaistīts attiecīgajai grupai.
auths.enable_auto_register=Iespējot automātisko reģistrāciju
auths.sspi_auto_create_users=Automātiski izveidot lietotājus
-auths.sspi_auto_create_users_helper=Ļauj SSPI autentifikācijas metodei automātiski izveidot jaunus kontus lietotājiem, kas autorizējas pirmo reizi
auths.sspi_auto_activate_users=Automātiski aktivizēt lietotājus
auths.sspi_auto_activate_users_helper=Ļauj SSPI autentifikācijas metodei automātiski aktivizēt jaunos lietotājus
auths.sspi_strip_domain_names=Noņemt domēna vārdus no lietotāju vārdiem
-auths.sspi_strip_domain_names_helper=Ja atzīmēts, domēna vārdi tiks noņemti no lietotāja vārdiem, piemēram, "DOMĒNS\lietotājs" un "lietotājs@domēns.lv" abi kļūs par tikai "lietotājs".
auths.sspi_separator_replacement=Atdalītājs, ko izmantot \, / vai @ vietā
-auths.sspi_separator_replacement_helper=Simbols, ko izmantot, kā atdalītāju, lai atdalītu lietotāja vārdu no domēna, piemēram "DOMĒNS\lietotājs", un lietotāja identitāšu nosaukumos, piemēram, lietotājs@domēns.lv.
auths.sspi_default_language=Noklusētā lietotāja valoda
-auths.sspi_default_language_helper=Noklusētā valoda, ko uzstādīt automātiski izveidotajiem lietotājiem, kas izmanto SSPI autentifikācijas veidu. Atstājiet tukšu, ja vēlaties, lai valoda tiktu noteikta automātiski.
auths.tips=Padomi
auths.tips.oauth2.general=OAuth2 autentifikācija
auths.tips.oauth2.general.tip=Kad tiek reģistrēta jauna OAuth2 autentifikācija, atzvanīšanas/pārvirzīšanas URL vajadzētu būt:
auths.tip.oauth2_provider=OAuth2 pakalpojuma sniedzējs
-auths.tip.nextcloud=`Reģistrējiet jaunu OAuth klientu jūsu instances sadāļā "Settings -> Security -> OAuth 2.0 client"`
auths.tip.mastodon=Norādiet pielāgotu mastodon instances URL, ar kuru vēlaties autorizēties (vai izmantojiet noklusēto)
auths.edit=Labot autentifikācijas avotu
auths.activated=Autentifikācijas avots ir atkivizēts
@@ -2984,7 +2851,6 @@ config.mailer_sendmail_path=Ceļš līdz sendmail programmai
config.mailer_sendmail_args=Papildus Sendmail komandrindas argumenti
config.mailer_sendmail_timeout=Sendmail noildze
config.mailer_use_dummy=Tukšs
-config.test_email_placeholder=E-pasts (piemēram, test@example.com)
config.send_test_mail=Nosūtīt pārbaudes e-pastu
config.send_test_mail_submit=Sūtīt
config.test_mail_failed=Neizdevās nosūtīt pārbaudes e-pastu uz "%s": %v
@@ -3064,7 +2930,6 @@ monitor.queue.numberinqueue=Skaits rindā
monitor.queue.review_add=Pārskatīt/pievienot strādņus
monitor.queue.settings.title=Pūla iestatījumi
monitor.queue.settings.desc=Pūls dinamiski tiek palielināts atkarībā no bloķētiem darbiem rindā.
-monitor.queue.settings.maxnumberworkers=Maksimālais strādņu skaits
monitor.queue.settings.maxnumberworkers.placeholder=Pašalaik %[1]d
monitor.queue.settings.maxnumberworkers.error=Maksimālajam strādņu skaitam ir jābūt skaitlim
monitor.queue.settings.submit=Saglabāt iestatījumus
@@ -3168,8 +3033,6 @@ error.no_committer_account=Revīzijas autora e-pasta adrese nav piesaistīta nev
error.no_gpg_keys_found=Šim parakstam datu bāzē netika atrasta zināma atslēga
error.not_signed_commit=Nav parakstīta revīzija
error.failed_retrieval_gpg_keys=Neizdevās saņemt nevienu atslēgu, kas ir piesaistīta revīzijas autora kontam
-error.probable_bad_signature=BRĪDINĀJUMS! Lai arī datu bāzē eksistē atslēga ar šādu identifikatoru, nav iespējams verificēt šo revīziju! Šī revīzija ir ļoti AIZDOMĪGA.
-error.probable_bad_default_signature=BRĪDINĀJUMS! Lai arī šai atslēgai ir noklusētās atslēgas identifikators, ar to nav iespējams verificēt šo revīziju! Šī revīzija ir ļoti AIZDOMĪGA.
[units]
unit=Vienība
@@ -3206,7 +3069,6 @@ versions=Versijas
versions.view_all=Parādīt visas
dependency.id=ID
dependency.version=Versija
-alpine.registry=Iestaties šo reģistru pievienojot tā URL /etc/apk/repositories failā:
alpine.registry.key=Lejupielādējiet reģistra publisko RSA atslēgu direktorijā /etc/apk/keys/, lai pārbaudītu indeksa parakstu:
alpine.registry.info=Izvēlieties $branch un $repository no saraksta zemāk.
alpine.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
@@ -3216,18 +3078,13 @@ alpine.repository.architectures=Arhitektūras
arch.repository=Repozitorija informācija
arch.repository.repositories=Repozitoriji
arch.repository.architectures=Arhitektūras
-cargo.registry=Uzstādiet šo reģistru Cargo konfigurācijas failā, piemēram, ~/.cargo/config.toml:
cargo.install=Lai instalētu Cargo pakotni, izpildiet sekojošu komandu:
-chef.registry=Uzstādiet šo reģistru failā ~/.chef/config.rb:
chef.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
-composer.registry=Pievienojiet šo reģistru savā ~/.composer/config.json failā:
composer.install=Lai instalētu Composer pakotni, izpildiet sekojošu komandu:
composer.dependencies=Atkarības
composer.dependencies.development=Izstrādes atkarības
conan.details.repository=Repozitorijs
-conan.registry=Konfigurējiet šo reģistru no komandrindas:
conan.install=Lai instalētu Conan pakotni, izpildiet sekojošu komandu:
-conda.registry=Uzstādiet šo reģistru kā Conda repozitoriju failā .condarc:
conda.install=Lai instalētu Conda pakotni, izpildiet sekojošu komandu:
container.details.type=Attēla formāts
container.details.platform=Platforma
@@ -3237,9 +3094,7 @@ container.layers=Attēla slāņi
container.labels=Iezīmes
container.labels.key=Atslēga
container.labels.value=Vērtība
-cran.registry=Iestaties šo reģistru savā Rprofile.site failā:
cran.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
-debian.registry=Konfigurējiet šo reģistru no komandrindas:
debian.registry.info=Izvēlieties $distribution un $component no saraksta zemāk.
debian.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
debian.repository=Repozitorija informācija
@@ -3248,16 +3103,11 @@ debian.repository.components=Komponentes
debian.repository.architectures=Arhitektūras
generic.download=Lejupielādēt pakotni, izmantojot, komandrindu:
go.install=Instalēt pakotni no komandrindas:
-helm.registry=Konfigurējiet šo reģistru no komandrindas:
helm.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu:
-maven.registry=Konfigurējiet šo reģistru sava projekta pom.xml failā:
-maven.install=Lai izmantotu pakotni, sadaļā dependencies failā pom.xml ievietojiet sekojošas rindas:
maven.install2=Izpildiet no komandrindas:
maven.download=Izpildiet no komandrindas, lai lejupielādētu šo atkarību:
-nuget.registry=Konfigurējiet šo reģistru no komandrindas:
nuget.install=Lai instalētu NuGet pakotni, izpildiet sekojošu komandu:
nuget.dependency.framework=Mērķa ietvars
-npm.registry=Konfigurējiet šo reģistru sava projekta .npmrc failā:
npm.install=Lai instalētu npm pakotni, izpildiet sekojošu komandu:
npm.install2=vai pievienojiet failā package.json sekojošas rindas:
npm.dependencies=Atkarības
@@ -3268,7 +3118,6 @@ npm.details.tag=Tags
pub.install=Lai instalētu Dart pakotni, izpildiet sekojošu komandu:
pypi.requires=Nepieciešams Python
pypi.install=Lai instalētu pip pakotni, izpildiet sekojošu komandu:
-rpm.registry=Konfigurējiet šo reģistru no komandrindas:
rpm.distros.redhat=uz RedHat balstītās operētājsistēmās
rpm.distros.suse=uz SUSE balstītās operētājsistēmās
rpm.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda:
@@ -3280,7 +3129,6 @@ rubygems.dependencies.runtime=Izpildlaika atkarības
rubygems.dependencies.development=Izstrādes atkarības
rubygems.required.ruby=Nepieciešamā Ruby versija
rubygems.required.rubygems=Nepieciešamā RubyGem versija
-swift.registry=Konfigurējiet šo reģistru no komandrindas:
swift.install=Pievienojiet pakotni savā Package.swift failā:
swift.install2=un izpildiet sekojošu komandu:
vagrant.install=Lai pievienotu Vagrant kasti, izpildiet sekojošu komandu:
@@ -3303,7 +3151,6 @@ owner.settings.cargo.initialize.success=Cargo indekss tika veiksmīgi inicializ
owner.settings.cargo.rebuild=Pārbūvēt indeksu
owner.settings.cargo.rebuild.description=Pārbūvēšana var būt noderīga, ja indekss nav sinhronizēts ar saglabātajām Cargo pakotnēm.
owner.settings.cargo.rebuild.error=Neizdevās pārbūvēt Cargo indeksu: %v
-owner.settings.cargo.rebuild.success=Cargo indekss tika veiksmīgi pārbūvēts.
owner.settings.cleanuprules.title=Pārvaldīt notīrīšanas noteikumus
owner.settings.cleanuprules.add=Pievienot notīrīšanas noteikumu
owner.settings.cleanuprules.edit=Labot notīrīšanas noteikumu
@@ -3386,7 +3233,6 @@ runners.delete_runner=Dzēst izpildītāju
runners.delete_runner_success=Izpildītājs veiksmīgi izdzēsts
runners.delete_runner_failed=Neizdevās izdzēst izpildītāju
runners.delete_runner_header=Apstiprināt izpildītāja izdzēšanu
-runners.delete_runner_notice=Ja šis izpildītājs veic kādus uzdevumus, tad tie tiks apturēti un atzīmēti kā neizdevušies. Tas var sabojāt būvēšanas darbaplūsmas.
runners.none=Nav pieejami izpildītāji
runners.status.unspecified=Nezināms
runners.status.idle=Dīkstāvē
diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini
index b6887ee9e0f..c04d843ae5b 100644
--- a/options/locale/locale_nl-NL.ini
+++ b/options/locale/locale_nl-NL.ini
@@ -40,7 +40,6 @@ webauthn_use_twofa=Gebruik een twee-factor code van uw telefoon
webauthn_error=Kon uw beveiligingssleutel niet lezen.
webauthn_unsupported_browser=Uw browser ondersteunt momenteel geen WebAuthn.
webauthn_error_unknown=Er is een onbekende fout opgetreden. Probeer het opnieuw.
-webauthn_error_insecure=WebAuthn ondersteunt alleen beveiligde verbindingen. Om te testen via HTTP, kan je de oorsprong "localhost" of "127.0.0.1" gebruiken
webauthn_error_unable_to_process=De server kon uw verzoek niet verwerken.
webauthn_error_duplicated=De beveiligingssleutel is niet toegestaan voor dit verzoek. Zorg er alstublieft voor dat de sleutel niet al geregistreerd is.
webauthn_error_empty=U moet een naam voor deze sleutel instellen.
@@ -165,16 +164,10 @@ path=Pad
sqlite_helper=Bestandspad voor de SQLite3-database. Vul een volledig pad in als je GItea als een service uitvoert.
reinstall_error=U probeert te installeren in een bestaande Gitea database
reinstall_confirm_message=Herinstalleren met een bestaande Gitea-database kan meerdere problemen veroorzaken. In de meeste gevallen kun je het bestaande "app.ini" gebruiken om Gitea te laten draaien. Als je weet wat je aan het doen bent, bevestig dan het volgende:
-reinstall_confirm_check_1=De gegevens versleuteld door de SECRET_KEY in de app.ini kan verloren gaan: gebruikers kunnen mogelijk niet meer inloggen met 2FA/OTP & spiegels werken mogelijk niet meer. Door dit vakje aan te vinken bevestigt u dat het huidige app.ini bestand de juiste SECRET_KEY bevat.
-reinstall_confirm_check_2=De repositories en instellingen moeten mogelijk opnieuw worden gesynchroniseerd. Door dit vakje aan te vinken, bevestigt u dat u de hooks voor de repositories en authorized_keys bestand handmatig zult hersynchroniseren. U bevestigt dat u ervoor zult zorgen dat de instellingen van de repository en mirror correct zijn.
reinstall_confirm_check_3=Je bevestigt dat je er absoluut zeker van bent dat deze Gitea draait met de juiste app. Geen locatie en dat je zeker weet dat je opnieuw moet installeren. Je bevestigt dat je de hierbovenstaande risico's erkent.
err_empty_db_path=SQLite3 database pad mag niet leeg zijn.
no_admin_and_disable_registration=U kunt zelf-registratie van de gebruiker niet uitschakelen zonder het maken van een administrator-account.
err_empty_admin_password=Het administrator-wachtwoord mag niet leeg zijn.
-err_empty_admin_email=Het e-mailadres van Het beheerder mag niet leeg zijn.
-err_admin_name_is_reserved=Gebruikersnaam van beheerder is ongeldig, gebruikersnaam is gereserveerd
-err_admin_name_pattern_not_allowed=Gebruikersnaam van beheerder is ongeldig, de gebruikersnaam is gereserveerd
-err_admin_name_is_invalid=Gebruikersnaam van beheerder is ongeldig
general_title=Algemene Instellingen
app_name=Naam site
@@ -189,7 +182,6 @@ domain_helper=Domein of hostadres voor de server.
ssh_port=SSH server-poort
ssh_port_helper=Nummer van de poort die uw SSH-server gebruikt. Laat dit veld leeg om de SSH functie uit te schakelen.
http_port=Gitea HTTP-poort
-http_port_helper=De poort waar de web server van Gitea naar gaat luisteren.
app_url=Gitea base URL
app_url_helper=Basisadres voor HTTP(S) kloon URL's en e-mailmeldingen.
log_root_path=Log-pad
@@ -297,7 +289,6 @@ allow_password_change=Verplicht de gebruiker om zijn/haar wachtwoord te wijzigen
reset_password_mail_sent_prompt=Een bevestigingsmail is verstuurd naar %s . Controleer uw inbox in de volgende %s om het herstel van uw account te voltooien.
active_your_account=Activeer uw account
account_activated=Account is geactiveerd
-prohibit_login=Inloggen niet toegestaan
resent_limit_prompt=Sorry, je hebt te snel na elkaar een aanvraag gedaan voor een activatiemail. Wacht drie minuten voor je volgende aanvraag.
has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (%s ). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop.
resend_mail=Klik hier om uw activatie mail nog een keer te verzenden
@@ -329,13 +320,10 @@ openid_connect_title=Verbind met een bestaand account
openid_connect_desc=De gekozen OpenID-URI is onbekend. Koppel het aan een nieuw account hier.
openid_register_title=Nieuw account aanmaken
openid_register_desc=De gekozen OpenID-URI is onbekend. Koppel het aan een nieuw account hier.
-disable_forgot_password_mail=Accountherstel is uitgeschakeld omdat er geen e-mailadres is ingesteld. Neem aub contact op met uw administrator.
-disable_forgot_password_mail_admin=Accountherstel is alleen beschikbaar wanneer een e-mailadres is ingesteld. Stel e-mailadres in om accountherstel te activeren.
email_domain_blacklisted=Je kan je niet registreren met dit e-mailadres.
authorize_application=Autoriseer applicatie
authorize_redirect_notice=U wordt doorgestuurd naar %s als u deze toepassing toestaat.
authorize_application_created_by=Deze applicatie is gemaakt door %s.
-authorize_application_description=Als u toegang verleent, zal de applicatie toegang hebben tot en kunnen schrijven naar al uw accountgegevens, met inbegrip van privérepo's en -organisaties.
authorize_title=Autoriseer "%s" voor toegang tot uw account?
authorization_failed=Autorisatie mislukt
sspi_auth_failed=SSPI-authenticatie mislukt
@@ -355,8 +343,6 @@ activate_email=Verifieer uw e-mailadres
activate_email.text=Klik op de volgende link om je e-mailadres te bevestigen in %s :
register_notify.title=%[1]s, welkom bij %[2]s
-register_notify.text_1=dit is uw registratie bevestigingsemail voor %s!
-register_notify.text_2=U kunt nu inloggen via de gebruikersnaam: %s.
register_notify.text_3=Als dit account voor u is aangemaakt, kunt u eerst uw wachtwoord instellen .
reset_password=Account herstellen
@@ -394,7 +380,6 @@ release.download.targz=Broncode (TAR.GZ)
repo.transfer.subject_to=%s zou "%s" willen overdragen aan %s
repo.transfer.subject_to_you=%s wil "%s" aan jou overdragen
repo.transfer.to_you=jij
-repo.transfer.body=Om het te accepteren of afwijzen, bezoek %s of negeer het gewoon.
repo.collaborator.added.subject=%s heeft jou toegevoegd aan %s
repo.collaborator.added.text=U bent toegevoegd als een medewerker van de repository:
@@ -449,11 +434,9 @@ username_change_not_local_user=Niet-lokale gebruikers mogen hun gebruikersnaam n
repo_name_been_taken=De repository-naam wordt al gebruikt.
repository_force_private=Forceer privé is ingeschakeld: privé repositories kunnen niet openbaar worden gemaakt.
repository_files_already_exist=Er bestaan al bestanden voor deze repository. Neem contact op met de systeembeheerder.
-repository_files_already_exist.adopt=Bestanden bestaan al voor deze repository en kunnen alleen worden geadopteerd.
repository_files_already_exist.delete=Er bestaan al bestanden voor deze repository. U moet deze verwijderen.
repository_files_already_exist.adopt_or_delete=Er bestaan al bestanden voor deze repository. Adopteer of verwijder deze.
visit_rate_limit=Bezoeklimiet op afstand gerichter.
-2fa_auth_required=Extern bezoek vereist twee-factor authenticatie.
org_name_been_taken=Naam van de organisatie wordt al gebruikt.
team_name_been_taken=De teamnaam is al in gebruik.
team_no_units_error=Toegang verlenen tot ten minste één repository sectie.
@@ -580,7 +563,6 @@ activate_email=Stuur activatie
activations_pending=Activaties in behandeling
delete_email=Verwijder
email_deletion=Verwijder e-mailadres
-email_deletion_desc=Het e-mailadres en verwante informatie worden verwijderd uit je account. Git commits van dit e-mailadres blijven ongewijzigd. Wil je doorgaan?
email_deletion_success=Het e-mailadres is verwijderd.
theme_update_success=Je thema is bijgewerkt.
theme_update_error=Het geselecteerde thema bestaat niet.
@@ -621,7 +603,6 @@ gpg_key_matched_identities_long=De ingesloten identiteiten in deze sleutel komen
gpg_key_verified=Geverifieerde sleutel
gpg_key_verified_long=Sleutel is geverifieerd met een token en kan worden gebruikt om commits te verifiëren die overeenkomen met alle geactiveerde e-mailadressen voor deze gebruiker naast de bijbehorende identiteiten voor deze sleutel.
gpg_key_verify=Verifiëren
-gpg_invalid_token_signature=De opgegeven GPG-sleutel, handtekening en token komen niet overeen of de token is verouderd.
gpg_token_required=U moet een handtekening opgeven voor de onderstaande token
gpg_token=Token
gpg_token_help=U kunt een handtekening genereren met:
@@ -630,7 +611,6 @@ key_signature_gpg_placeholder=Begint met '-----BEGIN PGP SIGNATURE-----'
ssh_key_verified=Geverifieerde sleutel
ssh_key_verified_long=Sleutel is geverifieerd met een token en kan worden gebruikt om commits te verifiëren die overeenkomen met alle geactiveerde e-mailadressen voor deze gebruiker.
ssh_key_verify=Verifiëren
-ssh_invalid_token_signature=De verstrekte SSH-sleutel, handtekening of token komen niet overeen of de token is verouderd.
ssh_token_required=U moet een handtekening opgeven voor het onderstaande token
ssh_token=Token
ssh_token_help=U kunt een handtekening genereren door het volgende:
@@ -647,7 +627,6 @@ gpg_key_deletion=Verwijder GPG-sleutel
ssh_principal_deletion=Verwijder de SSH-certificaat verantwoordelijke
ssh_key_deletion_desc=Als je een SSH-sleutel verwijdert, heb er geen toegang meer mee. Doorgaan?
gpg_key_deletion_desc=Als je een GPG-sleutel verwijdert, kunnen hiermee ondertekende commits niet meer geverifieerd worden. Doorgaan?
-ssh_principal_deletion_desc=Als je een SSH-certificaat verandtwoordelijke verwijdert, heeft deze geen toegang meer tot je account. Doorgaan?
ssh_key_deletion_success=De SSH-sleutel is verwijderd.
gpg_key_deletion_success=De GPG-sleutel is verwijderd.
ssh_principal_deletion_success=De verantwoordelijke is verwijderd.
@@ -701,12 +680,10 @@ oauth2_application_create_description=OAuth2 applicaties geven je derde partij a
authorized_oauth2_applications=Geautoriseerde OAuth2 applicaties
revoke_key=Intrekken
revoke_oauth2_grant=Toegang intrekken
-revoke_oauth2_grant_description=Het intrekken van toegang voor deze derde partij applicatie zal deze applicatie geen toegang tot uw gegevens geven. Weet u het zeker?
twofa_is_enrolled=Je account is momenteel ingeschreven voor two-factor authenticatie.
twofa_not_enrolled=Je account is momenteel niet ingeschreven voor two-factor authenticatie.
twofa_disable=Schakel tweetrapsauthenticatie uit
-twofa_enroll=Two-factor authenticatie inschakelen
twofa_disable_note=Je kan tweefactorauthenticatie indien nodig uitschakelen.
twofa_disable_desc=Het uitschakelen van tweefactorauthenticatie maakt je account minder veilig. Doorgaan?
twofa_disabled=Two-factor authenticatie is uitgeschakeld.
@@ -719,11 +696,9 @@ twofa_failed_get_secret=Kon geheim niet ophalen.
webauthn_register_key=Voeg beveiligingssleutel toe
webauthn_nickname=Bijnaam
webauthn_delete_key=Verwijder beveiligingssleutel
-webauthn_delete_key_desc=Als u een beveiligingssleutel verwijdert, kunt u er niet meer mee inloggen. Doorgaan?
manage_account_links=Gekoppelde accounts beheren
manage_account_links_desc=Deze externe accounts zijn gekoppeld aan je Gitea-account.
-account_links_not_available=Er zijn momenteel geen externe accounts aan je Gitea-account gelinkt.
link_account=Account koppelen
remove_account_link=Gekoppeld account verwijderen
remove_account_link_desc=Als je een gekoppeld account verwijdert, verliest dit account toegang tot je Gitea-account. Doorgaan?
@@ -806,7 +781,6 @@ mirror_address_desc=Voeg alle vereiste inloggegevens toe in de autorisatie secti
mirror_lfs=Grote bestandsopslag (LFS)
mirror_lfs_desc=Activeer spiegelen van LFS-gegevens.
mirror_lfs_endpoint=LFS Eindpunt
-mirror_lfs_endpoint_desc=Synchronisatie zal proberen de kloon-url te gebruiken om de LFS-server te bepalen. Je kan ook een aangepast eindpunt opgeven als de LFS-gegevens ergens anders zijn opgeslagen.
mirror_last_synced=Laatst gesynchroniseerd
mirror_password_placeholder=(Ongewijzigd)
mirror_password_blank_placeholder=(Niet ingesteld)
@@ -817,7 +791,6 @@ forks=Forks
reactions_more=en %d meer
unit_disabled=De sitebeheerder heeft deze repositorie sectie uitgeschakeld.
language_other=Andere
-adopt_search=Voer gebruikersnaam in om te zoeken naar niet-geadopteerde repositories... (laat leeg om alles te vinden)
adopt_preexisting_label=Bestanden adopteren
adopt_preexisting=Bestaamde bestanden adopteren
adopt_preexisting_content=Maak een repository van %s
@@ -874,17 +847,14 @@ migrate_items_releases=Releases
migrate_repo=Migreer repository
migrate.clone_address=Migreer / kloon van URL
migrate.clone_address_desc=De HTTP(s)- of 'git clone'-URL van een bestaande repository
-migrate.github_token_desc=Je kunt hier een of meerdere tokens met komma gescheiden plaatsen om sneller te migreren door de GitHub API limiet te beperken. WAARSCHUWING: Het misbruik van deze functie kan in strijd zijn met het beleid van de serviceprovider en leiden tot het blokkeren van rekeningen.
migrate.clone_local_path=of een lokaal pad
migrate.permission_denied=U bent niet gemachtigd om deze lokale repositories te importeren.
-migrate.permission_denied_blocked=Je kunt niet importeren uit niet-toegestane hosts, vraag de beheerder om de instellingen ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS te controleren.
migrate.invalid_lfs_endpoint=Het LFS-eindpunt is niet geldig.
migrate.failed=Migratie is mislukt: %v
migrate.migrate_items_options=Toegangstoken is vereist om extra items te migreren
migrated_from=Gemigreerd van %[2]s
migrated_from_fake=Gemigreerd van %[1]s
migrate.migrate=Migreer van %s
-migrate.migrating=Migreren van %s ...
migrate.migrating_failed=Migreren van %s is mislukt.
migrate.migrating_failed_no_addr=Migratie is mislukt.
migrate.github.description=Gegevens overzetten van github.com of andere GitHub instanties.
@@ -921,7 +891,6 @@ quick_guide=Snelstart gids
clone_this_repo=Kloon deze repository
create_new_repo_command=Maak een nieuwe repository aan vanaf de console
push_exist_repo=Push een bestaande repositorie vanaf de console
-empty_message=Deze repository bevat geen inhoud.
broken_message=De Git gegevens die ten grondslag liggen aan deze repository kunnen niet worden gelezen. Neem contact op met de beheerder van deze instantie of verwijder deze repository.
code=Code
@@ -938,7 +907,6 @@ pulls=Pull-aanvragen
projects=Projecten
packages=Paketten
labels=Labels
-org_labels_desc=Organisatielabel dat gebruikt kan worden met alle repositories onder deze organisatie
org_labels_desc_manage=beheren
milestone=Mijlpaal
@@ -1012,7 +980,6 @@ editor.file_changed_while_editing=De bestandsinhoud is veranderd sinds je bent b
editor.commit_empty_file_header=Commit een leeg bestand
editor.commit_empty_file_text=Het bestand dat u wilt committen is leeg. Doorgaan?
editor.no_changes_to_show=Er zijn geen wijzigingen om weer te geven.
-editor.fail_to_update_file_summary=Foutmelding:
editor.push_rejected_no_message=De wijziging is afgewezen door de server zonder bericht. Controleer de Git Hooks alsjeblieft.
editor.push_rejected=De wijziging is afgewezen door de server. Controleer Controleer de Git Hooks alsjeblieft.
editor.push_rejected_summary=Volledig afwijzingsbericht:
@@ -1023,6 +990,7 @@ editor.require_signed_commit=Branch vereist een ondertekende commit
editor.cherry_pick=Cherry-pick %s op:
editor.revert=%s ongedaan maken op:
+
commits.desc=Bekijk de broncode-wijzigingsgeschiedenis.
commits.commits=Commits
commits.nothing_to_compare=Deze branches zijn gelijk.
@@ -1150,7 +1118,6 @@ issues.filter_type.review_requested=Review aangevraagd
issues.filter_sort=Sorteer
issues.filter_sort.latest=Nieuwste
issues.filter_sort.oldest=Oudste
-issues.filter_sort.recentupdate=Recent bijgewerkt
issues.filter_sort.leastupdate=Minst recent bijgewerkt
issues.filter_sort.mostcomment=Meest besproken
issues.filter_sort.leastcomment=Minst besproken
@@ -1239,7 +1206,6 @@ issues.lock_no_reason=vergrendelde en beperkte conversatie voor medewerkers %s
issues.unlock_comment=ontgrendelde deze conversatie %s
issues.lock_confirm=Vergrendel
issues.unlock_confirm=Ontgrendelen
-issues.lock.notice_1=- Andere gebruikers kunnen geen nieuwe reacties toevoegen aan dit probleem.
issues.lock.notice_2=- U en andere medewerkers die toegang hebben tot deze repository kunnen nog steeds reacties achterlaten die anderen kunnen zien.
issues.lock.notice_3=- U kunt dit probleem in de toekomst altijd weer ontgrendelen.
issues.unlock.notice_1=- Iedereen zou nog eens commentaar op dit probleem kunnen geven.
@@ -1295,8 +1261,6 @@ issues.dependency.pr_closing_blockedby=Het sluiten van deze pull-aanvraag is geb
issues.dependency.issue_closing_blockedby=Het sluiten van dit issue is geblokkeerd door de volgende problemen
issues.dependency.issue_close_blocks=Deze kwestie blokkeert het sluiten van de volgende kwesties
issues.dependency.pr_close_blocks=Deze pull-aanvraag blokkeert het sluiten van de volgende kwesties
-issues.dependency.issue_close_blocked=Je moet alle kwesties die deze kwestie blokkeren sluiten voordat je deze kan sluiten.
-issues.dependency.pr_close_blocked=Je moet alle kwesties die deze pull-aanvraag blokkeren sluiten voordat je deze kan sluiten.
issues.dependency.blocks_short=Blokkeert
issues.dependency.blocked_by_short=Afhankelijk van
issues.dependency.remove_header=Verwijder afhankelijkheid
@@ -1307,12 +1271,10 @@ issues.dependency.add_error_same_issue=Je kan een kwestie niet afhankelijk maken
issues.dependency.add_error_dep_issue_not_exist=De afhankelijke kwestie bestaat niet.
issues.dependency.add_error_dep_not_exist=Afhankelijkheid bestaat niet.
issues.dependency.add_error_dep_exists=Afhankelijkheid bestaat al.
-issues.dependency.add_error_cannot_create_circular=Je kan geen afhankelijkheid maken waarbij twee kwesties elkaar blokkeren.
issues.dependency.add_error_dep_not_same_repo=Beide kwesties moeten in dezelfde repository zijn.
issues.review.self.approval=Je kan je eigen pull-aanvraag niet goedkeuren.
issues.review.self.rejection=Je kan geen wijzigingen aanvragen op je eigen pull-aanvraag.
issues.review.approve=heeft deze veranderingen %s goedgekeurd
-issues.review.dismissed=%s's beoordeling afgewezen %s
issues.review.dismissed_label=Afgewezen
issues.review.left_comment=heeft een reactie achtergelaten
issues.review.content.empty=Je moet een reactie achterlaten die de gewenste verandering(en) beschrijft.
@@ -1320,7 +1282,6 @@ issues.review.reject=aangevraagde wijzigingen %s
issues.review.wait=is gevraagd voor review %s
issues.review.add_review_request=heeft een review aangevraagd van %s %s
issues.review.remove_review_request=beoordelingsaanvraag voor %s %s verwijderd
-issues.review.remove_review_request_self=beoordeling geweigerd %s
issues.review.pending=In behandeling
issues.review.review=Review
issues.review.reviewers=Reviewers
@@ -1333,7 +1294,6 @@ issues.review.resolve_conversation=Gesprek oplossen
issues.review.un_resolve_conversation=Gesprek niet oplossen
issues.review.resolved_by=markeerde dit gesprek als opgelost
issues.review.commented=Opmerking
-issues.assignee.error=Niet alle aangewezen personen zijn toegevoegd vanwege een onverwachte fout.
issues.reference_issue.body=Inhoud
issues.content_history.deleted=verwijderd
issues.content_history.edited=bewerkt
@@ -1400,29 +1360,20 @@ pulls.reject_count_1=%d wijzigingsverzoek
pulls.reject_count_n=%d wijzigingsverzoeken
pulls.waiting_count_1=%d wachtende beoordeling
pulls.waiting_count_n=%d wachtende beoordelingen
-pulls.wrong_commit_id=commit id moet een commit id zijn op de doelbranch
pulls.no_merge_desc=Deze pull-aanvraag kan niet worden samengevoegd, omdat alle samenvoegingsopties zijn uitgeschakeld.
pulls.no_merge_helper=Schakel samenvoegingsopties in in de repositoryinstellingen of voeg de pull-aanvraag handmatig samen.
pulls.no_merge_wip=Deze pull-aanvraag kan niet worden samengevoegd omdat hij als "work in progress" is gemarkeerd.
-pulls.no_merge_not_ready=Deze pull-aanvraag is niet klaar om samen te voegen, controleer de status en status controles.
pulls.no_merge_access=Je bent niet gemachtigd om deze pull-aanvraag samen te voegen.
pulls.merge_pull_request=Maak samenvoeg-commit
-pulls.rebase_merge_pull_request=Herbaseren dan snel-voorwaarts
-pulls.rebase_merge_commit_pull_request=Herbaseren dan samenvoeg-commit maken
pulls.squash_merge_pull_request=Maak samenvoeg-commit
pulls.merge_manually=Handmatig samengevoegd
pulls.merge_commit_id=De merge commit ID
pulls.require_signed_wont_sign=De branch heeft ondertekende commits nodig, maar deze merge zal niet worden ondertekend
pulls.invalid_merge_option=Je kan de samenvoegingsoptie niet gebruiken voor deze pull-aanvraag.
-pulls.merge_conflict=Samenvoegen mislukt: Er was een conflict tijdens het samenvoegen. Hint: Probeer een andere strategie
pulls.merge_conflict_summary=Foutmelding
-pulls.rebase_conflict=Samenvoegen mislukt: Er was een conflict tijdens het rebasen van commit: %[1]s. Hint: Probeer een andere strategie
pulls.rebase_conflict_summary=Foutmelding
-pulls.unrelated_histories=Samenvoegen mislukt: de HEAD en base delen geen gemeenschappelijke geschiedenis. Tip: Probeer een andere strategie
-pulls.merge_out_of_date=Samenvoegen mislukt: Tijdens het samenvoegen is de basis bijgewerkt. Tip: Probeer het opnieuw.
-pulls.head_out_of_date=Samenvoegen mislukt: tijdens het genereren van de samenvoeging is de kop bijgewerkt. Tip: Probeer het opnieuw.
pulls.push_rejected_summary=Volledig afwijzingsbericht
pulls.open_unmerged_pull_exists=`Je kan deze pull-aanvraag niet opnieuw openen omdat er een andere (#%d) met identieke eigenschappen open staat.`
pulls.status_checking=Sommige controles zijn in behandeling
@@ -1550,7 +1501,6 @@ activity.title.releases_1=%d Release
activity.title.releases_n=%d Releases
activity.title.releases_published_by=%s gepubliceerd door %s
activity.published_release_label=Gepubliceerd
-activity.no_git_activity=Er is in deze periode geen sprake geweest van een commit activiteit.
activity.git_stats_exclude_merges=Exclusief merges,
activity.git_stats_author_1=%d auteur
activity.git_stats_author_n=%d auteurs
@@ -1575,7 +1525,6 @@ activity.git_stats_deletion_n=%d verwijderingen
contributors.contribution_type.commits=Commits
settings=Instellingen
-settings.desc=In de instellingen kan je de instellingen van de repository aanpassen
settings.options=Repository
settings.collaboration=Medewerkers
settings.collaboration.admin=Beheerder
@@ -1626,7 +1575,6 @@ settings.pulls_desc=Repository-pull-aanvragen inschakelen
settings.pulls.ignore_whitespace=Witruimte negeren voor conflicten
settings.trust_model.collaborator.long=Medewerker: Vertrouw handtekeningen door medewerkers
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: Vertrouw handtekeningen die overeenkomen met committers (Dit komt overeen met GitHub en zal Gitea ondertekende commits dwingen om Gitea als de committer te hebben)
settings.trust_model.collaboratorcommitter=Medewerker+Committer
settings.trust_model.collaboratorcommitter.long=Medewerker+Committer: Vertrouw handtekeningen door medewerkers die overeenkomen met de committer
settings.wiki_delete=Wiki-gegevens verwijderen
@@ -1637,7 +1585,6 @@ settings.wiki_deletion_success=De repository wiki gegevens zijn verwijderd.
settings.delete=Verwijder deze repository
settings.delete_desc=Het verwijderen van een repository is permanent en kan niet ongedaan worden gemaakt.
settings.delete_notices_1=- Deze bewerking kan NIET ongedaan gemaakt worden.
-settings.delete_notices_2=- Deze bewerking zal permanent de %s repository verwijderen, inclusief code, issues, opmerkingen, wikigegevens en instellingen voor medewerkers.
settings.delete_notices_fork_1=- Forks van deze repository zullen onafhankelijk worden na verwijdering.
settings.deletion_success=De repository is verwijderd.
settings.update_settings_success=De repository-instellingen zijn bijgewerkt.
@@ -1656,8 +1603,6 @@ settings.team_not_in_organization=Het team zit niet in dezelfde organisatie als
settings.teams=Teams
settings.add_team=Team toevoegen
settings.add_team_duplicate=Team heeft al de repository
-settings.add_team_success=Het team heeft nu toegang tot de repository.
-settings.change_team_permission_tip=Teammachtiging is ingesteld op de team-instellingspagina en kan niet per repository worden gewijzigd
settings.delete_team_tip=Dit team heeft toegang tot alle repositories en kan niet verwijderd worden
settings.remove_team_success=De toegang van het team tot de repository is verwijderd.
settings.add_webhook=Webhook toevoegen
@@ -1666,8 +1611,6 @@ settings.hooks_desc=Webhooks maken automatisch een HTTP POST verzoek naar een se
settings.webhook_deletion=Verwijder webhook
settings.webhook_deletion_desc=Verwijderen van een webhook verwijdert de instellingen en de geschiedenis van afleveringen. Doorgaan?
settings.webhook_deletion_success=Webhook is verwijderd.
-settings.webhook.test_delivery=Test-bezorging
-settings.webhook.test_delivery_desc=Test deze webhook met een nep-gebeurtenis.
settings.webhook.request=Verzoek
settings.webhook.response=Antwoord
settings.webhook.headers=Headers
@@ -1707,7 +1650,6 @@ settings.event_repository=Repository
settings.event_repository_desc=Repository gemaakt of verwijderd.
settings.event_header_issue=Issue gebeurtenissen
settings.event_issues=Kwesties
-settings.event_issues_desc=Issue geopend, gesloten, heropend of bewerkt.
settings.event_issue_assign=Probleem toegekend
settings.event_issue_assign_desc=Issue toegewezen of niet-toegewezen.
settings.event_issue_label=Issue gelabeld
@@ -1718,7 +1660,6 @@ settings.event_issue_comment=Issue commentaar
settings.event_issue_comment_desc=Issue reactie aangemaakt, bewerkt of verwijderd.
settings.event_header_pull_request=Pull Request Events
settings.event_pull_request=Pull request
-settings.event_pull_request_desc=Pull request geopend, gesloten, heropend of bewerkt.
settings.event_pull_request_assign=Pull request toegewezen
settings.event_pull_request_assign_desc=Pull request toegewezen of niet-toegewezen.
settings.event_pull_request_label=Pull-aanvraag gelabeld
@@ -1834,11 +1775,9 @@ settings.lfs_invalid_locking_path=Ongeldig pad: %s
settings.lfs_invalid_lock_directory=Kan map %s niet vergrendelen
settings.lfs_lock_already_exists=Vergrendeling bestaat al: %s
settings.lfs_lock=Vergrendel
-settings.lfs_lock_path=Bestandspad om te vergrendelen...
settings.lfs_locks_no_locks=Geen Locks
settings.lfs_lock_file_no_exist=Vergrendeld bestand bestaat niet in de standaard branch
settings.lfs_force_unlock=Forceer ontgrendelen
-settings.lfs_pointers.found=%d blob-pointer(s) gevonden - %d gekoppeld, %d niet-gekoppeld (%d ontbreekt in de winkel)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=In Repo
@@ -1989,13 +1928,13 @@ settings.visibility.private=Privé (alleen zichtbaar voor organisatieleden)
settings.visibility.private_shortname=Privé
settings.update_settings=Instellingen bijwerken
+
+
settings.update_avatar_success=De avatar van de organisatie is aangepast.
settings.delete=Verwijder organisatie
settings.delete_account=Verwijder deze organisatie
settings.delete_prompt=Deze organisatie zal permanent worden verwijderd. U kunt dit NIET ongedaan maken!
settings.confirm_delete_account=Bevestig verwijdering
-settings.delete_org_title=Verwijder organisatie
-settings.delete_org_desc=Deze organisatie zal permanent verwijderd worden. Doorgaan?
settings.hooks_desc=Een webhook toevoegen die door alle repositories in deze organisatie getriggerd kan worden.
settings.labels_desc=Voeg labels toe die kunnen worden gebruikt bij problemen voor alle repositories in deze organisatie.
@@ -2058,7 +1997,6 @@ users=Gebruikersacount
organizations=Organisaties
repositories=Repositories
authentication=Authenticatie bronnen
-emails=Gebruikeremails
config=Configuratie
config_summary=Overzicht
config_settings=Instellingen
@@ -2085,21 +2023,13 @@ dashboard.cron.process=Cron: %[1]s
dashboard.cron.error=Fout in cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s is klaar
dashboard.delete_inactive_accounts=Verwijder alle niet geactiveerde accounts
-dashboard.delete_inactive_accounts.started=Verwijder alle niet geactiveerde accounts taak gestart.
-dashboard.delete_repo_archives.started=Verwijder alle repositoryarchieven taak gestart.
dashboard.delete_missing_repos=Verwijder alle repositories waarvan hun Git bestanden missen
-dashboard.delete_missing_repos.started=Verwijder alle repositories die hun Git bestanden missen taak gestart.
dashboard.delete_generated_repository_avatars=Verwijder gegenereerde repository avatars
dashboard.update_mirrors=Mirrors bijwerken
dashboard.repo_health_check=Controleer alle repositories
dashboard.check_repo_stats=Bekijk alle repository statistieken
dashboard.archive_cleanup=Verwijder oude repositories archieven
-dashboard.deleted_branches_cleanup=Verwijderde branches opschonen
dashboard.update_migration_poster_id=Werk migratie-poster IDs bij
-dashboard.git_gc_repos=Voer garbage collectie uit voor alle repositories
-dashboard.resync_all_sshkeys=Werk de '.ssh/authorized_keys' bestand bij met Gitea SSH sleutels.
-dashboard.resync_all_sshprincipals=Update het '.ssh/authorized_principals' bestand met Gitea SSH verantwoordelijken.
-dashboard.resync_all_hooks=Opnieuw synchroniseren van pre-ontvangst, bewerk en post-ontvangst hooks voor alle repositories.
dashboard.reinit_missing_repos=Herinitialiseer alle ontbrekende Git repositories waarvoor records bestaan
dashboard.sync_external_users=Externe gebruikersgegevens synchroniseren
dashboard.server_uptime=Uptime server
@@ -2144,7 +2074,6 @@ users.2fa=2FA
users.repos=Repos
users.created=Aangemaakt
users.last_login=Laatste keer ingelogd
-users.never_login=Nooit ingelogd
users.send_register_notify=Stuur gebruikersregistratie notificatie
users.edit=Bewerken
users.auth_source=Authenticatiebron
@@ -2177,11 +2106,7 @@ users.list_status_filter.is_restricted=Beperkt
emails.email_manage_panel=Gebruikers e-mail beheer
emails.primary=Primair
emails.activated=Geactiveerd
-emails.filter_sort.email=E-mail
-emails.filter_sort.email_reverse=E-mail (omgekeerd)
emails.filter_sort.name=Gebruikersnaam
-emails.filter_sort.name_reverse=Gebruikersnaam (omgekeerd)
-emails.updated=E-mailadres bijgewerkt
emails.not_updated=Bijwerken van het gevraagde e-mailadres is mislukt: %v
emails.duplicate_active=Dit e-mailadres is al actief voor een andere gebruiker.
emails.change_email_header=Update E-mail Eigenschappen
@@ -2263,18 +2188,14 @@ auths.oauth2_profileURL=Profiel URL
auths.oauth2_emailURL=E-mail URL
auths.enable_auto_register=Activeer automatische registratie
auths.sspi_auto_create_users=Automatisch gebruikers maken
-auths.sspi_auto_create_users_helper=Toestaan dat de SSPI authenticatiemethode automatisch nieuwe accounts aanmaakt voor gebruikers die voor de eerste keer inloggen
auths.sspi_auto_activate_users=Gebruikers automatisch activeren
auths.sspi_auto_activate_users_helper=SSPI authenticatie methode toestaan om automatisch nieuwe gebruikers te activeren
auths.sspi_strip_domain_names=Verwijder domeinnamen uit gebruikersnamen
auths.sspi_separator_replacement=Scheidingsteken voor gebruik in plaats van \, / en @
-auths.sspi_separator_replacement_helper=Het karakter dat moet worden gebruikt om de scheidingstekens van namen op downniveau logon te vervangen (bijv. de \ in "DOMAIN\user") en gebruikersverantwoordelijken (bijv. de @ in "user@example.org").
auths.sspi_default_language=Standaard gebruikerstaal
-auths.sspi_default_language_helper=Standaardtaal voor gebruikers wordt automatisch gemaakt met SSPI authenticatiemethode. Laat leeg als u de taal automatisch wilt detecteren.
auths.tips=Tips
auths.tips.oauth2.general=OAuth2 authenticatie
auths.tip.oauth2_provider=OAuth2 Provider
-auths.tip.nextcloud=`Registreer een nieuwe OAuth consument op je installatie met behulp van het volgende menu "Instellingen -> Security -> OAuth 2.0 client"`
auths.edit=Authenticatiebron bewerken
auths.activated=Deze authenticatiebron is geactiveerd
auths.update_success=De authenticatie-bron is bijgewerkt.
@@ -2359,7 +2280,6 @@ config.mailer_sendmail_path=Sendmail pad
config.mailer_sendmail_args=Extra argumenten voor Sendmail
config.mailer_sendmail_timeout=Sendmail time-out
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=E-mailadres (bijv. test@example.com)
config.send_test_mail=Test e-mail verzenden
config.oauth_config=OAuth-configuratie
@@ -2424,7 +2344,6 @@ monitor.queue.exemplar=Type voorbeeld
monitor.queue.numberworkers=Aantal workers
monitor.queue.maxnumberworkers=Maximum aantal workers
monitor.queue.settings.title=Pool instellingen
-monitor.queue.settings.maxnumberworkers=Maximum aantal workers
monitor.queue.settings.maxnumberworkers.placeholder=Momenteel %[1]d
monitor.queue.settings.maxnumberworkers.error=Maximaal aantal workers moet een nummer zijn
monitor.queue.settings.submit=Instellingen bijwerken
@@ -2497,7 +2416,6 @@ error.generate_hash=Genereren van commit hash mislukt
error.no_committer_account=Geen account gekoppeld aan het e-mailadres van de committer
error.no_gpg_keys_found=Geen bekende sleutel gevonden voor deze handtekening in de database
error.not_signed_commit=Geen ondertekende commit
-error.probable_bad_default_signature=WAARSCHUWING! Hoewel de standaard sleutel dit ID heeft, is deze commit niet geverifieerd! Deze commit is VERDACHT.
[units]
error.no_unit_allowed_repo=U heeft geen toegang tot een enkele sectie van deze repository.
diff --git a/options/locale/locale_pl-PL.ini b/options/locale/locale_pl-PL.ini
index 42a33f9ce4f..a6f1143236d 100644
--- a/options/locale/locale_pl-PL.ini
+++ b/options/locale/locale_pl-PL.ini
@@ -39,7 +39,6 @@ webauthn_use_twofa=Użyj kodu uwierzytelniania dwuskładnikowego ze swojego tele
webauthn_error=Nie można odczytać Twojego klucza bezpieczeństwa.
webauthn_unsupported_browser=Twoja przeglądarka nie obsługuje obecnie WebAuthn.
webauthn_error_unknown=Wystąpił nieznany błąd. Spróbuj ponownie.
-webauthn_error_insecure=`WebAuthn obsługuje tylko bezpieczne połączenia. Do testowania przez HTTP można użyć "localhost" lub "127.0.0.1"`
webauthn_error_unable_to_process=Serwer nie mógł obsłużyć Twojego żądania.
webauthn_error_duplicated=Klucz bezpieczeństwa nie jest dozwolony dla tego żądania. Upewnij się, że klucz nie jest już zarejestrowany.
webauthn_error_empty=Musisz ustawić nazwę dla tego klucza.
@@ -161,16 +160,10 @@ path=Ścieżka
sqlite_helper=Ścieżka pliku dla bazy danych SQLite3. Wpisz ścieżkę bezwzględną, jeśli Gitea jest uruchomiona jako usługa.
reinstall_error=Próbujesz zainstalować w istniejącej już bazie danych Gitea
reinstall_confirm_message=Ponowna instalacja z istniejącą bazą danych Gitea może powodować wiele problemów. W większości przypadków powinieneś użyć swojego istniejącego "app.ini" do uruchomienia Gitea. Jeśli wiesz, co robisz, potwierdź następujące działania:
-reinstall_confirm_check_1=Dane zaszyfrowane przez SECRET_KEY w app.ini mogą zostać utracone: użytkownicy mogą nie być w stanie zalogować się za pomocą 2FA/OTP, a serwery lustrzane mogą nie działać poprawnie. Zaznaczając to pole potwierdzasz, że aktualny plik app.ini zawiera poprawny klucz SECRET_KEY.
-reinstall_confirm_check_2=Repozytoria i ustawienia mogą wymagać ponownej synchronizacji. Zaznaczając to pole, potwierdzasz ponowną synchronizację hooks dla pliku repozytoriów i authorized_keys ręcznie. Potwierdzasz, że upewnisz się, że ustawienia repozytorium i kopii lustrzanej są poprawne.
reinstall_confirm_check_3=Potwierdzasz, że jesteś całkowicie pewien, że ta Gitea działa z app.ini w poprawnej lokalizacji i że jesteś pewien, że musisz ponownie zainstalować. Potwierdzasz powyższe ryzyko.
err_empty_db_path=Ścieżka do bazy danych SQLite3 nie może być pusta.
no_admin_and_disable_registration=Nie możesz wyłączyć możliwości samodzielnej rejestracji kont użytkowników bez stworzenia konta administratora.
err_empty_admin_password=Hasło administratora nie może być puste.
-err_empty_admin_email=Pole adresu e-mail administratora nie może być puste.
-err_admin_name_is_reserved=Nazwa użytkownika administratora jest nieprawidłowa, pseudonim jest zastrzeżony
-err_admin_name_pattern_not_allowed=Nazwa użytkownika administratora jest nieprawidłowa, pseudonim zawiera zastrzeżone znaki
-err_admin_name_is_invalid=Nazwa użytkownika administratora jest nieprawidłowa
general_title=Ustawienia ogólne
app_name=Tytuł witryny
@@ -185,7 +178,6 @@ domain_helper=Adres domeny lub hosta serwera.
ssh_port=Port serwera SSH
ssh_port_helper=Numer portu, na którym nasłuchuje Twój serwer SSH. Pozostaw puste, aby wyłączyć.
http_port=Port nasłuchiwania HTTP Gitea
-http_port_helper=Numer portu nasłuchiwania serwera Gitea.
app_url=Podstawowy adres URL Gitea
app_url_helper=Podstawowy adres dla klonowania adresów URL HTTP(S) oraz powiadomień e-mail.
log_root_path=Ścieżka dla logów
@@ -292,7 +284,6 @@ allow_password_change=Użytkownik musi zmienić hasło (zalecane)
reset_password_mail_sent_prompt=E-mail potwierdzający został wysłany na adres %s . Sprawdź swoją skrzynkę odbiorczą w przeciągu %s, aby ukończyć proces odzyskiwania konta.
active_your_account=Aktywuj swoje konto
account_activated=Konto zostało aktywowane
-prohibit_login=Logowanie zabronione
resent_limit_prompt=Zażądano już wiadomości aktywacyjnej. Zaczekaj 3 minuty i spróbuj ponownie.
has_unconfirmed_mail=Witaj, %s, masz niepotwierdzony adres e-mail (%s ). Jeśli nie otrzymałeś wiadomości e-mail z potwierdzeniem lub potrzebujesz wysłać nową, kliknij na poniższy przycisk.
resend_mail=Kliknij tutaj, aby wysłać e-mail aktywacyjny
@@ -322,13 +313,10 @@ openid_connect_title=Połącz z istniejącym kontem
openid_connect_desc=Wybrany URI OpenID jest nieznany. Powiąż go z nowym kontem w tym miejscu.
openid_register_title=Stwórz nowe konto
openid_register_desc=Wybrany URI OpenID jest nieznany. Powiąż go z nowym kontem w tym miejscu.
-disable_forgot_password_mail=Odzyskiwanie konta jest wyłączone, ponieważ e-mail nie jest skonfigurowany. Skontaktuj się z administratorem strony.
-disable_forgot_password_mail_admin=Odzyskiwanie konta jest dostępne tylko wtedy, gdy adres e-mail jest skonfigurowany. Proszę skonfigurować adres e-mail, aby włączyć odzyskiwanie konta.
email_domain_blacklisted=Nie możesz zarejestrować się za pomocą tego adresu e-mail.
authorize_application=Autoryzuj aplikację
authorize_redirect_notice=Zostaniesz przekierowany(-a) do %s, jeśli autoryzujesz tę aplikację.
authorize_application_created_by=Ta aplikacja została stworzona przez %s.
-authorize_application_description=Jeżeli udzielisz dostępu, aplikacja uzyska dostęp z zapisem do wszystkich informacji o Twoim koncie, wraz z prywatnymi repozytoriami i organizacjami.
authorize_title=Zezwolić "%s" na dostęp do Twojego konta?
authorization_failed=Autoryzacja nie powiodła się
sspi_auth_failed=Uwierzytelnianie SSPI nie powiodło się
@@ -348,8 +336,6 @@ activate_email=Potwierdź swój adres e-mail
activate_email.text=Aby zweryfikować swój adres e-mail, w ciągu następnych %s kliknij poniższy link:
register_notify.title=%[1]s, witaj w %[2]s
-register_notify.text_1=to jest Twój e-mail z potwierdzeniem rejestracji dla %s!
-register_notify.text_2=Możesz teraz zalogować się za pomocą nazwy użytkownika: %s.
register_notify.text_3=Jeśli to konto zostało utworzone dla Ciebie, ustaw swoje hasło .
reset_password=Odzyskaj swoje konto
@@ -381,7 +367,6 @@ release.download.targz=Kod źródłowy (TAR.GZ)
repo.transfer.subject_to=%s chciałby przenieść "%s" do %s
repo.transfer.subject_to_you=%s chciałby przenieść "%s" do ciebie
repo.transfer.to_you=ciebie
-repo.transfer.body=Aby zaakceptować lub odrzucić go, odwiedź %s lub po prostu go zignoruj.
repo.collaborator.added.subject=%s dodał Cię do %s
repo.collaborator.added.text=Zostałeś dodany jako współtwórca repozytorium:
@@ -435,11 +420,9 @@ username_been_taken=Ta nazwa użytkownika jest już zajęta.
username_change_not_local_user=Użytkownicy nielokalni nie mogą zmieniać swojej nazwy użytkownika.
repo_name_been_taken=Nazwa repozytorium jest już zajęta.
repository_files_already_exist=Pliki już istnieją dla tego repozytorium. Skontaktuj się z administratorem systemu.
-repository_files_already_exist.adopt=Już istnieją pliki dla tego repozytorium i mogą być tylko przyjęte.
repository_files_already_exist.delete=Pliki już istnieją dla tego repozytorium. Musisz je usunąć.
repository_files_already_exist.adopt_or_delete=Pliki już istnieją dla tego repozytorium. Przyjmij, lub usuń je.
visit_rate_limit=Zdalny punkt końcowy przesłał informację o ograniczeniu ilości żądań.
-2fa_auth_required=Zdalny punkt końcowy zażądał weryfikacji dwuskładnikowej.
org_name_been_taken=Nazwa organizacji jest już zajęta.
team_name_been_taken=Nazwa zespołu jest już zajęta.
team_no_units_error=Zezwól na dostęp do co najmniej jednej sekcji repozytorium.
@@ -547,7 +530,6 @@ activate_email=Wyślij aktywację
activations_pending=Aktywacje oczekujące
delete_email=Usuń
email_deletion=Usuń adres email
-email_deletion_desc=Adres e-mail i powiązane informacje zostaną usunięte z Twojego konta. Commity za pomocą tego adresu e-mail pozostaną niezmienione. Kontynuować?
email_deletion_success=Adres e-mail został usunięty.
theme_update_success=Twój motyw został zaktualizowany.
theme_update_error=Wybrany motyw nie istnieje.
@@ -584,7 +566,6 @@ gpg_key_matched_identities_long=Osadzone tożsamości w tym kluczu pasują do na
gpg_key_verified=Zweryfikowany klucz
gpg_key_verified_long=Klucz został zweryfikowany tokenem i może być użyty do weryfikacji commitów pasujących do wszystkich aktywowanych adresów e-mail dla tego użytkownika oprócz wszelkich dopasowanych tożsamości dla tego klucza.
gpg_key_verify=Potwierdź
-gpg_invalid_token_signature=Podany klucz GPG, podpis i token nie pasują lub token jest nieaktualny.
gpg_token_required=Musisz podać podpis poniższego tokenu
gpg_token=Token
gpg_token_help=Możesz wygenerować podpis za pomocą:
@@ -609,7 +590,6 @@ gpg_key_deletion=Usuń klucz GPG
ssh_principal_deletion=Usuń główny certyfikat SSH
ssh_key_deletion_desc=Usunięcie klucza SSH unieważni jego dostęp do Twojego konta. Kontynuować?
gpg_key_deletion_desc=Usunięcie klucza GPG usunie weryfikację z commitów podpisanych przez niego. Kontynuować?
-ssh_principal_deletion_desc=Usunięcie klucza SSH unieważni jego dostęp do Twojego konta. Chcesz kontynuować?
ssh_key_deletion_success=Klucz SSH został usunięty.
gpg_key_deletion_success=Klucz GPG został usunięty.
ssh_principal_deletion_success=Klucz SSH został usunięty.
@@ -661,12 +641,10 @@ oauth2_application_create_description=Aplikacje OAuth2 umożliwiają Twojej apli
authorized_oauth2_applications=Autoryzowane aplikacje OAuth2
revoke_key=Odwołaj
revoke_oauth2_grant=Odwołaj dostęp
-revoke_oauth2_grant_description=Odwołanie dostępu dla tej aplikacji uniemożliwi jej korzystanie z Twoich danych. Czy jesteś pewny(-a)?
twofa_is_enrolled=Twoje konto ma obecnie włączoną autoryzację dwuetapową.
twofa_not_enrolled=Twoje konto obecnie nie ma włączonej autoryzacji dwuetapowej.
twofa_disable=Wyłącz weryfikację dwuetapową
-twofa_enroll=Włącz weryfikację dwuskładnikową
twofa_disable_note=W każdej chwili możesz wyłączyć weryfikację dwuskładnikową.
twofa_disable_desc=Wyłączenie weryfikacji dwuetapowej sprawi, że Twoje konto będzie mniej bezpieczne. Kontynuować?
twofa_disabled=Dwuetapowa autoryzacja została wyłączona.
@@ -678,11 +656,9 @@ twofa_failed_get_secret=Nie udało się uzyskać sekretu.
webauthn_register_key=Dodaj klucz bezpieczeństwa
webauthn_delete_key=Usuń klucz bezpieczeństwa
-webauthn_delete_key_desc=Jeżeli usuniesz klucz bezpieczeństwa, utracisz możliwość zalogowania się z jego użyciem. Kontynuować?
manage_account_links=Zarządzaj powiązanymi kontami
manage_account_links_desc=Te konta zewnętrzne są powiązane z Twoim kontem Gitea.
-account_links_not_available=Obecnie nie ma żadnych zewnętrznych kont powiązanych z tym kontem Gitea.
link_account=Powiąż konto
remove_account_link=Usuń powiązane konto
remove_account_link_desc=Usunięcie powiązanego konta unieważni jego dostęp do Twojego konta Gitea. Kontynuować?
@@ -753,7 +729,6 @@ mirror_interval_invalid=Interwał lustrzanej kopii jest niepoprawny.
mirror_address=Sklonuj z adresu URL
mirror_lfs=Duże przechowywanie plików (LFS)
mirror_lfs_endpoint=Punkt końcowy LFS
-mirror_lfs_endpoint_desc=Synchronizacja spróbuje użyć adresu URL klonowania, aby określić serwer LFS . Możesz również określić niestandardowy punkt końcowy, jeśli dane repozytorium LFS są przechowywane gdzieś indziej.
mirror_last_synced=Ostatnio zsynchronizowano
mirror_password_placeholder=(Nie zmieniono)
mirror_password_blank_placeholder=(Nie ustawiono)
@@ -764,7 +739,6 @@ forks=Forki
reactions_more=i %d więcej
unit_disabled=Administrator witryny wyłączył tę sekcję repozytorium.
language_other=Pozostałe
-adopt_search=Wprowadź nazwę użytkownika, aby wyszukać nieprzyjęte repozytoria... (pozostaw puste, aby znaleźć wszystko)
adopt_preexisting_label=Przyjmij pliki
adopt_preexisting=Przyjmij istniejące pliki
adopt_preexisting_content=Stwórz repozytorium z %s
@@ -820,14 +794,12 @@ migrate.clone_address=Migruj/klonuj z adresu URL
migrate.clone_address_desc=Adres HTTP(S) lub "klona" Gita istniejącego repozytorium
migrate.clone_local_path=lub ścieżka lokalnego serwera
migrate.permission_denied=Nie możesz importować lokalnych repozytoriów.
-migrate.permission_denied_blocked=Nie możesz importować z niedozwolonych hostów, poproś administratora o sprawdzenie ustawień ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_lfs_endpoint=Punkt końcowy LFS jest nieprawidłowy.
migrate.failed=Migracja nie powiodła się: %v
migrate.migrate_items_options=Token dostępu jest wymagany, aby zmigrować dodatkowe elementy
migrated_from=Zmigrowane z %[2]s
migrated_from_fake=Zmigrowane z %[1]s
migrate.migrate=Migracja z %s
-migrate.migrating=Migrowanie z %s ...
migrate.migrating_failed=Migrowanie z %s nie powiodło się.
migrate.migrating_failed_no_addr=Migracja nie powiodła się.
migrate.github.description=Migracja danych z github.com lub innych instancji GitHub.
@@ -864,7 +836,6 @@ quick_guide=Skrócona instrukcja
clone_this_repo=Klonuj repozytorium
create_new_repo_command=Tworzenie nowego repozytorium z linii poleceń
push_exist_repo=Wypychanie istniejącego repozytorium z linii poleceń
-empty_message=To repozytorium nie zawiera żadnej zawartości.
code=Kod
code.desc=Uzyskaj dostęp do kodu źródłowego, plików, commitów i gałęzi.
@@ -879,7 +850,6 @@ issues=Zgłoszenia
pulls=Oczekujące zmiany
projects=Projekty
labels=Etykiety
-org_labels_desc=Etykiety organizacji, które mogą być używane z wszystkimi repozytoriami w tej organizacji
org_labels_desc_manage=zarządzaj
milestones=Kamienie milowe
@@ -942,13 +912,13 @@ editor.file_changed_while_editing=Zawartość pliku zmieniła się, odkąd rozpo
editor.commit_empty_file_header=Commituj pusty plik
editor.commit_empty_file_text=Plik, który zamierzasz commitować, jest pusty. Kontynuować?
editor.no_changes_to_show=Brak zmian do pokazania.
-editor.fail_to_update_file_summary=Komunikat błędu:
editor.push_rejected_summary=Pełny komunikat odrzucenia:
editor.add_subdir=Dodaj katalog…
editor.no_commit_to_branch=Zatwierdzanie bezpośrednio do tej gałęzi nie jest możliwe, ponieważ:
editor.user_no_push_to_branch=Użytkownik nie może wypychać do gałęzi
editor.require_signed_commit=Gałąź wymaga podpisanych commitów
+
commits.desc=Przeglądaj historię zmian kodu źródłowego.
commits.commits=Commity
commits.search_all=Wszystkie gałęzie
@@ -1061,7 +1031,6 @@ issues.filter_type.mentioning_you=Wspominające Ciebie
issues.filter_sort=Sortuj
issues.filter_sort.latest=Najnowsze
issues.filter_sort.oldest=Najstarsze
-issues.filter_sort.recentupdate=Ostatnio aktualizowane
issues.filter_sort.leastupdate=Najdawniej aktualizowane
issues.filter_sort.mostcomment=Najczęściej komentowane
issues.filter_sort.leastcomment=Najrzadziej komentowane
@@ -1141,7 +1110,6 @@ issues.lock_no_reason=zablokowano i ograniczono konwersację do współtwórców
issues.unlock_comment=odblokowano tę konwersację %s
issues.lock_confirm=Zablokuj
issues.unlock_confirm=Odblokuj
-issues.lock.notice_1=- Inni użytkownicy nie mogą dodawać nowych komentarzy do tego zagadnienia.
issues.lock.notice_2=- Ty i inni współtwórcy z dostępem do tego repozytorium możecie dalej pozostawiać komentarze dla innych.
issues.lock.notice_3=- Możesz zawsze odblokować to zagadnienie w przyszłości.
issues.unlock.notice_1=- Wszyscy będą mogli ponownie umieszczać komentarze w tym zagadnieniu.
@@ -1188,8 +1156,6 @@ issues.dependency.added_dependency=`dodał nową zależność %s`
issues.dependency.removed_dependency=`usunął zależność %s`
issues.dependency.issue_close_blocks=To zgłoszenie blokuje zamknięcie następujących zgłoszeń
issues.dependency.pr_close_blocks=Ten Pull Request blokuje zamknięcie następujących zgłoszeń
-issues.dependency.issue_close_blocked=Musisz zamknąć wszystkie zgłoszenia blokujące to zgłoszenie zanim je zamkniesz.
-issues.dependency.pr_close_blocked=Musisz zamknąć wszystkie zgłoszenia blokujące ten Pull Request zanim go scalisz.
issues.dependency.blocks_short=Blokuje
issues.dependency.blocked_by_short=Zależy od
issues.dependency.remove_header=Usuń zależność
@@ -1200,7 +1166,6 @@ issues.dependency.add_error_same_issue=Zgłoszenie nie może być zależne od si
issues.dependency.add_error_dep_issue_not_exist=Zgłoszenie zależne nie istnieje.
issues.dependency.add_error_dep_not_exist=Zależność nie istnieje.
issues.dependency.add_error_dep_exists=Zależność już istnieje.
-issues.dependency.add_error_cannot_create_circular=Nie możesz stworzyć zależności z dwoma zgłoszeniami blokującymi siebie wzajemnie.
issues.dependency.add_error_dep_not_same_repo=Oba zgłoszenia muszą być w tym samym repozytorium.
issues.review.self.approval=Nie możesz zatwierdzić swojego własnego Pull Requesta.
issues.review.self.rejection=Nie możesz zażądać zmian w swoim własnym Pull Requeście.
@@ -1212,7 +1177,6 @@ issues.review.reject=zażądał(-a) zmian %s
issues.review.wait=został poproszony o recenzję %s
issues.review.add_review_request=poprosił o recenzję %s %s
issues.review.remove_review_request=usunięto prośbę o recenzję %s %s
-issues.review.remove_review_request_self=odmówił recenzji %s
issues.review.pending=Oczekująca
issues.review.review=Recenzja
issues.review.reviewers=Recenzenci
@@ -1225,7 +1189,6 @@ issues.review.resolve_conversation=Rozwiąż dyskusję
issues.review.un_resolve_conversation=Oznacz dyskusję jako nierozstrzygniętą
issues.review.resolved_by=oznaczył(-a) tę rozmowę jako rozwiązaną
issues.review.commented=Skomentuj
-issues.assignee.error=Nie udało się dodać wszystkich wybranych osób do przypisanych przez nieoczekiwany błąd.
issues.reference_issue.body=Treść
issues.content_history.edited=edytowano
issues.content_history.delete_from_history=Usuń z historii
@@ -1278,18 +1241,13 @@ pulls.waiting_count_n=%d oczekujących recenzji
pulls.no_merge_desc=Ten Pull Request nie może zostać scalony, ponieważ wszystkie opcje scalania dla tego repozytorium są wyłączone.
pulls.no_merge_helper=Włącz opcje scalania w ustawieniach repozytorium, lub scal ten Pull Request ręcznie.
pulls.no_merge_wip=Ten pull request nie może być automatycznie scalony, ponieważ jest oznaczony jako praca w toku.
-pulls.no_merge_not_ready=Ten Pull Request nie jest gotowy do scalenia, sprawdź status recenzji i kontrolki stanu.
pulls.no_merge_access=Nie masz uprawnień, aby scalić ten Pull Request.
pulls.merge_manually=Ręcznie scalone
pulls.require_signed_wont_sign=Ta gałąź wymaga podpisanych commitów, ale to scalenie nie będzie podpisane
pulls.invalid_merge_option=Nie możesz użyć tej opcji scalania dla tego pull request'a.
-pulls.merge_conflict=Scalenie nie powiodło się: Wystąpił konflikt przy scalaniu. Porada: Wypróbuj innej strategii
pulls.merge_conflict_summary=Komunikat o błędzie
-pulls.rebase_conflict=Scalanie nie powiodło się: Wystąpił konflikt podczas przebazowania commit'a: %[1]s. Wskazówka: Spróbuj innej strategii
pulls.rebase_conflict_summary=Komunikat o błędzie
-pulls.unrelated_histories=Scalenie nie powiodło się: Head scalenia i baza nie mają wspólnej historii. Porada: Spróbuj innej strategii scalania
-pulls.merge_out_of_date=Scalenie nie powiodło się: Przy generowaniu scalenia, baza została zaktualizowana. Porada: Spróbuj ponownie.
pulls.push_rejected_summary=Komunikat o całkowitym odrzuceniu
pulls.open_unmerged_pull_exists=`Nie możesz wykonać operacji ponownego otwarcia, ponieważ jest już oczekujący pull request (#%d) z identycznymi właściwościami.`
pulls.status_checking=Niektóre etapy są w toku
@@ -1405,7 +1363,6 @@ activity.title.releases_1=%d Wydanie
activity.title.releases_n=%d Wydań
activity.title.releases_published_by=%s opublikowane przez %s
activity.published_release_label=Opublikowane
-activity.no_git_activity=Nie było żadnej aktywności w tym okresie czasu.
activity.git_stats_exclude_merges=Wykluczając scalenia,
activity.git_stats_author_1=%d autor
activity.git_stats_author_n=%d autorzy
@@ -1430,7 +1387,6 @@ activity.git_stats_deletion_n=%d usunięć
contributors.contribution_type.commits=Commity
settings=Ustawienia
-settings.desc=Ustawienia to miejsce, w którym możesz zmieniać parametry repozytorium
settings.options=Repozytorium
settings.collaboration=Współpracownicy
settings.collaboration.admin=Administrator
@@ -1479,7 +1435,6 @@ settings.pulls_desc=Włącz Pull Requesty w repozytorium
settings.pulls.ignore_whitespace=Ignoruj znaki białe w konfliktach
settings.admin_settings=Ustawienia administratora
settings.admin_enable_health_check=Włącz sprawdzanie stanu zdrowia repozytoriów (git fsck)
-settings.admin_enable_close_issues_via_commit_in_any_branch=Zamknij zgłoszenie poprzez commit wprowadzony do nie-domyślnej gałęzi
settings.danger_zone=Strefa niebezpieczeństwa
settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
settings.convert=Konwertuj na zwykłe repozytorium
@@ -1499,7 +1454,6 @@ settings.transfer_abort=Anuluj transfer
settings.transfer_abort_invalid=Nie możesz anulować nieistniejącego transferu repozytorium.
settings.transfer_desc=Przenieś to repozytorium do innego użytkownika lub organizacji, w której posiadasz uprawnienia administratora.
settings.transfer_form_title=Wpisz nazwę repozytorium w celu potwierdzenia:
-settings.transfer_in_progress=Obecnie trwa transfer. Anuluj go, jeśli chcesz przenieść to repozytorium do innego użytkownika.
settings.transfer_notices_1=- Stracisz dostęp do tego repozytorium, jeśli przeniesiesz je do innego użytkownika.
settings.transfer_notices_2=- Utrzymasz dostęp do tego repozytorium, jeśli przeniesiesz je do organizacji, której jesteś (współ-)właścicielem.
settings.transfer_notices_3=- Jeśli repozytorium jest prywatne i jest przenoszone do indywidualnego użytkownika, ta czynność upewnia się, że użytkownik ma co najmniej uprawnienia do odczytu (i w razie potrzeby zmienia uprawnienia).
@@ -1513,9 +1467,7 @@ settings.trust_model.default=Domyślny model zaufania
settings.trust_model.default.desc=Użyj domyślnego modelu zaufania repozytorium dla tej instalacji.
settings.trust_model.collaborator=Współpracownik
settings.trust_model.collaborator.long=Współpracownik: Zaufaj podpisom współpracowników
-settings.trust_model.collaborator.desc=Prawidłowe podpisy współpracowników tego repozytorium zostaną oznaczone jako "zaufane" (niezależnie od tego, czy pasują one do autora czy nie). W przeciwnym razie poprawne podpisy zostaną oznaczone jako "niezaufane", jeśli podpis pasuje do autora i "niedopasowane", jeśli nie.
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: Ufaj podpisom zgodnym z committer'ami (To pasuje do GitHub'a i zmusi podpisane commit'y przez Gitea do posiadania Gitea jako committer'a)
settings.wiki_delete=Usuń dane Wiki
settings.wiki_delete_desc=Usunięcie danych wiki jest nieodwracalne.
settings.wiki_delete_notices_1=- Ta operacja usunie i wyłączy wiki repozytorium %s.
@@ -1524,7 +1476,6 @@ settings.wiki_deletion_success=Dane wiki repozytorium zostały usunięte.
settings.delete=Usuń to repozytorium
settings.delete_desc=Usunięcie repozytorium jest trwałe i nieodwracalne.
settings.delete_notices_1=- Ta operacja NIE MOŻE zostać cofnięta.
-settings.delete_notices_2=- Ta operacja trwale usunie repozytorium %s , w tym kod źródłowy, zgłoszenia, komentarze, dane wiki i dostęp dla współpracowników.
settings.delete_notices_fork_1=- Forki tego repozytorium będą niezależne po jego usunięciu.
settings.deletion_success=Repozytorium zostało usunięte.
settings.update_settings_success=Ustawienia repozytorium zostały zaktualizowane.
@@ -1543,8 +1494,6 @@ settings.team_not_in_organization=Zespół nie jest w tej samej organizacji co r
settings.teams=Zespoły
settings.add_team=Dodaj zespół
settings.add_team_duplicate=Zespół już posiada repozytorium
-settings.add_team_success=Zespół ma teraz dostęp do repozytorium.
-settings.change_team_permission_tip=Uprawnienia zespołu ustawione są konfigurowane na stronie ustawień zespołu i nie mogą być zmieniane dla pojedynczych repozytoriów
settings.delete_team_tip=Ten zespół ma dostęp do wszystkich repozytoriów i nie może zostać usunięty
settings.remove_team_success=Dostęp zespołu do repozytorium został usunięty.
settings.add_webhook=Dodaj webhooka
@@ -1553,8 +1502,6 @@ settings.hooks_desc=Webhooki automatycznie tworzą zapytania HTTP POST do serwer
settings.webhook_deletion=Usuń Webhooka
settings.webhook_deletion_desc=Usunięcie Webhooka wykasuje jego ustawienia i historię dostaw. Kontynuować?
settings.webhook_deletion_success=Webhook został usunięty.
-settings.webhook.test_delivery=Testuj dostawę
-settings.webhook.test_delivery_desc=Sprawdź tego Webhooka przy pomocy testowego zdarzenia.
settings.webhook.request=Żądanie
settings.webhook.response=Odpowiedź
settings.webhook.headers=Nagłówki
@@ -1594,7 +1541,6 @@ settings.event_repository=Repozytorium
settings.event_repository_desc=Repozytorium stworzone lub usunięte.
settings.event_header_issue=Zdarzenia zgłoszeń
settings.event_issues=Zgłoszenia
-settings.event_issues_desc=Zgłoszenie otwarte, zamknięte, ponownie otwarte lub zmodyfikowane.
settings.event_issue_assign=Zgłoszenie przypisane
settings.event_issue_assign_desc=Zgłoszenie przypisane bądź nieprzypisane.
settings.event_issue_label=Zgłoszenie oznaczone
@@ -1605,7 +1551,6 @@ settings.event_issue_comment=Komentarz w zgłoszeniu
settings.event_issue_comment_desc=Komentarz w zgłoszeniu stworzony, edytowany lub usunięty.
settings.event_header_pull_request=Zdarzenia Pull Requestów
settings.event_pull_request=Pull Request
-settings.event_pull_request_desc=Pull request otwarty, zamknięty, ponownie otwarty lub zmodyfikowany.
settings.event_pull_request_assign=Pull Request przypisany
settings.event_pull_request_assign_desc=Pull Request przypisany bądz nieprzypisany.
settings.event_pull_request_label=Pull Request zaetykietowany
@@ -1703,11 +1648,9 @@ settings.lfs_invalid_locking_path=Nieprawidłowa ścieżka: %s
settings.lfs_invalid_lock_directory=Nie można zablokować katalogu: %s
settings.lfs_lock_already_exists=Blokada już istnieje: %s
settings.lfs_lock=Zablokuj
-settings.lfs_lock_path=Ścieżka pliku do zablokowania...
settings.lfs_locks_no_locks=Brak blokad
settings.lfs_lock_file_no_exist=Zablokowany plik nie istnieje w domyślnej gałęzi
settings.lfs_force_unlock=Wymuś odblokowanie
-settings.lfs_pointers.found=Znaleziono %d wskaźników blob - %d powiązanych, %d niepowiązanych (%d brakujących w magazynie danych)
settings.lfs_pointers.sha=SHA bloba
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=W repozytorium
@@ -1862,14 +1805,13 @@ settings.visibility.private_shortname=Prywatny
settings.update_settings=Aktualizuj ustawienia
settings.update_setting_success=Ustawienia organizacji zostały zaktualizowane.
-settings.change_orgname_redirect_prompt=Stara nazwa będzie przekierowywała dopóki ktoś jej nie zajmie.
+
+
settings.update_avatar_success=Awatar organizacji został zaktualizowany.
settings.delete=Usuń organizację
settings.delete_account=Usuń tą organizację
settings.delete_prompt=Organizacja zostanie trwale usunięta. Tej akcji NIE MOŻNA cofnąć!
settings.confirm_delete_account=Potwierdź usunięcie
-settings.delete_org_title=Usuń organizację
-settings.delete_org_desc=Ta organizacja zostanie trwale usunięta. Kontynuować?
settings.hooks_desc=Dodaj webhooki, uruchamiane dla wszystkich repozytoriów w tej organizacji.
settings.labels_desc=Dodaj etykiety, które mogą być używane w zgłoszeniach dla wszystkich repozytoriów w tej organizacji.
@@ -1937,7 +1879,6 @@ organizations=Organizacje
repositories=Repozytoria
hooks=Weebhook'i
authentication=Źródła uwierzytelniania
-emails=Emaile użytkowników
config=Konfiguracja
config_summary=Podsumowanie
config_settings=Ustawienia
@@ -1964,24 +1905,15 @@ dashboard.cron.process=Cron: %[1]s
dashboard.cron.error=Błąd w Cronie: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s zakończony
dashboard.delete_inactive_accounts=Usuń wszystkie nieaktywowane konta
-dashboard.delete_inactive_accounts.started=Zadanie usuwania nieaktywowanych kont zostało rozpoczęte.
dashboard.delete_repo_archives=Usuń wszystkie archiwa repozytoriów (ZIP, TAR.GZ, itp..)
-dashboard.delete_repo_archives.started=Zadanie usuwania archiwów repozytoriów zostało rozpoczęte.
dashboard.delete_missing_repos=Usuń wszystkie repozytoria, które nie mają plików Gita
-dashboard.delete_missing_repos.started=Zadanie usuwania repozytoriów, które nie mają plików Gita, zostało rozpoczęte.
dashboard.delete_generated_repository_avatars=Usuń wygenerowane awatary repozytoriów
dashboard.update_mirrors=Aktualizuj kopie lustrzane
dashboard.repo_health_check=Sprawdź stan wszystkich repozytoriów
dashboard.check_repo_stats=Sprawdź statystyki wszystkich repozytoriów
dashboard.archive_cleanup=Usuń stare archiwa repozytoriów
-dashboard.deleted_branches_cleanup=Wyczyść usunięte galęzie
-dashboard.git_gc_repos=Wykonaj zbieranie śmieci ze wszystkich repozytoriów
-dashboard.resync_all_sshkeys=Zaktualizuj plik '.ssh/authorized_keys' z kluczami SSH Gitea.
-dashboard.resync_all_sshprincipals=Zaktualizuj plik '.ssh/authorized_keys' z kluczami SSH Gitea.
-dashboard.resync_all_hooks=Ponownie synchronizuj hooki pre-receive, update i post-receive we wszystkich repozytoriach.
dashboard.reinit_missing_repos=Ponownie zainicjalizuj wszystkie brakujące repozytoria Git, dla których istnieją rekordy
dashboard.sync_external_users=Synchronizuj zewnętrzne dane użytkownika
-dashboard.cleanup_hook_task_table=Oczyść tabelę hook_task
dashboard.server_uptime=Uptime serwera
dashboard.current_goroutine=Bieżące Goroutines
dashboard.current_memory_usage=Bieżące użycie pamięci
@@ -2023,7 +1955,6 @@ users.2fa=2FA
users.repos=Repozytoria
users.created=Utworzony
users.last_login=Ostatnie logowanie
-users.never_login=Nigdy nie zalogował(-a) się
users.send_register_notify=Wyślij użytkownikowi powiadomienie o rejestracji
users.edit=Edytuj
users.auth_source=Źródło uwierzytelniania
@@ -2055,11 +1986,7 @@ users.list_status_filter.is_restricted=Ograniczone
emails.email_manage_panel=Zarządzanie adresami email
emails.primary=Podstawowy
emails.activated=Aktywowany
-emails.filter_sort.email=E-mail
-emails.filter_sort.email_reverse=E-mail (odwrotnie)
emails.filter_sort.name=Nazwa użytkownika
-emails.filter_sort.name_reverse=Nazwa użytkownika (odwrotnie)
-emails.updated=E-mail zaktualizowany
emails.not_updated=Nie udało się zaktualizować żądanego adresu e-mail: %v
emails.duplicate_active=Ten e-mail jest już aktywny dla innego użytkownika.
emails.change_email_header=Aktualizuj właściwości adresu e-mail
@@ -2147,19 +2074,14 @@ auths.oauth2_emailURL=URL adresu e-mail
auths.skip_local_two_fa=Pomiń lokalne 2FA
auths.enable_auto_register=Włącz automatyczną rejestrację
auths.sspi_auto_create_users=Automatycznie twórz użytkowników
-auths.sspi_auto_create_users_helper=Zezwól metodzie uwierzytelniania SSPI na automatyczne tworzenie nowych kont dla użytkowników, którzy logują się po raz pierwszy
auths.sspi_auto_activate_users=Automatycznie aktywuj użytkowników
auths.sspi_auto_activate_users_helper=Zezwól metodzie uwierzytelnienia SSPI na automatyczne aktywowanie nowych kont użytkowników
auths.sspi_strip_domain_names=Usuwaj nazwy domen z nazw użytkowników
-auths.sspi_strip_domain_names_helper=Gdy zaznaczone, nazwy domen będą usuwane z nazw logowania (np. zamiast "DOMENA\osoba", "czy osoba@example.org" będą po prostu "osoba").
auths.sspi_separator_replacement=Używany separator zamiast \, / oraz @
-auths.sspi_separator_replacement_helper=Znak używany do zastępowania separatorów nazw logowania niskiego poziomu (np. znak \ w "DOMENA\osoba") i nazw głównych użytkowników (np. @ w "osoba@example.org").
auths.sspi_default_language=Domyślny język użytkownika
-auths.sspi_default_language_helper=Domyślny język dla użytkowników automatycznie stworzonych przy pomocy metody uwierzytelnienia SSPI. Pozostaw puste, jeśli język ma zostać wykryty automatycznie.
auths.tips=Wskazówki
auths.tips.oauth2.general=Uwierzytelnianie OAuth2
auths.tip.oauth2_provider=Dostawca OAuth2
-auths.tip.nextcloud=`Zarejestruj nowego klienta OAuth w swojej instancji za pomocą menu "Ustawienia -> Bezpieczeństwo -> Klient OAuth 2.0"`
auths.tip.mastodon=Wprowadź niestandardowy adres URL instancji mastodona, którą chcesz uwierzytelnić (lub użyj domyślnego)
auths.edit=Edytuj źródło uwierzytelniania
auths.activated=To źródło uwierzytelniania jest aktywne
@@ -2247,7 +2169,6 @@ config.mailer_use_sendmail=Używaj Sendmail
config.mailer_sendmail_path=Ścieżka Sendmail
config.mailer_sendmail_args=Dodatkowe argumenty Sendmail
config.mailer_sendmail_timeout=Limit czasu Sendmail
-config.test_email_placeholder=Email (np. test@example.com)
config.send_test_mail=Wyślij testową wiadomość e-mail
config.oauth_config=Konfiguracja OAuth
@@ -2303,7 +2224,6 @@ monitor.desc=Opis
monitor.start=Czas rozpoczęcia
monitor.execute_time=Czas wykonania
monitor.process.cancel=Anuluj proces
-monitor.process.cancel_desc=Anulowanie procesu może spowodować utratę danych
monitor.queues=Kolejki
monitor.queue=Kolejka: %s
@@ -2313,7 +2233,6 @@ monitor.queue.exemplar=Przykładowy typ
monitor.queue.numberworkers=Liczba procesów pracujących
monitor.queue.maxnumberworkers=Maksymalna liczba procesów pracujących
monitor.queue.settings.title=Ustawienia Puli
-monitor.queue.settings.maxnumberworkers=Maksymalna liczba procesów pracujących
monitor.queue.settings.maxnumberworkers.placeholder=Obecnie %[1]d
monitor.queue.settings.maxnumberworkers.error=Maksymalna liczba procesów pracujących musi być liczbą
monitor.queue.settings.submit=Aktualizuj ustawienia
@@ -2390,8 +2309,6 @@ error.no_committer_account=Brak konta powiązanego z adresem e-mail autora
error.no_gpg_keys_found=Nie znaleziono w bazie danych klucza dla tego podpisu
error.not_signed_commit=Commit nie podpisany
error.failed_retrieval_gpg_keys=Nie udało się odzyskać żadnego klucza powiązanego z kontem autora
-error.probable_bad_signature=OSTRZEŻENIE! Pomimo istnienia klucza z takim ID w bazie, nie weryfikuje on tego commita! Ten commit jest PODEJRZANY.
-error.probable_bad_default_signature=OSTRZEŻENIE! Pomimo, że domyślny klucz posiada to ID, nie weryfikuje on tego commita! Ten commit jest PODEJRZANY.
[units]
error.no_unit_allowed_repo=Nie masz uprawnień do żadnej sekcji tego repozytorium.
diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini
index 8ee675e6e00..c60edda73f2 100644
--- a/options/locale/locale_pt-BR.ini
+++ b/options/locale/locale_pt-BR.ini
@@ -8,7 +8,7 @@ sign_in_with_provider=Entrar com %s
sign_in_or=ou
sign_out=Sair
sign_up=Cadastrar
-link_account=Vincular conta
+link_account=Vincular Conta
register=Cadastrar
version=Versão
powered_by=Desenvolvido por %s
@@ -16,7 +16,8 @@ page=Página
template=Template
language=Idioma
notifications=Notificações
-active_stopwatch=Cronômetro ativo
+active_stopwatch=Cronômetro Ativo
+tracked_time_summary=Resumo do tempo monitorado com base nos filtros da lista de problemas
create_new=Criar…
user_profile_and_more=Perfil e Configurações...
signed_in_as=Acessado como
@@ -24,21 +25,22 @@ enable_javascript=Este site requer JavaScript.
toc=Índice
licenses=Licenças
return_to_gitea=Volte para Gitea
+more_items=Mais itens
username=Nome de usuário
-email=Endereço de e-mail
+email=Endereço de E-mail
password=Senha
access_token=Token de Acesso
-re_type=Confirmar senha
+re_type=Confirmar Senha
captcha=CAPTCHA
-twofa=Autenticação de dois fatores
-twofa_scratch=Código de backup da autenticação de dois fatores
+twofa=Autenticação de Dois Fatores
+twofa_scratch=Código de Backup da Autenticação de Dois Fatores
passcode=Senha
webauthn_insert_key=Insira sua chave de segurança
webauthn_sign_in=Pressione o botão na sua chave de segurança. Se a sua chave de segurança não tiver um botão, insira-a novamente.
webauthn_press_button=Por favor, pressione o botão na sua chave de segurança…
-webauthn_use_twofa=Use um código de duas etapas do seu telefone
+webauthn_use_twofa=Use um código de dois fatores do seu telefone
webauthn_error=Não foi possível ler sua chave de segurança.
webauthn_unsupported_browser=Seu navegador não oferece suporte ao WebAuthn.
webauthn_error_unknown=Ocorreu um erro desconhecido. Por favor, tente novamente.
@@ -53,16 +55,16 @@ repository=Repositório
organization=Organização
mirror=Espelhamento
issue_milestone=Marco
-new_repo=Novo repositório
-new_migrate=Nova migração
-new_mirror=Novo espelhamento
+new_repo=Novo Repositório
+new_migrate=Nova Migração
+new_mirror=Novo Espelhamento
new_fork=Novo Fork de Repositório
-new_org=Nova organização
+new_org=Nova Organização
new_project=Novo Projeto
new_project_column=Nova Coluna
-manage_org=Gerenciar organizações
-admin_panel=Administração geral
-account_settings=Configurações da conta
+manage_org=Gerenciar Organizações
+admin_panel=Administração Geral
+account_settings=Configurações da Conta
settings=Configurações
your_profile=Perfil
your_starred=Favorito
@@ -75,7 +77,7 @@ collaborative=Colaborativo
forks=Forks
activities=Atividades
-pull_requests=Pull requests
+pull_requests=Pull Requests
issues=Issues
milestones=Marcos
@@ -86,12 +88,13 @@ rerun=Reexecutar
rerun_all=Reexecutar todas as tarefas
save=Salvar
add=Adicionar
-add_all=Adicionar todos
+add_all=Adicionar Todos
remove=Remover
-remove_all=Excluir todos
+remove_all=Excluir Todos
remove_label_str=`Remover item "%s"`
edit=Editar
view=Visualizar
+test=Teste
enabled=Habilitado
disabled=Desabilitado
@@ -102,6 +105,7 @@ copy_url=Copiar URL
copy_hash=Copiar hash
copy_content=Copiar conteúdo
copy_branch=Copiar nome do branch
+copy_path=Copiar caminho
copy_success=Copiado!
copy_error=A cópia falhou
copy_type_unsupported=Este tipo de arquivo não pode ser copiado
@@ -109,10 +113,14 @@ copy_type_unsupported=Este tipo de arquivo não pode ser copiado
write=Escrever
preview=Pré-visualização
loading=Carregando…
+files=Arquivos
error=Erro
error404=A página que você está tentando acessar não existe ou você não está autorizado a visualizá-la.
+error503=O servidor foi incapaz de concluir sua solicitação. Por favor, tente novamente mais tarde.
go_back=Voltar
+invalid_data=Dados inválidos: %v
+nothing_has_been_changed=Nada foi alterado.
never=Nunca
unknown=Desconhecido
@@ -123,7 +131,8 @@ pin=Fixar
unpin=Desfixar
artifacts=Artefatos
-confirm_delete_artifact=Tem certeza que deseja excluir o artefato '%s' ?
+expired=Expirado
+confirm_delete_artifact=Tem certeza que deseja excluir o artefato '%s'?
archived=Arquivado
@@ -141,18 +150,53 @@ confirm_delete_selected=Confirma a exclusão de todos os itens selecionados?
name=Nome
value=Valor
+readme=Readme
filter=Filtro
+filter.clear=Limpar Filtro
filter.is_archived=Arquivado
+filter.not_archived=Não Arquivados
+filter.is_fork=Fork
+filter.not_fork=Não Fork
+filter.is_mirror=Espelhado
+filter.not_mirror=Não espelhado
filter.is_template=Template
+filter.not_template=Não Modelo
filter.public=Pública
filter.private=Privado
+no_results_found=Nenhum resultado encontrado.
+internal_error_skipped=Ocorreu um erro interno, mas foi ignorado: %s
[search]
+search=Pesquisar…
+type_tooltip=Tipo de pesquisa
+fuzzy=Fuzzy
+fuzzy_tooltip=Incluir resultados que sejam próximos ao termo de busca
+words=Palavras
+words_tooltip=Incluir somente resultados que correspondam às palavras do termo de busca
+regexp=Regexp
+regexp_tooltip=Incluir somente resultados que correspondam ao termo de pesquisa regexp
+exact=Exato
+exact_tooltip=Incluir somente resultados que correspondam exatamente ao termo de busca
+repo_kind=Pesquisar repositório...
+user_kind=Pesquisar usuário…
+org_kind=Pesquisar orgs…
+team_kind=Pesquisar equipes…
+code_kind=Pesquisar código…
+code_search_unavailable=A pesquisa por código está indisponível no momento. Entre em contato com o administrador.
+package_kind=Pesquisar pacotes…
+project_kind=Pesquisar projetos…
+branch_kind=Pesquisar branches…
+tag_kind=Pesquisar tags…
+commit_kind=Pesquisar commits…
+runner_kind=Pesquisar runners…
+no_results=Nenhum resultado foi encontrado.
+issue_kind=Pesquisar issues…
+pull_kind=Pesquisar pull requests…
[aria]
-navbar=Barra de navegação
+navbar=Barra de Navegação
footer=Rodapé
footer.software=Sobre o Software
footer.links=Links
@@ -173,7 +217,10 @@ buttons.link.tooltip=Adicionar um link
buttons.list.unordered.tooltip=Adicionar uma lista com marcadores
buttons.list.ordered.tooltip=Adicionar uma lista numerada
buttons.list.task.tooltip=Adicionar uma lista de tarefas
+buttons.table.add.tooltip=Adicionar uma tabela
buttons.table.add.insert=Adicionar
+buttons.table.rows=Linhas
+buttons.table.cols=Colunas
buttons.mention.tooltip=Mencionar um usuário ou equipe
buttons.ref.tooltip=Referenciar um issue ou um pull request
buttons.switch_to_legacy.tooltip=Em vez disso, usar o editor legado
@@ -181,33 +228,37 @@ buttons.enable_monospace_font=Habilitar fonte mono espaçada
buttons.disable_monospace_font=Desabilitar fonte mono espaçada
[filter]
-string.asc=A - Z
-string.desc=Z - A
+string.asc=A–Z
+string.desc=Z–A
[error]
occurred=Ocorreu um erro
+report_message=Se você acredita que esse é um falha do Gitea, pesquise por issues no GitHub ou abra uma nova issue, se necessário.
not_found=Não foi possível encontrar o destino.
network_error=Erro de rede
[startpage]
-app_desc=Um serviço de hospedagem Git amigável
+app_desc=Um serviço amigável de Git selfhosted
install=Fácil de instalar
+install_desc=Simplesmente execute o binário para sua plataforma, suba com Docker , or use um pacote .
platform=Multi-plataforma
+platform_desc=Gitea roda em qualquer lugar para qual Go consegue compilar: Windows, macOS, Linux, ARM, etc. Escolha qual você gosta mais!
lightweight=Leve e rápido
-lightweight_desc=Gitea utiliza poucos recursos e consegue mesmo rodar no barato Raspberry Pi. Economize energia elétrica da sua máquina!
-license=Código aberto
+lightweight_desc=Gitea tem requisitos minimos e pode rodar até em um Raspberry Pi. Economize energia da sua máquina!
+license=Código Aberto
+license_desc=Receba %[2]s ! Junte-se a nós contribuindo para tornar este projeto ainda melhor. Não seja tímido, seja um colaborador!
[install]
install=Instalação
-title=Configuração inicial
+title=Configuração Inicial
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia a documentação cuidadosamente antes de alterar qualquer coisa nesta página.
require_db_desc=Gitea requer MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB (protocolo MySQL).
-db_title=Configurações de banco de dados
-db_type=Tipo de banco de dados
+db_title=Configurações de Banco de Dados
+db_type=Tipo de Banco de Dados
host=Servidor
user=Nome de usuário
password=Senha
-db_name=Nome do banco de dados
+db_name=Nome do Banco de Dados
db_schema=Esquema
db_schema_helper=Deixe em branco para banco de dados padrão ("public").
ssl_mode=SSL
@@ -215,27 +266,27 @@ path=Caminho
sqlite_helper=Caminho do arquivo do banco de dados SQLite3. Informe um caminho absoluto se você executar o Gitea como um serviço.
reinstall_error=Você está tentando instalar em um banco de dados existente do Gitea
reinstall_confirm_message=Reinstalar com um banco de dados Gitea existente pode causar vários problemas. Na maioria dos casos, você deve usar seu "app.ini" existente para executar o Gitea. Se você sabe o que está fazendo, confirme o seguinte:
-reinstall_confirm_check_1=Os dados criptografados pelo SECRET_KEY no app.ini poderão ser perdidos: os usuários podem não conseguir fazer login com 2FA/OTP & espelhos podem não funcionar corretamente. Ao marcar esta caixa você confirma que o atual arquivo app.ini contém o SECRET_KEY correto.
+reinstall_confirm_check_1=Os dados criptografados pelo SECRET_KEY no app.ini poderão ser perdidos: os usuários podem não conseguir fazer login com 2FA/OTP e espelhos podem não funcionar corretamente. Ao marcar esta caixa você confirma que o atual arquivo app.ini contém o SECRET_KEY correto.
reinstall_confirm_check_2=Os repositórios e configurações podem precisar ser re-sincronizados. Marcando esta caixa você confirma que irá sincronizar novamente os hooks para os repositórios e o arquivo authorized_keys manualmente. Você confirma que irá garantir que as configurações de repositório e espelhamento estão corretas.
reinstall_confirm_check_3=Você confirma que este Gitea está realmente executando com a localização correta do app.ini e que você tem certeza de que precisa reinstalar. Você confirma que tomou conhecimento dos riscos acima descritos.
err_empty_db_path=O caminho do banco de dados SQLite3 não pode ser em branco.
no_admin_and_disable_registration=Você não pode desabilitar o auto-cadastro do usuário sem criar uma conta de administrador.
err_empty_admin_password=A senha do administrador não pode ser em branco.
-err_empty_admin_email=O e-mail do administrador não pode ser em branco.
-err_admin_name_is_reserved=Nome de usuário do administrador é inválido, nome de usuário está reservado
-err_admin_name_pattern_not_allowed=Nome de usuário administrador é inválido, o nome de usuário corresponde a um padrão reservado
+err_empty_admin_email=O e-mail do administrador não pode estar em branco.
+err_admin_name_is_reserved=Nome de usuário do administrador é inválido, nome de usuário está reservado.
+err_admin_name_pattern_not_allowed=Nome de usuário administrador é inválido. O nome de usuário corresponde a um padrão reservado.
err_admin_name_is_invalid=Nome de usuário do administrador inválido
-general_title=Configurações gerais
-app_name=Nome do servidor
+general_title=Configurações Gerais
+app_name=Nome do Site
app_name_helper=Você pode inserir o nome da empresa aqui.
-repo_path=Caminho raíz do repositório
+repo_path=Caminho Raíz do Repositório
repo_path_helper=Todos os repositórios remotos do Git serão salvos neste diretório.
lfs_path=Caminho raiz do Git LFS
lfs_path_helper=Os arquivos armazenados com o Git LFS serão armazenados neste diretório. Deixe em branco para desabilitar.
-run_user=Executar como nome de usuário
+run_user=Executar como Usuário
run_user_helper=O nome de usuário do sistema operacional com o qual o Gitea é executado. Observe que este usuário deve ter acesso ao caminho da raiz do repositório.
-domain=Domínio do servidor
+domain=Domínio do Servidor
domain_helper=Domínio ou endereço de host para o servidor.
ssh_port=Porta do servidor SSH
ssh_port_helper=Número da porta que seu servidor SSH está usando. Deixe em branco para desabilitar.
@@ -243,43 +294,44 @@ http_port=Porta HTTP de uso do Gitea
http_port_helper=Número da porta que o servidor web do Gitea irá usar.
app_url=URL base do Gitea
app_url_helper=Endereço base para URLs clone HTTP(S) e notificações por e-mail.
-log_root_path=Caminho do log
+log_root_path=Caminho do Log
log_root_path_helper=Arquivos de log serão gravados neste diretório.
-optional_title=Configurações opcionais
-email_title=Configurações de e-mail
+optional_title=Configurações Opcionais
+email_title=Configurações de E-mail
smtp_addr=Host SMTP
smtp_port=Porta SMTP
-smtp_from=Enviar e-mail como
+smtp_from=Enviar E-mail Como
+smtp_from_invalid=O endereço "Enviar e-mail como" é inválido
smtp_from_helper=Endereço de e-mail que o Gitea irá usar. Digite um endereço de e-mail simples ou use o formato "Nome" .
mailer_user=Nome de usuário do SMTP
mailer_password=Senha do SMTP
-register_confirm=Exigir confirmação de e-mail para se cadastrar
-mail_notify=Habilitar notificações de e-mail
-server_service_title=Configurações de servidor e serviços de terceiros
-offline_mode=Habilitar autenticação local
+register_confirm=Exigir Confirmação de E-mail para se Cadastrar
+mail_notify=Habilitar Notificações de E-mail
+server_service_title=Configurações de Servidor e Serviços de Terceiros
+offline_mode=Habilitar Autenticação Local
offline_mode_popup=Desabilitar redes de entrega de conteúdo de terceiros e entregar todos os recursos localmente.
-disable_gravatar=Desabilitar o gravatar
+disable_gravatar=Desabilitar o Gravatar
disable_gravatar_popup=Desabilitar o gravatar e avatar de fontes de terceiros. Um avatar padrão será usado a menos que um usuário localmente carrega um avatar.
-federated_avatar_lookup=Habilitar avatares federativos
+federated_avatar_lookup=Habilitar Avatares Federativos
federated_avatar_lookup_popup=Habilitar a busca federativa de avatares a usar o serviço federativo de código aberto baseado no libravatar.
-disable_registration=Desabilitar auto-cadastro
+disable_registration=Desabilitar Auto-Cadastro
disable_registration_popup=Desabilitar auto-cadastro de usuário. Somente os administradores serão capazes de criar novas contas de usuário.
-allow_only_external_registration_popup=Permitir cadastro somente por meio de serviços externos
+allow_only_external_registration_popup=Permitir Cadastro Somente por Meio de Serviços Externos
openid_signin=Habilitar acesso via OpenID
openid_signin_popup=Habilitar o acesso de usuários via OpenID.
openid_signup=Habilitar o auto-cadastro via OpenID
openid_signup_popup=Habilitar o auto-cadastro com base no OpenID.
enable_captcha=Habilitar CAPTCHA ao registrar
enable_captcha_popup=Obrigar validação por CAPTCHA para auto-cadastro de usuários.
-require_sign_in_view=Exigir acesso do usuário para a visualização de páginas
+require_sign_in_view=Exigir Acesso para a Visualização de Páginas
require_sign_in_view_popup=Limitar o acesso de página aos usuários autenticados. Os visitantes só verão as páginas de autenticação e cadastro.
admin_setting_desc=Criar uma conta de administrador é opcional. O primeiro usuário cadastrado automaticamente se tornará um administrador.
-admin_title=Configurações da conta de administrador
-admin_name=Nome do usuário administrador
+admin_title=Configurações da Conta de Administrador
+admin_name=Nome do Usuário Administrador
admin_password=Senha
-confirm_password=Confirmar senha
-admin_email=Endereço de e-mail
+confirm_password=Confirmar Senha
+admin_email=Endereço de E-mail
install_btn_confirm=Instalar Gitea
test_git_failed=Falha ao testar o comando 'git': %v
sqlite3_not_available=Esta versão do Gitea não suporta SQLite3. Por favor faça o download da versão binária oficial em %s (não utilize a versão 'gobuild').
@@ -293,33 +345,35 @@ secret_key_failed=Falha ao gerar a chave secreta: %v
save_config_failed=Falha ao salvar a configuração: %v
invalid_admin_setting=Configuração da conta de administrador está inválida: %v
invalid_log_root_path=Pasta raíz do log está inválida: %v
-default_keep_email_private=Ocultar endereços de e-mail por padrão
+default_keep_email_private=Ocultar Endereços de E-mail por Padrão
default_keep_email_private_popup=Ocultar endereços de e-mail de novas contas de usuário por padrão.
-default_allow_create_organization=Permitir a criação de organizações por padrão
+default_allow_create_organization=Permitir a Criação de Organizações por Padrão
default_allow_create_organization_popup=Permitir que novas contas de usuários criem organizações por padrão.
default_enable_timetracking=Habilitar o Cronômetro por Padrão
default_enable_timetracking_popup=Habilitar o cronômetro para novos repositórios por padrão.
-no_reply_address=Domínio de e-mail oculto
+no_reply_address=Domínio de E-mail Oculto
no_reply_address_helper=Nome de domínio para usuários com um endereço de e-mail oculto. Por exemplo, o nome de usuário 'joe' será registrado no Git como 'joe@noreply.example.org' se o domínio de e-mail oculto estiver definido como 'noreply.example.org'.
password_algorithm=Algoritmo Hash de Senha
invalid_password_algorithm=Algoritmo de hash de senha inválido
password_algorithm_helper=Escolha o algoritmo de hash para as senhas. Diferentes algoritmos têm requerimentos e forças diversos. O algoritmo argon2 é bastante seguro, mas usa muita memória e pode ser inapropriado para sistemas com menos recursos.
enable_update_checker=Habilitar Verificador de Atualizações
enable_update_checker_helper=Procura por novas versões periodicamente conectando-se ao gitea.io.
-env_config_keys=Configuração do ambiente
+env_config_keys=Configuração do Ambiente
env_config_keys_prompt=As seguintes variáveis de ambiente também serão aplicadas ao seu arquivo de configuração:
+config_write_file_prompt=Estas opções de configuração serão escritas em: %s
[home]
-uname_holder=Usuário ou e-mail
+nav_menu=Menu de Navegação
+uname_holder=Usuário ou E-mail
password_holder=Senha
-switch_dashboard_context=Trocar contexto do painel de controle
+switch_dashboard_context=Trocar Contexto do Painel de Controle
my_repos=Repositórios
show_more_repos=Mostrar mais repositórios…
-collaborative_repos=Repositórios colaborativos
-my_orgs=Minhas organizações
-my_mirrors=Meus espelhos
+collaborative_repos=Repositórios Colaborativos
+my_orgs=Minhas Organizações
+my_mirrors=Meus Espelhos
view_home=Ver %s
-filter=Outros filtros
+filter=Outros Filtros
filter_by_team_repositories=Filtrar por repositórios da equipe
feed_of=`Feed de "%s"`
@@ -335,6 +389,11 @@ show_only_public=Mostrando somente públicos
issues.in_your_repos=Em seus repositórios
+guide_title=Nenhuma Atividade
+explore_repos=Explorar repositórios
+explore_users=Explorar usuários
+empty_org=Ainda não existem organizações.
+empty_repo=Ainda não existem repositórios.
[explore]
repos=Repositórios
@@ -347,32 +406,38 @@ relevant_repositories_tooltip=Repositórios que são forks ou que não possuem t
relevant_repositories=Apenas repositórios relevantes estão sendo mostrados, mostrar resultados não filtrados .
[auth]
-create_new_account=Cadastrar conta
+create_new_account=Cadastrar Conta
+already_have_account=Já tem uma conta?
+sign_in_now=Entre agora!
disable_register_prompt=Cadastro está desabilitado. Entre em contato com o administrador do site.
disable_register_mail=E-mail de confirmação de cadastro está desabilitado.
manual_activation_only=Entre em contato com o administrador do site para concluir a ativação.
remember_me=Lembrar deste Dispositivo
remember_me.compromised=O token de login não é mais válido, o que pode indicar uma conta comprometida. Por favor, verifique a sua conta por atividades incomuns.
-forgot_password_title=Esqueci minha senha
+forgot_password_title=Esqueci a Senha
forgot_password=Esqueceu sua senha?
+need_account=Precisa de uma conta?
+sign_up_now=Cadastre-se agora.
sign_up_successful=A conta foi criada com sucesso. Bem-vindo!
+confirmation_mail_sent_prompt_ex=Um novo e-mail de confirmação foi enviado para %s . Por favor, verifique sua caixa de entrada dentro dos próximos %s para concluir o processo de registro. Se o seu endereço de e-mail de registro estiver incorreto, você pode fazer login novamente e alterá-lo.
must_change_password=Redefina sua senha
allow_password_change=Exigir que o usuário redefina a senha (recomendado)
reset_password_mail_sent_prompt=Um e-mail de confirmação foi enviado para %s . Por favor, verifique sua caixa de entrada dentro do(s) próximo(s) %s para concluir o processo de recuperação de conta.
-active_your_account=Ativar sua conta
+active_your_account=Ativar sua Conta
account_activated=Conta foi ativada
-prohibit_login=Acesso proibido
+prohibit_login=Acesso Proibido
prohibit_login_desc=Sua conta está proibida de fazer login, entre em contato com o administrador do site.
resent_limit_prompt=Você já solicitou recentemente um e-mail de ativação. Por favor, aguarde 3 minutos e tente novamente.
has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (%s ). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
+change_unconfirmed_mail_address=Se o seu endereço de e-mail de registro estiver incorreto, você pode mudá-lo aqui e reenviar um novo e-mail de confirmação.
resend_mail=Clique aqui para reenviar seu e-mail de ativação
email_not_associate=O endereço de e-mail não está associado à nenhuma conta.
-send_reset_mail=Enviar e-mail de recuperação de conta
-reset_password=Recuperação de conta
+send_reset_mail=Enviar E-mail de Recuperação de Conta
+reset_password=Recuperação de Conta
invalid_code=Seu código de confirmação é inválido ou expirou.
invalid_code_forgot_password=Seu código de confirmação expirou ou está inválido. Clique aqui para iniciar uma nova sessão.
invalid_password=Sua senha não coincide com a senha que foi usada para criar a conta.
-reset_password_helper=Recuperar conta
+reset_password_helper=Recuperar Conta
reset_password_wrong_user=Você está conectado como %s, mas o link de recuperação de conta é destinado a %s
password_too_short=A senha deve ter %d ou mais caracteres.
non_local_account=Usuários não-locais não podem atualizar sua senha através da interface web do Gitea.
@@ -384,12 +449,12 @@ twofa_passcode_incorrect=Seu código de acesso está incorreto. Se você perdeu
twofa_scratch_token_incorrect=Seu código de backup está incorreto.
login_userpass=Acessar
login_openid=OpenID
-oauth_signup_tab=Cadastrar nova conta
+oauth_signup_tab=Cadastrar Nova Conta
oauth_signup_title=Completar Nova Conta
-oauth_signup_submit=Completar conta
+oauth_signup_submit=Completar Conta
oauth_signin_tab=Vincular à uma conta existente
-oauth_signin_title=Acesse com uma conta vinculada
-oauth_signin_submit=Vincular conta
+oauth_signin_title=Acesse para Autorizar Conta Vinculada
+oauth_signin_submit=Vincular Conta
oauth.signin.error.access_denied=O pedido de autorização foi negado.
oauth.signin.error.temporarily_unavailable=A autorização falhou porque o servidor de autenticação está temporariamente indisponível. Por favor, tente novamente mais tarde.
openid_connect_submit=Conectar
@@ -399,9 +464,9 @@ openid_register_title=Criar uma nova conta
openid_register_desc=O URI do OpenID escolhido é desconhecido. Associe-o com uma nova conta aqui.
openid_signin_desc=Digite o URI do seu OpenID. Por exemplo: alice.openid.example.org ou https://openid.example.org/alice.
disable_forgot_password_mail=A recuperação de conta está desativada porque nenhum e-mail está configurado. Por favor, contate o administrador do site.
-disable_forgot_password_mail_admin=A recuperação de conta só está disponível quando o e-mail está configurado. Por favor, configure o e-mail para permitir a recuperação de conta.
+disable_forgot_password_mail_admin=A recuperação de conta só está disponível quando o e-mail está configurado.
email_domain_blacklisted=Você não pode se cadastrar com seu endereço de e-mail.
-authorize_application=Autorizar aplicativo
+authorize_application=Autorizar Aplicativo
authorize_redirect_notice=Você será redirecionado para %s se você autorizar este aplicativo.
authorize_application_created_by=Este aplicativo foi criado por %s.
authorize_application_description=Se você conceder o acesso, ele será capaz de acessar e escrever em todas as informações da sua conta, incluindo repositórios privados e organizações.
@@ -409,8 +474,10 @@ authorize_title=Autorizar "%s" para acessar sua conta?
authorization_failed=Autorização falhou
authorization_failed_desc=A autorização falhou porque detectamos uma solicitação inválida. Entre em contato com o responsável do aplicativo que você tentou autorizar.
sspi_auth_failed=Falha de autenticação SSPI
+password_pwned=A senha que você escolheu faz parte de uma lista de senhas roubadas expostas anteriormente em violações de dados. Tente novamente com uma senha diferente e considere alterar a senha em outros lugares.
password_pwned_err=Não foi possível concluir a requisição ao HaveIBeenPwned
last_admin=Você não pode remover o último administrador. Deve haver pelo menos um administrador.
+back_to_sign_in=Voltar ao Login
[mail]
view_it_on=Veja em %s
@@ -427,8 +494,9 @@ activate_email=Verifique seu endereço de e-mail
activate_email.title=%s, por favor verifique o seu endereço de e-mail
activate_email.text=Por favor clique no link a seguir para verificar o seu endereço de e-mail em %s :
+register_notify=Bem-vindo ao %s
register_notify.title=%[1]s, bem-vindo(a) a %[2]s
-register_notify.text_1=este é o seu e-mail de confirmação de registro para %s!
+register_notify.text_1=Este é o seu e-mail de confirmação de registro para %s!
register_notify.text_2=Agora você pode entrar com o nome de usuário: %s.
register_notify.text_3=Se esta conta foi criada para você, defina sua senha primeiro.
@@ -461,8 +529,8 @@ release.new.text=@%[1]s lançou a versão %[2]s em %[3]s
release.title=Título: %s
release.note=Nota:
release.downloads=Downloads:
-release.download.zip=Código fonte (ZIP)
-release.download.targz=Código fonte (TAR.GZ)
+release.download.zip=Código Fonte (ZIP)
+release.download.targz=Código Fonte (TAR.GZ)
repo.transfer.subject_to=%s gostaria de transferir "%s" para %s
repo.transfer.subject_to_you=%s gostaria de transferir "%s" para você
@@ -489,7 +557,7 @@ UserName=Nome de usuário
RepoName=Nome do repositório
Email=Endereço de e-mail
Password=Senha
-Retype=Confirmar senha
+Retype=Confirmar Senha
SSHTitle=Nome da chave SSH
HttpsUrl=URL HTTPS
PayloadUrl=URL de carga
@@ -505,7 +573,7 @@ TreeName=Caminho do arquivo
Content=Conteúdo
SSPISeparatorReplacement=Separador
-SSPIDefaultLanguage=Idioma padrão
+SSPIDefaultLanguage=Idioma Padrão
require_error=` não pode estar em branco.`
alpha_dash_error=` deve conter somente alfanumérico, caracteres de traço ('-') e sublinhado ('_').`
@@ -528,6 +596,8 @@ lang_select_error=Selecione um idioma da lista.
username_been_taken=O nome de usuário já está sendo usado.
username_change_not_local_user=Usuários não-locais não são autorizados a alterar nome de usuário.
+change_username_disabled=Alterar nome de usuário está desabilitado.
+change_full_name_disabled=Alterar nome completo está desabilitado.
username_has_not_been_changed=Nome de usuário não foi alterado
repo_name_been_taken=O nome de repositório já está sendo usado.
repository_force_private=Forçar Privado está ativado: repositórios privados não podem ser tornados públicos.
@@ -542,6 +612,7 @@ team_name_been_taken=O nome da equipe já está sendo usado.
team_no_units_error=Permitir acesso a pelo menos uma seção de repositório.
email_been_used=Este endereço de e-mail já está sendo usado.
email_invalid=O endereço de email é inválido.
+email_domain_is_not_allowed=O domínio do e-mail do usuário %s conflita com EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Por favor, certifique-se de que a sua operação é esperada.
openid_been_used=O endereço OpenID "%s" já está sendo usado.
username_password_incorrect=Nome de usuário ou senha incorretos.
password_complexity=A senha não passa pelos requisitos de complexidade:
@@ -553,6 +624,8 @@ enterred_invalid_repo_name=O nome do repositório que você digitou está incorr
enterred_invalid_org_name=O nome da organização inserido é incorreto.
enterred_invalid_owner_name=O nome do novo proprietário não é válido.
enterred_invalid_password=A senha que você digitou está incorreta.
+unset_password=O usuário de login não definiu a senha.
+unsupported_login_type=O tipo de login não é suportado para excluir a conta.
user_not_exist=O usuário não existe.
team_not_exist=A equipe não existe.
last_org_owner=Você não pode remover o último usuário do time 'proprietários'. Deve haver pelo menos um proprietário em uma organização.
@@ -574,6 +647,7 @@ org_still_own_repo=Esta organização ainda possui repositórios, exclua ou tran
org_still_own_packages=Esta organização ainda possui pacotes, exclua-os primeiro.
target_branch_not_exist=O branch de destino não existe.
+target_ref_not_exist=Ref de destino não existe %s
admin_cannot_delete_self=Você não pode excluir você mesmo quando você é um administrador. Por favor, remova seus privilégios de administrador primeiro.
@@ -581,11 +655,11 @@ admin_cannot_delete_self=Você não pode excluir você mesmo quando você é um
change_avatar=Altere seu avatar...
joined_on=Inscreveu-se em %s
repositories=Repositórios
-activity=Atividade pública
+activity=Atividade Pública
followers=Seguidores
-show_more=Mostrar mais
-starred=Repositórios favoritos
-watched=Repositórios observados
+show_more=Mostrar Mais
+starred=Repositórios Favoritos
+watched=Repositórios Observados
code=Código
projects=Projetos
overview=Visão geral
@@ -597,12 +671,28 @@ disabled_public_activity=Este usuário desativou a visibilidade pública da ativ
email_visibility.limited=Seu endereço de e-mail está visível para todos os usuários autenticados
email_visibility.private=Seu endereço de e-mail é visível apenas para você e administradores
show_on_map=Mostrar este lugar em um mapa
-settings=Configurações do usuário
+settings=Configurações do Usuário
form.name_reserved=O nome de usuário "%s" está reservado.
form.name_pattern_not_allowed=O padrão de "%s" não é permitido em um nome de usuário.
form.name_chars_not_allowed=Nome de usuário "%s" contém caracteres inválidos.
+block.block=Bloquear
+block.block.user=Bloquear usuário
+block.block.org=Bloquear usuário para organização
+block.block.failure=Falha ao bloquear usuário: %s
+block.unblock=Desbloquear
+block.unblock.failure=Falha ao desbloquear o usuário: %s
+block.blocked=Você bloqueou este usuário.
+block.title=Bloquear um usuário
+block.info_2=seguindo sua conta
+block.user_to_block=Usuário a bloquear
+block.note=Nota
+block.note.title=Nota opcional:
+block.note.info=A nota não é visível para o usuário bloqueado.
+block.note.edit=Editar nota
+block.list=Usuários bloqueados
+block.list.none=Você não bloqueou nenhum usuário.
[settings]
profile=Perfil
@@ -612,24 +702,27 @@ password=Senha
security=Segurança
avatar=Avatar
ssh_gpg_keys=Chaves SSH / GPG
-social=Contas sociais
+social=Contas Sociais
applications=Aplicativos
-orgs=Gerenciar organizações
+orgs=Gerenciar Organizações
repos=Repositórios
-delete=Excluir conta
-account_link=Contas vinculadas
+delete=Excluir Conta
+twofa=Autenticação de Dois Fatores (TOTP)
+account_link=Contas Vinculadas
organization=Organizações
uid=UID
+webauthn=Autenticação de Dois Fatores (Chaves de Segurança)
-public_profile=Perfil público
+public_profile=Perfil Público
biography_placeholder=Conte-nos um pouco sobre você! (Você pode usar Markdown)
location_placeholder=Compartilhe sua localização aproximada com outras pessoas
profile_desc=Controle como o seu perfil é exibido para outros usuários. Seu endereço de e-mail principal será usado para notificações, recuperação de senha e operações do Git baseadas na Web.
-full_name=Nome completo
+password_username_disabled=Você não tem permissão para mudar seu nome de usuário. Entre em contato com o administrador do site para mais detalhes.
+full_name=Nome Completo
website=Site
location=Localização
-update_theme=Atualizar o tema
-update_profile=Atualizar o perfil
+update_theme=Atualizar o Tema
+update_profile=Atualizar o Perfil
update_language=Atualizar Idioma
update_language_not_found=Idioma "%s" não está disponível.
update_language_success=O idioma foi atualizado.
@@ -642,6 +735,7 @@ cancel=Cancelar
language=Idioma
ui=Tema
hidden_comment_types=Tipos de comentários ocultos
+hidden_comment_types_description=Tipos de comentários marcados aqui não serão mostrados nas páginas de issues. Marcar "Etiqueta", por exemplo, remove todos os comentários "{usuário} adicionou/removeu {etiqueta}".
hidden_comment_types.ref_tooltip=Comentários onde este issue foi referenciado de outro issue/commit/…
hidden_comment_types.issue_ref_tooltip=Comentários onde o usuário altera o branch/tag associado ao issue
comment_type_group_reference=Referência
@@ -650,7 +744,7 @@ comment_type_group_milestone=Marco
comment_type_group_assignee=Atribuído
comment_type_group_title=Título
comment_type_group_branch=Branch
-comment_type_group_time_tracking=Contador de tempo
+comment_type_group_time_tracking=Cronômetro
comment_type_group_deadline=Prazo final
comment_type_group_dependency=Dependência
comment_type_group_lock=Status de Bloqueio
@@ -660,30 +754,30 @@ comment_type_group_project=Projeto
comment_type_group_issue_ref=Referência do issue
saved_successfully=Suas configurações foram salvas com sucesso.
privacy=Privacidade
-keep_activity_private=Ocultar atividade da página de perfil
+keep_activity_private=Ocultar Atividade da Página de Perfil
keep_activity_private_popup=Torna a atividade visível somente para você e os administradores
-lookup_avatar_by_mail=Procurar o avatar do endereço de e-mail
-federated_avatar_lookup=Busca de avatar federativo
-enable_custom_avatar=Habilitar avatar customizado
+lookup_avatar_by_mail=Procurar o Avatar do Endereço de E-mail
+federated_avatar_lookup=Busca de Avatar Federativo
+enable_custom_avatar=Usar Avatar Customizado
choose_new_avatar=Escolha um novo avatar
-update_avatar=Atualizar o avatar
-delete_current_avatar=Excluir o avatar atual
+update_avatar=Atualizar o Avatar
+delete_current_avatar=Excluir o Avatar Atual
uploaded_avatar_not_a_image=O arquivo enviado não é uma imagem.
uploaded_avatar_is_too_big=O tamanho do arquivo enviado (%d KiB) excede o tamanho máximo permitido (%d KiB).
update_avatar_success=Seu avatar foi atualizado.
update_user_avatar_success=O avatar do usuário foi atualizado.
-change_password=Atualizar senha
-old_password=Senha atual
-new_password=Nova senha
-retype_new_password=Confirmar nova senha
+change_password=Atualizar Senha
+old_password=Senha Atual
+new_password=Nova Senha
+retype_new_password=Confirmar Nova Senha
password_incorrect=A senha atual está incorreta.
change_password_success=Sua senha foi atualizada. Acesse usando sua nova senha de agora em diante.
password_change_disabled=Contas não-locais não podem alterar sua senha através da interface web do Gitea.
-emails=Endereços de e-mail
-manage_emails=Gerenciar endereços de e-mail
+emails=Endereços de E-mail
+manage_emails=Gerenciar Endereços de E-mail
manage_themes=Selecione o tema padrão
manage_openid=Gerencia endereços OpenID
email_desc=Seu endereço de e-mail principal será usado para notificações, recuperação de senha e, desde que não esteja oculto, para operações do Git baseadas na Web.
@@ -693,33 +787,33 @@ activated=Ativado
requires_activation=Requer ativação
primary_email=Tornar Principal
activate_email=Enviar Ativação
-activations_pending=Ativações pendentes
+activations_pending=Ativações Pendentes
can_not_add_email_activations_pending=Há uma ativação pendente, tente novamente em alguns minutos se quiser adicionar um novo e-mail.
delete_email=Remover
-email_deletion=Remover endereço de e-mail
-email_deletion_desc=O endereço de e-mail e informações relacionadas serão removidos de sua conta. Commits aplicados por este endereço de e-mail permanecerão inalterados. Continuar?
+email_deletion=Remover Endereço de E-mail
+email_deletion_desc=Este endereço de e-mail e informações relacionadas serão removidos de sua conta. Commits aplicados por este endereço de e-mail permanecerão inalterados. Continuar?
email_deletion_success=O endereço de e-mail foi removido.
theme_update_success=Seu tema foi atualizado.
theme_update_error=O tema selecionado não existe.
openid_deletion=Remover endereço de OpenID
openid_deletion_desc=A exclusão deste endereço OpenID da sua conta impedirá que você acesse com ele. Continuar?
openid_deletion_success=O endereço de OpenID foi removido.
-add_new_email=Adicionar novo endereço de e-mail
+add_new_email=Adicionar Novo Endereço de E-mail
add_new_openid=Adicionar novo URI OpenID
-add_email=Adicionar novo endereço de e-mail
+add_email=Adicionar Endereço de E-mail
add_openid=Adicionar URI OpenID
add_email_confirmation_sent=Um e-mail de confirmação foi enviado para "%s". Verifique sua caixa de entrada nos próximos %s para confirmar seu endereço de e-mail.
add_email_success=O novo endereço de e-mail foi adicionado.
email_preference_set_success=Preferência de e-mail definida com sucesso.
add_openid_success=O novo endereço de OpenID foi adicionado.
-keep_email_private=Ocultar endereço de e-mail
+keep_email_private=Ocultar Endereço de E-mail
keep_email_private_popup=Isso ocultará seu endereço de e-mail do seu perfil, bem como quando você fizer um pull request ou editar um arquivo usando a interface Web. Os commits enviados não serão modificados.
openid_desc=OpenID permite delegar autenticação para um provedor externo.
manage_ssh_keys=Gerenciar Chaves SSH
manage_ssh_principals=Gerenciar Nomes Principais do certificado SSH
manage_gpg_keys=Gerenciar chaves GPG
-add_key=Adicionar chave
+add_key=Adicionar Chave
ssh_desc=Estas chaves SSH públicas estão associados a sua conta. Chaves privadas correspondentes permitam acesso completo a seus repositórios.
principal_desc=Estes nomes principais do certificado SSH estão associados à sua conta e permitem acesso total aos seus repositórios.
gpg_desc=Essas chaves GPG públicas estão associadas à sua conta. Mantenha suas chaves privadas seguras, pois elas permitem que os commits sejam verificados.
@@ -735,19 +829,19 @@ ssh_key_name_used=Uma chave SSH com o mesmo nome já existe em sua conta.
ssh_principal_been_used=Este nome principal já foi adicionada ao servidor.
gpg_key_id_used=Uma chave GPG pública com a mesma ID já existe.
gpg_no_key_email_found=Esta chave GPG não corresponde a nenhum endereço de e-mail ativado associado à sua conta. Ela ainda pode ser adicionada se você assinar o token fornecido.
-gpg_key_matched_identities=Identidades correspondentes:
+gpg_key_matched_identities=Identidades Correspondentes:
gpg_key_matched_identities_long=As identidades incorporadas nesta chave coincidem com os seguintes endereços de email ativados para este usuário. Os commits correspondentes a estes endereços de e-mail podem ser verificados com esta chave.
-gpg_key_verified=Chave validada
+gpg_key_verified=Chave Validada
gpg_key_verified_long=A chave foi validada com um token e pode ser usada para verificar commits correspondentes a qualquer endereço de e-mail ativado para esse usuário, além de quaisquer identidades correspondentes para essa chave.
gpg_key_verify=Validar
-gpg_invalid_token_signature=A chave GPG fornecida, a assinatura ou o token não correspondem ou o token está desatualizado.
+gpg_invalid_token_signature=A chave GPG fornecida, a assinatura e o token não correspondem ou então o token expirou.
gpg_token_required=Você tem que fornecer uma assinatura para o token abaixo
gpg_token=Token
gpg_token_help=Você pode gerar uma assinatura usando:
gpg_token_signature=Assinatura GPG blindada
key_signature_gpg_placeholder=Começa com '-----BEGIN PGP SIGNATURE-----'
verify_gpg_key_success=A chave GPG "%s" foi validada.
-ssh_key_verified=Chave validada
+ssh_key_verified=Chave Validada
ssh_key_verified_long=A chave foi validada com um token e pode ser usada para validar commits que correspondam a qualquer dos endereços de e-mail ativados deste usuário.
ssh_key_verify=Validar
ssh_invalid_token_signature=A chave, assinatura ou token SSH fornecidos não coincidem, ou então o token expirou.
@@ -758,7 +852,7 @@ ssh_token_signature=Assinatura SSH blindada
key_signature_ssh_placeholder=Começa com '-----BEGIN SSH SIGNATURE-----'
verify_ssh_key_success=A chave SSH "%s" foi validada.
subkeys=Subchaves
-key_id=ID da chave
+key_id=ID da Chave
key_name=Nome da Chave
key_content=Conteúdo
principal_content=Conteúdo
@@ -771,7 +865,7 @@ gpg_key_deletion=Remover a chave GPG
ssh_principal_deletion=Remover Nome Principal do Certificado SSH
ssh_key_deletion_desc=A exclusão de uma chave SSH revoga seu acesso à sua conta. Continuar?
gpg_key_deletion_desc=A exclusão de uma chave GPG cancela a verificação de confirmações assinadas por ela. Continuar?
-ssh_principal_deletion_desc=A exclusão de um Nome Principal de um Certificado SSH revoga o seu acesso à sua conta. Proceder?
+ssh_principal_deletion_desc=A remoção de um Certificado de SSH Principal revoga seu acesso à sua conta. Continuar?
ssh_key_deletion_success=A chave SSH foi removida.
gpg_key_deletion_success=A chave GPG foi removida.
ssh_principal_deletion_success=O nome principal foi removido.
@@ -787,23 +881,23 @@ token_state_desc=Este token tem sido utilizado nos últimos 7 dias
principal_state_desc=Este nome principal foi utilizado nos últimos 7 dias
show_openid=Mostrar no perfil
hide_openid=Ocultar no perfil
-ssh_disabled=SSH desabilitado
+ssh_disabled=SSH Desabilitado
ssh_signonly=O SSH está desativado no momento, portanto, essas chaves são usadas apenas para verificação de assinatura de confirmação.
ssh_externally_managed=Esta chave SSH para este usuário é gerenciada externamente
-manage_social=Gerenciar contas sociais associadas
+manage_social=Gerenciar Contas Sociais Associadas
social_desc=Essas contas sociais podem ser usadas para fazer login em sua conta. Certifique-se de reconhecer todas elas.
unbind=Desvincular
unbind_success=A conta social foi removida com sucesso.
-manage_access_token=Gerenciar tokens de acesso
-generate_new_token=Gerar novo token
+manage_access_token=Gerenciar Tokens de Acesso
+generate_new_token=Gerar Novo Token
tokens_desc=Esses tokens concedem acesso à sua conta usando a API do Gitea.
-token_name=Nome do token
-generate_token=Gerar token
+token_name=Nome do Token
+generate_token=Gerar Token
generate_token_success=Seu novo token foi gerado. Copie-o agora, pois ele não será mostrado novamente.
generate_token_name_duplicate=%s já foi usado como um nome de aplicativo. Por favor, use outro.
delete_token=Excluir
-access_token_deletion=Excluir token de acesso
+access_token_deletion=Excluir Token de Acesso
access_token_deletion_cancel_action=Cancelar
access_token_deletion_confirm_action=Excluir
access_token_deletion_desc=A exclusão de um token revoga o acesso à sua conta para aplicativos que o usam. Continuar?
@@ -811,9 +905,11 @@ delete_token_success=O token foi excluído. Os aplicativos que o utilizam já n
repo_and_org_access=Acesso ao Repositório e Organização
permissions_public_only=Apenas público
permissions_access_all=Todos (público, privado e limitado)
-permission_no_access=Sem acesso
+permission_not_set=Não definido
+permission_no_access=Sem Acesso
permission_read=Ler
-permission_write=Ler e escrever
+permission_write=Ler e Escrever
+access_token_desc=As permissões de token selecionadas limitam a autorização somente às rotas da API correspondente. Leia a documentação para obter mais informações.
at_least_one_permission=Você deve selecionar pelo menos uma permissão para criar um token
permissions_list=Permissões:
@@ -824,10 +920,10 @@ remove_oauth2_application=Remover aplicativo OAuth2
remove_oauth2_application_desc=Remover um aplicativo OAuth2 irá revogar o acesso a todos os tokens de acesso assinados. Continuar?
remove_oauth2_application_success=O aplicativo foi excluído.
create_oauth2_application=Criar um novo aplicativo OAuth2
-create_oauth2_application_button=Criar aplicativo
+create_oauth2_application_button=Criar Aplicativo
create_oauth2_application_success=Você criou um aplicativo OAuth2 com sucesso.
update_oauth2_application_success=Você atualizou o aplicativo OAuth2 com sucesso.
-oauth2_application_name=Nome do aplicativo
+oauth2_application_name=Nome do Aplicativo
oauth2_confidential_client=Cliente Confidencial. Selecione para aplicativos que mantêm a confidencialidade do segredo, como aplicativos web. Não selecione para aplicativos nativos, incluindo aplicativos desktop e celulares.
oauth2_redirect_uris=URIs de redirecionamento. Por favor use uma nova linha para cada URI.
save_application=Salvar
@@ -844,36 +940,42 @@ oauth2_application_locked=O Gitea pré-registra alguns aplicativos OAuth2 na ini
authorized_oauth2_applications=Aplicações OAuth2 autorizadas
authorized_oauth2_applications_description=Você concedeu acesso à sua conta pessoal da Gitea para esses aplicativos de terceiros. Revogue o acesso aos aplicativos de que não precisa mais.
revoke_key=Revogar
-revoke_oauth2_grant=Revogar acesso
-revoke_oauth2_grant_description=Revogando o acesso para este aplicativo de terceiros impedirá este aplicativo de acessar seus dados. Tem certeza?
+revoke_oauth2_grant=Revogar Acesso
+revoke_oauth2_grant_description=Revogar o acesso para este aplicativo de terceiros impedirá este aplicativo de acessar seus dados. Tem certeza?
revoke_oauth2_grant_success=Acesso revogado com sucesso.
+twofa_desc=Para proteger sua conta contra roubo de senhas, você pode usar um smartphone ou outro dispositivo para receber senhas únicas baseadas em tempo único ("TOTP").
twofa_recovery_tip=Se você perder o seu dispositivo, você será capaz de usar uma chave de recuperação de uso único para recuperar o acesso à sua conta.
twofa_is_enrolled=Sua conta está atualmente habilitada com autenticação de dois fatores.
-twofa_not_enrolled=Sua conta não está atualmente inscrita para a autenticação em duas etapas.
-twofa_disable=Desabilitar a autenticação de dois fatores
-twofa_enroll=Inscrever para a autenticação de dois fatores
+twofa_not_enrolled=Sua conta não está usando autenticação em dois fatores.
+twofa_disable=Desabilitar Autenticação de Dois Fatores
+twofa_scratch_token_regenerate=Regenerar Chave de Recuperação de Uso-Único
+twofa_scratch_token_regenerated=Sua chave de recuperação de uso único agora é %s. Armazene-a em um lugar seguro, pois não será mostrada novamente.
+twofa_enroll=Habilitar Autenticação de Dois Fatores
twofa_disable_note=Você pode desabilitar a autenticação de dois fatores se necessário.
twofa_disable_desc=Desabilitar a autenticação de dois fatores tornará sua conta menos segura. Tem certeza que deseja continuar?
+regenerate_scratch_token_desc=Se você perdeu o seu token de backup, ou teve que usá-lo para realizar um acesso, você pode redefini-lo.
twofa_disabled=A autenticação de dois fatores foi desabilitada.
scan_this_image=Escaneie esta imagem com o seu aplicativo de autenticação:
or_enter_secret=Ou digite esse código: %s
then_enter_passcode=E insira a senha mostrada no aplicativo:
passcode_invalid=Esse código de acesso é inválido. Tente novamente.
+twofa_enrolled=Sua conta foi habilitada com sucesso. Armazene sua chave de recuperação de uso único (%s) em um lugar seguro, pois ela não será exibida novamente.
twofa_failed_get_secret=Falha ao obter o segredo.
-webauthn_register_key=Adicionar chave de segurança
+webauthn_desc=Chaves de segurança são dispositivos de hardware que contém chaves criptográficas. Elas podem ser usadas para autenticação de dois fatores. A chave de segurança deve suportar o padrão WebAuthn Authenticator .
+webauthn_register_key=Adicionar Chave de Segurança
webauthn_nickname=Apelido
-webauthn_delete_key=Remover chave de segurança
-webauthn_delete_key_desc=Se você remover uma chave de segurança, não poderá mais entrar com ela. Continuar?
+webauthn_delete_key=Remover Chave de Segurança
+webauthn_delete_key_desc=Se você remover uma chave de segurança, não poderá mais entrar usando ela. Continuar?
webauthn_key_loss_warning=Se você perder suas chaves de segurança, perderá o acesso à sua conta.
webauthn_alternative_tip=Você pode querer configurar um método de autenticação adicional.
-manage_account_links=Gerenciar contas vinculadas
+manage_account_links=Gerenciar Contas Vinculadas
manage_account_links_desc=Estas contas externas estão vinculadas a sua conta de Gitea.
-account_links_not_available=Não existem contas externas atualmente vinculadas a esta conta.
+account_links_not_available=Nenhuma conta externa está conectada à sua conta de Gitea.
link_account=Vincular Conta
-remove_account_link=Remover conta vinculada
+remove_account_link=Remover Conta Vinculada
remove_account_link_desc=A exclusão da chave SSH revogará o acesso à sua conta. Continuar?
remove_account_link_success=A conta vinculada foi removida.
@@ -882,17 +984,17 @@ hooks.desc=Adicione webhooks que serão acionados para todos os reposit
orgs_none=Você não é membro de nenhuma organização.
repos_none=Você não é proprietário de nenhum repositório.
-delete_account=Excluir sua conta
+delete_account=Excluir Sua Conta
delete_prompt=Esta operação irá apagar permanentemente a sua conta de usuário. Isto NÃO PODERÁ ser desfeito.
delete_with_all_comments=Sua conta é mais nova que %s. Para evitar comentários fantasmas, todos os comentários de Issue/PR serão excluídos com ela.
-confirm_delete_account=Confirmar exclusão
-delete_account_title=Excluir conta de usuário
+confirm_delete_account=Confirmar Exclusão
+delete_account_title=Excluir Conta de Usuário
delete_account_desc=Tem certeza que deseja apagar sua conta de usuário permanentemente?
-email_notifications.enable=Habilitar notificações de e-mail
-email_notifications.onmention=Somente e-mail com menção
-email_notifications.disable=Desabilitar notificações de e-mail
-email_notifications.submit=Atualizar preferências de e-mail
+email_notifications.enable=Habilitar Notificações de E-mail
+email_notifications.onmention=Somente E-mail com Menção
+email_notifications.disable=Desabilitar Notificações de E-mail
+email_notifications.submit=Definir Preferências de E-mail
email_notifications.andyourown=E Suas Próprias Notificações
visibility=Visibilidade do usuário
@@ -926,8 +1028,10 @@ fork_to_different_account=Faça um fork para uma conta diferente
fork_visibility_helper=A visibilidade do fork de um repositório não pode ser alterada.
fork_branch=Branch a ser clonado para o fork
all_branches=Todos os branches
-fork_no_valid_owners=Não é possível fazer um fork desse repositório porque não há proprietários validos.
+view_all_branches=Ver todos branches
+view_all_tags=Ver todas as tags
use_template=Usar este modelo
+open_with_editor=Abrir com %s
download_zip=Baixar ZIP
download_tar=Baixar TAR.GZ
download_bundle=Baixar PACOTE
@@ -935,6 +1039,8 @@ generate_repo=Gerar repositório
generate_from=Gerar de
repo_desc=Descrição
repo_desc_helper=Digite uma breve descrição (opcional)
+repo_no_desc=Descrição não fornecida
+repo_lang=Linguagens
repo_gitignore_helper=Selecione modelos do .gitignore.
repo_gitignore_helper_desc=Escolha os arquivos que não serão rastreados da lista de modelos para linguagens comuns. Artefatos típicos gerados pelos compiladores de cada linguagem estão incluídos no .gitignore por padrão.
issue_labels=Etiquetas de issue
@@ -942,10 +1048,11 @@ issue_labels_helper=Selecione um conjunto de etiquetas de issue.
license=Licença
license_helper=Selecione um arquivo de licença.
license_helper_desc=Uma licença define o que os outros podem e não podem fazer com o seu código. Não tem certeza qual é a mais adequada para o seu projeto? Veja Escolher uma licença.
-readme=LEIA-ME
-readme_helper=Selecione um modelo de arquivo LEIA-ME.
+multiple_licenses=Múltiplas Licenças
+readme=README
+readme_helper=Selecione um modelo de arquivo README.
readme_helper_desc=Aqui você pode escrever uma descrição completa para o seu projeto.
-auto_init=Inicializar o repositório (adicionando .gitignore, licença e LEIA-ME)
+auto_init=Inicializar o repositório (adicionando .gitignore, licença e README)
trust_model_helper=Selecione o modelo de confiança para verificação de assinatura. As opções possíveis são:
trust_model_helper_collaborator=Colaborador: Confiar em assinaturas de colaboradores
trust_model_helper_committer=Committer: Confiar em assinaturas que correspondem aos committers
@@ -977,11 +1084,11 @@ watchers=Observadores
stargazers=Usuários que estrelaram
stars_remove_warning=Isto irá remover todos os favoritos dados a este repositório.
forks=Forks
+stars=Favoritos
reactions_more=e %d mais
unit_disabled=O administrador do site desabilitou esta seção do repositório.
language_other=Outra
-adopt_search=Digite o nome de usuário para pesquisar por repositórios órfãos... (deixe em branco para encontrar todos)
-adopt_preexisting_label=Adotar arquivos
+adopt_preexisting_label=Adotar Arquivos
adopt_preexisting=Adotar arquivos pré-existentes
adopt_preexisting_content=Criar repositório a partir de %s
adopt_preexisting_success=Arquivos adotados e repositório criado a partir de %s
@@ -993,12 +1100,15 @@ blame_prior=Ver a responsabilização anterior a esta modificação
transfer.accept=Aceitar transferência
+transfer.accept_desc=`Transferir para "%s"`
transfer.reject=Rejeitar transferência
+transfer.reject_desc=`Cancelar a transferência para "%s"`
transfer.no_permission_to_accept=Você não tem permissão para aceitar essa transferência.
transfer.no_permission_to_reject=Você não tem permissão para rejeitar essa transferência.
desc.private=Privado
desc.public=Público
+desc.public_access=Acesso Público
desc.template=Template
desc.internal=Interno
desc.archived=Arquivado
@@ -1015,8 +1125,6 @@ template.issue_labels=Etiquetas de issue
template.one_item=Deve-se selecionar pelo menos um item de modelo
template.invalid=Deve-se selecionar um repositório de modelo
-archive.title=Este repositório está arquivado. Você pode visualizar arquivos e cloná-lo, mas não pode fazer push, abrir issues ou pull requests.
-archive.title_date=Este repositório foi arquivado em %s. Você pode visualizar arquivos e cloná-lo, mas não pode fazer push, abrir issues ou pull requests.
archive.issue.nocomment=Este repositório está arquivado. Você não pode comentar nas issues.
archive.pull.nocomment=Este repositório está arquivado. Você não pode comentar nos pull requests.
@@ -1033,22 +1141,19 @@ migrate_options_lfs=Migrar arquivos LFS
migrate_options_lfs_endpoint.label=Destino LFS
migrate_options_lfs_endpoint.description=A migração tentará usar seu controle remoto Git para determinar o servidor LFS . Você também pode especificar um destino personalizado se os dados do repositório LFS forem armazenados em outro lugar.
migrate_options_lfs_endpoint.description.local=Um caminho de servidor local também é suportado.
-migrate_options_lfs_endpoint.placeholder=Se for deixado em branco, o endpoint será derivado do URL do clone
migrate_items=Itens da migração
migrate_items_wiki=Wiki
migrate_items_milestones=Marcos
migrate_items_labels=Etiquetas
migrate_items_issues=Issues
-migrate_items_pullrequests=Pull requests
+migrate_items_pullrequests=Pull Requests
migrate_items_merge_requests=Requisições de merge
migrate_items_releases=Versões
migrate_repo=Migrar repositório
migrate.clone_address=Migrar / Clonar de URL
migrate.clone_address_desc=URL HTTP (S) ou Git 'clone' de um repositório existente
-migrate.github_token_desc=Você pode colocar aqui um ou mais tokens separados por vírgulas para tornar a migração mais rápida para compensar o limite de taxa de API do GitHub. AVISO: abusar desse recurso pode violar a política do provedor de serviços e levar ao bloqueio da conta.
migrate.clone_local_path=ou um caminho de servidor local
migrate.permission_denied=Você não pode importar repositórios locais.
-migrate.permission_denied_blocked=Você não pode importar dos hosts não permitidos, por favor peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=O caminho local é inválido. Ele não existe ou não é um diretório.
migrate.invalid_lfs_endpoint=O destino LFS não é válido.
migrate.failed=Migração falhou: %v
@@ -1056,7 +1161,6 @@ migrate.migrate_items_options=Um Token de Acesso é necessário para migrar iten
migrated_from=Migrado de %[2]s
migrated_from_fake=Migrado de %[1]s
migrate.migrate=Migrar de %s
-migrate.migrating=Migrando a partir de %s ...
migrate.migrating_failed=Migração a partir de %s falhou.
migrate.migrating_failed.error=Falha ao migrar: %s
migrate.migrating_failed_no_addr=A migração falhou.
@@ -1077,6 +1181,7 @@ migrate.migrating_issues=Migrando Issues
migrate.migrating_pulls=Migrando Pull Requests
migrate.cancel_migrating_title=Cancelar migração
migrate.cancel_migrating_confirm=Você quer cancelar essa migração?
+migration_status=Status da migração
mirror_from=espelhamento de
forked_from=feito fork de
@@ -1098,7 +1203,6 @@ clone_this_repo=Clonar este repositório
cite_this_repo=Citar este repositório
create_new_repo_command=Criando um novo repositório por linha de comando
push_exist_repo=Realizando push para um repositório existente por linha de comando
-empty_message=Este repositório está vazio.
broken_message=Os dados Git subjacentes a este repositório não podem ser lidos. Entre em contato com o administrador desta instância ou exclua este repositório.
code=Código
@@ -1116,7 +1220,6 @@ projects=Projetos
packages=Pacotes
actions=Ações
labels=Etiquetas
-org_labels_desc=Rótulos de nível de organização que podem ser usados em todos os repositórios sob esta organização
org_labels_desc_manage=gerenciar
milestone=Marco
@@ -1128,6 +1231,7 @@ releases=Versões
tag=Tag
released_this=lançou isto
tagged_this=criou essa tag
+file.title=%s em %s
file_raw=Original
file_history=Histórico
file_view_source=Exibir código-fonte
@@ -1135,6 +1239,7 @@ file_view_rendered=Ver Renderizado
file_view_raw=Ver original
file_permalink=Link permanente
file_too_large=O arquivo é muito grande para ser mostrado.
+file_is_empty=O arquivo está vazio.
invisible_runes_header=`Este arquivo contém caracteres Unicode invisíveis`
invisible_runes_description=`Este arquivo contém caracteres Unicode invisíveis que são indistinguíveis para humanos, mas que podem ser processados de forma diferente por um computador. Se você acha que isso é intencional, pode ignorar esse aviso com segurança. Use o botão Escapar para revelá-los`
ambiguous_runes_header=`Este arquivo contém caracteres Unicode ambíguos`
@@ -1161,7 +1266,7 @@ commit.contained_in_default_branch=Esse commit faz parte do branch padrão
commit.load_referencing_branches_and_tags=Carregar branches e tags que fazem referência a este commit
blame=Anotar
download_file=Baixar arquivo
-normal_view=Visão normal
+normal_view=Visão Normal
line=linha
lines=linhas
from_comment=(comentário)
@@ -1172,7 +1277,9 @@ editor.upload_file=Enviar arquivo
editor.edit_file=Editar arquivo
editor.preview_changes=Visualizar alterações
editor.cannot_edit_lfs_files=Arquivos LFS não podem ser editados na interface web.
+editor.cannot_edit_too_large_file=O arquivo é muito grande para ser editado.
editor.cannot_edit_non_text_files=Arquivos binários não podem ser editados na interface web.
+editor.file_not_editable_hint=Mas você ainda pode renomear ou movê-lo.
editor.edit_this_file=Editar arquivo
editor.this_file_locked=Arquivo está bloqueado
editor.must_be_on_a_branch=Você deve estar em um branch para propor alterações neste arquivo.
@@ -1186,12 +1293,12 @@ editor.or=ou
editor.cancel_lower=Cancelar
editor.commit_signed_changes=Commit de alteradores assinadas
editor.commit_changes=Aplicar commit das alterações
+editor.add_tmpl=Adicionar '{filename}'
editor.add=Adicionar %s
editor.update=Atualizar %s
editor.delete=Excluir %s
editor.patch=Aplicar Correção
editor.patching=Corrigindo:
-editor.fail_to_apply_patch=`Não foi possível aplicar a correção "%s"`
editor.new_patch=Nova correção
editor.commit_message_desc=Adicione uma descrição detalhada (opcional)...
editor.signoff_desc=Adicione um assinado-por-committer no final do log do commit.
@@ -1209,15 +1316,11 @@ editor.branch_already_exists=Branch "%s" já existe neste repositório.
editor.directory_is_a_file=O nome do diretório "%s" já é usado como um nome de arquivo neste repositório.
editor.file_is_a_symlink=`"%s" é um link simbólico. Links simbólicos não podem ser editados no editor da web`
editor.filename_is_a_directory=O nome do arquivo "%s" já é usado como um nome de diretório neste repositório.
-editor.file_editing_no_longer_exists=O arquivo que está sendo editado, "%s", não existe mais neste repositório.
-editor.file_deleting_no_longer_exists=O arquivo a ser excluído, "%s", não existe mais neste repositório.
editor.file_changed_while_editing=O conteúdo do arquivo mudou desde que você começou a editar. Clique aqui para ver o que foi editado ou clique em Aplicar commit das alterações novamemente para sobreescrever estas alterações.
editor.file_already_exists=Um arquivo com nome "%s" já existe neste repositório.
editor.commit_empty_file_header=Fazer commit de um arquivo vazio
editor.commit_empty_file_text=O arquivo que você está prestes fazer commit está vazio. Continuar?
editor.no_changes_to_show=Nenhuma alteração a mostrar.
-editor.fail_to_update_file=Falha ao atualizar/criar arquivo "%s".
-editor.fail_to_update_file_summary=Mensagem de erro:
editor.push_rejected_no_message=A alteração foi rejeitada pelo servidor sem uma mensagem. Por favor, verifique os Hooks Git.
editor.push_rejected=A alteração foi rejeitada pelo servidor. Por favor, verifique os Hooks Git.
editor.push_rejected_summary=Mensagem completa de rejeição:
@@ -1231,6 +1334,9 @@ editor.user_no_push_to_branch=O usuário não pode fazer push no branch
editor.require_signed_commit=Branch requer um commit assinado
editor.cherry_pick=Cherry-pick %s para:
editor.revert=Reverter %s para:
+editor.failed_to_commit=Falha ao criar commit das alterações.
+editor.failed_to_commit_summary=Mensagem de Erro:
+
commits.desc=Veja o histórico de alterações do código de fonte.
commits.commits=Commits
@@ -1307,6 +1413,8 @@ issues.filter_milestones=Filtrar Marco
issues.filter_projects=Filtrar Projeto
issues.filter_labels=Filtrar Rótulo
issues.filter_reviewers=Filtrar Revisor
+issues.filter_no_results=Nenhum resultado
+issues.filter_no_results_placeholder=Tente ajustar seus filtros de pesquisa.
issues.new=Nova issue
issues.new.title_empty=Título não pode ser em branco
issues.new.labels=Etiquetas
@@ -1333,7 +1441,7 @@ issues.choose.invalid_templates=%v modelo(s) inválido(s) encontrado(s)
issues.choose.invalid_config=A configuração da issue contém erros:
issues.no_ref=Nenhum branch/tag especificado
issues.create=Criar issue
-issues.new_label=Nova etiqueta
+issues.new_label=Nova Etiqueta
issues.new_label_placeholder=Nome da etiqueta
issues.new_label_desc_placeholder=Descrição
issues.create_label=Criar etiqueta
@@ -1388,7 +1496,6 @@ issues.filter_type.reviewed_by_you=Revisado por você
issues.filter_sort=Ordenação
issues.filter_sort.latest=Mais recentes
issues.filter_sort.oldest=Mais antigos
-issues.filter_sort.recentupdate=Mais recentemente atualizados
issues.filter_sort.leastupdate=Menos recentemente atualizados
issues.filter_sort.mostcomment=Mais comentados
issues.filter_sort.leastcomment=Menos comentados
@@ -1422,8 +1529,8 @@ issues.num_comments_1=%d comentário
issues.num_comments=%d comentários
issues.commented_at=`comentou %s `
issues.delete_comment_confirm=Tem certeza que deseja excluir este comentário?
-issues.context.copy_link=Copiar link
-issues.context.quote_reply=Citar resposta
+issues.context.copy_link=Copiar Link
+issues.context.quote_reply=Citar Resposta
issues.context.reference_issue=Referência em uma nova issue
issues.context.edit=Editar
issues.context.delete=Excluir
@@ -1431,7 +1538,9 @@ issues.no_content=Nenhuma descrição fornecida.
issues.close=Fechar issue
issues.comment_pull_merged_at=aplicou o merge do commit %[1]s em %[2]s %[3]s
issues.comment_manually_pull_merged_at=aplicou o merge manual do commit %[1]s em %[2]s %[3]s
+issues.close_comment_issue=Comentar e Fechar
issues.reopen_issue=Reabrir
+issues.reopen_comment_issue=Comentar e Reabrir
issues.create_comment=Comentar
issues.closed_at=`fechou esta issue %[2]s `
issues.reopened_at=`reabriu esta issue %[2]s `
@@ -1448,11 +1557,13 @@ issues.author_helper=Este usuário é o autor.
issues.role.owner=Proprietário
issues.role.owner_helper=Este usuário é o dono deste repositório.
issues.role.member=Membro
+issues.role.member_helper=Este usuário é um membro da organização proprietária deste repositório.
issues.role.collaborator=Colaborador
issues.role.collaborator_helper=Este usuário foi convidado para colaborar no repositório.
issues.role.first_time_contributor=Primeira vez contribuindo
issues.role.first_time_contributor_helper=Esta é a primeira contribuição deste usuário para o repositório.
issues.role.contributor=Contribuidor
+issues.role.contributor_helper=Este usuário já fez commit para o repositório.
issues.re_request_review=Re-solicitar revisão
issues.is_stale=Houve alterações nessa PR desde essa revisão
issues.remove_request_review=Remover solicitação de revisão
@@ -1466,6 +1577,7 @@ issues.save=Salvar
issues.label_title=Nome da etiqueta
issues.label_description=Descrição da etiqueta
issues.label_color=Cor da etiqueta
+issues.label_color_invalid=Cor inválida
issues.label_exclusive=Exclusivo
issues.label_archive=Arquivar etiqueta
issues.label_archived_filter=Mostrar etiquetas arquivadas
@@ -1502,7 +1614,6 @@ issues.lock_no_reason=bloqueada e conversação limitada para colaboradores %s
issues.unlock_comment=desbloqueada esta conversação %s
issues.lock_confirm=Bloquear
issues.unlock_confirm=Desbloquear
-issues.lock.notice_1=- Outros usuários não poderão adicionar novos comentários nesta issue.
issues.lock.notice_2=- Você e outros colaboradores com acesso a este repositório ainda podem deixar comentários que outros podem ver.
issues.lock.notice_3=- Você pode sempre desbloquear esta issue novamente no futuro.
issues.unlock.notice_1=- Todos poderão comentar mais uma vez nesta issue.
@@ -1515,10 +1626,17 @@ issues.delete=Apagar
issues.delete.title=Apagar esta issue?
issues.delete.text=Você realmente deseja excluir esta issue? (Isto irá remover permanentemente todo o conteúdo. Considere fechá-la em vez disso, se você pretende mantê-la arquivado)
-issues.tracker=Contador de tempo
+issues.tracker=Cronômetro
+issues.timetracker_timer_start=Iniciar cronômetro
+issues.timetracker_timer_stop=Parar cronômetro
+issues.timetracker_timer_discard=Descartar cronômetro
+issues.timetracker_timer_manually_add=Adicionar Tempo
-issues.tracker_auto_close=Contador de tempo será parado automaticamente quando esta issue for fechada
+issues.start_tracking_history=começou a trabalhar %s
+issues.tracker_auto_close=Cronômetro será parado automaticamente quando esta issue for fechada
issues.tracking_already_started=`Você já iniciou o cronômetro em outra issue !`
+issues.stop_tracking=Parar Cronômetro
+issues.stop_tracking_history=trabalhou por %[1]s %[2]s
issues.cancel_tracking_history=`cronômetro cancelado %s`
issues.del_time=Apagar este registro de tempo
issues.del_time_history=`removeu tempo gasto %s`
@@ -1528,7 +1646,7 @@ issues.add_time_sum_to_small=Nenhum tempo foi inserido.
issues.time_spent_total=Tempo total gasto
issues.time_spent_from_all_authors=`Tempo total gasto: %s`
-issues.due_date=Data limite
+issues.due_date=Data Limite
issues.invalid_due_date_format=Formato da data limite inválido, deve ser 'dd/mm/aaaa'.
issues.error_modifying_due_date=Falha ao modificar a data limite.
issues.error_removing_due_date=Falha ao remover a data limite.
@@ -1540,8 +1658,7 @@ issues.due_date_form=dd/mm/aaaa
issues.due_date_form_add=Adicionar data limite
issues.due_date_form_edit=Editar
issues.due_date_form_remove=Remover
-issues.due_date_not_writer=Você precisa de acesso de gravação a esse repositório para atualizar a data limite de uma issue.
-issues.due_date_not_set=Data limite não informada.
+issues.due_date_not_set=Data limite não definida.
issues.due_date_added=adicionou a data limite %s %s
issues.due_date_modified=modificou a data limite de %[2]s para %[1]s %[3]s
issues.due_date_remove=removeu a data limite %s %s
@@ -1563,25 +1680,22 @@ issues.dependency.pr_closing_blockedby=Fechamento deste pull request está bloqu
issues.dependency.issue_closing_blockedby=Fechamento desta issue está bloqueado pelas seguintes issues
issues.dependency.issue_close_blocks=Esta issue bloqueia o fechamento das seguintes issues
issues.dependency.pr_close_blocks=Este pull request bloqueia o fechamento das seguintes issues
-issues.dependency.issue_close_blocked=Você precisa fechar todas as issues que bloqueiam esta issue antes de poder fechá-la.
issues.dependency.issue_batch_close_blocked=Não é possível fechar as issues que você escolheu, porque a issue #%d ainda tem dependências abertas
-issues.dependency.pr_close_blocked=Você precisa fechar todas issues que bloqueiam este pull request antes de poder fazer o merge.
issues.dependency.blocks_short=Bloqueia
issues.dependency.blocked_by_short=Depende de
issues.dependency.remove_header=Remover dependência
issues.dependency.issue_remove_text=Isto removerá a dependência desta issue. Continuar?
issues.dependency.pr_remove_text=Isto removerá a dependência deste pull request. Continuar?
-issues.dependency.setting=Habilitar dependências para issues e pull requests
+issues.dependency.setting=Habilitar Dependências para Issues e Pull Requests
issues.dependency.add_error_same_issue=Você não pode fazer uma issue depender de si mesma.
issues.dependency.add_error_dep_issue_not_exist=Issue dependente não existe.
issues.dependency.add_error_dep_not_exist=Dependência não existe.
issues.dependency.add_error_dep_exists=Dependência já existe.
-issues.dependency.add_error_cannot_create_circular=Você não pode criar uma dependência com duas issues bloqueando uma a outra.
issues.dependency.add_error_dep_not_same_repo=Ambas as issues devem estar no mesmo repositório.
issues.review.self.approval=Você não pode aprovar o seu próprio pull request.
issues.review.self.rejection=Você não pode solicitar alterações em seu próprio pull request.
issues.review.approve=aprovou estas alterações %s
-issues.review.dismissed=rejeitou a revisão de %s %s
+issues.review.comment=revisou %s
issues.review.dismissed_label=Rejeitada
issues.review.left_comment=deixou um comentário
issues.review.content.empty=Você precisa deixar um comentário indicando as alterações solicitadas.
@@ -1641,13 +1755,12 @@ pulls.show_all_commits=Mostrar todos os commits
pulls.show_changes_since_your_last_review=Mostrar alterações desde sua última revisão
pulls.showing_only_single_commit=Mostrando apenas as alterações do commit %[1]s
pulls.showing_specified_commit_range=Mostrando apenas as alterações entre %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Selecionar commit. Mantenha pressionado shift + clique para selecionar um intervalo
pulls.review_only_possible_for_full_diff=A revisão só é possível ao visualizar todas as diferenças
pulls.filter_changes_by_commit=Filtrar por commit
pulls.nothing_to_compare=Estes branches são iguais. Não há nenhuma necessidade para criar um pull request.
pulls.nothing_to_compare_and_allow_empty_pr=Estes branches são iguais. Este PR ficará vazio.
pulls.has_pull_request=`Um pull request entre esses branches já existe: %[2]s#%[3]d `
-pulls.create=Criar pull request
+pulls.create=Criar Pull Request
pulls.title_desc=quer aplicar o merge de %[1]d commits de %[2]s em %[3]s
pulls.merged_title_desc=aplicou merge dos %[1]d commits de %[2]s em %[3]s %[4]s
pulls.change_target_branch_at=`mudou o branch de destino de %s para %s %s`
@@ -1690,16 +1803,12 @@ pulls.reject_count_1=%d pedido de alteração
pulls.reject_count_n=%d pedidos de alteração
pulls.waiting_count_1=aguardando %d revisão
pulls.waiting_count_n=aguardando %d revisões
-pulls.wrong_commit_id=id de commit tem que ser um id de commit no branch de destino
pulls.no_merge_desc=O merge deste pull request não pode ser aplicado porque todas as opções de mesclagem do repositório estão desabilitadas.
pulls.no_merge_helper=Habilite as opções de merge nas configurações do repositório ou faça o merge do pull request manualmente.
pulls.no_merge_wip=O merge deste pull request não pode ser aplicado porque está marcado como um trabalho em andamento.
-pulls.no_merge_not_ready=Este pull request não está pronto para ser realizado o merge, verifique o status da revisão e as verificações de status.
pulls.no_merge_access=Você não está autorizado para realizar o merge deste pull request.
pulls.merge_pull_request=Criar commit de merge
-pulls.rebase_merge_pull_request=Rebase e fast-forward
-pulls.rebase_merge_commit_pull_request=Rebase e criar commit de merge
pulls.squash_merge_pull_request=Criar commit de squash
pulls.fast_forward_only_merge_pull_request=Apenas Fast-forward
pulls.merge_manually=Merge feito manualmente
@@ -1707,13 +1816,8 @@ pulls.merge_commit_id=A ID de merge commit
pulls.require_signed_wont_sign=O branch requer commits assinados, mas este merge não será assinado
pulls.invalid_merge_option=Você não pode usar esta opção de merge neste pull request.
-pulls.merge_conflict=O merge falhou: Houve um conflito ao fazer merge. Dica: Tente uma estratégia diferente
pulls.merge_conflict_summary=Mensagem de erro
-pulls.rebase_conflict=O merge falhou: Houve um conflito durante o rebase do commit %[1]s. Dica: Tente uma estratégia diferente
pulls.rebase_conflict_summary=Mensagem de Erro
-pulls.unrelated_histories=Merge falhou: O merge do principal e da base não compartilham uma história comum. Dica: Tente uma estratégia diferente
-pulls.merge_out_of_date=Merge falhou: durante a geração do merge, a base não foi atualizada. Dica: Tente novamente.
-pulls.head_out_of_date=O merge falhou: Enquanto gerava o merge, a head foi atualizada. Dica: Tente novamente.
pulls.push_rejected_summary=Mensagem completa da rejeição
pulls.open_unmerged_pull_exists=`Não é possível executar uma operação de reabertura pois há um pull request pendente (#%d) com propriedades idênticas.`
pulls.status_checking=Algumas verificações estão pendentes
@@ -1737,7 +1841,6 @@ pulls.cmd_instruction_checkout_title=Checkout
pulls.cmd_instruction_merge_title=Merge
pulls.cmd_instruction_merge_desc=Faça merge das alterações e atualize no Gitea.
pulls.clear_merge_message=Limpar mensagem do merge
-pulls.clear_merge_message_hint=Limpar a mensagem de merge só irá remover o conteúdo da mensagem de commit e manter trailers git gerados, como "Co-Authored-By …".
pulls.auto_merge_button_when_succeed=(Quando a verificação for bem-sucedida)
pulls.auto_merge_when_succeed=Mesclar automaticamente quando todas as verificações forem bem sucedidas
@@ -1755,8 +1858,10 @@ pulls.delete.title=Excluir este pull request?
pulls.delete.text=Você realmente deseja excluir este pull request? (Isto irá remover permanentemente todo o conteúdo. Considere fechá-la em vez disso, se você pretende mantê-la arquivado)
pulls.recently_pushed_new_branches=Você fez push no branch %[1]s %[2]s
+pulls.upstream_diverging_merge=Sincronizar fork
pull.deleted_branch=(excluído):%s
+pull.agit_documentation=Veja a documentação sobre AGit
milestones.new=Novo marco
@@ -1776,7 +1881,7 @@ milestones.create_success=O marco "%s" foi criado.
milestones.edit=Editar marco
milestones.edit_subheader=Marcos organizam as issues e acompanham o progresso.
milestones.cancel=Cancelar
-milestones.modify=Atualizar marco
+milestones.modify=Atualizar Marco
milestones.edit_success=O marco "%s" foi atualizado.
milestones.deletion=Excluir marco
milestones.deletion_desc=A exclusão deste marco irá removê-lo de todas as issues. Tem certeza que deseja continuar?
@@ -1790,12 +1895,10 @@ milestones.filter_sort.most_issues=Com mais issues
milestones.filter_sort.least_issues=Com menos issues
signing.will_sign=Esse commit será assinado com a chave "%s".
-signing.wont_sign.error=Ocorreu um erro ao verificar se o commit poderia ser assinado.
signing.wont_sign.nokey=Não há nenhuma chave disponível para assinar esse commit.
signing.wont_sign.never=Commits nunca são assinados.
signing.wont_sign.always=Commits são sempre assinados.
signing.wont_sign.pubkey=O commit não será assinado porque você não tem uma chave pública associada à sua conta.
-signing.wont_sign.twofa=Você deve ter a autenticação de dois fatores ativada para que os commits sejam assinados.
signing.wont_sign.parentsigned=O commit não será assinado, pois o commit pai não está assinado.
signing.wont_sign.basesigned=O merge não será assinado, pois o commit base não está assinado.
signing.wont_sign.commitssigned=O merge não será assinado, pois todos os commits associados não estão assinados.
@@ -1844,12 +1947,12 @@ activity.period.quarterly=3 meses
activity.period.semiyearly=6 meses
activity.period.yearly=1 ano
activity.overview=Visão geral
-activity.active_prs_count_1=%d Pull request ativo
-activity.active_prs_count_n=%d Pull requests ativos
-activity.merged_prs_count_1=Pull request com merge aplicado
-activity.merged_prs_count_n=Pull requests com merge aplicado
-activity.opened_prs_count_1=Pull request proposto
-activity.opened_prs_count_n=Pull requests propostos
+activity.active_prs_count_1=%d Pull Request Ativo
+activity.active_prs_count_n=%d Pull Requests Ativos
+activity.merged_prs_count_1=Pull Request com Merge Aplicado
+activity.merged_prs_count_n=Pull Requests com Merge Aplicado
+activity.opened_prs_count_1=Pull Request Proposto
+activity.opened_prs_count_n=Pull Requests Propostos
activity.title.user_1=%d usuário
activity.title.user_n=%d usuários
activity.title.prs_1=%d Pull request
@@ -1858,27 +1961,26 @@ activity.title.prs_merged_by=%s com merge aplicado por %s
activity.title.prs_opened_by=%s proposto(s) por %s
activity.merged_prs_label=Merge aplicado
activity.opened_prs_label=Proposto
-activity.active_issues_count_1=%d Issue ativa
-activity.active_issues_count_n=%d Issues ativas
-activity.closed_issues_count_1=Issue fechada
-activity.closed_issues_count_n=Issues fechadas
+activity.active_issues_count_1=%d Issue Ativa
+activity.active_issues_count_n=%d Issues Ativas
+activity.closed_issues_count_1=Issue Fechada
+activity.closed_issues_count_n=Issues Fechadas
activity.title.issues_1=+%d Issue
activity.title.issues_n=+%d Issues
activity.title.issues_closed_from=%s fechada por %s
activity.title.issues_created_by=%s criada por %s
activity.closed_issue_label=Fechado
-activity.new_issues_count_1=Nova issue
-activity.new_issues_count_n=Novas issues
+activity.new_issues_count_1=Nova Issue
+activity.new_issues_count_n=Novas Issues
activity.new_issue_label=Aberta
-activity.title.unresolved_conv_1=%d conversa não resolvida
-activity.title.unresolved_conv_n=%d conversas não resolvidas
+activity.title.unresolved_conv_1=%d Conversa Não Resolvida
+activity.title.unresolved_conv_n=%d Conversas Não Resolvidas
activity.unresolved_conv_desc=Estas issues foram recentemente alteradas e pull requests ainda não foram resolvidos.
activity.unresolved_conv_label=Aberta
activity.title.releases_1=%d Versão
activity.title.releases_n=%d Versões
activity.title.releases_published_by=%s publicada(s) por %s
activity.published_release_label=Publicado
-activity.no_git_activity=Não houve nenhuma atividade de commit neste período.
activity.git_stats_exclude_merges=Excluindo merges,
activity.git_stats_author_1=%d autor
activity.git_stats_author_n=%d autores
@@ -1906,8 +2008,8 @@ contributors.contribution_type.additions=Adições
contributors.contribution_type.deletions=Exclusões
settings=Configurações
-settings.desc=Opções é onde você pode gerenciar as configurações para o repositório
settings.options=Repositório
+settings.public_access=Acesso Público
settings.collaboration=Colaboradores
settings.collaboration.admin=Administrador
settings.collaboration.write=Escrita
@@ -1916,7 +2018,7 @@ settings.collaboration.owner=Proprietário
settings.collaboration.undefined=Indefinido
settings.hooks=Webhooks
settings.githooks=Hooks do Git
-settings.basic_settings=Configurações básicas
+settings.basic_settings=Configurações Básicas
settings.mirror_settings=Opções de espelhamento
settings.mirror_settings.docs=Configure o seu repositório para sincronizar automaticamente commits, tags e branches de outro repositório.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=No momento, isso só pode ser feito no menu "Nova migração". Para obter mais informações, consulte:
@@ -1946,7 +2048,7 @@ settings.use_external_wiki=Usar wiki externa
settings.external_wiki_url=URL externa da wiki
settings.external_wiki_url_error=A URL da wiki externa não é válida.
settings.external_wiki_url_desc=Visitantes são redirecionados para a URL da wiki externa ao clicar na aba da wiki.
-settings.issues_desc=Habilitar issue tracker para o repositório
+settings.issues_desc=Habilitar Issue Tracker para o Repositório
settings.use_internal_issue_tracker=Usar o issue tracker nativo
settings.use_external_issue_tracker=Usar issue tracker externo
settings.external_tracker_url=URL do issue tracker externo
@@ -1980,8 +2082,7 @@ settings.admin_stats_indexer=Indexador de Estatísticas do Código
settings.admin_indexer_commit_sha=Último SHA indexado
settings.admin_indexer_unindexed=Não indexado
settings.reindex_button=Adicionar à fila de reindexação
-settings.reindex_requested=Reindexação requisitada
-settings.admin_enable_close_issues_via_commit_in_any_branch=Fechar issue via commit em um branch não padrão
+settings.reindex_requested=Reindexação Requisitada
settings.danger_zone=Zona de perigo
settings.new_owner_has_same_repo=O novo proprietário já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
settings.convert=Converter para repositório tradicional
@@ -2001,7 +2102,6 @@ settings.transfer_abort=Cancelar transferência
settings.transfer_abort_invalid=Não é possível cancelar uma transferência de repositório não existente.
settings.transfer_desc=Transferir este repositório para outro usuário ou para uma organização onde você tem direitos de administrador.
settings.transfer_form_title=Digite o nome do repositório para confirmar:
-settings.transfer_in_progress=Há uma transferência em andamento. Por favor, cancele se você gostaria de transferir este repositório para outro usuário.
settings.transfer_notices_1=- Você perderá o acesso ao repositório se transferir para um usuário individual.
settings.transfer_notices_2=- Você manterá acesso ao repositório se transferi-lo para uma organização que você também é proprietário.
settings.transfer_notices_3=- Se o repositório for privado e for transferido para um usuário individual, esta ação certifica que o usuário tem pelo menos permissão de leitura (e altera as permissões se necessário).
@@ -2015,21 +2115,17 @@ settings.trust_model.default=Modelo Padrão de Confiança
settings.trust_model.default.desc=Use o modelo de confiança de repositório padrão para esta instalação.
settings.trust_model.collaborator=Colaborador
settings.trust_model.collaborator.long=Colaborador: Confiar em assinaturas feitas por colaboradores
-settings.trust_model.collaborator.desc=Assinaturas válidas dos colaboradores deste repositório serão marcadas como "confiáveis" - (quer correspondam ao autor do commit ou não). Caso contrário, assinaturas válidas serão marcadas como "não confiáveis" se a assinatura corresponder ao autor do submissão e "não corresponde" se não corresponder.
settings.trust_model.committer=Committer
-settings.trust_model.committer.long=Committer: Confiar nas assinaturas que correspondam aos committers (isso corresponde ao GitHub e forçará commits assinados pelo Gitea a ter o Gitea como o committer)
settings.trust_model.collaboratorcommitter=Colaborador+Commiter
settings.trust_model.collaboratorcommitter.long=Colaborador+Committer: Confiar na assinatura dos colaboradores que correspondem ao autor do commit
-settings.trust_model.collaboratorcommitter.desc=Assinaturas válidas dos colaboradores deste repositório serão marcadas como "confiáveis" se corresponderem ao autor do commit. Caso contrário, as assinaturas válidas serão marcadas como "não confiáveis" se a assinatura corresponder ao autor do commit e "não corresponde" caso contrário. Isso forçará o Gitea a ser marcado como o autor do commit nos commits assinados com o autor marcado como Co-Authored-By: e o Committed-By: resumo do commit. A chave padrão do Gitea tem que corresponder a um usuário no banco de dados.
settings.wiki_delete=Excluir dados da wiki
settings.wiki_delete_desc=A exclusão de dados da wiki é permanente e não pode ser desfeita.
settings.wiki_delete_notices_1=- Isso excluirá e desabilitará permanentemente a wiki do repositório %s.
-settings.confirm_wiki_delete=Excluir dados da wiki
+settings.confirm_wiki_delete=Excluir Dados da Wiki
settings.wiki_deletion_success=Os dados da wiki do repositório foi excluídos.
-settings.delete=Excluir este repositório
+settings.delete=Excluir Este Repositório
settings.delete_desc=A exclusão de um repositório é permanente e não pode ser desfeita.
settings.delete_notices_1=- Esta operação NÃO PODERÁ ser desfeita.
-settings.delete_notices_2=- Essa operação excluirá permanentemente o repositório %s , incluindo código, issues, comentários, dados da wiki e configurações do colaborador.
settings.delete_notices_fork_1=- Forks deste repositório se tornarão independentes após a exclusão.
settings.deletion_success=O repositório foi excluído.
settings.update_settings_success=As configurações do repositório foram atualizadas.
@@ -2049,8 +2145,6 @@ settings.team_not_in_organization=A equipe não está na mesma organização que
settings.teams=Equipes
settings.add_team=Adicionar Equipe
settings.add_team_duplicate=A equipe já tem o repositório
-settings.add_team_success=A equipe agora tem acesso ao repositório.
-settings.change_team_permission_tip=A permissão da equipe está definida na página de configurações da equipe e não pode ser alterada por repositório
settings.delete_team_tip=Esta equipe tem acesso a todos os repositórios e não pode ser removida
settings.remove_team_success=O acesso da equipe ao repositório foi removido.
settings.add_webhook=Adicionar webhook
@@ -2059,8 +2153,7 @@ settings.hooks_desc=Webhooks automaticamente fazem requisições de HTTP POST pa
settings.webhook_deletion=Remover webhook
settings.webhook_deletion_desc=A exclusão de um webhook exclui suas configurações e o histórico de entrega. Continuar?
settings.webhook_deletion_success=O webhook foi removido.
-settings.webhook.test_delivery=Entrega de teste
-settings.webhook.test_delivery_desc=Teste este webhook com um falso evento.
+settings.webhook.test_delivery=Testar Evento de Push
settings.webhook.request=Solicitação
settings.webhook.response=Resposta
settings.webhook.headers=Cabeçalhos
@@ -2099,12 +2192,13 @@ settings.event_wiki_desc=Página da wiki criada, renomeada, editada ou excluída
settings.event_release=Versão
settings.event_release_desc=Versão publicada, atualizada ou excluída em um repositório.
settings.event_push=Push
+settings.event_force_push=Forçar Push
settings.event_push_desc=Git push para o repositório.
settings.event_repository=Repositório
settings.event_repository_desc=Repositório criado ou excluído.
settings.event_header_issue=Eventos da Issue
settings.event_issues=Issues
-settings.event_issues_desc=Issue aberta, fechada, reaberta ou editada.
+settings.event_issues_desc=Issue aberta, fechada, reaberta, editada ou excluída.
settings.event_issue_assign=Issue Atribuída
settings.event_issue_assign_desc=Issue atribuída ou não atribuída.
settings.event_issue_label=Issue Rotulada
@@ -2115,7 +2209,7 @@ settings.event_issue_comment=Comentário da issue
settings.event_issue_comment_desc=Comentário da issue criado, editado ou excluído.
settings.event_header_pull_request=Eventos de Pull Request
settings.event_pull_request=Pull request
-settings.event_pull_request_desc=Pull request aberto, fechado, reaberto ou editado.
+settings.event_pull_request_desc=Pull request aberto, fechado, reaberto, editado ou excluído.
settings.event_pull_request_assign=Pull Request Atribuído
settings.event_pull_request_assign_desc=Pull request atribuído ou desatribuído.
settings.event_pull_request_label=Pull Request Rotulado
@@ -2162,7 +2256,7 @@ settings.packagist_username=Nome de usuário no Packagist
settings.packagist_api_token=Token de API
settings.packagist_package_url=URL do pacote do Packagist
settings.deploy_keys=Chaves de Deploy
-settings.add_deploy_key=Nova chave
+settings.add_deploy_key=Nova Chave de Deploy
settings.deploy_key_desc=As chaves de deploy possuem somente acesso de leitura (pull) ao repositório.
settings.is_writable=Habilitar acesso de escrita
settings.is_writable_info=Permitir que esta chave de deploy faça push para o repositório.
@@ -2174,14 +2268,22 @@ settings.key_name_used=Uma chave de deploy já existe com esse mesmo nome.
settings.deploy_key_deletion=Remover chave de deploy
settings.deploy_key_deletion_desc=A exclusão de uma chave de deploy irá revogar o seu acesso a este repositório. Continuar?
settings.deploy_key_deletion_success=A chave de deploy foi removida.
+settings.branches=Branches
+settings.protected_branch=Proteção de Branch
settings.protected_branch.save_rule=Salvar Regra
settings.protected_branch.delete_rule=Excluir Regra
+settings.protected_branch_can_push=Permitir push?
+settings.protected_branch_can_push_yes=Você pode fazer push
+settings.protected_branch_can_push_no=Você não pode fazer push
settings.protect_this_branch=Habilitar Proteção de Branch
settings.protect_this_branch_desc=Previne a exclusão e restringe o merge e push para o branch.
settings.protect_disable_push=Desabilitar push
settings.protect_disable_push_desc=Nenhum push será permitido neste branch.
-settings.protect_enable_push=Habilitar push
+settings.protect_disable_force_push=Desativar Push Forçado
+settings.protect_disable_force_push_desc=Nenhum push forçado será permitido para este branch.
+settings.protect_enable_push=Habilitar Push
settings.protect_enable_push_desc=Qualquer pessoa com acesso de escrita terá permissão para realizar push neste branch (mas não forçar o push).
+settings.protect_enable_force_push_all=Ativar Push Forçado
settings.protect_enable_merge=Permitir merge
settings.protect_check_status_contexts=Habilitar verificação de status
settings.protect_check_status_contexts_list=Verificações de status encontradas na última semana para este repositório
@@ -2194,6 +2296,8 @@ settings.protect_branch_name_pattern=Padrão de Nome de Branch Protegida
settings.protect_patterns=Padrões
settings.protect_protected_file_patterns=Padrões de arquivos protegidos (separados usando ponto e vírgula ';'):
settings.protect_unprotected_file_patterns=Padrões de arquivos desprotegidos (separados usando ponto e vírgula ';'):
+settings.add_protected_branch=Habilitar proteção
+settings.delete_protected_branch=Desabilitar proteção
settings.update_protect_branch_success=Proteção do branch "%s" foi atualizada.
settings.remove_protected_branch_success=Proteção do branch "%s" foi desabilitada.
settings.remove_protected_branch_failed=Removendo regra de proteção de branch "%s" falhou.
@@ -2226,8 +2330,10 @@ settings.chat_id=ID do Chat
settings.matrix.homeserver_url=URL do Homeserver
settings.matrix.room_id=ID da Sala
settings.matrix.message_type=Tipo de Mensagem
+settings.visibility.private.button=Tornar Privado
+settings.visibility.public.button=Tornar Público
settings.archive.button=Arquivar repositório
-settings.archive.header=Arquivar este repositório
+settings.archive.header=Arquivar Este Repositório
settings.archive.success=O repositório foi arquivado com sucesso.
settings.archive.error=Um erro ocorreu enquanto estava sendo arquivado o repositório. Veja o log para mais detalhes.
settings.archive.error_ismirror=Você não pode arquivar um repositório espelhado.
@@ -2251,11 +2357,9 @@ settings.lfs_invalid_locking_path=Caminho inválido: %s
settings.lfs_invalid_lock_directory=Não é possível bloquear o diretório: %s
settings.lfs_lock_already_exists=O bloqueio já existe: %s
settings.lfs_lock=Bloqueio
-settings.lfs_lock_path=Caminho de arquivo para bloquear...
settings.lfs_locks_no_locks=Sem bloqueios
settings.lfs_lock_file_no_exist=Arquivo bloqueado não existe no branch padrão
settings.lfs_force_unlock=Forçar desbloqueio
-settings.lfs_pointers.found=Encontrado %d ponteiro(s) de blob - %d associado, %d não associado (%d ausente na loja)
settings.lfs_pointers.sha=SHA Blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=No repositório
@@ -2301,6 +2405,7 @@ diff.show_more=Mostrar mais
diff.load=Carregar Diff
diff.generated=gerado
diff.vendored=externo
+diff.comment.add_line_comment=Adicionar comentário na linha
diff.comment.placeholder=Deixe um comentário
diff.comment.add_single_comment=Adicionar um único comentário
diff.comment.add_review_comment=Adicionar comentário
@@ -2336,7 +2441,7 @@ release.edit=editar
release.ahead.commits=%d commits
release.ahead.target=para %s desde esta versão
tag.ahead.target=para %s desde esta tag
-release.source_code=Código fonte
+release.source_code=Código Fonte
release.new_subheader=Lançamentos organizam versões do projeto.
release.edit_subheader=Lançamentos organizam versões do projeto.
release.tag_name=Nome da tag
@@ -2353,7 +2458,7 @@ release.cancel=Cancelar
release.publish=Publicar versão
release.save_draft=Salvar rascunho
release.edit_release=Atualizar versão
-release.delete_release=Excluir versão
+release.delete_release=Excluir Versão
release.delete_tag=Apagar Tag
release.deletion=Excluir versão
release.deletion_desc=A exclusão de uma versão apenas a remove do Gitea. Isso não afetará a tag do Git, o conteúdo do seu repositório ou seu histórico. Continuar?
@@ -2367,14 +2472,14 @@ release.tag_already_exist=Este nome de tag já existe.
release.downloads=Downloads
release.download_count=Downloads: %s
release.add_tag_msg=Use o título e o conteúdo do lançamento como mensagem da tag.
-release.add_tag=Criar apenas a tag
+release.add_tag=Criar Apenas a Tag
release.releases_for=Versões para %s
release.tags_for=Tags para %s
branch.name=Nome do Branch
branch.already_exists=Um branch com o nome "%s" já existe.
branch.delete_head=Excluir
-branch.delete=`Excluir branch "%s"`
+branch.delete=`Excluir Branch "%s"`
branch.delete_html=Excluir Branch
branch.deletion_success=Branch "%s" excluído.
branch.deletion_failed=Falha ao excluir o branch "%s".
@@ -2388,9 +2493,10 @@ branch.restore_success=Branch "%s" restaurado.
branch.restore_failed=Ocorreu um erro ao restaurar o branch "%s".
branch.protected_deletion_failed=Branch "%s" é protegido. Ele não pode ser excluído.
branch.default_deletion_failed=Branch "%s" é o branch padrão. Ele não pode ser excluído.
-branch.restore=`Restaurar branch "%s"`
-branch.download=`Baixar branch "%s"`
-branch.rename=`Renomear branch "%s"`
+branch.default_branch_not_exist=Branch padrão "%s" não existe.
+branch.restore=`Restaurar Branch "%s"`
+branch.download=`Baixar Branch "%s"`
+branch.rename=`Renomear Branch "%s"`
branch.included_desc=Este branch faz parte do branch padrão
branch.included=Incluído
branch.create_new_branch=Criar branch a partir do branch:
@@ -2402,6 +2508,7 @@ branch.create_branch_operation=Criar branch
branch.new_branch=Criar novo branch
branch.new_branch_from=`Criar novo branch a partir de "%s"`
branch.renamed=Branch %s foi renomeado para %s.
+branch.commits_no_divergence=O mesmo que branch %[1]s
tag.create_tag=Criar tag %s
tag.create_tag_operation=Criar tag
@@ -2421,45 +2528,50 @@ error.csv.unexpected=Não é possível renderizar este arquivo porque ele conté
error.csv.invalid_field_count=Não é possível renderizar este arquivo porque ele tem um número errado de campos na linha %d.
[graphs]
-component_loading=Carregando %s...
+component_loading=Carregando %s…
component_loading_failed=Não foi possível carregar %s
component_loading_info=Isto pode demorar um pouco…
+component_failed_to_load=Ocorreu um erro inesperado.
+contributors.what=contribuições
+recent_commits.what=commits recentes
[org]
-org_name_holder=Nome da organização
-org_full_name_holder=Nome completo da organização
+org_name_holder=Nome da Organização
+org_full_name_holder=Nome Completo da Organização
org_name_helper=Nomes de organização devem ser curtos e memoráveis.
-create_org=Criar organização
+create_org=Criar Organização
repo_updated=Atualizado
members=Membros
teams=Equipes
code=Código
lower_members=membros
lower_repositories=repositórios
-create_new_team=Nova equipe
-create_team=Criar equipe
+create_new_team=Nova Equipe
+create_team=Criar Equipe
org_desc=Descrição
-team_name=Nome da equipe
+team_name=Nome da Equipe
team_desc=Descrição
team_name_helper=Nomes de equipe devem ser curtos e memoráveis.
team_desc_helper=Descreva a finalidade ou o papel da equipe.
team_access_desc=Acesso ao repositório
team_permission_desc=Permissão
-team_unit_desc=Permitir o acesso a seções de repositório
+team_unit_desc=Permitir o Acesso a Seções de Repositório
team_unit_disabled=(Desabilitado)
form.name_reserved=O nome de organização "%s" está reservado.
+form.name_pattern_not_allowed=O padrão "%s" não é permitido em um nome de organização.
form.create_org_not_allowed=Você não tem permissão para criar uma organização.
settings=Configurações
settings.options=Organização
-settings.full_name=Nome completo
+settings.full_name=Nome Completo
settings.email=E-mail de contato
settings.website=Site
settings.location=Localização
settings.permission=Permissões
settings.repoadminchangeteam=O administrador do repositório pode adicionar e remover o acesso para equipes
settings.visibility=Visibilidade
+settings.change_visibility=Alterar Visibilidade
settings.visibility.public=Pública
settings.visibility.limited=Limitado (Visível apenas para usuários autenticados)
settings.visibility.limited_shortname=Limitado
@@ -2468,24 +2580,25 @@ settings.visibility.private_shortname=Privado
settings.update_settings=Atualizar Configurações
settings.update_setting_success=Configurações da organização foram atualizadas.
-settings.change_orgname_redirect_prompt=O nome antigo irá redirecionar até que seja reivindicado.
+
+settings.rename=Renomear Organização
+settings.rename_new_org_name=Novo Nome da Organização
+
settings.update_avatar_success=O avatar da organização foi atualizado.
-settings.delete=Excluir organização
-settings.delete_account=Excluir esta organização
+settings.delete=Excluir Organização
+settings.delete_account=Excluir Esta Organização
settings.delete_prompt=A organização será excluída permanentemente. Isto NÃO PODERÁ ser desfeito!
-settings.confirm_delete_account=Confirmar exclusão
-settings.delete_org_title=Excluir organização
-settings.delete_org_desc=Essa organização será excluída permanentemente. Continuar?
+settings.confirm_delete_account=Confirmar Exclusão
settings.hooks_desc=Adicionar Webhooks que serão acionados para todos os repositórios desta organização.
settings.labels_desc=Adicionar rótulos que possam ser usadas em issues para todos os repositórios desta organização.
-members.membership_visibility=Visibilidade da associação:
+members.membership_visibility=Visibilidade da Associação:
members.public=Público
members.public_helper=tornar privado
members.private=Privado
members.private_helper=tornar público
-members.member_role=Categoria de membro:
+members.member_role=Categoria de Membro:
members.owner=Proprietário
members.member=Membro
members.remove=Remover
@@ -2493,7 +2606,7 @@ members.remove.detail=Remover %[1]s de %[2]s?
members.leave=Sair
members.leave.detail=Sair de %s?
members.invite_desc=Adicionar novo membro em %s:
-members.invite_now=Convidar agora
+members.invite_now=Convidar Agora
teams.join=Juntar-se
teams.leave=Deixar
@@ -2507,33 +2620,33 @@ teams.read_access=Leitura
teams.read_access_helper=Os membros podem ver e clonar os repositórios da equipe.
teams.write_access=Escrita
teams.write_access_helper=Os membros podem ler e realizar push para os repositórios da equipe.
-teams.admin_access=Acesso de administrador
+teams.admin_access=Acesso de Administrador
teams.admin_access_helper=Os membros podem realizar pull e push em repositórios da equipe e adicionar colaboradores a eles.
teams.no_desc=Esta equipe não tem descrição
teams.settings=Configurações
teams.owners_permission_desc=Proprietários tem acesso total a todos repositórios e também direitos de administrador na organização.
-teams.members=Membros da equipe
-teams.update_settings=Atualizar configurações
-teams.delete_team=Excluir equipe
-teams.add_team_member=Adicionar membro na equipe
+teams.members=Membros da Equipe
+teams.update_settings=Atualizar Configurações
+teams.delete_team=Excluir Equipe
+teams.add_team_member=Adicionar Membro na Equipe
teams.invite_team_member=Convidar para %s
-teams.invite_team_member.list=Convites pendentes
-teams.delete_team_title=Excluir equipe
+teams.invite_team_member.list=Convites Pendentes
+teams.delete_team_title=Excluir Equipe
teams.delete_team_desc=A exclusão de uma equipe revoga o acesso ao repositório de seus membros. Continuar?
teams.delete_team_success=A equipe foi excluída.
teams.read_permission_desc=Essa equipe concede acesso para Leitura : membros podem ver e clonar os repositórios da equipe.
teams.write_permission_desc=Esta equipe concede acesso para escrita : Membros podem ler e fazer push para os repositórios da equipe.
teams.admin_permission_desc=Esta equipe concede acesso de Administrador : Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
teams.create_repo_permission_desc=Além disso, esta equipe concede permissão de Criar repositório : membros podem criar novos repositórios na organização.
-teams.repositories=Repositórios da equipe
+teams.repositories=Repositórios da Equipe
teams.remove_all_repos_title=Remover todos os repositórios da equipe
teams.remove_all_repos_desc=Isto irá remover todos os repositórios da equipe.
teams.add_all_repos_title=Adicionar todos os repositórios
teams.add_all_repos_desc=Isto irá adicionar todos os repositórios da organização à equipe.
-teams.add_nonexistent_repo=O repositório que você está tentando adicionar não existe. Crie-o antes de adicioná-lo.
teams.add_duplicate_users=Usuário já é um membro da equipe.
teams.repos.none=Nenhum repositório pode ser acessado por essa equipe.
teams.members.none=Nenhum membro nesta equipe.
+teams.members.blocked_user=Não é possível adicionar o usuário porque ele está bloqueado pela organização.
teams.specific_repositories=Repositórios específicos
teams.specific_repositories_helper=Os membros terão acesso apenas aos repositórios explicitamente adicionados à equipe. Selecionar este não removerá automaticamente os repositórios já adicionados com Todos os repositórios .
teams.all_repositories=Todos os repositórios
@@ -2545,22 +2658,27 @@ teams.invite.title=Você foi convidado para fazer parte da equipe %s Segurança -> Cliente OAuth 2.0"`
+auths.tip.bitbucket=Cadastrar um novo consumidor de OAuth em %s e adicionar a permissão 'Account' - 'Read'
+auths.tip.dropbox=Criar um novo aplicativo em %s
+auths.tip.facebook=`Cadastrar um novo aplicativo em %s e adicionar o produto "Facebook Login"`
+auths.tip.github=Cadastrar um novo aplicativo OAuth em %s
+auths.tip.gitlab_new=Cadastrar um novo aplicativo em %s
+auths.tip.google_plus=Obter credenciais de cliente OAuth2 do console de API do Google em %s
auths.tip.mastodon=Insira a URL da instância personalizada do mastodon que você deseja usar para autenticar (ou use o padrão)
-auths.edit=Editar fonte de autenticação
-auths.activated=Esta fonte de autenticação está ativada
+auths.edit=Editar Fonte de Autenticação
+auths.activated=Esta Fonte de Autenticação Está Ativada
auths.new_success=A fonte de autenticação "%s" foi adicionada.
auths.update_success=A fonte de autenticação foi atualizada.
-auths.update=Atualizar fonte de autenticação
-auths.delete=Excluir fonte de autenticação
+auths.update=Atualizar Fonte de Autenticação
+auths.delete=Excluir Fonte de Autenticação
auths.delete_auth_title=Excluir a Fonte de Autenticação
auths.delete_auth_desc=A exclusão de uma fonte de autenticação impede que os usuários a usem para acessar. Continuar?
auths.still_in_used=A fonte de autenticação ainda está em uso. Converta ou exclua todos os usuários que usam essa fonte de autenticação primeiro.
@@ -2851,16 +2966,16 @@ auths.unable_to_initialize_openid=Não é possível inicializar o Provedor OpenI
auths.invalid_openIdConnectAutoDiscoveryURL=URL do Auto Discovery inválida (deve ser uma URL válida, começando com http:// ou https://)
config.server_config=Configuração do servidor
-config.app_name=Nome do servidor
+config.app_name=Nome do Site
config.app_ver=Versão do Gitea
config.app_url=URL base do Gitea
config.custom_conf=Caminho do Arquivo de Configuração
-config.custom_file_root_path=Caminho raiz para arquivo personalizado
-config.domain=Domínio do servidor
+config.custom_file_root_path=Caminho Raiz para Arquivo Personalizado
+config.domain=Domínio do Servidor
config.offline_mode=Modo local
config.disable_router_log=Desabilitar o Log do roteador
config.run_user=Executar como nome de usuário
-config.run_mode=Modo de execução
+config.run_mode=Modo de Execução
config.git_version=Versão do Git
config.repo_root_path=Caminho raiz do repositório
config.lfs_root_path=Caminho raiz do LFS
@@ -2883,7 +2998,7 @@ config.lfs_enabled=Habilitado
config.lfs_content_path=Caminho do conteúdo LFS
config.lfs_http_auth_expiry=Expiração da autenticação HTTP LFS
-config.db_config=Configuração do banco de dados
+config.db_config=Configuração do Banco de Dados
config.db_type=Tipo
config.db_host=Servidor
config.db_name=Nome
@@ -2894,9 +3009,9 @@ config.db_path=Caminho
config.service_config=Configuração do serviço
config.register_email_confirm=Exigir confirmação de e-mail para se cadastrar
-config.disable_register=Desabilitar auto-cadastro
+config.disable_register=Desabilitar Auto-Cadastro
config.allow_only_internal_registration=Permitir Registro Somente Através do Próprio Gitea
-config.allow_only_external_registration=Permitir cadastro somente por meio de serviços externos
+config.allow_only_external_registration=Permitir Cadastro Somente por Meio de Serviços Externos
config.enable_openid_signup=Habilitar o auto-cadastro via OpenID
config.enable_openid_signin=Habilitar acesso via OpenID
config.show_registration_button=Mostrar botão de cadastro
@@ -2905,11 +3020,11 @@ config.mail_notify=Habilitar notificações de e-mail
config.enable_captcha=Habilitar o CAPTCHA
config.active_code_lives=Ativar Code Lives
config.reset_password_code_lives=Tempo de expiração do código de recuperação de conta
-config.default_keep_email_private=Ocultar endereços de e-mail por padrão
-config.default_allow_create_organization=Permitir a criação de organizações por padrão
+config.default_keep_email_private=Ocultar Endereços de E-mail por Padrão
+config.default_allow_create_organization=Permitir a Criação de Organizações por Padrão
config.enable_timetracking=Habilitar Cronômetro
config.default_enable_timetracking=Habilitar o Cronômetro por Padrão
-config.default_allow_only_contributors_to_track_time=Permitir que apenas os colaboradores acompanhem o contador de tempo
+config.default_allow_only_contributors_to_track_time=Permitir que apenas os colaboradores acompanhem o cronômetro
config.no_reply_address=Ocultar domínio de e-mail
config.default_visibility_organization=Visibilidade padrão para novas organizações
@@ -2940,24 +3055,24 @@ config.test_mail_sent=Um e-mail de teste foi enviado para "%s".
config.oauth_config=Configuração do OAuth
config.oauth_enabled=Habilitado
-config.cache_config=Configuração de cache
-config.cache_adapter=Adaptador de cache
-config.cache_interval=Intervalo de cache
-config.cache_conn=Conexão de cache
+config.cache_config=Configuração de Cache
+config.cache_adapter=Adaptador de Cache
+config.cache_interval=Intervalo de Cache
+config.cache_conn=Conexão de Cache
config.cache_item_ttl=Item de cache TTL
config.session_config=Configuração da sessão
config.session_provider=Provedor da sessão
config.provider_config=Configuração do provedor
-config.cookie_name=Nome do cookie
+config.cookie_name=Nome do Cookie
config.gc_interval_time=Tempo de Intervalo do GC
config.session_life_time=Tempo de vida da sessão
config.https_only=Apenas HTTPS
-config.cookie_life_time=Tempo de vida do cookie
+config.cookie_life_time=Tempo de Vida do Cookie
config.picture_config=Configuração de imagem e avatar
config.picture_service=Serviço de imagens
-config.disable_gravatar=Desabilitar o gravatar
+config.disable_gravatar=Desabilitar o Gravatar
config.enable_federated_avatar=Habilitar avatares federativos
config.git_config=Configuração do Git
@@ -2976,7 +3091,7 @@ config.log_config=Configuração de log
config.logger_name_fmt=Logger: %s
config.disabled_logger=Desabilitado
config.access_log_mode=Modo log Access
-config.access_log_template=Modelo do registro de acesso
+config.access_log_template=Modelo do Registro de Acesso
config.xorm_log_sql=Log SQL
config.set_setting_failed=Falha ao definir configuração %s
@@ -2997,6 +3112,7 @@ monitor.start=Hora de início
monitor.execute_time=Tempo de execução
monitor.last_execution_result=Resultado
monitor.process.cancel=Cancelar processo
+monitor.process.cancel_desc=Cancelar um processo pode causar perda de dados
monitor.process.children=Descendentes
monitor.queues=Filas
@@ -3008,7 +3124,6 @@ monitor.queue.numberworkers=Número de executores
monitor.queue.maxnumberworkers=Número máximo de executores
monitor.queue.numberinqueue=Número na Fila
monitor.queue.settings.title=Configurações do conjunto
-monitor.queue.settings.maxnumberworkers=Número máximo de executores
monitor.queue.settings.maxnumberworkers.placeholder=Atualmente %[1]d
monitor.queue.settings.maxnumberworkers.error=Número máximo de executores deve ser um número
monitor.queue.settings.submit=Atualizar configurações
@@ -3016,13 +3131,13 @@ monitor.queue.settings.changed=Configurações atualizadas
monitor.queue.settings.remove_all_items=Remover tudo
monitor.queue.settings.remove_all_items_done=Todos os itens da fila foram removidos.
-notices.system_notice_list=Avisos do sistema
+notices.system_notice_list=Avisos do Sistema
notices.view_detail_header=Ver detalhes do aviso
notices.operations=Operações
notices.select_all=Marcar todos
notices.deselect_all=Desmarcar todos
notices.inverse_selection=Inverter seleção
-notices.delete_selected=Excluir seleção
+notices.delete_selected=Excluir Seleção
notices.delete_all=Excluir todos os avisos
notices.type=Tipo
notices.type_1=Repositório
@@ -3031,6 +3146,7 @@ notices.desc=Descrição
notices.op=Op.
notices.delete_success=Os avisos do sistema foram excluídos.
+self_check.no_problem_found=Nenhum problema encontrado ainda.
[action]
create_repo=criou o repositório %s
@@ -3086,6 +3202,7 @@ raw_minutes=minutos
[dropzone]
default_message=Arraste e solte arquivos aqui, ou clique para selecioná-los.
+invalid_input_type=Você não pode enviar arquivos deste tipo.
file_too_big=Tamanho de arquivo ({{filesize}} MB) excede o máximo de ({{maxFilesize}} MB).
remove_file=Remover arquivo
@@ -3125,6 +3242,7 @@ desc=Gerenciar pacotes do repositório.
empty=Não há pacotes ainda.
empty.documentation=Para obter mais informações sobre o registro de pacotes, consulte a documentação .
empty.repo=Você enviou um pacote, mas ele não está aqui? Vá para configurações do pacote e vincule-o a este repositório.
+registry.documentation=Para obter mais informações sobre o registro %s, consulte a documentação .
filter.type=Tipo
filter.type.all=Todos
filter.no_result=Seu filtro não produziu resultados.
@@ -3152,13 +3270,14 @@ alpine.registry=Configure este registro adicionando o URL no arquivo /etc/
alpine.registry.key=Baixe a chave RSA pública do registro para a pasta /etc/apk/keys/ para verificar a assinatura do índice:
alpine.registry.info=Escolha o $branch e $repository da lista abaixo.
alpine.install=Para instalar o pacote, execute o seguinte comando:
-alpine.repository=Informações do repositório
+alpine.repository=Informações do Repositório
+alpine.repository.branches=Branches
alpine.repository.repositories=Repositórios
alpine.repository.architectures=Arquiteturas
-arch.repository=Informações do repositório
+arch.repository=Informações do Repositório
arch.repository.repositories=Repositórios
arch.repository.architectures=Arquiteturas
-cargo.registry=Configurar este registro no arquivo de configuração de Cargo (por exemplo ~/.cargo/config.toml):
+cargo.registry=Configure este registro no arquivo de configuração do Cargo (por exemplo ~/.cargo/config.toml):
cargo.install=Para instalar o pacote usando Cargo, execute o seguinte comando:
chef.registry=Configure este registro em seu arquivo ~/.chef/config.rb:
chef.install=Para instalar o pacote, execute o seguinte comando:
@@ -3174,6 +3293,7 @@ conda.install=Para instalar o pacote usando o Conda, execute o seguinte comando:
container.details.type=Tipo de Imagem
container.details.platform=Plataforma
container.pull=Puxe a imagem pela linha de comando:
+container.digest=Digest
container.multi_arch=S.O. / Arquitetura
container.layers=Camadas da Imagem
container.labels=Rótulos
@@ -3184,13 +3304,13 @@ cran.install=Para instalar o pacote, execute o seguinte comando:
debian.registry=Configure este registro pela linha de comando:
debian.registry.info=Escolha uma $distribution e um $component da lista abaixo:
debian.install=Para instalar o pacote, execute o seguinte comando:
-debian.repository=Informações do repositório
+debian.repository=Informações do Repositório
debian.repository.distributions=Distribuições
debian.repository.components=Componentes
debian.repository.architectures=Arquiteturas
generic.download=Baixar pacote pela linha de comando:
go.install=Instale o pacote usando o comando:
-helm.registry=Configurar este registro pela linha de comando:
+helm.registry=Configure este registro pela linha de comando:
helm.install=Para instalar o pacote, execute o seguinte comando:
maven.registry=Configure este registro no arquivo pom.xml do seu projeto:
maven.install=Para usar o pacote inclua o seguinte no bloco de dependencies no arquivo pom.xml:
@@ -3214,8 +3334,9 @@ rpm.registry=Configure este registro pela linha de comando:
rpm.distros.redhat=em distribuições baseadas no RedHat
rpm.distros.suse=em distribuições baseadas no SUSE
rpm.install=Para instalar o pacote, execute o seguinte comando:
-rpm.repository=Informações do repositório
+rpm.repository=Informações do Repositório
rpm.repository.architectures=Arquiteturas
+rpm.repository.multiple_groups=Esse pacote está disponível em vários grupos.
rubygems.install=Para instalar o pacote usando gem, execute o seguinte comando:
rubygems.install2=ou adicione-o ao Gemfile:
rubygems.dependencies.runtime=Dependências de Execução
@@ -3230,6 +3351,7 @@ settings.link=Vincular este pacote a um repositório
settings.link.description=Se você vincular um pacote a um repositório, o pacote será listado na lista de pacotes do repositório.
settings.link.select=Selecionar Repositório
settings.link.button=Atualizar Link do Repositório
+settings.link.success=Link do repositório foi atualizado com sucesso.
settings.link.error=Falha ao atualizar o link do repositório.
settings.delete=Excluir o pacote
settings.delete.description=A exclusão de um pacote é permanente e não pode ser desfeita.
@@ -3238,14 +3360,17 @@ settings.delete.success=O pacote foi excluído.
settings.delete.error=Falha ao excluir o pacote.
owner.settings.cargo.title=Índice do Registro Cargo
owner.settings.cargo.initialize=Iniciar Índice
+owner.settings.cargo.initialize.description=É necessário um repositório Git de índice especial para usar o registro do Cargo. O uso dessa opção (re)criará o repositório e o configurará automaticamente.
owner.settings.cargo.initialize.error=Falha ao inicializar índice Cargo: %v
owner.settings.cargo.initialize.success=O índice Cargo foi criado com sucesso.
owner.settings.cargo.rebuild=Reconstruir Índice
+owner.settings.cargo.rebuild.description=A recompilação pode ser útil se o índice não estiver sincronizado com os pacotes Cargo armazenados.
owner.settings.cargo.rebuild.error=Falha ao reconstruir índice Cargo: %v
owner.settings.cargo.rebuild.success=O índice Cargo foi reconstruído com sucesso.
owner.settings.cleanuprules.title=Gerenciar Regras de Limpeza
owner.settings.cleanuprules.add=Adicionar Regra de Limpeza
owner.settings.cleanuprules.edit=Editar Regra de Limpeza
+owner.settings.cleanuprules.none=Não há regras de limpeza disponíveis. Consulte a documentação.
owner.settings.cleanuprules.preview=Pré-visualizar Regra de Limpeza
owner.settings.cleanuprules.preview.overview=%d pacotes agendados para serem removidos.
owner.settings.cleanuprules.preview.none=A regra de limpeza não corresponde a nenhum pacote.
@@ -3264,6 +3389,7 @@ owner.settings.cleanuprules.success.update=Regra de limpeza foi atualizada.
owner.settings.cleanuprules.success.delete=Regra de limpeza foi excluída.
owner.settings.chef.title=Registro Chef
owner.settings.chef.keypair=Gerar par de chaves
+owner.settings.chef.keypair.description=Um par de chaves é necessário para autenticar o registro do Chef. Se você já tiver gerado um par de chaves antes, a geração de um novo par de chaves descartará o par de chaves antigo.
[secrets]
secrets=Segredos
@@ -3338,24 +3464,49 @@ runs.commit=Commit
runs.scheduled=Agendado
runs.pushed_by=push feito por
runs.invalid_workflow_helper=O arquivo de configuração do workflow é inválido. Por favor, verifique seu arquivo de configuração: %s
+runs.no_matching_online_runner_helper=Nenhum runner online com a etiqueta: %s
runs.actor=Ator
runs.status=Status
runs.actors_no_select=Todos os atores
runs.status_no_select=Todos os Status
runs.no_results=Não houve correspondência de resultados.
+runs.no_workflows=Ainda não existem workflows.
+runs.no_workflows.quick_start=Não sabe como começar com as Ações do Gitea? Veja o guia de início rápido .
+runs.no_workflows.documentation=Para obter mais informações sobre as Ações do Gitea, consulte a documentação .
+runs.no_runs=O workflow ainda não foi executado.
runs.empty_commit_message=(mensagem de commit vazia)
+workflow.disable=Desabilitar Workflow
+workflow.disable_success=Workflow '%s' desativado com sucesso.
+workflow.enable=Habilitar Workflow
+workflow.enable_success=Workflow '%s' habilitado com sucesso.
+workflow.disabled=Workflow está desativado.
need_approval_desc=Precisa de aprovação para executar workflows para pull request do fork.
+variables=Variáveis
+variables.management=Gerenciamento de Variáveis
+variables.creation=Adicionar Variável
+variables.none=Ainda não há variáveis.
+variables.deletion=Remover variável
+variables.deletion.description=A remoção de uma variável é permanente e não pode ser desfeita. Continuar?
+variables.id_not_exist=A variável com o ID %d não existe.
+variables.edit=Editar Variável
+variables.deletion.failed=Falha ao remover a variável.
+variables.deletion.success=A variável foi removida.
+variables.creation.failed=Falha ao adicionar a variável.
+variables.creation.success=A variável "%s" foi adicionada.
+variables.update.failed=Falha ao editar a variável.
+variables.update.success=A variável foi editada.
[projects]
-type-1.display_name=Projeto individual
-type-2.display_name=Projeto do repositório
-type-3.display_name=Projeto da organização
+type-1.display_name=Projeto Individual
+type-2.display_name=Projeto do Repositório
+type-3.display_name=Projeto da Organização
[git.filemode]
+changed_filemode=%[1]s → %[2]s
; Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", …
directory=Diretório
normal_file=Arquivo normal
diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini
index 543858e50b8..ed611d25993 100644
--- a/options/locale/locale_pt-PT.ini
+++ b/options/locale/locale_pt-PT.ini
@@ -44,7 +44,7 @@ webauthn_use_twofa=Usar um código de dois passos do seu telefone
webauthn_error=Não foi possível ler a sua chave de segurança.
webauthn_unsupported_browser=O seu navegador não oferece suporte ao WebAuthn.
webauthn_error_unknown=Ocorreu um erro desconhecido. Tente novamente, por favor.
-webauthn_error_insecure=`WebAuthn apenas suporta conexões seguras. Para testar sobre HTTP, pode usar a origem "localhost" ou "127.0.0.1"`
+webauthn_error_insecure=WebAuthn apenas suporta conexões seguras. Para testar sobre HTTP, pode usar a origem "localhost" ou "127.0.0.1".
webauthn_error_unable_to_process=O servidor não conseguiu processar o seu pedido.
webauthn_error_duplicated=A chave de segurança não é permitida neste pedido. Certifique-se de que a chave não está já registada.
webauthn_error_empty=Tem de definir um nome para esta chave.
@@ -120,6 +120,7 @@ error404=A página que pretende aceder não existe ou n
error503=O servidor não conseguiu concluir o seu pedido. Tente novamente mais tarde.
go_back=Voltar
invalid_data=Dados inválidos: %v
+nothing_has_been_changed=Nada foi alterado.
never=Nunca
unknown=Desconhecido
@@ -168,7 +169,7 @@ no_results_found=Não foram encontrados quaisquer resultados.
internal_error_skipped=Ocorreu um erro interno mas foi ignorado: %s
[search]
-search=Pesquisar...
+search=Pesquisar…
type_tooltip=Tipo de pesquisa
fuzzy=Aproximada
fuzzy_tooltip=Incluir também os resultados que estejam próximos do termo de pesquisa
@@ -178,23 +179,23 @@ regexp=Regexp
regexp_tooltip=Incluir apenas os resultados que correspondam ao termo de pesquisa com expressões regulares
exact=Fiel
exact_tooltip=Incluir somente os resultados que correspondam rigorosamente ao termo de pesquisa
-repo_kind=Pesquisar repositórios...
-user_kind=Pesquisar utilizadores...
-org_kind=Pesquisar organizações...
-team_kind=Pesquisar equipas...
-code_kind=Pesquisar código...
+repo_kind=Pesquisar repositórios…
+user_kind=Pesquisar utilizadores…
+org_kind=Pesquisar organizações…
+team_kind=Pesquisar equipas…
+code_kind=Pesquisar código-fonte…
code_search_unavailable=A pesquisa de código não está disponível, neste momento. Entre em contacto com o administrador.
code_search_by_git_grep=Os resultados da pesquisa no código-fonte neste momento são fornecidos pelo "git grep". Esses resultados podem ser melhores se o administrador habilitar o indexador do repositório.
-package_kind=Pesquisar pacotes...
-project_kind=Pesquisar planeamentos...
-branch_kind=Pesquisar ramos...
-tag_kind=Pesquisar etiquetas...
+package_kind=Pesquisar pacotes…
+project_kind=Pesquisar planeamentos…
+branch_kind=Pesquisar ramos…
+tag_kind=Pesquisar etiquetas…
tag_tooltip=Pesquisar etiquetas correspondentes. Use '%' para corresponder a qualquer sequência de números.
-commit_kind=Pesquisar cometimentos...
-runner_kind=Pesquisar executores...
+commit_kind=Pesquisar cometimentos…
+runner_kind=Pesquisar executores…
no_results=Não foram encontrados resultados correspondentes.
-issue_kind=Pesquisar questões...
-pull_kind=Pesquisar puxadas...
+issue_kind=Pesquisar questões…
+pull_kind=Pesquisar puxadas…
keyword_search_unavailable=Pesquisar por palavra-chave não está disponível, neste momento. Entre em contacto com o administrador.
[aria]
@@ -230,8 +231,8 @@ buttons.enable_monospace_font=Habilitar tipo de letra mono-espaçado
buttons.disable_monospace_font=Desabilitar tipo de letra mono-espaçado
[filter]
-string.asc=A - Z
-string.desc=Z - A
+string.asc=A–Z
+string.desc=Z–A
[error]
occurred=Ocorreu um erro
@@ -252,7 +253,7 @@ license_desc=Vá buscar documentação antes de alterar quaisquer configurações.
require_db_desc=Gitea requer MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB (protocolo MySQL).
@@ -269,15 +270,15 @@ path=Localização
sqlite_helper=Localização do ficheiro da base de dados em SQLite3. Insira um caminho absoluto se corre o Gitea como um serviço.
reinstall_error=Está a tentar instalar numa base de dados do Gitea já existente
reinstall_confirm_message=Reinstalar com uma base de dados do Gitea já existente pode causar múltiplos problemas. Na maioria dos casos deve usar o seu "app.ini" existente para correr o Gitea. Se souber o que está a fazer, confirme o seguinte:
-reinstall_confirm_check_1=Os dados encriptados pela chave secreta (SECRET_KEY) no ficheiro app.ini poderão ser perdidos: utilizadores poderão não ser capazes de iniciar a sessão com autenticação em dois passos (2FA) ou com chaves de utilização única (OTP) e as réplicas poderão deixar de funcionar em boas condições. Ao marcar esta opção estará a confirmar que o ficheiro app.ini vigente contém a SECRET_KEY certa.
-reinstall_confirm_check_2=Os repositórios e as configurações poderão ter de voltar a ser sincronizados. Ao marcar esta opção estará a confirmar que vai voltar a sincronizar manualmente os automatismos para os repositórios e o ficheiro authorized_keys. Estará também a confirmar que vai assegurar que as configurações do repositório e das réplicas estão em condições.
+reinstall_confirm_check_1=Os dados encriptados pela chave secreta (SECRET_KEY) no ficheiro app.ini poderão ser perdidos: os utilizadores poderão não ser capazes de iniciar a sessão com autenticação em dois passos (2FA) ou com chaves de utilização única (OTP) e as réplicas poderão deixar de funcionar adequadamente. Ao marcar esta opção estará a confirmar que o ficheiro app.ini vigente contém a SECRET_KEY certa.
+reinstall_confirm_check_2=Os repositórios e as configurações poderão ter de voltar a ser sincronizados. Ao marcar esta opção estará a confirmar que vai voltar a sincronizar manualmente os automatismos para os repositórios e o ficheiro authorized_keys. Estará também a confirmar que vai assegurar que as configurações do repositório e das réplicas estão certas.
reinstall_confirm_check_3=Você confirma que tem a certeza absoluta de que este Gitea está a correr com a localização certa do ficheiro app.ini e que tem a certeza de que tem de voltar a instalar. Você confirma que tomou conhecimento dos riscos acima descritos.
err_empty_db_path=A localização da base de dados SQLite3 não pode estar vazia.
no_admin_and_disable_registration=Não pode desabilitar a auto-inscrição de utilizadores sem criar uma conta de administrador.
err_empty_admin_password=A senha do administrador não pode estar em branco.
-err_empty_admin_email=O email do administrador não pode estar em branco.
+err_empty_admin_email=O endereço de email do administrador não pode estar em branco.
err_admin_name_is_reserved=O nome de utilizador do administrador é inválido porque está reservado
-err_admin_name_pattern_not_allowed=O nome de utilizador do administrador é inválido porque corresponde a um padrão reservado
+err_admin_name_pattern_not_allowed=O nome de utilizador do administrador é inválido porque corresponde a um padrão reservado.
err_admin_name_is_invalid=O nome de utilizador do administrador é inválido
general_title=Configurações gerais
@@ -358,7 +359,7 @@ no_reply_address=Domínio dos emails ocultos
no_reply_address_helper=Nome de domínio para utilizadores com um endereço de email oculto. Por exemplo, o nome de utilizador 'silva' será registado no Git como 'silva@semresposta.exemplo.org' se o domínio de email oculto estiver definido como 'semresposta.exemplo.org'.
password_algorithm=Algoritmo de Hash da Senha
invalid_password_algorithm=Algoritmo de hash da senha inválido
-password_algorithm_helper=Definir o algoritmo de hash da senha. Os algoritmos têm requisitos e resistência distintos. `argon2` é bastante seguro, mas usa muita memória e pode ser inapropriado para sistemas pequenos.
+password_algorithm_helper=Definir o algoritmo de hash da senha. Os algoritmos têm requisitos e resistências distintos. `argon2` é bastante seguro, mas usa muita memória e pode ser inapropriado para sistemas pequenos.
enable_update_checker=Habilitar verificador de novidades
enable_update_checker_helper=Verifica, periodicamente, se foi lançada alguma versão nova, fazendo uma ligação ao gitea.io.
env_config_keys=Configuração do ambiente
@@ -421,6 +422,7 @@ remember_me.compromised=O identificador da sessão já não é válido, o que po
forgot_password_title=Esqueci-me da senha
forgot_password=Esqueceu a sua senha?
need_account=Precisa de uma conta?
+sign_up_tip=Você está a registar a primeira conta no sistema, que tem privilégios de administrador. Guarde cuidadosamente o nome de utilizador e a senha. Se se esquecer do nome de utilizador ou da senha, consulte a documentação do Gitea para recuperar a conta.
sign_up_now=Inscreva-se agora.
sign_up_successful=A conta foi criada com sucesso. Bem-vindo/a!
confirmation_mail_sent_prompt_ex=Foi enviado um email de confirmação para %s . Verifique a sua caixa de entrada dentro de %s para completar o processo de registo. Se o seu endereço de email de registo estiver errado, pode iniciar a sessão novamente e mudá-lo.
@@ -470,13 +472,13 @@ openid_connect_desc=O URI do OpenID escolhido é desconhecido. Associe-o a uma n
openid_register_title=Criar uma conta nova
openid_register_desc=O URI do OpenID escolhido é desconhecido. Associe-o a uma nova conta aqui.
openid_signin_desc=Insira o seu URI OpenID. Por exemplo: alice.openid.exemplo.org or https://openid.exemplo.org/alice.
-disable_forgot_password_mail=A recuperação de conta está desabilitada porque não foi definido o email. Entre em contacto com o administrador do sítio.
-disable_forgot_password_mail_admin=A recuperação de conta só está disponível quando o email está configurado. Por favor, configure o email para permitir a recuperação de conta.
+disable_forgot_password_mail=A recuperação de conta está desabilitada porque não foi definido um endereço de email. Entre em contacto com o administrador do sítio.
+disable_forgot_password_mail_admin=A recuperação de conta só está disponível quando está configurado um endereço de email.
email_domain_blacklisted=Não pode fazer um registo com o seu endereço de email.
authorize_application=Autorizar aplicação
authorize_redirect_notice=Irá ser reencaminhado para %s se autorizar esta aplicação.
authorize_application_created_by=Esta aplicação foi criada por %s.
-authorize_application_description=Se conceder acesso, a aplicação terá privilégios para alterar toda a informação da conta, incluindo repositórios e organizações privados.
+authorize_application_description=Se conceder o acesso, a aplicação terá privilégios para aceder e alterar toda a informação da sua conta, incluindo organizações e repositórios privados.
authorize_application_with_scopes=Com âmbitos: %s
authorize_title=Autorizar o acesso de "%s" à sua conta?
authorization_failed=A autorização falhou
@@ -505,7 +507,7 @@ activate_email.text=Por favor clique na seguinte ligação para validar o seu en
register_notify=Bem-vindo(a) a %s
register_notify.title=%[1]s, bem-vindo(a) a %[2]s
-register_notify.text_1=este é o seu email de confirmação de registo para %s!
+register_notify.text_1=Este é o seu email de confirmação de registo para %s!
register_notify.text_2=Agora pode iniciar a sessão com o nome de utilizador: %s.
register_notify.text_3=Se esta conta foi criada para si, defina a sua senha primeiro.
@@ -544,7 +546,7 @@ release.download.targz=Código fonte (TAR.GZ)
repo.transfer.subject_to=%s gostaria de transferir "%s" para %s
repo.transfer.subject_to_you=%s gostaria de transferir "%s" para si
repo.transfer.to_you=você
-repo.transfer.body=Para o aceitar ou rejeitar visite %s, ou ignore-o, simplesmente.
+repo.transfer.body=Para o aceitar ou rejeitar, visite %s ou ignore-o, simplesmente.
repo.collaborator.added.subject=%s adicionou você a %s
repo.collaborator.added.text=Foi adicionado(a) como colaborador(a) do repositório:
@@ -596,7 +598,7 @@ url_error=`"%s" não é um URL válido.`
include_error=` tem que conter o texto "%s".`
glob_pattern_error=` o padrão glob é inválido: %s.`
regex_pattern_error=` o padrão regex é inválido: %s.`
-username_error=` só pode conter caracteres alfanuméricos ('0-9','a-z','A-Z'), hífen ('-'), sublinhado ('_') e ponto ('.') Não pode começar nem terminar com caracteres não alfanuméricos, e caracteres não alfanuméricos consecutivos também são proibidos.`
+username_error=` só pode conter caracteres alfanuméricos ('0-9','a-z','A-Z'), hífen ('-'), sublinhado ('_') e ponto ('.') Não pode começar nem terminar com caracteres não alfanuméricos e caracteres não alfanuméricos consecutivos também são proibidos.`
invalid_group_team_map_error=` o mapeamento é inválido: %s`
unknown_error=Erro desconhecido:
captcha_incorrect=O código CAPTCHA está errado.
@@ -621,7 +623,7 @@ team_name_been_taken=O nome da equipa já foi tomado.
team_no_units_error=Permitir acesso a pelo menos uma secção do repositório.
email_been_used=O endereço de email já está em uso.
email_invalid=O endereço de email é inválido.
-email_domain_is_not_allowed=O domínio do email de utilizador %s entra en conflito com o EMAIL_DOMAIN_ALLOWLIST ou com o EMAIL_DOMAIN_BLOCKLIST. Verifique se a operação estava prevista.
+email_domain_is_not_allowed=O domínio do endereço de email do utilizador %s entra en conflito com o EMAIL_DOMAIN_ALLOWLIST ou com o EMAIL_DOMAIN_BLOCKLIST. Verifique se a operação estava prevista.
openid_been_used=O endereço OpenID "%s" já está em uso.
username_password_incorrect=O nome de utilizador ou a senha estão errados.
password_complexity=A senha não passa nos requisitos de complexidade:
@@ -646,14 +648,14 @@ invalid_ssh_key=Não é possível validar a sua chave SSH: %s
invalid_gpg_key=Não é possível validar a sua chave GPG: %s
invalid_ssh_principal=Protagonista inválido: %s
must_use_public_key=A chave que você forneceu é privada. Não carregue a sua chave em lugar nenhum, em vez disso use a sua chave pública.
-unable_verify_ssh_key=Não é possível validar a chave SSH, verifique se tem erros.
+unable_verify_ssh_key=Não é possível validar a chave SSH. Verifique se tem erros.
auth_failed=Falhou a autenticação: %v
-still_own_repo=A sua conta possui um ou mais repositórios, elimine-os ou transfira-os primeiro.
-still_has_org=A sua conta é membro de uma ou mais organizações, saia delas primeiro.
-still_own_packages=A sua conta possui um ou mais pacotes, elimine-os primeiro.
-org_still_own_repo=Esta organização ainda possui um ou mais repositórios, elimine-os ou transfira-os primeiro.
-org_still_own_packages=Esta organização ainda possui um ou mais pacotes, elimine-os primeiro.
+still_own_repo=A sua conta possui um ou mais repositórios. Elimine-os ou transfira-os primeiro.
+still_has_org=A sua conta é membro de uma ou mais organizações. Saia delas primeiro.
+still_own_packages=A sua conta possui um ou mais pacotes. Elimine-os primeiro.
+org_still_own_repo=Esta organização ainda possui um ou mais repositórios. Elimine-os ou transfira-os primeiro.
+org_still_own_packages=Esta organização ainda possui um ou mais pacotes. Elimine-os primeiro.
target_branch_not_exist=O ramo de destino não existe.
target_ref_not_exist=A referência de destino não existe %s
@@ -688,7 +690,7 @@ form.name_chars_not_allowed=O nome de utilizador "%s" contém caracteres inváli
block.block=Bloquear
block.block.user=Bloquear utilizador
-block.block.org=Bloquear utilizador para a organização
+block.block.org=Bloquear utilizador da organização
block.block.failure=Falhou o bloqueio do utilizador: %s
block.unblock=Desbloquear
block.unblock.failure=Falhou o desbloqueio do utilizador: %s
@@ -752,7 +754,7 @@ cancel=Cancelar
language=Idioma
ui=Tema
hidden_comment_types=Tipos de comentários ocultos
-hidden_comment_types_description=Os tipos de comentário marcados aqui não serão mostrados dentro das páginas das questões. Marcar "Rótulo", por exemplo, remove todos os comentários "{user} adicionou/removeu {label}".
+hidden_comment_types_description=Os tipos de comentário marcados aqui não serão mostrados nas páginas das questões. Marcar "Rótulo", por exemplo, remove todos os comentários "{utilizador} adicionou/removeu {rótulo}".
hidden_comment_types.ref_tooltip=Comentários onde esta questão foi referenciada a partir de outra questão/cometimento/…
hidden_comment_types.issue_ref_tooltip=Comentários onde o utilizador altera o ramo/etiqueta associado à questão
comment_type_group_reference=Referência
@@ -801,17 +803,17 @@ manage_openid=Gerir endereços OpenID
email_desc=O seu endereço de email principal irá ser usado para notificações, recuperação de senha e, desde que não esteja oculto, operações Git baseados na web.
theme_desc=Este será o seu tema padrão em todo o sítio.
theme_colorblindness_help=Suporte a temas para daltónicos
-theme_colorblindness_prompt=O Gitea acabou de obter alguns temas com suporte básico para daltónicos que têm apenas algumas cores definidas. O trabalho ainda está em andamento. Poderiam ser feitos mais melhoramentos se fossem definidas mais cores nos ficheiros CSS do tema.
+theme_colorblindness_prompt=O Gitea apenas tem alguns temas com suporte básico para daltónicos que têm apenas algumas cores definidas. O trabalho ainda está em andamento. Poderiam ser feitos mais melhoramentos se fossem definidas mais cores nos ficheiros CSS do tema.
primary=Principal
activated=Em uso
requires_activation=Tem que ser habilitado
primary_email=Tornar no principal
activate_email=Enviar pedido de verificação
activations_pending=Habilitações pendentes
-can_not_add_email_activations_pending=Existe uma validação pendente. Tente de novo dentro de alguns minutos, se quiser adicionar um novo email.
+can_not_add_email_activations_pending=Existe uma validação pendente. Tente de novo dentro de alguns minutos, se quiser adicionar um novo endereço de email.
delete_email=Remover
email_deletion=Remover endereço de email
-email_deletion_desc=O endereço de email e informações relacionadas serão removidos da sua conta. Os cometimentos feitos no Git com este endereço de email permanecerão inalterados. Quer continuar?
+email_deletion_desc=Este endereço de email e informações relacionadas serão removidos da sua conta. Os cometimentos feitos no Git com este endereço de email permanecerão inalterados. Quer continuar?
email_deletion_success=O endereço de email foi removido.
theme_update_success=O seu tema foi substituído.
theme_update_error=O tema escolhido não existe.
@@ -854,7 +856,7 @@ gpg_key_matched_identities_long=As identidades incorporadas nesta chave correspo
gpg_key_verified=Chave validada
gpg_key_verified_long=A chave foi validada com um código e pode ser usada para validar cometimentos que correspondam a qualquer dos endereços de email em uso por parte deste utilizador, para além das identidades correspondentes a esta chave.
gpg_key_verify=Validar
-gpg_invalid_token_signature=A chave GPG, assinatura ou código fornecidos não correspondem ou então o código expirou.
+gpg_invalid_token_signature=A chave GPG, assinatura ou código fornecidos não correspondem, ou então o código expirou.
gpg_token_required=Tem que fornecer uma assinatura para o código abaixo
gpg_token=Código
gpg_token_help=Pode gerar uma assinatura usando o seguinte comando:
@@ -864,7 +866,7 @@ verify_gpg_key_success=A chave GPG "%s" foi validada.
ssh_key_verified=Chave validada
ssh_key_verified_long=A chave foi validada com um código e pode ser usada para validar cometimentos que correspondam a qualquer dos endereços de email em uso por parte deste utilizador.
ssh_key_verify=Validar
-ssh_invalid_token_signature=A chave SSH, assinatura ou código fornecidos não correspondem ou então o código expirou.
+ssh_invalid_token_signature=A chave SSH, assinatura ou código fornecidos não correspondem, ou então o código expirou.
ssh_token_required=Tem que fornecer uma assinatura para o código abaixo
ssh_token=Código
ssh_token_help=Pode gerar uma assinatura usando o seguinte comando:
@@ -885,7 +887,7 @@ gpg_key_deletion=Remover chave GPG
ssh_principal_deletion=Remover Protagonista de Certificado SSH
ssh_key_deletion_desc=Remover uma chave SSH revoga o acesso dessa chave à sua conta. Quer continuar?
gpg_key_deletion_desc=Remover uma chave GPG retira as validações feitas sobre os cometimentos assinados com ela. Quer continuar?
-ssh_principal_deletion_desc=Remover um Protagonista de Certificado SSH revoga o seu acesso à sua conta. Quer continuar?
+ssh_principal_deletion_desc=Remover um Protagonista de Certificado SSH revoga o acesso dele à sua conta. Quer continuar?
ssh_key_deletion_success=A chave SSH foi removida.
gpg_key_deletion_success=A chave GPG foi removida.
ssh_principal_deletion_success=O protagonista foi removido.
@@ -962,7 +964,7 @@ oauth2_application_remove_description=A remoção de uma aplicação OAuth2 impe
oauth2_application_locked=O Gitea pré-regista algumas aplicações OAuth2 no arranque, se forem habilitadas na configuração. Para evitar comportamentos inesperados, estas não podem ser editadas nem removidas. Consulte a documentação sobre o OAuth2 para obter mais informações.
authorized_oauth2_applications=Aplicações OAuth2 autorizadas
-authorized_oauth2_applications_description=Concedeu acesso à sua conta pessoal do Gitea a estas aplicações de terceiros. Por favor, revogue o acesso às aplicações que já não precisa.
+authorized_oauth2_applications_description=Concedeu acesso à sua conta pessoal do Gitea a estas aplicações de terceiros. Revogue o acesso às aplicações que já não precisa.
revoke_key=Revogar
revoke_oauth2_grant=Revogar acesso
revoke_oauth2_grant_description=Revogar o acesso desta aplicação de terceiros impedi-la-á de aceder aos seus dados. Tem a certeza?
@@ -1020,6 +1022,8 @@ email_notifications.onmention=Enviar email somente quando mencionado(a)
email_notifications.disable=Desabilitar notificações por email
email_notifications.submit=Definir preferência do email
email_notifications.andyourown=e as suas próprias notificações
+email_notifications.actions.desc=Notificações para sequências de trabalho são executadas em repositórios configurados com Gitea Actions .
+email_notifications.actions.failure_only=Notificar apenas as execuções de sequências de trabalho falhadas
visibility=Visibilidade do utilizador
visibility.public=Pública
@@ -1101,7 +1105,7 @@ mirror_sync=sincronizado
mirror_sync_on_commit=Sincronizar quando forem enviados cometimentos
mirror_address=Clonar a partir do URL
mirror_address_desc=Coloque, na secção de autorização, as credenciais que, eventualmente, sejam necessárias.
-mirror_address_url_invalid=O URL fornecido é inválido. Tem que codificar adequadamente todos os componentes do URL.
+mirror_address_url_invalid=O URL fornecido é inválido. Certifique-se que codifica adequadamente todos os componentes do URL.
mirror_address_protocol_invalid=O URL fornecido é inválido. Só se pode replicar a partir de endereços http(s):// ou git://.
mirror_lfs=Armazenamento de Ficheiros Grandes (LFS)
mirror_lfs_desc=Habilitar a réplica de dados LFS.
@@ -1119,7 +1123,7 @@ stars=Favoritos
reactions_more=e mais %d
unit_disabled=O administrador desabilitou esta secção do repositório.
language_other=Outros
-adopt_search=Insira o nome de utilizador para procurar repositórios adoptados... (deixe em branco para encontrar todos)
+adopt_search=Insira o nome de utilizador para procurar repositórios adoptados… (deixe em branco para encontrar todos)
adopt_preexisting_label=Adoptar ficheiros
adopt_preexisting=Adoptar ficheiros pré-existentes
adopt_preexisting_content=Criar repositório a partir de %s
@@ -1161,8 +1165,8 @@ template.issue_labels=Rótulos das questões
template.one_item=Tem que escolher pelo menos um item do modelo
template.invalid=Tem que escolher um repositório modelo
-archive.title=Este repositório está arquivado. Pode ver os seus ficheiros e cloná-lo, mas não pode fazer envios para o repositório nem lançar questões ou fazer pedidos de integração.
-archive.title_date=Este repositório foi arquivado em %s. Pode ver os ficheiros e cloná-lo, mas não pode fazer envios ou abrir questões ou pedidos de integração.
+archive.title=Este repositório está arquivado. Pode ver os seus ficheiros e cloná-lo. Não pode lançar questões nem fazer pedidos de integração nem fazer envios.
+archive.title_date=Este repositório foi arquivado em %s. Pode ver os ficheiros e cloná-lo. Não pode abrir questões nem fazer pedidos de integração nem enviar cometimentos.
archive.issue.nocomment=Este repositório está arquivado. Não pode comentar nas questões.
archive.pull.nocomment=Este repositório está arquivado. Não pode comentar nos pedidos de integração.
@@ -1179,7 +1183,7 @@ migrate_options_lfs=Migrar ficheiros LFS
migrate_options_lfs_endpoint.label=Destino LFS
migrate_options_lfs_endpoint.description=A migração irá tentar usar o seu controlo remoto do Git para determinar o servidor LFS . Também pode especificar um destino personalizado se os dados do repositório LFS forem armazenados noutro lugar.
migrate_options_lfs_endpoint.description.local=Uma localização de servidor local também é suportada.
-migrate_options_lfs_endpoint.placeholder=Se for deixado em branco, o destino será determinado a partir do URL do clone
+migrate_options_lfs_endpoint.placeholder=Se for deixado em branco, o destino será determinado a partir do URL do clone.
migrate_items=Itens da migração
migrate_items_wiki=Wiki
migrate_items_milestones=Etapas
@@ -1191,10 +1195,10 @@ migrate_items_releases=Lançamentos
migrate_repo=Migrar o repositório
migrate.clone_address=Migrar / clonar a partir do URL
migrate.clone_address_desc=O URL de clonagem HTTP(S) ou Git de um repositório existente
-migrate.github_token_desc=Pode colocar aqui um ou mais códigos separados por vírgulas para tornar mais rápida a migração, para compensar a limitação de velocidade da API do GitHub. AVISO: O abuso desta funcionalidade poderá violar a política do seu fornecedor de serviço e levar ao bloqueio da conta.
+migrate.github_token_desc=Pode colocar aqui um ou mais códigos, separados por vírgulas, para tornar mais rápida a migração, para compensar a limitação de velocidade da API do GitHub. AVISO: O abuso desta funcionalidade poderá violar a política do seu fornecedor de serviço e levar ao bloqueio da(s) sua(a) conta(s).
migrate.clone_local_path=ou uma localização no servidor local
migrate.permission_denied=Não está autorizado a importar repositórios locais.
-migrate.permission_denied_blocked=Não pode importar de servidores não permitidos, por favor peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
+migrate.permission_denied_blocked=Não pode importar de servidores não permitidos. Peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=A localização local é inválida. Não existe ou não é uma pasta.
migrate.invalid_lfs_endpoint=O destino LFS não é válido.
migrate.failed=A migração falhou: %v
@@ -1202,7 +1206,7 @@ migrate.migrate_items_options=É necessário um código de acesso para migrar it
migrated_from=Migrado de %[2]s
migrated_from_fake=Migrado de %[1]s
migrate.migrate=Migrar de %s
-migrate.migrating=Migrando a partir de %s ...
+migrate.migrating=Migrando a partir de %s …
migrate.migrating_failed=A migração de %s falhou.
migrate.migrating_failed.error=Falhou a migração: %s
migrate.migrating_failed_no_addr=A migração falhou.
@@ -1228,6 +1232,7 @@ migrate.migrating_issues=Migrando questões
migrate.migrating_pulls=Migrando pedidos de integração
migrate.cancel_migrating_title=Cancelar migração
migrate.cancel_migrating_confirm=Quer cancelar esta migração?
+migration_status=Estado da migração
mirror_from=réplica de
forked_from=derivado de
@@ -1250,7 +1255,7 @@ clone_this_repo=Clonar este repositório
cite_this_repo=Citar este repositório
create_new_repo_command=Criando um novo repositório na linha de comandos
push_exist_repo=Enviando, pela linha de comandos, um repositório existente
-empty_message=Este repositório não contém qualquer conteúdo.
+empty_message=Este repositório não tem qualquer conteúdo.
broken_message=Os dados Git subjacentes a este repositório não podem ser lidos. Contacte o administrador desta instância ou elimine este repositório.
no_branch=Este repositório não tem quaisquer ramos.
@@ -1318,6 +1323,7 @@ commit_graph.color=Colorido
commit.contained_in=Este cometimento está contido em:
commit.contained_in_default_branch=Este cometimento é parte do ramo principal
commit.load_referencing_branches_and_tags=Carregar ramos e etiquetas que referenciem este cometimento
+commit.merged_in_pr=Este cometimento foi integrado dentro do pedido de integração %s.
blame=Responsabilidade
download_file=Descarregar ficheiro
normal_view=Vista normal
@@ -1331,7 +1337,9 @@ editor.upload_file=Carregar ficheiro
editor.edit_file=Editar ficheiro
editor.preview_changes=Pré-visualizar modificações
editor.cannot_edit_lfs_files=Ficheiros LFS não podem ser editados na interface web.
+editor.cannot_edit_too_large_file=O ficheiro é demasiado grande para ser editado.
editor.cannot_edit_non_text_files=Ficheiros binários não podem ser editados na interface da web.
+editor.file_not_editable_hint=Mas ainda pode renomeá-lo ou movê-lo.
editor.edit_this_file=Editar ficheiro
editor.this_file_locked=Ficheiro bloqueado
editor.must_be_on_a_branch=Tem que estar num ramo para fazer ou propor modificações neste ficheiro.
@@ -1351,7 +1359,7 @@ editor.update=Modificar %s
editor.delete=Eliminar %s
editor.patch=Aplicar remendo (patch)
editor.patching=Remendando (patching):
-editor.fail_to_apply_patch=`Não foi possível aplicar o remendo (patch) "%s"`
+editor.fail_to_apply_patch=Não foi possível aplicar o remendo (patch)
editor.new_patch=Novo remendo (patch)
editor.commit_message_desc=Adicionar uma descrição alargada opcional…
editor.signoff_desc=Adicionar "Assinado-por" seguido do autor do cometimento no fim da mensagem do registo de cometimentos.
@@ -1364,15 +1372,14 @@ editor.new_branch_name_desc=Nome do novo ramo…
editor.cancel=Cancelar
editor.filename_cannot_be_empty=O nome do ficheiro não pode estar em branco.
editor.filename_is_invalid=O nome do ficheiro é inválido: "%s".
-editor.commit_email=Email do cometimento
-editor.invalid_commit_email=O email do comentimento é inválido.
+editor.commit_email=Endereço de email do cometimento
+editor.invalid_commit_email=O endereço de email do comentimento é inválido.
editor.branch_does_not_exist=O ramo "%s" não existe neste repositório.
editor.branch_already_exists=O ramo "%s" já existe neste repositório.
editor.directory_is_a_file=O nome da pasta "%s" já é usado como um nome de ficheiro neste repositório.
-editor.file_is_a_symlink=`"%s" é uma ligação simbólica. Ligações simbólicas não podem ser editadas no editor web`
+editor.file_is_a_symlink=`"%s" é uma ligação simbólica. Ligações simbólicas não podem ser editadas no editor web.`
editor.filename_is_a_directory=O nome de ficheiro "%s" já está a ser usado como um nome de pasta neste repositório.
-editor.file_editing_no_longer_exists=O ficheiro que está a ser editado, "%s", já não existe neste repositório.
-editor.file_deleting_no_longer_exists=O ficheiro que está a ser eliminado, "%s", já não existe neste repositório.
+editor.file_modifying_no_longer_exists=O ficheiro que está a ser modificado, "%s", já não existe neste repositório.
editor.file_changed_while_editing=O conteúdo do ficheiro mudou desde que começou a editar. Clique aqui para ver as modificações ou clique em Cometer novamente para escrever por cima.
editor.file_already_exists=Já existe um ficheiro com o nome "%s" neste repositório.
editor.commit_id_not_matching=O ID do cometimento não corresponde ao ID de quando começou a editar. Faça o cometimento para um ramo de remendo (patch) e depois faça a integração.
@@ -1380,8 +1387,6 @@ editor.push_out_of_date=O envio parece estar obsoleto.
editor.commit_empty_file_header=Cometer um ficheiro vazio
editor.commit_empty_file_text=O ficheiro que está prestes a cometer está vazio. Quer continuar?
editor.no_changes_to_show=Não existem modificações para mostrar.
-editor.fail_to_update_file=Falhou ao modificar/criar o ficheiro "%s".
-editor.fail_to_update_file_summary=Mensagem de erro:
editor.push_rejected_no_message=A modificação foi rejeitada pelo servidor sem qualquer mensagem. Verifique os Automatismos do Git.
editor.push_rejected=A modificação foi rejeitada pelo servidor. Verifique os Automatismos do Git.
editor.push_rejected_summary=Mensagem completa de rejeição:
@@ -1395,6 +1400,15 @@ editor.user_no_push_to_branch=O utilizador não pode enviar para o ramo
editor.require_signed_commit=O ramo requer um cometimento assinado
editor.cherry_pick=Escolher a dedo %s para:
editor.revert=Reverter %s para:
+editor.failed_to_commit=Falhou ao cometer as modificações.
+editor.failed_to_commit_summary=Mensagem de erro:
+
+editor.fork_create=Faça uma derivação do repositório para propor modificações
+editor.fork_create_description=Não pode editar este repositório. Ao invés disso, crie uma derivação, faça as modificações nessa derivação e crie um pedido de integração.
+editor.fork_edit_description=Não pode editar este repositório. As modificações irão ser escritas na sua derivação %s , para que possa criar um pedido de integração.
+editor.fork_not_editable=Fez uma derivação deste repositório, mas a sua derivação não é editável.
+editor.fork_failed_to_push_branch=Falhou ao enviar o ramo %s para o seu repositório.
+editor.fork_branch_exists=O ramo "%s" já existe na sua derivação. Escolha outro nome para o ramo.
commits.desc=Navegar pelo histórico de modificações no código fonte.
commits.commits=Cometimentos
@@ -1552,8 +1566,8 @@ issues.filter_project=Planeamento
issues.filter_project_all=Todos os planeamentos
issues.filter_project_none=Nenhum planeamento
issues.filter_assignee=Encarregado
-issues.filter_assignee_no_assignee=Não atribuído
-issues.filter_assignee_any_assignee=Atribuído a qualquer pessoa
+issues.filter_assignee_no_assignee=Não atribuída
+issues.filter_assignee_any_assignee=Atribuída a alguém
issues.filter_poster=Autor(a)
issues.filter_user_placeholder=Procurar utilizadores
issues.filter_user_no_select=Todos os utilizadores
@@ -1690,7 +1704,7 @@ issues.lock_no_reason=bloqueou o diálogo e restringiu-o aos colaboradores %s
issues.unlock_comment=desbloqueou este diálogo %s
issues.lock_confirm=Bloquear
issues.unlock_confirm=Desbloquear
-issues.lock.notice_1=- Os outros utilizadores deixarão de poder adicionar novos comentários a esta questão.
+issues.lock.notice_1=- Os outros utilizadores não podem adicionar novos comentários a esta questão.
issues.lock.notice_2=- Você e outros colaboradores com acesso a este repositório ainda poderão deixar comentários que outros possam ver.
issues.lock.notice_3=- Poderá sempre voltar a desbloquear esta questão no futuro.
issues.unlock.notice_1=- Toda gente poderá voltar a comentar nesta questão.
@@ -1716,6 +1730,8 @@ issues.remove_time_estimate_at=removeu a estimativa de tempo %s
issues.time_estimate_invalid=O formato da estimativa de tempo é inválido
issues.start_tracking_history=começou a trabalhar %s
issues.tracker_auto_close=O cronómetro será parado automaticamente quando esta questão for fechada
+issues.stopwatch_already_stopped=O cronómetro para esta questão já está parado
+issues.stopwatch_already_created=O cronómetro para esta questão já existe
issues.tracking_already_started=`Você já iniciou a contagem de tempo noutra questão !`
issues.stop_tracking=Parar cronómetro
issues.stop_tracking_history=trabalhou durante %[1]s %[2]s
@@ -1779,7 +1795,7 @@ issues.dependency.add_error_same_issue=Não pode fazer uma questão depender de
issues.dependency.add_error_dep_issue_not_exist=A questão dependente não existe.
issues.dependency.add_error_dep_not_exist=A dependência não existe.
issues.dependency.add_error_dep_exists=A dependência já existe.
-issues.dependency.add_error_cannot_create_circular=Não pode criar uma dependência onde duas questões se bloqueiam simultaneamente.
+issues.dependency.add_error_cannot_create_circular=Não pode criar uma dependência com duas questões em que cada uma bloqueia a outra.
issues.dependency.add_error_dep_not_same_repo=Ambas as questões têm que estar no mesmo repositório.
issues.review.self.approval=Não pode aprovar o seu próprio pedido de integração.
issues.review.self.rejection=Não pode solicitar modificações sobre o seu próprio pedido de integração.
@@ -1793,7 +1809,7 @@ issues.review.reject=modificações solicitadas %s
issues.review.wait=foi solicitada para revisão %s
issues.review.add_review_request=solicitou revisão de %s %s
issues.review.remove_review_request=removeu a solicitação de revisão para %s %s
-issues.review.remove_review_request_self=recusou-se a rever %s
+issues.review.remove_review_request_self=recusou rever %s
issues.review.pending=Pendente
issues.review.pending.tooltip=Este comentário não está visível para os outros utilizadores, neste momento. Para submeter os seus comentários pendentes, escolha "%s" → "%s/%s/%s" no topo da página.
issues.review.review=Revisão
@@ -1815,7 +1831,7 @@ issues.review.requested=Revisão pendente
issues.review.rejected=Modificações solicitadas
issues.review.stale=Modificada depois da aprovação
issues.review.unofficial=Aprovação não oficial
-issues.assignee.error=Nem todos os encarregados foram adicionados devido a um erro inesperado.
+issues.assignee.error=Nem todos os encarregados foram adicionados, devido a um erro inesperado.
issues.reference_issue.body=Conteúdo
issues.content_history.deleted=eliminado
issues.content_history.edited=editado
@@ -1853,11 +1869,11 @@ pulls.show_all_commits=Mostrar todos os cometimentos
pulls.show_changes_since_your_last_review=Mostrar modificações desde a sua última revisão
pulls.showing_only_single_commit=Mostrando apenas as modificações do comentimento %[1]s
pulls.showing_specified_commit_range=Mostrando apenas as modificações entre %[1]s..%[2]s
-pulls.select_commit_hold_shift_for_range=Escolha o comentimento. Mantenha premido o shift enquanto clica para escolher um intervalo
+pulls.select_commit_hold_shift_for_range=Escolha o comentimento. Para escolher um intervalo, mantenha premido o shift enquanto clica.
pulls.review_only_possible_for_full_diff=A revisão só é possível ao visualizar o diff completo
pulls.filter_changes_by_commit=Filtrar por cometimento
pulls.nothing_to_compare=Estes ramos são iguais. Não há necessidade de criar um pedido de integração.
-pulls.nothing_to_compare_have_tag=O ramo/etiqueta escolhidos são iguais.
+pulls.nothing_to_compare_have_tag=Os ramos/etiquetas escolhidos são iguais.
pulls.nothing_to_compare_and_allow_empty_pr=Estes ramos são iguais. Este pedido de integração ficará vazio.
pulls.has_pull_request=`Já existe um pedido de integração entre estes ramos: %[2]s#%[3]d `
pulls.create=Criar um pedido de integração
@@ -1882,7 +1898,7 @@ pulls.add_prefix=Adicione o prefixo %s
pulls.remove_prefix=Remover o prefixo %s
pulls.data_broken=Este pedido de integração está danificado devido à falta de informação da derivação.
pulls.files_conflicted=Este pedido de integração contém modificações que entram em conflito com o ramo de destino.
-pulls.is_checking=Verificando se existem conflitos na integração...
+pulls.is_checking=Verificando se existem conflitos na integração…
pulls.is_ancestor=Este ramo já está incluído no ramo de destino. Não há nada a integrar.
pulls.is_empty=As modificações feitas neste ramo já existem no ramo de destino. Este cometimento ficará vazio.
pulls.required_status_check_failed=Algumas das verificações obrigatórias não foram bem sucedidas.
@@ -1923,17 +1939,17 @@ pulls.merge_commit_id=O ID de cometimento da integração
pulls.require_signed_wont_sign=O ramo requer que os cometimentos sejam assinados mas esta integração não vai ser assinada
pulls.invalid_merge_option=Não pode usar esta opção de integração neste pedido de integração.
-pulls.merge_conflict=A integração falhou: Houve um conflito durante a integração. Dica: tente uma estratégia diferente
+pulls.merge_conflict=A integração falhou: Houve um conflito durante a integração. Dica: Tente uma estratégia diferente.
pulls.merge_conflict_summary=Mensagem de erro
-pulls.rebase_conflict=A integração falhou: Houve um conflito durante a mudança de base do cometimento %[1]s. Dica: Tente uma estratégia diferente
+pulls.rebase_conflict=A integração falhou: Houve um conflito durante a mudança de base do cometimento %[1]s. Dica: Tente uma estratégia diferente.
pulls.rebase_conflict_summary=Mensagem de erro
-pulls.unrelated_histories=A integração falhou: O topo da integração e a base não partilham um histórico comum. Dica: Tente uma estratégia diferente
-pulls.merge_out_of_date=Falhou a integração: Enquanto estava a gerar a integração, a base foi modificada. Dica: Tente de novo.
-pulls.head_out_of_date=Falhou a integração: Enquanto estava a gerar a integração, o topo foi modificado. Dica: Tente de novo.
-pulls.has_merged=Falhou: A integração constante do pedido foi executada, não pode integrar novamente nem modificar o ramo alvo.
+pulls.unrelated_histories=A integração falhou: O topo da integração e a base não partilham um histórico comum. Dica: Tente uma estratégia diferente.
+pulls.merge_out_of_date=Falhou a integração: Enquanto gerava a integração, a base foi modificada. Dica: Tente de novo.
+pulls.head_out_of_date=Falhou a integração: Enquanto gerava a integração, o topo foi modificado. Dica: Tente de novo.
+pulls.has_merged=Falhou: A integração constante do pedido foi executada. Não pode integrar novamente nem modificar o ramo alvo.
pulls.push_rejected=O envio falhou: O envio foi rejeitado. Reveja os Automatismos do Git neste repositório.
pulls.push_rejected_summary=Mensagem completa de rejeição
-pulls.push_rejected_no_message=O envio falhou: O envio foi rejeitado mas não houve qualquer mensagem remota. Reveja os Automatismos do Git para este repositório
+pulls.push_rejected_no_message=O envio falhou: O envio foi rejeitado mas não houve qualquer mensagem remota. Reveja os Automatismos do Git para este repositório.
pulls.open_unmerged_pull_exists=`Não pode executar uma operação de reabertura porque há um pedido de integração pendente (#%d) com propriedades idênticas.`
pulls.status_checking=Algumas verificações estão pendentes
pulls.status_checks_success=Todas as verificações foram bem sucedidas
@@ -1957,9 +1973,9 @@ pulls.cmd_instruction_checkout_title=Checkout
pulls.cmd_instruction_checkout_desc=A partir do seu repositório, crie um novo ramo e teste nele as modificações.
pulls.cmd_instruction_merge_title=Integrar
pulls.cmd_instruction_merge_desc=Integrar as modificações e enviar para o Gitea.
-pulls.cmd_instruction_merge_warning=Aviso: Esta operação não pode executar pedidos de integração porque "auto-identificar integração manual" não estava habilitado
+pulls.cmd_instruction_merge_warning=Aviso: Esta operação não pode executar pedidos de integração porque a opção "auto-identificar integração manual" não está habilitada.
pulls.clear_merge_message=Apagar mensagem de integração
-pulls.clear_merge_message_hint=Apagar a mensagem de integração apenas remove o conteúdo da mensagem de cometimento e mantém os rodapés do git, tais como "Co-Autorado-Por …".
+pulls.clear_merge_message_hint=Apagar a mensagem de integração apenas remove o conteúdo da mensagem de cometimento e mantém os rodapés gerados pelo git, tais como "Co-Autorado-Por…".
pulls.auto_merge_button_when_succeed=(quando as verificações forem bem-sucedidas)
pulls.auto_merge_when_succeed=Integrar automaticamente quando todas as verificações forem bem-sucedidas
@@ -2139,7 +2155,7 @@ contributors.contribution_type.additions=Adições
contributors.contribution_type.deletions=Eliminações
settings=Configurações
-settings.desc=Configurações é onde pode gerir as configurações do repositório
+settings.desc=Configurações é onde pode gerir as configurações do repositório.
settings.options=Repositório
settings.public_access=Acesso público
settings.public_access_desc=Configurar as permissões de acesso público do visitante para substituir os valores predefinidos deste repositório.
@@ -2153,6 +2169,7 @@ settings.collaboration.write=Escrita
settings.collaboration.read=Leitura
settings.collaboration.owner=Proprietário(a)
settings.collaboration.undefined=Não definido
+settings.collaboration.per_unit=Permissões da Unidade
settings.hooks=Automatismos web
settings.githooks=Automatismos do Git
settings.basic_settings=Configurações básicas
@@ -2162,7 +2179,7 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Configure o seu
settings.mirror_settings.docs.disabled_push_mirror.instructions=Configure os seu planeamento para puxar, automaticamente, cometimentos, etiquetas e ramos a partir de outro repositório.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Neste momento isto só pode ser feito no menu "Nova migração". Para obter mais informação, consulte:
settings.mirror_settings.docs.disabled_push_mirror.info=As réplicas foram desabilitadas pelo administrador deste sítio.
-settings.mirror_settings.docs.no_new_mirrors=O seu repositório está a replicar modificações para, ou a partir, de outro repositório. Tenha em mente que não pode criar novas réplicas neste momento.
+settings.mirror_settings.docs.no_new_mirrors=O seu repositório está a replicar modificações para, ou a partir de, outro repositório. Tenha em mente que neste momento não pode criar novas réplicas.
settings.mirror_settings.docs.can_still_use=Embora não possa modificar réplicas existentes ou criar novas, ainda pode usar a sua réplica existente.
settings.mirror_settings.docs.pull_mirror_instructions=Para configurar uma réplica de outro repositório, consulte
settings.mirror_settings.docs.more_information_if_disabled=Pode aprender mais sobre réplicas de envios e de puxadas aqui:
@@ -2274,13 +2291,13 @@ settings.trust_model.default=Modelo de confiança padrão
settings.trust_model.default.desc=Usar o modelo de confiança padrão do repositório para esta instalação.
settings.trust_model.collaborator=Colaborador
settings.trust_model.collaborator.long=Colaborador: Confiar nas assinaturas dos colaboradores
-settings.trust_model.collaborator.desc=Assinaturas válidas dos colaboradores deste repositório serão marcadas como "fiável" (independentemente de corresponderem, ou não, ao autor do cometimento). Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde", se não corresponder.
+settings.trust_model.collaborator.desc=Assinaturas válidas dos colaboradores deste repositório serão marcadas como "fiável", independentemente de corresponderem, ou não, ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde", se não corresponder.
settings.trust_model.committer=Autor do cometimento
-settings.trust_model.committer.long=Autor do cometimento: Confiar nas assinaturas que correspondam aos autores dos cometimentos (isto corresponde ao funcionamento do GitHub e força a que os cometimentos assinados do Gitea tenham o Gitea como autor do cometimento)
-settings.trust_model.committer.desc=Assinaturas válidas apenas serão marcadas como "fiável" se corresponderem ao autor do cometimento, caso contrário serão marcadas como "não corresponde". Isto irá forçar o Gitea a ser o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no resumo do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados.
+settings.trust_model.committer.long=Autor do cometimento: Confiar nas assinaturas que correspondam aos autores dos cometimentos. Isto corresponde ao comportamento do GitHub e força a que os cometimentos assinados do Gitea tenham o Gitea como autor do cometimento.
+settings.trust_model.committer.desc=Assinaturas válidas apenas serão marcadas como "fiável" se corresponderem ao autor do cometimento, caso contrário serão marcadas como "não corresponde". Isto irá forçar o Gitea a ser o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no rodapé do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados.
settings.trust_model.collaboratorcommitter=Colaborador + Autor do cometimento
settings.trust_model.collaboratorcommitter.long=Colaborador + Autor do cometimento: Confiar nas assinaturas dos colaboradores que correspondam ao autor do cometimento
-settings.trust_model.collaboratorcommitter.desc=Assinaturas válidas feitas por colaboradores deste repositório serão marcadas como "fiável" se corresponderem ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde" se não corresponder. Isto irá forçar a que o Gitea seja marcado como sendo o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no resumo do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados.
+settings.trust_model.collaboratorcommitter.desc=Assinaturas válidas feitas por colaboradores deste repositório serão marcadas como "fiável" se corresponderem ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde" se não corresponder. Isto irá forçar a que o Gitea seja marcado como sendo o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no rodapé do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados.
settings.wiki_delete=Eliminar dados do wiki
settings.wiki_delete_desc=Eliminar os dados do repositório do wiki é permanente e não pode ser revertido.
settings.wiki_delete_notices_1=- Isso excluirá e desabilitará permanentemente o wiki do repositório para %s.
@@ -2289,7 +2306,7 @@ settings.wiki_deletion_success=Os dados do repositório do wiki foram eliminados
settings.delete=Eliminar este repositório
settings.delete_desc=Eliminar um repositório é permanente e não pode ser revertido.
settings.delete_notices_1=- Esta operação NÃO PODERÁ ser revertida.
-settings.delete_notices_2=- Esta operação eliminará permanentemente o repositório %s incluindo código-fonte, questões, comentários, dados do wiki e configurações dos colaboradores.
+settings.delete_notices_2=- Esta operação eliminará permanentemente o repositório %s , incluindo código-fonte, questões, comentários, dados do wiki e configurações dos colaboradores.
settings.delete_notices_fork_1=- Derivações deste repositório tornar-se-ão independentes, após a eliminação.
settings.deletion_success=O repositório foi eliminado.
settings.update_settings_success=As configurações do repositório foram modificadas.
@@ -2321,8 +2338,8 @@ settings.hooks_desc=Os automatismos web fazem pedidos HTTP POST automaticamente
settings.webhook_deletion=Remover automatismo web
settings.webhook_deletion_desc=Remover um automatismo web elimina as configurações e o histórico de entrega desse automatismo. Quer continuar?
settings.webhook_deletion_success=O automatismo web foi removido.
-settings.webhook.test_delivery=Entrega de teste
-settings.webhook.test_delivery_desc=Testar este automatismo web com um evento falso.
+settings.webhook.test_delivery=Testar o envio
+settings.webhook.test_delivery_desc=Testar este automatismo web com um evento de envio falso.
settings.webhook.test_delivery_desc_disabled=Para testar este automatismo web com um evento falso, habilite-o.
settings.webhook.request=Pedido
settings.webhook.response=Resposta
@@ -2342,6 +2359,7 @@ settings.payload_url=URL de destino
settings.http_method=Método HTTP
settings.content_type=Tipo de conteúdo POST
settings.secret=Segredo
+settings.webhook_secret_desc=Se o servidor de automatismos web suportar a utilização de segredos, você pode seguir o manual do automatismo web e preencher um segredo aqui.
settings.slack_username=Nome de utilizador
settings.slack_icon_url=URL do ícone
settings.slack_color=Cor
@@ -2371,7 +2389,7 @@ settings.event_repository=Repositório
settings.event_repository_desc=Repositório criado ou eliminado.
settings.event_header_issue=Eventos da questão
settings.event_issues=Questões
-settings.event_issues_desc=Questão aberta, fechada, reaberta ou editada.
+settings.event_issues_desc=Questão aberta, fechada, reaberta, editada ou eliminada.
settings.event_issue_assign=Questão atribuída
settings.event_issue_assign_desc=Encarregado atribuído ou retirado à questão.
settings.event_issue_label=Questão com rótulo
@@ -2382,7 +2400,7 @@ settings.event_issue_comment=Comentário da questão
settings.event_issue_comment_desc=Comentário da questão criado, editado ou eliminado.
settings.event_header_pull_request=Eventos de pedidos de integração
settings.event_pull_request=Pedido de integração
-settings.event_pull_request_desc=Pedido de integração aberto, fechado, reaberto ou editado.
+settings.event_pull_request_desc=Pedido de integração aberto, fechado, reaberto, editado ou eliminado.
settings.event_pull_request_assign=Encarregado atribuído ao pedido de integração
settings.event_pull_request_assign_desc=Encarregado atribuído ou retirado ao pedido de integração.
settings.event_pull_request_label=Rótulo atribuído ao pedido de integração
@@ -2400,8 +2418,10 @@ settings.event_pull_request_review_request_desc=A revisão do pedido de integra
settings.event_pull_request_approvals=Aprovações do pedido de integração
settings.event_pull_request_merge=Integração constante no pedido
settings.event_header_workflow=Eventos da sequência de trabalho
+settings.event_workflow_run=Execução da sequência de trabalho
+settings.event_workflow_run_desc=A execução da sequência de trabalho das operações do Gitea foi colocada em fila, está em espera, em andamento ou concluída.
settings.event_workflow_job=Trabalhos da sequência de trabalho
-settings.event_workflow_job_desc=O trabalho da sequência de trabalho das operações do Gitea foi colocado em fila, está em espera, em andamento ou concluída.
+settings.event_workflow_job_desc=O trabalho da sequência de trabalho das operações do Gitea foi colocado em fila, está em espera, em andamento ou concluído.
settings.event_package=Pacote
settings.event_package_desc=Pacote criado ou eliminado num repositório.
settings.branch_filter=Filtro de ramos
@@ -2525,7 +2545,7 @@ settings.block_on_official_review_requests_desc=A integração não será possí
settings.block_outdated_branch=Bloquear integração se o pedido de integração for obsoleto
settings.block_outdated_branch_desc=A integração não será possível quando o ramo de topo estiver abaixo do ramo base.
settings.block_admin_merge_override=Os administradores têm de cumprir as regras de salvaguarda dos ramos
-settings.block_admin_merge_override_desc=Os administradores têm de cumprir as regras de salvaguarda e não as podem contornar.
+settings.block_admin_merge_override_desc=Os administradores têm de cumprir as regras de salvaguarda do ramo e não as podem contornar.
settings.default_branch_desc=Escolha um ramo do repositório como sendo o predefinido para pedidos de integração e cometimentos:
settings.merge_style_desc=Estilos de integração
settings.default_merge_style_desc=Tipo de integração predefinido
@@ -2552,10 +2572,10 @@ settings.matrix.homeserver_url=URL do servidor caseiro
settings.matrix.room_id=ID da sala
settings.matrix.message_type=Tipo de mensagem
settings.visibility.private.button=Tornar privado
-settings.visibility.private.text=Mudar a visibilidade para privado não só irá tornar o repositório visível somente para membros autorizados como também poderá remover a relação entre o repositório e derivações, vigilâncias e favoritos.
+settings.visibility.private.text=Mudar a visibilidade para privado irá tornar o repositório visível somente para membros autorizados e poderá remover a relação entre o repositório e derivações existentes, vigilâncias e favoritos.
settings.visibility.private.bullet_title=Mudar a visibilidade para privado irá:
settings.visibility.private.bullet_one=Tornar o repositório visível somente para membros autorizados.
-settings.visibility.private.bullet_two=Possivelmente remover a relação entre o repositório e derivações , vigilâncias e favoritos .
+settings.visibility.private.bullet_two=Poderá remover a relação entre o repositório e derivações , vigilâncias e favoritos .
settings.visibility.public.button=Tornar público
settings.visibility.public.text=Mudar a visibilidade para público irá tornar o repositório visível para qualquer pessoa.
settings.visibility.public.bullet_title=Mudar a visibilidade para público irá:
@@ -2592,11 +2612,11 @@ settings.lfs_invalid_locking_path=Localização inválida: %s
settings.lfs_invalid_lock_directory=Não foi possível bloquear a pasta: %s
settings.lfs_lock_already_exists=Já existe um bloqueio: %s
settings.lfs_lock=Bloquear
-settings.lfs_lock_path=Localização do ficheiro a bloquear...
+settings.lfs_lock_path=Localização do ficheiro a bloquear…
settings.lfs_locks_no_locks=Sem bloqueios
settings.lfs_lock_file_no_exist=O ficheiro bloqueado não existe no ramo principal
settings.lfs_force_unlock=Forçar desbloqueio
-settings.lfs_pointers.found=Encontrado(s) %d ponteiro(s) de blob - %d associado(a), %d desassociado(a) (%d ausente do armazenamento)
+settings.lfs_pointers.found=Encontrado(s) %d ponteiro(s) de blob — %d associado(a), %d desassociado(a) (%d ausente do armazenamento)
settings.lfs_pointers.sha=SHA do blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=No repositório
@@ -2754,6 +2774,8 @@ branch.new_branch_from=`Criar um novo ramo a partir do ramo "%s"`
branch.renamed=O ramo %s foi renomeado para %s.
branch.rename_default_or_protected_branch_error=Só os administradores é que podem renomear o ramo principal ou ramos protegidos.
branch.rename_protected_branch_failed=Este ramo está protegido por regras de salvaguarda baseadas em padrões glob.
+branch.commits_divergence_from=Divergência nos cometimentos: %[1]d atrás e %[2]d à frente de %[3]s
+branch.commits_no_divergence=Idêntico ao ramo %[1]s
tag.create_tag=Criar etiqueta %s
tag.create_tag_operation=Criar etiqueta
@@ -2767,6 +2789,7 @@ topic.done=Concluído
topic.count_prompt=Não pode escolher mais do que 25 tópicos
topic.format_prompt=Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') ou pontos ('.') e podem ter até 35 caracteres. As letras têm que ser minúsculas.
+find_file.follow_symlink=Seguir esta ligação simbólica para onde ela está apontando
find_file.go_to_file=Ir para o ficheiro
find_file.no_matching=Não foi encontrado qualquer ficheiro correspondente
@@ -2776,7 +2799,7 @@ error.csv.invalid_field_count=Não é possível apresentar este ficheiro porque
error.broken_git_hook=Os automatismos git deste repositório parecem estar danificados. Consulte a documentação sobre como os consertar e depois envie alguns cometimentos para refrescar o estado.
[graphs]
-component_loading=A carregar %s...
+component_loading=A carregar %s…
component_loading_failed=Não foi possível carregar %s
component_loading_info=Isto pode demorar um pouco…
component_failed_to_load=Ocorreu um erro inesperado.
@@ -2807,6 +2830,7 @@ team_permission_desc=Permissão
team_unit_desc=Permitir acesso às secções do repositório
team_unit_disabled=(desabilitada)
+form.name_been_taken=O nome da organização "%s" já foi tomado.
form.name_reserved=O nome de organização "%s" está reservado.
form.name_pattern_not_allowed=O padrão "%s" não é permitido no nome de uma organização.
form.create_org_not_allowed=Não tem permissão para criar uma organização.
@@ -2814,12 +2838,17 @@ form.create_org_not_allowed=Não tem permissão para criar uma organização.
settings=Configurações
settings.options=Organização
settings.full_name=Nome completo
-settings.email=Email de contacto
+settings.email=Endereço de email de contacto
settings.website=Sítio web
settings.location=Localização
settings.permission=Permissões
settings.repoadminchangeteam=O administrador do repositório pode adicionar e remover o acesso às equipas
settings.visibility=Visibilidade
+settings.change_visibility=Alterar visibilidade
+settings.change_visibility_notices_1=Se a organização for convertida em privada, a contagem de favoritos do repositório será eliminada e não poderá ser restaurada.
+settings.change_visibility_notices_2=Os não-membros irão perder acesso aos repositórios da organização se a visibilidade for mudada para privada.
+settings.change_visibility_success=A visibilidade da organização %s foi mudada com sucesso.
+settings.visibility_desc=Mudar quem pode ver a organização e os seus repositórios.
settings.visibility.public=Público
settings.visibility.limited=Limitada (visível apenas para utilizadores autenticados)
settings.visibility.limited_shortname=Limitada
@@ -2828,15 +2857,28 @@ settings.visibility.private_shortname=Privado
settings.update_settings=Modificar configurações
settings.update_setting_success=As configurações da organização foram modificadas.
-settings.change_orgname_prompt=Nota: Mudar o nome da organização também irá mudar o URL da organização e libertar o nome antigo.
-settings.change_orgname_redirect_prompt=O nome antigo, enquanto não for reivindicado, irá reencaminhar para o novo.
+
+settings.rename=Renomear organização
+settings.rename_desc=Mudar o nome da organização também irá mudar o URL da organização e libertar o nome antigo.
+settings.rename_success=A organização %[1]s foi renomeada para %[2]s com sucesso.
+settings.rename_no_change=O nome da organização não foi alterado.
+settings.rename_new_org_name=Novo nome da organização
+settings.rename_failed=A renomeação da organização falhou por causa de um erro interno
+settings.rename_notices_1=Esta operação NÃO PODERÁ ser revertida.
+settings.rename_notices_2=O antigo nome, enquanto não for reivindicado, irá reencaminhar para o novo.
+
settings.update_avatar_success=O avatar da organização foi modificado.
settings.delete=Eliminar organização
settings.delete_account=Eliminar esta organização
settings.delete_prompt=A organização será removida permanentemente. Essa operação NÃO PODERÁ ser revertida!
+settings.name_confirm=Insira o nome da organização para confirmar:
+settings.delete_notices_1=Esta operação NÃO PODERÁ ser revertida.
+settings.delete_notices_2=Esta operação irá eliminar de forma permanente todos os repositórios de %s , incluindo código-fonte, questões, comentários, dados do wiki e configurações dos colaboradores.
+settings.delete_notices_3=Esta operação irá eliminar de forma permanente todos os pacotes de %s .
+settings.delete_notices_4=Esta operação irá eliminar de forma permanente todos os planeamentos de %s .
settings.confirm_delete_account=Confirme a eliminação
-settings.delete_org_title=Eliminar organização
-settings.delete_org_desc=Esta organização será eliminada permanentemente. Quer continuar?
+settings.delete_failed=A eliminação da organização falhou por causa de um erro interno
+settings.delete_successful=A organização %s foi eliminada com sucesso.
settings.hooks_desc=Adicionar automatismos web que serão despoletados para todos os repositórios desta organização.
settings.labels_desc=Adicionar rótulos que possam ser usados em questões para todos os repositórios desta organização.
@@ -2892,7 +2934,7 @@ teams.remove_all_repos_title=Remover todos os repositórios da equipa
teams.remove_all_repos_desc=Isto irá remover todos os repositórios da equipa.
teams.add_all_repos_title=Adicionar todos os repositórios
teams.add_all_repos_desc=Isto irá adicionar todos os repositórios da organização à equipa.
-teams.add_nonexistent_repo=O repositório que está a tentar adicionar não existe, por favor crie-o primeiro.
+teams.add_nonexistent_repo=O repositório que está a tentar adicionar não existe. Crie-o primeiro.
teams.add_duplicate_users=O utilizador já é um membro da equipa.
teams.repos.none=Não há repositórios que possam ser acedidos por esta equipa.
teams.members.none=Não há membros nesta equipa.
@@ -2933,7 +2975,7 @@ repositories=Repositórios
hooks=Automatismos web
integrations=Integrações
authentication=Fontes de autenticação
-emails=Emails do utilizador
+emails=Endereços de email do utilizador
config=Configuração
config_summary=Resumo
config_settings=Configurações
@@ -2980,12 +3022,12 @@ dashboard.archive_cleanup=Eliminar arquivos de repositórios antigos
dashboard.deleted_branches_cleanup=Limpar ramos eliminados
dashboard.update_migration_poster_id=Sincronizar os IDs do remetente da migração
dashboard.git_gc_repos=Fazer a recolha do lixo em todos os repositórios
-dashboard.resync_all_sshkeys=Sincronizar o ficheiro '.ssh/authorized_keys' com as chaves SSH do Gitea.
-dashboard.resync_all_sshprincipals=Modificar o ficheiro '.ssh/authorized_principals' com os protagonistas SSH do Gitea.
-dashboard.resync_all_hooks=Voltar a sincronizar automatismos de pré-acolhimento, modificação e pós-acolhimento de todos os repositórios.
+dashboard.resync_all_sshkeys=Sincronizar o ficheiro '.ssh/authorized_keys' com as chaves SSH do Gitea
+dashboard.resync_all_sshprincipals=Modificar o ficheiro '.ssh/authorized_principals' com os protagonistas SSH do Gitea
+dashboard.resync_all_hooks=Voltar a sincronizar automatismos de pré-acolhimento, modificação e pós-acolhimento de todos os repositórios
dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git em falta para os quais existam registos
dashboard.sync_external_users=Sincronizar dados externos do utilizador
-dashboard.cleanup_hook_task_table=Limpar tabela hook_task
+dashboard.cleanup_hook_task_table=Limpar a tabela hook_task
dashboard.cleanup_packages=Limpar pacotes expirados
dashboard.cleanup_actions=Limpar recursos das operações expirados
dashboard.server_uptime=Tempo em funcionamento contínuo do servidor
@@ -3018,7 +3060,7 @@ dashboard.total_gc_pause=Pausa total da recolha de lixo
dashboard.last_gc_pause=Última pausa da recolha de lixo
dashboard.gc_times=N.º de recolhas de lixo
dashboard.delete_old_actions=Eliminar todo o trabalho antigo da base de dados
-dashboard.delete_old_actions.started=Foi iniciado o processo de eliminação de todo o trabalho antigo da base de dados.
+dashboard.delete_old_actions.started=Foi iniciado o processo de eliminação de todo o trabalho antigo da base de dados
dashboard.update_checker=Verificador de novas versões
dashboard.delete_old_system_notices=Eliminar todas as notificações do sistema antigas da base de dados
dashboard.gc_lfs=Recolher lixo dos meta-elementos LFS
@@ -3072,7 +3114,7 @@ users.still_own_repo=Este utilizador ainda possui um ou mais repositórios. Elim
users.still_has_org=Este utilizador é membro de uma organização. Remova, primeiro, o utilizador de todas as organizações.
users.purge=Eliminar utilizador
users.purge_help=Eliminar o utilizador à força, juntamente com todos os seus repositórios, organizações e pacotes. Também serão eliminados todos os seus comentários.
-users.still_own_packages=Este utilizador ainda possui um ou mais pacotes, elimine esses pacotes primeiro.
+users.still_own_packages=Este utilizador ainda possui um ou mais pacotes. Elimine esses pacotes primeiro.
users.deletion_success=A conta de utilizador foi eliminada.
users.reset_2fa=Reinicializar a autenticação em dois passos
users.list_status_filter.menu_text=Filtro
@@ -3092,11 +3134,11 @@ users.details=Detalhes do utilizador
emails.email_manage_panel=Gestão de endereços de email do utilizador
emails.primary=Principal
emails.activated=Em uso
-emails.filter_sort.email=Email
-emails.filter_sort.email_reverse=Email (invertido)
+emails.filter_sort.email=Endereço de email
+emails.filter_sort.email_reverse=Endereço de email (inverso)
emails.filter_sort.name=Nome de utilizador
-emails.filter_sort.name_reverse=Nome de utilizador (invertido)
-emails.updated=Email modificado
+emails.filter_sort.name_reverse=Nome de utilizador (inverso)
+emails.updated=Endereço de email modificado
emails.not_updated=Falhou a modificação do endereço de email solicitado: %v
emails.duplicate_active=Este endereço de email já está a ser usado por outro utilizador.
emails.change_email_header=Modificar propriedades do email
@@ -3104,7 +3146,7 @@ emails.change_email_text=Tem a certeza que quer modificar este endereço de emai
emails.delete=Eliminar email
emails.delete_desc=Tem a certeza que quer eliminar este endereço de email?
emails.deletion_success=O endereço de email foi eliminado.
-emails.delete_primary_email_error=Não pode eliminar o email principal.
+emails.delete_primary_email_error=Não pode eliminar o endereço de email principal.
orgs.org_manage_panel=Gestão das organizações
orgs.name=Nome
@@ -3218,9 +3260,11 @@ auths.oauth2_required_claim_name_helper=Defina este nome para restringir o iníc
auths.oauth2_required_claim_value=Valor de Reivindicação obrigatório
auths.oauth2_required_claim_value_helper=Defina este valor para restringir o início de sessão desta fonte a utilizadores que tenham uma reivindicação com este nome e este valor
auths.oauth2_group_claim_name=Reivindicar nome que fornece nomes de grupo para esta fonte. (Opcional)
-auths.oauth2_admin_group=Valor da Reivindicação de Grupo para utilizadores administradores. (Opcional - exige a reivindicação de nome acima)
-auths.oauth2_restricted_group=Valor da Reivindicação de Grupo para utilizadores restritos. (Opcional - exige a reivindicação de nome acima)
-auths.oauth2_map_group_to_team=Mapear grupos reclamados em equipas da organização (opcional — requer nome de reclamação acima).
+auths.oauth2_full_name_claim_name=Nome completo reivindicado. (Opcional — se for definido, o nome completo do utilizador será sempre sincronizado com este reivindicado)
+auths.oauth2_ssh_public_key_claim_name=Nome reivindicado da chave pública SSH
+auths.oauth2_admin_group=Valor da Reivindicação de Grupo para utilizadores administradores. (Opcional — exige a reivindicação de nome acima)
+auths.oauth2_restricted_group=Valor da Reivindicação de Grupo para utilizadores restritos. (Opcional — exige a reivindicação de nome acima)
+auths.oauth2_map_group_to_team=Mapear grupos reclamados em equipas da organização. (Opcional — exige a reivindicação de nome acima)
auths.oauth2_map_group_to_team_removal=Remover utilizadores das equipas sincronizadas se esses utilizadores não pertencerem ao grupo correspondente.
auths.enable_auto_register=Habilitar o registo automático
auths.sspi_auto_create_users=Criar utilizadores automaticamente
@@ -3230,7 +3274,7 @@ auths.sspi_auto_activate_users_helper=Permitir que o método de autenticação S
auths.sspi_strip_domain_names=Remover nomes de domínio dos nomes de utilizador
auths.sspi_strip_domain_names_helper=Se esta opção estiver marcada, os nomes de domínio serão removidos dos nomes do início de sessão (ex.: "DOMÍNIO\utilizador" e "utilizador@exemplo.org" tornar-se-ão "utilizador", simplesmente).
auths.sspi_separator_replacement=Separador a usar em vez de \, / e @
-auths.sspi_separator_replacement_helper=O carácter a ser usado para substituir os separadores de nomes de início de sessão de nível inferior (ex.: o \ em "DOMÍNIO\utilizador") e os nomes principais do utilizador (ex.: o @ em "utilizador@exemplo.org").
+auths.sspi_separator_replacement_helper=O caractere a ser usado para substituir os separadores de nomes de início de sessão de nível inferior (ex.: o \ em "DOMÍNIO\utilizador") e os nomes principais do utilizador (ex.: o @ em "utilizador@exemplo.org").
auths.sspi_default_language=Idioma predefinido do utilizador
auths.sspi_default_language_helper=Idioma predefinido para utilizadores criados automaticamente pelo método de autenticação SSPI. Deixe em branco se preferir que o idioma seja determinado automaticamente.
auths.tips=Dicas
@@ -3348,7 +3392,7 @@ config.mailer_sendmail_path=Localização do sendmail
config.mailer_sendmail_args=Argumentos extras para o sendmail
config.mailer_sendmail_timeout=Tempo limite do Sendmail
config.mailer_use_dummy=Fictício
-config.test_email_placeholder=Email (ex.: teste@exemplo.com)
+config.test_email_placeholder=Endereço de email (ex.: teste@exemplo.com)
config.send_test_mail=Enviar email de teste
config.send_test_mail_submit=Enviar
config.test_mail_failed=Falhou o envio de um email de teste para "%s": %v
@@ -3381,6 +3425,7 @@ config.picture_service=Serviço de imagem
config.disable_gravatar=Desabilitar o Gravatar
config.enable_federated_avatar=Habilitar avatares federados
config.open_with_editor_app_help=Os editores de "Abrir com" do menu de clonagem. Se for deixado em branco, será usado o predefinido. Expanda para ver o predefinido.
+config.git_guide_remote_name=Nome remoto do repositório para os comandos git no guia
config.git_config=Configuração Git
config.git_disable_diff_highlight=Desabilitar o realce de sintaxe no diff
@@ -3465,8 +3510,8 @@ self_check.startup_warnings=Alertas do arranque:
self_check.database_collation_mismatch=Supor que a base de dados usa a colação: %s
self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Gitea possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado.
self_check.database_inconsistent_collation_columns=A base de dados está a usar a colação %s, mas estas colunas estão a usar colações diferentes. Isso poderá causar alguns problemas inesperados.
-self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "gitea doctor convert" para resolver os problemas de colação. Também pode resolver o problema com comandos SQL "ALTER ... COLLATE ..." aplicados manualmente.
-self_check.database_fix_mssql=Para utilizadores do MSSQL só pode resolver o problema aplicando comandos SQL "ALTER ... COLLATE ..." manualmente, por enquanto.
+self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "gitea doctor convert" para resolver os problemas de colação. Também pode resolver o problema manualmente com comandos SQL "ALTER ... COLLATE ...".
+self_check.database_fix_mssql=Para utilizadores do MSSQL só pode resolver o problema manualmente com comandos SQL "ALTER ... COLLATE ...", por enquanto.
self_check.location_origin_mismatch=O URL corrente (%[1]s) não corresponde ao URL visto pelo Gitea (%[2]s). Se estiver a usar um reverse proxy, certifique-se que os cabeçalhos "Host" e "X-Forwarded-Proto" estão bem definidos.
[action]
@@ -3603,7 +3648,7 @@ arch.install=Sincronizar pacote com pacman:
arch.repository=Informação do repositório
arch.repository.repositories=Repositórios
arch.repository.architectures=Arquitecturas
-cargo.registry=Configurar este registo no ficheiro de configuração do Cargo (por exemplo: ~/.cargo/config.toml):
+cargo.registry=Configure este registo no ficheiro de configuração do Cargo (por exemplo: ~/.cargo/config.toml):
cargo.install=Para instalar o pacote usando o Cargo, execute o seguinte comando:
chef.registry=Configure este registo no seu ficheiro ~/.chef/config.rb:
chef.install=Para instalar o pacote, execute o seguinte comando:
@@ -3612,7 +3657,7 @@ composer.install=Para instalar o pacote usando o Composer, execute o seguinte co
composer.dependencies=Dependências
composer.dependencies.development=Dependências de desenvolvimento
conan.details.repository=Repositório
-conan.registry=Configurar este registo usando a linha de comandos:
+conan.registry=Configure este registo usando a linha de comandos:
conan.install=Para instalar o pacote usando o Conan, execute o seguinte comando:
conda.registry=Configure este registo como um repositório Conda no seu ficheiro .condarc:
conda.install=Para instalar o pacote usando o Conda, execute o seguinte comando:
@@ -3628,7 +3673,7 @@ container.labels.key=Chave
container.labels.value=Valor
cran.registry=Configure este registo no seu ficheiro Rprofile.site:
cran.install=Para instalar o pacote, execute o seguinte comando:
-debian.registry=Configurar este registo usando a linha de comandos:
+debian.registry=Configure este registo usando a linha de comandos:
debian.registry.info=Escolha $distribution e $component da lista abaixo.
debian.install=Para instalar o pacote, execute o seguinte comando:
debian.repository=Informação do repositório
@@ -3637,13 +3682,13 @@ debian.repository.components=Componentes
debian.repository.architectures=Arquitecturas
generic.download=Descarregar pacote usando a linha de comandos:
go.install=Instale o pacote a partir da linha de comandos:
-helm.registry=Configurar este registo usando a linha de comandos:
+helm.registry=Configure este registo usando a linha de comandos:
helm.install=Para instalar o pacote, execute o seguinte comando:
maven.registry=Configure este registo no seu ficheiro pom.xml do projecto:
maven.install=Para usar este pacote, inclua no bloco dependencies do ficheiro pom.xml o seguinte:
maven.install2=Executar usando a linha de comandos:
maven.download=Para descarregar a dependência, execute na linha de comandos:
-nuget.registry=Configurar este registo usando a linha de comandos:
+nuget.registry=Configure este registo usando a linha de comandos:
nuget.install=Para instalar o pacote usando NuGet, execute o seguinte comando:
nuget.dependency.framework=Estrutura alvo
npm.registry=Configure este registo no seu ficheiro .npmrc do projecto:
@@ -3658,7 +3703,7 @@ npm.details.tag=Etiqueta
pub.install=Para instalar o pacote usando o Dart, execute o seguinte comando:
pypi.requires=Requer Python
pypi.install=Para instalar o pacote usando o pip, execute o seguinte comando:
-rpm.registry=Configurar este registo usando a linha de comandos:
+rpm.registry=Configure este registo usando a linha de comandos:
rpm.distros.redhat=em distribuições baseadas no RedHat
rpm.distros.suse=em distribuições baseadas no SUSE
rpm.install=Para instalar o pacote, execute o seguinte comando:
@@ -3671,7 +3716,7 @@ rubygems.dependencies.runtime=Dependências do tempo de execução (runtime)
rubygems.dependencies.development=Dependências de desenvolvimento
rubygems.required.ruby=Requer a versão do Ruby
rubygems.required.rubygems=Requer a versão do RubyGem
-swift.registry=Configurar este registo usando a linha de comandos:
+swift.registry=Configure este registo usando a linha de comandos:
swift.install=Adicione o pacote no seu ficheiro Package.swift:
swift.install2=e execute o seguinte comando:
vagrant.install=Para adicionar uma máquina virtual Vagrant, execute o seguinte comando:
@@ -3813,6 +3858,7 @@ runs.no_runs=A sequência de trabalho ainda não foi executada.
runs.empty_commit_message=(mensagem de cometimento vazia)
runs.expire_log_message=Os registros foram removidos porque eram muito antigos.
runs.delete=Eliminar execução da sequência de trabalho
+runs.cancel=Cancelar a execução da sequência de trabalho
runs.delete.description=Tem a certeza que pretende eliminar permanentemente a execução desta sequência de trabalho? Esta operação não poderá ser desfeita.
runs.not_done=A execução desta sequência de trabalho ainda não terminou.
runs.view_workflow_file=Ver ficheiro da sequência de trabalho
diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini
index c65d08a4cfc..30443e2a238 100644
--- a/options/locale/locale_ru-RU.ini
+++ b/options/locale/locale_ru-RU.ini
@@ -42,7 +42,6 @@ webauthn_use_twofa=Используйте двухфакторный код с
webauthn_error=Не удалось прочитать ваш ключ безопасности.
webauthn_unsupported_browser=Ваш браузер в настоящее время не поддерживает WebAuthn.
webauthn_error_unknown=Произошла неизвестная ошибка. Повторите попытку.
-webauthn_error_insecure=`WebAuthn поддерживает только безопасные соединения. Для тестирования по HTTP можно использовать "localhost" или "127.0.0.1"`
webauthn_error_unable_to_process=Сервер не смог обработать ваш запрос.
webauthn_error_duplicated=Данный ключ безопасности не разрешен для этого запроса. Пожалуйста, убедитесь, что ключ не регистрировался ранее.
webauthn_error_empty=Необходимо задать имя для этого ключа.
@@ -179,8 +178,6 @@ buttons.enable_monospace_font=Включить моноширинный шриф
buttons.disable_monospace_font=Выключить моноширинный шрифт
[filter]
-string.asc=A - Я
-string.desc=Я - А
[error]
occurred=Произошла ошибка
@@ -213,16 +210,10 @@ path=Путь
sqlite_helper=Путь к файлу базы данных SQLite3. Введите абсолютный путь, если вы запускаете Gitea как службу.
reinstall_error=Вы пытаетесь произвести установку в уже существующую базу данных Gitea
reinstall_confirm_message=Переустановка в уже существующую базу данных Gitea может вызвать несколько проблем. В большинстве случаев вы должны использовать существующий "app.ini" для запуска Gitea. Если вы понимаете, что вы делаете, подтвердите:
-reinstall_confirm_check_1=Данные, зашифрованные SECRET_KEY в приложении, могут быть потеряны: пользователи не смогут войти в систему с помощью 2FA/OTP & зеркала могут работать неправильно. Отметьте этот флажок, чтобы убедиться, что текущий файл app.ini содержит корректный SECRET_KEY.
-reinstall_confirm_check_2=Репозитории и настройки могут понадобиться пересинхронизировать. Отметьте этот флажок, чтобы вручную синхронизировать хуки для репозиториев и authorized_keys. Вы подтверждаете, что настройки репозитория и зеркала верны.
reinstall_confirm_check_3=Вы подтверждаете, что полностью уверены, что этот Gitea запущен при коренном расположении app.ini и вы уверены, что вам нужна переустановка. Вы подтверждаете, что соглашаетесь с указанными выше рисками.
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_pattern_not_allowed=Неверное имя администратора, имя попадает под зарезервированный шаблон
-err_admin_name_is_invalid=Неверное имя администратора
general_title=Основные настройки
app_name=Название сайта
@@ -238,7 +229,6 @@ domain_helper=Домен или адрес хоста для сервера.
ssh_port=Порт SSH сервера
ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH.
http_port=Gitea HTTP порт
-http_port_helper=Номер порта, который будет прослушиваться Gitea веб-сервером.
app_url=Базовый URL Gitea
app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на некоторые уведомления по электронной почте.
log_root_path=Путь к журналу
@@ -301,7 +291,6 @@ no_reply_address=Скрытый почтовый домен
no_reply_address_helper=Доменное имя для пользователей со скрытым адресом электронной почты. Например, имя пользователя 'joe' будет зарегистрировано в Git как 'joe@noreply.example.org' если скрытый домен электронной почты установлен как 'noreply.example.org'.
password_algorithm=Алгоритм хеширования пароля
invalid_password_algorithm=Некорректный алгоритм хеширования пароля
-password_algorithm_helper=Задайте алгоритм хеширования паролей. Алгоритмы имеют различные требования и стойкость. Алгоритм argon2 довольно безопасен, но он использует много памяти и может не подходить для слабых систем.
enable_update_checker=Включить проверку обновлений
enable_update_checker_helper=Периодически проверяет наличие новых версий, подключаясь к gitea.io.
env_config_keys=Настройка окружения
@@ -359,8 +348,6 @@ allow_password_change=Требовать смену пароля пользов
reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на %s . Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления аккаунта.
active_your_account=Активируйте свой аккаунт
account_activated=Учётная запись активирована
-prohibit_login=Вход запрещён
-prohibit_login_desc=Вход в вашу учётную запись запрещен, пожалуйста, свяжитесь с администратором сайта.
resent_limit_prompt=Извините, вы уже запросили активацию по электронной почте недавно. Пожалуйста, подождите 3 минуты, а затем повторите попытку.
has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (%s ). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже.
resend_mail=Нажмите здесь, чтобы переотправить активационное письмо
@@ -396,16 +383,12 @@ openid_connect_desc=Выбранный OpenID URI неизвестен. Свяж
openid_register_title=Создать новый аккаунт
openid_register_desc=Выбранный OpenID URI неизвестен. Свяжите с новой учётной записью здесь.
openid_signin_desc=Введите ваш OpenID URI. Например: alice.openid.example.org или https://openid.example.org/alice.
-disable_forgot_password_mail=Восстановление учётной записи отключено, потому что электронная почта не настроена. Пожалуйста, свяжитесь с администратором сайта.
-disable_forgot_password_mail_admin=Восстановление учётной записи доступно только при настройке электронной почты. Пожалуйста, настройте электронную почту, чтобы включить восстановление аккаунта.
email_domain_blacklisted=С данным адресом электронной почты регистрация невозможна.
authorize_application=Авторизация приложения
authorize_redirect_notice=Вы будете перенаправлены на %s, если вы авторизуете это приложение.
authorize_application_created_by=Это приложение было создано %s.
-authorize_application_description=Если вы предоставите доступ, оно сможет получить доступ и редактировать любую информацию о вашей учётной записи, включая содержимое частных репозиториев и организаций.
authorize_title=Разрешить «%s» доступ к вашей учётной записи?
authorization_failed=Ошибка авторизации
-authorization_failed_desc=Ошибка авторизации, обнаружен неверный запрос. Пожалуйста, свяжитесь с автором приложения, которое вы пытались авторизовать.
sspi_auth_failed=Аутентификация SSPI не удалась
password_pwned_err=Не удалось завершить запрос к HaveIBeenPwned
@@ -425,8 +408,6 @@ activate_email.title=%s, пожалуйста, подтвердите ваш а
activate_email.text=Пожалуйста, перейдите по ссылке, чтобы подтвердить ваш адрес электронной почты в течение %s :
register_notify.title=%[1]s, добро пожаловать в %[2]s
-register_notify.text_1=это письмо с вашим подтверждением регистрации в %s!
-register_notify.text_2=Теперь вы можете войти через логин: %s.
register_notify.text_3=Если эта учётная запись была создана для вас, пожалуйста, сначала установите пароль .
reset_password=Восстановить учётную запись
@@ -464,7 +445,6 @@ release.download.targz=Исходный код (TAR.GZ)
repo.transfer.subject_to=%s хочет передать «%s» в %s
repo.transfer.subject_to_you=%s хочет передать «%s» вам
repo.transfer.to_you=вам
-repo.transfer.body=Для того чтобы принять или отклонить перейдите по ссылке %s или просто проигнорируйте данный запрос.
repo.collaborator.added.subject=%s добавил(а) вас в %s
repo.collaborator.added.text=Вы были добавлены в качестве соавтора репозитория:
@@ -516,7 +496,6 @@ url_error=`«%s» не является валидным URL.`
include_error=` должно содержать подстроку «%s».`
glob_pattern_error=` неверный glob шаблон: %s.`
regex_pattern_error=` Неверный шаблон регулярного выражения: %s.`
-username_error=` может содержать только алфавитно-цифровые символы ('0-9','a-z','A-Z'), тире ('-'), подчеркивания ('_') и точку ('.'). Первый символ должен быть алфавитно-цифровым, последовательности из нескольких не алфавитно-цифровых символов запрещены.`
invalid_group_team_map_error=` сопоставление недопустимо: %s`
unknown_error=Неизвестная ошибка:
captcha_incorrect=Капча не пройдена.
@@ -529,11 +508,9 @@ username_has_not_been_changed=Имя пользователя не было из
repo_name_been_taken=Название репозитория уже используется.
repository_force_private=Включена принудительная приватность: приватные репозитории не могут быть сделаны публичными.
repository_files_already_exist=Файлы уже существуют для этого репозитория. Обратитесь к системному администратору.
-repository_files_already_exist.adopt=Файлы уже существуют для этого репозитория и могут быть только приняты.
repository_files_already_exist.delete=Файлы уже существуют для этого репозитория. Вы должны удалить их.
repository_files_already_exist.adopt_or_delete=Файлы уже существуют для этого репозитория. Или принять их или удалить их.
visit_rate_limit=Удалённый вход отклонён в связи с ограничением количества попыток в секунду.
-2fa_auth_required=Удалённый вход требует двухфакторную аутентификацию.
org_name_been_taken=Название организации уже занято.
team_name_been_taken=Название команды уже занято.
team_no_units_error=Разрешите доступ хотя бы к одному разделу репозитория.
@@ -561,14 +538,8 @@ invalid_ssh_key=Не удается проверить ключ SSH: %s
invalid_gpg_key=Не удается проверить ключ GPG: %s
invalid_ssh_principal=Неверный принципал: %s
must_use_public_key=Ключ, который вы предоставили, является закрытым. Пожалуйста, не отправляйте свой закрытый ключ куда бы то ни было. Используйте для этих целей открытый ключ.
-unable_verify_ssh_key=Не удаётся верифицировать ключ SSH, проверьте его на наличие ошибок.
auth_failed=Ошибка аутентификации: %v
-still_own_repo=Ваша учётная запись владеет одним или несколькими репозиториями, сначала удалите или передайте их.
-still_has_org=Ваша учётная запись является членом одной или нескольких организаций, сначала покиньте их.
-still_own_packages=Ваша учётная запись владеет одним или несколькими пакетами, сначала удалите их.
-org_still_own_repo=Эта организация всё ещё владеет одним или несколькими репозиториями, сначала удалите или передайте их.
-org_still_own_packages=Эта организация всё ещё владеет одним или несколькими пакетами, сначала удалите их.
target_branch_not_exist=Целевая ветка не существует.
@@ -597,7 +568,6 @@ settings=Параметры пользователя
form.name_reserved=Имя пользователя «%s» зарезервировано.
form.name_pattern_not_allowed=Шаблон «%s» не допускается в имени пользователя.
-form.name_chars_not_allowed=Имя пользователя «%s» содержит недопустимые символы.
[settings]
@@ -620,7 +590,6 @@ uid=UID
public_profile=Открытый профиль
biography_placeholder=Расскажите немного о себе! (Можно использовать Markdown)
location_placeholder=Поделитесь своим приблизительным местоположением с другими
-profile_desc=Контролируйте, как ваш профиль будет отображаться другим пользователям. Ваш основной адрес электронной почты будет использоваться для уведомлений, восстановления пароля и веб-операций Git.
full_name=Имя и фамилия
website=Веб-сайт
location=Местоположение
@@ -690,10 +659,8 @@ requires_activation=Требуется активация
primary_email=Сделать основным
activate_email=Отправить активацию
activations_pending=Ожидает активации
-can_not_add_email_activations_pending=Ожидается активация. Если хотите добавить новый почтовый ящик, попробуйте еще раз через несколько минут.
delete_email=Удалить
email_deletion=Удалить адрес электронной почты
-email_deletion_desc=Адрес электронной почты и вся связанная с ним информация будет удалена из вашего аккаунта. Коммиты, сделанные от имени этого адреса электронной почты, не будут изменены. Продолжить?
email_deletion_success=Ваш адрес электронной почты был удалён.
theme_update_success=Тема была изменена.
theme_update_error=Выбранная тема не существует.
@@ -735,7 +702,6 @@ gpg_key_matched_identities_long=Встроенные в этот ключ иде
gpg_key_verified=Проверенный ключ
gpg_key_verified_long=Ключ был проверен токеном и может быть использован для проверки коммитов, соответствующих любым активным адресом электронной почты этого пользователя в дополнение к любым соответствующим идентификаторам этого ключа.
gpg_key_verify=Проверить
-gpg_invalid_token_signature=Предоставленный ключ GPG, подпись и токен не совпадают, либо токен устарел.
gpg_token_required=Вы должны предоставить подпись для токена ниже
gpg_token=Токен
gpg_token_help=Вы можете сгенерировать подпись с помощью:
@@ -745,7 +711,6 @@ verify_gpg_key_success=Ключ GPG «%s» верифицирован.
ssh_key_verified=Проверенный ключ
ssh_key_verified_long=Ключ был проверен токеном и может быть использован для проверки коммитов, соответствующих любым активным адресом электронной почты этого пользователя.
ssh_key_verify=Проверить
-ssh_invalid_token_signature=Предоставленный ключ SSH, подпись или токен не совпадают, либо токен устарел.
ssh_token_required=Вы должны предоставить подпись для токена ниже
ssh_token=Токен
ssh_token_help=Вы можете сгенерировать подпись с помощью:
@@ -766,7 +731,6 @@ gpg_key_deletion=Удалить ключ GPG
ssh_principal_deletion=Удалить принципала сертификата SSH
ssh_key_deletion_desc=Удаление ключа SSH аннулирует его доступ к вашей учётной записи. Продолжить?
gpg_key_deletion_desc=Удаление ключа GPG отменяет проверку подписанных им коммитов. Продолжить?
-ssh_principal_deletion_desc=Удаление принципала сертификата SSH отзывает доступ к вашей учётной записи. Продолжить?
ssh_key_deletion_success=Ключ SSH удален.
gpg_key_deletion_success=Ключ GPG удалён.
ssh_principal_deletion_success=Принципал удалён.
@@ -836,17 +800,14 @@ oauth2_application_create_description=Приложения OAuth2 предост
oauth2_application_remove_description=Удаление приложения OAuth2 приведёт к отмене его доступа к авторизованным учётным записям пользователей в данном экземпляре. Продолжить?
authorized_oauth2_applications=Авторизованные приложения OAuth2
-authorized_oauth2_applications_description=Вы предоставили доступ к вашему персональному аккаунту Gitea этим сторонним приложениям. Пожалуйста, отзовите доступ у приложений, которые больше не используются.
revoke_key=Отозвать
revoke_oauth2_grant=Отозвать доступ
-revoke_oauth2_grant_description=Отзыв доступа у этого стороннего приложения не позволит ему получать доступ к вашим данным. Вы уверены?
revoke_oauth2_grant_success=Доступ был успешно отозван.
twofa_recovery_tip=В случае утраты устройства можно использовать одноразовый ключ восстановления для получения доступа к учётной записи.
twofa_is_enrolled=Ваша учётная запись в настоящее время использует двухфакторную аутентификацию.
twofa_not_enrolled=Ваша учётная запись в настоящее время не использует двухфакторную аутентификацию.
twofa_disable=Отключить двухфакторную аутентификацию
-twofa_enroll=Включить двухфакторную аутентификацию
twofa_disable_note=При необходимости можно отключить двухфакторную аутентификацию.
twofa_disable_desc=Отключение двухфакторной аутентификации сделает ваш аккаунт менее безопасным. Продолжить?
twofa_disabled=Двухфакторная аутентификация выключена.
@@ -859,12 +820,10 @@ twofa_failed_get_secret=Не удалось получить ключ.
webauthn_register_key=Добавить ключ безопасности
webauthn_nickname=Имя пользователя
webauthn_delete_key=Удалить ключ безопасности
-webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с его помощью. Продолжить?
webauthn_key_loss_warning=В случае утраты ключей безопасности вы потеряете доступ к учётной записи.
manage_account_links=Управление привязанными аккаунтами
manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea.
-account_links_not_available=В настоящее время нет внешних аккаунтов, привязанных к вашему аккаунту Gitea.
link_account=Привязать аккаунт
remove_account_link=Удалить привязанный аккаунт
remove_account_link_desc=Удаление привязанной учётной записи отменит её доступ к вашей учётной записи Gitea. Продолжить?
@@ -955,7 +914,6 @@ mirror_address_desc=Поместите необходимые учётные д
mirror_lfs=Хранилище больших файлов (LFS)
mirror_lfs_desc=Активировать зеркалирование данных LFS.
mirror_lfs_endpoint=LFS Endpoint
-mirror_lfs_endpoint_desc=Sync попытается использовать URL клона для определения сервера LFS . Вы также можете указать пользовательскую конечную точку, если данные хранится где-то в хранилище.
mirror_last_synced=Последняя синхронизация
mirror_password_placeholder=(Неизменный)
mirror_password_blank_placeholder=(Отменено)
@@ -967,7 +925,6 @@ forks=Форки
reactions_more=и ещё %d
unit_disabled=Администратор сайта отключил этот раздел репозитория.
language_other=Разное
-adopt_search=Введите имя пользователя для поиска неутверждённых репозиториев... (оставьте пустым, чтобы найти все)
adopt_preexisting_label=Принятые файлы
adopt_preexisting=Принять уже существующие файлы
adopt_preexisting_content=Создать репозиторий из %s
@@ -1026,10 +983,8 @@ migrate_items_releases=Релизы
migrate_repo=Перенос репозитория
migrate.clone_address=Перенос / Клонирование по URL
migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь существующего репозитория на сервере.
-migrate.github_token_desc=Вы можете поместить один или несколько токенов, разделенных запятыми, чтобы сделать миграцию быстрее из-за ограничения скорости GitHub API. ПРЕДУПРЕЖДЕНИЕ: Злоупотребление этой функцией может нарушить политику поставщика услуг и привести к блокировке аккаунта.
migrate.clone_local_path=или локальный путь на сервере
migrate.permission_denied=У вас нет прав на импорт локальных репозиториев.
-migrate.permission_denied_blocked=Вы не можете импортировать с запрещённых хостов, пожалуйста, попросите администратора проверить настройки ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Недопустимый локальный путь. Он не существует или не является каталогом.
migrate.invalid_lfs_endpoint=Конечная точка LFS недействительна.
migrate.failed=Миграция не удалась: %v
@@ -1037,7 +992,6 @@ migrate.migrate_items_options=Токен доступа необходим дл
migrated_from=Перенесено из %[2]s
migrated_from_fake=Перенесено из %[1]s
migrate.migrate=Миграция из %s
-migrate.migrating=Перенос из %s ...
migrate.migrating_failed=Перенос из %s не удался.
migrate.migrating_failed.error=Не удалось мигрировать: %s
migrate.migrating_failed_no_addr=Миграция не удалась.
@@ -1079,7 +1033,6 @@ clone_this_repo=Клонировать репозиторий
cite_this_repo=Сослаться на этот репозиторий
create_new_repo_command=Создать новый репозиторий из командной строки
push_exist_repo=Отправка существующего репозитория из командной строки
-empty_message=В репозитории нет файлов.
broken_message=Данные Git, лежащие в основе репозитория, не могут быть прочитаны. Свяжитесь с администратором этого экземпляра или удалите этот репозиторий.
code=Код
@@ -1097,7 +1050,6 @@ projects=Проекты
packages=Пакеты
actions=Действия
labels=Метки
-org_labels_desc=Метки уровня организации, которые можно использовать с всеми репозиториями в этой организации
org_labels_desc_manage=управлять
milestone=Этап
@@ -1169,7 +1121,6 @@ editor.update=Обновить %s
editor.delete=Удалить %s
editor.patch=Применить патч
editor.patching=Исправление:
-editor.fail_to_apply_patch=Невозможно применить патч «%s»
editor.new_patch=Новый патч
editor.commit_message_desc=Добавьте необязательное расширенное описание…
editor.signoff_desc=Добавить трейлер Signed-off-by с автором коммита в конце сообщения коммита.
@@ -1185,17 +1136,12 @@ editor.filename_is_invalid=Недопустимое имя файла: «%s».
editor.branch_does_not_exist=Ветка «%s» отсутствует в этом репозитории.
editor.branch_already_exists=Ветка «%s» уже существует в этом репозитории.
editor.directory_is_a_file=Имя каталога «%s» уже используется в качестве имени файла в этом репозитории.
-editor.file_is_a_symlink=`«%s» является символической ссылкой. Символические ссылки невозможно отредактировать в веб-редакторе`
editor.filename_is_a_directory=Имя файла «%s» уже используется в качестве каталога в этом репозитории.
-editor.file_editing_no_longer_exists=Редактируемый файл «%s» больше не существует в этом репозитории.
-editor.file_deleting_no_longer_exists=Удаляемый файл «%s» больше не существует в этом репозитории.
editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. Нажмите здесь , чтобы увидеть, что было изменено, или Зафиксировать изменения снова , чтобы заменить их.
editor.file_already_exists=Файл с именем «%s» уже существует в репозитории.
editor.commit_empty_file_header=Закоммитить пустой файл
editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить?
editor.no_changes_to_show=Нет изменений.
-editor.fail_to_update_file=Не удалось обновить/создать файл «%s».
-editor.fail_to_update_file_summary=Ошибка:
editor.push_rejected_no_message=Изменение отклонено сервером без сообщения. Пожалуйста, проверьте хуки Git.
editor.push_rejected=Изменение отклонено сервером. Пожалуйста, проверьте хуки Git.
editor.push_rejected_summary=Полное сообщение об отклонении:
@@ -1210,6 +1156,7 @@ editor.require_signed_commit=Ветка ожидает подписанный к
editor.cherry_pick=Перенести изменения %s в:
editor.revert=Откатить %s к:
+
commits.desc=Просмотр истории изменений исходного кода.
commits.commits=Коммитов
commits.no_commits=Нет общих коммитов. «%s» и «%s» имеют совершенно разные истории.
@@ -1365,7 +1312,6 @@ issues.filter_type.reviewed_by_you=Проверенные вами
issues.filter_sort=Сортировать
issues.filter_sort.latest=Новейшие
issues.filter_sort.oldest=Старейшие
-issues.filter_sort.recentupdate=Недавно обновленные
issues.filter_sort.leastupdate=Давно обновленные
issues.filter_sort.mostcomment=Больше комментариев
issues.filter_sort.leastcomment=Меньше комментариев
@@ -1480,7 +1426,6 @@ issues.lock_no_reason=ограничил(а) обсуждение задачи
issues.unlock_comment=снял(а) ограничение %s
issues.lock_confirm=Ограничить
issues.unlock_confirm=Снять
-issues.lock.notice_1=- Другие пользователи не могут добавлять новые комментарии к этой задаче.
issues.lock.notice_2=- Вы и другие соавторы с доступом к этому репозиторию могут оставлять комментарии, которые могут видеть другие.
issues.lock.notice_3=- Вы всегда можете снять ограничение с обсуждения этой задачи.
issues.unlock.notice_1=- Все снова смогут принять участие в обсуждении данной задачи.
@@ -1540,9 +1485,7 @@ issues.dependency.pr_closing_blockedby=Закрытие этого запрос
issues.dependency.issue_closing_blockedby=Закрытие этой задачи блокируется следующими задачами
issues.dependency.issue_close_blocks=Эта задача блокирует закрытие следующих задач
issues.dependency.pr_close_blocks=Этот запрос на слияние блокирует закрытие следующих задач
-issues.dependency.issue_close_blocked=Вам необходимо закрыть все задачи, блокирующие эту задачу, прежде чем вы сможете её закрыть.
issues.dependency.issue_batch_close_blocked=Невозможно пакетно закрыть выбранные задачи, потому что у задачи #%d остаются открытые зависимости
-issues.dependency.pr_close_blocked=Вам необходимо закрыть все задачи, блокирующие этот запрос на слияние, прежде чем вы сможете принять его.
issues.dependency.blocks_short=Блоки
issues.dependency.blocked_by_short=Зависит от
issues.dependency.remove_header=Удалить зависимость
@@ -1553,12 +1496,10 @@ issues.dependency.add_error_same_issue=Вы не можете заставить
issues.dependency.add_error_dep_issue_not_exist=Зависимая задача не существует.
issues.dependency.add_error_dep_not_exist=Зависимости не существует.
issues.dependency.add_error_dep_exists=Зависимость уже существует.
-issues.dependency.add_error_cannot_create_circular=Вы не можете создать зависимость с двумя задачами, блокирующими друг друга.
issues.dependency.add_error_dep_not_same_repo=Обе задачи должны находиться в одном репозитории.
issues.review.self.approval=Вы не можете одобрить собственный запрос на слияние.
issues.review.self.rejection=Невозможно запрашивать изменения своего запроса на слияние.
issues.review.approve=одобрил(а) эти изменения %s
-issues.review.dismissed=отклонен отзыв %s %s
issues.review.dismissed_label=Отклонено
issues.review.left_comment=оставил комментарий
issues.review.content.empty=Запрашивая изменения, вы обязаны оставить комментарий с пояснением своих пожеланий относительно запроса на слияние.
@@ -1566,7 +1507,6 @@ issues.review.reject=запросил(а) изменения %s
issues.review.wait=был запрошен для отзыва %s
issues.review.add_review_request=запросил отзыв от %s %s
issues.review.remove_review_request=удалена заявка на отзыв для %s %s
-issues.review.remove_review_request_self=отказано в отзыве %s
issues.review.pending=Ожидание
issues.review.pending.tooltip=Этот комментарий в настоящее время не виден другим пользователям. Чтобы отправить отложенные комментарии, выберите «%s» → «%s/%s/%s» в верхней части страницы.
issues.review.review=Рецензия
@@ -1582,7 +1522,6 @@ issues.review.resolve_conversation=Покинуть диалог
issues.review.un_resolve_conversation=Незавершённый разговор
issues.review.resolved_by=пометить этот разговор как разрешённый
issues.review.commented=Комментировать
-issues.assignee.error=Не все назначения были добавлены из-за непредвиденной ошибки.
issues.reference_issue.body=Тело
issues.content_history.deleted=удалено
issues.content_history.edited=отредактировано
@@ -1660,29 +1599,20 @@ pulls.reject_count_1=%d запрос на изменение
pulls.reject_count_n=%d запросов на изменение
pulls.waiting_count_1=%d ожидает проверки
pulls.waiting_count_n=%d ожидающих отзывов
-pulls.wrong_commit_id=id фиксации должен быть идентификатором фиксации в целевой ветке
pulls.no_merge_desc=Запрос на слияние не может быть принят, так как отключены все настройки слияния.
pulls.no_merge_helper=Включите опции слияния в настройках репозитория или совершите слияние этого запроса вручную.
pulls.no_merge_wip=Данный запрос на слияние не может быть принят, поскольку он помечен как находящийся в разработке.
-pulls.no_merge_not_ready=Этот запрос не готов к слиянию, обратите внимания на ревью и проверки.
pulls.no_merge_access=У вас нет права для слияния данного запроса.
pulls.merge_pull_request=Создать коммит на слияние
-pulls.rebase_merge_pull_request=Выполнить Rebase, а затем fast-forward слияние
-pulls.rebase_merge_commit_pull_request=Выполнить rebase, а затем создать коммит слияния
pulls.squash_merge_pull_request=Создать объединённый коммит
pulls.merge_manually=Слито вручную
pulls.merge_commit_id=ID коммита слияния
pulls.require_signed_wont_sign=Данная ветка ожидает подписанные коммиты, однако слияние не будет подписано
pulls.invalid_merge_option=Этот параметр слияния нельзя использовать для этого запроса на слияние.
-pulls.merge_conflict=Слияние не удалось: Произошел конфликт во время слияния. Совет: попробуйте другую стратегию
pulls.merge_conflict_summary=Сообщение об ошибке
-pulls.rebase_conflict=Слияние не удалось: Произошел конфликт во время слияния: %[1]s. Совет: попробуйте другую стратегию
pulls.rebase_conflict_summary=Сообщение об ошибке
-pulls.unrelated_histories=Слияние не удалось: У источника и цели слияния нет общей истории. Совет: попробуйте другую стратегию
-pulls.merge_out_of_date=Ошибка слияния: при создании слияния база данных была обновлена. Подсказка: попробуйте ещё раз.
-pulls.head_out_of_date=Ошибка слияния: во время слияния головной коммит был обновлён. Попробуйте ещё раз.
pulls.push_rejected_summary=Полная ошибка отклонения
pulls.open_unmerged_pull_exists=`Вы не можете снова открыть, поскольку уже существует запрос на слияние (#%d) из того же репозитория с той же информацией о слиянии и ожидающий слияния.`
pulls.status_checking=Выполняются некоторые проверки
@@ -1705,7 +1635,6 @@ pulls.reopened_at=`переоткрыл этот запрос на слияни
pulls.cmd_instruction_merge_title=Слить
pulls.cmd_instruction_merge_desc=Слить изменения и обновить в Gitea.
pulls.clear_merge_message=Очистить сообщение о слиянии
-pulls.clear_merge_message_hint=Очистка сообщения о слиянии удалит только содержимое сообщения коммита, но сохранит сгенерированные git добавки, такие как "Co-Authored-By …".
pulls.auto_merge_button_when_succeed=(При успешных проверках)
pulls.auto_merge_when_succeed=Слить автоматически после прохождения всех проверок
@@ -1759,7 +1688,6 @@ signing.will_sign=Этот коммит будет подписан ключом
signing.wont_sign.never=Коммиты никогда не подписываются.
signing.wont_sign.always=Коммиты всегда подписываются.
signing.wont_sign.pubkey=Этот коммит не будет подписан, поскольку к вашей учётной записи не привязано публичного ключа.
-signing.wont_sign.twofa=Для подписания коммитов у вас должна быть включена двухфакторная аутентификация.
signing.wont_sign.parentsigned=Этот коммит не будет подписан, так как родительский коммит не подписан.
signing.wont_sign.basesigned=Слияние не будет подписано, так как базовый коммит не подписан.
signing.wont_sign.headsigned=Слияние не будет подписано, так как головной коммит не подписан.
@@ -1840,7 +1768,6 @@ activity.title.releases_1=%d релиз
activity.title.releases_n=%d релизов
activity.title.releases_published_by=%s опубликованы %s
activity.published_release_label=Опубликовано
-activity.no_git_activity=В этот период не было новых коммитов.
activity.git_stats_exclude_merges=За исключением слияний,
activity.git_stats_author_1=%d автор
activity.git_stats_author_n=%d автора(ов)
@@ -1865,7 +1792,6 @@ activity.git_stats_deletion_n=%d удалений
contributors.contribution_type.commits=коммитов
settings=Настройки
-settings.desc=В настройках вы можете менять различные параметры этого репозитория
settings.options=Репозиторий
settings.collaboration=Соавторы
settings.collaboration.admin=Администратор
@@ -1882,7 +1808,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Настройт
settings.mirror_settings.docs.disabled_push_mirror.instructions=Настройте свой проект, чтобы автоматически получать коммиты, теги и ветки из другого репозитория.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=В настоящее время это можно сделать только в меню «Новая миграция». Для получения дополнительной информации, пожалуйста, ознакомьтесь:
settings.mirror_settings.docs.disabled_push_mirror.info=Push-зеркала отключены администратором сайта.
-settings.mirror_settings.docs.no_new_mirrors=Ваш репозиторий зеркалирует изменения в другой репозиторий или из него. Пожалуйста, имейте в виду, что в данный момент невозможно создавать новые зеркала.
settings.mirror_settings.docs.can_still_use=Хотя вы не можете изменять существующие зеркала или создавать новые, вы можете по-прежнему использовать существующее зеркало.
settings.mirror_settings.docs.pull_mirror_instructions=Чтобы настроить pull-зеркало, пожалуйста, ознакомьтесь:
settings.mirror_settings.docs.more_information_if_disabled=Вы можете узнать больше о зеркалах push и pull здесь:
@@ -1948,7 +1873,6 @@ settings.admin_indexer_commit_sha=Последний индексированн
settings.admin_indexer_unindexed=Не индексировано
settings.reindex_button=Добавить в очередь переиндексации
settings.reindex_requested=Переиндексация запрошена
-settings.admin_enable_close_issues_via_commit_in_any_branch=Закрыть задачу с помощью коммита, сделанного в ветке не по умолчанию
settings.danger_zone=Опасная зона
settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием.
settings.convert=Преобразовать в обычный репозиторий
@@ -1969,7 +1893,6 @@ settings.transfer_abort_invalid=Невозможно отменить транс
settings.transfer_abort_success=Передача репозитория %s успешно отменена.
settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции:
-settings.transfer_in_progress=Трансфер в процессе выполнения. Отмените его, если желаете выполнить трансфер другому пользователю.
settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем.
settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь.
settings.transfer_notices_3=- если репозиторий является приватным и передается отдельному пользователю, это действие позволяет убедиться, что пользователь имеет хотя бы права на чтение (и при необходимости изменяет права доступа).
@@ -1983,13 +1906,9 @@ settings.trust_model.default=Модель доверия по умолчанию
settings.trust_model.default.desc=Использовать стандартную модель доверия репозитория для этой установки.
settings.trust_model.collaborator=Соавтор
settings.trust_model.collaborator.long=Соавтор: Доверять подписям соавторов
-settings.trust_model.collaborator.desc=Действительные подписи соавторов этого репозитория будут помечены как «доверенные» (независимо от того, соответствуют ли они автору коммита). В остальных случаях действительные подписи будут помечены как «недоверенные», если подпись соответствует автору коммита, и «не совпадающие», если нет.
settings.trust_model.committer=Коммитер
-settings.trust_model.committer.long=Коммитер: Доверять подписям, соответствующим коммитерам (Это совпадает с GitHub и заставит подписать коммиты Gitea в качестве коммитера)
-settings.trust_model.committer.desc=Действительные подписи будут помечены «доверенными», только если они соответствуют автору коммита, в противном случае они будут помечены «не совпадающими». Это заставит Gitea быть автором подписанных коммитов, а фактический автор будет обозначен в трейлерах Co-Authored-By: и Co-Committed-By: коммита. Ключ Gitea по умолчанию должен соответствовать пользователю в базе данных.
settings.trust_model.collaboratorcommitter=Соавтор+Коммитер
settings.trust_model.collaboratorcommitter.long=Соавтор+Коммитер: Доверять подписям соавторов, которые соответствуют автору коммита
-settings.trust_model.collaboratorcommitter.desc=Действительные подписи соавторов этого репозитория будут помечены «доверенными», если они соответствуют автору коммита. Действительные подписи будут помечены как «недоверенные», если подпись соответствует автору коммита, и «не совпадающие» впротивном случае. Это заставит Gitea быть отмеченным в качестве автора подписанного коммита, а фактический автор будет указан в трейлерах Co-Authored-By: и Co-Committed-By: коммита. Ключ Gitea по умолчанию должен соответствовать пользователю в базе данных.
settings.wiki_delete=Стереть данные вики
settings.wiki_delete_desc=Будьте внимательны! Как только вы удалите вики — пути назад не будет.
settings.wiki_delete_notices_1=- Это навсегда удалит и отключит вики для %s.
@@ -1998,7 +1917,6 @@ settings.wiki_deletion_success=Данные вики удалены.
settings.delete=Удалить этот репозиторий
settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет.
settings.delete_notices_1=- Эта операция НЕ МОЖЕТ быть отменена.
-settings.delete_notices_2=- Эта операция навсегда удалит всё из репозитория %s , включая данные Git, связанные с ним задачи, комментарии и права доступа для сотрудников.
settings.delete_notices_fork_1=- Все форки станут независимыми репозиториями после удаления.
settings.deletion_success=Репозиторий удалён.
settings.update_settings_success=Настройки репозитория обновлены.
@@ -2019,8 +1937,6 @@ settings.team_not_in_organization=Команда не в той же орган
settings.teams=Команды
settings.add_team=Добавить команду
settings.add_team_duplicate=Команда уже имеет репозиторий
-settings.add_team_success=Команда теперь имеет доступ к репозиторию.
-settings.change_team_permission_tip=Разрешение команды установлено на странице настройки команды и не может быть изменено для каждого репозитория
settings.delete_team_tip=Эта команда имеет доступ ко всем репозиториям и не может быть удалена
settings.remove_team_success=Доступ команды к репозиторию удалён.
settings.add_webhook=Добавить веб-хук
@@ -2029,8 +1945,6 @@ settings.hooks_desc=Веб-хуки позволяют внешним служб
settings.webhook_deletion=Удалить веб-хук
settings.webhook_deletion_desc=Удаление этого веб-хука приведет к удалению всей связанной с ним информации, включая историю. Хотите продолжить?
settings.webhook_deletion_success=Веб-хук был удалён.
-settings.webhook.test_delivery=Проверить доставку
-settings.webhook.test_delivery_desc=Отправить тестовое событие для тестирования настройки веб-хука.
settings.webhook.request=Запрос
settings.webhook.response=Ответ
settings.webhook.headers=Заголовки
@@ -2074,7 +1988,6 @@ settings.event_repository=Репозиторий
settings.event_repository_desc=Репозиторий создан или удален.
settings.event_header_issue=События задачи
settings.event_issues=Задачи
-settings.event_issues_desc=Задача открыта, закрыта, переоткрыта или отредактирована.
settings.event_issue_assign=Назначена задача
settings.event_issue_assign_desc=Задача назначена или снята с назначения.
settings.event_issue_label=Ярлык задачи
@@ -2085,7 +1998,6 @@ settings.event_issue_comment=Комментарии в задаче
settings.event_issue_comment_desc=Комментарий создан, изменён или удалён.
settings.event_header_pull_request=События запроса на слияние
settings.event_pull_request=Запрос на слияние
-settings.event_pull_request_desc=Запрос на слияние открыт, закрыт, переоткрыт или отредактирован.
settings.event_pull_request_assign=Запроса на слияние назначен
settings.event_pull_request_assign_desc=Запрос на слияние назначен или не назначен.
settings.event_pull_request_label=Запрос на слияние отмечен
@@ -2219,7 +2131,6 @@ settings.archive.branchsettings_unavailable=Настройки ветки нед
settings.archive.tagsettings_unavailable=Настройки тегов недоступны, если репозиторий архивирован.
settings.unarchive.button=Разархивировать репозиторий
settings.unarchive.header=Вернуть этот репозиторий из архива
-settings.unarchive.text=Разархивирование репозитория восстановит его способность принимать изменения, а также новые задачи и запросы на слияние.
settings.unarchive.success=Репозиторий был успешно разархивирован.
settings.update_avatar_success=Аватар репозитория обновлён.
settings.lfs=LFS
@@ -2236,11 +2147,9 @@ settings.lfs_invalid_locking_path=Недопустимый путь: %s
settings.lfs_invalid_lock_directory=Невозможно заблокировать каталог: %s
settings.lfs_lock_already_exists=Блокировка уже существует: %s
settings.lfs_lock=Заблокировать
-settings.lfs_lock_path=Путь к файлу для блокировки...
settings.lfs_locks_no_locks=Нет блокировки
settings.lfs_lock_file_no_exist=Заблокированный файл не существует в ветке по умолчанию
settings.lfs_force_unlock=Принудительная разблокировка
-settings.lfs_pointers.found=Найдено %d указатель(ей) блоков - присоединено %d, %d не привязано (%d отсутствует в хранилище)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=В репозитории
@@ -2441,7 +2350,6 @@ form.create_org_not_allowed=Этому пользователю не разре
settings=Настройки
settings.options=Организация
settings.full_name=Полное имя
-settings.email=Почта для связи
settings.website=Сайт
settings.location=Местоположение
settings.permission=Разрешения
@@ -2455,15 +2363,13 @@ settings.visibility.private_shortname=Приватный
settings.update_settings=Обновить настройки
settings.update_setting_success=Настройки организации обновлены.
-settings.change_orgname_prompt=Обратите внимание: изменение названия организации также изменит URL вашей организации и освободит старое имя.
-settings.change_orgname_redirect_prompt=Старое имя будет перенаправлено до тех пор, пока оно не будет введено.
+
+
settings.update_avatar_success=Аватар организации обновлён.
settings.delete=Удалить организацию
settings.delete_account=Удалить эту организацию
settings.delete_prompt=Это действие БЕЗВОЗВРАТНО удалит эту организацию навсегда!
settings.confirm_delete_account=Подтвердить удаление
-settings.delete_org_title=Удалить организацию
-settings.delete_org_desc=Эта организация будет безвозвратно удалена. Продолжить?
settings.hooks_desc=Добавьте веб-хуки, которые будет вызываться для всех репозиториев под этой организации.
settings.labels_desc=Добавьте метки, которые могут быть использованы в задачах для всех репозиториев этой организации.
@@ -2518,7 +2424,6 @@ teams.remove_all_repos_title=Удалить все репозитории ком
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.members.none=В этой команде нет участников.
@@ -2544,7 +2449,6 @@ repositories=Репозитории
hooks=Веб-хуки
integrations=Интеграции
authentication=Аутентификация
-emails=Адреса эл. почты пользователей
config=Конфигурация
config_summary=Статистика
config_settings=Настройки
@@ -2573,26 +2477,16 @@ dashboard.cron.cancelled=Планировщик: %[1]s отменено: %[3]s
dashboard.cron.error=Ошибка в запланированном задании: %s: %[3]s
dashboard.cron.finished=Планировщик: %[1]s завершено
dashboard.delete_inactive_accounts=Удалить все неактивированные учётные записи
-dashboard.delete_inactive_accounts.started=Удаление всех неактивированных учётных записей началось.
dashboard.delete_repo_archives=Удалить все архивы репозиториев (ZIP, TAR.GZ, и т.д..)
-dashboard.delete_repo_archives.started=Удаление всех архивов репозитория началось.
dashboard.delete_missing_repos=Удалить все записи о репозиториях с отсутствующими файлами Git
-dashboard.delete_missing_repos.started=Начато удаление всех репозиториев без Git-файлов.
dashboard.delete_generated_repository_avatars=Удалить генерированные аватары репозитория
dashboard.update_mirrors=Обновить зеркала
dashboard.repo_health_check=Проверка состояния всех репозиториев
dashboard.check_repo_stats=Проверить всю статистику репозитория
dashboard.archive_cleanup=Удалить старые архивы репозитория
-dashboard.deleted_branches_cleanup=Очистка удалённых ветвей
dashboard.update_migration_poster_id=Обновить ID плакатов миграции
-dashboard.git_gc_repos=Выполнить сборку мусора для всех репозиториев
-dashboard.resync_all_sshkeys=Обновить файл '.ssh/authorized_keys' с ключами SSH Gitea.
-dashboard.resync_all_sshprincipals=Обновите файл '.ssh/authorized_principals' SSH данными участника Gitea.
-dashboard.resync_all_hooks=Повторная синхронизация hook'ов pre-receive, update и post-receive во всех репозиториях.
dashboard.reinit_missing_repos=Переинициализировать все отсутствующие Git репозитории, для которых существуют записи
dashboard.sync_external_users=Синхронизировать данные внешних пользователей
-dashboard.cleanup_hook_task_table=Очистить таблицу hook_task
-dashboard.cleanup_packages=Очистка устаревших пакетов
dashboard.server_uptime=Время непрерывной работы сервера
dashboard.current_goroutine=Текущее количество Goroutines
dashboard.current_memory_usage=Текущее использование памяти
@@ -2624,7 +2518,6 @@ dashboard.last_gc_pause=Последняя пауза сборщика мусо
dashboard.gc_times=Количество сборок мусора
dashboard.update_checker=Проверка обновлений
dashboard.delete_old_system_notices=Удалить все старые системные уведомления из базы данных
-dashboard.gc_lfs=Выполнить сборку мусора метаобъектов LFS
users.user_manage_panel=Панель управления пользователями
users.new_account=Создать новый аккаунт
@@ -2639,7 +2532,6 @@ users.2fa=Двухфакторная авторизация
users.repos=Репозитории
users.created=Создано
users.last_login=Последний вход
-users.never_login=Никогда не входил
users.send_register_notify=Отправить пользователю уведомление о регистрации
users.new_success=Учётная запись «%s» создана.
users.edit=Редактировать
@@ -2666,7 +2558,6 @@ users.still_own_repo=Этот пользователь всё ещё являе
users.still_has_org=Этот пользователь всё ещё является членом одной или более организаций. Сначала удалите пользователя из всех организаций.
users.purge=Удалить пользователя
users.purge_help=Принудительное удаление пользователя и любых репозиториев, организаций и пакетов, принадлежащих пользователю. Комментарии тоже будут удалены.
-users.still_own_packages=Этот пользователь всё ещё владеет одним или несколькими пакетами, сначала удалите их.
users.deletion_success=Учётная запись успешно удалена.
users.reset_2fa=Сброс 2FA
users.list_status_filter.menu_text=Фильтр
@@ -2686,11 +2577,7 @@ users.details=О пользователе
emails.email_manage_panel=Управление эл. почтой пользователя
emails.primary=Первичный
emails.activated=Активирован
-emails.filter_sort.email=Эл. почта
-emails.filter_sort.email_reverse=Эл. почта (обратный)
emails.filter_sort.name=Имя пользователя
-emails.filter_sort.name_reverse=Имя пользователя (обратное)
-emails.updated=Email обновлён
emails.not_updated=Не удалось обновить запрошенный адрес электронной почты: %v
emails.duplicate_active=Этот адрес электронной почты уже активирован для другого пользователя.
emails.change_email_header=Обновить свойства электронной почты
@@ -2806,25 +2693,17 @@ auths.oauth2_required_claim_name_helper=Задайте, чтобы ограни
auths.oauth2_required_claim_value=Необходимое значение заявки
auths.oauth2_required_claim_value_helper=Задайте, чтобы ограничить вход с этого источника только пользователями с заявкой, имеющей такие имя и значение
auths.oauth2_group_claim_name=Имя заявки, указывающее имена групп для этого источника. (Необязательно)
-auths.oauth2_admin_group=Значение заявки группы для администраторов. (Необязательно - требуется имя заявки выше)
-auths.oauth2_restricted_group=Значение заявки группы для ограниченных пользователей. (Необязательно - требуется имя заявки выше)
-auths.oauth2_map_group_to_team=Сопоставление заявленных групп командам организации. (Необязательно — требуется имя заявки выше)
auths.oauth2_map_group_to_team_removal=Удалить пользователей из синхронизированных команд, если пользователь не принадлежит к соответствующей группе.
auths.enable_auto_register=Включить автоматическую регистрацию
auths.sspi_auto_create_users=Автоматически создавать пользователей
-auths.sspi_auto_create_users_helper=Разрешить метод аутентификации SSPI для автоматического создания новых учётных записей для пользователей, которые впервые входят в систему
auths.sspi_auto_activate_users=Автоматически активировать пользователей
auths.sspi_auto_activate_users_helper=Разрешить метод аутентификации SSPI для автоматической активации новых пользователей
auths.sspi_strip_domain_names=Удалять доменные имена из имён пользователей
-auths.sspi_strip_domain_names_helper=Если отмечено, доменные имена будут удалены из имен входов (например, "DOMAIN\user" и "user@example.org" станут только "user").
auths.sspi_separator_replacement=Разделитель для использования вместо \, / и @
-auths.sspi_separator_replacement_helper=Символ, используемый для замены разделителей имен входа нижнего уровня (например. \ в "DOMAIN\user") и имена основных пользователей (например, @ в "user@example.org").
auths.sspi_default_language=Язык пользователя по умолчанию
-auths.sspi_default_language_helper=Язык по умолчанию для пользователей, автоматически создаваемый методом аутентификации SSPI. Оставьте пустым, если вы предпочитаете, чтобы язык определялся автоматически.
auths.tips=Советы
auths.tips.oauth2.general=Аутентификация OAuth2
auths.tip.oauth2_provider=Поставщик OAuth2
-auths.tip.nextcloud=`Зарегистрируйте нового потребителя OAuth в вашем экземпляре, используя меню "Settings -> Security -> OAuth 2.0 client"`
auths.tip.mastodon=Введите пользовательский URL экземпляра для экземпляра mastodon, с которым вы хотите аутентифицироваться (или использовать его по умолчанию)
auths.edit=Обновить параметры аутентификации
auths.activated=Источник аутентификации активирован
@@ -2924,7 +2803,6 @@ config.mailer_sendmail_path=Путь к Sendmail
config.mailer_sendmail_args=Дополнительные аргументы для Sendmail
config.mailer_sendmail_timeout=Тайм-аут Sendmail
config.mailer_use_dummy=Заглушка
-config.test_email_placeholder=Электронная почта (например, test@example.com)
config.send_test_mail=Отправить тестовое письмо
config.send_test_mail_submit=Отправить
config.test_mail_failed=Не удалось отправить тестовое письмо на «%s»: %v
@@ -3003,7 +2881,6 @@ monitor.queue.maxnumberworkers=Максимальное количество р
monitor.queue.numberinqueue=Позиция в очереди
monitor.queue.settings.title=Настройки пула
monitor.queue.settings.desc=Пулы увеличиваются динамически в ответ на блокировку очередей своих рабочих.
-monitor.queue.settings.maxnumberworkers=Максимальное количество рабочих
monitor.queue.settings.maxnumberworkers.placeholder=В настоящее время %[1]d
monitor.queue.settings.maxnumberworkers.error=Максимальное количество рабочих должно быть числом
monitor.queue.settings.submit=Обновить настройки
@@ -3105,8 +2982,6 @@ error.no_committer_account=Аккаунт пользователя с такой
error.no_gpg_keys_found=Не найден ключ, соответствующий данной подписи
error.not_signed_commit=Неподписанный коммит
error.failed_retrieval_gpg_keys=Не удалось получить ни одного ключа GPG автора коммита
-error.probable_bad_signature=ВНИМАНИЕ! Хотя в базе данных есть ключ с этим идентификатором, он не заверяет этот коммит! Этот коммит ПОДОЗРИТЕЛЬНЫЙ.
-error.probable_bad_default_signature=ВНИМАНИЕ! Хотя ключ по умолчанию имеет этот идентификатор, он не заверяет этот коммит! Этот коммит ПОДОЗРИТЕЛЬНЫЙ.
[units]
unit=Элемент
@@ -3143,7 +3018,6 @@ versions=Версии
versions.view_all=Показать всё
dependency.id=ID
dependency.version=Версия
-alpine.registry=Настройте этот реестр, добавив URL в файл /etc/apk/repositories:
alpine.registry.key=Загрузите публичный ключ RSA реестра в каталог /etc/apk/keys/ для проверки подписи индекса:
alpine.registry.info=Выберите $branch и $repository из списка ниже.
alpine.install=Чтобы установить пакет, выполните следующую команду:
@@ -3153,18 +3027,13 @@ alpine.repository.architectures=Архитектуры
arch.repository=О репозитории
arch.repository.repositories=Репозитории
arch.repository.architectures=Архитектуры
-cargo.registry=Настройте этот реестр в файле конфигурации Cargo (например, ~/.cargo/config.toml):
cargo.install=Чтобы установить пакет с помощью Cargo, выполните следующую команду:
-chef.registry=Настройте этот реестр в своём файле ~/.chef/config.rb:
chef.install=Чтобы установить пакет, выполните следующую команду:
-composer.registry=Настройте этот реестр в файле ~/.composer/config.json:
composer.install=Чтобы установить пакет с помощью Composer, выполните следующую команду:
composer.dependencies=Зависимости
composer.dependencies.development=Зависимости для разработки
conan.details.repository=Репозиторий
-conan.registry=Настроить реестр из командной строки:
conan.install=Чтобы установить пакет с помощью Conan, выполните следующую команду:
-conda.registry=Пропишите этот реестр в качестве репозитория Conda в своём файле .condarc:
conda.install=Чтобы установить пакет с помощью Conda, выполните следующую команду:
container.details.type=Тип образа
container.details.platform=Платформа
@@ -3174,9 +3043,7 @@ container.layers=Слои образа
container.labels=Метки
container.labels.key=Ключ
container.labels.value=Значение
-cran.registry=Настройте этот реестр в файле Rprofile.site:
cran.install=Чтобы установить пакет, выполните следующую команду:
-debian.registry=Настроить реестр из командной строки:
debian.registry.info=Выберите $distribution и $component из списка ниже.
debian.install=Чтобы установить пакет, выполните следующую команду:
debian.repository=О репозитории
@@ -3185,16 +3052,11 @@ debian.repository.components=Компоненты
debian.repository.architectures=Архитектуры
generic.download=Скачать пакет из командной строки:
go.install=Установите пакет из командной строки:
-helm.registry=Настроить реестр из командной строки:
helm.install=Чтобы установить пакет, выполните следующую команду:
-maven.registry=Настройте реестр в файле pom.xml вашего проекта:
-maven.install=Чтобы использовать пакет, включите в блок dependencies в файле pom.xml следующее:
maven.install2=Выполнить через командную строку:
maven.download=Чтобы скачать зависимость, запустите в командной строке:
-nuget.registry=Настроить реестр из командной строки:
nuget.install=Чтобы установить пакет с помощью NuGet, выполните следующую команду:
nuget.dependency.framework=Целевой фреймворк
-npm.registry=Настройте реестр в файле .npmrc вашего проекта:
npm.install=Чтобы установить пакет с помощью npm, выполните следующую команду:
npm.install2=или добавьте его в файл package.json:
npm.dependencies=Зависимости
@@ -3205,7 +3067,6 @@ npm.details.tag=Тег
pub.install=Чтобы установить пакет с помощью Dart, выполните следующую команду:
pypi.requires=Требуется Python
pypi.install=Чтобы установить пакет с помощью pip, выполните следующую команду:
-rpm.registry=Настроить реестр из командной строки:
rpm.distros.redhat=на дистрибутивах семейства RedHat
rpm.distros.suse=на дистрибутивах семейства SUSE
rpm.install=Чтобы установить пакет, выполните следующую команду:
@@ -3217,7 +3078,6 @@ rubygems.dependencies.runtime=Зависимости времени выполн
rubygems.dependencies.development=Зависимости для разработки
rubygems.required.ruby=Требуется версия Ruby
rubygems.required.rubygems=Требуется версия RubyGem
-swift.registry=Настроить реестр из командной строки:
swift.install=Добавьте пакет в свой файл Package.swift:
swift.install2=и запустите следующую команду:
vagrant.install=Чтобы добавить бокс Vagrant, выполните следующую команду:
@@ -3239,7 +3099,6 @@ owner.settings.cargo.initialize.error=Не удалось инициализир
owner.settings.cargo.initialize.success=Индекс Cargo успешно создан.
owner.settings.cargo.rebuild=Перестроить индекс
owner.settings.cargo.rebuild.error=Не удалось перестроить индекс Cargo: %v
-owner.settings.cargo.rebuild.success=Индекс Cargo успешно перестроен.
owner.settings.cleanuprules.title=Управление правилами очистки
owner.settings.cleanuprules.add=Добавить правило очистки
owner.settings.cleanuprules.edit=Изменить правило очистки
@@ -3320,7 +3179,6 @@ runners.delete_runner=Удалить этот раннер
runners.delete_runner_success=Раннер успешно удалён
runners.delete_runner_failed=Не удалось удалить раннер
runners.delete_runner_header=Подтвердите удаление раннера
-runners.delete_runner_notice=Если на этом раннере выполняется задание, оно будет завершено и помечено как неудачное. Это может нарушить рабочий поток сборки.
runners.none=Нет доступных раннеров
runners.status.unspecified=Неизвестно
runners.status.idle=Простаивает
diff --git a/options/locale/locale_si-LK.ini b/options/locale/locale_si-LK.ini
index a209187aff3..39c3835eb92 100644
--- a/options/locale/locale_si-LK.ini
+++ b/options/locale/locale_si-LK.ini
@@ -145,10 +145,6 @@ sqlite_helper=SQLite3 දත්ත සමුදාය සඳහා ගොනු
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_pattern_not_allowed=පරිපාලක පරිශීලක නාමය අවලංගුයි, පරිශීලක නාමය වෙන් කළ රටාවකට ගැලපෙයි
-err_admin_name_is_invalid=පරිපාලක පරිශීලක නාමය වලංගු නොවේ
general_title=පොදු සැකසුම්
app_name=අඩවියේ සිරැසිය
@@ -163,7 +159,6 @@ domain_helper=සේවාදායකය සඳහා ඩොමේන් හෝ
ssh_port=SSH සේවාදායකය වරාය
ssh_port_helper=වරාය අංකය ඔබගේ SSH සේවාදායකය සවන් දෙයි. අක්රිය කිරීමට හිස් තබන්න.
http_port=HTTP සවන් දෙන්න වරාය
-http_port_helper=වරාය අංකය Giteas වෙබ් සේවාදායකය මත සවන් දෙනු ඇත.
app_url=මූලික URL එක කරන්න
app_url_helper=HTTP සඳහා මූලික ලිපිනය (S) URL පරිගණක ක්රිඩාවට සමාන සහ විද්යුත් තැපැල් දැනුම්දීම්.
log_root_path=ලොග් මාර්ගය
@@ -266,7 +261,6 @@ allow_password_change=මුරපදය වෙනස් කිරීමට ප
reset_password_mail_sent_prompt=තහවුරු කිරීමේ විද්යුත් තැපෑලක් %s වෙත යවා ඇත. ඊළඟ තුළ ඔබගේ එන ලිපි පරීක්ෂා කරන්න %s ගිණුම යථා ක්රියාවලිය සම්පූර්ණ කිරීම සඳහා.
active_your_account=ඔබගේ ගිණුම ක්රියාත්මක කරන්න
account_activated=ඔබගේ ගිණුම ක්රියාත්මක කර ඇත
-prohibit_login=තහනම් දී අත්සන්
resent_limit_prompt=ඔබ දැනටමත් මෑතකදී සක්රිය කිරීමේ විද්යුත් තැපෑලක් ඉල්ලා ඇත. කරුණාකර 3 මිනිත්තු බලා නැවත උත්සාහ කරන්න.
has_unconfirmed_mail=හායි %s, ඔබට තහවුරු නොකළ විද්යුත් තැපැල් ලිපිනයක් ඇත (%s ). ඔබට තහවුරු කිරීමේ විද්යුත් තැපෑලක් නොලැබුනේ නම් හෝ නව එකක් නැවත යැවීමට අවශ්ය නම්, කරුණාකර පහත බොත්තම ක්ලික් කරන්න.
resend_mail=ඔබගේ සක්රිය කිරීමේ විද්යුත් තැපෑල නැවත යැවීමට මෙහි ක්ලික් කරන්න
@@ -296,13 +290,10 @@ openid_connect_title=දැනට පවතින ගිණුමකට සම
openid_connect_desc=තෝරාගත් OpenID URI නොදනී. මෙහි නව ගිණුමක් සමඟ එය සම්බන්ධ කරන්න.
openid_register_title=නව ගිණුමක් සාදන්න
openid_register_desc=තෝරාගත් OpenID URI නොදනී. මෙහි නව ගිණුමක් සමඟ එය සම්බන්ධ කරන්න.
-disable_forgot_password_mail=කිසිදු ඊ-තැපැල් සකස් කර නොමැති නිසා ගිණුම් ප්රතිසාධනය අක්රීය කර ඇත. කරුණාකර ඔබේ වෙබ් අඩවි පරිපාලක අමතන්න.
-disable_forgot_password_mail_admin=ගිණුම් ප්රතිසාධනය ලබා ගත හැක්කේ විද්යුත් තැපෑල සකස් කරන විට පමණි. කරුණාකර ගිණුම් ප්රතිසාධනය සක්රීය කිරීම සඳහා විද්යුත් තැපෑලක් සකසන්න.
email_domain_blacklisted=ඔබට ඔබගේ විද්යුත් තැපැල් ලිපිනය සමඟ ලියාපදිංචි විය නොහැක.
authorize_application=අයදුම්පත සඳහා බලය පැවරීම
authorize_redirect_notice=ඔබ මෙම යෙදුමට බලය පවරන්නේ නම් ඔබව %s වෙත හරවා යවනු ලැබේ.
authorize_application_created_by=මෙම යෙදුම %sවිසින් නිර්මාණය කරන ලදී.
-authorize_application_description=ඔබ ප්රවේශය ලබා දෙන්නේ නම්, පුද්ගලික රිපෝස් සහ සංවිධාන ඇතුළු ඔබගේ ගිණුම් තොරතුරු වෙත ප්රවේශ වීමට සහ ලිවීමට හැකි වනු ඇත.
authorize_title=ඔබගේ ගිණුමට ප්රවේශ වීමට "%s" බලය පවරන්නද?
authorization_failed=බලය පැවරීම අසාර්ථකයි
sspi_auth_failed=SSPI සත්යාපන අසමත් විය
@@ -322,8 +313,6 @@ activate_email=ඔබගේ විද්යුත් තැපැල් ලි
activate_email.text=තුළ ඔබගේ විද්යුත් තැපැල් ලිපිනය සත්යාපනය කිරීමට පහත සබැඳිය ක්ලික් කරන්න %s :
register_notify.title=%[1]s, %[2]s වෙත සාදරයෙන් පිළිගනිමු
-register_notify.text_1=මෙය %sසඳහා ඔබගේ ලියාපදිංචි තහවුරු කිරීමේ විද්යුත් තැපෑලයි!
-register_notify.text_2=ඔබට දැන් පරිශීලක නාමය හරහා පිවිසිය හැකිය: %s.
register_notify.text_3=මෙම ගිණුම ඔබ වෙනුවෙන් නිර්මාණය කර තිබේ නම්, කරුණාකර ඔබගේ මුරපදය පළමු සකසන්න.
reset_password=ඔබගේ ගිණුම ප්රතිසාධනය
@@ -361,7 +350,6 @@ release.download.targz=ප්රභව කේතය (TAR.GZ)
repo.transfer.subject_to=%s "%s" සිට %sදක්වා මාරු කිරීමට කැමතියි
repo.transfer.subject_to_you=%s "%s" ඔබ වෙත මාරු කිරීමට කැමතියි
repo.transfer.to_you=ඔබ
-repo.transfer.body=එය පිළිගැනීමට හෝ ප්රතික්ෂේප කිරීමට පිවිසෙන්න %s හෝ එය නොසලකා හරින්න.
repo.collaborator.added.subject=%s ඔබව %s ට එකතු කළා
repo.collaborator.added.text=ඔබ ගබඩාවේ සහයෝගිතාකරුවෙකු ලෙස එකතු කර ඇත:
@@ -414,11 +402,9 @@ username_been_taken=පරිශීලක නාමය දැනටමත් ග
username_change_not_local_user=දේශීය නොවන පරිශීලකයින්ට ඔවුන්ගේ පරිශීලක නාමය වෙනස් කිරීමට අවසර නැත.
repo_name_been_taken=කෝෂ්ඨයේ නම භාවිතා කර ඇත.
repository_files_already_exist=මෙම ගබඩාව සඳහා ලිපිගොනු දැනටමත් පවතී. පද්ධති පරිපාලක අමතන්න.
-repository_files_already_exist.adopt=මෙම ගබඩාව සඳහා ලිපිගොනු දැනටමත් පවතින අතර එය අනුගමනය කළ හැකිය.
repository_files_already_exist.delete=මෙම ගබඩාව සඳහා ලිපිගොනු දැනටමත් පවතී. ඔබ ඒවා මකා දැමිය යුතුය.
repository_files_already_exist.adopt_or_delete=මෙම ගබඩාව සඳහා ලිපිගොනු දැනටමත් පවතී. එක්කෝ ඒවා අනුගමනය කරන්න හෝ ඒවා මකා දමන්න.
visit_rate_limit=දුරස්ථ සංචාරය අනුපාත සීමා කිරීම ආමන්ත්රණය කරන ලදී.
-2fa_auth_required=දුරස්ථ සංචාරය සාධක දෙකක් සත්යාපනය අවශ්ය විය.
org_name_been_taken=සංවිධානයේ නම දැනටමත් ගෙන ඇත.
team_name_been_taken=කණ්ඩායමේ නම දැනටමත් ගෙන ඇත.
team_no_units_error=අවම වශයෙන් එක් ගබඩාවක් වෙත ප්රවේශ වීමට ඉඩ දෙන්න.
@@ -530,7 +516,6 @@ activate_email=සක්රිය යවන්න
activations_pending=අවශ්ය ක්රියාකාරකම්
delete_email=ඉවත් කරන්න
email_deletion=වි-තැපෑල ඉවත් කරන්න
-email_deletion_desc=විද්යුත් තැපැල් ලිපිනය සහ අදාළ තොරතුරු ඔබගේ ගිණුමෙන් ඉවත් කරනු ලැබේ. මෙම විද්යුත් තැපැල් ලිපිනය මගින් Git විවරණය නොවෙනස්ව පවතිනු ඇත. දිගටම?
email_deletion_success=විද්යුත් තැපැල් ලිපිනය ඉවත් කර ඇත.
theme_update_success=ඔබගේ තේමාව යාවත්කාල කෙරිණි.
theme_update_error=තෝරාගත් තේමාව නොපවතී.
@@ -571,7 +556,6 @@ gpg_key_matched_identities_long=මෙම යතුර තුළ කාවැද
gpg_key_verified=සත්යාපිත යතුර
gpg_key_verified_long=යතුර ටෝකනයක් සමඟ සත්යාපනය කර ඇති අතර මෙම යතුර සඳහා ඕනෑම ගැලපෙන අනන්යතාවයන්ට අමතරව මෙම පරිශීලකයා සඳහා ඕනෑම සක්රිය විද්යුත් තැපැල් ලිපින වලට ගැලපෙන වෙනස්වීම් සත්යාපනය කිරීමට භාවිතා කළ හැකිය.
gpg_key_verify=සත්යාපනය කරන්න
-gpg_invalid_token_signature=සපයන ලද GPG යතුර, අත්සන සහ ටෝකනය නොගැලපේ.
gpg_token_required=පහත ටෝකනය සඳහා ඔබ අත්සනක් ලබා දිය යුතුය
gpg_token=ටෝකනය
gpg_token_help=ඔබට අත්සනක් ජනනය කළ හැකිය:
@@ -593,7 +577,6 @@ gpg_key_deletion=ජීපීජී යතුර ඉවත් කරන්න
ssh_principal_deletion=SSH සහතිකය විදුහල්පති ඉවත් කරන්න
ssh_key_deletion_desc=SSH යතුරක් ඉවත් කිරීම ඔබගේ ගිණුමට එහි ප්රවේශය අවලංගු කරයි. දිගටම?
gpg_key_deletion_desc=GPG යතුරක් ඉවත් කිරීම එක්සත් ජාතීන්ගේ-සත්යාපනය කරයි එය අත්සන් කර ඇත. දිගටම?
-ssh_principal_deletion_desc=SSH සහතිකයේ විදුහල්පති ඉවත් කිරීම ඔබගේ ගිණුමට ප්රවේශය අවලංගු කරයි. දිගටම?
ssh_key_deletion_success=SSH යතුර ඉවත් කර ඇත.
gpg_key_deletion_success=GPG යතුර ඉවත් කර ඇත.
ssh_principal_deletion_success=විදුහල්පති ඉවත් කර ඇත.
@@ -646,12 +629,10 @@ oauth2_application_create_description=OUTU2 යෙදුම් මෙම අව
authorized_oauth2_applications=බලයලත් OUTU2
revoke_key=අවලංගු
revoke_oauth2_grant=ප්රවේශ අවලංගු
-revoke_oauth2_grant_description=මෙම තෙවන පාර්ශවීය යෙදුම සඳහා ප්රවේශය අවලංගු කිරීමෙන් මෙම යෙදුම ඔබගේ දත්ත වෙත ප්රවේශ වීම වළක්වනු ඇත. ඔබට විශ්වාසද?
twofa_is_enrolled=ඔබගේ ගිණුම දැනට සාධක දෙකක සත්යාපනය තුළ ලියාපදිංචි කර ඇත.
twofa_not_enrolled=ඔබගේ ගිණුම දැනට සාධක දෙකක සත්යාපනය තුළ ලියාපදිංචි වී නොමැත.
twofa_disable=ද්වි-සාධක සත්යාපනය අක්රීය කරන්න
-twofa_enroll=ද්වි-සාධක සත්යාපන බවට ඇතුල්
twofa_disable_note=අවශ්ය නම් ඔබට ද්වි-සාධක සත්යාපනය අක්රිය කළ හැකිය.
twofa_disable_desc=ද්වි-සාධක සත්යාපනය අක්රීය කිරීමෙන් ඔබගේ ගිණුම අඩු ආරක්ෂිත වනු ඇත. දිගටම?
twofa_disabled=ද්වි-සාධක සත්යාපනය අක්රීය කර ඇත.
@@ -664,7 +645,6 @@ twofa_failed_get_secret=රහස්ය වීමට අසමත් විය.
manage_account_links=සම්බන්ධිත ගිණුම් කළමනාකරණය කරන්න
manage_account_links_desc=මෙම බාහිර ගිණුම් ඔබගේ Gitea ගිණුමට සම්බන්ධ කර ඇත.
-account_links_not_available=දැනට ඔබගේ Gitea ගිණුමට සම්බන්ධ බාහිර ගිණුම් නොමැත.
link_account=ගිණුම සබැඳින්න
remove_account_link=සම්බන්ධිත ගිණුම ඉවත් කරන්න
remove_account_link_desc=සම්බන්ධිත ගිණුමක් ඉවත් කිරීම ඔබගේ Gitea ගිණුමට එහි ප්රවේශය අවලංගු කරනු ඇත. දිගටම?
@@ -742,7 +722,6 @@ mirror_address_desc=අවශ්ය ඕනෑම අක්තපත්ර බල
mirror_lfs=විශාල ගොනු ගබඩා (LFS)
mirror_lfs_desc=LFS දත්ත පතිබිම්බාත්මක සක්රිය.
mirror_lfs_endpoint=LFS එන්පොයින්ට්
-mirror_lfs_endpoint_desc=සමමුහුර්ත කරන්න කිරීමට පරිගණක ක්රිඩාවට සමාන url එක භාවිතා කිරීමට උත්සාහ කරනු ඇත LFS සේවාදායකය තීරණය . නිධිය LFS දත්ත වෙන කොහේ හරි ගබඩා කර තිබේ නම් ඔබට අභිරුචි අන්ත ලක්ෂ්යයක් නියම කළ හැකිය.
mirror_last_synced=අවසන් සමමුහුර්ත
mirror_password_placeholder=(නොවෙනස්ව)
mirror_password_blank_placeholder=(නොපිහිටුවිය)
@@ -753,7 +732,6 @@ forks=දෙබලක
reactions_more=සහ තවත් %d
unit_disabled=අඩවි පරිපාලක විසින් මෙම ගබඩාව අක්රීය කර ඇත.
language_other=වෙනත්
-adopt_search=සම්මත නොකළ නිධි සෙවීම සඳහා පරිශීලක නාමය ඇතුළත් කරන්න... (සියල්ල සොයා ගැනීමට හිස්ව තබන්න)
adopt_preexisting_label=ගොනු සම්පාදනය
adopt_preexisting=පෙර පවතින ලිපිගොනු අනුගමනය කරන්න
adopt_preexisting_content=%s වෙතින් කෝෂ්ඨය සාදන්න
@@ -797,14 +775,12 @@ migrate.clone_address=URL එක සිට සංක්රමණය/පරිග
migrate.clone_address_desc=පවතින ගබඩාවේ HTTP (S) හෝ Git 'පරිගණක ක්රිඩාවට සමාන' URL
migrate.clone_local_path=හෝ දේශීය සේවාදායක මාර්ගයක්
migrate.permission_denied=දේශීය ගබඩාවන් ආනයනය කිරීමට ඔබට අවසර නැත.
-migrate.permission_denied_blocked=ඔබට අවසර නොලත් ධාරකයන් වෙතින් ආයාත කළ නොහැක, කරුණාකර ALUWED_DOMAINS/LOCALNTWorks/BLOCKED_DOMAINSS සැකසුම් පරීක්ෂා කිරීමට පරි
migrate.invalid_lfs_endpoint=මෙම LFS අවසන් ලක්ෂ්යය වලංගු නොවේ.
migrate.failed=සංක්රමණය අසාර්ථකයි: %v
migrate.migrate_items_options=අමතර අයිතම සංක්රමණය කිරීම සඳහා ප්රවේශ ටෝකනය අවශ්ය වේ
migrated_from=%[2]s සිට දක්වා සංක්රමණය වී ඇත
migrated_from_fake=සංක්රමණය වූ ගෙම්%[1]s
migrate.migrate=%sසිට සංක්රමණය
-migrate.migrating=%s සිට සංක්රමණය වීම...
migrate.migrating_failed=%s සිට සංක්රමණය වීම අසාර්ථක විය.
migrate.migrating_failed_no_addr=සංක්රමණය අසාර්ථකයි.
migrate.git.description=ඕනෑම Git සේවාවකින් පමණක් ගබඩාවක් සංක්රමණය කරන්න.
@@ -838,7 +814,6 @@ quick_guide=ඉක්මන් මාර්ගෝපදේශය
clone_this_repo=මෙම ගබඩාව පරිගණක ක්රිඩාවට සමාන
create_new_repo_command=විධාන රේඛාවේ නව ගබඩාවක් නිර්මාණය කිරීම
push_exist_repo=විධාන රේඛාවේ සිට පවත්නා ගබඩාවක් තල්ලු කිරීම
-empty_message=මෙම ගබඩාව කිසිදු අන්තර්ගතයක් අඩංගු නොවේ.
code=කේතය
code.desc=ප්රවේශ මූල කේතය, ගොනු, විවරයන් සහ ශාඛා.
@@ -853,7 +828,6 @@ issues=ගැටළු
pulls=ඉල්ලීම් අදින්න
projects=ව්යාපෘති
labels=ලේබල
-org_labels_desc=මෙම සංවිධානය යටතේ සියලුම ගබඩාවලදී සමඟ භාවිතා කළ හැකි සංවිධාන මට්ටමේ ලේබල්
org_labels_desc_manage=කළමනාකරණය
milestones=සන්ධිස්ථාන
@@ -917,13 +891,13 @@ editor.file_changed_while_editing=ඔබ සංස්කරණය කිරී
editor.commit_empty_file_header=හිස් ගොනුවක් කැප කරන්න
editor.commit_empty_file_text=ඔබ කැප කිරීමට යන ගොනුව හිස් ය. ඉදිරියට?
editor.no_changes_to_show=පෙන්වීමට කිසිදු වෙනසක් නැත.
-editor.fail_to_update_file_summary=දෝෂ පණිවිඩය:
editor.push_rejected_summary=පූර්ණ ප්රතික්ෂේප පණිවිඩය:
editor.add_subdir=ඩිරෙක්ටරියක් එක් කරන්න…
editor.no_commit_to_branch=ශාඛාවට කෙලින්ම කැපවිය නොහැකි නිසා:
editor.user_no_push_to_branch=පරිශීලකයාට ශාඛාවට තල්ලු කළ නොහැක
editor.require_signed_commit=ශාඛාවට අත්සන් කළ කැපවීමක් අවශ්ය වේ
+
commits.desc=මූලාශ්ර කේත වෙනස් කිරීමේ ඉතිහාසය පිරික්සන්න.
commits.commits=විවරයන්
commits.nothing_to_compare=මෙම ශාඛා සමාන වේ.
@@ -1033,7 +1007,6 @@ issues.filter_type.review_requested=සමාලෝචනය ඉල්ලා
issues.filter_sort=වර්ග
issues.filter_sort.latest=නවතම
issues.filter_sort.oldest=පැරණිතම
-issues.filter_sort.recentupdate=මෑතදී යාවත්කාල
issues.filter_sort.leastupdate=අවම වශයෙන් මෑතකදී යාවත්කාලීන
issues.filter_sort.mostcomment=බොහෝ අදහස්
issues.filter_sort.leastcomment=අවම වශයෙන් අදහස්
@@ -1117,7 +1090,6 @@ issues.lock_no_reason=සහයෝගීතාකරුවන්ට අගුළ
issues.unlock_comment=මෙම සංවාදය අගුළු දැමීය %s
issues.lock_confirm=අගුළු ලන්න
issues.unlock_confirm=අගුළු හරින්න
-issues.lock.notice_1=- වෙනත් පරිශීලකයින්ට මෙම ගැටළුව සඳහා නව අදහස් එකතු කළ නොහැක.
issues.lock.notice_2=- මෙම ගබඩාවට ප්රවේශය ඇති ඔබට සහ වෙනත් සහයෝගීකයින්ට තවමත් අන් අයට දැකිය හැකි අදහස් දැක්විය හැකිය.
issues.lock.notice_3=- අනාගතයේදී ඔබට මෙම ගැටළුව නැවත විවෘත කළ හැකිය.
issues.unlock.notice_1=- සෑම කෙනෙකුටම මෙම ගැටලුව ගැන අදහස් දැක්වීමට හැකි වනු ඇත.
@@ -1168,8 +1140,6 @@ issues.dependency.pr_closing_blockedby=මෙම ඇදීමේ ඉල්ලී
issues.dependency.issue_closing_blockedby=මෙම ගැටළුව අවසන් කිරීම පහත සඳහන් ගැටළු මගින් අවහිර කරනු ලැබේ
issues.dependency.issue_close_blocks=මෙම ගැටළුව පහත සඳහන් ගැටළු අවසන් කිරීම
issues.dependency.pr_close_blocks=පහත සඳහන් ගැටළු අවසන් කිරීම මෙම අදින්න ඉල්ලීම අවහිර කරයි
-issues.dependency.issue_close_blocked=ඔබට එය වසා දැමීමට පෙර මෙම ගැටළුව අවහිර කරන සියලුම ගැටළු වසා දැමිය යුතුය.
-issues.dependency.pr_close_blocked=ඔබ එය ඒකාබද්ධ කිරීමට පෙර මෙම අදින්න ඉල්ලීම අවහිර සියලු ප්රශ්න වසා දැමීමට අවශ්ය.
issues.dependency.blocks_short=බ්ලොක්
issues.dependency.blocked_by_short=මත රඳා පවතී
issues.dependency.remove_header=පරායත්තය ඉවත් කරන්න
@@ -1180,12 +1150,10 @@ issues.dependency.add_error_same_issue=ඔබට ප්රශ්නයක් ත
issues.dependency.add_error_dep_issue_not_exist=යැපෙන ප්රශ්නය නොපවතී.
issues.dependency.add_error_dep_not_exist=පරායත්තය නොපවතී.
issues.dependency.add_error_dep_exists=පරායත්තය දැනටමත් පවතී.
-issues.dependency.add_error_cannot_create_circular=ඔබ එකිනෙකා අවහිර ප්රශ්න දෙකක් සමග යැපීමක් නිර්මාණය කළ නොහැක.
issues.dependency.add_error_dep_not_same_repo=මෙම ගැටළු දෙකම එකම ගබඩාවේ තිබිය යුතුය.
issues.review.self.approval=ඔබ ඔබේ ම අදින්න ඉල්ලීම අනුමත කළ නොහැක.
issues.review.self.rejection=ඔබ ඔබේ ම අදින්න ඉල්ලීම මත වෙනස්කම් ඉල්ලා සිටිය නොහැක.
issues.review.approve=මෙම වෙනස්කම් අනුමත %s
-issues.review.dismissed=%sහි සමාලෝචනය %sප්රතික්ෂේප කරන ලද
issues.review.dismissed_label=බැහැර
issues.review.left_comment=අදහසක් හැරගියා
issues.review.content.empty=ඉල්ලූ වෙනස (ය) පෙන්නුම් කරමින් ඔබ අදහස් දැක්වීමක් කළ යුතුය.
@@ -1193,7 +1161,6 @@ issues.review.reject=%s ඉල්ලූ වෙනස්කම්
issues.review.wait=සමාලෝචනය සඳහා ඉල්ලා සිටියේය %s
issues.review.add_review_request=%s %sසිට සමාලෝචන ඉල්ලා
issues.review.remove_review_request=සඳහා ඉවත් සමාලෝචන ඉල්ලීම %s %s
-issues.review.remove_review_request_self=%sසමාලෝචනය කිරීම ප්රතික්ෂේප කළේය
issues.review.pending=වංගු
issues.review.review=සමාලෝචනය
issues.review.reviewers=සමාලෝචකයන්
@@ -1206,7 +1173,6 @@ issues.review.resolve_conversation=සංවාදය විසඳන්න
issues.review.un_resolve_conversation=නොවිසඳිය හැකි සංවාදය
issues.review.resolved_by=මෙම සංවාදය විසඳා ඇති පරිදි සලකුණු කර ඇත
issues.review.commented=අදහස
-issues.assignee.error=අනපේක්ෂිත දෝෂයක් හේතුවෙන් සියලුම ඇසිග්නස් එකතු නොකළේය.
issues.reference_issue.body=ශරීරය
issues.content_history.deleted=මකා දැමූ
issues.content_history.edited=සංස්කරණය
@@ -1263,28 +1229,20 @@ pulls.reject_count_1=වෙනස් කිරීමේ ඉල්ලීම් %d
pulls.reject_count_n=වෙනස් කිරීමේ ඉල්ලීම් %d
pulls.waiting_count_1=%d සමාලෝචන බලා
pulls.waiting_count_n=%d සමාලෝචන බලා
-pulls.wrong_commit_id=ඉලක්කගත ශාඛාවේ කැපවූ හැඳුනුම්පතක් විය යුතුය
pulls.no_merge_desc=සියලු නිධි ඒකාබද්ධ විකල්ප අක්රීය කර ඇති නිසා මෙම අදින්න ඉල්ලීම ඒකාබද්ධ කළ නොහැක.
pulls.no_merge_helper=ගබඩාවේ සැකසුම් ඒකාබද්ධ විකල්ප සක්රීය කරන්න හෝ අදින්න ඉල්ලීම අතින් ඒකාබද්ධ කරන්න.
pulls.no_merge_wip=එය ප්රගතියේ කාර්යයක් ලෙස සලකුණු කර ඇති නිසා මෙම අදින්න ඉල්ලීම ඒකාබද්ධ කළ නොහැකිය.
-pulls.no_merge_not_ready=මෙම අදින්න ඉල්ලීම ඒකාබද්ධ කිරීමට සූදානම් නැත, සමාලෝචනය තත්ත්වය සහ තත්ත්වය චෙක්පත් පරීක්ෂා කරන්න.
pulls.no_merge_access=මෙම අදින්න ඉල්ලීම ඒකාබද්ධ කිරීමට ඔබට අවසර නැත.
pulls.merge_pull_request=ඒකාබද්ධ කැප නිර්මාණය
-pulls.rebase_merge_pull_request=පසුව වේගයෙන් ඉදිරියට යන්න
-pulls.rebase_merge_commit_pull_request=Rebase ඉන්පසු ඒකාබද්ධ කරන්න
pulls.squash_merge_pull_request=ස්කොෂ් කැපීමට සාදන්න
pulls.merge_manually=අතින් සංයුක්ත කර ඇත
pulls.merge_commit_id=ඒකාබද්ධ කිරීමේ හැඳුනුම්පත
pulls.require_signed_wont_sign=ශාඛාවට අත්සන් කළ කොපියක් අවශ්ය වුවද මෙම ඒකාබද්ධ කිරීම අත්සන් නොකෙරේ
pulls.invalid_merge_option=ඔබ මෙම අදින්න ඉල්ලීම සඳහා මෙම ඒකාබද්ධ විකල්පය භාවිතා කළ නොහැක.
-pulls.merge_conflict=ඒකාබද්ධ කිරීම අසමත් විය: ඒකාබද්ධ වන අතර ගැටුමක් ඇති විය. ඉඟිය: වෙනත් උපාය මාර්ගයක් උත්සාහ කරන්න
pulls.merge_conflict_summary=දෝෂ පණිවිඩය
-pulls.rebase_conflict=ඒකාබද්ධ කිරීම අසමත් විය: නැවත පදනම් කිරීමේදී ගැටුමක් ඇති විය:%[1]s ඉඟිය: වෙනත් උපාය මාර්ගයක් උත්සාහ කරන්න
pulls.rebase_conflict_summary=දෝෂ පණිවිඩය
-pulls.unrelated_histories=ඒකාබද්ධ කිරීම අසමත් විය: ඒකාබද්ධ හිස සහ පාදය පොදු ඉතිහාසයක් බෙදා නොගනී. ඉඟිය: වෙනත් උපාය මාර්ගයක් උත්සාහ කරන්න
-pulls.merge_out_of_date=ඒකාබද්ධ කිරීම අසමත් විය: ඒකාබද්ධ කිරීම ජනනය කරන අතර, පදනම යාවත්කාලීන කරන ලදී. ඉඟිය: නැවත උත්සාහ කරන්න.
pulls.push_rejected_summary=පූර්ණ ප්රතික්ෂේප පණිවිඩය
pulls.open_unmerged_pull_exists=සමාන ගුණාංග සහිත අදින්න ඉල්ලීමක් (#%d) ඇති බැවින් ඔබට නැවත විවෘත කිරීමේ මෙහෙයුමක් කළ නොහැක.
pulls.status_checking=සමහර චෙක්පත් බලා ඇත
@@ -1401,7 +1359,6 @@ activity.title.releases_1=නිකුතු %d
activity.title.releases_n=නිකුතු %d
activity.title.releases_published_by=%s විසින් ප්රකාශයට පත් කර %s
activity.published_release_label=ප්රකාශයට පත්
-activity.no_git_activity=මෙම කාලය තුළ කිසිදු කැපවීමක් සිදු වී නොමැත.
activity.git_stats_exclude_merges=ඒකාබද්ධ කිරීම හැර,
activity.git_stats_author_1=%d කර්තෘ
activity.git_stats_author_n=%d කතුවරුන්
@@ -1426,7 +1383,6 @@ activity.git_stats_deletion_n=%d මකාදැමීම්
contributors.contribution_type.commits=විවරයන්
settings=සැකසුම්
-settings.desc=සැකසුම් යනු ගබඩාව සඳහා සැකසුම් කළමනාකරණය කළ හැකි ස්ථානයයි
settings.options=කෝෂ්ඨය
settings.collaboration=සහයෝගිතාකරුවන්
settings.collaboration.admin=පරිපාලක
@@ -1478,7 +1434,6 @@ settings.pulls.enable_autodetect_manual_merge=ස්වයංක්රීය හ
settings.pulls.default_delete_branch_after_merge=පෙරනිමියෙන් ඒකාබද්ධ කිරීමෙන් පසු අදින්න ඉල්ලීම ශාඛාව මකන්න
settings.admin_settings=පරිපාලක සැකසුම්
settings.admin_enable_health_check=ගබඩාවක් සෞඛ්ය චෙක්පත් සක්රීය කරන්න (git fsck)
-settings.admin_enable_close_issues_via_commit_in_any_branch=පෙරනිමි නොවන ශාඛාවකින් සිදු කරන ලද කැපවීමක් හරහා ගැටළුවක් වසන්න
settings.danger_zone=අන්තරාය කලාපය
settings.new_owner_has_same_repo=නව හිමිකරුට දැනටමත් එකම නමක් සහිත ගබඩාවක් ඇත. කරුණාකර වෙනත් නමක් තෝරන්න.
settings.convert=සාමාන්ය ගබඩාව බවට පරිවර්තනය කරන්න
@@ -1498,7 +1453,6 @@ settings.transfer_abort=මාරු කිරීම අවලංගු කර
settings.transfer_abort_invalid=ඔබට නොපවතින නිධි හුවමාරුවක් අවලංගු කළ නොහැක.
settings.transfer_desc=මෙම ගබඩාව පරිශීලකයෙකුට හෝ ඔබට පරිපාලක අයිතිවාසිකම් ඇති සංවිධානයකට මාරු කරන්න.
settings.transfer_form_title=තහවුරු කිරීමක් ලෙස නිධි නාමය ඇතුලත් කරන්න:
-settings.transfer_in_progress=දැනට අඛණ්ඩ හුවමාරුවක් පවතී. මෙම ගබඩාව වෙනත් පරිශීලකයෙකුට මාරු කිරීමට ඔබ කැමති නම් කරුණාකර එය අවලංගු කරන්න.
settings.transfer_notices_1=- ඔබ එය තනි පරිශීලකයෙකුට මාරු කළහොත් ඔබට ගබඩාවට ප්රවේශය අහිමි වනු ඇත.
settings.transfer_notices_2=- ඔබ එය ඔබට (co-) අයිති සංවිධානයක් වෙත මාරු කළහොත් ඔබ ගබඩාවට ප්රවේශය තබා ගනු ඇත.
settings.transfer_notices_3=- ගබඩාව පුද්ගලික වන අතර එය තනි පරිශීලකයෙකුට මාරු කරනු ලැබේ නම්, මෙම ක්රියාව පරිශීලකයාට අවම වශයෙන් කියවීමට අවසර ලබා ඇති බවට වග බලා ගනී (සහ අවශ්ය නම් අවසර වෙනස් කරයි).
@@ -1512,12 +1466,9 @@ settings.trust_model.default=පෙරනිමි විශ්වාස ආක
settings.trust_model.default.desc=මෙම ස්ථාපනය සඳහා පෙරනිමි නිධි විශ්වාස ආකෘතිය භාවිතා කරන්න.
settings.trust_model.collaborator=සහයෝගීතාව
settings.trust_model.collaborator.long=සහයෝගීතාව: සහයෝගිතාකරුවන් විසින් විශ්වාස අත්සන්
-settings.trust_model.collaborator.desc=මෙම ගබඩාවේ හවුල්කරුවන් විසින් වලංගු අත්සන් “විශ්වාසදායක” ලෙස සලකුණු කරනු ලැබේ - (ඔවුන් කැපකරු සමඟ ගැලපෙනවාද නැද්ද යන්න). එසේ නොමැති නම්, අත්සන කැපකරු හා “නොගැලපේ” නම් වලංගු අත්සන් “විශ්වාස කළ නොහැකි” ලෙස සලකුණු කරනු ලැබේ.
settings.trust_model.committer=කාරක
-settings.trust_model.committer.long=කමිටුව: කමිටුවන්ට ගැලපෙන විශ්වාසනීය අත්සන් (මෙය ගිටබ් වලට ගැලපෙන අතර ගිටියා අත්සන් කරන ලද කැපීම් කමිටුව ලෙස ගිටියා තබා ගැනීමට බල කරනු ඇත)
settings.trust_model.collaboratorcommitter=සහයෝගීතා+කමිටුව
settings.trust_model.collaboratorcommitter.long=සහයෝගීතා+කමිටුව: කමිටුව සමඟ ගැලපෙන සහයෝගිතාකරුවන්ගේ විශ්වාසනීය අත්සන්
-settings.trust_model.collaboratorcommitter.desc=මෙම ගබඩාවේ හවුල්කරුවන් විසින් වලංගු අත්සන් කැපකරු සමඟ ගැලපෙන්නේ නම් “විශ්වාසදායක” ලෙස සලකුණු කරනු ලැබේ. එසේ නොමැති නම්, අත්සන කැපකරුට ගැලපෙන්නේ නම් සහ “අසමසම” වෙනත් ආකාරයකින් වලංගු අත්සන් “විශ්වාස කළ නොහැකි” ලෙස සලකුණු කරනු ලැබේ. මෙය Gitea සම-කර්තෘ-විසින්: සහ සම-කමිටුව: කැප කිරීමේ ට්රේලරය ලෙස සලකුණු කරන ලද සැබෑ කමිටුව සමඟ අත්සන් කරන ලද කැපවීම් මත කැපකරු ලෙස සලකුණු කිරීමට බල කරනු ඇත. පෙරනිමි Gitea යතුර දත්ත සමුදායේ පරිශීලකයෙකුට ගැලපේ.
settings.wiki_delete=විකි දත්ත මකන්න
settings.wiki_delete_desc=නිධි විකි දත්ත මකා දැමීම ස්ථිර වන අතර එය අහෝසි කළ නොහැක.
settings.wiki_delete_notices_1=- මෙය %sසඳහා විකි නිධිය ස්ථිරවම මකා දමා අක්රීය කරනු ඇත.
@@ -1526,7 +1477,6 @@ settings.wiki_deletion_success=නිධි විකි දත්ත මකා
settings.delete=මෙම ගබඩාව මකන්න
settings.delete_desc=ගබඩාවක් මකා දැමීම ස්ථිර වන අතර එය අහෝසි කළ නොහැක.
settings.delete_notices_1=- මෙම මෙහෙයුම අහෝසි කළ නොහැක.
-settings.delete_notices_2=- මෙම මෙහෙයුම මඟින් කේතය, ගැටළු, අදහස්, විකි දත්ත සහ සහයෝගීතා සැකසුම් ඇතුළුව %s ගබඩාව ස්ථිරවම මකා දමනු ඇත.
settings.delete_notices_fork_1=- මෙම ගබඩාවේ ෆෝක්ස් මකා දැමීමෙන් පසු ස්වාධීන වනු ඇත.
settings.deletion_success=ගබඩාව මකා දමා ඇත.
settings.update_settings_success=නිධි සැකසුම් යාවත්කාලීන කර ඇත.
@@ -1545,8 +1495,6 @@ settings.team_not_in_organization=මෙම කණ්ඩායම ගබඩා
settings.teams=කණ්ඩායම්
settings.add_team=කණ්ඩායම එකතු කරන්න
settings.add_team_duplicate=කණ්ඩායම දැනටමත් ගබඩාවක් ඇත
-settings.add_team_success=කණ්ඩායමට දැන් කෝෂ්ඨයට ප්රවේශය ඇත.
-settings.change_team_permission_tip=කණ්ඩායමේ අවසරය කණ්ඩායම් සැකසුම් පිටුවේ සකසන අතර කෝෂ්ඨය අනුව වෙනස් කළ නොහැකිය
settings.delete_team_tip=මෙම කණ්ඩායම සියළුම කෝෂ්ඨවලට ප්රවේශය ඇති අතර ඉවත් කළ නොහැකිය
settings.remove_team_success=කෝෂ්ඨය වෙත කණ්ඩායමේ ප්රවේශය ඉවත් කර ඇත.
settings.add_webhook=වෙබ්හූක් එකතු කරන්න
@@ -1555,8 +1503,6 @@ settings.hooks_desc=ඇතැම් Gitea සිදුවීම් අවුල
settings.webhook_deletion=වෙබ්හූක් ඉවත් කරන්න
settings.webhook_deletion_desc=වෙබ්කොක්කක් ඉවත් කිරීම එහි සැකසුම් සහ බෙදාහැරීමේ ඉතිහාසය මකා දමයි. දිගටම?
settings.webhook_deletion_success=වෙබ්කොක්කෙන් ඉවත් කර ඇත.
-settings.webhook.test_delivery=ටෙස්ට් සැපයුම්
-settings.webhook.test_delivery_desc=ව්යාජ සිදුවීමකින් මෙම වෙබ්කොක්කෙන් පරීක්ෂා කරන්න.
settings.webhook.request=ඉල්ලීම
settings.webhook.response=ප්රතිචාරය
settings.webhook.headers=ශීර්ෂ
@@ -1596,7 +1542,6 @@ settings.event_repository=කෝෂ්ඨය
settings.event_repository_desc=ගබඩාව නිර්මාණය කරන ලද හෝ මකා දමන ලදි.
settings.event_header_issue=නිකුත් කිරීමේ සිදුවීම්
settings.event_issues=ගැටළු
-settings.event_issues_desc=නිකුත් කිරීම විවෘත කිරීම, වසා දැමීම, නැවත විවෘත කිරීම හෝ සංස්කරණය කිරීම.
settings.event_issue_assign=පවරා ඇති නිකුතුව
settings.event_issue_assign_desc=පවරා ඇති හෝ පවරා නොමැති නිකුත් කිරීම.
settings.event_issue_label=ලේබල් නිකුත්
@@ -1607,7 +1552,6 @@ settings.event_issue_comment=නිකුතුව
settings.event_issue_comment_desc=නිකුත් අදහස් නිර්මාණය, සංස්කරණය, හෝ මකා.
settings.event_header_pull_request=ඉල්ලීම් සිදුවීම් අදින්න
settings.event_pull_request=ඉල්ලීම අදින්න
-settings.event_pull_request_desc=අදින්න ඉල්ලීම විවෘත, වසා, නැවත විවෘත, හෝ සංස්කරණය.
settings.event_pull_request_assign=පවරා ඉල්ලීම අදින්න
settings.event_pull_request_assign_desc=පවරා ඇති හෝ පවරා නොමැති ඉල්ලීම අදින්න.
settings.event_pull_request_label=ලේබල් ඉල්ලීම අදින්න
@@ -1711,11 +1655,9 @@ settings.lfs_invalid_locking_path=වලංගු නොවන මාර්ග
settings.lfs_invalid_lock_directory=බහලුම අගුළු දැමිය නොහැක: %s
settings.lfs_lock_already_exists=අගුල දැනටමත් පවතී: %s
settings.lfs_lock=අගුල
-settings.lfs_lock_path=අගුලු දැමීමට ලිපිගොනු...
settings.lfs_locks_no_locks=අගුළු නැත
settings.lfs_lock_file_no_exist=අගුලු දැමූ ගොනුව පෙරනිමි ශාඛාවේ නොපවතී
settings.lfs_force_unlock=බලාත්මක අගුළු හැරීම
-settings.lfs_pointers.found=%d blob pointer (ය) සොයාගෙන ඇත - %d ආශ්රිත, %d ආශ්රිත (%d ගබඩාවෙන් අතුරුදහන්)
settings.lfs_pointers.sha=බ්ලබ් ෂා
settings.lfs_pointers.inRepo=රෙපෝ දී
settings.lfs_pointers.exists=ගබඩාවේ පවතී
@@ -1882,14 +1824,13 @@ settings.visibility.private_shortname=පෞද්ගලික
settings.update_settings=සැකසුම් යාවත්කාල කරන්න
settings.update_setting_success=සංවිධානයේ සැකසුම් යාවත්කාල කර ඇත.
-settings.change_orgname_redirect_prompt=පැරණි නම ඉල්ලා සිටින තුරු නැවත හරවා යවයි.
+
+
settings.update_avatar_success=සංවිධානයේ අවතාරය යාවත්කාලීන කර ඇත.
settings.delete=සංවිධානය මකන්න
settings.delete_account=මෙම සංවිධානය මකන්න
settings.delete_prompt=සංවිධානය ස්ථිරවම ඉවත් කරනු ලැබේ. මෙම අහෝසි කළ නොහැක!
settings.confirm_delete_account=මකාදැමීම තහවුරු කරන්න
-settings.delete_org_title=සංවිධානය මකන්න
-settings.delete_org_desc=මෙම සංවිධානය ස්ථිරවම මකා දමනු ඇත. දිගටම?
settings.hooks_desc=මෙම සංවිධානය යටතේ සියලුම ගබඩාවන් සඳහා මුලපුරනු ලබන වෙබ් කොකු එකතු කරන්න.
settings.labels_desc=මෙම සංවිධානය යටතේ සියලුම ගබඩාවලදී සඳහා ගැටළු සඳහා භාවිතා කළ හැකි ලේබල් එකතු කරන්න.
@@ -1958,7 +1899,6 @@ organizations=සංවිධාන
repositories=කෝෂ්ඨ
hooks=වෙබ්කොකු
authentication=සත්යාපන ප්රභවයන්
-emails=පරිශීලක වි-තැපැල්
config=වින්යාසය
config_summary=සාරාංශය
config_settings=සැකසුම්
@@ -1985,25 +1925,16 @@ dashboard.cron.process=ක්රෝන්:%[1]s
dashboard.cron.error=ක්රෝන් හි දෝෂය: %s:%[3]s
dashboard.cron.finished=ක්රෝන්:%[1]s අවසන් වී ඇත
dashboard.delete_inactive_accounts=සියලුම අක්රීය ගිණුම් මකන්න
-dashboard.delete_inactive_accounts.started=සියලුම අක්රීය ගිණුම් කාර්යය ආරම්භ කර මකා දමන්න.
dashboard.delete_repo_archives=සියලුම ගබඩාවන් 'ලේඛනාගාරය මකන්න (ZIP, TAR.GZ, ආදිය..)
-dashboard.delete_repo_archives.started=සියලුම ගබඩාවල් ලේඛනාගාර කාර්යය ආරම්භ කිරීම මකන්න.
dashboard.delete_missing_repos=ඔවුන්ගේ Git ගොනු අතුරුදහන් වූ සියලුම ගබඩාවන් මකන්න
-dashboard.delete_missing_repos.started=සියළුම ගබඩාවන් මකා දමන්න Git ගොනු කාර්යය ආරම්භ විය.
dashboard.delete_generated_repository_avatars=ජනනය කරන ලද නිධි අවතාරය මකන්න
dashboard.update_mirrors=දර්පණ යාවත්කාලීන කරන්න
dashboard.repo_health_check=සෞඛ්ය සියලු ගබඩාවලදී පරීක්ෂා
dashboard.check_repo_stats=සියළුම කෝෂ්ඨවල සංඛ්යාලේඛන පරීක්ෂා කරන්න
dashboard.archive_cleanup=පැරණි නිධි ලේඛනාගාරය මකන්න
-dashboard.deleted_branches_cleanup=මකාදැමූ ශාඛා පිරිසිදු කිරීම
dashboard.update_migration_poster_id=සංක්රමණ පෝස්ටර් යාවත්කාලීන කිරීම
-dashboard.git_gc_repos=කසළ සියලු ගබඩාවල් එකතු කරයි
-dashboard.resync_all_sshkeys=Gitea SSH යතුරු සමඟ '.ssh/authorized_keys' ගොනුව යාවත්කාලීන කරන්න.
-dashboard.resync_all_sshprincipals=Gitea SSH විදුහල්පතිවරුන් සමඟ '.ssh/authorized_විදුහල්පති' ගොනුව යාවත්කාලීන කරන්න.
-dashboard.resync_all_hooks=පෙර ලැබීමට, යාවත්කාලීන කිරීමට සහ සියලු ගබඩාවන් නැවත ලබා ගැනීමට කොකු නැවත සකස් කරන්න.
dashboard.reinit_missing_repos=අතුරුදහන් වූ සියලුම ගිට් නිධි නැවත ආරම්භ කිරීම
dashboard.sync_external_users=බාහිර පරිශීලක දත්ත සමමුහූර්තනය
-dashboard.cleanup_hook_task_table=පිරිසිදු hook_task වගුව
dashboard.server_uptime=සේවාදායකය යාවත්කාලීන කිරීම
dashboard.current_goroutine=වත්මන් ගෝර්අවුට්ලයින්
dashboard.current_memory_usage=වත්මන් මතක භාවිතය
@@ -2044,7 +1975,6 @@ users.restricted=සීමා
users.repos=කෝෂ්ඨය
users.created=සෑදීම
users.last_login=අවසන් සංඥා දී
-users.never_login=කවදාවත් සිග්නෙඩ්-දී
users.send_register_notify=පරිශීලක ලියාපදිංචි දැනුම්දීම යවන්න
users.edit=සංස්කරණය
users.auth_source=සත්යාපන මූලාශ්රය
@@ -2085,11 +2015,7 @@ users.list_status_filter.not_2fa_enabled=2FA ආබාධිත
emails.email_manage_panel=පරිශීලක විද්යුත් කළමනාකරණය
emails.primary=ප්රාථමික
emails.activated=සක්රිය
-emails.filter_sort.email=වි-තැපෑල
-emails.filter_sort.email_reverse=විද්යුත් තැපෑල (ආපසු)
emails.filter_sort.name=පරිශීලක නාමය
-emails.filter_sort.name_reverse=පරිශීලක නම (ප්රතිලෝම)
-emails.updated=වි-තැපෑල යාවත්කාල කෙරිණි
emails.not_updated=ඉල්ලූ විද්යුත් තැපැල් ලිපිනය යාවත්කාලීන කිරීමට අපොහොසත් විය: %v
emails.duplicate_active=මෙම විද්යුත් තැපැල් ලිපිනය වෙනත් පරිශීලකයෙකු සඳහා දැනටමත් ක්රියාකාරී වේ.
emails.change_email_header=විද්යුත් ගුණාංග යාවත්කාලීන කරන්න
@@ -2187,19 +2113,14 @@ auths.skip_local_two_fa_helper=unset පිටත් 2FA කට්ටලයක
auths.oauth2_tenant=අඳ
auths.enable_auto_register=ස්වයං ලියාපදිංචිය සබල කරන්න
auths.sspi_auto_create_users=ස්වයංක්රීයව පරිශීලකයින් සාදන්න
-auths.sspi_auto_create_users_helper=පළමු වරට ලොගින් වන පරිශීලකයින් සඳහා නව ගිණුම් ස්වයංක්රීයව නිර්මාණය කිරීමට SSPI auth ක්රමයට ඉඩ දෙන්න
auths.sspi_auto_activate_users=පරිශීලකයින් ස්වයංක්රීයව සක්රිය කරන්න
auths.sspi_auto_activate_users_helper=නව පරිශීලකයින් ස්වයංක්රීයව සක්රිය කිරීමට SSPI auth ක්රමයට ඉඩ දෙන්න
auths.sspi_strip_domain_names=පරිශීලක නාම වලින් වසම් නාම ඉවත් කරන්න
-auths.sspi_strip_domain_names_helper=පරීක්ෂා කර ඇත්නම්, ඩොමේන් නම් ලොගන් නම් වලින් ඉවත් කරනු ලැබේ (උදා. “ඩොමේන්\ පරිශීලක” සහ "user@example.org" යන දෙකම හුදෙක් “පරිශීලක” බවට පත්වනු ඇත).
auths.sspi_separator_replacement=\,/සහ @ වෙනුවට භාවිතා කිරීමට වෙන්කර
-auths.sspi_separator_replacement_helper=පහළ මට්ටමේ පිවිසුම් නාම (ද. "ඩොමේන්\ පරිශීලක" හි) සහ පරිශීලක ප්රධාන නම් (ද. @ in "user@example.org").
auths.sspi_default_language=පෙරනිමි පරිශීලක භාෂාව
-auths.sspi_default_language_helper=SSPI auth ක්රමය මගින් ස්වයංක්රීයව නිර්මාණය කරන ලද පරිශීලකයින් සඳහා පෙරනිමි භාෂාව. ඔබ භාෂාව ස්වයංක්රීයව හඳුනා ගැනීමට කැමති නම් හිස්ව තබන්න.
auths.tips=ඉඟි
auths.tips.oauth2.general=OUTU2 සත්යාපන
auths.tip.oauth2_provider=OUTU2 සැපයුම්කරු
-auths.tip.nextcloud=පහත සඳහන් මෙනුව භාවිතා කරමින් ඔබගේ උදාහරණයක් මත නව OAUTH පාරිභෝගිකයෙකු ලියාපදිංචි කරන්න “සැකසීම් -> ආරක්ෂාව -> OAUTH 2.0 සේවාදායකයා”
auths.tip.mastodon=ඔබට සත්යාපනය කිරීමට අවශ්ය mastodon උදාහරණයක් සඳහා අභිරුචි උදාහරණයක් URL එකක් ආදාන කරන්න (හෝ පෙරනිමි එකක් භාවිතා කරන්න)
auths.edit=සත්යාපන මූලාශ්රය සංස්කරණය කරන්න
auths.activated=මෙම සත්යාපන මූලාශ්රය සක්රිය කර ඇත
@@ -2288,7 +2209,6 @@ config.mailer_use_sendmail=සෙන්ඩ්මේල් භාවිතා ක
config.mailer_sendmail_path=සෙන්ඩ්මේල් මාර්ගය
config.mailer_sendmail_args=Sendmail වෙත අමතර තර්ක
config.mailer_sendmail_timeout=සෙන්ඩ්මේල් වේලාව
-config.test_email_placeholder=වි-තැපෑල (උදා. පරීක්ෂාව@උදාහරණය.ලංකා)
config.send_test_mail=අත්හදා බැලීමේ වි-තැපෑල යවන්න
config.oauth_config=ඕත් වින්යාසය
@@ -2353,7 +2273,6 @@ monitor.queue.exemplar=ආදර්ශ වර්ගය
monitor.queue.numberworkers=කම්කරුවන් සංඛ්යාව
monitor.queue.maxnumberworkers=මැක්ස් කම්කරු සංඛ්යාව
monitor.queue.settings.title=තටාකය සැකසුම්
-monitor.queue.settings.maxnumberworkers=මැක්ස් කම්කරුවන් සංඛ්යාව
monitor.queue.settings.maxnumberworkers.placeholder=වත්මන්%[1]d
monitor.queue.settings.maxnumberworkers.error=මැක්ස් කම්කරුවන්ගේ සංඛ්යාව අංකයක් විය යුතුය
monitor.queue.settings.submit=සැකසුම් යාවත්කාල කරන්න
diff --git a/options/locale/locale_sk-SK.ini b/options/locale/locale_sk-SK.ini
index e461075e53a..1c6cc7a7adc 100644
--- a/options/locale/locale_sk-SK.ini
+++ b/options/locale/locale_sk-SK.ini
@@ -43,7 +43,6 @@ webauthn_use_twofa=Použite kód dvojfaktorového overenia z vášho telefónu
webauthn_error=Nie je možné prečítať váš bezpečnostný kód.
webauthn_unsupported_browser=Váš prehliadač aktuálne nepodporuje WebAuthn.
webauthn_error_unknown=Vyskytla sa neznáma chyba. Skúste to znova.
-webauthn_error_insecure=`WebAuthn podporuje iba bezpečné spojenia. Na testovanie cez HTTP môžete použiť "localhost" alebo "127.0.0.1"`
webauthn_error_unable_to_process=Server nemohol spracovať vašu požiadavku.
webauthn_error_duplicated=Bezpečnostný kľúč nie je pre túto požiadavku povolený. Uistite sa, že kľúč ešte nie je zaregistrovaný.
webauthn_error_empty=Musíte nastaviť meno pre tento kľúč.
@@ -178,8 +177,6 @@ buttons.enable_monospace_font=Povoliť font s pevnou šírkou
buttons.disable_monospace_font=Zakázať font s pevnou šírkou
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=Vyskytla sa chyba
@@ -212,16 +209,10 @@ path=Cesta
sqlite_helper=Cesta k súboru databázy SQLite3. Ak spúšťate Gitea ako službu, zadajte absolútnu cestu.
reinstall_error=Pokúšate sa inštalovať do existujúcej databázy Gitea
reinstall_confirm_message=Opätovná inštalácia s existujúcou databázou Gitea môže spôsobiť viacero problémov. Vo väčšine prípadov by ste na spustenie Gitea mali použiť svoj existujúci súbor „app.ini“. Ak viete, čo robíte, potvrďte nasledujúce:
-reinstall_confirm_check_1=Údaje zašifrované pomocou SECRET_KEY v app.ini sa môžu stratiť: používatelia sa možno nebudú môcť prihlásiť s 2FA/OTP a zrkadlá možno nebudú fungovať správne. Začiarknutím tohto políčka potvrdzujete, že aktuálny súbor app.ini obsahuje správny kľúč SECRET_KEY.
-reinstall_confirm_check_2=Repozitáre a nastavenia možno bude potrebné znova synchronizovať. Začiarknutím tohto políčka potvrdzujete, že hooky pre repozitáre a súbor autorizovaných kľúčov znova zosynchronizujete manuálne. Potvrdzujete, že zabezpečíte, aby boli nastavenia úložiska a zrkadla správne.
reinstall_confirm_check_3=Potvrdzujete, že ste si úplne istí, že táto Gitea beží so správnym umiestnením app.ini a že ste si istí, že ju musíte znova nainštalovať. Potvrdzujete, že beriete na vedomie vyššie uvedené riziká.
err_empty_db_path=Cesta k databáze SQLite3 nesmie byť prázdna.
no_admin_and_disable_registration=Nemôžete zakázať registráciu bez vytvorenia administrátorského účtu.
err_empty_admin_password=Heslo administrátora nemôže byť prázdne.
-err_empty_admin_email=E-mail administrátora nemôže byť prázdny.
-err_admin_name_is_reserved=Používateľské meno administrátora je neplatné, používateľské meno je rezervované
-err_admin_name_pattern_not_allowed=Používateľské meno administrátora je neplatné, používateľské meno zodpovedá vyhradenému vzoru
-err_admin_name_is_invalid=Používateľské meno administrátora je neplatné
general_title=Všeobecné nastavenia
app_name=Názov webu
@@ -236,7 +227,6 @@ domain_helper=Adresa domény alebo hostiteľa serveru.
ssh_port=Port SSH servera
ssh_port_helper=Číslo portu na ktorom načúva SSH server. Keď ponecháte prázdne, SSH server zakážete.
http_port=HTTP port pre Gitea
-http_port_helper=Číslo portu na ktorom počúva webový server Gitea.
app_url=Základná URL Gitea
app_url_helper=Základná adresa pre klonované HTTP(S) URL adresy a e-mailové upozornenia.
log_root_path=Adresár logov
@@ -298,7 +288,6 @@ no_reply_address=Skrytá e-mailová doména
no_reply_address_helper=Doménové meno pre používateľov so skrytou e-mailovou adresou. Napríklad, používateľ s menom 'joe' bude zalogovaný v Git-e ako 'joe@noreply.example.org' ak je skrytá e-mailová doména nastavená na 'noreply.example.org'.
password_algorithm=Hašovací algoritmus hesla
invalid_password_algorithm=Neplatný hash algoritmus hesla
-password_algorithm_helper=Nastavte algoritmus hashovania hesla. Algoritmy majú rôzne požiadavky a silu. Algoritmus argon2 je pomerne bezpečný, ale využíva veľa pamäte a môže byť nevhodný pre malé systémy.
enable_update_checker=Povoliť kontrolu aktualizácií
enable_update_checker_helper=Pravidelne kontroluje nové verzie pripojením k gitea.io.
@@ -351,7 +340,6 @@ allow_password_change=Vyžiadať od používateľa zmenu hesla (doporučuje sa)
reset_password_mail_sent_prompt=Na adresu %s bol odoslaný potvrdzovací e-mail. Skontrolujte si, prosím, vašu doručenú poštu počas najbližších %s pre dokončenie procesu obnovenia účtu.
active_your_account=Aktivovať účet
account_activated=Účet bol aktivovaný
-prohibit_login=Prihlásenie zakázané
resent_limit_prompt=Pred malou chvíľou ste už požiadali o aktivačný email. Počkajte, prosím, 3 minúty a potom skúste znova.
has_unconfirmed_mail=Ahoj %s, tvoja e-mailová adresa (%s ) je neoverená. Ak si ešte nedostal potvrdzovací e-mail, alebo je potrebné odoslať nový, klikni, prosím, na tlačidlo nižšie.
resend_mail=Kliknite sem pre opätovné odoslanie aktivačného e-mailu
@@ -384,13 +372,10 @@ openid_connect_title=Pripojiť k existujúcemu účtu
openid_connect_desc=Zvolené OpenID URI je neznáme. Združte s novým účtom tu.
openid_register_title=Vytvoriť nový účet
openid_register_desc=Zvolené OpenID URI je neznáme. Združte s novým účtom tu.
-disable_forgot_password_mail=Obnovenie účtu je zakázané pretože nie je nastavený e-mail. Kontaktujte, prosím, správcu webu.
-disable_forgot_password_mail_admin=Obnovenie účtu je možné iba po nastavení e-mailu. Pre povolenie obnovy účtu nastavte, prosím, e-mail.
email_domain_blacklisted=Nemôžete sa zaregistrovať s vašou e-mailovou adresou.
authorize_application=Autorizovať aplikáciu
authorize_redirect_notice=Ak autorizujete túto aplikáciu, budete presmerovaní na %s.
authorize_application_created_by=Túto aplikáciu vytvoril %s.
-authorize_application_description=Ak udelíte prístup, bude možné pristupovať a zapisovať do všetkých vašich informácií o účte, vrátane súkromných repozitárov a organizácií.
authorize_title=Autorizovať „%s“ pre prístup k vášmu účtu?
authorization_failed=Autorizácia zlyhala
sspi_auth_failed=SSPI overenie zlyhalo
@@ -411,8 +396,6 @@ activate_email=Overte svoju e-mailovú adresu
activate_email.text=Pre overenie vašej e-mailovej adresy kliknite, prosím, na nasledovný odkaz do %s :
register_notify.title=%[1]s, vitajte v %[2]s
-register_notify.text_1=toto je e-mail potvrdzujúci vašu registráciu pre %s!
-register_notify.text_2=Teraz sa môžete prihlásiť s používateľským menom: %s.
register_notify.text_3=Ak bol tento účet vytvorený pre vás, nastavte prosím najskôr svoje heslo .
reset_password=Obnoviť váš účet
@@ -449,7 +432,6 @@ release.download.targz=Zdrojový kód (TAR.GZ)
repo.transfer.subject_to=%s by chcel preniesť "%s" do %s
repo.transfer.subject_to_you=%s by chcel preniesť "%s" k vám
repo.transfer.to_you=vy
-repo.transfer.body=Ak to chcete prijať alebo odmietnuť, navštívte %s alebo to jednoducho ignorujte.
repo.collaborator.added.subject=%s vás pridal do %s
repo.collaborator.added.text=Boli ste pridaný ako spolupracovník repozitára:
@@ -499,7 +481,6 @@ max_size_error=` musí obsahovať maximálne %s znakov.`
email_error=` nie je platná e-mailová adresa.`
glob_pattern_error=` glob vzor je neplatný: %s.`
regex_pattern_error=` regex vzor je neplatný: %s.`
-username_error=` môže obsahovať iba alfanumerické znaky ('0-9', 'a-z', 'A-Z'), pomlčku ('-'), podčiarkovník ('_') a bodku ('.'). Nemôže začínať ani končiť nealfanumerickými znakmi a po sebe idúce nealfanumerické znaky sú tiež zakázané.`
invalid_group_team_map_error=`mapovanie je neplatné: %s`
unknown_error=Neznáma chyba:
captcha_incorrect=Overovací kód CAPTCHA je nesprávny.
@@ -511,11 +492,9 @@ username_change_not_local_user=Používatelia overovaní inak ako lokálne si ne
repo_name_been_taken=Meno repozitára sa už používa.
repository_force_private=Je aktivované "Iba súkromne": súkromné repozitáre nesmú byť zverejnené.
repository_files_already_exist=Súbory pre tento repozitár už existujú. Kontaktujte správcu systému.
-repository_files_already_exist.adopt=Súbory pre tento repozitár už existujú dajú sa iba prijať.
repository_files_already_exist.delete=Súbory pre tento repozitár už existujú. Musíte ich zmazať.
repository_files_already_exist.adopt_or_delete=Súbory pre tento repozitár už existujú. Buď ich prijmite, alebo zmažte.
visit_rate_limit=Dosiahnutý limit rýchlosti dotazov pri vzdialenom prístupe.
-2fa_auth_required=Vzdialený prístup vyžaduje dvojfaktorové overovanie.
org_name_been_taken=Názov organizácie sa už používa.
team_name_been_taken=Názov tímu sa už používa.
team_no_units_error=Povoliť prístup aspoň do jednej sekcie repozitára.
@@ -542,7 +521,6 @@ invalid_ssh_key=Nie je možné overiť váš SSH kľúč: %s
invalid_gpg_key=Nie je možné overiť váš GPG kľúč: %s
invalid_ssh_principal=Neplatná identita: %s
must_use_public_key=Zadaný kľúč je súkromný kľúč. Nikde neodovzdávajte svoj súkromný kľúč. Namiesto toho použite svoj verejný kľúč.
-unable_verify_ssh_key=Nie je možné overiť kľúč SSH, skontrolujte, či neobsahuje chyby.
auth_failed=Overenie zlyhalo: %v
@@ -645,7 +623,6 @@ activate_email=Poslať aktiváciu
activations_pending=Čakajúca aktivácia
delete_email=Odstrániť
email_deletion=Vymazať e-mailovú adresu
-email_deletion_desc=E-mailová adresa a pridružené informácie budú z vášho účtu odstránené. Commity Gitu s touto e-mailovou adresou zostanú nezmenené. Pokračovať?
email_deletion_success=E-mailová adresa bola odstránená.
theme_update_success=Vaša téma bola aktualizovaná.
theme_update_error=Vybraná téma vzhľadu neexistuje.
@@ -686,7 +663,6 @@ gpg_key_matched_identities_long=Vložené identity v tomto kľúči zodpovedajú
gpg_key_verified=Overený kľúč
gpg_key_verified_long=Kľúč bol overený pomocou tokenu a môže byť použitý k overeniu commitov zhodujúcich sa s ľubovoľnou vašou aktivovalo e-mailovou adresou pre tohoto užívateľa naviac k akejkoľvek odpovedajúcej identite tohoto kľúča.
gpg_key_verify=Overiť
-gpg_invalid_token_signature=Zadaný GPG kľúč, podpis a token sa nezhodujú alebo je token zastaralý.
gpg_token_required=Musíte zadať podpis pre nižšie uvedený token
gpg_token=Token
gpg_token_help=Podpis môžete vygenerovať pomocou:
@@ -695,7 +671,6 @@ key_signature_gpg_placeholder=Začína s '-----BEGIN PGP SIGNATURE-----'
ssh_key_verified=Overený kľúč
ssh_key_verified_long=Kľúč bol overený tokenom a možno ho použiť na overenie commitov zhodujúcich sa so všetkými aktivovanými e-mailovými adresami tohto používateľa.
ssh_key_verify=Overiť
-ssh_invalid_token_signature=Zadaný SSH kľúč, podpis alebo token sa nezhodujú alebo je token zastaralý.
ssh_token_required=Musíte zadať podpis pre nižšie uvedený token
ssh_token=Token
ssh_token_help=Podpis môžete vygenerovať pomocou:
@@ -712,7 +687,6 @@ gpg_key_deletion=Odstrániť GPG kľúč
ssh_principal_deletion=Vymazať SSH certifikačnú identitu
ssh_key_deletion_desc=Odstránenie SSH kľúča zruší jeho prístup k vašemu účtu. Pokračovať?
gpg_key_deletion_desc=Odstránením GPG kľúča zneplatníte overenie commitov, ktoré sú ním podpísané. Pokračovať?
-ssh_principal_deletion_desc=Odstránenie SSH certifikátu identity zruší jeho prístup k vašemu účtu. Pokračovať?
ssh_key_deletion_success=SSH kľúč bol odstránený.
gpg_key_deletion_success=GPG kľúč bol odstránený.
ssh_principal_deletion_success=Zabezpečenie bolo odstránené.
@@ -754,7 +728,6 @@ remove_oauth2_application_success=Aplikácia bola odstránená.
create_oauth2_application=Vytvoriť novú aplikáciu OAuth2
create_oauth2_application_button=Vytvoriť aplikáciu
oauth2_application_name=Názov aplikácie
-oauth2_confidential_client=Dôverný klient. Vyberte aplikácie, ktoré uchovávajú tajomstvo v tajnosti, ako sú webové aplikácie. Nevyberajte pre natívne aplikácie vrátane aplikácií pre počítače a mobilné aplikácie.
save_application=Uložiť
oauth2_client_id=ID klienta
oauth2_client_secret=Tajný klientsky kľúč
@@ -766,12 +739,10 @@ oauth2_application_create_description=Aplikácie OAuth2 poskytujú aplikáciám
authorized_oauth2_applications=Autorizované aplikácie OAuth2
revoke_key=Odvolať
revoke_oauth2_grant=Odstrániť prístup
-revoke_oauth2_grant_description=Zrušenie prístupu tejto aplikáciu tretej strany zabráni tejto aplikácii v prístupe k vašim údajom. Ste si istý?
twofa_is_enrolled=Váš účet je momentálne používa dvojfaktorovú autentifikáciu.
twofa_not_enrolled=Váš účet momentálne nepoužíva dvojfaktorovú autentifikáciu.
twofa_disable=Vypnúť dvojfaktorovú autentifikáciu
-twofa_enroll=Povoliť dvojfaktorové overovanie
twofa_disable_note=V prípade potreby môžete zakázať dvojfaktorové overenie.
twofa_disable_desc=Vypnutím dvojfaktorovej autentifikácie bude váš účet menej bezpečný. Ďalej?
twofa_disabled=Dvojfaktorové overovanie bolo vypnuté.
@@ -784,11 +755,9 @@ twofa_failed_get_secret=Nepodarilo sa získať tajomstvo.
webauthn_register_key=Pridať bezpečnostný kľúč
webauthn_nickname=Prezývka
webauthn_delete_key=Odstrániť bezpečnostný kľúč
-webauthn_delete_key_desc=Ak odstránite bezpečnostný kľúč, už sa s ním nebudete môcť prihlásiť. Ďalej?
manage_account_links=Spravovať prepojené kontá
manage_account_links_desc=Tieto externé účty sú prepojené s vaším účtom Gitea.
-account_links_not_available=V súčasnosti nie sú s vaším účtom Gitea prepojené žiadne externé účty.
link_account=Pripojiť účet
remove_account_link=Odstrániť prepojený účet
remove_account_link_desc=Odstránenie prepojeného účtu zruší jeho prístup k vášmu účtu Gitea. Pokračovať?
@@ -857,7 +826,6 @@ mirror_address=Klonovať z URL
mirror_lfs=Úložisko veľkých súborov (LFS)
mirror_lfs_desc=Aktivovať zrkadlenie dát LFS.
mirror_lfs_endpoint=Koncový bod LFS
-mirror_lfs_endpoint_desc=Synchronizácia sa pokúsi použiť klonovaciu adresu URL na určenie servera LFS . Môžete tiež zadať vlastný koncový bod, ak sú dáta repozitára LFS uložené niekde inde.
mirror_last_synced=Posledná synchronizácia
mirror_password_placeholder=(Nezmenené)
mirror_password_blank_placeholder=(Nenastavené)
@@ -868,7 +836,6 @@ forks=Forky
reactions_more=a %d ďalších
unit_disabled=Správca stránky zakázal túto sekciu repozitára.
language_other=Iný
-adopt_search=Ak chcete vyhľadať neprijaté úložiská, zadajte používateľské meno... (pre vyhľadanie všetkých nechajte prázdne)
adopt_preexisting_label=Prijať súbory
adopt_preexisting=Prijať už existujúce súbory
adopt_preexisting_content=Vytvoriť repozitár z %s
@@ -916,7 +883,6 @@ migrate_items_labels=Štítky
migrate_items_pullrequests=Pull requesty
migrate_repo=Migrovať repozitár
migrate.clone_address_desc=HTTP(S) alebo Git 'clone' URL pre klonovanie existujúceho repozitára
-migrate.github_token_desc=Sem môžete vložiť jeden alebo viac tokenov oddelených čiarkami, aby sa migrácia zrýchlila z dôvodu limitu rýchlosti rozhrania GitHub API. UPOZORNENIE: Zneužitie tejto funkcie môže porušiť zásady poskytovateľa služieb a viesť k zablokovaniu účtu.
migrate.clone_local_path=alebo cestu k lokálnemu serveru
migrate.permission_denied=Nemáte povolené importovať miestne repozitáre.
migrate.invalid_lfs_endpoint=Koncový bod LFS nie je platný.
@@ -948,7 +914,6 @@ quick_guide=Rýchly sprievodca
clone_this_repo=Klonovať tento repozitár
create_new_repo_command=Vytvoriť nový repozitár v príkazovom riadku
push_exist_repo=Odoslanie existujúceho repozitára z príkazového riadku
-empty_message=Tento repozitár ešte nemá obsah.
broken_message=Údaje Git, ktoré sú základom tohto úložiska, sa nedajú prečítať. Kontaktujte správcu tejto inštancie alebo odstráňte toto úložisko.
code=Zdrojový kód
@@ -965,7 +930,6 @@ projects=Projekty
packages=Balíčky
actions=Akcie
labels=Štítky
-org_labels_desc=Štítky na úrovni organizácie, ktoré možno použiť so všetkými repozitármi v rámci tejto organizácie
org_labels_desc_manage=spravovať
milestone=Míľnik
@@ -1007,6 +971,7 @@ editor.commit_empty_file_text=Súbor, ktorý sa chystáte odoslať, je prázdny.
editor.no_commit_to_branch=Nedá sa odoslať priamo do vetvy, pretože:
editor.require_signed_commit=Vetva vyžaduje podpísaný commit
+
commits.commits=Commity
commits.search_all=Všetky vetvy
commits.author=Autor
@@ -1074,11 +1039,9 @@ issues.unpin=Odopnúť
issues.dependency.cancel=Zrušiť
-issues.review.dismissed=zamietol revíziu od %s %s
issues.review.wait=bol požiadaný o revidovanie %s
issues.review.add_review_request=požiadal o revidovanie od %s %s
issues.review.remove_review_request=odstránil žiadosť o revidovanie na %s %s
-issues.review.remove_review_request_self=odmietol revidovať %s
issues.review.review=Revízia
issues.review.reviewers=Revidenti
@@ -1087,10 +1050,7 @@ pulls.tab_commits=Commity
pulls.data_broken=Tento pull request je nefunkčný z dôvodu chýbajúcich informácií o forku.
pulls.waiting_count_1=%d čakajúca revízia
pulls.waiting_count_n=%d čakajúcich revízií
-pulls.wrong_commit_id=ID commitu musí byť ID commitu v cieľovej vetve
-pulls.no_merge_not_ready=Tento pull request nie je pripravený na merge, skontrolujte stav revízie a kontroly stavu.
-pulls.rebase_merge_commit_pull_request=Rebase a potom vytvoriť zlučovací commit
pulls.merge_commit_id=ID zlučovacieho commitu
@@ -1135,12 +1095,9 @@ settings.transfer_owner=Nový vlastník
settings.transfer_started=`Tento repozitár bol označený na prenos a čaká na potvrdenie od "%s"`
settings.transfer_succeed=Repozitár bol prenesený.
settings.trust_model.collaborator.long=Spolupracovník: Dôverovať podpisom spolupracovníkov
-settings.trust_model.collaborator.desc=Platné podpisy spolupracovníkov tohto úložiska budú označené ako "dôveryhodné" - (bez ohľadu na to, či sa zhodujú s prispievateľom alebo nie). V opačnom prípade budú platné podpisy označené ako „nedôveryhodné“, ak sa podpis zhoduje s prispievateľom, a „nezhodujúce sa“, ak nie.
settings.trust_model.committer=Prispievateľ
-settings.trust_model.committer.long=Prispievateľ: Dôverovať podpisom, ktoré sa zhodujú s prispievateľmi (toto sa zhoduje s GitHubom a prinúti Gitea podpísané príkazy, aby mali Gitea ako prispievateľa)
settings.trust_model.collaboratorcommitter=Spolupracovník+Prispievateľ
settings.trust_model.collaboratorcommitter.long=Spolupracovník+Prispievateľ: Dôverujte podpisom spolupracovníkov, ktorí zodpovedajú prispievateľovi
-settings.trust_model.collaboratorcommitter.desc=Platné podpisy spolupracovníkov tohto repozitára budú označené ako „dôveryhodné“, ak sa zhodujú s prispievateľom. V opačnom prípade budú platné podpisy označené ako „nedôveryhodné“, ak sa podpis zhoduje s prispievateľom, a v opačnom prípade budú „nezhodujúce sa“. To prinúti Giteu, aby bola označená ako autor na podpísaných odovzdaniach so skutočným autorom označeným ako Co-Authored-By: and Co-Committed-By: na konci commitu. Predvolený kľúč Gitea sa musí zhodovať s používateľom v databáze.
settings.wiki_delete_desc=Odstránenie údajov wiki je trvalé a nemožno ho vrátiť späť.
settings.wiki_delete_notices_1=- Natrvalo odstráni a zakáže wiki pre %s.
settings.wiki_deletion_success=Údaje wiki boli vymazané.
@@ -1155,8 +1112,6 @@ settings.collaborator_deletion_desc=Odstránenie spolupracovníka zruší jeho p
settings.change_team_access_not_allowed=Zmena prístupu tímu k repozitáru bola obmedzená na vlastníka organizácie
settings.team_not_in_organization=Tím nie je v rovnakej organizácii ako repozitár
settings.add_team_duplicate=Tím už má repozitár
-settings.add_team_success=Tím má teraz prístup k repozitáru.
-settings.change_team_permission_tip=Oprávnenia tímu sa nastavujú na stránke s nastaveniami tímu a nedajú sa zmeniť pre jednotlivé repozitáre
settings.delete_team_tip=Tento tím má prístup ku všetkým repozitárom a nemožno ho odstrániť
settings.add_webhook=Pridať webhook
settings.add_webhook.invalid_channel_name=Názov kanála webhooku nemôže byť prázdny a nemôže obsahovať iba znak #.
@@ -1164,7 +1119,6 @@ settings.hooks_desc=Webhooky automaticky odosielajú požiadavky HTTP POST na se
settings.webhook_deletion=Odstrániť webhook
settings.webhook_deletion_desc=Odstránením webhooku sa vymažú jeho nastavenia a história doručovania. Ďalej?
settings.webhook_deletion_success=Webhook bol odstránený.
-settings.webhook.test_delivery_desc=Otestujte tento webhook pomocou testovacej udalosti.
settings.webhook.replay.description=Zopakujte tento webhook.
settings.add_webhook_desc=Gitea odošle požiadavky POST so špecifikovaným typom obsahu na cieľovú adresu URL. Prečítajte si viac v sprievodcovi webhookmi .
settings.event_header_repository=Udalosti repozitára
@@ -1219,6 +1173,8 @@ lower_repositories=repozitáre
settings.visibility.private=Súkromná (viditeľné iba pre členov organizácie)
settings.visibility.private_shortname=Súkromný
+
+
settings.hooks_desc=Pridajte webhooky, ktoré sa spustia nad všetkými repozitármi v rámci tejto organizácie.
@@ -1264,7 +1220,6 @@ systemhooks.update_webhook=Aktualizovať defaultný webhook
auths.enabled=Povolené
auths.oauth2_tokenURL=Token URL
auths.sspi_default_language=Predvolený jazyk používateľa
-auths.sspi_default_language_helper=Predvolený jazyk pre používateľov automaticky vytvorený metódou SSPI auth. Ak uprednostňujete automatické zisťovanie jazyka, nechajte pole prázdne.
config.app_ver=Verzia Gitea
config.app_url=Základná URL Gitea
diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini
index 04428aeab23..7ec0090bcb8 100644
--- a/options/locale/locale_sv-SE.ini
+++ b/options/locale/locale_sv-SE.ini
@@ -136,10 +136,6 @@ sqlite_helper=Sökväg för SQLite3-databasen. Ange en absolut sökväg om du
err_empty_db_path=En sökväg till SQLite3-databasen måste anges.
no_admin_and_disable_registration=Du kan inte inaktivera självregistrering utan att skapa ett administratörskonto.
err_empty_admin_password=Administratörslösenordet kan inte vara tomt.
-err_empty_admin_email=Administratörens mail kan inte vara tom.
-err_admin_name_is_reserved=Administratörsanvändarnamnet är ogiltigt, användarnamnet är reserverat
-err_admin_name_pattern_not_allowed=Administratörens användarnamn är ogiltigt, användarnamnet matchar ett reserverat mönster
-err_admin_name_is_invalid=Administratörsanvändarnamnet är ogiltigt
general_title=Allmänna inställningar
app_name=Sajtens namn
@@ -152,7 +148,6 @@ run_user=Kör som användarnamn
ssh_port=SSH-serverport
ssh_port_helper=Portnumret som din SSH-server lyssnar på. Lämna tom för att inaktivera.
http_port=Gitea HTTP-lyssningsport
-http_port_helper=Portnumret som Giteas webbserver kommer lyssna på.
app_url=Gitea URL
app_url_helper=Basadressen för HTTP(S)-kloningslänkar och mejlnotifikationer.
log_root_path=Loggsökväg
@@ -253,7 +248,6 @@ allow_password_change=Kräv att användaren byter lösenord (rekommenderas)
reset_password_mail_sent_prompt=Ett nytt bekräftelsemail has skickats till %s . Vänligen kontrollera din inkorg inom de kommande %s för att slutföra återställning av ditt konto.
active_your_account=Aktivera ditt konto
account_activated=Kontot har aktiverats
-prohibit_login=Inloggning otillåten
resent_limit_prompt=Du har redan begärt ett aktiveringsmejl nyligen. Vänligen vänta 3 minuter och försök igen.
has_unconfirmed_mail=Hej %s, du har en obekräftad epostaddress (%s ). Om du inte har fått ett bekräftelsemail eller behöver ett nytt, klicka på knappen nedan.
resend_mail=Klicka här för att skicka ditt aktiveringsmejl igen
@@ -287,7 +281,6 @@ email_domain_blacklisted=Du kan inte registrera dig med din e-postadress.
authorize_application=Godkänn applikation
authorize_redirect_notice=Du kommer att omdirigeras till %s om du auktoriserar denna applikation.
authorize_application_created_by=Denna applikation skapades av %s.
-authorize_application_description=Om du beviljar åtkomst kommer den att kunna läsa och skriva information om ditt konto, inklusive privata förråd och organisationer.
authorize_title=Ge "%s" tillgång till ditt konto?
authorization_failed=Auktorisering misslyckades
sspi_auth_failed=SSPI-autentisering misslyckades
@@ -356,11 +349,9 @@ lang_select_error=Välj ett språk från listan.
username_been_taken=Användarnamnet är redan taget.
repo_name_been_taken=Namnet för utvecklingskatalogen är upptaget.
repository_files_already_exist=Filer finns redan för denna utvecklingskatalog. Kontakta systemadministratören.
-repository_files_already_exist.adopt=Filer finns redan för denna utvecklingskatalog och kan bara antas.
repository_files_already_exist.delete=Filer finns redan för denna utvecklingskatalog. Du måste ta bort dem.
repository_files_already_exist.adopt_or_delete=Filer finns redan för denna utvecklingskatalog. Antingen anta dem eller ta bort dem.
visit_rate_limit=För många förfrågningar på för kort tid till fjärrvärden.
-2fa_auth_required=Fjärrbesök kräver tvåfaktorsautentisering.
org_name_been_taken=Organisationsnamnet är redan taget.
team_name_been_taken=Teamnamnet är redan taget.
team_no_units_error=Tillåt åtkomst för åtminstone en del av utvecklingskatalogen.
@@ -464,7 +455,6 @@ activate_email=Skicka aktivering
activations_pending=Väntar på aktivering
delete_email=Ta Bort
email_deletion=Ta Bort mejladress
-email_deletion_desc=Mejladressen och relaterad information kommer tas bort från ditt konto. Git-commits med denna mejladress förblir oförändrade. Vill du fortsätta?
email_deletion_success=Mejladressen har tagits bort.
theme_update_success=Ditt tema ändrades.
theme_update_error=Det valda temat finns inte.
@@ -556,12 +546,10 @@ oauth2_application_create_description=OAuth2-applikationer ger tredjepartsapplik
authorized_oauth2_applications=Auktoriserade OAuth2-appar
revoke_key=Upphäv
revoke_oauth2_grant=Upphäv åtkomst
-revoke_oauth2_grant_description=Återkallning av åtkomst för detta tredjepartsprogram kommer att hindra programmet från att komma åt dina data. Är du säker?
twofa_is_enrolled=Ditt konto är för närvarande uppsäkrad med tvåfaktorsautentisering.
twofa_not_enrolled=Ditt konto är för närvarande inte uppsäkrad med tvåfaktorsautentisering.
twofa_disable=Inaktivera tvåfaktorsautentisering
-twofa_enroll=Aktivera tvåfaktorsautentisering
twofa_disable_note=Du kan inaktivera tvåfaktorsautentisering om det behövs.
twofa_disable_desc=Avaktivering av tvåfaktorsautentisering kommer göra ditt konto mindre säkert. Vill du fortsätta?
twofa_disabled=Tvåfaktorsautentisering har blivit avaktiverat.
@@ -573,7 +561,6 @@ passcode_invalid=Koden är ogiltig. Försök igen.
manage_account_links=Hantera Länkade Konton
manage_account_links_desc=Dessa externa konton är länkade till ditt Gitea-konto.
-account_links_not_available=Det finns för närvarande inga externa konton länkade till ditt Gitea-konto.
link_account=Länka konto
remove_account_link=Ta Bort Länkat Konto
remove_account_link_desc=Borttagning av länkade konton kommer häva dess åtkomst till ditt Gitea-konto. Vill du fortsätta?
@@ -688,7 +675,6 @@ migrate.migrate_items_options=Åtkomsttoken krävs för att migrera ytterligare
migrated_from=Migrerad från %[2]s
migrated_from_fake=Migrerad från %[1]s
migrate.migrate=Migrera från %s
-migrate.migrating=Migrerar från %s ...
migrate.migrating_failed=Migrering från %s misslyckades.
migrate.migrating_issues=Migrerar Ärenden
@@ -710,7 +696,6 @@ quick_guide=Snabbguide
clone_this_repo=Klona detta repo
create_new_repo_command=Skapa en ny utvecklingskatalog på kommandoraden
push_exist_repo=Pusha en existerande utvecklingskatalog från kommandoraden
-empty_message=Detta förråd innehåller inget.
code=Kod
code.desc=Se källkod, filer, commits och brancher.
@@ -724,7 +709,6 @@ issues=Ärenden
pulls=Pull-förfrågningar
projects=Projekt
labels=Etiketter
-org_labels_desc=Etiketter på organisationsnivå som kan användas i alla utvecklingskataloger tillhörande denna organisation
org_labels_desc_manage=hantera
milestones=Milstenar
@@ -777,12 +761,12 @@ editor.file_changed_while_editing=Filens innehåll har ändrats sedan du påbör
editor.commit_empty_file_header=Committa en tom fil
editor.commit_empty_file_text=Filen du vill committa är tom. Vill du fortsätta?
editor.no_changes_to_show=Det finns inga ändringar att visa.
-editor.fail_to_update_file_summary=Felmeddelande:
editor.add_subdir=Lägga till en katalog…
editor.no_commit_to_branch=Det gick inte att committa direkt till branchen för:
editor.user_no_push_to_branch=Användaren kan inte pusha till branchen
editor.require_signed_commit=Branchen kräver en signerad commit
+
commits.desc=Bläddra i källkodens förändringshistorik.
commits.commits=Incheckningar
commits.search_all=Alla brancher
@@ -880,7 +864,6 @@ issues.filter_type.mentioning_you=Nämner dig
issues.filter_sort=Sortera
issues.filter_sort.latest=Nyaste
issues.filter_sort.oldest=Äldsta
-issues.filter_sort.recentupdate=Nyligen uppdaterade
issues.filter_sort.leastupdate=Äldst uppdaterad
issues.filter_sort.mostcomment=Mest kommenterade
issues.filter_sort.leastcomment=Minst kommenterade
@@ -961,7 +944,6 @@ issues.lock_no_reason=låst och begränsat konversation till kollaboratörer %s
issues.unlock_comment=lås upp denna konversation %s
issues.lock_confirm=Lås
issues.unlock_confirm=Lås upp
-issues.lock.notice_1=- Andra användare kan inte kommentera detta ärende.
issues.lock.notice_2=- Du och andra kollaboratörer med tillgång till denna utvecklingskatalog kan fortfarande skriva kommentarer som andra kan se.
issues.lock.notice_3=- Du kan alltid låsa upp detta ärende senare.
issues.unlock.notice_1=- Alla kommer kunna kommentera detta ärende en gång till.
@@ -1010,8 +992,6 @@ issues.dependency.added_dependency=`lade till ett nytt beroende %s`
issues.dependency.removed_dependency=`tog bort ett beroende %s`
issues.dependency.issue_close_blocks=Detta ärende blockerar en stängning av följande ärenden
issues.dependency.pr_close_blocks=Denna pull-förfrågan blockerar stängning av följande ärenden
-issues.dependency.issue_close_blocked=Du måste stänga alla ärenden som blockerar det här ärendet innan du kan stänga det.
-issues.dependency.pr_close_blocked=Du måste stänga alla ärenden som blockerar denna pull-förfrågan innan du kan merga det.
issues.dependency.blocks_short=Blockerar
issues.dependency.blocked_by_short=Beroende av
issues.dependency.remove_header=Ta bort beroende
@@ -1022,7 +1002,6 @@ issues.dependency.add_error_same_issue=Ett ärende kan inte bero på sig själv.
issues.dependency.add_error_dep_issue_not_exist=Ärendet du beror på, finns inte.
issues.dependency.add_error_dep_not_exist=Beroendet finns inte.
issues.dependency.add_error_dep_exists=Beroendet finns redan.
-issues.dependency.add_error_cannot_create_circular=Du kan inte skapa ett beroende med två ärenden som blockerar varandra.
issues.dependency.add_error_dep_not_same_repo=Båda ärendena måste vara i samma utvecklingskatalog.
issues.review.self.approval=Du kan inte godkänna din egen pull-begäran.
issues.review.self.rejection=Du kan inte begära ändringar för din egna pull-förfrågan.
@@ -1033,7 +1012,6 @@ issues.review.reject=begärda ändringar %s
issues.review.wait=begärdes för granskning %s
issues.review.add_review_request=begärde granskning från %s %s
issues.review.remove_review_request=tog bort granskningsbegäran för %s %s
-issues.review.remove_review_request_self=vägrade att granska %s
issues.review.pending=Väntande
issues.review.review=Granska
issues.review.reviewers=Granskare
@@ -1044,7 +1022,6 @@ issues.review.hide_resolved=Dölj löst
issues.review.resolve_conversation=Lös konversation
issues.review.resolved_by=markerade denna konversation som löst
issues.review.commented=Kommentar
-issues.assignee.error=Inte alla tilldelade har lagts till på grund av ett oväntat fel.
issues.content_history.options=Alternativ
@@ -1182,7 +1159,6 @@ activity.title.releases_1=%d release
activity.title.releases_n=%d releaser
activity.title.releases_published_by=%s publicerad av %s
activity.published_release_label=Publicerad
-activity.no_git_activity=Det har inte gjorts några commit under den här perioden.
activity.git_stats_exclude_merges=Exkludera merger,
activity.git_stats_author_1=%d författare
activity.git_stats_author_n=%d författare
@@ -1201,7 +1177,6 @@ activity.git_stats_deletion_n=%d borttagningar
contributors.contribution_type.commits=Incheckningar
settings=Inställningar
-settings.desc=Inställningarna är där du kan hantera inställningar för utvecklingskatalogen
settings.options=Utvecklingskatalog
settings.collaboration=Medarbetare
settings.collaboration.admin=Administratör
@@ -1242,7 +1217,6 @@ settings.pulls_desc=Aktivera Pull Requests för utvecklingskatalog
settings.pulls.ignore_whitespace=Ignorera blanksteg vid konflikter
settings.admin_settings=Administratörsinställningar
settings.admin_enable_health_check=Aktivera hälsokontroll för utvecklingskataloger (git fsck)
-settings.admin_enable_close_issues_via_commit_in_any_branch=Stäng ett ärende via en commit gjord i en icke standard-gren
settings.danger_zone=Högrisksområde
settings.new_owner_has_same_repo=Den nya ägaren har redan ett repo med det namnet. Vänligen välj ett annat namn.
settings.convert=Konvertera till vanlig utvecklingskatalog
@@ -1268,7 +1242,6 @@ settings.wiki_deletion_success=Utvecklingskatalogens wiki-data har blivit bortta
settings.delete=Ta Bort Detta Repo
settings.delete_desc=Borttagning av en utvecklingskatalog är permanent och kan ej ångras.
settings.delete_notices_1=- Denna åtgärd kan INTE ångras.
-settings.delete_notices_2=- Denna åtgärd kommer permanent ta bort utvecklingskatalogen %s inklusive kod, ärenden, kommentarer, wiki-data samt medarbetarinställningar.
settings.delete_notices_fork_1=- Forkar av denna utvecklingskatalog kommer bli självständiga efter borttagning.
settings.deletion_success=Utvecklingskatalog har tagits bort.
settings.update_settings_success=Inställningar för utvecklingskatalog har uppdaterats.
@@ -1285,15 +1258,12 @@ settings.change_team_access_not_allowed=Att ändra teamåtkomst för utvecklings
settings.team_not_in_organization=Teamet är inte i samma organisation som utvecklingskatalogen
settings.teams=Grupper
settings.add_team_duplicate=Teamet har redan utvecklingskatalogen
-settings.add_team_success=Teamet har nu tillgång till utvecklingskatalogen.
settings.remove_team_success=Teamets åtkomst till utvecklingskatalogen har tagits bort.
settings.add_webhook=Lägg Till Webbhook
settings.hooks_desc=Webhooks gör automatiskt ett HTTP POST anrop mot en server när vissa Gitea events triggas. Läs mer om detta i webhooks guiden .
settings.webhook_deletion=Ta bort Webhook
settings.webhook_deletion_desc=Borttagning utav en webhook tar även bort dess inställningar och leveranshistorik. Vill du fortsätta?
settings.webhook_deletion_success=Webhooken har blivit borttagen.
-settings.webhook.test_delivery=Testa Leverans
-settings.webhook.test_delivery_desc=Testa webhooken genom ett testevent.
settings.webhook.request=Begäran
settings.webhook.response=Svar
settings.webhook.headers=Huvuden
@@ -1401,7 +1371,6 @@ settings.lfs_invalid_locking_path=Ogiltig sökväg: %s
settings.lfs_invalid_lock_directory=Kan inte låsa katalog: %s
settings.lfs_lock_already_exists=Lås finns redan: %s
settings.lfs_lock=Lås
-settings.lfs_lock_path=Filväg att låsa...
settings.lfs_locks_no_locks=Inga lås
settings.lfs_force_unlock=Tvinga upplåsning
settings.lfs_pointers.sha=Blob SHA
@@ -1524,13 +1493,13 @@ settings.visibility.private=Privat (synlig endast för organisationens medlemmar
settings.visibility.private_shortname=Privat
settings.update_settings=Uppdatera inställningar
+
+
settings.update_avatar_success=Organisationens avatar har uppdateras.
settings.delete=Tag bort organisation
settings.delete_account=Tag bort denna organisation
settings.delete_prompt=Organisationen kommer tas bort permanent, och det går INTE att ångra detta!
settings.confirm_delete_account=Bekräfta borttagning
-settings.delete_org_title=Ta bort organisation
-settings.delete_org_desc=Denna organisation kommer tas bort permanent. Vill du fortsätta?
settings.hooks_desc=Lägg till webbhook som triggas för alla utvecklingskataloger under denna organisationen.
settings.labels_desc=Lägg till etiketter som kan användas till ärenden för alla utvecklingskataloger under denna organisation.
@@ -1613,8 +1582,6 @@ dashboard.clean_unbind_oauth=Rena obundna OAuth anslutningar
dashboard.clean_unbind_oauth_success=Alla obundna OAuth anslutningar har raderats.
dashboard.delete_missing_repos=Ta bort alla utvecklingskataloger som saknar filer specifika för Git
dashboard.delete_generated_repository_avatars=Ta bort genererade avatarer för utvecklingskatalogen
-dashboard.git_gc_repos=Rensa skräpfiler på samtliga utvecklingskataloger
-dashboard.resync_all_hooks=Återsynkronisera pre-recieve, update och post-receive hooks för alla utvecklingskataloger.
dashboard.reinit_missing_repos=Återinitialisera alla saknade utvecklingskataloger som vi känner till
dashboard.sync_external_users=Synkronisera extern användardata
dashboard.server_uptime=Serverns upptid
@@ -1656,7 +1623,6 @@ users.admin=Administratör
users.repos=Utvecklingskataloger
users.created=Skapad
users.last_login=Senaste inloggning
-users.never_login=Aldrig varit inloggad
users.send_register_notify=Skicka notifiering vid användarregistrering
users.edit=Redigera
users.auth_source=Autentiseringskälla
@@ -1683,10 +1649,7 @@ users.list_status_filter.is_admin=Administratör
emails.primary=Primär
emails.activated=Aktiverad
-emails.filter_sort.email=E-post
-emails.filter_sort.email_reverse=E-post (omvänd)
emails.filter_sort.name=Användarnamn
-emails.filter_sort.name_reverse=Användarnamn (omvänd)
orgs.org_manage_panel=Organisationshantering
orgs.name=Namn
@@ -1966,8 +1929,6 @@ error.no_committer_account=Inget konto är kopplat till bidragsgivarens mejladre
error.no_gpg_keys_found=Ingen känd nyckel hittad för denna signaturen i databasen
error.not_signed_commit=Inte en signerad commit
error.failed_retrieval_gpg_keys=Det gick inte att hämta någon nyckel kopplad till bidragsgivarens konto
-error.probable_bad_signature=VARNING! Även om det finns en nyckel med detta ID i databasen så verifierar det inte committen! Denna commit är MISSTÄNKT.
-error.probable_bad_default_signature=VARNING! Även om standard-nyckeln har detta ID så verifierar det inte committen! Denna commit är MISSTÄNKT.
[units]
error.no_unit_allowed_repo=Du tillåts inte åtkomst till någon del av denna utvecklingskatalog.
diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini
index 43ff6495c19..c55ee0c6ac0 100644
--- a/options/locale/locale_tr-TR.ini
+++ b/options/locale/locale_tr-TR.ini
@@ -120,6 +120,7 @@ error404=Ulaşmaya çalıştığınız sayfa mevcut değil veya
error503=Sunucu isteğinizi gerçekleştiremedi. Lütfen daha sonra tekrar deneyin.
go_back=Geri Git
invalid_data=Geçersiz veri: %v
+nothing_has_been_changed=Hiçbir şey değişmedi.
never=Asla
unknown=Bilinmiyor
@@ -252,7 +253,7 @@ license_desc=Gidin ve belgeleri okuyun.
require_db_desc=Gitea MySQL, PostgreSQL, MSSQL, SQLite3 veya TiDB (MySQL protokolü) gerektirir.
@@ -269,16 +270,11 @@ path=Yol
sqlite_helper=SQLite3 veritabanı dosya yolu. Gitea'yı servis olarak çalıştırıyorsanız tam yol adını girin.
reinstall_error=Mevcut bir Gitea veritabanına yüklemeye çalışıyorsunuz
reinstall_confirm_message=Mevcut bir Gitea veritabanıyla yeniden kurulum yapmak birden çok soruna neden olabilir. Çoğu durumda Gitea'yı çalıştırmak için mevcut "app.ini" dosyanızı kullanmalısınız. Ne yaptığınızı biliyorsanız, aşağıdakileri onaylayın:
-reinstall_confirm_check_1=App.ini'de SECRET_KEY tarafından şifrelenen veriler kaybolabilir: kullanıcılar 2FA/OTP ile oturum açamayabilir ve yansıtmalar düzgün çalışmayabilir. Bu kutuyu işaretleyerek mevcut app.ini dosyasının doğru SECRET_KEY dosyasını içerdiğini onaylarsınız.
-reinstall_confirm_check_2=Depoların ve ayarların yeniden senkronize edilmesi gerekebilir. Bu kutuyu işaretleyerek, havuzlar ve yetkili_anahtarlar dosyası için kancaları elle yeniden senkronize edeceğinizi onaylamış olursunuz. Depo ve yansı ayarlarının doğru olduğundan emin olacağınızı onaylıyorsunuz.
reinstall_confirm_check_3=Bu Gitea'nın doğru app.ini konumuyla çalıştığından kesinlikle emin olduğunuzu ve yeniden yüklemeniz gerektiğinden emin olduğunuzu onaylarsınız. Yukarıdaki riskleri kabul ettiğinizi onaylıyorsunuz.
err_empty_db_path=SQLite3 veritabanı dosya yolu boş olamaz.
no_admin_and_disable_registration=Bir yönetici hesabı oluşturmadan kullanıcı kaydını kapatamazsınız.
err_empty_admin_password=Yönetici parolası boş olamaz.
err_empty_admin_email=Yönetici e-postası boş olamaz.
-err_admin_name_is_reserved=Yönetici Kullanıcı Adı geçersiz, bu kullanıcı adı rezerv edilen bir kelimedir
-err_admin_name_pattern_not_allowed=Yönetici kullanıcı adı geçersiz, kullanıcı adı ayrılmış bir desenle eşleşiyor
-err_admin_name_is_invalid=Yönetici Kullanıcı Adı geçersiz
general_title=Genel Ayarlar
app_name=Site Başlığı
@@ -294,7 +290,6 @@ domain_helper=Sunucu için alan adı veya ana bilgisayar adresi.
ssh_port=SSH Sunucu Portu
ssh_port_helper=SSH sunucusunun dinleyeceği port numarası. Etkisizleştimek için boş bırakın.
http_port=Gitea HTTP Dinleme Portu
-http_port_helper=Gitea'nın web sunucusunun dinleyeceği port numarası.
app_url=Gitea Kök URL
app_url_helper=HTTP(S) kopyalama URL'leri ve e-posta bildirimleri için temel adres.
log_root_path=Günlük Dosyaları Yolu
@@ -358,7 +353,6 @@ no_reply_address=Gizlenecek E-Posta Alan Adı
no_reply_address_helper=Gizlenmiş e-posta adresine sahip kullanıcılar için alan adı. Örneğin 'ali' kullanıcı adı, gizlenmiş e-postalar için alan adı 'yanityok.ornek.org' olarak ayarlandığında Git günlüğüne 'ali@yanityok.ornek.org' olarak kaydedilecektir.
password_algorithm=Parola Hash Algoritması
invalid_password_algorithm=Hatalı parola hash algoritması
-password_algorithm_helper=Parola hash algoritmasını ayarlayın. Algoritmalar değişen gereksinimlere ve güce sahiptirler. argon2 algoritması iyi özelliklere sahip olmasına rağmen fazla miktarda bellek kullanır ve küçük sistemler için uygun olmayabilir.
enable_update_checker=Güncelleme Denetleyicisini Etkinleştir
enable_update_checker_helper=Düzenli olarak gitea.io'ya bağlanarak yeni yayınlanan sürümleri denetler.
env_config_keys=Ortam Yapılandırma
@@ -421,6 +415,7 @@ remember_me.compromised=Oturum açma tokeni artık geçerli değil, bu ele geçi
forgot_password_title=Şifremi unuttum
forgot_password=Şifrenizi mi unuttunuz?
need_account=Bir hesaba mı ihtiyacın var?
+sign_up_tip=Sistemdeki yönetici ayrıcalıklarına sahip olan ilk hesabı oluşturuyorsunuz. Lütfen kullanıcı adınızı ve parolanızı unutmamaya dikkat edin. Kullanıcı adı veya parolayı unutursanız, hesabı kurtarmak için lütfen Gitea belgelerine bakın.
sign_up_now=Hemen kaydolun.
sign_up_successful=Hesap başarılı bir şekilde oluşturuldu. Hoşgeldiniz!
confirmation_mail_sent_prompt_ex=Yeni bir doğrulama e-postası %s adresine gönderildi. Lütfen kayıt sürecini tamamlamak için %s içinde gelen kutunuzu denetleyin. Eğer kayıt e-posta adresiniz hatalı ise, tekrar oturum açıp değiştirebilirsiniz.
@@ -429,8 +424,6 @@ allow_password_change=Kullanıcıyı parola değiştirmeye zorla (önerilen)
reset_password_mail_sent_prompt=%s adresine bir onay e-postası gönderildi. Hesap kurtarma işlemini tamamlamak için lütfen gelen kutunuzu sonraki %s içinde kontrol edin.
active_your_account=Hesabınızı Etkinleştirin
account_activated=Hesap etkinleştirildi
-prohibit_login=Oturum Açma Yasağı
-prohibit_login_desc=Hesabınız ile oturum açmanız yasaklanmış, lütfen site yöneticinizle iletişime geçin.
resent_limit_prompt=Zaten bir etkinleştirme e-postası talep ettiniz. Lütfen 3 dakika bekleyip tekrar deneyin.
has_unconfirmed_mail=Merhaba %s, doğrulanmamış bir e-posta adresin var (%s ). Bir doğrulama e-postası almadıysanız ya da yenisine ihtiyacınız varsa lütfen aşağıdaki düğmeye tıklayın.
change_unconfirmed_mail_address=Eğer kayıt e-posta adresiniz hatalı ise, burada değiştirebilir ve yeni bir doğrulama e-postası gönderebilirsiniz.
@@ -451,7 +444,6 @@ use_scratch_code=Bir çizgi kodu kullanınız
twofa_scratch_used=Geçici kodunuzu kullandınız. İki aşamalı ayarlar sayfasına yönlendirildiniz, burada aygıt kaydınızı kaldırabilir veya yeni bir geçici kod oluşturabilirsiniz.
twofa_passcode_incorrect=Şifreniz yanlış. Aygıtınızı yanlış yerleştirdiyseniz, oturum açmak için çizgi kodunuzu kullanın.
twofa_scratch_token_incorrect=Çizgi kodunuz doğru değildir.
-twofa_required=Depolara erişmek için iki aşama doğrulama kullanmanız veya tekrar oturum açmayı denemeniz gereklidir.
login_userpass=Oturum Aç
login_openid=Açık Kimlik
oauth_signup_tab=Yeni Hesap Oluştur
@@ -463,24 +455,19 @@ oauth_signin_submit=Hesabı Bağla
oauth.signin.error.general=Yetkilendirme isteğini işlerken bir hata oluştu: %s. Eğer hata devam ederse lütfen site yöneticisiyle bağlantıya geçin.
oauth.signin.error.access_denied=Yetkilendirme isteği reddedildi.
oauth.signin.error.temporarily_unavailable=Yetkilendirme sunucusu geçici olarak erişilemez olduğu için yetkilendirme başarısız oldu. Lütfen daha sonra tekrar deneyin.
-oauth_callback_unable_auto_reg=Otomatik kayıt etkin ancak OAuth2 Sağlayıcı %[1] eksik sahalar döndürdü: %[2]s, otomatik olarak hesap oluşturulamıyor, lütfen bir hesap oluşturun veya bağlantı verin, veya site yöneticisiyle iletişim kurun.
openid_connect_submit=Bağlan
openid_connect_title=Mevcut olan bir hesaba bağlan
openid_connect_desc=Seçilen OpenID URI'si bilinmiyor. Burada yeni bir hesapla ilişkilendir.
openid_register_title=Yeni hesap oluştur
openid_register_desc=Seçilen OpenID URI'si bilinmiyor. Burada yeni bir hesapla ilişkilendir.
openid_signin_desc=OpenID URI'nizi girin. Örneğin: alice.openid.example.org veya https://openid.example.org/alice.
-disable_forgot_password_mail=E posta ayarlanmadığından hesap kurtarma devre dışı. Site yöneticinizle iletişime geçin.
-disable_forgot_password_mail_admin=Hesap kurtarma sadece e posta ayarlıyken kullanılabilir. Hesap kurtarmayı etkinleştirmek için lütfen e posta ayarlayın.
email_domain_blacklisted=Bu e-posta adresinizle kayıt olamazsınız.
authorize_application=Uygulamayı Yetkilendir
authorize_redirect_notice=Bu uygulamayı yetkilendirirseniz %s adresine yönlendirileceksiniz.
authorize_application_created_by=Bu uygulama %s tarafından oluşturuldu.
-authorize_application_description=Erişime izin verirseniz, özel depolar ve organizasyonlar da dahil olmak üzere tüm hesap bilgilerinize erişebilir ve yazabilir.
authorize_application_with_scopes=Kapsamlar: %s
authorize_title=Hesabınıza erişmesi için "%s" yetkilendirilsin mi?
authorization_failed=Yetkilendirme başarısız oldu
-authorization_failed_desc=Geçersiz bir istek tespit ettiğimiz için yetkilendirme başarısız oldu. Lütfen izin vermeye çalıştığınız uygulamanın sağlayıcısı ile iletişim kurun.
sspi_auth_failed=SSPI kimlik doğrulaması başarısız oldu
password_pwned=Seçtiğiniz parola, daha önce herkese açık veri ihlallerinde açığa çıkan bir çalınan parola listesindedir . Lütfen farklı bir parola ile tekrar deneyin ve başka yerlerde de bu parolayı değiştirmeyi düşünün.
password_pwned_err=HaveIBeenPwned'e yapılan istek tamamlanamadı
@@ -505,8 +492,6 @@ activate_email.text=E posta adresinizi doğrulamak için lütfen %s için
register_notify=%s'ya Hoş Geldiniz
register_notify.title=%[1]s, %[2]s e hoşgeldiniz
-register_notify.text_1=bu %s için kayıt onay e postanızdır!
-register_notify.text_2=Artık %s kullanıcı adı ile oturum açabilirsiniz.
register_notify.text_3=Eğer bu hesap sizin için oluşturulduysa, lütfen önce şifrenizi ayarlayın.
reset_password=Hesabınızı kurtarın
@@ -544,7 +529,6 @@ release.download.targz=Kaynak Kodu (TAR.GZ)
repo.transfer.subject_to=%s "%s" aktarımını %s tarafına gerçekleştirmek istiyor
repo.transfer.subject_to_you=%s size "%s" aktarmak istiyor
repo.transfer.to_you=siz
-repo.transfer.body=Kabul veya reddetmek için %s ziyaret edin veya görmezden gelin.
repo.collaborator.added.subject=%s sizi %s ekledi
repo.collaborator.added.text=Bu depo için katkıcı olarak eklendiniz:
@@ -596,7 +580,6 @@ url_error=`"%s" geçerli bir URL değil.`
include_error=` "%s" içermelidir.`
glob_pattern_error=` glob deseni geçersiz: %s.`
regex_pattern_error=` regex dizisi geçersiz: %s.`
-username_error=` sadece alfanümerik karakterler ('0-9','a-z','A-Z'), tire ('-'), altçizgi ('_') ve nokta ('.') içerebilir. Alfanümerik olmayan karakterle başlayamaz veya bitemez ve alfanümerik olmayan karakterler peşpeşe gelemez.`
invalid_group_team_map_error=` eşleme geçersiz: %s`
unknown_error=Bilinmeyen hata:
captcha_incorrect=CAPTCHA eşleşmedi.
@@ -611,17 +594,14 @@ username_has_not_been_changed=Kullanıcı adı değişmedi
repo_name_been_taken=Depo adı zaten kullanılıyor.
repository_force_private=Gizliyi Zorla devrede: gizli depolar herkese açık yapılamaz.
repository_files_already_exist=Bu depo için dosyalar zaten var. Sistem yöneticisine başvurun.
-repository_files_already_exist.adopt=Bu depo için dosyalar zaten var ve yalnızca Kabul Edilebilir.
repository_files_already_exist.delete=Bu depo için dosyalar zaten var. Onları silmelisiniz.
repository_files_already_exist.adopt_or_delete=Bu depo için dosyalar zaten var. Ya kabul edin ya da silin.
visit_rate_limit=Uzaktan ziyarette oran sınırlaması ele alındı.
-2fa_auth_required=Uzaktan ziyaret için iki faktörlü kimlik doğrulaması gerekli.
org_name_been_taken=Organizasyon adı zaten kullanılıyor.
team_name_been_taken=Takım adı zaten alınmış.
team_no_units_error=En az bir depo bölümüne erişimine izin ver.
email_been_used=E-posta adresi zaten kullanılıyor.
email_invalid=E-posta adresi geçersiz.
-email_domain_is_not_allowed=Kullanıcı e-posta adresi %s alan adı EMAIL_DOMAIN_ALLOWLIST veya EMAIL_DOMAIN_BLOCKLIST ile çelişiyor. Lütfen işleminizin beklendiğinden emin olun.
openid_been_used=OpenID adresi "%s" zaten kullanılıyor.
username_password_incorrect=Kullanıcı adı veya parola hatalı.
password_complexity=Parola, karmaşıklık gereksinimlerini karşılamıyor:
@@ -646,14 +626,8 @@ invalid_ssh_key=SSH anahtarınız doğrulanamıyor: %s
invalid_gpg_key=GPG anahtarınız doğrulanamıyor: %s
invalid_ssh_principal=Geçersiz sorumlu: %s
must_use_public_key=Sağladığınız anahtar bir özel anahtardır. Lütfen özel anahtarınızı herhangi bir yere yüklemeyin. Onun yerine açık anahtarınızı kullanın.
-unable_verify_ssh_key=SSH anahtarı doğrulanamıyor, hatalar için dikkatle inceleyin.
auth_failed=Kimlik doğrulaması başarısız oldu: %v
-still_own_repo=Hesabınız bir veya daha fazla depoya sahip, önce depoları silin veya aktarın.
-still_has_org=Hesabınız bir veya daha fazla organizasyonun üyesi, önce onlardan ayrılın.
-still_own_packages=Hesabınız bir veya daha fazla pakete sahip, önce onları silin.
-org_still_own_repo=Bu organizasyon hala bir veya daha fazla depoya sahip, önce depoları silin veya aktarın.
-org_still_own_packages=Bu organizasyon hala bir veya daha fazla pakete sahip, önce onları silin.
target_branch_not_exist=Hedef dal mevcut değil.
target_ref_not_exist=Hedef referans mevcut değil %s
@@ -684,11 +658,9 @@ settings=Kullanıcı Ayarları
form.name_reserved=`"%s" kullanıcı adı rezerve edilmiş.`
form.name_pattern_not_allowed=Kullanıcı adında "%s" deseni kullanılamaz.
-form.name_chars_not_allowed=`"%s" kullanıcı adı geçersiz karakterler içeriyor.`
block.block=Engelle
block.block.user=Kullanıcıyı engelle
-block.block.org=Kullanıcıyı organizasyonda engelle
block.block.failure=Kullanıcı engellenemedi: %s
block.unblock=Engeli kaldır
block.unblock.failure=Kullanıcının engeli kaldırılamadı: %s
@@ -701,7 +673,6 @@ block.info_3=kullanıcı adınızdan @bahsederek size bildirim göndermek
block.info_4=kendi depolarına sizi katkıcı olarak davet etmek
block.info_5=depolara yıldız koymak, çatallamak veya izlemek
block.info_6=konu veya değişiklik isteği açmak ve yorum eklemek
-block.info_7=konularda veya değişiklik isteklerinde yorumlarınıza tepki vermek
block.user_to_block=Engellenecek kullanıcı
block.note=Not
block.note.title=İsteğe bağlı not:
@@ -732,7 +703,6 @@ webauthn=İki-Aşamalı Kimlik Doğrulama (Güvenlik Anahtarları)
public_profile=Herkese Açık Profil
biography_placeholder=Bize kendiniz hakkında birşeyler söyleyin! (Markdown kullanabilirsiniz)
location_placeholder=Yaklaşık konumunuzu başkalarıyla paylaşın
-profile_desc=Profilinizin başkalarına nasıl gösterildiğini yönetin. Ana e-posta adresiniz bildirimler, parola kurtarma ve web tabanlı Git işlemleri için kullanılacaktır.
password_username_disabled=Yerel olmayan kullanıcılara kullanıcı adlarını değiştirme izni verilmemiştir. Daha fazla bilgi edinmek için lütfen site yöneticisi ile iletişime geçiniz.
password_full_name_disabled=Tam adınızı değiştirme izniniz yoktur. Daha fazla bilgi edinmek için lütfen site yöneticisi ile iletişime geçiniz.
full_name=Ad Soyad
@@ -752,7 +722,6 @@ cancel=İptal
language=Dil
ui=Tema
hidden_comment_types=Gizli yorum türleri
-hidden_comment_types_description=Burada işaretlenen yorum türleri konu sayfalarında görüntülenmeyecektir. Örneğin "Etiket" seçildiğinde tüm "{user}, {label} ekledi/çıkardı" yorumları kalkacaktır.
hidden_comment_types.ref_tooltip=Bu konuya başka konu/işlem tarafından değinilen yorumlar…
hidden_comment_types.issue_ref_tooltip=Kullanıcının konuyla ilişkili dalı/etiketi değiştirdiği yorumlar
comment_type_group_reference=Referans
@@ -800,18 +769,14 @@ manage_themes=Varsayılan temayı seç
manage_openid=OpenID Adreslerini Yönet
email_desc=Ana e-posta adresiniz bildirimler, parola kurtarma ve gizlenmemişse eğer web tabanlı Git işlemleri için kullanılacaktır.
theme_desc=Bu, sitedeki varsayılan temanız olacak.
-theme_colorblindness_help=Renk Körlüğü için Tema Desteği
-theme_colorblindness_prompt=Gitea temel renk körlüğü desteği olan, yalnızca az sayıda rengin tanımlı olduğu, sadece birkaç temaya sahip. Çalışmalar sürüyor. Tema CSS dosyalarında daha çok renk tanımlanmasıyla daha fazla iyileştirme yapılabilir.
primary=Birincil
activated=Aktifleştirildi
requires_activation=Etkinleştirme gerekiyor
primary_email=Birincil Yap
activate_email=Etkinleştirme Gönder
activations_pending=Bekleyen Etkinleştirmeler
-can_not_add_email_activations_pending=Bekleyen etkinleştirme var, yeni bir e-posta adresi eklemek istiyorsanız birkaç dakika içinde tekrar deneyin.
delete_email=Kaldır
email_deletion=E-posta Adresini Kaldır
-email_deletion_desc=E-posta adresi ve ilgili bilgiler hesabınızdan kaldırılacak. Bu e-posta adresi tarafından yapılan işlemeler değişmeden kalacaktır. Devam edilsin mi?
email_deletion_success=E-posta adresi kaldırıldı.
theme_update_success=Temanız güncellendi.
theme_update_error=Seçilen tema mevcut değil.
@@ -854,7 +819,6 @@ gpg_key_matched_identities_long=Bu anahtara gömülü kimlikler bu kullanıcı i
gpg_key_verified=Doğrulanmış Anahtar
gpg_key_verified_long=Bu anahtar doğrulandı ve etkinleştirilmiş herhangi bir e-posta adresi veya eşleşen herhangi bir kimlik ile uyuşan işlemeleri doğrulamaya hazır.
gpg_key_verify=Doğrula
-gpg_invalid_token_signature=Verilen GPG anahtarı, imza ve anahtar uyuşmuyor veya anahtar çok eski.
gpg_token_required=Aşağıdaki anahtar için bir imza sağlamalısınız
gpg_token=Anahtar
gpg_token_help=Şunu kullanarak bir imza oluşturabilirsiniz:
@@ -864,7 +828,6 @@ verify_gpg_key_success=GPG anahtarı "%s" doğrulandı.
ssh_key_verified=Doğrulanmış Anahtar
ssh_key_verified_long=Bu anahtar bir belirteç ile doğrulandı ve bu kullanıcı için etkinleştirilmiş herhangi bir e-posta adresi ile uyuşan işlemeleri doğrulamak için kullanılabilir.
ssh_key_verify=Doğrula
-ssh_invalid_token_signature=Verilen SSH anahtarı, imza veya erişim anahtarı uyuşmuyor veya erişim anahtarı çok eski.
ssh_token_required=Aşağıdaki erişim anahtarı için bir imza sağlamalısınız
ssh_token=Erişim Anahtarı
ssh_token_help=Şunu kullanarak bir imza oluşturabilirsiniz:
@@ -885,7 +848,6 @@ gpg_key_deletion=GPG Anahtarını Sil
ssh_principal_deletion=SSH Sertifika Sorumlusunu Kaldır
ssh_key_deletion_desc=Bir SSH anahtarını kaldırmak, hesabınıza erişimi iptal eder. Devam edilsin mi?
gpg_key_deletion_desc=Bir GPG anahtarını kaldırmak, onun tarafından imzalanan işlemelerin doğrulamasını iptal eder. Devam edilsin mi?
-ssh_principal_deletion_desc=Bir SSH Sertifika Sorumlusunun kaldırılması, hesabınıza erişimini iptal eder. Devam edilsin mi?
ssh_key_deletion_success=SSH anahtarı silindi.
gpg_key_deletion_success=GPG anahtarı silindi.
ssh_principal_deletion_success=Sorumlu kaldırıldı.
@@ -947,7 +909,6 @@ create_oauth2_application_button=Uygulama Oluştur
create_oauth2_application_success=Yeni bir OAuth2 uygulamasını başarıyla oluşturdunuz.
update_oauth2_application_success=OAuth2 uygulamasını başarıyla güncellediniz.
oauth2_application_name=Uygulama Adı
-oauth2_confidential_client=Güvenli İstemci. Web uygulamaları gibi sırları güvende tutan uygulamalar için bunu seçin. Masaüstü ve mobil uygulamaları da içeren doğal uygulamalar için seçmeyin.
oauth2_skip_secondary_authorization=Herkese açık istemcilerin yetkilendirilmesini bir kere erişim izni verdikten sonra atla. Bu bir güvenlik riski oluşturabilir.
oauth2_redirect_uris=Yönlendirme URI'leri. Lütfen her bir URI'yi yeni bir satıra yazın.
save_application=Kaydet
@@ -962,10 +923,8 @@ oauth2_application_remove_description=Bir OAuth2 uygulamasının kaldırılması
oauth2_application_locked=Gitea kimi OAuth2 uygulamalarının başlangıçta ön kaydını, yapılandırmada etkinleştirilmişse yapabilir. Beklenmeyen davranışı önlemek için bunlar ne düzenlenmeli ne de kaldırılmalı. Daha fazla bilgi için OAuth2 belgesine bakın.
authorized_oauth2_applications=Yetkili OAuth2 Uygulamaları
-authorized_oauth2_applications_description=Kişisel Gitea hesabınıza bu üçüncü parti uygulamalara erişim izni verdiniz. Lütfen artık ihtiyaç duyulmayan uygulamalara erişimi iptal edin.
revoke_key=İptal Et
revoke_oauth2_grant=Erişimi İptal Et
-revoke_oauth2_grant_description=Bu üçüncü taraf uygulamasına erişimin iptal edilmesi bu uygulamanın verilerinize erişmesini önleyecektir. Emin misiniz?
revoke_oauth2_grant_success=Erişim başarıyla kaldırıldı.
twofa_desc=İki aşamalı kimlik doğrulama, hesabınızın güvenliğini artırır.
@@ -975,7 +934,6 @@ twofa_not_enrolled=Hesabınız şu anda iki faktörlü kimlik doğrulaması içi
twofa_disable=İki Aşamalı Doğrulamayı Devre Dışı Bırak
twofa_scratch_token_regenerate=Geçici Kodu Yeniden Üret
twofa_scratch_token_regenerated=Geçici kodunuz şimdi %s. Güvenli bir yerde saklayın, tekrar gösterilmeyecektir.
-twofa_enroll=İki Faktörlü Kimlik Doğrulamaya Kaydolun
twofa_disable_note=Gerekirse iki faktörlü kimlik doğrulamayı devre dışı bırakabilirsiniz.
twofa_disable_desc=İki faktörlü kimlik doğrulamayı devre dışı bırakmak hesabınızı daha az güvenli hale getirir. Devam edilsin mi?
regenerate_scratch_token_desc=Geçici kodunuzu kaybettiyseniz veya oturum açmak için kullandıysanız, buradan sıfırlayabilirsiniz.
@@ -984,18 +942,18 @@ scan_this_image=Kim doğrulama uygulamanızla bu görüntüyü tarayın:
or_enter_secret=Veya gizli şeyi girin: %s
then_enter_passcode=Ve uygulamada gösterilen şifreyi girin:
passcode_invalid=Şifre geçersiz. Tekrar deneyin.
+twofa_enrolled=Hesabınız başarıyla kaydedildi. Tek kullanımlık geçici kodunuz (%s) tekrar gösterilmeyeceği için güvenilir bir yerde saklayın.
twofa_failed_get_secret=Gizlilik elde edilemedi.
+webauthn_desc=Güvenlik anahtarları, şifreleme anahtarlarını içeren donanım aygıtlarıdır. İki aşamalı kimlik doğrulama için kullanılabilirler. Güvenlik anahtarları WebAuthn Authenticator standardını desteklemelidir.
webauthn_register_key=Güvenlik Anahtarı Ekle
webauthn_nickname=Takma Ad
webauthn_delete_key=Güvenlik Anahtarını Kaldır
-webauthn_delete_key_desc=Bir güvenlik anahtarını kaldırırsanız, onunla artık giriş yapamazsınız. Devam edilsin mi?
webauthn_key_loss_warning=Güvenlik anahtarlarınızı kaybederseniz, hesabınıza erişimi kaybedersiniz.
webauthn_alternative_tip=Ek bir kimlik doğrulama yöntemi ayarlamak isteyebilirsiniz.
manage_account_links=Bağlı Hesapları Yönet
manage_account_links_desc=Bu harici hesaplar Gitea hesabınızla bağlantılı.
-account_links_not_available=Şu anda Gitea hesabınıza bağlı harici bir hesap yok.
link_account=Hesap Bağla
remove_account_link=Bağlantılı Hesabı Kaldır
remove_account_link_desc=Bağlantılı bir hesabı kaldırmak, onunla Gitea hesabınıza erişimi iptal edecektir. Devam edilsin mi?
@@ -1032,8 +990,7 @@ new_repo_helper=Bir depo, sürüm geçmişi dahil tüm proje dosyalarını içer
owner=Sahibi
owner_helper=Bazı organizasyonlar, en çok depo sayısı sınırı nedeniyle açılır menüde görünmeyebilir.
repo_name=Depo İsmi
-repo_name_profile_public_hint=.profile herkese açık organizasyonunuzun profiline herkesin görüntüleyebileceği bir README.md dosyası eklemek için kullanabileceğiniz özel bir depodur. Başlamak için herkese açık olduğundan ve profile dizininde README ile başladığınızdan emin olun.
-repo_name_profile_private_hint=.profile-private organizasyonunuzun üye profiline sadece organizasyon üyelerinin görüntüleyebileceği bir README.md eklemek için kullanabileceğiniz özel bir depodur. Başlamak için özel olduğundan ve profil dizininde README ile başladığınızdan emin olun.
+repo_name_helper=İyi depo isimleri kısa, akılda kalıcı ve benzersiz anahtar kelimeler kullanır. “.profile” veya ‘.profile-private’ adlı bir depo, kullanıcı/kuruluş profili için bir README.md eklemek için kullanılabilir.
repo_size=Depo Boyutu
template=Şablon
template_select=Bir şablon seçin.
@@ -1054,7 +1011,6 @@ fork_branch=Çatala klonlanacak dal
all_branches=Tüm dallar
view_all_branches=Tüm dalları görüntüle
view_all_tags=Tüm etiketleri görüntüle
-fork_no_valid_owners=Geçerli bir sahibi olmadığı için bu depo çatallanamaz.
fork.blocked_user=Depo çatallanamıyor, depo sahibi tarafından engellenmişsiniz.
use_template=Bu şablonu kullan
open_with_editor=%s ile aç
@@ -1098,12 +1054,10 @@ mirror_sync=eşitlendi
mirror_sync_on_commit=İşlemeler gönderildiğinde senkronize et
mirror_address=URL'den Klonla
mirror_address_desc=Yetkilendirme bölümüne gerekli tüm kimlik bilgilerini girin.
-mirror_address_url_invalid=Sağlanan URL geçersiz. URL'nin tüm bileşenleri doğru olarak girilmelidir.
mirror_address_protocol_invalid=Sağlanan URL geçersiz. Yalnızca http(s):// veya git:// konumları yansı olabilir.
mirror_lfs=Büyük Dosya Depolama (LFS)
mirror_lfs_desc=LFS verisinin yansılamasını etkinleştir.
mirror_lfs_endpoint=LFS Uç Noktası
-mirror_lfs_endpoint_desc=Senkronizasyon, LFS sunucusunu belirlemek için klonlama url'sini kullanmaya çalışacak. Eğer LFS veri deposu başka yerdeyse özel bir uç nokta da belirtebilirsiniz.
mirror_last_synced=Son Senkronize Edilen
mirror_password_placeholder=(Değiştirilmedi)
mirror_password_blank_placeholder=(Ayarı kaldır)
@@ -1116,7 +1070,6 @@ stars=Yıldızlar
reactions_more=ve %d daha fazla
unit_disabled=Site yöneticisi bu depo bölümünü devre dışı bıraktı.
language_other=Diğer
-adopt_search=Kabul edilmeyen depoları aramak için kullanıcı adını girin... (tümünü bulmak için boş bırakın)
adopt_preexisting_label=Dosyaları Kabul Et
adopt_preexisting=Önceden var olan dosyaları kabul et
adopt_preexisting_content=%s konumundan depo oluştur
@@ -1158,8 +1111,6 @@ template.issue_labels=Konu Etiketleri
template.one_item=En az bir şablon öğesi seçmelisiniz
template.invalid=Bir şablon deposu seçmelisiniz
-archive.title=Bu depo arşivlendi. Dosyaları görüntüleyebilir ve klonlayabilirsiniz ama işleme gönderemez veya konu veya değişiklik isteği açamazsınız.
-archive.title_date=Bu depo %s tarihinde arşivlendi. Dosyaları görüntüleyebilir ve klonlayabilirsiniz ama işleme gönderemez veya konu veya değişiklik isteği açamazsınız.
archive.issue.nocomment=Bu depo arşivlendi. Konular bölümünde yorum yapamazsınız.
archive.pull.nocomment=Bu depo arşivlendi. Değişiklik istekleri bölümünde yorum yapamazsınız.
@@ -1176,7 +1127,6 @@ migrate_options_lfs=LFS dosyalarını taşı
migrate_options_lfs_endpoint.label=LFS Uç Noktası
migrate_options_lfs_endpoint.description=Taşıma, LFS sunucusunu belirlemek için Git uzak sunucusunu kullanmaya çalışacak. Eğer LFS veri deposu başka yerdeyse özel bir uç nokta da belirtebilirsiniz.
migrate_options_lfs_endpoint.description.local=Yerel bir sunucu yolu da destekleniyor.
-migrate_options_lfs_endpoint.placeholder=Boş bırakılırsa, uç nokta klon URL'sinden türetilecektir
migrate_items=Göç Öğeleri
migrate_items_wiki=Wiki
migrate_items_milestones=Dönüm noktaları
@@ -1188,10 +1138,8 @@ migrate_items_releases=Sürümler
migrate_repo=Depoyu Göç Ettir
migrate.clone_address=URL'den Taşı / Klonla
migrate.clone_address_desc=Varolan bir deponun HTTP(S) veya Git 'klonlama' URL'si
-migrate.github_token_desc=GitHub API hız sınırı nedeniyle göçü hızlandırmak için buraya virgülle ayrılmış bir veya daha fazla erişm anahtarı koyabilirsiniz. UYARI: Bu özelliğin kötüye kullanılması, hizmet sağlayıcının politikasını ihlal edebilir ve hesabın engellenmesine yol açabilir.
migrate.clone_local_path=veya bir yerel sunucu yolu
migrate.permission_denied=Yerel depoları içeri aktarma izniniz yok.
-migrate.permission_denied_blocked=İzin verilmeyen sunuculardan içe aktaramazsınız, lütfen yöneticiden ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS ayarlarını kontrol etmesini isteyin.
migrate.invalid_local_path=Yerel yol geçersiz. Mevcut değil veya bir dizin değil.
migrate.invalid_lfs_endpoint=LFS Uç noktası geçerli değil.
migrate.failed=Göç başarısız: %v
@@ -1199,7 +1147,6 @@ migrate.migrate_items_options=Ek öğeleri taşımak için Erişim Kodu gereklid
migrated_from=%[2]s konumundan göç edildi
migrated_from_fake=%[1]s Konumundan Göç Edildi
migrate.migrate=%s Konumundan Göç Et
-migrate.migrating=%s konumundan taşınıyor ...
migrate.migrating_failed=%s konumundan taşıma başarısız oldu.
migrate.migrating_failed.error=Göç yapılamadı: %s
migrate.migrating_failed_no_addr=Göç başarısız oldu.
@@ -1211,6 +1158,7 @@ migrate.gogs.description=Notabug.org veya diğer Gogs sunucularından veri aktar
migrate.onedev.description=Code.onedev.io ve diğer OneDev sunucularından veri aktar.
migrate.codebase.description=Codebasehq.com sitesinden veri aktar.
migrate.gitbucket.description=GitBucket sunucularından veri aktar.
+migrate.codecommit.description=AWS CodeCommit'ten veri aktar.
migrate.codecommit.aws_access_key_id=AWS Erişim Anahtarı Kimliği
migrate.codecommit.aws_secret_access_key=AWS Gizli Erişim Anahtarı
migrate.codecommit.https_git_credentials_username=HTTPS Git Kimliği Kullanıcı Adı
@@ -1224,6 +1172,7 @@ migrate.migrating_issues=Konuları Taşıma
migrate.migrating_pulls=Değişiklik İsteklerini Taşıma
migrate.cancel_migrating_title=Göçü İptal Et
migrate.cancel_migrating_confirm=Bu göçü iptal etmek istiyor musunuz?
+migration_status=Aktarma durumu
mirror_from=şunun yansıması
forked_from=şundan çatallanmış
@@ -1246,9 +1195,7 @@ clone_this_repo=Bu depoyu klonla
cite_this_repo=Bu depoya atıf ver
create_new_repo_command=Komut satırında yeni bir depo oluşturuluyor
push_exist_repo=Komut satırından mevcut bir depo itiliyor
-empty_message=Bu depoda herhangi bir içerik yok.
broken_message=Bu deponun altındaki Git verisi okunamıyor. Bu sunucunun yöneticisiyle bağlantıya geçin veya bu depoyu silin.
-no_branch=Bu deponun hiç bir dalı yok.
code=Kod
code.desc=Kaynak koda, dosyalara, işlemelere ve dallara eriş.
@@ -1265,7 +1212,6 @@ projects=Projeler
packages=Paketler
actions=İşlemler
labels=Etiketler
-org_labels_desc=Bu organizasyon altında tüm depolarla kullanılabilen organizasyon düzeyinde etiketler
org_labels_desc_manage=yönet
milestone=Dönüm noktası
@@ -1293,6 +1239,7 @@ ambiguous_runes_header=`Bu dosya muğlak Evrensel Kodlu karakter içeriyor`
ambiguous_runes_description=`Bu dosya, başka karakterlerle karıştırılabilecek evrensel kodlu karakter içeriyor. Eğer bunu kasıtlı olarak yaptıysanız bu uyarıyı yok sayabilirsiniz. Gizli karakterleri göstermek için Kaçış Karakterli düğmesine tıklayın.`
invisible_runes_line=`Bu satırda görünmez evrensel kodlu karakter var`
ambiguous_runes_line=`Bu satırda muğlak evrensel kodlu karakter var`
+ambiguous_character=`%[1]c [U+%04[1]X], %[2]c [U+%04[2]X] ile karıştırılabilir`
escape_control_characters=Kaçış Karakterli
unescape_control_characters=Kaçış Karaktersiz
@@ -1325,7 +1272,9 @@ editor.upload_file=Dosya Yükle
editor.edit_file=Dosyayı Düzenle
editor.preview_changes=Değişiklikleri Önizle
editor.cannot_edit_lfs_files=LFS dosyaları web arayüzünde düzenlenemez.
+editor.cannot_edit_too_large_file=Bu dosya düzenlenmek için çok büyük.
editor.cannot_edit_non_text_files=Bu tür dosyalar web arayüzünden düzenlenemez.
+editor.file_not_editable_hint=Ama yine de ismini değiştirebilir veya taşıyabilirsiniz.
editor.edit_this_file=Dosyayı Düzenle
editor.this_file_locked=Dosya kilitlendi
editor.must_be_on_a_branch=Bu dosyada değişiklik yapmak veya önermek için bir dalda olmalısınız.
@@ -1345,7 +1294,7 @@ editor.update=%s Güncelle
editor.delete=%s Sil
editor.patch=Yama Uygula
editor.patching=Yamalanıyor:
-editor.fail_to_apply_patch=`"%s" yaması uygulanamıyor`
+editor.fail_to_apply_patch=Yama uygulanamıyor
editor.new_patch=Yeni Yama
editor.commit_message_desc=İsteğe bağlı uzun bir açıklama ekleyin…
editor.signoff_desc=İşleme günlüğü mesajının sonuna işleyen tarafından imzalanan bir fragman ekleyin.
@@ -1358,24 +1307,17 @@ editor.new_branch_name_desc=Yeni dal ismi…
editor.cancel=İptal
editor.filename_cannot_be_empty=Dosya adı boş olamaz.
editor.filename_is_invalid=Dosya adı geçersiz: "%s".
-editor.commit_email=İşleme e-postası
-editor.invalid_commit_email=İşleme e-postası hatalı.
editor.branch_does_not_exist=Bu depoda "%s" dalı yok.
editor.branch_already_exists=Bu depoda "%s" dalı zaten var.
editor.directory_is_a_file=Dizin adı "%s" zaten bu depoda bir dosya adı olarak kullanılmaktadır.
-editor.file_is_a_symlink=`"%s" sembolik bir bağlantıdır. Sembolik bağlantılar web düzenleyicisinde düzenlenemez`
editor.filename_is_a_directory=Dosya adı "%s" zaten bu depoda bir dizin adı olarak kullanılmaktadır.
-editor.file_editing_no_longer_exists=Düzenlenmekte olan "%s" dosyası artık bu depoda yer almıyor.
-editor.file_deleting_no_longer_exists=Silinen "%s" dosyası artık bu depoda yer almıyor.
+editor.file_modifying_no_longer_exists=Değiştirilmekte olan "%s" dosyası artık bu depoda yer almıyor.
editor.file_changed_while_editing=Düzenlemeye başladığınızdan beri dosya içeriği değişti. Görmek için burayı tıklayın veya üzerine yazmak için değişiklikleri yine de işleyin .
editor.file_already_exists=Bu depoda "%s" isimli bir dosya zaten var.
-editor.commit_id_not_matching=İşleme ID'si, düzenlemeye başladığınız ID ile uyuşmuyor, bir yama dalına işleme yapın ve sonra birleştirin.
editor.push_out_of_date=İtme eskimiş.
editor.commit_empty_file_header=Boş bir dosya işle
editor.commit_empty_file_text=İşlemek üzere olduğunuz dosya boş. Devam edilsin mi?
editor.no_changes_to_show=Gösterilecek değişiklik yok.
-editor.fail_to_update_file=`"%s" dosyası güncellenemedi/oluşturulamadı.`
-editor.fail_to_update_file_summary=Hata Mesajı:
editor.push_rejected_no_message=Değişiklik, bir ileti olmadan sunucu tarafından reddedildi. Git Hooks'u kontrol edin.
editor.push_rejected=Değişiklik sunucu tarafından reddedildi. Lütfen Git Hooks'u kontrol edin.
editor.push_rejected_summary=Tam Red Mesajı:
@@ -1389,6 +1331,12 @@ editor.user_no_push_to_branch=Kullanıcı dala gönderemez
editor.require_signed_commit=Dal imzalı bir işleme gerektirir
editor.cherry_pick=%s şunun üzerine cımbızla:
editor.revert=%s şuna geri döndür:
+editor.failed_to_commit=Değişikliklerin işlenmesi başarısız oldu.
+editor.failed_to_commit_summary=Hata Mesajı:
+
+editor.fork_create=Değişiklikler Önermek için Depoyu Çatallayın
+editor.fork_not_editable=Bu deponun çatalını oluşturdunuz ancak çatalınız düzenlenemez durumda.
+editor.fork_failed_to_push_branch=%s dalını deponuza gönderme başarısız oldu.
commits.desc=Kaynak kodu değişiklik geçmişine göz atın.
commits.commits=İşleme
@@ -1490,7 +1438,6 @@ issues.new.clear_assignees=Atamaları Temizle
issues.new.no_assignees=Atanan Kişi Yok
issues.new.no_reviewers=Gözden geçiren yok
issues.new.blocked_user=Konu oluşturulamıyor, depo sahibi tarafından engellenmişsiniz.
-issues.edit.already_changed=Konuya yapılan değişiklikler kaydedilemiyor. İçerik başka kullanıcı tarafından değiştirilmiş gözüküyor. Diğerlerinin değişikliklerinin üzerine yazmamak için lütfen sayfayı yenileyin ve tekrar düzenlemeye çalışın
issues.edit.blocked_user=İçerik düzenlenemiyor, gönderen veya depo sahibi tarafından engellenmişsiniz.
issues.choose.get_started=Başla
issues.choose.open_external_link=Aç
@@ -1546,9 +1493,13 @@ issues.filter_project_all=Tüm projeler
issues.filter_project_none=Proje yok
issues.filter_assignee=Atanan
issues.filter_assignee_no_assignee=Hiç kimseye atanmamış
+issues.filter_assignee_any_assignee=Herhangi bir kimseye atanmış
issues.filter_poster=Yazar
+issues.filter_user_placeholder=Kullanıcıları ara
+issues.filter_user_no_select=Tüm kullanıcılar
issues.filter_type=Tür
issues.filter_type.all_issues=Tüm konular
+issues.filter_type.all_pull_requests=Tüm değişiklik istekleri
issues.filter_type.assigned_to_you=Size atanan
issues.filter_type.created_by_you=Sizin oluşturduklarınız
issues.filter_type.mentioning_you=Sizden bahsedilen
@@ -1557,7 +1508,6 @@ issues.filter_type.reviewed_by_you=Sizin tarafınızdan incelendi
issues.filter_sort=Sırala
issues.filter_sort.latest=En yeni
issues.filter_sort.oldest=En eski
-issues.filter_sort.recentupdate=Yakın zamanda güncellenmiş
issues.filter_sort.leastupdate=Yakın olmayan zamanda güncellenmiş
issues.filter_sort.mostcomment=En çok yorum yapılan
issues.filter_sort.leastcomment=En az yorum yapılan
@@ -1640,12 +1590,14 @@ issues.save=Kaydet
issues.label_title=Etiket adı
issues.label_description=Etiket açıklaması
issues.label_color=Etiket rengi
+issues.label_color_invalid=Geçersiz renk
issues.label_exclusive=Özel
issues.label_archive=Etiketi Arşivle
issues.label_archived_filter=Arşivlenmiş etiketleri göster
issues.label_archive_tooltip=Arşivlenmiş etiketler, etiket araması yapılırken varsayılan olarak önerilerin dışında tutuluyor.
issues.label_exclusive_desc=Kapsam/öğe etiketini, diğer kapsam/ etiketleriyle ayrışık olacak şekilde adlandırın.
issues.label_exclusive_warning=Çakışan kapsamlı etiketler, bir konu veya değişiklik isteği etiketleri düzenlenirken kaldırılacaktır.
+issues.label_exclusive_order_tooltip=Aynı bağlamdaki özel etiketler bu sayısal sıralamaya göre sıralanacaktır.
issues.label_count=%d etiket
issues.label_open_issues=%d açık konu
issues.label_edit=Düzenle
@@ -1676,7 +1628,6 @@ issues.lock_no_reason=konuşma kilitlendi ve katkıcılar için sınırlandırı
issues.unlock_comment=bu konuşmanın kilidini açtı %s
issues.lock_confirm=Kilitle
issues.unlock_confirm=Kilidi Aç
-issues.lock.notice_1=- Diğer kullanıcılar bu konuya yeni yorum ekleyemez.
issues.lock.notice_2=- Siz ve bu depoya erişimi olan diğer katkıcılar, başkalarının görebileceği yorumlar bırakabilir.
issues.lock.notice_3=- Her zaman bu konunun kilidini açabilirsiniz.
issues.unlock.notice_1=- Herkes bu konuda bir kez daha yorum yapabilir.
@@ -1690,12 +1641,25 @@ issues.delete.title=Bu konu silinsin mi?
issues.delete.text=Bu konuyu gerçekten silmek istiyor musunuz? (Bu işlem tüm içeriği kalıcı olarak silecektir. Arşivde tutma niyetiniz varsa silmek yerine kapatmayı düşünün)
issues.tracker=Zaman Takibi
+issues.timetracker_timer_start=Zamanlayıcıyı başlat
+issues.timetracker_timer_stop=Zamanlayıcıyı durdur
+issues.timetracker_timer_discard=Zamanlayıcıyı kaldır
+issues.timetracker_timer_manually_add=Zaman Ekle
+issues.time_estimate_set=Tahmini zaman ayarla
+issues.time_estimate_display=Tahmin: %s
+issues.change_time_estimate_at=zaman tahmini değiştirildi: %[1]s %[2]s
+issues.remove_time_estimate_at=zaman tahmini %s kaldırıldı
+issues.time_estimate_invalid=Zaman tahmini biçimi hatalı
issues.tracker_auto_close=Bu konu kapatıldığında zamanlayıcı otomatik olarak durur
issues.tracking_already_started=`başka bir konuda zaten zaman izleyici başlattınız!`
+issues.stop_tracking=Zamanlayıcıyı Durdur
+issues.stop_tracking_history=%[1]s %[2]s için çalıştı
+issues.cancel_tracking=Yoksay
issues.cancel_tracking_history=`%s zaman takibini iptal etti`
issues.del_time=Bu zaman kaydını sil
issues.del_time_history=`%s harcanan zaman silindi`
+issues.add_time_manually=El ile Zaman Ekle
issues.add_time_hours=Saat
issues.add_time_minutes=Dakika
issues.add_time_sum_to_small=Zaman girilmedi.
@@ -1714,7 +1678,6 @@ issues.due_date_form=yyyy-aa-gg
issues.due_date_form_add=Bitiş tarihi ekle
issues.due_date_form_edit=Düzenle
issues.due_date_form_remove=Kaldır
-issues.due_date_not_writer=Bir konunun bitiş tarihini güncellemek için bu depoda yazma iznine ihtiyacınız var.
issues.due_date_not_set=Bitiş tarihi atanmadı.
issues.due_date_added=bitiş tarihini %s olarak %s ekledi
issues.due_date_modified=bitiş tarihini %[2]s iken %[1]s olarak %[3]s değiştirdi
@@ -1737,9 +1700,7 @@ issues.dependency.pr_closing_blockedby=Bu değişiklik isteğinin kapatılması
issues.dependency.issue_closing_blockedby=Bu konunun kapatılması aşağıdaki konular tarafından engelleniyor
issues.dependency.issue_close_blocks=Bu konu aşağıdaki konuların kapatılmasını engelliyor
issues.dependency.pr_close_blocks=Bu değişiklik isteği aşağıdaki sorunların kapatılmasını engelliyor
-issues.dependency.issue_close_blocked=Kapatmadan önce bu konuyu engelleyen tüm konuları kapatmanız gerekir.
issues.dependency.issue_batch_close_blocked=Seçtiğiniz konular topluca kapatılamıyor, çünkü #%d konusunun açık bağımlılıkları var
-issues.dependency.pr_close_blocked=Birleştirme işleminden önce, bu değişiklik isteğini engelleyen tüm konuları kapatmanız gerekir.
issues.dependency.blocks_short=Engeller
issues.dependency.blocked_by_short=Bağımlılıklar
issues.dependency.remove_header=Bağımlılığı Kaldır
@@ -1750,12 +1711,11 @@ issues.dependency.add_error_same_issue=Bir konuyu kendine bağımlı yapamazsın
issues.dependency.add_error_dep_issue_not_exist=Bağımlı konu mevcut değil.
issues.dependency.add_error_dep_not_exist=Bağımlılık mevcut değil.
issues.dependency.add_error_dep_exists=Bağımlılık zaten var.
-issues.dependency.add_error_cannot_create_circular=Birbirini engelleyen iki konu arasında bağımlılık oluşturamazsınız.
issues.dependency.add_error_dep_not_same_repo=Her iki konu da aynı depoda olmalıdır.
issues.review.self.approval=Kendi değişiklik isteğinizi onaylayamazsınız.
issues.review.self.rejection=Kendi değişiklik isteğinizde değişiklik isteyemezsiniz.
issues.review.approve=%s bu değişiklikleri onayladı
-issues.review.dismissed=%s incelemesini %s reddetti
+issues.review.comment=%s incelendi
issues.review.dismissed_label=Reddedildi
issues.review.left_comment=bir yorum yaptı
issues.review.content.empty=İstenen değişiklik(ler)i belirten bir yorum bırakmanız gerekir.
@@ -1763,7 +1723,6 @@ issues.review.reject=%s değişiklik istedi
issues.review.wait=için %s inceleme isteği
issues.review.add_review_request=%s tarafından %s inceleme istedi
issues.review.remove_review_request=%s %s için inceleme isteği kaldırıldı
-issues.review.remove_review_request_self=%s incelemeyi reddetti
issues.review.pending=Beklemede
issues.review.pending.tooltip=Bu yorum başkaları tarafından görünmüyor. Bekleyen yorumlarınızı göndermek için, sayfanın üstünde "%s" -> "%s/%s/%s" seçin.
issues.review.review=Gözden Geçir
@@ -1779,8 +1738,12 @@ issues.review.hide_resolved=Çözülenleri gizle
issues.review.resolve_conversation=Konuşmayı çöz
issues.review.un_resolve_conversation=Konuşmayı çözme
issues.review.resolved_by=bu konuşmayı çözümlenmiş olarak işaretledi
-issues.review.commented=Yorum Yap
-issues.assignee.error=Beklenmeyen bir hata nedeniyle tüm atananlar eklenmedi.
+issues.review.commented=Yorum
+issues.review.official=Onaylandı
+issues.review.requested=İnceleme bekliyor
+issues.review.rejected=Değişiklik istendi
+issues.review.stale=Onaydan sonra güncellendi
+issues.review.unofficial=Sayılmamış onay
issues.reference_issue.body=Gövde
issues.content_history.deleted=silindi
issues.content_history.edited=düzenlendi
@@ -1797,7 +1760,6 @@ pulls.desc=Değişiklik isteklerini ve kod incelemelerini etkinleştir.
pulls.new=Yeni Değişiklik İsteği
pulls.new.blocked_user=Değişiklik isteği oluşturulamıyor, depo sahibi tarafından engellenmişsiniz.
pulls.new.must_collaborator=Değişiklik isteği oluşturmak için bir katkıcı olmalısınız.
-pulls.edit.already_changed=Değişiklik isteğine yapılan değişiklikler kaydedilemiyor. İçerik başka kullanıcı tarafından değiştirilmiş gözüküyor. Diğerlerinin değişikliklerinin üzerine yazmamak için lütfen sayfayı yenileyin ve tekrar düzenlemeye çalışın
pulls.view=Değişiklik İsteği Görüntüle
pulls.compare_changes=Yeni Değişiklik İsteği
pulls.allow_edits_from_maintainers=Bakımcıların düzenlemelerine izin ver
@@ -1818,11 +1780,9 @@ pulls.show_all_commits=Tüm işlemeleri göster
pulls.show_changes_since_your_last_review=Son incelemenizden sonraki değişiklikleri göster
pulls.showing_only_single_commit=Sadece %[1]s işlemesindeki değişiklikler gösteriliyor
pulls.showing_specified_commit_range=%[1]s..%[2]s arasındaki değişiklikler gösteriliyor
-pulls.select_commit_hold_shift_for_range=İşleme seç. Bir aralık seçmek için Shift'e basılı tutup tıklayın
pulls.review_only_possible_for_full_diff=İnceleme sadece tam fark görüntülemede mümkündür
pulls.filter_changes_by_commit=İşleme ile süz
pulls.nothing_to_compare=Bu dallar eşit. Değişiklik isteği oluşturmaya gerek yok.
-pulls.nothing_to_compare_have_tag=Seçili dal/etiket aynı.
pulls.nothing_to_compare_and_allow_empty_pr=Bu dallar eşittir. Bu Dİ boş olacak.
pulls.has_pull_request=`Bu dallar arasında zaten bir değişiklik isteği var: %[2]s#%[3]d `
pulls.create=Değişiklik İsteği Oluştur
@@ -1852,6 +1812,8 @@ pulls.is_empty=Bu daldaki değişiklikler zaten hedef dalda mevcut. Bu boş bir
pulls.required_status_check_failed=Bazı gerekli denetimler başarılı olmadı.
pulls.required_status_check_missing=Gerekli bazı kontroller eksik.
pulls.required_status_check_administrator=Yönetici olarak, bu değişiklik isteğini yine de birleştirebilirsiniz.
+pulls.blocked_by_approvals=Bu değişiklik isteğinin henüz yeterli onayı yok. %d onay var, %d onay gerekiyor.
+pulls.blocked_by_approvals_whitelisted=Bu değişiklik isteği henüz yeterince onaya sahip değil. İzinli kullanıcılar veya takımlar %d/%d onay verdi.
pulls.blocked_by_rejection=Bu değişiklik isteğinde resmi bir gözden geçiren tarafından istenen değişiklikler var.
pulls.blocked_by_official_review_requests=Bu değişiklik isteğinde resmi inceleme istekleri var.
pulls.blocked_by_outdated_branch=Bu değişiklik isteği eskidiği için engellendi.
@@ -1868,16 +1830,12 @@ pulls.reject_count_1=%d değişiklik isteği
pulls.reject_count_n=%d değişiklik isteği
pulls.waiting_count_1=%d bekleyen inceleme
pulls.waiting_count_n=%d bekleyen inceleme
-pulls.wrong_commit_id=işleme kimliği, hedef daldaki bir işleme kimliği olmalıdır
pulls.no_merge_desc=Tüm depo birleştirme seçenekleri devre dışı bırakıldığından, bu değişiklik isteği birleştirilemez.
pulls.no_merge_helper=Depo ayarlarındaki birleştirme seçeneklerini etkinleştirin veya değişiklik isteğini el ile birleştirin.
pulls.no_merge_wip=Bu değişiklik isteği birleştirilemez çünkü devam eden bir çalışma olarak işaretlendi.
-pulls.no_merge_not_ready=Bu değişiklik isteği birleştirilmeye hazır değil, inceleme durumunu ve durum kontrollerini kontrol edin.
pulls.no_merge_access=Bu değişiklik isteğini birleştirme yetkiniz yok.
pulls.merge_pull_request=Birleştirme işlemi oluştur
-pulls.rebase_merge_pull_request=Yeniden yapılandır ve ileri sar
-pulls.rebase_merge_commit_pull_request=Yeniden yapılandır ve birleştirme işlemi oluştur
pulls.squash_merge_pull_request=Ezme işlemi oluştur
pulls.fast_forward_only_merge_pull_request=Sadece ileri sarma
pulls.merge_manually=Elle birleştirildi
@@ -1885,14 +1843,9 @@ pulls.merge_commit_id=Birleştirme işlemesi kimliği
pulls.require_signed_wont_sign=Dal imzalı işlemeler gerektiriyor, ancak bu birleştirme imzalanmayacak
pulls.invalid_merge_option=Bu değişiklik isteği için bu birleştirme seçeneğini kullanamazsınız.
-pulls.merge_conflict=Birleştirme Başarısız Oldu: Birleştirme sırasında bir çakışma oldu. İpucu: Farklı bir strateji deneyin
pulls.merge_conflict_summary=Hata Mesajı
-pulls.rebase_conflict=Birleştirme Başarısız: Yeniden yapılandırma işlemesi sırasında bir çakışma oldu: %[1]s. İpucu: Farklı bir strateji deneyin
pulls.rebase_conflict_summary=Hata Mesajı
-pulls.unrelated_histories=Birleştirme Başarısız: Birleştirme başlığı ve tabanı ortak bir geçmişi paylaşmıyor. İpucu: Farklı bir strateji deneyin
-pulls.merge_out_of_date=Birleştirme Başarısız: Birleştirme oluşturulurken, taban güncellendi. İpucu: Tekrar deneyin.
-pulls.head_out_of_date=Birleştirme Başarısız: Birleştirme oluşturulurken, ana güncellendi. İpucu: Tekrar deneyin.
-pulls.has_merged=Başarısız: Değişiklik isteği birleştirildi, yeniden birleştiremez veya hedef dalı değiştiremezsiniz.
+pulls.push_rejected=Gönderme Başarısız Oldu: Gönderme reddedildi. Bu depo için Git İstemcilerini inceleyin.
pulls.push_rejected_summary=Tam Red Mesajı
pulls.open_unmerged_pull_exists=`Aynı özelliklere sahip bekleyen bir değişiklik isteği (#%d) olduğundan yeniden açma işlemini gerçekleştiremezsiniz.`
pulls.status_checking=Bazı denetlemeler beklemede
@@ -1917,7 +1870,6 @@ pulls.cmd_instruction_checkout_desc=Proje deponuzdan yeni bir dalı çekin ve de
pulls.cmd_instruction_merge_title=Birleştir
pulls.cmd_instruction_merge_desc=Değişiklikleri birleştirin ve Gitea'da güncelleyin.
pulls.clear_merge_message=Birleştirme iletilerini temizle
-pulls.clear_merge_message_hint=Birleştirme iletisini temizlemek sadece işleme ileti içeriğini kaldırır ama üretilmiş "Co-Authored-By …" gibi git fragmanlarını korur.
pulls.auto_merge_button_when_succeed=(Denetlemeler başarılı olduğunda)
pulls.auto_merge_when_succeed=Tüm denetlemeler başarılı olduğundan otomatik olarak birleştir
@@ -1971,12 +1923,10 @@ milestones.filter_sort.most_issues=En çok konu
milestones.filter_sort.least_issues=En az konu
signing.will_sign=Bu işleme "%s" anahtarıyla imzalanacak.
-signing.wont_sign.error=İşlemenin imzalanıp imzalanamayacağını kontrol ederken bir hata oluştu.
signing.wont_sign.nokey=Bu işlemeyi imzalamak için anahtar yok.
signing.wont_sign.never=İşlemeler asla imzalanmaz.
signing.wont_sign.always=İşlemeler her zaman imzalanır.
signing.wont_sign.pubkey=Hesabınızla ilişkilendirilmiş bir ortak anahtarınız olmadığı için işleme imzalanmayacak.
-signing.wont_sign.twofa=İşlemelerin imzalanması için iki aşamalı kimlik doğrulamayı etkinleştirmelisiniz.
signing.wont_sign.parentsigned=Üst işleme imzalanmadığı için bu işleme imzalanmayacak.
signing.wont_sign.basesigned=Temel işleme imzalanmadığı için birleştirme imzalanmayacak.
signing.wont_sign.headsigned=Ana işleme imzalanmadığı için birleştirme imzalanmayacak.
@@ -2062,7 +2012,6 @@ activity.title.releases_1=%d Sürüm
activity.title.releases_n=%d Sürüm
activity.title.releases_published_by=%s %s tarafından yayınlandı
activity.published_release_label=Yayınlandı
-activity.no_git_activity=Bu dönemde herhangi bir işleme yapılmamıştır.
activity.git_stats_exclude_merges=Birleştirmeler hariç,
activity.git_stats_author_1=%d yazar
activity.git_stats_author_n=%d yazar
@@ -2090,7 +2039,6 @@ contributors.contribution_type.additions=Eklemeler
contributors.contribution_type.deletions=Silmeler
settings=Ayarlar
-settings.desc=Ayarlar, deponun ayarlarını yönetebileceğiniz yerdir
settings.options=Depo
settings.public_access=Herkese Açık Erişim
settings.collaboration=Katkıcılar
@@ -2108,7 +2056,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Projenizi işlem
settings.mirror_settings.docs.disabled_push_mirror.instructions=Projenizi işlemeleri, etiketleri ve dalları başka bir depodan otomatik olarak çekecek şekilde kurun.
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Şu an bu sadece "Yeni Göç" menüsüyle yapılabilir. Daha fazla bilgi için, lütfen şuraya danışın:
settings.mirror_settings.docs.disabled_push_mirror.info=Gönderme yansıları site yöneticiniz tarafından devre dışı bırakılmıştır.
-settings.mirror_settings.docs.no_new_mirrors=Deponuz değişiklikleri başka bir depoyla yansılıyor. Şu an başka bir yansı oluşturamayacağınızı unutmayın.
settings.mirror_settings.docs.can_still_use=Her ne kadar mevcut yansıları değiştiremiyor veya yeni yansı oluşturamıyor olsanız da, hala mevcut yansıyı kullanabilirsiniz.
settings.mirror_settings.docs.pull_mirror_instructions=Çekme yansıyı kurmak için, lütfen şuraya danışın:
settings.mirror_settings.docs.more_information_if_disabled=İtme ve çekme yansıları hakkında daha fazla bilgiye şuradan ulaşabilirsiniz:
@@ -2182,7 +2129,6 @@ settings.admin_indexer_commit_sha=Son Dizinlenen SHA
settings.admin_indexer_unindexed=Dizinlenmemiş
settings.reindex_button=Yeniden Dizinleme Kuyruğuna Ekle
settings.reindex_requested=Yeniden Dizinleme İstendi
-settings.admin_enable_close_issues_via_commit_in_any_branch=Varsayılan olmayan bir dalda yapılan bir işlemeyle konuyu kapat
settings.danger_zone=Tehlike Alanı
settings.new_owner_has_same_repo=Yeni sahibin aynı isimde başka bir deposu var. Lütfen farklı bir isim seçin.
settings.convert=Düzenli Depoya Dönüştür
@@ -2204,7 +2150,6 @@ settings.transfer_abort_invalid=Var olmayan bir depo aktarımını iptal edemezs
settings.transfer_abort_success=%s tarafına yapılan depo aktarımı başarıyla iptal edildi.
settings.transfer_desc=Bu depoyu bir kullanıcıya veya yönetici haklarına sahip olduğunuz bir organizasyona aktarın.
settings.transfer_form_title=Onaylamak için depo adını girin:
-settings.transfer_in_progress=Şu anda devam etmekte olan bir aktarım mevcut. Eğer bu depoyu başka bir kullanıcıya aktarmak istiyorsanız mevcut aktarımı iptal edin.
settings.transfer_notices_1=- Bireysel bir kullanıcıya aktarırsanız depoya erişiminizi kaybedersiniz.
settings.transfer_notices_2=- Sahip (-yardımcı) olduğunuz bir organizasyona devrederseniz, depoya erişmeye devam edersiniz.
settings.transfer_notices_3=- Depo özelse ve bireysel bir kullanıcıya aktarılmışsa, bu eylem kullanıcının en azından okuma iznine sahip olmasını sağlar (ve gerekirse izinleri değiştirir).
@@ -2218,13 +2163,9 @@ settings.trust_model.default=Varsayılan Güven Modeli
settings.trust_model.default.desc=Bu kurulum için varsayılan depo güven modelini kullanın.
settings.trust_model.collaborator=Katkıcı
settings.trust_model.collaborator.long=Katkıcı: Katkıcıların imzalarına güvenin
-settings.trust_model.collaborator.desc=Bu deponun katkıcılarının geçerli imzaları "güvenilir" olarak işaretlenecektir - (işleyici ile eşleşse de eşleşmese de). Aksi takdirde, imzanın işleyiciyle eşleşmesi durumunda geçerli imzalar "güvenilmez", eşleşmiyorsa "eşleşmemiş" olarak işaretlenir.
settings.trust_model.committer=İşleyici
-settings.trust_model.committer.long=İşleyici: İşleyicilerle eşleşen imzalara güvenin (Bu, GitHub ile eşleşir ve Gitea imzalı işlemeleri işleyen olarak Gitea'ya sahip olmaya zorlar)
-settings.trust_model.committer.desc=Geçerli imzalar yalnızca işleyiciyle eşleşiyorsa "güvenilir" olarak işaretlenir, aksi takdirde "eşleşmemiş" olarak işaretlenir. Bu, Gitea'yı işlemede Ortak Yazan: ve Ortak İşlenen: fragmanı olarak işaretlenen gerçek kaydediciyle imzalanan işlemelerde işleyici olmayı zorlayacaktır. Varsayılan Gitea anahtarı, veritabanındaki bir Kullanıcıyla eşleşmelidir.
settings.trust_model.collaboratorcommitter=Katkıcı+İşleyici
settings.trust_model.collaboratorcommitter.long=Katkıcı+İşleyen: İşleyenle eşleşen katkıcıların imzalarına güvenin
-settings.trust_model.collaboratorcommitter.desc=Bu deponun katkıcılarının geçerli imzaları, işleyici ile eşleşiyorlarsa "güvenilir" olarak işaretlenecektir. Aksi takdirde, imza işleyiciyle eşleşiyorsa geçerli imzalar "güvenilmez", aksi takdirde "eşleşmiyor" olarak işaretlenir. Bu, Gitea'yı işlemede Ortak Yazan: ve Ortak İşlenen: fragmanı olarak işaretlenmiş gerçek işleyici ile imzalı işlemelerde işleyici olarak işaretlenmeye zorlayacaktır. Varsayılan Gitea anahtarı, veritabanındaki bir Kullanıcıyla eşleşmelidir.
settings.wiki_delete=Wiki Verisini Sil
settings.wiki_delete_desc=Depo wiki verilerini silmek kalıcıdır ve geri alınamaz.
settings.wiki_delete_notices_1=- Bu işlem, %s için depo wiki'sini kalıcı olarak siler ve devre dışı bırakır.
@@ -2233,7 +2174,6 @@ settings.wiki_deletion_success=Depo wiki verisi silindi.
settings.delete=Bu Depoyu Sil
settings.delete_desc=Bir depoyu silmek kalıcıdır ve geri alınamaz.
settings.delete_notices_1=- Bu işlem geri ALINAMAZ .
-settings.delete_notices_2=- Bu işlem, kod, sorunlar, yorumlar, wiki verileri ve katkıcı ayarları dahil olmak üzere %s deposunu kalıcı olarak siler.
settings.delete_notices_fork_1=- Silme işleminden sonra bu deponun çatalları bağımsız hale gelecektir.
settings.deletion_success=Depo silindi.
settings.update_settings_success=Depo ayarları güncellendi.
@@ -2255,8 +2195,6 @@ settings.team_not_in_organization=Takım, depo ile aynı organizasyonda değil
settings.teams=Takımlar
settings.add_team=Takım Ekle
settings.add_team_duplicate=Takım zaten bu depoya sahip
-settings.add_team_success=Takım artık bu depoya erişebilir.
-settings.change_team_permission_tip=Takımın izni takım ayarı sayfasında ayarlanır ve depo başına değiştirilemez
settings.delete_team_tip=Bu takımın tüm depolara erişimi var ve kaldırılamıyor
settings.remove_team_success=Takımın depoya erişimi kaldırıldı.
settings.add_webhook=Web İsteği Ekle
@@ -2265,8 +2203,6 @@ settings.hooks_desc=Web istemcileri, belirli Gitea olayları tetiklendiğinde ot
settings.webhook_deletion=Web İsteğini Sil
settings.webhook_deletion_desc=Bir web isteğini kaldırmak, ayarlarını ve teslimat geçmişini siler. Devam edilsin mi?
settings.webhook_deletion_success=Web isteği silindi.
-settings.webhook.test_delivery=Test Dağıtımı
-settings.webhook.test_delivery_desc=Bu web isteğini sahte bir olayla test edin.
settings.webhook.test_delivery_desc_disabled=Bu web istemcisini sahte bir olayla denemek için etkinleştirin.
settings.webhook.request=İstekler
settings.webhook.response=Cevaplar
@@ -2313,7 +2249,6 @@ settings.event_repository=Depo
settings.event_repository_desc=Depo oluşturuldu veya silindi.
settings.event_header_issue=Konu Olayları
settings.event_issues=Konular
-settings.event_issues_desc=Konu açıldı, kapatıldı, yeniden açıldı veya düzenlendi.
settings.event_issue_assign=Konu Atandı
settings.event_issue_assign_desc=Konu atandı veya atanmadı.
settings.event_issue_label=Konu Etiketlendi
@@ -2324,7 +2259,6 @@ settings.event_issue_comment=Konu Yorumu
settings.event_issue_comment_desc=Konu yorumu eklendiğinde, düzenlendiğinde veya silindiğinde.
settings.event_header_pull_request=Değişiklik İsteği Olayları
settings.event_pull_request=İstek Çek
-settings.event_pull_request_desc=Değişiklik isteği açıldı, kapatıldı, yeniden açıldı veya düzenlendi.
settings.event_pull_request_assign=Değişiklik İsteği Atandı
settings.event_pull_request_assign_desc=Değişiklik isteği atanmış veya atanmamış.
settings.event_pull_request_label=Değişiklik İsteği Etiketlendi
@@ -2344,6 +2278,7 @@ settings.event_pull_request_merge=Değişiklik İsteği Birleştirme
settings.event_package=Paket
settings.event_package_desc=Bir depoda paket oluşturuldu veya silindi.
settings.branch_filter=Dal filtresi
+settings.branch_filter_desc=Gönderme, dal oluşturma ve dal silme olayları için glob deseni olarak belirtilen dal beyaz listesi. Boşsa veya * ise, tüm dallar için olaylar raporlanır. Sözdizimi için %[2]s belgelerine bakın. Örnekler: master, {master,release*}.
settings.authorization_header=Yetkilendirme Başlığı
settings.authorization_header_desc=Mevcutsa isteklere yetkilendirme başlığı olarak eklenecektir. Örnekler: %s.
settings.active=Etkin
@@ -2484,7 +2419,6 @@ settings.archive.tagsettings_unavailable=Depo arşivlenmişse etiket ayarları k
settings.archive.mirrors_unavailable=Depo arşivlenmişse yansılar kullanılamaz.
settings.unarchive.button=Depoyu Arşivden Çıkar
settings.unarchive.header=Bu Depoyu Arşivden Çıkar
-settings.unarchive.text=Depoyu arşivden çıkarmak, yeni sorunların ve değişiklik isteklerinin yanı sıra işleme ve itme yeteneğini de geri kazandıracaktır.
settings.unarchive.success=Depo başarıyla arşivden çıkarıldı.
settings.unarchive.error=Depoyu arşivden çıkarmaya çalışırken bir hata oluştu. Daha fazla ayrıntı için günlüğe bakın.
settings.update_avatar_success=Depo resmi güncellendi.
@@ -2502,11 +2436,9 @@ settings.lfs_invalid_locking_path=Geçersiz yol: %s
settings.lfs_invalid_lock_directory=Dizin kilitlenemiyor: %s
settings.lfs_lock_already_exists=Kilit zaten var: %s
settings.lfs_lock=Kilitle
-settings.lfs_lock_path=Kilitlenecek dosya yolu...
settings.lfs_locks_no_locks=Kilit yok
settings.lfs_lock_file_no_exist=Kilitli dosya varsayılan dalda mevcut değil
settings.lfs_force_unlock=Kilidi Açmaya Zorla
-settings.lfs_pointers.found=Bulunan %d blob işaretçi(leri) - %d ilişkili, %d ilişkilendirilmemiş (%d mağazadan eksik)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=Depoda
@@ -2678,7 +2610,6 @@ error.csv.invalid_field_count=%d satırında yanlış sayıda alan olduğundan b
error.broken_git_hook=Bu deponun Git İstemcileri bozuk gibi gözüküyor. Onarmak için lütfen belgelere bakın, daha sonra durumu yenilemek için bazı işlemeler itin.
[graphs]
-component_loading=%s yükleniyor...
component_loading_failed=%s yüklenemedi
component_loading_info=Bu biraz sürebilir…
component_failed_to_load=Beklenmedik bir hata oluştu.
@@ -2716,7 +2647,6 @@ form.create_org_not_allowed=Organizasyon oluşturmanıza izin verilmiyor.
settings=Ayarlar
settings.options=Organizasyon
settings.full_name=Tam İsim
-settings.email=İletişim E-posta
settings.website=Web Sitesi
settings.location=Lokasyon
settings.permission=İzinler
@@ -2730,15 +2660,13 @@ settings.visibility.private_shortname=Özel
settings.update_settings=Ayarları Güncelle
settings.update_setting_success=Organizasyon ayarları güncellendi.
-settings.change_orgname_prompt=Not: Organizasyon adını değiştirmek organizasyonunuzun URL'sini de değiştirecek ve eski ismi serbest bıracaktır.
-settings.change_orgname_redirect_prompt=Eski ad, talep edilene kadar yeniden yönlendirilecektir.
+
+
settings.update_avatar_success=Organizasyonun resmi güncellendi.
settings.delete=Organizasyonu Sil
settings.delete_account=Bu Organizasyonu Sil
settings.delete_prompt=Organizasyon kalıcı olarak kaldırılacaktır. Bu işlem GERİ ALINAMAZ !
settings.confirm_delete_account=Silmeyi Onaylıyorum
-settings.delete_org_title=Organizasyonu Sil
-settings.delete_org_desc=Bu organizasyon kalıcı olarak silinecektir. Devam edilsin mi?
settings.hooks_desc=Bu organizasyon altındaki tüm depolar için tetiklenecek webhook'lar ekle.
settings.labels_desc=Bu organizasyonun altındaki tüm depolar ile ilgili konularda kullanılabilecek etiketler ekleyin.
@@ -2793,7 +2721,6 @@ teams.remove_all_repos_title=Tüm takım depolarını kaldır
teams.remove_all_repos_desc=Bu, tüm depoları takımdan kaldıracaktır.
teams.add_all_repos_title=Tüm depoları ekle
teams.add_all_repos_desc=Bu, organizasyonun tüm depolarını takıma ekleyecektir.
-teams.add_nonexistent_repo=Eklemeye çalıştığınz depo mevcut değil. Lütfen önce oluşturun.
teams.add_duplicate_users=Kullanıcı zaten takımın üyesi.
teams.repos.none=Bu takım tarafından hiçbir depoya erişilemedi.
teams.members.none=Bu takımda üye yok.
@@ -2823,7 +2750,6 @@ repositories=Depolar
hooks=Web İstemcileri
integrations=Bütünleştirmeler
authentication=Yetkilendirme Kaynakları
-emails=Kullanıcı E-postaları
config=Yapılandırma
config_summary=Özet
config_settings=Ayarlar
@@ -2854,11 +2780,8 @@ dashboard.cron.cancelled=Cron: %[1]s iptal edildi: %[3]s
dashboard.cron.error=Cron Hatası: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s bitti
dashboard.delete_inactive_accounts=Etkinleştirilmemiş tüm hesapları sil
-dashboard.delete_inactive_accounts.started=Etkinleştirilmemiş tüm hesapları silme görevi başladı.
dashboard.delete_repo_archives=Tüm depoların arşivlerini (ZIP, TAR.GZ, vb.) sil
-dashboard.delete_repo_archives.started=Tüm depo arşivlerini silme görevi başladı.
dashboard.delete_missing_repos=Git dosyaları eksik olan tüm depoları sil
-dashboard.delete_missing_repos.started=Git dosyaları eksik olan tüm depoları silme görevi başladı.
dashboard.delete_generated_repository_avatars=Oluşturulan depo resimlerini sil
dashboard.sync_repo_branches=Eşzamanlama git verisinden veritabanlarına dalları kaçırdı
dashboard.sync_repo_tags=Etiketleri git verisinden veritabanına eşitle
@@ -2866,17 +2789,9 @@ dashboard.update_mirrors=Yansıları Güncelle
dashboard.repo_health_check=Tüm depoların sağlığını denetle
dashboard.check_repo_stats=Tüm depo istatistiklerini denetle
dashboard.archive_cleanup=Eski depo arşivlerini sil
-dashboard.deleted_branches_cleanup=Silinen dalları temizle
dashboard.update_migration_poster_id=Taşıma poster kimliklerini güncelle
-dashboard.git_gc_repos=Depolardaki çöpleri topla
-dashboard.resync_all_sshkeys='.ssh/authority_keys' dosyasını Gitea SSH anahtarlarıyla güncelle.
-dashboard.resync_all_sshprincipals='.ssh/authorized_principals' dosyasını Gitea SSH sorumlularıyla güncelleyin.
-dashboard.resync_all_hooks=Tüm depoların alma öncesi, güncelleme ve alma sonrası kancalarını yeniden senkronize edin.
dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depolarını yeniden başlat
dashboard.sync_external_users=Harici kullanıcı verisini senkronize et
-dashboard.cleanup_hook_task_table=Hook_task tablosunu temizleme
-dashboard.cleanup_packages=Süresi dolmuş paketleri temizleme
-dashboard.cleanup_actions=Eylemlerin süresi geçmiş günlük ve yapılarını temizle
dashboard.server_uptime=Sunucunun Ayakta Kalma Süresi
dashboard.current_goroutine=Güncel Goroutine'ler
dashboard.current_memory_usage=Güncel Bellek Kullanımı
@@ -2907,10 +2822,8 @@ dashboard.total_gc_pause=Toplam GC Durması
dashboard.last_gc_pause=Son GC Durması
dashboard.gc_times=GC Zamanları
dashboard.delete_old_actions=Veritabanından tüm eski faaliyetleri sil
-dashboard.delete_old_actions.started=Veritabanından başlatılan tüm eski faaliyetleri silin.
dashboard.update_checker=Denetleyiciyi güncelle
dashboard.delete_old_system_notices=Veritabanından tüm eski sistem bildirimlerini sil
-dashboard.gc_lfs=LFS üst nesnelerin atıklarını temizle
dashboard.stop_zombie_tasks=Zombi görevlerin durdurma eylemleri
dashboard.stop_endless_tasks=Daimi görevlerin durdurma eylemleri
dashboard.cancel_abandoned_jobs=Terkedilmiş görevlerin iptal eylemleri
@@ -2933,7 +2846,6 @@ users.2fa=2FD
users.repos=Depolar
users.created=Oluşturuldu
users.last_login=Son Oturum Açma
-users.never_login=Hiç Oturum Açılmadı
users.send_register_notify=Kullanıcı Kayıt Bildirimi Gönder
users.new_success=`"%s" kullanıcı hesabı oluşturuldu.`
users.edit=Düzenle
@@ -2960,7 +2872,6 @@ users.still_own_repo=Bu kullanıcı hala bir veya daha fazla depoya sahip. Önce
users.still_has_org=Bu kullanıcı bir organizasyonun üyesidir. Önce kullanıcıyı tüm organizasyonlardan çıkarın.
users.purge=Kullanıcıyı Temizle
users.purge_help=Kullanıcıyı ve sahip olduğu herhangi bir depoyu, organizasyonu ve paketleri zorla sil. Tüm yorumlar da silinecektir.
-users.still_own_packages=Kullanıcının bir veya daha fazla paketi var, önce bu paketleri silin.
users.deletion_success=Kullanıcı hesabı silindi.
users.reset_2fa=2FD'yi sıfırla
users.list_status_filter.menu_text=Filtre
@@ -2980,11 +2891,7 @@ users.details=Kullanıcı Ayrıntıları
emails.email_manage_panel=Kullanıcı E-posta Yönetimi
emails.primary=Birincil
emails.activated=Aktifleştirildi
-emails.filter_sort.email=E-Posta
-emails.filter_sort.email_reverse=E-posta (ters)
emails.filter_sort.name=Kullanıcı Adı
-emails.filter_sort.name_reverse=Kullanıcı Adı (ters)
-emails.updated=E-posta güncellendi
emails.not_updated=İstenen e-posta adresi güncellenemedi: %v
emails.duplicate_active=Bu e-posta adresi farklı bir kullanıcı için zaten aktif.
emails.change_email_header=E-posta Özelliklerini Güncelle
@@ -2992,7 +2899,6 @@ emails.change_email_text=Bu e-posta adresini güncellemek istediğinizden emin m
emails.delete=E-postayı Sil
emails.delete_desc=Bu e-posta adresini silmek istediğinizden emin misiniz?
emails.deletion_success=E-posta adresi silindi.
-emails.delete_primary_email_error=Ana e-posta adresini silemezsiniz.
orgs.org_manage_panel=Organizasyon Yönetimi
orgs.name=İsim
@@ -3104,26 +3010,18 @@ auths.oauth2_required_claim_name_helper=Bu ismi, bu kaynağa oturum açmayı bu
auths.oauth2_required_claim_value=Gerekli Talep Değeri
auths.oauth2_required_claim_value_helper=Bu değeri, bu kaynağa oturum açmayı bu isimdeki ve değerdeki talebe sahip kullanıcıların girişiyle sınırlamak için ayarlayın
auths.oauth2_group_claim_name=Talep ismi bu kaynak için grup isimlerini sağlıyor. (İsteğe bağlı)
-auths.oauth2_admin_group=Yönetici kullanıcıları için Grup Talep değeri. (İsteğe bağlı, yukarıda talep ismine gerek duyar)
-auths.oauth2_restricted_group=Kısıtlı kullanıcılar için Grup Talep değeri. (İsteğe bağlı, yukarıda talep ismine gerek duyar)
-auths.oauth2_map_group_to_team=Talep edilen grupları Organizasyon takımlarına eşle. (İsteğe bağlıdır - yukarıdaki talep adına gerek duyar)
auths.oauth2_map_group_to_team_removal=Eğer kullanıcı ilişkili gruba ait değilse, kullanıcıları eşleşmiş takımlardan çıkarın.
auths.enable_auto_register=Otomatik Kaydolmayı Etkinleştir
auths.sspi_auto_create_users=Kullanıcıları otomatik olarak oluştur
-auths.sspi_auto_create_users_helper=SSPI kimlik doğrulama yönteminin ilk kez oturum açan kullanıcılar için otomatik olarak yeni hesaplar oluşturmasına izin ver
auths.sspi_auto_activate_users=Kullanıcıları otomatik olarak etkinleştir
auths.sspi_auto_activate_users_helper=SSPI kimlik doğrulama yönteminin yeni kullanıcıları otomatik olarak etkinleştirmesine izin ver
auths.sspi_strip_domain_names=Alan adlarını kullanıcı adlarından kaldır
-auths.sspi_strip_domain_names_helper=İşaretlenirse, etki alanı adları oturum açma adlarından kaldırılacaktır (örn. "ETKİALANI\kullanıcı" ve " kullanıcı@örnek.org "her ikisi de sadece "kullanıcı" olacak).
auths.sspi_separator_replacement=\, / ve @ yerine kullanılacak ayırıcı
-auths.sspi_separator_replacement_helper=Alt seviye oturum açma adlarının (örneğin, "ETKİALANI\kullanıcı" içindeki \) ve kullanıcı asıl adlarının (örneğin, "kullanıcı@örnek.org" daki @) ayırıcılarını değiştirmek için kullanılacak karakter.
auths.sspi_default_language=Varsayılan kullanıcı dili
-auths.sspi_default_language_helper=SSPI kimlik doğrulama yöntemi tarafından otomatik olarak oluşturulan kullanıcılar için varsayılan dil. Dili otomatik olarak algılamayı tercih ederseniz boş bırakın.
auths.tips=İpuçları
auths.tips.oauth2.general=OAuth2 Kimlik Doğrulama
auths.tips.oauth2.general.tip=Yeni bir OAuth2 kimlik doğrulama kaydederken, geri çağırma/yönlendirme URL'si şu olmalıdır:
auths.tip.oauth2_provider=OAuth2 Sağlayıcısı
-auths.tip.nextcloud=Aşağıdaki "Ayarlar -> Güvenlik -> OAuth 2.0 istemcisi" menüsünü kullanarak örneğinize yeni bir OAuth tüketicisi kaydedin
auths.tip.openid_connect=Bitiş noktalarını belirlemek için OpenID Connect Discovery URL'sini (https://{server}/.well-known/openid-configuration) kullanın
auths.tip.mastodon=Kimlik doğrulaması yapmak istediğiniz mastodon örneği için özel bir örnek URL girin (veya varsayılan olanı kullanın)
auths.edit=Kimlik Doğrulama Kaynağı Düzenle
@@ -3224,7 +3122,6 @@ config.mailer_sendmail_path=Sendmail Yolu
config.mailer_sendmail_args=Sendmail İçin İlave Değişkenler
config.mailer_sendmail_timeout=Sendmail Zaman Aşımı
config.mailer_use_dummy=Sahte
-config.test_email_placeholder=E-posta (ör. test@example.com)
config.send_test_mail=Test E-postası Gönder
config.send_test_mail_submit=Gönder
config.test_mail_failed=`"%s" adresine deneme e-postası gönderilemedi: %v`
@@ -3309,7 +3206,6 @@ monitor.queue.numberinqueue=Kuyruktaki Sayı
monitor.queue.review_add=Çalışanları İncele / Ekle
monitor.queue.settings.title=Havuz Ayarları
monitor.queue.settings.desc=Havuzlar, çalışan kuyruğu tıkanmasına bir yanıt olarak dinamik olarak büyürler.
-monitor.queue.settings.maxnumberworkers=En fazla çalışan Sayısı
monitor.queue.settings.maxnumberworkers.placeholder=Şu anda %[1]d
monitor.queue.settings.maxnumberworkers.error=En fazla çalışan sayısı bir sayı olmalıdır
monitor.queue.settings.submit=Ayarları Güncelle
@@ -3335,10 +3231,6 @@ notices.delete_success=Sistem bildirimleri silindi.
self_check.no_problem_found=Henüz bir sorun bulunmadı.
self_check.startup_warnings=Başlangıç uyarıları:
self_check.database_collation_mismatch=Veritabanının şu harmanlamayı kullanmasını bekle: %s
-self_check.database_collation_case_insensitive=Veritabanı %s harmanlamasını kullanıyor, bu duyarsız bir harmanlamadır. Her ne kadar Gitea bununla çalışabilse de, beklendiği gibi çalışmadığı nadir durumlar ortaya çıkabilir.
-self_check.database_inconsistent_collation_columns=Veritabanı %s harmanlamasını kullanıyor, ancak bu sütunlar uyumsuz harmanlamalar kullanıyor. Bu beklenmedik sorunlar oluşturabilir.
-self_check.database_fix_mysql=MySQL/MariaDB kullanıcıları "gitea doctor convert" komutunu harmanlama sorunlarını çözmek için kullanabilir veya "ALTER ... COLLATE ..." SQL'lerini şahsen çalıştırarak sorunu çözebilirler.
-self_check.database_fix_mssql=MSSQL kullanıcıları sorunu şu an sadece "ALTER ... COLLATE ..." SQL'lerini şahsen çalıştırarak çözebilirler.
self_check.location_origin_mismatch=Mevcut URL (%[1]s) Gitea tarafından görülen URL (%[2]s) ile eşleşmiyor. Eğer bir vekil sunucu kullanıyorsanız, lütfen "Host" ve "X-Forwarded-Proto" başlıklarının doğru ayarlandığından emin olunuz.
[action]
@@ -3421,8 +3313,6 @@ error.no_committer_account=İşleyicinin e-posta adresine bağlı hesap yok
error.no_gpg_keys_found=Veri tabanında bu imza için bilinen anahtar bulunamadı
error.not_signed_commit=İmzalı bir işleme değil
error.failed_retrieval_gpg_keys=İşleyicin hesabına bağlı herhangi bir anahtar alınamadı
-error.probable_bad_signature=UYARI! Veritabanında bu kimliğe sahip bir anahtar olmasına rağmen, bu işlemeyi doğrulamaz! Bu işleme ŞÜPHELİDİR.
-error.probable_bad_default_signature=UYARI! Varsayılan anahtarın bu kimliği olmasına rağmen, bu işlemeyi doğrulamaz! Bu işleme ŞÜPHELİDİR.
[units]
unit=Birim
@@ -3460,7 +3350,6 @@ versions=Sürümler
versions.view_all=Tümünü görüntüle
dependency.id=Kimlik
dependency.version=Sürüm
-alpine.registry=Bu kütüğü, /etc/apk/repositories dosyanıza url'yi ekleyerek kurun:
alpine.registry.key=Kütüğün açık RSA anahtarını, indeks imzasını doğrulamak için /etc/apk/keys/ dizinine indirin:
alpine.registry.info=Aşağıdaki listeden $branch ve $repository seçin.
alpine.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
@@ -3471,18 +3360,13 @@ alpine.repository.architectures=Mimariler
arch.repository=Depo Bilgisi
arch.repository.repositories=Depolar
arch.repository.architectures=Mimariler
-cargo.registry=Bu kütüğü Cargo yapılandırma dosyasına (örneğin ~/.cargo/config.toml) ayarlayın:
cargo.install=Paketi Cargo kullanarak kurmak için, şu komutu çalıştırın:
-chef.registry=Bu kütüğü ~/.chef/config.rb dosyasında ayarlayın:
chef.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
-composer.registry=Bu kütüğü ~/.composer/config.json dosyasında ayarlayın:
composer.install=Paketi Composer ile kurmak için, şu komutu çalıştırın:
composer.dependencies=Bağımlılıklar
composer.dependencies.development=Geliştirme Bağımlılıkları
conan.details.repository=Depo
-conan.registry=Bu kütüğü komut satırını kullanarak kurun:
conan.install=Conan ile paket kurmak için aşağıdaki komutu çalıştırın:
-conda.registry=Bu kütüğü .condarc dosyasında bir Conda deposu olarak ayarlayın:
conda.install=Conda ile paket kurmak için aşağıdaki komutu çalıştırın:
container.details.type=Görüntü Türü
container.details.platform=Platform
@@ -3492,9 +3376,7 @@ container.layers=Görüntü Katmanları
container.labels=Etiketler
container.labels.key=Anahtar
container.labels.value=Değer
-cran.registry=Bu kütüğü Rprofile.site dosyasında ayarlayın:
cran.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
-debian.registry=Bu kütüğü komut satırını kullanarak kurun:
debian.registry.info=Aşağıdaki listeden $distribution ve $component seçin.
debian.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
debian.repository=Depo Bilgisi
@@ -3503,16 +3385,11 @@ debian.repository.components=Bileşenler
debian.repository.architectures=Mimariler
generic.download=Paketi komut satırında indirin:
go.install=Paketi komut satırını kullanarak yükleyin:
-helm.registry=Bu kütüğü komut satırını kullanarak kurun:
helm.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
-maven.registry=Bu kütüğü projenizdeki pom.xml dosyasında ayarlayın:
-maven.install=Paketi kullanmak için aşağıdaki dependencies parçasını pom.xml dosyasınıza ekleyin:
maven.install2=Komut satırında çalıştırın:
maven.download=Bağımlılığı indirmek için, komut satırında çalıştırın:
-nuget.registry=Bu kütüğü komut satırını kullanarak kurun:
nuget.install=Paketi NuGet ile kurmak için, şu komutu çalıştırın:
nuget.dependency.framework=Hedef Çerçeve
-npm.registry=Bu kütüğü projenizdeki .npmrc dosyasında ayarlayın:
npm.install=Paketi npm ile kurmak için, şu komutu çalıştırın:
npm.install2=veya paketi package.json dosyasına ekleyin:
npm.dependencies=Bağımlılıklar
@@ -3524,7 +3401,6 @@ npm.details.tag=Etiket
pub.install=Paketi Dart ile kurmak için, şu komutu çalıştırın:
pypi.requires=Gereken Python
pypi.install=Paketi pip ile kurmak için, şu komutu çalıştırın:
-rpm.registry=Bu kütüğü komut satırını kullanarak kurun:
rpm.distros.redhat=RedHat tabanlı dağıtımlarda
rpm.distros.suse=SUSE tabanlı dağıtımlarda
rpm.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
@@ -3537,7 +3413,6 @@ rubygems.dependencies.runtime=Çalışma Zamanı Bağımlılıkları
rubygems.dependencies.development=Geliştirme Bağımlılıkları
rubygems.required.ruby=Gereken Ruby sürümü
rubygems.required.rubygems=Gereken RubyGem sürümü
-swift.registry=Bu kütüğü komut satırını kullanarak kurun:
swift.install=Paketi Package.swift dosyanıza ekleyin:
swift.install2=ve şu komutu çalıştırın:
vagrant.install=Vagrant paketi eklemek için aşağıdaki komutu çalıştırın:
@@ -3560,7 +3435,6 @@ owner.settings.cargo.initialize.success=Cargo dizini başarıyla oluşturuldu.
owner.settings.cargo.rebuild=Dizini yeniden oluştur
owner.settings.cargo.rebuild.description=İndeks, depolanmış Cargo paketleriyle eşzamanlanmamışsa yeniden oluşturma yararlı olabilir.
owner.settings.cargo.rebuild.error=Cargo dizinini yeniden oluşturma başarısız oldu: %v
-owner.settings.cargo.rebuild.success=Cargo dizini başarıyla yeniden oluşturuldu.
owner.settings.cleanuprules.title=Temizleme Kurallarını Yönet
owner.settings.cleanuprules.add=Temizleme Kuralı Ekle
owner.settings.cleanuprules.edit=Temizleme Kuralı Düzenle
@@ -3643,7 +3517,6 @@ runners.delete_runner=Bu çalıştırıcıyı sil
runners.delete_runner_success=Çalıştırıcı başarıyla silindi
runners.delete_runner_failed=Çalıştırıcı silinemedi
runners.delete_runner_header=Çalıştırıcıyı silmeyi onaylayın
-runners.delete_runner_notice=Eğer bu çalıştırıcıda bir görev çalışıyorsa, sonlandırılacak ve başarısız olarak işaretlenecek. Yapım iş akışını bozabilir.
runners.none=Hiç çalıştırıcı yok
runners.status.unspecified=Bilinmiyor
runners.status.idle=Boşta
diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini
index 6e4528b0567..c0de41a8c37 100644
--- a/options/locale/locale_uk-UA.ini
+++ b/options/locale/locale_uk-UA.ini
@@ -4,6 +4,7 @@ explore=Огляд
help=Довідка
logo=Логотип
sign_in=Увійти
+sign_in_with_provider=Увійдіть за допомогою %s
sign_in_or=або
sign_out=Вийти
sign_up=Реєстрація
@@ -29,24 +30,33 @@ more_items=Більше елементів
username=Ім'я кристувача
email=Адреса електронної пошти
password=Пароль
-access_token=Токен Доступу
-re_type=Підтвердження пароля
+access_token=Токен доступу
+re_type=Підтвердити пароль
captcha=CAPTCHA
-twofa=Двофакторна авторизація
+twofa=Двофакторна автентифікація
twofa_scratch=Двофакторний одноразовий пароль
passcode=Код доступу
webauthn_insert_key=Вставте ключ безпеки
+webauthn_sign_in=Натисніть кнопку на вашому ключі безпеки. Якщо ваш ключ без фізичної кнопки, поновно вставте ключ.
+webauthn_press_button=Будь ласка, натисніть кнопку на вашому ключі безпеки…
+webauthn_use_twofa=Використовуйте двофакторний код із Вашого телефона
+webauthn_error=Не вдалося прочитати ваш ключ безпеки.
+webauthn_unsupported_browser=Ваш браузер наразі не підтримує WebAuthn.
+webauthn_error_unknown=Сталася невідома помилка. Будь ласка, спробуйте ще раз.
+webauthn_error_unable_to_process=Сервер не зміг обробити ваш запит.
+webauthn_error_duplicated=Ключ безпеки не підходить для цього запиту. Переконайтеся, що ключ ще не зареєстровано.
+webauthn_error_empty=Ви повинні встановити назву для цього ключа.
+webauthn_error_timeout=Час очікування вичерпано, перш ніж ваш ключ було прочитано. Перезавантажте сторінку та спробуйте ще раз.
webauthn_reload=Оновити
-repository=Репозиторій
+repository=Сховище
organization=Організація
mirror=Дзеркало
issue_milestone=Етап
-new_repo=Новий репозиторій
+new_repo=Нове сховище
new_migrate=Нова міграція
new_mirror=Нове дзеркало
-new_fork=Новий репозиторій - копія
new_org=Нова організація
new_project=Новий проєкт
new_project_column=Новий стовпець
@@ -59,7 +69,7 @@ your_starred=Обрані
your_settings=Налаштування
all=Усі
-sources=Власні
+sources=Джерела
mirrors=Дзеркала
collaborative=Спільні
forks=Форки
@@ -71,6 +81,7 @@ milestones=Етапи
ok=OK
cancel=Відмінити
+retry=Повторіть спробу
rerun=Перезапустити
rerun_all=Перезапустити всі завдання
save=Зберегти
@@ -80,6 +91,7 @@ remove=Видалити
remove_all=Видалити все
remove_label_str=`Видалити елемент "%s"`
edit=Редагувати
+view=Переглянути
test=Тест
enabled=Увімкнено
@@ -102,12 +114,12 @@ loading=Завантаження…
files=Файли
error=Помилка
-error404=Сторінка, до якої ви намагаєтеся звернутися або до , не існує або Ви не маєте права на її перегляд.
-error503=Сервер не зміг виконати ваш запит. Будь ласка, спробуйте пізніше.
+error404=Сторінка, яку ви намагаєтеся відкрити, не існує або ви не маєте права на її перегляд.
go_back=Назад
invalid_data=Недійсні дані: %v
never=Ніколи
+unknown=Невідомо
rss_feed=Стрічка RSS
@@ -116,37 +128,56 @@ unpin=Відкріпити
artifacts=Артефакти
expired=Прострочено
-confirm_delete_artifact=Справді видалити артефакт '%s' ?
-archived=Архівовані
+archived=Архівовано
-concept_code_repository=Репозиторій
+concept_code_repository=Сховище
concept_user_organization=Організація
show_timestamps=Показувати часові мітки
show_log_seconds=Показувати секунди
show_full_screen=Показати на весь екран
+download_logs=Завантажити журнали
confirm_delete_selected=Підтверджуєте видалення всіх вибраних елементів?
name=Назва
value=Значення
+readme=Файл readme
filter=Фільтр
filter.clear=Очистити фільтр
-filter.is_archived=Архівовані
+filter.is_archived=Архівовано
+filter.not_archived=Не архівовано
+filter.is_fork=Відгалужено
+filter.not_fork=Не відгалужено
+filter.is_mirror=Віддзеркалено
+filter.not_mirror=Не віддзеркалено
filter.is_template=Шаблон
-filter.public=Публічний
+filter.not_template=Не шаблон
+filter.public=Публічна
filter.private=Приватний
+no_results_found=Нічого не знайдено.
+internal_error_skipped=Трапилась внутрішня помилка, але пропущена: %s
[search]
+type_tooltip=Тип пошуку
+fuzzy=Неточний
+words=Слова
+words_tooltip=Включати тільки результати, які відповідають пошуковим словам
+regexp=Регулярний вираз
+regexp_tooltip=Включати тільки результати, які відповідають пошуковому запиту регулярного виразу
+exact=Точний
+exact_tooltip=Включати тільки результати, які відповідають точному пошуковому запиту
+code_search_unavailable=Пошук коду наразі недоступний. Будь ласка, зверніться до адміністратора сайту.
+code_search_by_git_grep=Поточні результати пошуку коду надаються командою "git grep". Результати можуть бути кращими, якщо адміністратор сайту увімкне індексатор сховища.
no_results=Не знайдено жодного збігу.
-issue_kind=Пошук задач...
keyword_search_unavailable=Пошук за ключовими словами наразі недоступний. Будь ласка, зверніться до адміністратора сайту.
[aria]
navbar=Панель навігації
+footer=Нижній колонтитул
footer.software=Про програмне забезпечення
footer.links=Посилання
@@ -158,6 +189,7 @@ more=Більше
[editor]
buttons.heading.tooltip=Додати заголовок
+buttons.bold.tooltip=Додати грубий текст
buttons.italic.tooltip=Додати курсивний текст
buttons.quote.tooltip=Цитувати текст
buttons.code.tooltip=Додати код
@@ -171,265 +203,289 @@ buttons.table.rows=Рядки
buttons.table.cols=Стовпці
buttons.mention.tooltip=Згадати користувача або команду
buttons.ref.tooltip=Посилання на задачу або запит на злиття
+buttons.switch_to_legacy.tooltip=Використовувати застарілий редактор
buttons.enable_monospace_font=Увімкнути моноширинний шрифт
buttons.disable_monospace_font=Вимкнути моноширинний шрифт
[filter]
-string.asc=А - Я
-string.desc=Я - А
[error]
occurred=Сталася помилка
+report_message=Якщо ви вважаєте, що це помилка Gitea, будь ласка, спробуйте відшукати відповідну проблему на GitHub або створіть нову, якщо необхідно.
not_found=Ціль не знайдено.
network_error=Помилка мережі
[startpage]
app_desc=Зручний власний сервіс хостингу репозиторіїв Git
install=Легко встановити
+install_desc=Просто запустіть двійковий файл для вашої платформи, скористайтеся Docker , або встановіть системою керування пакунками .
platform=Платформонезалежність
+platform_desc=Gitea запускається будь-де, де Go може компілюватись: на Windows, macOS, Linux, ARM тощо. Виберіть платформу, яку любите!
lightweight=Невибагливість
-lightweight_desc=Gitea має низькі вимоги до ресурсів та може працювати на недорогому Raspberry Pi. Збережіть свою машину енергію!
+lightweight_desc=Gitea має мінімальні вимоги і може працювати на недорогому Raspberry Pi. Заощаджуйте ресурси вашої машини!
license=Відкритий вихідний код
[install]
install=Встановлення
-installing_desc=Встановлення, будь ласка, зачекайте...
title=Початкова конфігурація
-docker_helper=Якщо ви запускаєте Gitea всередині Docker, будь ласка уважно прочитайте документацію перед тим, як щось змінити на цій сторінці.
-require_db_desc=Gitea вимагає MySQL, PostgreSQL, MSSQL, SQLite3 або TiDB (протокол MySQL).
+docker_helper=Якщо ви запускаєте Gitea у Docker, будь ласка, прочитайте документацію перед тим, як змінювати будь-які налаштування.
+require_db_desc=Gitea потребує MySQL, PostgreSQL, MSSQL, SQLite3 або TiDB (протокол MySQL).
db_title=Налаштування бази даних
db_type=Тип бази даних
host=Хост
user=Ім'я кристувача
password=Пароль
-db_name=Ім'я бази даних
+db_name=Назва бази даних
db_schema=Схема
-db_schema_helper=Залиште пустим для бази даних за замовчуванням ("публічна").
+db_schema_helper=Залиште пустим для типової схеми бази даних ("публічна").
ssl_mode=SSL
path=Шлях
-sqlite_helper=Шлях до файлу для бази даних SQLite3. Введіть абсолютний шлях, якщо ви запускаєте Gіtea як сервіс.
+sqlite_helper=Шлях до файлу бази даних SQLite3. Введіть абсолютний шлях, якщо ви запускаєте Gіtea як сервіс.
reinstall_error=Ви намагаєтеся встановити в наявну базу даних Gitea
reinstall_confirm_message=Повторне встановлення в наявну базу даних Gitea може спричинити багато проблем. В більшості випадків, ви повинні використовувати свій наявний "app.ini" для запуску Gitea. Якщо ви знаєте, що робите, спробуйте наступне:
-reinstall_confirm_check_1=Дані зашифровані з використанням SECRET_KEY з app.ini можуть бути втрачені: користувачі не зможуть увійти з 2FA/OTP і дзеркала можуть працювати некоректно. Встановлюючи цей прапорець, ви підтверджуєте, що в поточному файлі app.ini вказано правильне значення SECRET_KEY.
-reinstall_confirm_check_2=Репозиторії та налаштування необхідно повторно синхронізувати. Встановлюючи цей прапорець, ви підтверджуєте, що ви синхронізуватимете хуки репозиторіїв та authorized_keys вручну. Ви підтверджуєте, що налаштування репозиторію і дзеркала є правильними.
-reinstall_confirm_check_3=Ви підтверджуєте, що повністю впевнені в тому, що для цього екземпляра Gitea вказано правильне розташування app.ini та екземпляр слід встановити повторно. Ви підтверджуєте, що усвідомлюєте вищенаведені ризики.
+reinstall_confirm_check_3=Ви підтверджуєте, що абсолютно впевнені, що Gitea працює з правильним розташуванням файлу app.ini, і що вам потрібно перевстановити програму. Ви підтверджуєте, що усвідомлюєте вищевказані ризики.
err_empty_db_path=Шлях до файлу бази даних SQLite3 не може бути порожнім.
-no_admin_and_disable_registration=Ви не можете вимкнути реєстрацію до створення облікового запису адміністратора.
+no_admin_and_disable_registration=Ви не можете вимкнути реєстрацію без створення облікового запису адміністратора.
err_empty_admin_password=Пароль адміністратора не може бути порожнім.
-err_empty_admin_email=Електронна адреса адміністратора не може бути порожньою.
-err_admin_name_is_reserved=Неправильне ім'я користувача-адміністратора - ім'я зарезервоване
-err_admin_name_pattern_not_allowed=Ім'я адміністратора недійсне, це ім'я підпадає під зарезервований шаблон
-err_admin_name_is_invalid=Неправильне ім'я користувача-адміністратора
general_title=Загальні налаштування
app_name=Назва сайту
app_name_helper=Тут ви можете ввести назву своєї компанії.
-repo_path=Кореневий шлях репозиторія
-repo_path_helper=Всі вилучені Git репозиторії будуть збережені в цей каталог.
-lfs_path=Кореневої шлях Git LFS
-lfs_path_helper=У цій папці будуть зберігатися файли Git LFS. Залиште порожнім, щоб вимкнути LFS.
-run_user=Запуск від імені Користувача
+repo_path=Кореневий шлях сховища
+repo_path_helper=До цього каталогу буде збережено віддалені сховища Git.
+lfs_path=Кореневий шлях Git LFS
+lfs_path_helper=У цій теці будуть зберігатися файли Git LFS. Залиште порожнім, щоб вимкнути.
+run_user=Виконати як
+run_user_helper=Ім'я користувача операційної системи, від імені якого запускається Gitea. Зауважте, що цей користувач повинен мати доступ до кореневого шляху сховища.
domain=Домен сервера
-domain_helper=Домен або адреса хоста сервера.
+domain_helper=Домен або хост-адреса сервера.
ssh_port=Порт SSH сервера
ssh_port_helper=Номер порту, який використовує SSH сервер. Залиште порожнім, щоб вимкнути SSH.
http_port=Gitea HTTP порт
-http_port_helper=Номер порту, який буде прослуховуватися Giteas веб-сервером.
app_url=Базова URL-адреса Gitea
-app_url_helper=Базова адреса для HTTP(S) клонування через URL та повідомлень електронної пошти.
-log_root_path=Шлях до лог файлу
-log_root_path_helper=Файли журналу будуть записані в цей каталог.
+app_url_helper=Базова адреса для URL-адрес клонів HTTP(S) та сповіщень електронною поштою.
+log_root_path=Шлях до журналу
+log_root_path_helper=Файли журналу будуть записані в цю теку.
-optional_title=Додаткові налаштування
-email_title=Налаштування Email
-smtp_addr=SMTP хост
-smtp_port=SMTP порт
-smtp_from=Відправляти Email від імені
+optional_title=Необов'язкові налаштування
+email_title=Налаштування електронної пошти
+smtp_addr=Сервер SMTP
+smtp_port=Порт SMTP
+smtp_from=Відправити листа від імені
smtp_from_invalid=Адреса "Надіслати листа як" недійсна
-smtp_from_helper=Електронна пошта для використання в Gіtea. Введіть звичайну електронну адресу або використовуйте формат: "Ім'я" .
-mailer_user=SMTP Ім'я кристувача
-mailer_password=SMTP Пароль
-register_confirm=Потрібно підтвердити електронну пошту для реєстрації
+smtp_from_helper=Адреса електронної пошти, яку буде використовувати Gitea. Введіть звичайну адресу електронної пошти або використовуйте формат «Ім'я» .
+mailer_user=Ім'я користувача SMTP
+mailer_password=Пароль SMTP
+register_confirm=Вимагати підтвердження електронною поштою для реєстрації
mail_notify=Увімкнути сповіщення електронною поштою
-server_service_title=Сервер і налаштування зовнішніх служб
+server_service_title=Налаштування сервера і сторонніх сервісів
offline_mode=Увімкнути локальний режим
-offline_mode_popup=Відключити сторонні мережі доставки контенту і обслуговувати всі ресурси локально.
+offline_mode_popup=Вимкнути сторонні мережі доставки контенту та обслуговувати всі ресурси локально.
disable_gravatar=Вимкнути Gravatar
-disable_gravatar_popup=Відключити Gravatar і сторонні джерела аватарів. Якщо користувач не завантажить аватар локально то за замовчуванням буде використовуватися стандартний аватар.
-federated_avatar_lookup=Увімкнути федеративні аватари
-federated_avatar_lookup_popup=Увімкнути зовнішний Аватар за допомогою Libravatar.
-disable_registration=Вимкнути самостійну реєстрацію
-disable_registration_popup=Вимкнути самостійну реєстрацію користувачів, тільки адміністратор може створювати нові облікові записи.
+disable_gravatar_popup=Вимкнути Gravatar та сторонні джерела аватарок. Якщо користувач локально не завантажить аватар, буде використовуватися типовий аватар.
+federated_avatar_lookup=Увімкнути зовнішні аватари
+federated_avatar_lookup_popup=Увімкнути пошук об'єднаних аватарів за допомогою Libravatar.
+disable_registration=Вимкнути реєстрацію
+disable_registration_popup=Вимкнути реєстрацію користувачів, тільки адміністратор може створювати нові облікові записи.
allow_only_external_registration_popup=Дозволити реєстрацію тільки через сторонні сервіси
-openid_signin=Увімкнути реєстрацію за допомогою OpenID
-openid_signin_popup=Увімкнути вхід за допомогою OpenID.
+openid_signin=Увімкнути вхід за допомогою OpenID
+openid_signin_popup=Увімкнути вхід користувачів за допомогою OpenID.
openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID
openid_signup_popup=Увімкнути самореєстрацію користувачів на основі OpenID.
-enable_captcha=Увімкнути CAPTCHA при реєстрації
-enable_captcha_popup=Вимагати перевірку CAPTCHA при самостійній реєстрації користувача.
+enable_captcha=Увімкнути CAPTCHA для реєстрації
+enable_captcha_popup=Вимагати CAPTCHA для самореєстрації користувачів.
require_sign_in_view=Вимагати авторизації для перегляду сторінок
+require_sign_in_view_popup=Обмежити доступ до сторінки лише для зареєстрованих користувачів. Відвідувачі побачать тільки сторінки входу і реєстрації.
admin_setting_desc=Створення облікового запису адміністратора необов'язково. Перший зареєстрований користувач автоматично стає адміністратором.
admin_title=Налаштування облікового запису адміністратора
admin_name=Ім'я кристувача Адміністратора
admin_password=Пароль
-confirm_password=Підтвердження пароля
+confirm_password=Підтвердити пароль
admin_email=Адреса електронної пошти
-install_btn_confirm=Встановлення Gitea
-test_git_failed=Не в змозі перевірити 'git' команду: %v
+install_btn_confirm=Встановити Gitea
+test_git_failed=Не вдалося перевірити команду 'git': %v
sqlite3_not_available=Ця версія Gitea не підтримує SQLite3. Будь ласка, завантажте офіційну бінарну версію з %s (не версію gobuild).
-invalid_db_setting=Налаштування бази даних є некоректними: %v
-invalid_db_table=Таблиця '%s' бази даних є недійсною: %v
-invalid_repo_path=Помилковий шлях до кореня репозиторію: %v
-invalid_app_data_path=Некоректний шлях до даних програми: %v
-run_user_not_match=Ім'я користувача 'run as' не є поточним ім'ям користувача: %s -> %s
-internal_token_failed=Не вдалося згенерувати внутрішній токен: %v
-secret_key_failed=Не вдалося згенерувати секретний ключ: %v
-save_config_failed=Не в змозі зберегти конфігурацію: %v
-invalid_admin_setting=Неприпустимі налаштування облікового запису адміністратора: %v
-invalid_log_root_path=Неприпустимий шлях для логів: %v
-default_keep_email_private=Приховати адресу електронної пошти за замовчуванням
-default_keep_email_private_popup=Приховати адресу електронної пошти нових облікових записів за замовчуванням.
-default_allow_create_organization=Дозволити створення організацій за замовчуванням
-default_allow_create_organization_popup=Дозволити новим обліковим записам користувачів створювати організації за замовчуванням.
-default_enable_timetracking=Увімкнути відстеження часу за замовчуванням
-default_enable_timetracking_popup=Включити відстеження часу для нових репозиторіїв за замовчуванням.
+invalid_db_setting=Налаштування бази даних недійсні: %v
+invalid_db_table=База даних таблиці "%s" є недійсною: %v
+invalid_repo_path=Кореневий шлях до сховища невірний: %v
+invalid_app_data_path=Шлях до даних додатка невірний: %v
+run_user_not_match=Ім'я користувача “Виконати як” не є поточним ім'ям користувача: %s -> %s
+internal_token_failed=Не вдалося створити внутрішній токен: %v
+secret_key_failed=Не вдалося створити секретний ключ: %v
+save_config_failed=Не вдалося зберегти конфігурацію: %v
+invalid_admin_setting=Налаштування облікового запису адміністратора є недійсним: %v
+invalid_log_root_path=Неправильний шлях до журналу: %v
+default_keep_email_private=Типово приховувати адреси електронної пошти
+default_keep_email_private_popup=Типово приховувати адреси електронної пошти нових облікових записів.
+default_allow_create_organization=За замовчуванням дозволити створення організацій
+default_allow_create_organization_popup=За замовчуванням дозволити новим користувачам створювати організації.
+default_enable_timetracking=За замовчуванням увімкнути відстеження часу
+default_enable_timetracking_popup=Увімкнути відстеження часу для нових сховищ за замовчуванням.
no_reply_address=Прихований поштовий домен
-no_reply_address_helper=Доменне ім'я для користувачів із прихованою електронною адресою. Наприклад, ім'я користувача 'joe' буде входити в Git як 'joe@noreply.example.org', якщо для прихованого домену електронної пошти встановлено 'noreply.example.org'.
+no_reply_address_helper=Доменне ім'я для користувачів із прихованою електронною адресою. Наприклад, ім'я користувача 'Joe' буде зображатися в Git як 'joe@noreply.example.org', якщо прихований домен електронної пошти встановлено 'noreply.example.org'.
password_algorithm=Алгоритм хешування пароля
invalid_password_algorithm=Недійсний хеш-алгоритм пароля
enable_update_checker=Увімкнути перевірку оновлень
+enable_update_checker_helper=Періодично перевіряти наявність нових версій, підключаючись до gitea.io.
env_config_keys=Конфігурація середовища
env_config_keys_prompt=Наступні змінні середовища також будуть застосовані до вашого файлу конфігурації:
config_write_file_prompt=Ці параметри будуть записані в: %s
[home]
-uname_holder=Ім'я користувача або Ел. пошта
+nav_menu=Меню навігації
+uname_holder=Ім'я користувача або адреса електронної пошти
password_holder=Пароль
switch_dashboard_context=Переключити контекст панелі управління
-my_repos=Репозиторії
-show_more_repos=Показати більше репозиторіїв…
-collaborative_repos=Спільні репозиторії
+my_repos=Сховища
+show_more_repos=Показати більше сховищ…
+collaborative_repos=Спільні сховища
my_orgs=Мої організації
my_mirrors=Мої дзеркала
view_home=Переглянути %s
filter=Інші фільтри
-filter_by_team_repositories=Фільтрувати за репозиторіями команд
+filter_by_team_repositories=Фільтрувати за сховищами команд
feed_of=`Стрічка "%s"`
show_archived=Архівовані
-show_both_archived_unarchived=Показано архівовані і не архівовані
+show_both_archived_unarchived=Показано архівовані і неархівовані
show_only_archived=Показано тільки архівовані
-show_only_unarchived=Показано тільки не архівовані
+show_only_unarchived=Показано тільки неархівовані
show_private=Приватні
show_both_private_public=Показано публічні та приватні
show_only_private=Показано тільки приватні
show_only_public=Показано тільки публічні
-issues.in_your_repos=В ваших репозиторіях
+issues.in_your_repos=У ваших сховищах
+guide_title=Жодної активності
+guide_desc=Наразі ви не стежите за жодним сховищем або користувачем, тому нема чого відображати. Ви можете переглянути сховища або користувачів, які вас цікавлять, за посиланнями нижче.
+explore_repos=Огляд сховищ
+explore_users=Огляд користувачів
+empty_org=Організацій поки що немає.
+empty_repo=Сховищ поки що немає.
[explore]
-repos=Репозиторії
+repos=Сховища
users=Користувачі
organizations=Організації
+go_to=Перейти до
code=Код
code_last_indexed_at=Останні індексовані %s
+relevant_repositories_tooltip=Сховища, які є відгалуженими або не мають теми, піктограми й опису, приховуються.
+relevant_repositories=Показано лише важливі сховища, показати нефільтровані результати .
[auth]
create_new_account=Реєстрація облікового запису
-disable_register_prompt=Вибачте, можливість реєстрації відключена. Будь ласка, зв'яжіться з адміністратором сайту.
+already_have_account=Вже зареєстровані?
+sign_in_now=Увійдіть зараз!
+disable_register_prompt=Реєстрацію вимкнено. Будь ласка, зв'яжіться з адміністратором сайту.
disable_register_mail=Підтвердження реєстрації електронною поштою вимкнено.
+manual_activation_only=Зверніться до адміністратора сайту для завершення активації.
remember_me=Запам’ятати цей пристрій
+remember_me.compromised=Токен для входу більше не дійсний, що може свідчити про скомпрометований обліковий запис. Перевірте свій обліковий запис на наявність незвичайних дій.
forgot_password_title=Забув пароль
forgot_password=Забули пароль?
-must_change_password=Оновіть свій пароль
-allow_password_change=Вимагати в користувача змінити пароль (рекомендується)
-reset_password_mail_sent_prompt=Електронний лист із підтвердженням надіслано %s . Перевірте папку 'Вхідні' в межах наступних %s, щоб завершити процес відновлення облікового запису.
+need_account=Потрібен обліковий запис?
+sign_up_tip=Ви реєструєте перший обліковий запис у системі, з правами адміністратора. Будь ласка, уважно запам'ятайте своє ім'я користувача та пароль. Якщо ви їх забудете, зверніться до документації Gitea, щоб відновити обліковий запис.
+sign_up_now=Зареєструватися.
+sign_up_successful=Обліковий запис створено успішно. Вітаю!
+confirmation_mail_sent_prompt_ex=Новий лист з підтвердженням було надіслано на %s . Будь ласка, перевірте свою поштову скриньку протягом наступних %s, щоб завершити процес реєстрації. Якщо ви вказали невірну адресу електронної пошти, ви можете увійти ще раз і змінити її.
+must_change_password=Оновити пароль
+allow_password_change=Вимагати від користувача змінити пароль (рекомендовано)
+reset_password_mail_sent_prompt=На адресу %s було надіслано лист із підтвердженням. Будь ласка, перевірте свою поштову скриньку протягом наступних %s, щоб завершити процес відновлення облікового запису.
active_your_account=Активувати обліковий запис
account_activated=Обліковий запис активовано
-prohibit_login=Вхід заборонений
-resent_limit_prompt=Вибачте, ви вже запросили активацію по електронній пошті нещодавно. Будь ласка, зачекайте 3 хвилини, а потім спробуйте ще раз.
-has_unconfirmed_mail=Привіт %s, у вас є непідтверджена електронна адреса (%s ). Якщо ви не отримали електронний лист із підтвердженням або вам потрібно надіслати новий, натисніть на кнопку нижче.
-resend_mail=Натисніть тут, щоб вислати лист активації знову
-email_not_associate=Ця електронна пошта не пов'язана ні з одним обліковим записом.
-send_reset_mail=Надіслати електронний лист для відновлення облікового запису
+resent_limit_prompt=Ви вже надсилали запит на активацію нещодавно. Зачекайте 3 хвилини і спробуйте ще раз.
+has_unconfirmed_mail=Привіт %s, у вас непідтверджена адреса електронної пошти (%s ). Якщо ви не отримали листа з підтвердженням або вам потрібно надіслати новий, будь ласка, натисніть кнопку нижче.
+change_unconfirmed_mail_address=Якщо ваша адреса електронної пошти для реєстрації невірна, ви можете змінити її тут і надіслати новий лист з підтвердженням.
+resend_mail=Натисніть тут, щоб повторно надіслати лист з активацією
+email_not_associate=Ця адреса електронної пошти не пов'язана з жодним обліковим записом.
+send_reset_mail=Надіслати лист для відновлення облікового запису
reset_password=Відновлення облікового запису
-invalid_code=Цей код підтвердження недійсний або закінчився.
+invalid_code=Ваш код підтвердження недійсний або його термін дії закінчився.
+invalid_code_forgot_password=Ваш код підтвердження недійсний або термін дії минув. Натисніть тут , щоб почати новий сеанс.
+invalid_password=Ваш пароль не збігається з паролем, який використовувався при створенні облікового запису.
reset_password_helper=Відновити обліковий запис
+reset_password_wrong_user=Ви увійшли як %s, але посилання для відновлення облікового запису призначене для %s
password_too_short=Довжина пароля не може бути меншою за %d символів.
-non_local_account=Нелокальні акаунти не можуть змінити пароль через Gitea.
+non_local_account=Нелокальні користувачі не можуть оновити свій пароль через вебінтерфейс Gitea.
verify=Підтвердити
scratch_code=Одноразовий пароль
-use_scratch_code=Використовувати одноразовий пароль
-twofa_scratch_used=Ви використовували одноразовий пароль. Ви були перенаправлені на сторінку налаштувань для генерації нового коду або відключення двуфакторної автентифікації.
-twofa_passcode_incorrect=Ваш пароль є невірним. Якщо ви втратили пристрій, використовуйте ваш одноразовий пароль.
+use_scratch_code=Скористатись одноразовим паролем
+twofa_scratch_used=Ви скористалися одноразовим паролем. Вас перенаправлено на сторінку налаштувань двофакторної автентифікації, щоб видалити пристрій або згенерувати новий одноразовий пароль.
+twofa_passcode_incorrect=Ваш пароль неправильний. Якщо ви загубили свій пристрій, скористайтеся одноразовим паролем.
twofa_scratch_token_incorrect=Невірний одноразовий пароль.
login_userpass=Увійти
login_openid=OpenID
oauth_signup_tab=Зареєструвати обліковий запис
-oauth_signup_title=Повний новий обліковий запис
-oauth_signup_submit=Повний обліковий запис
-oauth_signin_tab=Посилання на існуючий обліковий запис
+oauth_signup_title=Завершити реєстрацію облікового запису
+oauth_signup_submit=Поповнити обліковий запис
+oauth_signin_tab=Прив'язати до існуючого облікового запису
oauth_signin_title=Увійдіть щоб авторизувати пов'язаний обліковий запис
oauth_signin_submit=Прив'язати обліковий запис
+oauth.signin.error.general=Під час обробки запиту на авторизацію сталася помилка: %s. Якщо ця помилка повториться, зверніться до адміністратора сайту.
+oauth.signin.error.access_denied=Запит на авторизацію відхилено.
+oauth.signin.error.temporarily_unavailable=Помилка авторизації, сервер автентифікації тимчасово недоступний. Спробуйте пізніше.
openid_connect_submit=Під’єднатися
openid_connect_title=Підключитися до існуючого облікового запису
-openid_connect_desc=Вибраний OpenID URI невідомий. Пов'яжіть його з новим обліковим записом тут.
+openid_connect_desc=Обраний OpenID URI невідомий. Зв'яжіть його тут з новим обліковим записом.
openid_register_title=Створити новий обліковий запис
-openid_register_desc=Вибраний OpenID URI невідомий. Пов'яжіть йогоз новим обліковим записом тут.
-disable_forgot_password_mail=Відновлення облікового запису вимкнено, оскільки не налаштована електронна пошта. Будь ласка, зв'яжіться з адміністратором сайту.
-disable_forgot_password_mail_admin=Відновлення облікового запису доступне лише після налаштування електронної пошти. Будь ласка, налаштуйте ел. пошту для відновлення облікового запису.
-email_domain_blacklisted=З вказаним email реєстрація неможлива.
+openid_register_desc=Обраний OpenID URI невідомий. Зв'яжіть його тут з новим обліковим записом.
+openid_signin_desc=Введіть свій OpenID URI. Наприклад: alice.openid.example.org або https://openid.example.org/alice.
+email_domain_blacklisted=Ви не можете зареєструватися з адресою електронної пошти.
authorize_application=Авторизувати програму
authorize_redirect_notice=Вас буде переадресовано до %s, якщо ви авторизуєте цю програму.
authorize_application_created_by=Ця програма створена %s.
-authorize_application_description=Якщо ви надасте цей доступ, то він матиме доступ до всіх ваших даних облікового запису, включаючи приватні репозиторії та організації.
-authorize_title=Авторизуйвати "%s" для доступу до вашого облікового запису?
+authorize_title=Авторизувати "%s" для доступу до вашого облікового запису?
authorization_failed=Помилка авторизації
-sspi_auth_failed=Помилка SSPI-автентифікації
+sspi_auth_failed=Помилка автентифікації SSPI
+password_pwned=Пароль, який ви обрали, знаходиться в списку викрадених паролів , раніше викритих в публічних витоках даних. Спробуйте ще раз з іншим паролем і подумайте про зміну цього пароля деінде.
password_pwned_err=Не вдалося виконати запит до HaveIBeenPwed
+last_admin=Не можна видалити останнього адміністратора. Повинен бути хоча б один адміністратор.
+signin_passkey=Увійти за допомогою ключа доступу
+back_to_sign_in=Повернутися до авторизації
[mail]
view_it_on=Переглянути на %s
-link_not_working_do_paste=Не працює? Спробуйте скопіювати та вставити його в свій браузер.
+reply=або надішліть відповідь безпосередньо на цей електронний лист
+link_not_working_do_paste=Не працює? Спробуйте скопіювати та вставити його у браузер.
hi_user_x=Привіт %s ,
activate_account=Будь ласка, активуйте ваш обліковий запис
activate_account.title=%s, будь ласка, активуйте свій обліковий запис
activate_account.text_1=Привіт, %[1]s , дякуємо за реєстрацію на %[2]s!
-activate_account.text_2=Перейдіть за цим посиланням, щоб активувати ваш обліковий запис в %s :
+activate_account.text_2=Будь ласка, перейдіть за наступним посиланням, щоб активувати свій обліковий запис протягом %s :
-activate_email=Підтвердить вашу адресу електронної пошти
-activate_email.text=Перейдіть за цим посиланням, щоб підтвердити вашу електронну адресу в %s :
+activate_email=Підтвердіть адресу електронної пошти
+activate_email.title=%s, будь ласка, підтвердіть вашу адресу електронної пошти
+activate_email.text=Будь ласка, перейдіть за наступним посиланням протягом %s , щоб підтвердити свою електронну адресу:
+register_notify=Ласкаво просимо до %s
register_notify.title=%[1]s, ласкаво просимо до %[2]s
-register_notify.text_1=це ваша е-пошта для підтвердження реєстрації для %s!
-register_notify.text_2=Тепер ви можете увійти як: %s.
-register_notify.text_3=Якщо цей обліковий запис було створено для вас, будь ласка, спочатку встановіть свій пароль .
+register_notify.text_3=Якщо цей обліковий запис створено для вас, будь ласка, спершу встановіть пароль .
-reset_password=Відновлення вашого облікового запису
-reset_password.title=%s, ви відправили запит на відновлення облікового запису
-reset_password.text=Перейдіть за цим посиланням, щоб відновити ваш обліковий запис в %s :
+reset_password=Відновити обліковий запис
+reset_password.title=%s, ви надіслали запит на відновлення облікового запису
+reset_password.text=Щоб відновити обліковий запис, перейдіть за наступним посиланням протягом %s :
register_success=Реєстрація успішна
-issue_assigned.pull=@%[1]s призначив вам запит злиття %[2]s в репозиторії %[3]s.
-issue_assigned.issue=@%[1]s призначив вам задачу %[2]s у репозиторії %[3]s.
+issue_assigned.pull=@%[1]s призначив вам запит на злиття %[2]s в сховищі %[3]s.
+issue_assigned.issue=@%[1]s призначив вам задачу %[2]s в сховищі %[3]s.
issue.x_mentioned_you=@%s згадав вас:
-issue.action.force_push=%[1]s force-pushed %[2]s з %[3]s в %[4]s.
-issue.action.push_1=@%[1]s надіслав %[3]d коміти %[2]s
-issue.action.push_n=@%[1]s відправив %[3]d коміти до %[2]s
-issue.action.close=@%[1]s закрито #%[2]d.
+issue.action.push_1=@%[1]s надіслав %[3]d коміт в %[2]s
+issue.action.push_n=@%[1]s надіслав %[3]d коміти до %[2]s
+issue.action.close=@%[1]s закрив #%[2]d.
issue.action.reopen=@%[1]s заново відкрив #%[2]d.
issue.action.merge=@%[1]s об'єднав #%[2]d до %[3]s.
-issue.action.approve=@%[1]s затвердили цей запит на злиття.
-issue.action.reject=@%[1]s запитують зміни на цей запит на злиття.
-issue.action.review=@%[1]s прокоментували цей запит на злиття.
-issue.action.review_dismissed=@%[1]s відхилено останній відгук від %[2]s для цього запиту на злиття.
-issue.action.ready_for_review=@%[1]s позначили цей запит на злиття як готовий до розгляду.
-issue.action.new=@%[1]s створили #%[2]d.
+issue.action.approve=@%[1]s затвердив цей запит на злиття.
+issue.action.reject=@%[1]s запросив зміни у цьому запиті на злиття.
+issue.action.review=@%[1]s прокоментував цей запит на злиття.
+issue.action.review_dismissed=@%[1]s відхилив останній відгук від %[2]s на цей запит на злиття.
+issue.action.ready_for_review=@%[1]s позначив цей запит на злиття як готовий до розгляду.
+issue.action.new=@%[1]s створив #%[2]d.
issue.in_tree_path=В %s:
release.new.subject=%s в %s випущено
@@ -440,37 +496,39 @@ release.downloads=Звантаження:
release.download.zip=Вихідний код (ZIP)
release.download.targz=Вихідний код (TAR.GZ)
-repo.transfer.subject_to=%s бажає передати"%s" в %s
-repo.transfer.subject_to_you=%s бажає передати"%s" вам
+repo.transfer.subject_to=%s хоче перенести "%s" в %s
+repo.transfer.subject_to_you=%s хоче передати"%s" вам
repo.transfer.to_you=вам
-repo.transfer.body=Щоб прийняти або відхилити перейдіть до %s або просто ігноруйте.
repo.collaborator.added.subject=%s додав вас до %s
-repo.collaborator.added.text=Ви були додані в якості співавтора репозиторію:
+repo.collaborator.added.text=Вас додали як співавтора до сховища:
team_invite.subject=%[1]s запрошує вас приєднатися до організації %[2]s
+team_invite.text_1=%[1]s запрошує вас до команди %[2]s в організації %[3]s.
+team_invite.text_2=Перейдіть за посиланням, щоб приєднатися до команди:
+team_invite.text_3=Примітка: Це запрошення призначене для %[1]s. Якщо ви не очікували цього запрошення, ви можете проігнорувати це повідомлення.
[modal]
yes=Так
no=Ні
confirm=Підтвердити
cancel=Відмінити
-modify=Оновлення
+modify=Оновити
[form]
UserName=Ім’я користувача
-RepoName=Назва репозиторію
+RepoName=Назва сховища
Email=Адреса електронної пошти
Password=Пароль
-Retype=Підтвердження пароля
-SSHTitle=Iм'я SSH ключа
+Retype=Підтвердити пароль
+SSHTitle=Назва ключа SSH
HttpsUrl=Адреса HTTPS
PayloadUrl=URL обробника
TeamName=Назва команди
AuthName=Назва авторизації
-AdminEmail=Email адміністратора
+AdminEmail=Адреса електронної пошти адміністратора
-NewBranchName=Ім'я нової гілки
+NewBranchName=Назва нової гілки
CommitSummary=Резюме коміту
CommitMessage=Повідомлення коміту
CommitChoice=Вибір коміта
@@ -480,81 +538,90 @@ Content=Зміст
SSPISeparatorReplacement=Розділювач
SSPIDefaultLanguage=Типова мова
-require_error=` не може бути пустим.`
-alpha_dash_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') та підкреслення ('_'). `
-alpha_dash_dot_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') , підкреслення ('_') та точки ('.'). `
-git_ref_name_error=` повинен бути правильним посилальним ім'ям Git.`
+require_error=` не може бути порожнім.`
+alpha_dash_error=` повинен містити тільки алфавітно-цифрові символи, дефіс ('-') та підкреслення ('_').`
+alpha_dash_dot_error=` повинен містити тільки алфавітно-цифрові символи, дефіс ('-'), підкреслення ('_') та крапку ('.').`
+git_ref_name_error=` повинен бути правильно сформованим ім'ям-посиланням на Git.`
size_error=` повинен бути розмір %s.`
-min_size_error=` повинен бути принаймні %s символів.`
-max_size_error=` повинен бути не більш як %s символів.`
-email_error=` не є адресою електронної пошти.`
+min_size_error=` має містити принаймні %s символів.`
+max_size_error=` має містити не більше %s символів.`
+email_error=` не є дійсною адресою електронної пошти.`
url_error=`"%s" не є дійсною URL-адресою.`
include_error=` повинен містити підрядок "%s".`
-glob_pattern_error=` неприпустимий шаблон glob: %s.`
-regex_pattern_error=` неприпустимий шаблон regex: %s.`
+glob_pattern_error=` недійсний шаблон glob: %s.`
+regex_pattern_error=` недійсний шаблон регулярного виразу: %s.`
unknown_error=Невідома помилка:
captcha_incorrect=Код CAPTCHA неправильний.
-password_not_match=Паролі не співпадають.
-lang_select_error=Оберіть мову з переліку.
+password_not_match=Паролі не збігаються.
+lang_select_error=Оберіть мову зі списку.
-username_been_taken=Ім'я користувача вже зайнято.
-username_change_not_local_user=Нелокальні користувачі не можуть змінити своє ім'я користувача.
+username_been_taken=Ім'я користувача вже зайняте.
+username_change_not_local_user=Нелокальні користувачі не можуть змінювати своє ім'я користувача.
+change_username_disabled=Зміна імені користувача відключена.
+change_full_name_disabled=Зміна повного імені відключена.
username_has_not_been_changed=Ім'я користувача не змінено
-repo_name_been_taken=Ім'я репозіторію вже використовується.
-repository_files_already_exist=Файли вже існують для цього репозитарію. Зверніться до системного адміністратора.
-repository_files_already_exist.adopt=Файли вже існують для цього репозиторію і можуть бути лише прийняті.
-repository_files_already_exist.delete=Файли вже існують для цього сховища. Ви повинні видалити їх.
-repository_files_already_exist.adopt_or_delete=Файли вже існують для цього репозиторію. Їх можливо прийняти або видалити.
-visit_rate_limit=Обмеження швидкості віддаленого доступу.
-2fa_auth_required=Для віддаленого доступу необхідна двуфакторна аутентифікація.
-org_name_been_taken=Назва організації вже зайнято.
-team_name_been_taken=Назва команди вже зайнято.
-team_no_units_error=Дозволити доступ до принаймні одного розділу репозитарію.
-email_been_used=Ця електронна адреса вже використовується.
-email_invalid=Адреса електронної пошти помилкова.
+repo_name_been_taken=Назва сховища вже використовується.
+repository_force_private=Примусову приватність ввімкнено: приватні сховища не можна зробити загальнодоступними.
+repository_files_already_exist=Для цього сховища вже існують файли. Зверніться до системного адміністратора.
+repository_files_already_exist.delete=Для цього сховища вже існують файли. Ви повинні видалити їх.
+repository_files_already_exist.adopt_or_delete=Для цього сховища вже існують файли. Прийміть їх або видаліть.
+visit_rate_limit=Віддалений доступ відхилено у зв'язку з обмеженням кількості спроб.
+org_name_been_taken=Назва організації вже зайнята.
+team_name_been_taken=Назва команди вже зайнята.
+team_no_units_error=Дозволити доступ до принаймні одного розділу сховища.
+email_been_used=Адреса електронної пошти вже використовується.
+email_invalid=Адреса електронної пошти недійсна.
openid_been_used=Адреса OpenID '%s' вже використовується.
username_password_incorrect=Неправильне ім'я користувача або пароль.
-password_complexity=Пароль не відповідає вимогам до складності:
-password_lowercase_one=Принаймні одна буква в нижньому регістрі
-password_uppercase_one=Принаймні одна буква в верхньому регістрі
+password_complexity=Пароль не відповідає вимогам складності:
+password_lowercase_one=Принаймні один символ нижнього регістру
+password_uppercase_one=Принаймні один символ верхнього регістру
password_digit_one=Принаймні одна цифра
-password_special_one=Принаймні один спеціальний символ (пунктуація, дужки, лапки тощо)
-enterred_invalid_repo_name=Невірно введено ім'я репозиторію.
-enterred_invalid_org_name=Невірно введено ім'я організації.
-enterred_invalid_owner_name=Ім'я нового власника не є дійсним.
-enterred_invalid_password=Введений вами пароль некоректний.
+password_special_one=Принаймні один спеціальний символ (розділові знаки, дужки, лапки тощо)
+enterred_invalid_repo_name=Ви ввели неправильну назву сховища.
+enterred_invalid_org_name=Ви ввели неправильну назву організації.
+enterred_invalid_owner_name=Ім'я нового власника недійсне.
+enterred_invalid_password=Ви ввели неправильний пароль.
unset_password=Користувач не встановив пароль.
-user_not_exist=Даний користувач не існує.
+unsupported_login_type=Тип входу не підтримується для видалення облікового запису.
+user_not_exist=Користувач не існує.
team_not_exist=Команда не існує.
-last_org_owner=Ви не можете видалити останнього користувача з команди 'власники'. У кожній команді має бути принаймні один власник.
+last_org_owner=Ви не можете видалити останнього користувача з групи 'власників'. В організації має бути принаймні один власник.
cannot_add_org_to_team=Організацію неможливо додати як учасника команди.
+duplicate_invite_to_team=Користувача вже запрошено як члена команди.
+organization_leave_success=Ви успішно покинули організацію %s.
-invalid_ssh_key=Неможливо перевірити ваш SSH ключ: %s
-invalid_gpg_key=Неможливо перевірити ваш GPG ключ: %s
-invalid_ssh_principal=Некоректний відповідальний: %s
+invalid_ssh_key=Не вдається перевірити ключ SSH: %s
+invalid_gpg_key=Не вдається перевірити ключ GPG: %s
+invalid_ssh_principal=Невірна ідентичність: %s
+must_use_public_key=Наданий вами ключ — приватний. Будь ласка, нікуди не завантажуйте свій приватний ключ. Натомість використовуйте публічний ключ.
auth_failed=Помилка автентифікації: %v
target_branch_not_exist=Цільової гілки не існує.
+target_ref_not_exist=Цільове посилання не існує %s
admin_cannot_delete_self=Ви не можете видалити себе, допоки ви адміністратор. Будь ласка, спочатку видаліть права адміністратора.
[user]
-change_avatar=Змінити свій аватар…
-repositories=Репозиторії
+change_avatar=Змінити аватар…
+joined_on=Приєднався(-лась) %s
+repositories=Сховища
activity=Публічна активність
-followers=Читачі
+followers=Послідовники
show_more=Показати більше
-starred=Обрані Репозиторії
-watched=Відстежувані репозиторії
+starred=Обрані сховища
+watched=Відстежувані сховища
code=Код
-projects=Проєкт
+projects=Проєкти
overview=Огляд
-following=Читає
-follow=Підписатися
-unfollow=Відписатися
+following=Відстежувані
+follow=Стежити
+unfollow=Не стежити
user_bio=Біографія
-disabled_public_activity=Цей користувач вимкнув публічний показ діяльності.
+disabled_public_activity=Цей користувач вимкнув публічну видимість активності.
+email_visibility.limited=Ваша електронна пошта видима для всіх автентифікованих користувачів
+email_visibility.private=Вашу адресу електронної пошти бачитимете лише ви та адміністратори
show_on_map=Показати це місце на карті
settings=Налаштування користувача
@@ -563,15 +630,23 @@ form.name_pattern_not_allowed=Шаблон "%s" не дозволено в ім
block.block=Заблокувати
block.block.user=Заблокувати користувача
-block.block.org=Заблокувати користувача для організації
block.block.failure=Не вдалося заблокувати користувача: %s
block.unblock=Розблокувати
block.unblock.failure=Не вдалося розблокувати користувача: %s
block.blocked=Ви заблокували цього користувача.
block.title=Заблокувати користувача
block.info=Блокування користувача не дозволяє йому взаємодіяти зі сховищами, наприклад, відкривати або коментувати запити на злиття або задачі. Дізнайтеся більше про блокування користувача.
+block.info_1=Блокування користувача запобігає наступним діям у вашому обліковому записі та ваших сховищах:
block.info_2=слідкують за вашим обліковим записом
block.info_3=надсилати вам сповіщення @згадавши ваше ім'я
+block.info_6=відкриття та коментування задач або запитів на злиття
+block.user_to_block=Блокувати Користувача
+block.note=Примітка
+block.note.title=Необов’язкова примітка:
+block.note.info=Нотатка не видима для заблокованого користувача.
+block.note.edit=Редагувати нотатку
+block.list=Заблоковані користувачі
+block.list.none=Ви не заблокували жодного користувача.
[settings]
profile=Профіль
@@ -580,35 +655,49 @@ appearance=Зовнішній вигляд
password=Пароль
security=Безпека
avatar=Аватар
-ssh_gpg_keys=SSH / GPG ключі
+ssh_gpg_keys=Ключі SSH / GPG
social=Соціальні облікові записи
applications=Додатки
orgs=Керування організаціями
repos=Репозиторії
delete=Видалити обліковий запис
+twofa=Двофакторна автентифікація (TOTP)
account_link=Прив'язані облікові записи
organization=Організації
+uid=UID
+webauthn=Двофакторна автентифікація (ключі безпеки)
public_profile=Загальнодоступний профіль
+biography_placeholder=Розкажіть нам трохи про себе! (Ви можете використовувати Markdown)
+location_placeholder=Ділитися своїм приблизним географічним положенням з іншими
+password_username_disabled=Вам не дозволено змінювати ім'я користувача. Будь ласка, зв'яжіться з адміністратором сайту для отримання більш докладної інформації.
+password_full_name_disabled=Вам не дозволено змінювати ваше ім'я. Будь ласка, зв'яжіться з адміністратором сайту для більш докладної інформації.
full_name=Повне ім'я
website=Веб-сайт
location=Місцезнаходження
update_theme=Оновити тему
update_profile=Оновити профіль
update_language=Оновити мову
+update_language_not_found=Мова "%s" недоступна.
update_language_success=Мову оновлено.
update_profile_success=Профіль успішно оновлено.
-change_username=Ваше Ім'я кристувача було змінено.
+change_username=Ваше ім'я користувача змінено.
+change_username_prompt=Примітка: Зміна імені користувача також змінює URL-адресу облікового запису.
+change_username_redirect_prompt=Старе ім'я користувача буде перенаправлятися на нове, поки хтось не використає його.
continue=Продовжити
cancel=Відмінити
language=Мова
ui=Тема
+hidden_comment_types=Приховані типи коментарів
+hidden_comment_types.ref_tooltip=Коментарі, де на цю задачу було зроблено посилання з іншого випуску/коміту/…
+hidden_comment_types.issue_ref_tooltip=Коментарі, в яких користувач змінює гілку/тег, пов'язані з нею
comment_type_group_reference=Посилання
comment_type_group_label=Мітка
comment_type_group_milestone=Етап
comment_type_group_assignee=Виконавець
comment_type_group_title=Заголовок
comment_type_group_branch=Гілка
+comment_type_group_time_tracking=Облік часу
comment_type_group_deadline=Крайній строк
comment_type_group_dependency=Залежність
comment_type_group_lock=Статус блокування
@@ -623,13 +712,13 @@ keep_activity_private_popup=Показувати вашу активність
lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти
federated_avatar_lookup=Знайти зовнішній аватар
-enable_custom_avatar=Увімкнути користувацькі аватари
-choose_new_avatar=Оберіть новий аватар
+enable_custom_avatar=Увімкнути користувацький аватар
+choose_new_avatar=Обрати новий аватар
update_avatar=Оновити аватар
delete_current_avatar=Видалити поточний аватар
uploaded_avatar_not_a_image=Завантажений файл не є зображенням.
uploaded_avatar_is_too_big=Розмір завантаженого файлу (%d KiB) перевищує максимальний розмір (%d KiB).
-update_avatar_success=Ваш аватар був змінений.
+update_avatar_success=Ваш аватар оновлено.
update_user_avatar_success=Аватар користувача оновлено.
cropper_prompt=Ви можете відредагувати зображення перед збереженням. Відредаговане зображення буде збережено як PNG.
@@ -638,64 +727,64 @@ old_password=Поточний пароль
new_password=Новий пароль
retype_new_password=Підтвердити новий пароль
password_incorrect=Поточний пароль неправильний.
-change_password_success=Ваш пароль був оновлений. Тепер увійдіть в систему, використовуючи новий пароль.
-password_change_disabled=Нелокальні акаунти не можуть змінити пароль через Gitea.
+change_password_success=Ваш пароль оновлено. Відтепер входьте в систему, використовуючи новий пароль.
+password_change_disabled=Нелокальні користувачі не можуть оновити свій пароль через вебінтерфейс Gitea.
emails=Адреса електронної пошти
-manage_emails=Керування адресами ел. пошти
-manage_themes=Виберіть тему за замовчуванням
-manage_openid=Керування OpenID
+manage_emails=Керування адресами електронної пошти
+manage_themes=Обрати типову тему
+manage_openid=Керування адресами OpenID
+email_desc=Ваша основна адреса електронної пошти використовуватиметься для сповіщень, відновлення пароля і, за умови, що вона не прихована, для веб-операцій з Git.
theme_desc=Ця тема буде типовою для всього сайту.
primary=Основний
activated=Активовано
requires_activation=Потрібна активація
-primary_email=Зробити основним
+primary_email=Зробити основною
activate_email=Надіслати активацію
-activations_pending=Активації в очікуванні
+activations_pending=Очікування активації
delete_email=Видалити
email_deletion=Видалити адресу електронної пошти
-email_deletion_desc=Електронна адреса та пов'язана з нею інформація буде видалена з вашого облікового запису. Git коміти, здійснені через цю електронну адресу, залишиться без змін. Продовжити?
-email_deletion_success=Адресу електронної пошти було видалено.
+email_deletion_success=Адресу електронної пошти видалено.
theme_update_success=Тему оновлено.
-theme_update_error=Вибрана тема не існує.
+theme_update_error=Обрана тема не існує.
openid_deletion=Видалити адресу OpenID
-openid_deletion_desc=Видалення цієї OpenID-адреси з вашого облікового запису забороняє вам входити з ним. Продовжити?
-openid_deletion_success=Адреса OpenID була видалена.
+openid_deletion_desc=Видалення цієї адреси OpenID не дозволить вам увійти за нею. Продовжити?
+openid_deletion_success=Адресу OpenID видалено.
add_new_email=Додати нову адресу електронної пошти
add_new_openid=Додати новий OpenID URI
add_email=Додати адресу електронної пошти
add_openid=Додати OpenID URI
+add_email_confirmation_sent=Електронний лист із підтвердженням було відправлено на '%s', будь ласка, перевірте вашу поштову скриньку протягом наступних %s, щоб підтвердити адресу.
add_email_success=Додано нову адресу електронної пошти.
-email_preference_set_success=Налаштування електронної пошти успішно встановлені.
-add_openid_success=Нова адреса OpenID була додана.
+email_preference_set_success=Налаштування електронної пошти успішно встановлено.
+add_openid_success=Додано нову адресу OpenID.
keep_email_private=Приховати адресу електронної пошти
-openid_desc=OpenID дозволяє делегувати аутентифікацію зовнішньому постачальнику послуг.
+openid_desc=OpenID дозволяє делегувати автентифікацію зовнішньому постачальнику послуг.
-manage_ssh_keys=Керувати SSH ключами
-manage_ssh_principals=Управління SSH сертифікатами користувачів
-manage_gpg_keys=Керувати GPG ключами
+manage_ssh_keys=Керувати ключами SSH
+manage_ssh_principals=Керування ідентичностями сертифікатів SSH
+manage_gpg_keys=Керувати ключами SSH
add_key=Додати ключ
-ssh_desc=Ці відкриті SSH-ключі пов'язані з вашим обліковим записом. Відповідні приватні ключі дозволяють отримати повний доступ до ваших репозиторіїв.
-principal_desc=Ці настройки SSH сертифікатів вказані у вашому обліковому записі та надають повний доступ до ваших репозиторіїв.
-gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Тримайте свої приватні ключі в безпеці, оскільки вони дозволяють здійснювати перевірку комітів.
-ssh_helper=Потрібна допомога? Дивіться гід на GitHub з генерації ключів SSH або виправлення типових неполадок SSH .
-gpg_helper= Потрібна допомога? Перегляньте посібник GitHub про GPG .
-add_new_key=Додати SSH ключ
-add_new_gpg_key=Додати GPG ключ
+ssh_desc=Ці публічні ключі SSH пов'язані з вашим обліковим записом. Відповідні приватні ключі надають повний доступ до ваших сховищ.
+principal_desc=Ці ідентифікатори сертифікатів SSH прив'язані до вашого облікового запису і надають повний доступ до ваших сховищ.
+gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Зберігайте свої приватні ключі в безпеці, оскільки вони дозволяють підтверджувати коміти.
+ssh_helper=Потрібна допомога? Ознайомтеся з інструкцією GitHub щодо створення власних ключів SSH або виправлення типових неполадок SSH.
+gpg_helper=Потрібна допомога? Перегляньте посібник GitHub про GPG .
+add_new_key=Додати ключ SSH
+add_new_gpg_key=Додати ключ GPG
key_content_ssh_placeholder=Починається з 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com', або 'sk-ssh-ed25519@openssh.com'
key_content_gpg_placeholder=Починається з '-----BEGIN PGP PUBLIC KEY BLOCK-----'
-add_new_principal=Додати користувача
-ssh_key_been_used=Цей SSH ключ вже був додано до сервера.
+add_new_principal=Додати ідентичність
+ssh_key_been_used=Цей ключ SSH вже було додано до сервера.
ssh_key_name_used=Ключ SSH з таким ім'ям вже існує у вашому обліковому записі.
-ssh_principal_been_used=Цей користувач вже був доданий на сервер.
+ssh_principal_been_used=Цю ідентичність вже було додано до сервера.
gpg_key_id_used=Публічний ключ GPG з таким самим ідентифікатором вже існує.
-gpg_no_key_email_found=Цей ключ GPG не відповідає жодній активованій поштовій адресі, яка пов'язана з вашим обліковим записом. Його все рівно можна додати, якщо ви підпишете наданий токен.
-gpg_key_matched_identities=Відповідні отримувачі:
-gpg_key_matched_identities_long=Вбудовані ідентифікатори цього ключа збігаються з наступними активованими адресами електронної пошти вказаного користувача. Коміти, які відповідають цим адресам, можуть бути підтверджені цим ключем.
+gpg_no_key_email_found=Цей ключ GPG не відповідає жодній активованій адресі електронної пошти, пов'язаній з вашим обліковим записом. Його все одно можна додати, якщо ви підпишете наданий токен.
+gpg_key_matched_identities=Відповідні ідентичності:
+gpg_key_matched_identities_long=Вбудовані ідентифікатори цього ключа збігаються з наступними активованими адресами електронної пошти цього користувача. За допомогою цього ключа можна перевіряти коміти, що відповідають цим адресам електронної пошти.
gpg_key_verified=Перевірений ключ
-gpg_key_verified_long=Ключ перевірений за допомогою токена і може бути використано для підтвердження комітів, які відповідають будь-якій з активованих адрес електронної пошти для цього користувача, на додачу до будь-яких відповідних ідентифікацій для цього ключа.
+gpg_key_verified_long=Ключ був перевірений токеном і може бути використаний для перевірки комітів, що відповідають будь-яким активованим адресам електронної пошти для цього користувача, а також будь-яких ідентифікаторів, що відповідають цьому ключу.
gpg_key_verify=Підтвердити
-gpg_invalid_token_signature=Наданий ключ GPG, підпис і токен не співпадають або токен застарів.
gpg_token_required=Вам потрібно надати підпис для нижчевказаного токена
gpg_token=Токен
gpg_token_help=Ви можете створити підпис за допомогою:
@@ -703,261 +792,299 @@ gpg_token_signature=Текстовий (armored) підпис GPG
key_signature_gpg_placeholder=`Починається з "-----BEGIN PGP SIGNATURE-----"`
verify_gpg_key_success=Ключ GPG '%s' перевірено.
ssh_key_verified=Перевірений ключ
-ssh_key_verify=Підтвердити
+ssh_key_verified_long=Ключ було перевірено за допомогою токена. Його можна використовувати для перевірки комітів, що відповідають будь-яким активованим адресам електронної пошти цього користувача.
+ssh_key_verify=Перевірити
ssh_token_required=Вам потрібно надати підпис для нижчевказаного токена
ssh_token=Токен
ssh_token_help=Ви можете створити підпис за допомогою:
+ssh_token_signature=Текстовий підпис SSH
+key_signature_ssh_placeholder=`Починається з "-----BEGIN SSH SIGNATURE-----"`
verify_ssh_key_success=Ключ SSH '%s' перевірено.
subkeys=Підключі
-key_id=ID ключа
-key_name=Ім'я ключа
+key_id=Ідентифікатор ключа
+key_name=Назва ключа
key_content=Зміст
principal_content=Зміст
-add_key_success=SSH ключ '%s' додано.
-add_gpg_key_success=GPG ключ '%s' додано.
+add_key_success=Ключ SSH '%s' додано.
+add_gpg_key_success=Ключ GPG '%s' додано.
+add_principal_success=Було додано SSH сертифікат ідентичності '%s'.
delete_key=Видалити
-ssh_key_deletion=Видалити SSH ключ
-gpg_key_deletion=Видалити GPG ключ
-ssh_principal_deletion=Видалити SSH сертифікат користувача
+ssh_key_deletion=Видалити ключ SSH
+gpg_key_deletion=Видалити ключ GPG
+ssh_principal_deletion=Видалити ідентичність сертифікату SSH
ssh_key_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити?
-gpg_key_deletion_desc=Видалення GPG ключа скасовує перевірку підписаних ним комітів. Продовжити?
-ssh_principal_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити?
-ssh_key_deletion_success=SSH ключ був видалений.
-gpg_key_deletion_success=GPG було видалено.
-ssh_principal_deletion_success=Користувача видалено.
+gpg_key_deletion_desc=Видалення ключа GPG скасовує перевірку підписаних ним комітів. Продовжити?
+ssh_key_deletion_success=Ключ SSH видалено.
+gpg_key_deletion_success=Ключ GPG видалено.
+ssh_principal_deletion_success=Ідентичність видалено.
added_on=Додано %s
valid_until_date=Дійсно до %s
valid_forever=Дійсний завжди
-last_used=Останнє використання
-no_activity=Жодної діяльності
-can_read_info=Читати
-can_write_info=Написати
-key_state_desc=Цей ключ використовувався в останні 7 днів
-token_state_desc=Цей токен використовувався в останні 7 днів
-principal_state_desc=Участник був на сайті в останні 7 днів
+last_used=Востаннє використано
+no_activity=Нещодавня активність відсутня
+can_read_info=Читання
+can_write_info=Запис
+key_state_desc=Цей ключ використовувався протягом останніх 7 днів
+token_state_desc=Цей токен використовувався протягом останніх 7 днів
+principal_state_desc=Ця ідентичність використовувалася протягом останніх 7 днів
show_openid=Показати у профілю
-hide_openid=Не показувати у профілі
+hide_openid=Приховати з профілю
ssh_disabled=SSH вимкнено
ssh_signonly=SSH наразі вимкнено, тому ці ключі використовуються лише для перевірки підпису комітів.
-ssh_externally_managed=Цей ключ SSH має зовнішнє управління для цього користувача
-manage_social=Керувати зв'язаними обліковими записами соціальних мереж
+ssh_externally_managed=Цей ключ SSH керується ззовні для цього користувача
+manage_social=Керувати пов'язаними обліковими записами соціальних мереж
+social_desc=Ці облікові записи соціальних мереж можна використовувати для входу в ваш обліковий запис. Переконайтеся, що всі вони належать вам.
unbind=Від'єднати
+unbind_success=Соціальний обліковий запис успішно видалено.
-manage_access_token=Керування токенами доступу
-generate_new_token=Згенерувати новий токен
-tokens_desc=Ці токени надають доступ до вашого облікового запису за допомогою Gitea API.
-token_name=Ім'я токену
+manage_access_token=Керувати токенами доступу
+generate_new_token=Створити новий токен
+tokens_desc=Ці токени надають доступ до вашого облікового запису за допомогою API Gitea.
+token_name=Назва токену
generate_token=Згенерувати токен
-generate_token_success=Ваш новий токен був створений. Скопіюйте його зараз, оскільки він не буде показаний знову.
+generate_token_success=Ваш новий токен створено. Скопіюйте його зараз, оскільки він не буде показаний знову.
generate_token_name_duplicate=Назва програми %s вже використовується. Будь ласка, використайте нову.
delete_token=Видалити
access_token_deletion=Видалити токен доступу
access_token_deletion_cancel_action=Відмінити
access_token_deletion_confirm_action=Видалити
-delete_token_success=Токен був знищений. Програми, що використовують його, більше не мають доступу до вашого облікового запису.
+access_token_deletion_desc=Видалення токена призведе до відкликання доступу до вашого облікового запису для додатків, які його використовують. Це неможливо скасувати. Продовжити?
+delete_token_success=Токен знищено. Додатки, що використовують його, більше не мають доступу до вашого облікового запису.
+repo_and_org_access=Доступ до сховища та організації
+permissions_public_only=Лише загальнодоступні
permissions_access_all=Всі (загальнодоступні, приватні та з обмеженим доступом)
permission_not_set=Не встановлено
permission_no_access=Немає доступу
-permission_read=Прочитані
+permission_read=Читання
permission_write=Читання і запис
permission_anonymous_read=Анонімне читання
-permission_everyone_read=Усі читають
-permission_everyone_write=Усі пишуть
+permission_everyone_read=Читання для всіх
+permission_everyone_write=Запис для всіх
+access_token_desc=Обрані дозволи токена обмежують авторизацію лише відповідними маршрутами API . Читайте документацію для отримання додаткової інформації.
+at_least_one_permission=Необхідно вибрати хоча б одне право доступу для створення токена
+permissions_list=Дозволи:
-manage_oauth2_applications=Керування програмами OAuth2
-edit_oauth2_application=Редагувати програму OAuth2
-oauth2_applications_desc=Програми OAuth2 дають можливість вашим стороннім програмам надійно аутентифікувати користувачів у цьому екземплярі Gitea.
-remove_oauth2_application=Видалити програму OAuth2
-remove_oauth2_application_desc=Видалення програми OAuth2 скасовує доступ до всіх підписаних маркерів доступу. Продовжити?
-remove_oauth2_application_success=Програму видалено.
-create_oauth2_application=Створити нову програму OAuth2
-create_oauth2_application_button=Створити програму
+manage_oauth2_applications=Керування додатками OAuth2
+edit_oauth2_application=Редагувати додаток OAuth2
+oauth2_applications_desc=Додатки OAuth2 дозволяють вашому сторонньому додатку безпечно автентифікувати користувачів у цьому екземплярі Gitea.
+remove_oauth2_application=Видалити додаток OAuth2
+remove_oauth2_application_desc=Видалення додатка OAuth2 скасує доступ до всіх підписаних токенів доступу. Продовжити?
+remove_oauth2_application_success=Додаток видалено.
+create_oauth2_application=Створити новий додаток OAuth2
+create_oauth2_application_button=Створити додаток
create_oauth2_application_success=Ви успішно створили новий додаток OAuth2.
update_oauth2_application_success=Ви успішно оновили додаток OAuth2.
-oauth2_application_name=Назва програми
+oauth2_application_name=Назва додатка
+oauth2_skip_secondary_authorization=Пропустити авторизацію для публічних клієнтів після надання доступу один раз. Може становити ризик для безпеки.
+oauth2_redirect_uris=URI для перенаправлення. Будь ласка, використовуйте новий рядок для кожного URI.
save_application=Зберегти
-oauth2_client_id=ID Клієнта
+oauth2_client_id=Ідентифікатор клієнта
oauth2_client_secret=Ключ клієнта
oauth2_regenerate_secret=Відновити ключ
-oauth2_regenerate_secret_hint=Ви втратили свій ключ?
+oauth2_regenerate_secret_hint=Втратили ключ?
oauth2_application_edit=Редагувати
oauth2_application_create_description=Програми OAuth2 надають вашим стороннім програмам доступ до облікових записів користувачів у цьому екземплярі.
+oauth2_application_remove_description=Видалення OAuth2 не дозволить додатку отримати доступ до авторизованих облікових записів користувачів на цьому сервері. Продовжити?
+oauth2_application_locked=Gitea попередньо реєструє деякі програми OAuth2 під час запуску, якщо це ввімкнено в конфігурації. Щоб запобігти несподіваній поведінці, їх не можна ні редагувати, ні видаляти. Для отримання додаткової інформації зверніться до документації OAuth2.
authorized_oauth2_applications=Авторизовані програми OAuth2
revoke_key=Відкликати
revoke_oauth2_grant=Скасувати доступ
-revoke_oauth2_grant_description=Скасування доступу для цієї програми третьої сторони не дозволить їй отримувати доступ до ваших даних. Ви впевнені?
+revoke_oauth2_grant_success=Доступ успішно скасовано.
-twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію.
-twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікаціїю.
+twofa_desc=Щоб захистити свій обліковий запис від крадіжки пароля, ви можете використовувати смартфон або інший пристрій для отримання одноразових паролів, прив'язаних до часу (TOTP).
+twofa_recovery_tip=Якщо ви втратите свій пристрій, ви зможете скористатися одноразовим ключем відновлення, щоб відновити доступ до свого облікового запису.
+twofa_is_enrolled=Ваш обліковий запис наразі використовує двофакторну автентифікацію.
+twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікацію.
twofa_disable=Вимкнути двофакторну автентифікацію
-twofa_enroll=Увімкнути двофакторну автентифікацію
-twofa_disable_note=При необхідності можна відключити двофакторну автентифікацію.
+twofa_scratch_token_regenerate=Регенерувати одноразовий ключ відновлення
+twofa_scratch_token_regenerated=Ваш одноразовий ключ відновлення тепер %s. Зберігайте його у безпечному місці, оскільки його більше не буде показано.
+twofa_disable_note=За потреби ви можете вимкнути двофакторну автентифікацію.
twofa_disable_desc=Вимкнення двофакторної автентифікації зробить ваш обліковий запис менш безпечним. Продовжити?
-twofa_disabled=Двофакторна автентифікація вимкнена.
-scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної автентифікації:
-or_enter_secret=Або введіть секрет: %s
+regenerate_scratch_token_desc=Якщо ви втратили ключ відновлення або вже використовували його для входу, ви можете скинути його тут.
+twofa_disabled=Двофакторну автентифікацію вимкнено.
+scan_this_image=Відскануйте це зображення вашим додатком для двофакторної автентифікації:
+or_enter_secret=Або введіть код: %s
then_enter_passcode=І введіть пароль, який відображається в додатку:
passcode_invalid=Некоректний пароль. Спробуй ще раз.
-twofa_failed_get_secret=Не вдалося отримати секрет.
+twofa_failed_get_secret=Не вдалося отримати код.
+webauthn_register_key=Додати ключ безпеки
+webauthn_nickname=Псевдонім
+webauthn_delete_key=Видалити ключ безпеки
+webauthn_key_loss_warning=Якщо ви втратите ключі безпеки, ви втратите доступ до свого облікового запису.
+webauthn_alternative_tip=Ви можете налаштувати додатковий метод автентифікації.
-manage_account_links=Керування обліковими записами
-manage_account_links_desc=Ці зовнішні акаунти прив'язані до вашого аккаунту Gitea.
-account_links_not_available=Наразі немає зовнішніх облікових записів, пов'язаних із вашим обліковим записом Gitea.
+manage_account_links=Керування прив'язаними обліковими записами
+manage_account_links_desc=Ці зовнішні облікові записи прив'язані до вашого облікового запису Gitea.
link_account=Прив'язати обліковий запис
-remove_account_link=Видалити облікові записи
+remove_account_link=Видалити обліковий запис
remove_account_link_desc=Видалення пов'язаного облікового запису відкликає його доступ до вашого облікового запису Gitea. Продовжити?
-remove_account_link_success=Зв'язаний обліковий запис видалено.
+remove_account_link_success=Прив'язаний обліковий запис видалено.
+hooks.desc=Додайте веб-хуки, які запускатимуться для усіх репозиторіїв , якими ви володієте.
-orgs_none=Ви не є учасником будь-якої організації.
+orgs_none=Ви не є членом організації.
+repos_none=У вас немає сховищ.
-delete_account=Видалити ваш обліковий запис
-delete_prompt=Ця операція остаточно видалить обліковий запис користувача. Це НЕ МОЖЛИВО відмінити.
-delete_with_all_comments=Ваш обліковий запис молодший за %s днів. Щоб уникнути коментарів-привидів, всі запити/PR коментрарі будуть видалені з ним.
-confirm_delete_account=Підтвердження видалення
-delete_account_title=Видалити цей обліковий запис
+delete_account=Видалити обліковий запис
+delete_prompt=Ця операція остаточно видалить ваш обліковий запис. Її НЕ МОЖЛИВО скасувати.
+delete_with_all_comments=Ваш обліковий запис молодший за %s днів. Щоб уникнути коментарів-привидів, усі ваші коментарі будуть видалені разом з ним.
+confirm_delete_account=Підтвердити видалення
+delete_account_title=Видалити обліковий запис
delete_account_desc=Ви впевнені, що хочете остаточно видалити цей обліковий запис?
-email_notifications.enable=Увімкнути сповіщення email
-email_notifications.onmention=Повідомлення email тільки коли згадують
-email_notifications.disable=Вимкнути email сповіщення
-email_notifications.submit=Налаштувати параметри email
+email_notifications.enable=Увімкнути сповіщення електронною поштою
+email_notifications.onmention=Повідомляти електронною поштою коли згадують
+email_notifications.disable=Вимкнути сповіщення електронною поштою
+email_notifications.submit=Налаштувати параметри електронної пошти
+email_notifications.andyourown=І ваші власні повідомлення
visibility=Видимість користувача
visibility.public=Публічний
visibility.limited=Обмежений
+visibility.limited_tooltip=Доступно лише для авторизованих користувачів
visibility.private=Приватний
+visibility.private_tooltip=Доступно лише для членів організацій, до яких ви долучилися
[repo]
+new_repo_helper=Сховище містить усі файли проєкту, включно з історією ревізій. Ви вже розміщуєте його деінде? Перенести сховище.
owner=Власник
-owner_helper=Деякі організації можуть не відображатися у випадаючому списку через максимальну кількість репозиторііїв.
-repo_name=Назва репозиторію
-repo_size=Розмір репозиторію
+owner_helper=Деякі організації можуть не відображатися у списку через обмеження на максимальну кількість сховищ.
+repo_name=Назва сховища
+repo_name_helper=У хороших назвах сховищ використовуються короткі ключові слова, які легко запам'ятовуються та є унікальними. Сховище з назвою «.profile» або «.profile-private» можна використовувати для додавання README.md для профілю користувача/організації.
+repo_size=Розмір сховища
template=Шаблон
-template_select=Оберіть шаблон.
-template_helper=Зробити репозиторій шаблоном
-template_description=Шаблонні репозиторії дозволяють користувачам генерувати нові репозиторії із такою ж структурою директорій, файлами та додатковими налаштуваннями.
+template_select=Обрати шаблон.
+template_helper=Зробити сховище шаблоном
+template_description=Шаблонні сховища дозволяють користувачам створювати нові сховища з такою ж структурою каталогів, файлами та додатковими налаштуваннями.
visibility=Видимість
-visibility_description=Тільки власник або члени організації які мають віповідні права, зможуть побачити.
+visibility_description=Тільки власник або члени організації, якщо вони мають дозвіл, зможуть його побачити.
visibility_helper=Зробити сховище приватним
visibility_helper_forced=Адміністратор вашого сайту налаштував параметри: всі нові репозиторії будуть приватними.
visibility_fork_helper=(Ці зміни вплинуть на всі форки.)
clone_helper=Потрібна допомога у клонуванні? Відвідайте сторінку Допомога .
fork_repo=Форкнути репозиторій
fork_from=Форк з
-fork_visibility_helper=Неможливо змінити видимість форкнутого репозиторію.
+fork_visibility_helper=Неможливо змінити видимість розгалуженого сховища.
all_branches=Усі гілки
view_all_branches=Переглянути всі гілки
+view_all_tags=Переглянути всі мітки
use_template=Застосувати цей шаблон
open_with_editor=Відкрити в %s
download_zip=Завантажити ZIP
download_tar=Завантажити TAR.GZ
download_bundle=Завантажити BUNDLE
-generate_repo=Згенерувати репозиторій
-generate_from=Генерувати з
+generate_repo=Створити сховище
+generate_from=Створити з
repo_desc=Опис
-repo_desc_helper=Введіть короткий опис (опціонально)
+repo_desc_helper=Введіть короткий опис (необов'язково)
repo_no_desc=Немає опису
repo_lang=Мови
-repo_gitignore_helper=Виберіть шаблон .gitignore.
-repo_gitignore_helper_desc=Оберіть з списку мовних шаблонів файли, які не будуть відстежуватись. Типові артефакти, які генеруються за допомогою інструментів побудови кожної мови, за замовчуванням включені до .gitignor.
+repo_gitignore_helper=Обрати шаблон .gitignore.
+repo_gitignore_helper_desc=Оберіть з списку мовних шаблонів файли, які не слід відстежувати. Типові артефакти, що генеруються інструментами збірки кожної мови, за замовчуванням включені до .gitignor.
issue_labels=Мітки задачі
-issue_labels_helper=Вибрати мітку для задачі.
+issue_labels_helper=Виберіть набір міток задачі.
license=Ліцензія
-license_helper=Виберіть ліцензійний файл.
-license_helper_desc=Ліцензія регулює те, що інші можуть і не можуть робити з вашим кодом. Не впевнені, що саме підходить для вашого проєкту? Дивіться Виберіть ліцензію.
+license_helper=Обрати файл ліцензії.
+license_helper_desc=Ліцензія визначає, що інші можуть робити з вашим кодом, а що ні. Не впевнені, яка підходить для вашого проєкту? Дивіться Вибір ліцензії.
multiple_licenses=Кілька ліцензій
object_format=Формат об'єкту
+object_format_helper=Формат об'єкту сховища. Неможливо буде змінити пізніше. SHA1 є найбільш сумісним.
readme=README
readme_helper=Виберіть шаблон README.
-readme_helper_desc=Це місце, де ви можете написати повний опис вашого проєкту.
-auto_init=Ініціалізувати репозиторій (Додає .gitignore, LICENSE та README)
+readme_helper_desc=Тут ви можете повністю описати ваш проєкт.
+auto_init=Ініціалізувати сховище (додає файли .gitignore, ліцензію та README)
trust_model_helper=Виберіть модель довіри для підтвердження підпису. Можливі варіанти:
-trust_model_helper_collaborator=Співавтор: підписи довіри від співавторів
-trust_model_helper_committer=Учасник: довірені підписи участників
-trust_model_helper_collaborator_committer=Співавтор+Комітер: довірчі підписи від співавторів, які відповідають комітеру
-trust_model_helper_default=За замовчуванням: використовувати стандартну модель довіри для цієї установки
-create_repo=Створити репозиторій
+trust_model_helper_collaborator=Співавтор: довіряти підписам співавторів
+trust_model_helper_committer=Комітер: довіряти підписам, які відповідають комітерам
+trust_model_helper_collaborator_committer=Співавтор+Комітер: довіряти підписам співавторів, які відповідають комітеру
+trust_model_helper_default=Типово: використовувати стандартну модель довіри для цієї установки
+create_repo=Створити сховище
default_branch=Головна гілка
default_branch_label=типово
-default_branch_helper=Гілка за замовчуванням є базовою гілкою для запитів на злиття та комітів коду.
+default_branch_helper=Типова гілка є базовою гілкою для запитів на злиття та комітів.
mirror_prune=Очистити
-mirror_prune_desc=Видалення застарілих посилань які ви відслідковуєте
-mirror_interval_invalid=Інтервал дзеркалювання є неприпустимим.
+mirror_prune_desc=Видалити застарілі посилання на віддалені відстеження
+mirror_interval=Інтервал дзеркалювання (допустимі одиниці виміру часу 'h', 'm', 's'). 0 - щоб вимкнути періодичну синхронізацію. (Мінімальний інтервал: %s)
+mirror_interval_invalid=Інтервал дзеркалювання недійсний.
mirror_sync=синхронізовано
mirror_sync_on_commit=Синхронізувати, коли надсилаються коміти
-mirror_address=Клонування з URL-адреси
-mirror_address_desc=Помістіть будь-які необхідні облікові дані у розділі Авторизація.
-mirror_lfs=Склад великих файлів (LFS)
-mirror_lfs_desc=Активувати дзеркальне відображення даних LFS.
+mirror_address=Клонувати з URL-адреси
+mirror_address_desc=Введіть необхідні облікові дані в розділі Авторизація.
+mirror_address_protocol_invalid=URL-адреса недійсна. Допустимі лише адреси http(s):// або git://.
+mirror_lfs=Сховище великих файлів (LFS)
+mirror_lfs_desc=Активувати дзеркалювання даних LFS.
mirror_lfs_endpoint=Кінцева точка LFS
-mirror_lfs_endpoint_desc=Синхронізація спробує використовувати url для клону щоб визначити LFS-сервер . Ви також можете вказати кінцеву точку користувача, якщо дані репозиторію LFS зберігаються в іншому місці.
mirror_last_synced=Остання синхронізація
mirror_password_placeholder=(без змін)
-mirror_password_blank_placeholder=(відключено)
+mirror_password_blank_placeholder=(Не встановлено)
mirror_password_help=Змініть ім'я користувача, щоб видалити збережений пароль.
watchers=Спостерігачі
-stargazers=Зацікавлені
+stargazers=Шанувальники
stars_remove_warning=Це видалить усі зірки з цього сховища.
forks=Форки
stars=Зірки
-reactions_more=додати %d більше
-unit_disabled=Адміністратор сайту вимкнув цей розділ репозиторію.
+reactions_more=і ще %d
+unit_disabled=Адміністратор сайту вимкнув цей розділ сховища.
language_other=Інші
-adopt_search=Введіть ім'я користувача для пошуку неприйнятних репозиторіїв... (залиште порожнім, щоб знайти всі)
-adopt_preexisting_label=Прийняті файли
-adopt_preexisting=Прийняти вже існуючі файли
-adopt_preexisting_content=Створити репозиторій з %s
-adopt_preexisting_success=Прийняти файли та створити репозиторій з %s
+adopt_preexisting_label=Прийняти файли
+adopt_preexisting=Прийняти попередньо створені файли
+adopt_preexisting_content=Створити сховище з %s
+adopt_preexisting_success=Прийняти файли та створити сховище з %s
delete_preexisting_label=Видалити
-delete_preexisting=Видалити існуючі файли
+delete_preexisting=Видалити попередньо створені файли
delete_preexisting_content=Видалити файли з %s
delete_preexisting_success=Видалено неприйняті файли в %s
blame_prior=Переглянути анотацію, що передує цій зміні
+blame.ignore_revs.failed=Не вдалося проігнорувати ревізії у .git-blame-ignore-revs .
user_search_tooltip=Показує не більше 30 користувачів
tree_path_not_found=Шлях %[1]s не існує в %[2]s
-transfer.accept=Дозволити трансфер
+transfer.accept=Дозволити переміщення
transfer.accept_desc=`Перемістити до "%s"`
-transfer.reject=Відхилити трансфер
+transfer.reject=Відхилити переміщення
transfer.reject_desc=`Скасувати переміщення до "%s"`
+transfer.no_permission_to_accept=У вас немає дозволу приймати цю передачу.
+transfer.no_permission_to_reject=У вас немає дозволу на відхилення цієї передачі.
desc.private=Приватний
desc.public=Публічний
desc.public_access=Публічний доступ
desc.template=Шаблон
desc.internal=Внутрішній
-desc.archived=Архівний
+desc.archived=Архівований
desc.sha256=SHA256
template.items=Елементи шаблону
template.git_content=Вміст Git (типова гілка)
-template.git_hooks=Перехоплювачі Git
-template.webhooks=Webhook'и
+template.git_hooks=Хуки Git
+template.git_hooks_tooltip=Наразі ви не можете змінювати або видаляти Git-хуки після їх додавання. Виберіть це лише якщо ви довіряєте сховищу шаблонів.
+template.webhooks=Веб-хуки
template.topics=Теми
template.avatar=Аватар
template.issue_labels=Мітки задачі
template.one_item=Слід обрати хоча б один елемент шаблону
-template.invalid=Слід обрати шаблонний репозиторій
+template.invalid=Слід обрати шаблонне сховище
-archive.issue.nocomment=Цей репозиторій архівовано. Ви не можете коментувати задачі.
-archive.pull.nocomment=Це архівний репозитарій. Ви не можете коментувати пулл-реквести.
+archive.issue.nocomment=Це сховище архівовано. Ви не можете коментувати задачі.
+archive.pull.nocomment=Це сховище архівовано. Ви не можете коментувати запити на злиття.
-form.reach_limit_of_creation_1=Ви вже досягли ліміту в %d репозиторіїв.
-form.reach_limit_of_creation_n=Ви досягли максимальної кількості %d створених репозиторіїв.
+form.reach_limit_of_creation_1=Ви досягли максимальної кількості %d сховища.
+form.reach_limit_of_creation_n=Ви досягли максимальної кількості %d сховищ.
+form.name_reserved=Назву сховища '%s' зарезервовано.
+form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві сховища.
need_auth=Авторизація
migrate_options=Параметри міграції
migrate_service=Сервіс міграції
migrate_options_mirror_helper=Це сховище буде дзеркалом
-migrate_options_lfs=Перенесення LFS файлів
+migrate_options_lfs=Перенесення файлів LFS
migrate_options_lfs_endpoint.label=Кінцева точка LFS
-migrate_options_lfs_endpoint.description=Міграція буде намагатися використовувати ваш Git віддалено, щоб визначати LFS сервер . Ви також можете вказати свою кінцеву точку, якщо дані репозиторію LFS зберігаються в іншому місці.
-migrate_options_lfs_endpoint.description.local=Також підтримуються шляхи на локальному сервері.
-migrate_items=Деталі міграції
+migrate_options_lfs_endpoint.description=Міграція спробує використати ваш Git віддалено, щоб визначати сервер LFS . Ви також можете вказати власну кінцеву точку, якщо дані сховища LFS зберігаються в іншому місці.
+migrate_options_lfs_endpoint.description.local=Також підтримується шлях до локального сервера.
+migrate_items=Елементи міграції
migrate_items_wiki=Вікі
migrate_items_milestones=Етапи
migrate_items_labels=Мітки
@@ -967,27 +1094,31 @@ migrate_items_merge_requests=Запити на злиття
migrate_items_releases=Релізи
migrate_repo=Перенести репозиторій
migrate.clone_address=Міграція / клонувати з URL-адреси
-migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого репозиторія
+migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого сховища
migrate.clone_local_path=або шлях до локального серверу
migrate.permission_denied=Вам не дозволено імпортувати локальні репозиторії.
-migrate.permission_denied_blocked=Ви не можете імпортувати з заборонених вузлів, будь ласка, попросіть адміністратора перевірити налаштування ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
-migrate.invalid_lfs_endpoint=Помилкова кінцева точка LFS.
+migrate.invalid_local_path=Локальний шлях недійсний. Він не існує або не є каталогом.
+migrate.invalid_lfs_endpoint=Кінцева точка LFS недійсна.
migrate.failed=Міграція не вдалася: %v
migrate.migrate_items_options=Для перенесення додаткових елементів потрібен токен доступу
migrated_from=Перенесено з %[2]s
migrated_from_fake=Перенесено з %[1]s
-migrate.migrate=Міграція з %s
-migrate.migrating=Міграція із %s ...
+migrate.migrate=Мігрувати з %s
migrate.migrating_failed=Міграція із %s не вдалася.
migrate.migrating_failed.error=Не вдалося перенести: %s
migrate.migrating_failed_no_addr=Міграція не вдалася.
-migrate.git.description=Перенесення лише репозиторію з будь-якої служби Git.
+migrate.github.description=Перенести дані з github.com чи інших серверів Github.
+migrate.git.description=Перенести сховище з будь-якого сервісу Git'у.
migrate.gitlab.description=Перенести дані з gitlab.com та інших екземплярів GitLab.
migrate.gitea.description=Перенести дані з gitea.com та інших екземплярів Gitea.
migrate.gogs.description=Перенести дані з notabug.org та інших екземплярів Gogs.
migrate.onedev.description=Перенести дані з code.onedev.io та інших екземплярів OneDev.
migrate.codebase.description=Перенести дані з codebasehq.com.
migrate.gitbucket.description=Перенести дані з екземплярів GitBucket.
+migrate.codecommit.description=Перенесення даних з AWS CodeCommit.
+migrate.codecommit.aws_access_key_id=ID ключа доступу AWS
+migrate.codecommit.https_git_credentials_username=Ім’я користувача HTTPS Git
+migrate.codecommit.https_git_credentials_password=Пароль користувача HTTPS Git
migrate.migrating_git=Міграція Git даних
migrate.migrating_topics=Міграція тем
migrate.migrating_milestones=Міграція етапів
@@ -995,26 +1126,32 @@ migrate.migrating_labels=Міграція міток
migrate.migrating_releases=Міграція релізів
migrate.migrating_issues=Міграція задач
migrate.migrating_pulls=Міграція запитів на злиття
+migrate.cancel_migrating_title=Скасувати міграцію
+migrate.cancel_migrating_confirm=Ви хочете скасувати міграцію?
+migration_status=Cтатус міграції
mirror_from=дзеркало
forked_from=форк від
generated_from=згенеровано з
-fork_from_self=Ви не можете форкнути репозиторій, так як ви його власник.
+fork_from_self=Ви не можете форкнути власне сховище.
fork_guest_user=Увійдіть, щоб зробити форк репозитарію.
watch_guest_user=Увійдіть, щоб слідкувати за цим репозиторієм.
star_guest_user=Увійдіть, щоб додати в обране цей репозиторій.
unwatch=Не стежити
-watch=Слідкувати
+watch=Стежити
unstar=Видалити із обраних
star=В обрані
fork=Форк
+action.blocked_user=Неможливо виконати дію, оскільки ви заблоковані власником сховища.
download_archive=Скачати репозиторій
+more_operations=Інші операції
quick_guide=Короткий посібник
clone_this_repo=Кнонувати цей репозиторій
+cite_this_repo=Послатися на це сховище
create_new_repo_command=Створити новий репозиторій з командного рядка
push_exist_repo=Опублікувати існуючий репозиторій з командного рядка
-empty_message=Цей репозиторій порожній.
+broken_message=Неможливо прочитати дані Git, що лежать в основі цього сховища. Зверніться до адміністратора сервера або видаліть сховище.
code=Код
code.desc=Доступ до коду, файлів, комітів та гілок.
@@ -1028,25 +1165,36 @@ tags=Теги
issues=Задачі
pulls=Запити на злиття
projects=Проєкти
+packages=Пакети
+actions=Дії
labels=Мітки
-org_labels_desc=Мітки рівня організації можуть використовуватися в усіх репозиторіях цієї організації
org_labels_desc_manage=керувати
milestone=Етап
-milestones=Етап
+milestones=Етапи
commits=Коміти
commit=Коміт
release=Реліз
releases=Релізи
tag=Тег
-released_this=випущені релізи
+released_this=випустив(-ла)
+file.title=%s в %s
file_raw=Неформатований
file_history=Історія
file_view_source=Переглянути вихідний код
-file_view_rendered=Переглянути відрендерено
file_view_raw=Перегляд Raw
file_permalink=Постійне посилання
-file_too_large=Цей файл завеликий щоб бути показаним.
+file_too_large=Файл занадто великий для відображення.
+file_is_empty=Файл порожній.
+code_preview_line_from_to=Рядки від %[1]d до %[2]d в %[3]s
+code_preview_line_in=Рядок %[1]d в %[2]s
+invisible_runes_header=`Цей файл містить невидимі символи Юнікоду`
+invisible_runes_description=`Цей файл містить невидимі символи Юнікоду, які не розрізняються людиною, але можуть по-різному оброблятися комп'ютером. Якщо ви вважаєте, що це зроблено навмисно, можете сміливо ігнорувати це попередження. Щоб показати їх, скористайтеся кнопкою Escape.`
+ambiguous_runes_header=`Цей файл містить неоднозначні символи Юнікоду`
+ambiguous_runes_description=`Цей файл містить символи Юнікоду, які можна сплутати з іншими символами. Якщо ви вважаєте, що це зроблено навмисно, можете сміливо ігнорувати це попередження. Щоб показати їх, скористайтеся кнопкою Escape.`
+invisible_runes_line=`Цей рядок містить невидимі символи Юнікоду`
+ambiguous_runes_line=`Цей рядок містить неоднозначні символи Юнікоду`
+ambiguous_character=`%[1]c [U+%04[1]X] можна сплутати з %[2]c [U+%04[2]X]`
escape_control_characters=Екранувати
unescape_control_characters=Відмінити екранування
@@ -1059,10 +1207,12 @@ generated=Створено
commit_graph=Графік комітів
commit_graph.select=Виберіть гілки
commit_graph.hide_pr_refs=Приховати запити на злиття
-commit_graph.monochrome=Монохром
+commit_graph.monochrome=Монохромний
commit_graph.color=Колір
commit.contained_in=Цей коміт міститься в:
-blame=Звинувачення
+commit.contained_in_default_branch=Цей коміт є частиною типової гілки
+commit.load_referencing_branches_and_tags=Завантажити гілки та мітки, які посилаються на цей коміт
+blame=Анотація
download_file=Завантажити файл
normal_view=Звичайний вигляд
line=рядок
@@ -1072,68 +1222,91 @@ from_comment=(коментар)
editor.add_file=Додати файл
editor.new_file=Новий файл
editor.upload_file=Завантажити файл
-editor.edit_file=Редагування файлу
+editor.edit_file=Редагувати файл
editor.preview_changes=Попередній перегляд змін
editor.cannot_edit_lfs_files=Файли LFS не можна редагувати в веб-інтерфейсі.
+editor.cannot_edit_too_large_file=Файл занадто великий для редагування.
editor.cannot_edit_non_text_files=Бінарні файли не можливо редагувати у веб-інтерфейсі.
+editor.file_not_editable_hint=Але ви все ще можете перейменувати або перемістити його.
editor.edit_this_file=Редагувати файл
editor.this_file_locked=Файл заблоковано
-editor.must_be_on_a_branch=Ви повинні бути у гілці щоб зробити, або запропонувати зміни до цього файлу.
-editor.fork_before_edit=Необхідно зробити форк цього репозиторій, щоб внести або запропонувати зміни в цей файл.
+editor.must_be_on_a_branch=Ви повинні бути у гілці щоб робити або пропонувати зміни до цього файлу.
+editor.fork_before_edit=Необхідно зробити форк цього сховища, щоб внести або запропонувати зміни в цей файл.
editor.delete_this_file=Видалити файл
editor.must_have_write_access=Ви повинні мати доступ на запис щоб запропонувати зміни до цього файлу.
editor.file_delete_success=Файл "%s" видалено.
-editor.name_your_file=Дайте назву файлу…
-editor.filename_help=Щоб додати каталог, наберіть його назву, а потім - косу риску ('/'). Щоб видалити каталог, перейдіть до початку поля і натисніть backspace.
+editor.name_your_file=Назвіть файл…
+editor.filename_help=Щоб додати каталог, наберіть його назву, а потім - прямий слеш ('/'). Щоб видалити каталог, перейдіть до початку поля і натисніть видалити ліворуч.
editor.or=або
editor.cancel_lower=Скасувати
editor.commit_signed_changes=Внести підписані зміни
-editor.commit_changes=Закомітити зміни
+editor.commit_changes=Зафіксувати зміни
editor.add_tmpl=Додати '{filename}'
editor.add=Додати %s
editor.update=Оновити %s
editor.delete=Видалити %s
+editor.patch=Застосувати патч
+editor.patching=Застосування виправлень:
+editor.new_patch=Новий патч
editor.commit_message_desc=Додати необов'язковий розширений опис…
-editor.signoff_desc=Додатиь Signed-off-by комітом в конці повідомлення журналу комітів.
-editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку %s .
+editor.signoff_desc=Додати «Підписано комітером» в кінці повідомлення коміту.
+editor.commit_directly_to_this_branch=Зробити коміт безпосередньо в гілку %s .
editor.create_new_branch=Створити нову гілку для цього коміту та відкрити запит на злиття.
editor.create_new_branch_np=Створити нову гілку для цього коміту.
editor.propose_file_change=Запропонувати зміну файлу
-editor.new_branch_name_desc=Ім'я нової гілки…
+editor.new_branch_name=Назвіть нову гілку для цього коміту
+editor.new_branch_name_desc=Назва нової гілки…
editor.cancel=Відмінити
-editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім.
+editor.filename_cannot_be_empty=Назва файлу не може бути порожньою.
+editor.filename_is_invalid=Назва файлу недійсна: "%s".
+editor.filename_is_a_directory=Назва файлу '%s' вже використовується як назва каталогу у цьому сховищі.
+editor.file_modifying_no_longer_exists=Редагований файл '%s' більше не існує в цьому сховищі.
editor.file_changed_while_editing=Зміст файлу змінився з моменту початку редагування. Натисніть тут , щоб переглянути що було змінено, або закомітьте зміни ще раз , щоб переписати їх.
editor.commit_empty_file_header=Закомітити порожній файл
-editor.commit_empty_file_text=Файл, в комміті порожній. Продовжити?
-editor.no_changes_to_show=Нема змін для показу.
-editor.fail_to_update_file_summary=Помилка:
+editor.commit_empty_file_text=Файл, який ви збираєтеся закомітити, порожній. Продовжувати?
+editor.no_changes_to_show=Немає змін.
+editor.push_rejected_no_message=Зміну відхилено сервером без повідомлення. Будь ласка, перевірте Git-хуки.
+editor.push_rejected=Зміну відхилено сервером. Будь ласка, перевірте Git-хуки.
editor.push_rejected_summary=Повне повідомлення про відмову:
editor.add_subdir=Додати каталог…
+editor.unable_to_upload_files=Не вдалося завантажити файли до '"%s". Помилка: %v
editor.upload_file_is_locked=Файл "%s" заблоковано %s.
editor.upload_files_to_dir=`Завантажити файли до "%s"`
editor.no_commit_to_branch=Не вдалося внести коміт безпосередньо до гілки, тому що:
-editor.user_no_push_to_branch=Користувач не може здійснити пуш до гілки
editor.require_signed_commit=Гілка вимагає підписаного коміту
+editor.revert=Повернути %s до:
+editor.failed_to_commit=Не вдалося зафіксувати зміни.
+editor.failed_to_commit_summary=Помилка:
+
commits.desc=Переглянути історію зміни коду.
commits.commits=Коміти
+commits.no_commits=Немає спільних комітів. '%s' та '%s' мають різну історію.
commits.nothing_to_compare=Ці гілки однакові.
commits.search_branch=Ця гілка
commits.search_all=Усі гілки
commits.author=Автор
commits.message=Повідомлення
commits.date=Дата
-commits.older=Давніше
-commits.newer=Новіше
+commits.older=Старіші
+commits.newer=Новіші
commits.signed_by=Підписано
commits.signed_by_untrusted_user=Підписаний недовіреним користувачем
-commits.signed_by_untrusted_user_unmatched=Підписаний недовіреним користувачем, який не відповідає комітеру
+commits.signed_by_untrusted_user_unmatched=Підписано недовіреним користувачем, який не відповідає комітеру
commits.gpg_key_id=Ідентифікатор GPG ключа
commits.ssh_key_fingerprint=Відбиток ключа SSH
+commits.view_path=Переглянути в історії
+commits.view_file_diff=Переглянути зміни до цього файлу в цьому коміті
+commit.operations=Дії
+commit.revert=Повернути до попереднього стану
+commit.revert-header=Повернути: %s
+commit.revert-content=Виберіть гілку, до якої хочете повернутися:
commitstatus.error=Помилка
+commitstatus.failure=Невдача
commitstatus.pending=Очікування
+commitstatus.success=Успіх
ext_issues=Доступ до зовнішніх задач
ext_issues.desc=Посилання на зовнішню систему відстеження задач.
@@ -1143,27 +1316,33 @@ projects.description_placeholder=Опис
projects.create=Створити проєкт
projects.title=Назва
projects.new=Новий проєкт
-projects.new_subheader=Координуйте, відстежуйте та оновлюйте інформацію про виконувану роботу в одному місці, аби проєкти залишалися прозорими та за розкладом.
+projects.new_subheader=Координуйте, відстежуйте та оновлюйте свою роботу в одному місці, щоб проєкти залишалися прозорими та виконувалися за графіком.
+projects.create_success=Проєкт "%s" створено.
projects.deletion=Видалити проєкт
projects.deletion_desc=Видалення проєкту видаляє його з усіх пов'язаних задач. Продовжити?
projects.deletion_success=Проєкт видалено.
-projects.edit=Редагувати проєкти
+projects.edit=Редагувати проєкт
projects.edit_subheader=Проєкти організовують задачі та відстежують прогрес.
-projects.modify=Оновити проєкт
+projects.modify=Редагувати проєкт
+projects.edit_success=Проєкт "%s" оновлено.
projects.type.none=Відсутній
projects.type.basic_kanban=Спрощений канбан
projects.type.bug_triage=Сортування помилок
projects.template.desc=Шаблон проєкту
-projects.template.desc_helper=Оберіть шаблон проєкту, аби почати
+projects.template.desc_helper=Оберіть шаблон проєкту, щоб розпочати роботу
+projects.column.edit=Редагувати стовпець
projects.column.edit_title=Назва
projects.column.new_title=Назва
+projects.column.new_submit=Створити стовпець
projects.column.new=Новий стовпець
projects.column.set_default=Встановити типово
+projects.column.set_default_desc=Встановіть цей стовпець типовим для задач і запитів на злиття без категорії
projects.column.delete=Видалити стовпець
projects.column.color=Колір
projects.open=Відкрити
projects.close=Закрити
-projects.card_type.desc=Попередній перегляд карток
+projects.column.assigned_to=Призначено
+projects.card_type.desc=Попередні перегляди картки
projects.card_type.images_and_text=Зображення і текст
projects.card_type.text_only=Лише текст
@@ -1176,7 +1355,7 @@ issues.filter_reviewers=Фільтр рецензентів
issues.filter_no_results=Немає результатів
issues.filter_no_results_placeholder=Спробуйте налаштувати свої фільтри пошуку.
issues.new=Нова задача
-issues.new.title_empty=Заголовок не може бути пустим
+issues.new.title_empty=Заголовок не може бути порожнім
issues.new.labels=Мітки
issues.new.no_label=Без мітки
issues.new.clear_labels=Очистити мітки
@@ -1187,16 +1366,21 @@ issues.new.open_projects=Відкриті проєкти
issues.new.closed_projects=Закриті проєкти
issues.new.no_items=Немає елементів
issues.new.milestone=Етап
-issues.new.no_milestone=Етап відсутній
+issues.new.no_milestone=Етапи відсутні
issues.new.clear_milestone=Очистити етап
issues.new.assignees=Виконавці
issues.new.clear_assignees=Прибрати виконавців
-issues.new.no_assignees=Немає виконавця
+issues.new.no_assignees=Немає виконавців
issues.new.no_reviewers=Немає рецензентів
-issues.choose.get_started=Початок роботи
+issues.new.blocked_user=Не вдалося створити задачу, тому що ви заблоковані власником сховища.
+issues.edit.blocked_user=Неможливо редагувати вміст, оскільки вас заблоковано автором або власником сховища.
+issues.choose.get_started=Розпочати
issues.choose.open_external_link=Відкрити
issues.choose.blank=Типово
-issues.choose.blank_about=Створити задачу із шаблону за замовчуванням.
+issues.choose.blank_about=Створити задачу із стандартного шаблону.
+issues.choose.ignore_invalid_templates=Недійсні шаблони проігноровано
+issues.choose.invalid_templates=Знайдено %v недійсний(х) шаблон(ів)
+issues.choose.invalid_config=Конфігурація задачі містить помилки:
issues.no_ref=Не вказана гілка або тег
issues.create=Створити задачу
issues.new_label=Нова мітка
@@ -1206,7 +1390,8 @@ issues.create_label=Створити мітку
issues.label_templates.title=Завантажити визначений набір міток
issues.label_templates.info=Ще немає міток. Натисніть 'Нова мітка' або використовуйте попередньо визначений набір міток:
issues.label_templates.helper=Оберіть набір міток
-issues.label_templates.use=Використовувати набір міток
+issues.label_templates.use=Використати набір міток
+issues.label_templates.fail_to_load_file=Не вдалося завантажити файл шаблона мітки '%s': %v
issues.add_label=додано %s з міткою %s
issues.add_labels=додано %s з мітками %s
issues.remove_label=видалено %s з міткою %s
@@ -1232,6 +1417,7 @@ issues.delete_branch_at=`видалена гілка %s %s`
issues.filter_label=Мітка
issues.filter_label_exclude=`Використовуйте Alt + клік/Enter для виключення міток`
issues.filter_label_no_select=Всі мітки
+issues.filter_label_select_no_label=Без мітки
issues.filter_milestone=Етап
issues.filter_milestone_all=Всі етапи
issues.filter_milestone_none=Етапи відсутні
@@ -1241,6 +1427,8 @@ issues.filter_project=Проєкт
issues.filter_project_all=Всі проєкти
issues.filter_project_none=Проєкт відсутній
issues.filter_assignee=Виконавець
+issues.filter_assignee_no_assignee=Нікому не присвоєно
+issues.filter_assignee_any_assignee=Призначено будь-кому
issues.filter_poster=Автор
issues.filter_user_placeholder=Пошук користувачів
issues.filter_user_no_select=Усі користувачі
@@ -1250,19 +1438,18 @@ issues.filter_type.all_pull_requests=Усі запити на злиття
issues.filter_type.assigned_to_you=Призначене вам
issues.filter_type.created_by_you=Створено вами
issues.filter_type.mentioning_you=Вас згадано
-issues.filter_type.review_requested=Відгук запитано
+issues.filter_type.review_requested=Запит на рецензію
issues.filter_type.reviewed_by_you=Перевірено вами
issues.filter_sort=Сортувати
issues.filter_sort.latest=Найновіші
issues.filter_sort.oldest=Найстаріші
-issues.filter_sort.recentupdate=Нещодавно оновлено
issues.filter_sort.leastupdate=Найдавніше оновлені
issues.filter_sort.mostcomment=Найбільш коментовані
issues.filter_sort.leastcomment=Найменш коментовані
-issues.filter_sort.nearduedate=Найновіша дата
-issues.filter_sort.farduedate=Найстаріша дата
-issues.filter_sort.moststars=Найбільш обраних
-issues.filter_sort.feweststars=Найменш обраних
+issues.filter_sort.nearduedate=Найближчий термін
+issues.filter_sort.farduedate=Найвіддаленіший термін
+issues.filter_sort.moststars=Найбільш фаворизовані
+issues.filter_sort.feweststars=Найменш фаворизовані
issues.filter_sort.mostforks=Найбільше форків
issues.filter_sort.fewestforks=Найменше форків
issues.action_open=Відкрити
@@ -1272,13 +1459,16 @@ issues.action_milestone=Етап
issues.action_milestone_no_select=Етап відсутній
issues.action_assignee=Виконавець
issues.action_assignee_no_select=Немає виконавця
+issues.action_check=Встановити/зняти позначку
+issues.action_check_all=Встановити/зняти позначку з усіх елементів
issues.opened_by=%[1]s відкрито %[3]s
-issues.opened_by_fake=відкрито %[1]s користувачем %[2]s
+issues.opened_by_fake=%[1]s відкрито користувачем %[2]s
issues.previous=Попередній
issues.next=Далі
issues.open_title=Відкрито
issues.closed_title=Закрито
issues.draft_title=Чернетка
+issues.num_comments_1=%d коментар
issues.num_comments=%d коментарів
issues.commented_at=`прокоментував(ла) %s `
issues.delete_comment_confirm=Ви впевнені, що хочете видалити цей коментар?
@@ -1287,36 +1477,56 @@ issues.context.quote_reply=Цитувати відповідь
issues.context.reference_issue=Посилання в новій задачі
issues.context.edit=Редагувати
issues.context.delete=Видалити
+issues.no_content=Немає опису.
+issues.close=Закрити задачу
+issues.comment_pull_merged_at=об'єднав(-ла) коміти %[1]s в %[2]s %[3]s
+issues.comment_manually_pull_merged_at=вручну об'єднав(-ла) коміти %[1]s в %[2]s %[3]s
+issues.close_comment_issue=Закрити з коментарем
issues.reopen_issue=Відкрити знову
-issues.reopen_comment_issue=Прокоментувати та відкрити знову
+issues.reopen_comment_issue=Повторно відкрити з коментарем
issues.create_comment=Коментар
-issues.closed_at=`закрив цю задачу %[2]s `
-issues.reopened_at=`повторно відкрив цю задачу %[2]s `
+issues.comment.blocked_user=Неможливо створити або редагувати коментар, тому що ви заблоковані автором або власником сховища.
+issues.closed_at=`закрив(ла) цю задачу %[2]s `
+issues.reopened_at=`повторно відкрив(ла) цю задачу %[2]s `
issues.commit_ref_at=`згадано цю задачу в коміті %[2]s `
-issues.ref_issue_from=`посилання на цю задачу %[4]s %[2]s `
+issues.ref_issue_from=` вказав(ла) на цю задачу %[4]s %[2]s `
issues.ref_pull_from=`послався на цей запит злиття %[4]s %[2]s `
issues.ref_closing_from=`згадав запит на злиття %[4]s, які закриють цю задачу %[2]s `
-issues.ref_reopening_from=`згадав запит на злиття %[4]s, які повторно відкриють цю задачу %[2]s `
+issues.ref_reopening_from=`згадав запит на злиття %[4]s, який знову відкриє цю задачу %[2]s `
issues.ref_closed_from=`закрив цю задачу %[4]s %[2]s `
issues.ref_reopened_from=`повторно відкрито цю задачу %[4]s %[2]s `
issues.ref_from=`із %[1]s`
issues.author=Автор
issues.author_helper=Цей користувач є автором.
issues.role.owner=Власник
+issues.role.owner_helper=Цей користувач — власник сховища.
issues.role.member=Учасник
+issues.role.member_helper=Цей користувач є учасником організації, якій належить це сховище.
+issues.role.collaborator=Співавтор
+issues.role.collaborator_helper=Цей користувач був запрошений до співпраці у сховищі.
+issues.role.first_time_contributor=Учасник, який вперше долучився
+issues.role.first_time_contributor_helper=Це перший внесок цього користувача в сховищі.
+issues.role.contributor=Співавтор
+issues.role.contributor_helper=Цей користувач раніше вже вносив зміни до сховища.
issues.re_request_review=Повторно попросити рецензію
issues.is_stale=З часу останньої перевірки в цей PR було внесено деякі зміни
issues.remove_request_review=Видалити запит рецензування
issues.remove_request_review_block=Неможливо видалити запит рецензування
-issues.dismiss_review=Відхилити рецензiю
-issues.dismiss_review_warning=Ви впевнені, що хочете відхилити цей відгук?
-issues.sign_in_require_desc=Підпишіться щоб приєднатися до обговорення.
+issues.dismiss_review=Відхилити рецензію
+issues.dismiss_review_warning=Ви впевнені, що хочете відхилити рецензію?
+issues.sign_in_require_desc=Увійдіть , щоб приєднатися до розмови.
issues.edit=Редагувати
issues.cancel=Відмінити
issues.save=Зберегти
issues.label_title=Назва мітки
issues.label_description=Опис мітки
-issues.label_color=Колір мітки
+issues.label_color=Колір
+issues.label_color_invalid=Недійсний колір
+issues.label_exclusive=Ексклюзивно
+issues.label_archive=Мітка архіву
+issues.label_archived_filter=Показати архівовані мітки
+issues.label_archive_tooltip=Архівовані мітки типово виключаються з пропозицій під час пошуку за мітками.
+issues.label_exclusive_order=Порядок сортування
issues.label_count=%d міток
issues.label_open_issues=%d відкритих задач
issues.label_edit=Редагувати
@@ -1324,9 +1534,9 @@ issues.label_delete=Видалити
issues.label_modify=Редагувати мітку
issues.label_deletion=Видалити мітку
issues.label_deletion_desc=Видалення мітки видаляє її з усіх задач. Продовжити?
-issues.label_deletion_success=Мітку було видалено.
+issues.label_deletion_success=Мітку видалено.
issues.label.filter_sort.alphabetically=За алфавітом
-issues.label.filter_sort.reverse_alphabetically=З кінця алфавіту
+issues.label.filter_sort.reverse_alphabetically=У зворотному алфавітному порядку
issues.label.filter_sort.by_size=Найменший розмір
issues.label.filter_sort.reverse_by_size=Найбільший розмір
issues.num_participants=%d учасників
@@ -1335,17 +1545,19 @@ issues.attachment.download=`Натисніть щоб завантажити "%s
issues.subscribe=Підписатися
issues.unsubscribe=Відписатися
issues.unpin=Відкріпити
-issues.lock=Блокування обговорення
-issues.unlock=Розблокування обговорення
-issues.lock_duplicate=Задача не може бути заблокованим двічі.
+issues.max_pinned=Ви не можете прикріпити більше задач
+issues.pin_comment=прикріпив(-ла) %s
+issues.unpin_comment=відкріпив(-ла) %s
+issues.lock=Блокувати обговорення
+issues.unlock=Розблокувати обговорення
+issues.lock_duplicate=Обговорення задачі не може бути заблоковано двічі.
issues.unlock_error=Не можливо розблокувати задачу, яка не заблокована.
issues.lock_with_reason=заблоковано як %s та обмежене обговорення для співавторів %s
issues.lock_no_reason=заблоковано та обмежене обговорення для співавторів %s
-issues.unlock_comment=розблоковане обговорення %s
+issues.unlock_comment=розблокував(ла) обговорення %s
issues.lock_confirm=Заблокувати
issues.unlock_confirm=Розблокувати
-issues.lock.notice_1=- Інші користувачі не можуть додавати нові коментарі до цієї задачі.
-issues.lock.notice_2=- Ви й інші співавтори, які мають доступ до цього репозиторію, можете залишати коментарі, які інші можуть бачити.
+issues.lock.notice_2=- Ви та інші співавтори, які мають доступ до цього сховища, все ще можете залишати коментарі, які можуть бачити інші.
issues.lock.notice_3=- Ви завжди зможете розблокувати цю задачу в майбутньому.
issues.unlock.notice_1=- Кожен зможе прокоментувати цю задачу ще раз.
issues.unlock.notice_2=- Ви завжди зможете заблокувати цю задачу в майбутньому.
@@ -1354,30 +1566,43 @@ issues.lock.title=Заблокувати обговорення цієї зад
issues.unlock.title=Розблокувати обговорення цієї задачі.
issues.comment_on_locked=Ви не можете коментувати заблоковану задачу.
issues.delete=Видалити
+issues.delete.title=Видалити цю задачу?
+issues.delete.text=Ви дійсно хочете видалити цю задачу? (Це видалить весь вміст. Натомість подумайте про те, щоб закрити її та зберегти в архіві)
issues.tracker=Відстеження часу
+issues.timetracker_timer_start=Запустити таймер
issues.timetracker_timer_stop=Зупинити таймер
issues.timetracker_timer_discard=Скинути таймер
issues.timetracker_timer_manually_add=Додати час
+issues.time_estimate_set=Встановити орієнтовний час
+issues.time_estimate_display=Оцінка: %s
+issues.change_time_estimate_at=змінено приблизний час на %[1]s %[2]s
+issues.remove_time_estimate_at=видалено оцінку часу %s
+issues.time_estimate_invalid=Невірний формат розрахунку часу
issues.tracker_auto_close=Таймер буде автоматично зупинено, коли ця задача буде закрита
issues.tracking_already_started=`Ви вже почали відстежувати час для іншої задачі !`
issues.stop_tracking=Зупинити таймер
+issues.stop_tracking_history=працював для %[1]s %[2]s
+issues.cancel_tracking=Скинути
+issues.cancel_tracking_history=`скасував(-ла) відстеження часу %s`
issues.del_time=Видалити цей журнал часу
+issues.add_time_history=додав(ла) витрачений час %[1]s %[2]s
issues.del_time_history=`видалив витрачений час %s`
+issues.add_time_manually=Вручну додати час
issues.add_time_hours=Години
issues.add_time_minutes=Хвилини
issues.add_time_sum_to_small=Час не введено.
issues.time_spent_total=Загальний витрачений час
issues.time_spent_from_all_authors=`Загальний витрачений час: %s`
-issues.due_date=Дата завершення
-issues.invalid_due_date_format=Дата закінчення має бути в форматі 'ррр-мм-дд'.
-issues.error_modifying_due_date=Не вдалося змінити дату завершення.
+issues.due_date=Строк виконання
+issues.invalid_due_date_format=Формат строку виконання повинен бути 'рррр-мм-дд'.
+issues.error_modifying_due_date=Не вдалося змінити термін виконання.
issues.error_removing_due_date=Не вдалося видалити дату завершення.
issues.push_commit_1=додав %d коміт %s
issues.push_commits_n=додав %d коміти(-ів) %s
-issues.force_push_codes=`примусово залито %[1]s з %[2]s до %[4]s %[6]s`
+issues.force_push_codes=`примусово надіслано %[1]s з %[2]s до %[4]s %[6]s`
issues.force_push_compare=Порівняти
issues.due_date_form=рррр-мм-дд
issues.due_date_form_add=Додати дату завершення
@@ -1385,10 +1610,16 @@ issues.due_date_form_edit=Редагувати
issues.due_date_form_remove=Видалити
issues.due_date_not_set=Термін виконання не встановлений.
issues.due_date_added=додав(ла) дату завершення %s %s
+issues.due_date_modified=змінив(-ла) термін виконання з %[2]s на %[1]s %[3]s
issues.due_date_remove=видалив(ла) дату завершення %s %s
issues.due_date_overdue=Прострочено
-issues.due_date_invalid=Термін дії не дійсний або знаходиться за межами допустимого діапазону. Будь ласка використовуйте формат 'yyyy-mm-dd'.
+issues.due_date_invalid=Термін дії не дійсний або знаходиться за межами діапазону. Будь ласка, використовуйте формат 'рррр-мм-дд'.
issues.dependency.title=Залежності
+issues.dependency.issue_no_dependencies=Залежностей не встановлено.
+issues.dependency.pr_no_dependencies=Залежностей не встановлено.
+issues.dependency.no_permission_1=У вас немає дозволу на читання %d залежності
+issues.dependency.no_permission_n=Ви не маєте дозволу на читання %d залежностей
+issues.dependency.no_permission.can_remove=Ви не маєте дозволу на читання цієї залежності, але можете видалити її.
issues.dependency.add=Додати залежність…
issues.dependency.cancel=Відмінити
issues.dependency.remove=Видалити
@@ -1396,39 +1627,40 @@ issues.dependency.remove_info=Видалити цю залежність
issues.dependency.added_dependency=`додав нову залежність %s`
issues.dependency.removed_dependency=`видалив залежність %s`
issues.dependency.pr_closing_blockedby=Закриття цього запиту злиття заблоковано наступними задачами
-issues.dependency.issue_closing_blockedby=Закриття цієї задачи заблоковано наступними задачами
-issues.dependency.issue_close_blocks=Ця задача блокує закриття залежних задач
+issues.dependency.issue_closing_blockedby=Закриття цієї задачі заблоковано наступними задачами
+issues.dependency.issue_close_blocks=Ця задача блокує закриття наступних задач
issues.dependency.pr_close_blocks=Цей запит на злиття блокує закриття залежних задач
-issues.dependency.issue_close_blocked=Вам потрібно закрити всі задачі, що блокують цю задачу, перед її закриттям.
-issues.dependency.pr_close_blocked=Вам потрібно закрити всі задачі, що блокують цей запит, перед його злиттям.
+issues.dependency.issue_batch_close_blocked=Неможливо пакетно закрити обрані задачі, оскільки задача #%d все ще має відкриті залежності
issues.dependency.blocks_short=Блоки
issues.dependency.blocked_by_short=Залежить від
issues.dependency.remove_header=Видалити залежність
issues.dependency.issue_remove_text=Це призведе до видалення залежності з цієї задачі. Продовжити?
-issues.dependency.pr_remove_text=Це призведе до видалення залежності з цього пулл-реквесту. Продовжити?
+issues.dependency.pr_remove_text=Це вилучить залежність з цього запиту на злиття. Продовжити?
issues.dependency.setting=Увімкнути залежності для задач та запитів на злиття
issues.dependency.add_error_same_issue=Ви не можете зробити задачу залежною від себе.
-issues.dependency.add_error_dep_issue_not_exist=Залежність для задачі не існує.
+issues.dependency.add_error_dep_issue_not_exist=Залежної задачі не існує.
issues.dependency.add_error_dep_not_exist=Залежність не існує.
issues.dependency.add_error_dep_exists=Залежність уже існує.
-issues.dependency.add_error_cannot_create_circular=Ви не можете створити залежність з двома задачами, які блокують одна одну.
issues.dependency.add_error_dep_not_same_repo=Обидві задачі повинні бути в одному репозиторії.
-issues.review.self.approval=Ви не можете схвалити власний пулл-реквест.
+issues.review.self.approval=Ви не можете затвердити власний запит на злиття.
issues.review.self.rejection=Ви не можете надіслати запит на зміну на власний пулл-реквест.
-issues.review.approve=зміни затверджено %s
-issues.review.dismissed=відхилено відгук %s %s
+issues.review.approve=затвердив(ла) ці зміни %s
+issues.review.comment=рецензовано %s
issues.review.dismissed_label=Відхилено
issues.review.left_comment=додав коментар
-issues.review.content.empty=Запрошуючи зміни, ви зобов'язані залишити коментар з поясненнями своїх побажань відносно Pull Request'а.
+issues.review.content.empty=Вам потрібно залишити коментар із зазначенням бажаної зміни (змін).
issues.review.reject=зробив запит змін %s
-issues.review.wait=попросив рецензію %s
+issues.review.wait=запросили на рецензію %s
issues.review.add_review_request=попросив рецензію від %s %s
issues.review.remove_review_request=видалив запит на рецензію до %s %s
-issues.review.remove_review_request_self=відмовився рецензувати %s
issues.review.pending=Очікування
+issues.review.pending.tooltip=Цей коментар наразі не видно іншим користувачам. Щоб відправити свій коментар, виберіть "%s" -> "%s/%s/%s" у верхній частині сторінки.
issues.review.review=Рецензії
issues.review.reviewers=Рецензенти
issues.review.outdated=Застарілі
+issues.review.outdated_description=Вміст змінився з моменту створення цього коментаря
+issues.review.option.show_outdated_comments=Показати застарілі коментарі
+issues.review.option.hide_outdated_comments=Приховати застарілі коментарі
issues.review.show_outdated=Показати застарілі
issues.review.hide_outdated=Приховати застарілі
issues.review.show_resolved=Показати вирішене
@@ -1436,28 +1668,47 @@ issues.review.hide_resolved=Приховати вирішене
issues.review.resolve_conversation=Завершити обговорення
issues.review.un_resolve_conversation=Поновити обговорення
issues.review.resolved_by=позначив обговорення завершеним
-issues.review.commented=Коментар
-issues.assignee.error=Додано не всіх виконавців через непередбачену помилку.
+issues.review.commented=Коментувати
+issues.review.official=Затверджено
+issues.review.requested=Очікується розгляд
+issues.review.rejected=Запит на зміни
+issues.review.stale=Оновлено з моменту затвердження
+issues.review.unofficial=Невраховане затвердження
issues.reference_issue.body=Тіло
issues.content_history.deleted=видалено
issues.content_history.edited=відредаговано
issues.content_history.created=створено
issues.content_history.delete_from_history=Видалити з історії
issues.content_history.delete_from_history_confirm=Видалити з історії?
-issues.content_history.options=Налаштування
+issues.content_history.options=Параметри
+issues.reference_link=Посилання: %s
compare.compare_base=основа
compare.compare_head=порівняти
pulls.desc=Увімкнути запити на злиття та огляд коду.
pulls.new=Новий запит на злиття
+pulls.new.blocked_user=Неможливо створити запит на злиття, тому що ви заблоковані власником сховища.
+pulls.new.must_collaborator=Ви повинні бути учасником, щоб створити запит на злиття.
+pulls.view=Переглянути запит на злиття
pulls.compare_changes=Новий запит на злиття
+pulls.allow_edits_from_maintainers_desc=Користувачі з доступом на запис до базової гілки також можуть завантажувати свої зміни до цієї гілки
+pulls.allow_edits_from_maintainers_err=Оновлення не вдалося
pulls.compare_changes_desc=Порівняти дві гілки і створити запит на злиття для змін.
+pulls.has_viewed_file=Переглядів
+pulls.has_changed_since_last_review=Змінено з моменту вашого останнього відгуку
+pulls.viewed_files_label=Переглянуто %[1]d / %[2]d файлів
+pulls.expand_files=Розгорнути всі файли
+pulls.collapse_files=Згорнути всі файли
pulls.compare_base=злити в
-pulls.compare_compare=pull з
-pulls.switch_comparison_type=Перемкнути вигляд порівняння
+pulls.switch_comparison_type=Перемкнути тип порівняння
pulls.switch_head_and_base=Поміняти місцями основну та базову гілку
pulls.filter_branch=Фільтр по гілці
+pulls.show_all_commits=Показати всі коміти
+pulls.show_changes_since_your_last_review=Показати зміни після вашого останнього відгуку
+pulls.showing_only_single_commit=Відображаються лише зміни коміту %[1]s
+pulls.showing_specified_commit_range=Відображаються лише зміни між %[1]s..%[2]s
+pulls.filter_changes_by_commit=Фільтр за комітом
pulls.nothing_to_compare=Ці гілки однакові. Немає необхідності створювати запитів на злиття.
pulls.nothing_to_compare_and_allow_empty_pr=Одинакові гілки. Цей PR буде порожнім.
pulls.has_pull_request=`Запит злиття для цих гілок вже існує: %[2]s#%[3]d `
@@ -1468,113 +1719,145 @@ pulls.change_target_branch_at=`змінена цільова гілка з %s
pulls.tab_conversation=Обговорення
pulls.tab_commits=Коміти
pulls.tab_files=Змінені файли
-pulls.reopen_to_merge=Будь ласка перевідкрийте цей запит щоб здіснити операцію злиття.
+pulls.reopen_to_merge=Будь ласка, заново відкрийте цей запит щоб виконати злиття.
pulls.cant_reopen_deleted_branch=Цей запит не можна повторно відкрити, оскільки гілку видалено.
pulls.merged=Злито
+pulls.merged_success=Запит на злиття успішно об'єднано і закрито
+pulls.closed=Запит на злиття закрито
pulls.manually_merged=Ручне злиття
-pulls.is_closed=Запит на злиття було закрито.
-pulls.title_wip_desc=`Почніть заголовок з %s щоб запобігти випадковому злиттю запитів.`
-pulls.cannot_merge_work_in_progress=Цей пулл-реквест позначений як прийнятий в опрацювання.
-pulls.still_in_progress=Все ще в процесі?
+pulls.merged_info_text=Гілку %s тепер можна видалити.
+pulls.is_closed=Запит на злиття закрито.
+pulls.title_wip_desc=`Почніть заголовок з %s щоб запобігти випадковому об'єднанню.`
+pulls.cannot_merge_work_in_progress=Цей запит на злиття позначено як незавершений.
+pulls.still_in_progress=Ще не закінчено?
pulls.add_prefix=Додати префікс %s
pulls.remove_prefix=Видалити префікс %s
-pulls.data_broken=Зміст цього запиту було порушено внаслідок видалення інформації Форком. Цей запит тягнеться через відсутність інформації про вилучення.
-pulls.files_conflicted=Цей запит має зміни, що конфліктують з цільовою гілкою.
+pulls.data_broken=Збій цього запиту на злиття через відсутність інформації про форк.
+pulls.files_conflicted=Цей запит на злиття має зміни, що конфліктують з цільовою гілкою.
+pulls.is_ancestor=Цю гілку вже включено до цільової гілки. Нема чого об'єднувати.
pulls.required_status_check_failed=Деякі необхідні перевірки виконані з помилками.
pulls.required_status_check_missing=Декілька з необхідних перевірок відсутні.
pulls.required_status_check_administrator=Як адміністратор ви все одно можете об'єднати цей запит на злиття.
-pulls.can_auto_merge_desc=Цей запит можна об'єднати автоматично.
-pulls.cannot_auto_merge_desc=Цей запит на злиття не може бути злитий автоматично через конфлікти.
-pulls.cannot_auto_merge_helper=Злийте вручну для вирішення конфліктів.
-pulls.num_conflicting_files_1=%d конфліктуючий файл
-pulls.num_conflicting_files_n=%d конфліктуючі файли
+pulls.can_auto_merge_desc=Цей запит на злиття можна об'єднати автоматично.
+pulls.cannot_auto_merge_desc=Цей запит на злиття не може бути об'єднано автоматично через конфлікти.
+pulls.cannot_auto_merge_helper=Об'єднайте вручну для вирішення конфліктів.
+pulls.num_conflicting_files_1=%d конфліктний файл
+pulls.num_conflicting_files_n=%d конфліктних файлів
pulls.approve_count_1=%d схвалення
pulls.approve_count_n=%d схвалень
pulls.reject_count_1=%d запит на зміну
-pulls.reject_count_n=%d запити на зміну
-pulls.waiting_count_1=очікується %d рецензія
+pulls.reject_count_n=%d запитів на зміну
+pulls.waiting_count_1=очікується %d рецензій
pulls.waiting_count_n=очікується %d рецензії(й)
-pulls.wrong_commit_id=id коміту повинен бути id коміту в цільовій гілці
-pulls.no_merge_desc=Цей запити на злиття неможливо злити, оскільки всі параметри об'єднання репозиторія вимкнено.
-pulls.no_merge_helper=Увімкніть параметри злиття в налаштуваннях репозиторія або злийте запити на злиття вручну.
-pulls.no_merge_wip=Цей пулл-реквест не можливо об'єднати, тому-що він вже виконується.
-pulls.no_merge_not_ready=Цей запит не готовий до злиття, перевірте статус рецензіювання і статус перевірки.
-pulls.no_merge_access=Ви не авторизовані, щоб виконати цей запит на злиття.
-pulls.merge_pull_request=Створити коміт зі злиттям
-pulls.rebase_merge_pull_request=Перебазувати, а потім виконати злиття перемотуванням
-pulls.rebase_merge_commit_pull_request=Перебазувати, а потім створити коміт злиття
+pulls.no_merge_desc=Цей запит на злиття неможливо об'єднати, оскільки всі параметри об'єднання сховищ вимкнено.
+pulls.no_merge_helper=Увімкніть параметри об'єднання в налаштуваннях сховища або об'єднайте запит на злиття вручну.
+pulls.no_merge_wip=Цей запит на злиття неможливо об'єднаний, оскільки він позначений як незавершений.
+pulls.no_merge_access=Ви не авторизовані об'єднувати цей запит на злиття.
+pulls.merge_pull_request=Створити коміт об'єднання
pulls.squash_merge_pull_request=Створити зварений (squash) коміт
pulls.merge_manually=Об’єднано вручну
-pulls.merge_commit_id=ID коміту злиття
-pulls.require_signed_wont_sign=Гілка вимагає підписаних комітів, але це злиття не буде підписано
+pulls.merge_commit_id=Ідентифікатор коміту об’єднання
+pulls.require_signed_wont_sign=Гілка вимагає підписаних комітів, але це об'єднання не буде підписано
-pulls.invalid_merge_option=Цей параметр злиття не можна використовувати для цього Pull Request'а.
-pulls.merge_conflict=Злиття не вдалося: Був конфлікт при злиття. Підказка: спробуйте іншу стратегію
+pulls.invalid_merge_option=Цей параметр об'єднання не можна використовувати для цього запиту на злиття.
pulls.merge_conflict_summary=Помилка
-pulls.rebase_conflict=Злиття не вдалося: відбувся конфлікт під час злиття: %[1]s. Підказка: спробуйте іншу стратегію
pulls.rebase_conflict_summary=Помилка
-pulls.unrelated_histories=Помилка злиття: head та base злиття не мають спільної історії. Підказка: спробуйте іншу стратегію
-pulls.merge_out_of_date=Помилка злиття: base було оновлено, поки відбувалося злиття. Підказка: спробуйте знову.
pulls.push_rejected_summary=Повне повідомлення про відмову
-pulls.open_unmerged_pull_exists=`Ви не можете знову відкрити, оскільки вже існує запит на злиття (%d) з того ж репозиторія з тією ж інформацією про злиття і в очікуванні.`
-pulls.status_checking=Деякі перевірки знаходяться на розгляді
+pulls.open_unmerged_pull_exists=`Ви не можете повторно відкрити цей запит на злиття, оскільки вже існує один (#%d) з ідентичними властивостями.`
+pulls.status_checking=Деякі перевірки ще не завершені
pulls.status_checks_success=Всі перевірки були успішними
pulls.status_checks_warning=Декілька перевірок завершилися з попередженнями
-pulls.status_checks_failure=Декілька перевірок не були успішними
+pulls.status_checks_failure=Деякі перевірки не спрацювали
pulls.status_checks_error=Декілька перевірок завершилися з помилками
pulls.status_checks_requested=Обов'язково
pulls.status_checks_details=Подробиці
-pulls.update_branch=Оновити гілку шляхом злиття
+pulls.status_checks_hide_all=Приховати всі перевірки
+pulls.status_checks_show_all=Показати всі перевірки
+pulls.update_branch=Оновити гілку шляхом об'єднання
pulls.update_branch_rebase=Оновити гілку перебазуванням
-pulls.update_branch_success=Оновлення гілки пройшло успішно
+pulls.update_branch_success=Оновлення гілки успішне
pulls.update_not_allowed=Ви не можете оновити гілку
pulls.outdated_with_base_branch=Ця гілка застаріла відносно базової гілки
+pulls.close=Закрити запит на злиття
pulls.closed_at=`закрив цей запит на злиття %[2]s `
pulls.reopened_at=`повторно відкрив цей запит на злиття %[2]s `
+pulls.cmd_instruction_hint=Переглянути інструкції командного рядка
+pulls.cmd_instruction_merge_title=Об'єднати
+pulls.cmd_instruction_merge_desc=Об'єднати зміни і оновити на Gitea.
+pulls.clear_merge_message=Очистити повідомлення про об'єднання
+
+pulls.auto_merge_button_when_succeed=(Якщо перевірки успішні)
+pulls.auto_merge_when_succeed=Автоматичне об'єднання після успішного завершення всіх перевірок
+
+pulls.auto_merge_cancel_schedule=Скасувати автоматичне об'єднання
+pulls.auto_merge_not_scheduled=Цей запит на злиття не планується об'єднувати автоматично.
+pulls.delete.title=Видалити цей запит на злиття?
+pulls.upstream_diverging_prompt_behind_1=Ця гілка на %[1]d коміт позаду %[2]s
+pulls.upstream_diverging_prompt_behind_n=Ця гілка на %[1]d комітів позаду %[2]s
+pulls.upstream_diverging_prompt_base_newer=Базова гілка %s має нові зміни
+pulls.upstream_diverging_merge_confirm=Хочете об’єднати "%[1]s" з "%[2]s"?
-
-
+pull.deleted_branch=(видалена):%s
+pull.agit_documentation=Переглянути документацію про AGit
milestones.new=Новий етап
milestones.closed=Закрито %s
+milestones.update_ago=Оновлено %s
milestones.no_due_date=Немає дати завершення
milestones.open=Відкрити
milestones.close=Закрити
+milestones.completeness=%d%% завершено
milestones.create=Створити етап
milestones.title=Заголовок
milestones.desc=Опис
-milestones.due_date=Дата завершення (опціонально)
+milestones.due_date=Дата завершення (необов’язково)
milestones.clear=Очистити
milestones.invalid_due_date_format=Дата завершення має бути в форматі 'рррр-мм-дд'.
+milestones.create_success=Етап "%s" створено.
milestones.edit=Редагувати етап
-milestones.edit_subheader=Створюйте етапи для організації ваших задач.
+milestones.edit_subheader=Етапи впорядковують задачі та відстежують прогрес.
milestones.cancel=Відмінити
milestones.modify=Оновити етап
+milestones.edit_success=Етап '%s' оновлено.
milestones.deletion=Видалити етап
-milestones.deletion_desc=Видалення етапу призведе до його видалення з усіх пов'язаних задач. Продовжити?
-milestones.deletion_success=Етап успішно видалено.
+milestones.deletion_desc=Видалення етапу видаляє його з усіх пов'язаних з ним задач. Продовжити?
+milestones.deletion_success=Етап видалено.
milestones.filter_sort.name=Назва
-milestones.filter_sort.least_complete=Менш повне
-milestones.filter_sort.most_complete=Більш повне
-milestones.filter_sort.most_issues=Найбільш задач
-milestones.filter_sort.least_issues=Найменш задач
+milestones.filter_sort.earliest_due_data=Найраніший строк
+milestones.filter_sort.latest_due_date=Останній строк
+milestones.filter_sort.most_issues=Найбільше задач
+milestones.filter_sort.least_issues=Найменше задач
+signing.will_sign=Цей коміт буде підписано ключем "%s".
+signing.wont_sign.nokey=Немає ключа для підписання цього коміту.
+signing.wont_sign.never=Коміти ніколи не підписуються.
+signing.wont_sign.always=Коміти завжди підписуються.
+signing.wont_sign.pubkey=Коміт не буде підписано, оскільки у вас немає публічного ключа, пов'язаного з вашим обліковим записом.
+signing.wont_sign.parentsigned=Цей коміт не буде підписано, оскільки не підписано батьківський коміт.
+signing.wont_sign.basesigned=Об'єднання не буде підписане, оскільки базовий коміт не підписано.
+signing.wont_sign.headsigned=Об'єднання не буде підписане, оскільки не підписано головний коміт.
+signing.wont_sign.commitssigned=Об'єднання не буде підписане, оскільки всі пов'язані з ним коміти не підписані.
+signing.wont_sign.approved=Об'єднання не буде підписане, оскільки злиття не затверджено.
+signing.wont_sign.not_signed_in=Ви не увійшли до системи.
+ext_wiki=Доступ до зовнішньої вікі
ext_wiki.desc=Посилання на зовнішню вікі.
wiki=Вікі
wiki.welcome=Ласкаво просимо до Вікі.
-wiki.welcome_desc=Wiki дозволяє писати та ділитися документацією з співавторами.
-wiki.desc=Пишіть та обмінюйтеся документацією із співавторами.
+wiki.welcome_desc=Wiki дозволяє писати та ділитися документацією зі співавторами.
+wiki.desc=Пишіть та обмінюйтеся документацією зі співавторами.
wiki.create_first_page=Створити першу сторінку
wiki.page=Сторінка
wiki.filter_page=Фільтр сторінок
wiki.new_page=Сторінка
+wiki.page_title=Заголовок сторінки
+wiki.page_content=Зміст сторінки
wiki.default_commit_message=Напишіть примітку про оновлення цієї сторінки (необов'язково).
wiki.save_page=Зберегти сторінку
wiki.last_commit_info=%s редагував цю сторінку %s
@@ -1584,12 +1867,19 @@ wiki.file_revision=Ревізії сторінки
wiki.wiki_page_revisions=Ревізії вікі сторінок
wiki.back_to_wiki=Повернутись на сторінку Вікі
wiki.delete_page_button=Видалити сторінку
-wiki.page_already_exists=Вікі-сторінка з таким самим ім'ям вже існує.
+wiki.delete_page_notice_1=Видалення вікі-сторінки "%s" не може бути скасовано. Продовжити?
+wiki.page_already_exists=Сторінка Вікі з такою назвою вже існує.
+wiki.reserved_page=Назва сторінки вікі "%s" зарезервована.
wiki.pages=Сторінки
wiki.last_updated=Останні оновлення %s
wiki.page_name_desc=Введіть назву вікі-сторінки. Деякі із спеціальних імен: 'Home', '_Sidebar' та '_Footer'.
+wiki.original_git_entry_tooltip=Перегляд оригінального файлу Git замість використання дружнього посилання.
activity=Активність
+activity.navbar.pulse=Пульс
+activity.navbar.code_frequency=Частота коду
+activity.navbar.contributors=Співавтори
+activity.navbar.recent_commits=Нещодавні коміти
activity.period.filter_label=Період:
activity.period.daily=1 день
activity.period.halfweekly=3 дні
@@ -1599,25 +1889,25 @@ activity.period.quarterly=3 місяці
activity.period.semiyearly=6 місяців
activity.period.yearly=1 рік
activity.overview=Огляд
-activity.active_prs_count_1=%d Активний запити на злиття
+activity.active_prs_count_1=%d Активний запит на злиття
activity.active_prs_count_n=%d Активні запити на злиття
-activity.merged_prs_count_1=Злитий запит на злиття
-activity.merged_prs_count_n=Злиті запити на злиття
+activity.merged_prs_count_1=Об'єднаний запит на злиття
+activity.merged_prs_count_n=Об'єднані запити на злиття
activity.opened_prs_count_1=Запропонований запит на злиття
-activity.opened_prs_count_n=Запропонованих запитів на злиття
+activity.opened_prs_count_n=Запропоновані запити на злиття
activity.title.user_1=%d користувачем
activity.title.user_n=%d користувачами
activity.title.prs_1=%d Запит на злиття
activity.title.prs_n=%d Запитів на злиття
activity.title.prs_merged_by=%s злито %s
activity.title.prs_opened_by=%s запропоновано %s
-activity.merged_prs_label=Злито
+activity.merged_prs_label=Об'єднано
activity.opened_prs_label=Запропоновано
activity.active_issues_count_1=%d Активна задача
activity.active_issues_count_n=%d Активні задачі
activity.closed_issues_count_1=Закрита задача
activity.closed_issues_count_n=Закриті задачі
-activity.title.issues_1=%d Задач
+activity.title.issues_1=%d Задача
activity.title.issues_n=%d Задач
activity.title.issues_closed_from=%s закрито %s
activity.title.issues_created_by=%s створена(і) %s
@@ -1627,99 +1917,126 @@ activity.new_issues_count_n=Нові Задачі
activity.new_issue_label=Відкриті
activity.title.unresolved_conv_1=%d Незавершене обговорення
activity.title.unresolved_conv_n=%d Незавершених обговорень
-activity.unresolved_conv_desc=Список всіх старих задач і Pull Request'ів з недавньої активністю, але ще не закритих або прийнятих.
+activity.unresolved_conv_desc=Ці нещодавно змінені задачі і запити на злиття ще не вирішені.
activity.unresolved_conv_label=Відкрити
activity.title.releases_1=%d Реліз
activity.title.releases_n=%d Релізів
activity.title.releases_published_by=%s опубліковано %s
activity.published_release_label=Опубліковано
-activity.no_git_activity=У цей період не було здійснено жодних дій.
-activity.git_stats_exclude_merges=Не враховуючи злиття,
+activity.git_stats_exclude_merges=Не враховуючи об'єднання,
activity.git_stats_author_1=%d автор
activity.git_stats_author_n=%d автори
-activity.git_stats_pushed_1=відправлено
-activity.git_stats_pushed_n=відправлено
+activity.git_stats_pushed_1=відправив(ла)
+activity.git_stats_pushed_n=відправили
activity.git_stats_commit_1=%d коміт
-activity.git_stats_commit_n=%d коміти
+activity.git_stats_commit_n=%d комітів
activity.git_stats_push_to_branch=в %s та
activity.git_stats_push_to_all_branches=до всіх гілок.
activity.git_stats_on_default_branch=На %s,
activity.git_stats_file_1=%d файл
-activity.git_stats_file_n=%d файли
-activity.git_stats_files_changed_1=змінено
+activity.git_stats_file_n=%d файлів
+activity.git_stats_files_changed_1=змінив(ла)
activity.git_stats_files_changed_n=змінено
activity.git_stats_additions=і були
activity.git_stats_addition_1=%d добавка
-activity.git_stats_addition_n=%d добавки
+activity.git_stats_addition_n=%d додатків
activity.git_stats_and_deletions=та
activity.git_stats_deletion_1=%d видалений
activity.git_stats_deletion_n=%d видалені
+contributors.contribution_type.filter_label=Тип внеску:
contributors.contribution_type.commits=Коміти
+contributors.contribution_type.deletions=Видалення
settings=Налаштування
-settings.desc=У налаштуваннях ви можете змінювати різні параметри цього репозиторія
-settings.options=Репозиторій
+settings.options=Сховище
settings.public_access=Публічний доступ
+settings.public_access.docs.everyone_write=Всі пишуть: всі зареєстровані користувачі можуть вносити зміни до розділу. Тільки розділ Wiki підтримує цей дозвіл.
settings.collaboration=Співавтори
settings.collaboration.admin=Адміністратор
settings.collaboration.write=Запис
-settings.collaboration.read=Читати
+settings.collaboration.read=Читання
settings.collaboration.owner=Власник
settings.collaboration.undefined=Не визначено
settings.hooks=Веб-хуки
settings.githooks=Git хуки
settings.basic_settings=Базові налаштування
settings.mirror_settings=Налаштування дзеркала
-settings.mirror_settings.mirrored_repository=Віддзеркалений репозиторій
+settings.mirror_settings.docs=Налаштуйте сховище на автоматичну синхронізацію комітів, міток і гілок з іншим сховищем.
+settings.mirror_settings.docs.disabled_pull_mirror.instructions=Налаштуйте ваш проєкт на автоматичне перенесення комітів, міток і гілок до іншого сховища. Отримання змін з дзеркал було вимкнено адміністратором вашого сайту.
+settings.mirror_settings.docs.disabled_push_mirror.instructions=Налаштуйте свій проєкт на автоматичне отримання комітів, міток і гілок з іншого сховища.
+settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Наразі це можна зробити лише в меню «Нова міграція». Для отримання додаткової інформації зверніться до:
+settings.mirror_settings.docs.can_still_use=Хоча ви не можете змінювати наявні дзеркала чи створювати нові, ви все одно можете використовувати чинне дзеркало.
+settings.mirror_settings.docs.doc_link_title=Як віддзеркалити сховища?
+settings.mirror_settings.docs.doc_link_pull_section=розділ документації "Злиття з віддаленого сховища".
+settings.mirror_settings.docs.pulling_remote_title=Завантаження з віддаленого сховища
+settings.mirror_settings.mirrored_repository=Віддзеркалене сховища
settings.mirror_settings.direction=Напрямок
settings.mirror_settings.direction.pull=Pull
settings.mirror_settings.direction.push=Push
settings.mirror_settings.last_update=Останнє оновлення
-settings.mirror_settings.push_mirror.none=Не налаштовано дзеркало push
-settings.mirror_settings.push_mirror.remote_url=URL віддаленого репозитарія git
-settings.mirror_settings.push_mirror.add=Додати Push дзеркало
+settings.mirror_settings.push_mirror.remote_url=URL віддаленого сховища Git
+settings.mirror_settings.push_mirror.edit_sync_time=Редагувати інтервал синхронізації дзеркал
settings.sync_mirror=Синхронізувати зараз
settings.site=Веб-сайт
settings.update_settings=Оновити налаштування
-settings.branches.update_default_branch=Оновити гілку за замовчуванням
-settings.advanced_settings=Додаткові налаштування
-settings.wiki_desc=Увімкнути репозиторії Вікі
-settings.use_internal_wiki=Використовувати вбудовані Вікі
-settings.use_external_wiki=Використовувати зовнішні Вікі
+settings.update_mirror_settings=Оновити параметри дзеркала
+settings.branches.switch_default_branch=Змінити типову гілку
+settings.branches.update_default_branch=Оновити типову гілку
+settings.branches.add_new_rule=Додати нове правило
+settings.advanced_settings=Розширені налаштування
+settings.wiki_desc=Увімкнути Вікі сховища
+settings.use_internal_wiki=Використовувати вбудовану Вікі
+settings.default_wiki_branch_name=Назва типової гілки Вікі
+settings.failed_to_change_default_wiki_branch=Не вдалося змінити стандартну гілку вікі.
+settings.use_external_wiki=Використовувати зовнішню Вікі
settings.external_wiki_url=URL зовнішньої вікі
-settings.external_wiki_url_error=Зовнішня URL-адреса wiki не є допустимою URL-адресою.
-settings.external_wiki_url_desc=Відвідувачі будуть перенаправлені на URL-адресу, коли вони клацають по вкладці.
+settings.external_wiki_url_error=Зовнішня URL-адреса Вікі є недійсною.
+settings.external_wiki_url_desc=Відвідувачі перенаправляються на URL-адресу зовнішньої вікі при натисканні вкладки.
settings.issues_desc=Увімкнути відстеження задач в репозиторію
settings.use_internal_issue_tracker=Використовувати вбудовану систему відстеження задач
settings.use_external_issue_tracker=Використовувати зовнішню систему обліку задач
settings.external_tracker_url=URL зовнішньої системи відстеження задач
-settings.external_tracker_url_error=URL зовнішнього баг-трекера не є допустимою URL-адресою.
-settings.external_tracker_url_desc=Відвідувачі перенаправляються на зовнішню URL-адресу, коли натискають вкладку 'Задачі'.
+settings.external_tracker_url_error=URL-адреса зовнішнього трекера задач є недійсною.
+settings.external_tracker_url_desc=Відвідувачі перенаправляються на URL-адресу зовнішнього трекера задач при натисканні на вкладку.
settings.tracker_url_format=Формат URL зовнішнього трекера задач
-settings.tracker_url_format_error=Неправильний формат URL-адреси зовнішнього баг-трекера.
-settings.tracker_issue_style=Формат номеру для зовнішньої системи обліку задач
+settings.tracker_url_format_error=Формат URL-адреси зовнішнього трекера проблем недійсний.
settings.tracker_issue_style.numeric=Цифровий
-settings.tracker_issue_style.alphanumeric=Буквено-цифровий
+settings.tracker_issue_style.alphanumeric=Алфавітно-цифровий
+settings.tracker_issue_style.regexp=Регулярний вираз
+settings.tracker_issue_style.regexp_pattern=Шаблон регулярного виразу
+settings.tracker_issue_style.regexp_pattern_desc=Першу захоплену групу буде використано замість {index}.
settings.tracker_url_format_desc=Використовуйте шаблони {user}, {repo} та {index} для імені користувача, репозиторію та номеру задічі.
settings.enable_timetracker=Увімкнути відстеження часу
-settings.allow_only_contributors_to_track_time=Враховувати тільки учасників розробки в підрахунку часу
+settings.allow_only_contributors_to_track_time=Лише відстежувати час співавторів
settings.pulls_desc=Увімкнути запити на злиття в репозиторій
settings.pulls.ignore_whitespace=Ігнорувати пробіл у конфліктах
-settings.pulls.enable_autodetect_manual_merge=Увімкнути автовизначення ручного злиття (Примітка: у деяких особливий випадках можуть виникнуть помилки)
+settings.pulls.enable_autodetect_manual_merge=Увімкнути автоматичне визначення ручного об'єднання (Примітка: у деяких особливих випадках можуть виникати помилкові оцінки)
settings.pulls.default_delete_branch_after_merge=Видаляти гілку запиту злиття, коли його прийнято
+settings.releases_desc=Увімкнути релізи сховища
+settings.packages_desc=Увімкнути реєстр пакетів сховища
+settings.projects_desc=Увімкнути проєкти
+settings.projects_mode_desc=Режим проєктів (які типи проєктів показувати)
+settings.projects_mode_repo=Тільки проєкти сховища
+settings.projects_mode_owner=Тільки проєкти користувачів або організацій
settings.projects_mode_all=Всі проєкти
+settings.actions_desc=Увімкнути дії сховища
settings.admin_settings=Налаштування адміністратора
-settings.admin_enable_health_check=Включити перевірки працездатності репозиторію (git fsck)
-settings.admin_enable_close_issues_via_commit_in_any_branch=Закрити задачу за допомогою коміта, зробленого не в головній гілці
+settings.admin_enable_health_check=Увімкнути перевірку стану сховища (git fsck)
+settings.admin_code_indexer=Індексатор коду
+settings.admin_stats_indexer=Індексатор статистики коду
+settings.admin_indexer_commit_sha=Останній індексований SHA
+settings.admin_indexer_unindexed=Не індексовано
+settings.reindex_button=Додати до черги на реіндексацію
+settings.reindex_requested=Запит на переіндексацію
settings.danger_zone=Небезпечна зона
-settings.new_owner_has_same_repo=Новий власник вже має репозиторій з такою назвою. Будь ласка, виберіть інше ім'я.
-settings.convert=Перетворити на звичайний репозиторій
-settings.convert_desc=Ви можете сконвертувати це дзеркало у звичайний репозиторій. Це не може бути скасовано.
+settings.new_owner_has_same_repo=Новий власник вже має сховище з такою назвою. Будь ласка, виберіть іншу назву.
+settings.convert=Перетворити на звичайне сховище
+settings.convert_desc=Ви можете перетворити це дзеркало на звичайне сховище. Це неможливо скасувати.
settings.convert_notices_1=Ця операція перетворить дзеркало у звичайний репозиторій і не може бути скасована.
settings.convert_confirm=Перетворити репозиторій
-settings.convert_succeed=Репозиторій успішно перетворений в звичайний.
+settings.convert_succeed=Дзеркало було перетворено на звичайне сховище.
settings.convert_fork=Перетворити на звичайний репозиторій
settings.convert_fork_desc=Ви можете перетворити цей форк на звичайний репозиторій. Цю дію неможливо скасувати.
settings.convert_fork_notices_1=Ця операція перетворить форк на звичайний репозиторій та не може бути скасованою.
@@ -1729,89 +2046,83 @@ settings.transfer=Передати новому власнику
settings.transfer.rejected=Перенесення репозиторію відхилено.
settings.transfer.success=Перенесення репозиторію виконано.
settings.transfer_abort=Скасувати перенесення
-settings.transfer_abort_invalid=Ви не можете скасувати неіснуюче перенесення сховища.
-settings.transfer_desc=Передати репозиторій користувачеві або організації, де ви маєте права адміністратора.
-settings.transfer_form_title=Введіть ім'я репозиторія як підтвердження:
-settings.transfer_in_progress=В даний час відбувається перенесення. Будь ласка, скасуйте його, якщо ви бажаєте перенести цей репозиторій іншому користувачу.
-settings.transfer_notices_1=- Ви втратите доступ до репозиторія, якщо ви переведете його окремому користувачеві.
-settings.transfer_notices_2=- Ви збережете доступ, якщо новим власником стане організація, власником якої ви є.
-settings.transfer_notices_3=- Якщо репозиторій є приватним і передається окремому користувачеві, ця дія гарантує, що користувач має хоча б дозвіл на читаня репозитарію (і при необхідності змінює права дозволів).
+settings.transfer_abort_invalid=Ви не можете скасувати перенесення неіснуючого сховища.
+settings.transfer_abort_success=Перенесення сховища до %s успішно скасовано.
+settings.transfer_desc=Передати це сховище користувачеві або організації, для якої ви маєте права адміністратора.
+settings.transfer_form_title=Введіть назву сховища для підтвердження:
+settings.transfer_notices_1=- Ви втратите доступ до сховища, якщо передасте його окремому користувачеві.
+settings.transfer_notices_2=- Ви збережете доступ до сховища, якщо передасте його організації, якою ви (спів)володієте.
+settings.transfer_notices_3=- Якщо сховище є приватним і передається окремому користувачеві, ця дія гарантує, що користувач має принаймні права на читання (і змінює ці права, якщо необхідно).
settings.transfer_owner=Новий власник
settings.transfer_perform=Здіснити перенесення
-settings.transfer_started=`Цей репозиторій чекає підтвердження перенесення від "%s"`
-settings.transfer_succeed=Репозиторій був перенесений.
+settings.transfer_started=Це сховище було позначено для передачі та очікує на підтвердження від «%s»
+settings.transfer_succeed=Сховище перенесено.
settings.signing_settings=Параметри перевірки підпису
-settings.trust_model=Модель довіри для підпису
-settings.trust_model.default=Модель довіри за замовчуванням
-settings.trust_model.default.desc=Використовувати модель довіри репозиторію за замовчуванням для цього сайту.
+settings.trust_model=Модель довіри до підпису
+settings.trust_model.default=Типова модель довіри
+settings.trust_model.default.desc=Використовувати типову модель довіри до сховища для цього сайту.
settings.trust_model.collaborator=Співавтор
settings.trust_model.collaborator.long=Співавтор: підписи довіри від співавторів
-settings.trust_model.collaborator.desc=Допустимі підписи співавторів цього репозиторію буде позначано як "довірені" - (якщо вони відповідають комітеру чи ні). В іншому випадку дійсні підписи будуть позначені як «ненадійні», якщо підпис співпадає з комітером і «невідповідні», якщо ні.
-settings.trust_model.committer=Коммітер
-settings.trust_model.committer.long=Коммітер: Довіряти підписам які відповідають комітерам (Так як і на GitHub, і змусить підписати коміти Gitea в якості коммітера)
-settings.trust_model.collaboratorcommitter=Співавтор+Коммітер
-settings.trust_model.collaboratorcommitter.long=Співавтор+Коммітер: Довіряти підписам від співавторів, які відповідають комітеру
-settings.trust_model.collaboratorcommitter.desc=Допустимі підписи співавторів цього репозиторію будуть позначатися як "довірені", якщо вони відповідають комітеру. В іншому випадку дійсні підписи будуть позначені як «ненадійні», якщо підпис співпадає з комітером і як «невідповіді» в іншому випадку. Це змусить Gitea бути відміченим як комітер після підписання фактичним комітером, позначеним Co-Authored-By: і Co-Committed-By: прикріпленим до комміту. Типовий ключ Gitea повинен відповідати користувачу в базі даних.
-settings.wiki_delete=Видалити вікі-дані
-settings.wiki_delete_desc=Будьте уважні! Як тільки ви видалите Вікі - шляху назад не буде.
-settings.wiki_delete_notices_1=- Це назавжди знищить і відключить wiki для %s.
-settings.confirm_wiki_delete=Видалити Вікі-дані
-settings.wiki_deletion_success=Дані wiki були видалені.
+settings.trust_model.committer=Комітер
+settings.trust_model.collaboratorcommitter=Співавтор+Комітер
+settings.trust_model.collaboratorcommitter.long=Співавтор+Комітер: Довіряти підписам від співавторів, які відповідають комітеру
+settings.wiki_delete=Видалити дані Вікі
+settings.wiki_delete_desc=Видалення даних Вікі сховища є остаточним і не може бути скасоване.
+settings.wiki_delete_notices_1=- Це назавжди видалить і вимкне вікі сховища для %s.
+settings.confirm_wiki_delete=Видалити дані Вікі
+settings.wiki_deletion_success=Дані Вікі видалено.
settings.delete=Видалити цей репозиторій
-settings.delete_desc=Будьте уважні! Як тільки ви видалите репозиторій - шляху назад не буде.
-settings.delete_notices_1=- Цю операцію НЕ МОЖНА відмінити.
-settings.delete_notices_2=- Ця операція остаточно видалить %s репозиторій, включаючи код, задачі, коментарі, вікі та налаштування співавторів.
+settings.delete_desc=Видалення сховища є остаточним і не може бути скасоване.
+settings.delete_notices_1=- Цю операцію НЕМОЖЛИВО скасувати.
settings.delete_notices_fork_1=- Всі форки стануть незалежними репозиторіями після видалення.
settings.deletion_success=Репозиторій успішно видалено.
-settings.update_settings_success=Налаштування репозиторію було оновлено.
+settings.update_settings_success=Налаштування сховища оновлено.
+settings.update_settings_no_unit=Сховище повинно дозволяти хоча б якусь взаємодію.
settings.confirm_delete=Видалити репозиторій
settings.add_collaborator=Додати співавтора
settings.add_collaborator_success=Додано співавтора.
-settings.add_collaborator_inactive_user=Не можливо додати неактивного користувача якості співавтора.
+settings.add_collaborator_inactive_user=Неможливо додати неактивного користувача як співавтора.
+settings.add_collaborator_owner=Неможливо додати власника як співавтора.
settings.add_collaborator_duplicate=Співавтора уже додано до цього репозиторію.
settings.delete_collaborator=Видалити
settings.collaborator_deletion=Видалити співавтора
-settings.collaborator_deletion_desc=Цей користувач більше не матиме доступу для спільної роботи в цьому репозиторії після видалення. Ви хочете продовжити?
-settings.remove_collaborator_success=Співавтор видалений.
+settings.collaborator_deletion_desc=Видалення співавтора призведе до відкликання його доступу до цього сховища. Продовжити?
+settings.remove_collaborator_success=Співавтора видалено.
settings.org_not_allowed_to_be_collaborator=Організації не можуть бути додані як співавтори.
settings.change_team_access_not_allowed=Зміна доступу команди до репозитарію обмежена власником організації
-settings.team_not_in_organization=Команда та репозитарій мають привязки до різних організацій
+settings.team_not_in_organization=Команда не належить до тієї ж організації, що й сховище
settings.teams=Команди
-settings.add_team=Додати Команду
-settings.add_team_duplicate=Команда вже має привязку до репозитарію
-settings.add_team_success=Команда отримала доступ до репозиторію.
-settings.change_team_permission_tip=Дозволи команди встановлюються на сторінці налаштувань команди та не можуть бути заданими для кожного з репозиторіїв окремо
+settings.add_team=Додати команду
+settings.add_team_duplicate=Команда вже має сховище
settings.delete_team_tip=Ця команда має доступ до всіх репозиторіїв та не може бути видалена
-settings.remove_team_success=Доступ команди до репозиторію видалений.
+settings.remove_team_success=Доступ команди до сховища видалено.
settings.add_webhook=Додати веб-хук
-settings.add_webhook.invalid_channel_name=Назва каналу Webhook не може бути порожньою і не може містити лише символ #.
-settings.hooks_desc=Веб-хуки автоматично робить HTTP POST-запити на сервер, коли відбуваються певні події Gitea. Дізнайтеся більше в інструкції по використанню web-хуків .
+settings.add_webhook.invalid_channel_name=Назва каналу веб-хука не може бути порожньою і містити лише символ #.
+settings.hooks_desc=Веб-хуки автоматично роблять HTTP POST запити до сервера, коли відбуваються певні події Gitea. Дізнайтеся більше в інструкції по використанню веб-хуків .
settings.webhook_deletion=Видалити веб-хук
-settings.webhook_deletion_desc=Видалення цього веб-хука призведе до видалення всієї пов'язаної з ним інформації, включаючи історію. Бажаєте продовжити?
-settings.webhook_deletion_success=Webhook видалено.
-settings.webhook.test_delivery=Перевірити доставку
-settings.webhook.test_delivery_desc=Перевірте цей веб-хук з підробленою подією.
+settings.webhook_deletion_desc=Видалення веб-хука видаляє його налаштування та історію доставки. Продовжити?
+settings.webhook_deletion_success=Веб-хук видалено.
settings.webhook.request=Запит
settings.webhook.response=Відповідь
settings.webhook.headers=Заголовки
settings.webhook.payload=Зміст
settings.webhook.body=Тіло
-settings.githook_edit_desc=Якщо хук неактивний, буде представлено зразок змісту. Порожнє значення у цьому полі призведе до вимкнення хуку.
-settings.githook_name=Ім'я хуку
+settings.webhook.replay.description=Повторити цей веб-хук.
+settings.githook_edit_desc=Якщо хук неактивний, буде показано зразок вмісту. Якщо залишити вміст порожнім, хук буде вимкнено.
+settings.githook_name=Назва хуку
settings.githook_content=Зміст хука
settings.update_githook=Оновити хук
-settings.add_webhook_desc=Gitea буде відправляти POST запити на вказану URL адресу, з інформацією про події, що відбуваються. Подробиці на сторінці інструкції по використанню web-хуків .
+settings.add_webhook_desc=Gitea надішле запити POST із зазначеним типом змісту на цільову URL-адресу. Дізнайтеся більше в інструкції по використанню веб-хуків .
settings.payload_url=Цільова URL-адреса
settings.http_method=Метод HTTP
settings.content_type=Тип змісту
settings.secret=Секрет
settings.slack_username=Ім'я кристувача
-settings.slack_icon_url=URL іконки
+settings.slack_icon_url=URL піктограми
settings.slack_color=Колір
settings.discord_username=Ім'я кристувача
-settings.discord_icon_url=URL іконки
+settings.discord_icon_url=URL піктограми
settings.event_desc=Тригер:
-settings.event_push_only=Push події
settings.event_send_everything=Всі події
settings.event_choose=Власні події…
settings.event_header_repository=Події репозиторію
@@ -1820,41 +2131,44 @@ settings.event_create_desc=Гілку або тег створено.
settings.event_delete=Видалити
settings.event_delete_desc=Гілку або мітку було видалено.
settings.event_fork=Форк
-settings.event_fork_desc=Репозиторій було форкнуто.
settings.event_wiki=Вікі
+settings.event_statuses=Статуси
+settings.event_statuses_desc=Статус коміту оновлено з API.
settings.event_release=Реліз
-settings.event_release_desc=Реліз опублікований, оновлений або видалений з репозиторія.
+settings.event_release_desc=Реліз опубліковано, оновлено або видалено зі сховища.
settings.event_push=Push
-settings.event_push_desc=Git push до репозиторію.
settings.event_repository=Репозиторій
settings.event_repository_desc=Репозиторій створений або видалено.
settings.event_header_issue=Події задачі
settings.event_issues=Задачі
-settings.event_issues_desc=Задача відкрита, закрита, повторно відкрита або відредагована.
-settings.event_issue_assign=Задача прив'язана
+settings.event_issues_desc=Задачу відкрито, закрито, повторно відкрито, відредаговано або видалено.
+settings.event_issue_assign=Задачу призначено
settings.event_issue_assign_desc=Задачу призначено або скасовано.
-settings.event_issue_label=Задача з міткою
settings.event_issue_label_desc=Мітки задачі оновлено або видалено.
-settings.event_issue_milestone=Задача з етапом
-settings.event_issue_milestone_desc=Задача призначена на етап або видалена з етапу.
settings.event_issue_comment=Коментар задачі
settings.event_issue_comment_desc=Коментар задачі створено, видалено чи відредаговано.
settings.event_header_pull_request=Події запиту злиття
-settings.event_pull_request=Запити до злиття
-settings.event_pull_request_desc=Запит до злиття відкрито, закрито, перевідкрито або відредаговано.
+settings.event_pull_request=Запити на злиття
+settings.event_pull_request_desc=Запит на злиття відкрито, закрито, повторно відкрито, відредаговано або видалено.
settings.event_pull_request_assign=Запит на злиття призначено
-settings.event_pull_request_assign_desc=Запит про злиття призначено або скасовано.
+settings.event_pull_request_assign_desc=Запит на злиття призначено або скасовано.
settings.event_pull_request_label=Запиту на злиття призначена мітка
settings.event_pull_request_label_desc=Мітка запиту на злиття оновлена або очищена.
-settings.event_pull_request_milestone=Запит на злиття призначений на етап
-settings.event_pull_request_milestone_desc=Запит на злиття призначений на етап або видалений з етапу.
-settings.event_pull_request_comment=Запит на злиття прокоментований
+settings.event_pull_request_milestone=Запит на злиття додано до етапу
+settings.event_pull_request_milestone_desc=Запит на злиття додано до етапу або видалено з етапу.
+settings.event_pull_request_comment=Запит на злиття прокоментовано
settings.event_pull_request_comment_desc=Коментар запиту на злиття створено, відредаговано чи видалено.
settings.event_pull_request_review=Запит на злиття рецензовано
-settings.event_pull_request_review_desc=Коментар запиту до злиття підтверджений, відхилений або рецензований.
+settings.event_pull_request_review_desc=Запит на злиття підтверджено, відхилено або прокоментовано.
settings.event_pull_request_sync=Запит на злиття синхронізується
settings.event_pull_request_sync_desc=Запит до злиття синхронізовано.
+settings.event_header_workflow=Події робочого процесу
+settings.event_workflow_run=Запущений робочий процес
+settings.event_workflow_run_desc=Запущений робочий процес Gitea в черзі, в очікуванні, в процесі виконання або завершений.
+settings.event_workflow_job=Завдання робочого процесу
+settings.event_package=Пакет
settings.branch_filter=Фільтр гілок
+settings.authorization_header=Заголовок авторизації
settings.active=Активний
settings.active_helper=Інформацію про викликані події буде надіслано за цією веб-хук URL-адресою.
settings.add_hook_success=Веб-хук було додано.
@@ -1866,71 +2180,108 @@ settings.hook_type=Тип хука
settings.slack_token=Токен
settings.slack_domain=Домен
settings.slack_channel=Канал
-settings.deploy_keys=Ключі для розгортування
-settings.add_deploy_key=Додати ключ для розгортування
-settings.deploy_key_desc=Ключі розгортання доступні тільки для читання. Це не те ж саме що і SSH-ключі аккаунта.
+settings.web_hook_name_gitea=Gitea
+settings.web_hook_name_gogs=Gogs
+settings.web_hook_name_slack=Slack
+settings.web_hook_name_discord=Discord
+settings.web_hook_name_dingtalk=DingTalk
+settings.web_hook_name_telegram=Telegram
+settings.web_hook_name_matrix=Matrix
+settings.web_hook_name_msteams=Microsoft Teams
+settings.web_hook_name_feishu_or_larksuite=Feishu / Lark Suite
+settings.web_hook_name_feishu=Feishu
+settings.web_hook_name_larksuite=Lark Suite
+settings.web_hook_name_wechatwork=WeCom (Wechat Work)
+settings.web_hook_name_packagist=Packagist
+settings.packagist_username=Ім'я користувача Packagist
+settings.packagist_api_token=Токен API
+settings.deploy_keys=Ключі для розгортання
+settings.add_deploy_key=Додати ключ для розгортання
+settings.deploy_key_desc=Ключі розгортання мають доступ до сховища лише для читання.
settings.is_writable=Увімкнути доступ для запису
-settings.is_writable_info=Чи може цей ключ бути використаний для виконання push в репозиторій? Ключі розгортання завжди мають доступ на pull.
-settings.no_deploy_keys=Ви не додавали ключі розгортання.
+settings.no_deploy_keys=Ключів розгортання ще немає.
settings.title=Заголовок
settings.deploy_key_content=Зміст
-settings.key_been_used=Зміст ключа розгортання вже використовується.
-settings.key_name_used=Ключ розгортання з таким заголовком вже існує.
-settings.deploy_key_deletion=Видалити ключ для розгортування
-settings.deploy_key_deletion_desc=Видалення ключа розгортки унеможливить доступ до репозиторія з його допомогою. Ви впевнені?
+settings.key_been_used=Ключ розгортання з ідентичним вмістом вже використовується.
+settings.key_name_used=Ключ розгортання з такою ж назвою вже існує.
+settings.deploy_key_deletion=Видалити ключ розгортання
+settings.deploy_key_deletion_desc=Вилучення ключа розгортання призведе до відкликання його доступу до цього сховища. Продовжити?
settings.deploy_key_deletion_success=Ключі розгортання було видалено.
settings.branches=Гілки
settings.protected_branch=Захист гілки
-settings.protected_branch_can_push=Дозволити push?
-settings.protected_branch_can_push_yes=Ви можете виконувати push
-settings.protect_this_branch=Захистити цю гілку
-settings.protect_this_branch_desc=Запобігає видаленню гілки та обмежує виконання в ній push та злиття.
+settings.protected_branch.save_rule=Зберегти правило
+settings.protected_branch.delete_rule=Видалити правило
+settings.branch_protection=Захист гілки '%s '
+settings.protect_this_branch=Увімкнути захист гілок
settings.protect_disable_push=Заборонити Push
settings.protect_disable_push_desc=Для цієї гілки буде заборонено виконання push.
settings.protect_enable_push=Дозволити Push
settings.protect_enable_push_desc=Будь-хто із правом запису зможе виконувати push для цієї гілки (за виключенням force push).
+settings.protect_enable_merge=Увімкнути об’єднання
settings.protect_check_status_contexts=Увімкнути перевірку стану
+settings.protect_status_check_patterns=Шаблони перевірки стану:
+settings.protect_status_check_patterns_desc=Введіть шаблони, щоб вказати, які перевірки стану повинні пройти гілки, перш ніж їх буде об'єднано у гілку, що відповідає цьому правилу. Кожен рядок визначає шаблон. Шаблони не можуть бути порожніми.
settings.protect_check_status_contexts_list=Перевірки статусу знайдено для репозитарію за минулий тиждень
+settings.protect_status_check_matched=Збіг
+settings.protect_invalid_status_check_pattern=Недійсний шаблон перевірки стану: "%s".
+settings.protect_no_valid_status_check_patterns=Немає дійсних шаблонів перевірки стану.
settings.protect_required_approvals=Необхідно схвалення:
settings.dismiss_stale_approvals=Відхилити застарілі погодження
settings.dismiss_stale_approvals_desc=Коли нові коміти що змінюють вміст пулл-запиту відправляються в гілку, старі погодження будуть відхилені.
+settings.ignore_stale_approvals=Ігнорувати застарілі затвердження
settings.require_signed_commits=Потрібно підписані коміти
settings.require_signed_commits_desc=Відхиляти push до цієї гілки, якщо вони не підписані або підпис неможливо перевірити.
+settings.protect_branch_name_pattern=Шаблон назви захищених гілок
+settings.protect_branch_name_pattern_desc=Шаблони назв захищених гілок. Перегляньте документацію щодо синтаксису шаблону. Приклади: main, release/**
+settings.protect_patterns=Шаблони
+settings.protect_protected_file_patterns=Шаблони захищених файлів (розділені крапками з комою ';'):
+settings.protect_unprotected_file_patterns=Шаблони незахищених файлів (розділені крапкою з комою ';'):
settings.add_protected_branch=Увімкнути захист
settings.delete_protected_branch=Вимкнути захист
+settings.update_protect_branch_success=Оновлено захист гілок для правила "%s".
+settings.remove_protected_branch_success=Видалено захист гілок для правила "%s".
+settings.remove_protected_branch_failed=Не вдалося видалити правило захисту гілки "%s.
settings.protected_branch_deletion_desc=Будь-який користувач з дозволами на запис зможе виконувати push в цю гілку. Ви впевнені?
-settings.block_rejected_reviews=Блокувати злиття при відкидаючих рецензіях
-settings.block_rejected_reviews_desc=Злиття буде недоступним, якщо є запит змін від офіційних рецензентів, навіть за наявності достатньої кількості схвалень.
-settings.block_on_official_review_requests=Блокувати злиття при запиті на офіціальний розгляд
+settings.block_rejected_reviews=Блокувати об'єднання якщо рецензії відхилено
+settings.block_rejected_reviews_desc=Об'єднання буде неможливим, якщо офіційні рецензенти вимагають внесення змін, навіть якщо є достатня кількість схвалень.
+settings.block_on_official_review_requests=Блокувати об'єднання за офіційними запитами на рецензування
settings.block_on_official_review_requests_desc=Об’єднання неможливе, коли воно має офіційні запити на розгляд, навіть якщо достатньо схвалень.
-settings.block_outdated_branch=Блокувати злиття, якщо запит на злиття застарів
-settings.block_outdated_branch_desc=Злиття буде неможливим, коли головна гілка позаду основної.
-settings.default_branch_desc=Головна гілка є 'базовою' для вашого репозиторія, на яку за замовчуванням спрямовані всі запити на злиття і яка є обличчям вашого репозиторія. Перше, що побачить відвідувач - це зміст головної гілки. Виберіть її з уже існуючих:
+settings.block_outdated_branch=Блокувати об'єднання, якщо запит на злиття застарів
+settings.block_outdated_branch_desc=Об'єднання буде неможливим, якщо головна гілка позаду основної.
+settings.block_admin_merge_override=Адміністратори повинні дотримуватися правил захисту гілки
+settings.default_branch_desc=Обрати типову гілку сховища для запитів на злиття і комітів:
+settings.merge_style_desc=Стилі об'єднання
+settings.default_merge_style_desc=Типовий стиль об'єднання
settings.choose_branch=Оберіть гілку…
settings.no_protected_branch=Немає захищених гілок.
settings.edit_protected_branch=Редагувати
+settings.protected_branch_required_rule_name=Необхідна назва правила
+settings.protected_branch_duplicate_rule_name=Назва правила вже існує
settings.protected_branch_required_approvals_min=Число необхідних схвалень не може бути від'ємним.
settings.tags=Мітки
settings.tags.protection=Захист мітки
-settings.tags.protection.pattern=Шаблон тега
+settings.tags.protection.pattern=Шаблон мітки
settings.tags.protection.allowed=Дозволено
settings.tags.protection.allowed.users=Дозволені користувачі
settings.tags.protection.allowed.teams=Дозволені команди
settings.tags.protection.allowed.noone=Ніхто
-settings.tags.protection.create=Захистна мітка
+settings.tags.protection.create=Захистити мітку
settings.tags.protection.none=Там не немає захищених міток.
+settings.tags.protection.pattern.description=Ви можете використовувати єдине ім’я, глобальний шаблон або регулярний вираз, щоб відповідати кільком міткам. Докладніше читайте в посібнику із захищених міток .
settings.bot_token=Токен для бота
-settings.chat_id=Чат ID
+settings.chat_id=ID чату
settings.matrix.homeserver_url=URL домашньої сторінки
-settings.matrix.room_id=Номер кімнати
+settings.matrix.room_id=ID кімнати
settings.matrix.message_type=Тип повідомлення
-settings.archive.button=Архівний репозиторій
+settings.visibility.public.button=Зробити публічним
settings.archive.header=Відправити репозиторій в архів
-settings.archive.success=Репозиторію успішно присвоєно статус архівного.
-settings.archive.error=Сталася помилка при спробі архівувати репозиторій. Докладнішу інформацію див. у журналі.
-settings.archive.error_ismirror=Неможливо архівувати дзеркальний репозиротрій.
+settings.archive.success=Сховище успішно заархівовано.
+settings.archive.error=Сталася помилка при спробі архівувати репозиторій. Докладнішу інформацію дивіться у журналі.
+settings.archive.error_ismirror=Неможливо архівувати дзеркальне сховище.
settings.archive.branchsettings_unavailable=Параметри гілки не доступні, якщо репозиторій архівний.
settings.archive.tagsettings_unavailable=Параметри міток недоступні, якщо репозиторій архівний.
+settings.unarchive.header=Розархівувати це сховище
+settings.unarchive.success=Сховище успішно розархівовано.
settings.update_avatar_success=Аватар репозиторію оновлений.
settings.lfs=LFS
settings.lfs_filelist=Файли LFS, які зберігаються в цьому репозиторії
@@ -1942,15 +2293,13 @@ settings.lfs_delete=Видалити файл LFS з OID %s
settings.lfs_delete_warning=Видалення файлу LFS може спричинити помилки "Об'єкт не існує" під час перевірки. Ви впевнені?
settings.lfs_findpointerfiles=Знайти файли-посилання
settings.lfs_locks=Блокування
-settings.lfs_invalid_locking_path=Неприпустимий шлях: %s
+settings.lfs_invalid_locking_path=Недійсний шлях: %s
settings.lfs_invalid_lock_directory=Не можливо заблокувати каталог: %s
-settings.lfs_lock_already_exists=Блокування вже використовується: %s
+settings.lfs_lock_already_exists=Блокування вже існує: %s
settings.lfs_lock=Блокувати
-settings.lfs_lock_path=Шлях до файлу для блокування...
settings.lfs_locks_no_locks=Відсутнє блокування
settings.lfs_lock_file_no_exist=Заблокований файл не існує у гілці за замовчуванням
settings.lfs_force_unlock=Примусове розблокування
-settings.lfs_pointers.found=Знайдено %d посилань на blob - %d пов'язаних, %d непов'язаних (%d відсутні у сховищі)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=В репозиторії
@@ -1984,7 +2333,7 @@ diff.stats_desc_file=%d змін: %d доповнень та %d видалень
diff.bin=BIN
diff.bin_not_shown=Бінарний файл не відображається.
diff.view_file=Переглянути файл
-diff.file_before=Перед
+diff.file_before=До
diff.file_after=Після
diff.file_image_width=Ширина
diff.file_image_height=Висота
@@ -1996,6 +2345,7 @@ diff.show_more=Показати більше
diff.load=Завантажити різницю
diff.generated=згенерований
diff.vendored=сторонній
+diff.comment.add_line_comment=Додати простий коментар
diff.comment.placeholder=Залишити коментар
diff.comment.add_single_comment=Додати простий коментар
diff.comment.add_review_comment=Додати коментар
@@ -2003,81 +2353,129 @@ diff.comment.start_review=Розпочати рецензію
diff.comment.reply=Відповідь
diff.review=Рецензія
diff.review.header=Надіслати рецензію
-diff.review.placeholder=Рецензійований коментарій
+diff.review.placeholder=Рецензія коментаря
diff.review.comment=Коментар
diff.review.approve=Затвердити
diff.review.reject=Запит змін
diff.committed_by=зафіксовано
diff.protected=Захищений
-diff.image.side_by_side=Пліч-о-пліч
-diff.image.swipe=Свайп
-diff.image.overlay=Оверлей
+diff.image.side_by_side=Поруч
+diff.image.swipe=Провести пальцем
+diff.image.overlay=Накласти
+diff.has_escaped=Цей рядок містить приховані символи Юнікоду
+diff.show_file_tree=Показати дерево файлів
+diff.hide_file_tree=Сховати дерево файлів
+diff.submodule_added=Підмодуль %[1]s додано в %[2]s
+diff.submodule_deleted=Підмодуль %[1]s видалено з %[2]s
+diff.submodule_updated=Підмодуль %[1]s оновлено: %[2]s
releases.desc=Відслідковувати версії проєкту і завантаження.
release.releases=Релізи
release.detail=Деталі релізу
-release.tags=Теги
+release.tags=Мітки
release.new_release=Новий реліз
release.draft=Чернетка
release.prerelease=Пре-реліз
release.stable=Стабільний
+release.latest=Останні
release.compare=Порівняти
release.edit=редагувати
release.ahead.commits=%d коміт(ів)
release.ahead.target=до %s з моменту цього випуску
release.source_code=Код
-release.new_subheader=Публікація релізів допоможе вам організувати версію проєкту.
-release.edit_subheader=Публікація релізів допоможе вам організувати версію проєкту.
-release.tag_name=Назва тегу
+release.new_subheader=Релізи впорядковують версії проєкту.
+release.edit_subheader=Релізи впорядковують версії проєкту.
+release.tag_name=Назва мітки
release.target=Ціль
-release.tag_helper=Виберіть існуючий тег або створіть новий.
+release.tag_helper=Вибрати існуючу мітку або створити нову.
+release.title=Назва релізу
+release.title_empty=Заголовок не може бути порожнім.
+release.message=Опишіть цей реліз
release.prerelease_desc=Позначити як пре-реліз
-release.prerelease_helper=Позначте цей випуск непридатним для ПРОД використання.
+release.prerelease_helper=Позначите випуск як непридатний для продуктивного використання.
release.cancel=Відмінити
release.publish=Опублікувати реліз
release.save_draft=Зберегти чернетку
release.edit_release=Оновити реліз
release.delete_release=Видалити реліз
-release.delete_tag=Видалити тег
+release.delete_tag=Видалити мітку
release.deletion=Видалити реліз
-release.deletion_success=Реліз, було видалено.
+release.deletion_success=Реліз видалено.
release.deletion_tag_desc=Буде видалено цей тег із репозиторію. Вміст репозиторія та історія залишаться незмінними. Продовжити?
release.deletion_tag_success=Мітка видалена.
-release.tag_name_already_exist=Реліз з цим ім'ям мітки вже існує.
-release.tag_name_invalid=Неприпустиме ім'я тега.
-release.tag_name_protected=Ім'я тега захищене.
-release.tag_already_exist=Цей тег вже використовується.
-release.downloads=Завантажити
+release.tag_name_already_exist=Реліз з такою ж міткою вже існує.
+release.tag_name_invalid=Назва мітки недійсна.
+release.tag_name_protected=Назва мітки захищена.
+release.tag_already_exist=Назва мітки вже існує.
+release.downloads=Завантаження
release.download_count=Завантаження: %s
-release.add_tag_msg=Використовуйте заголовок і зміст релізу як повідомлення як тег повідомлення.
+release.add_tag_msg=Використовуйте заголовок і зміст релізу як повідомлення мітки.
release.add_tag=Створити тільки мітку
+release.releases_for=Релізи для %s
+release.tags_for=Мітки для %s
-branch.name=Ім'я гілки
+branch.name=Назва гілки
+branch.already_exists=Гілка з назвою "%s" вже існує.
branch.delete_head=Видалити
+branch.delete=`Видалити гілку "%s"`
branch.delete_html=Видалити гілку
+branch.delete_desc=Видалення гілки є незворотним. Хоча видалена гілка може продовжувати існувати ще деякий час до того, як її буде видалено остаточно, у більшості випадків це НЕМОЖЛИВО скасувати. Продовжити?
+branch.deletion_success=Гілку "%s" видалено.
+branch.deletion_failed=Не вдалося видалити гілку "%s".
+branch.delete_branch_has_new_commits=Гілку "%s" не можна видалити, оскільки після з'єднання було додано нові коміти.
branch.create_branch=Створити гілку %s
+branch.create_from=`з "%s"`
+branch.create_success=Створено гілку "%s".
+branch.branch_name_conflict=Назва гілки "%s" конфліктує з уже існуючою гілкою "%s".
+branch.tag_collision=Гілка "%s" не може бути створена, оскільки у сховищі вже існує мітка з такою назвою.
branch.deleted_by=Видалено %s
+branch.restore_success=Гілку "%s" відновлено.
+branch.restore_failed=Не вдалося відновити гілку "%s".
+branch.protected_deletion_failed=Гілка "%s" захищена. Її неможливо видалити.
+branch.default_deletion_failed=Гілка "%s" стандартна. Її неможливо видалити.
+branch.restore=`Відновити гілку "%s"`
+branch.download=`Завантажити гілку "%s"`
+branch.rename=`Перейменувати гілку "%s"`
branch.included_desc=Ця гілка є частиною типової гілки
branch.included=Включено
branch.create_new_branch=Створити гілку з гілки:
branch.confirm_create_branch=Створити гілку
+branch.warning_rename_default_branch=Ви перейменовуєте стандартну гілку.
+branch.rename_branch_to=Перейменувати "%s" на:
branch.confirm_rename_branch=Перейменувати гілку
branch.create_branch_operation=Створити гілку
branch.new_branch=Створити нову гілку
+branch.new_branch_from=`Створити нову гілку з "%s"`
branch.renamed=Гілку %s перейменовано на %s.
+branch.rename_default_or_protected_branch_error=Лише адміністратори можуть перейменовувати типові або захищені гілки.
+branch.rename_protected_branch_failed=Ця гілка захищена правилами захисту на основі глобальних правил.
tag.create_tag=Створити тег %s
+tag.create_tag_operation=Створити мітку
+tag.confirm_create_tag=Створити мітку
+tag.create_tag_from=`Створити нову мітку з "%s"`
+tag.create_success=Мітку "%s" створено.
-topic.manage_topics=Керувати тематичними мітками
+topic.manage_topics=Керувати темами
topic.done=Готово
+topic.count_prompt=Ви не можете вибрати більше ніж 25 тем
+topic.format_prompt=Теми мають починатися з літери або цифри, можуть містити дефіси ('-') і крапки ('.'), мати довжину до 35 символів. Літери повинні бути малими.
+find_file.go_to_file=Перейти до файлу
+find_file.no_matching=Не знайдено відповідного файлу
error.csv.too_large=Не вдається відобразити цей файл, тому що він завеликий.
error.csv.unexpected=Не вдається відобразити цей файл, тому що він містить неочікуваний символ в рядку %d і стовпці %d.
error.csv.invalid_field_count=Не вдається відобразити цей файл, тому що він має неправильну кількість полів у рядку %d.
[graphs]
+component_loading_failed=Не вдалося завантажити %s
+component_loading_info=Це може зайняти трохи часу…
+component_failed_to_load=Сталась непередбачена помилка.
+code_frequency.what=частота коду
+contributors.what=внески
+recent_commits.what=нові коміти
[org]
org_name_holder=Назва організації
@@ -2097,11 +2495,13 @@ team_name=Назва команди
team_desc=Опис
team_name_helper=Назва команди має бути простою та зрозумілою.
team_desc_helper=Опишіть мету або роль команди.
-team_access_desc=Доступ до репозиторія
+team_access_desc=Доступ до сховища
team_permission_desc=Права доступу
team_unit_desc=Дозволити доступ до розділів репозиторію
team_unit_disabled=(Вимкнено)
+form.name_reserved=Назву організації "%s" зарезервовано.
+form.name_pattern_not_allowed=Шаблон "%s" не допускається в назві організації.
form.create_org_not_allowed=Вам не дозволено створювати організації.
settings=Налаштування
@@ -2112,28 +2512,38 @@ settings.location=Розташування
settings.permission=Дозволи
settings.repoadminchangeteam=Адміністратор репозитарію може додавати та видаляти доступ для команд
settings.visibility=Видимість
-settings.visibility.public=Публічний
-settings.visibility.limited_shortname=Обмежений
-settings.visibility.private=Приватний (Видимий лише членам організації)
+settings.visibility.public=Публічна
+settings.visibility.limited=Обмежений (Видимий лише для автентифікованих користувачів)
+settings.visibility.limited_shortname=Обмежена
+settings.visibility.private=Приватна (Видима лише членам організації)
settings.visibility.private_shortname=Приватний
settings.update_settings=Оновити налаштування
settings.update_setting_success=Налаштування організації оновлені.
-settings.change_orgname_redirect_prompt=Старе ім'я буде перенаправлено до тих пір, поки воно не буде заброньовано.
+
+settings.rename=Перейменувати організацію
+settings.rename_desc=Зміна назви організації також змінить URL адресу вашої організації і звільнить стару назву.
+settings.rename_new_org_name=Назва нової організації
+settings.rename_notices_1=Цю операцію НЕМОЖЛИВО скасувати.
+settings.rename_notices_2=Стара назва буде перенаправлятися на нову, поки хтось не використає її.
+
settings.update_avatar_success=Аватар організації оновлений.
settings.delete=Видалити організацію
settings.delete_account=Видалити цю організацію
-settings.delete_prompt=Організація буде остаточно видалена. Це НЕ МОЖЛИВО відмінити!
-settings.confirm_delete_account=Підтвердіть видалення
-settings.delete_org_title=Видалити організацію
-settings.delete_org_desc=Ця організація буде безповоротно видалена. Продовжити?
-settings.hooks_desc=Додайте webhooks, який буде викликатися для всіх репозиторіїв якими володіє ця організація.
+settings.delete_prompt=Організацію буде остаточно видалено. Це НЕМОЖЛИВО скасувати!
+settings.name_confirm=Введіть назву організації для підтвердження:
+settings.delete_notices_1=Цю операцію НЕМОЖЛИВО скасувати.
+settings.delete_notices_3=Ця операція назавжди видалить всі пакети %s .
+settings.delete_notices_4=Ця операція назавжди видалить всі проєкти %s .
+settings.confirm_delete_account=Підтвердити видалення
+settings.delete_successful=Організацію %s успішно видалено.
+settings.hooks_desc=Додайте веб-хуки, які спрацьовуватимуть для всіх сховищ у цій організації.
-settings.labels_desc=Додати мітки, які можуть бути використані для задач для всіх репозиторіїв в цій організації.
+settings.labels_desc=Додайте мітки, які можна використовувати у задачах для усіх сховищ у цій організації.
members.membership_visibility=Видимість учасника:
members.public=Показувати
-members.public_helper=зробити прихованим
+members.public_helper=приховати
members.private=Прихований
members.private_helper=зробити видимим
members.member_role=Роль учасника:
@@ -2152,22 +2562,27 @@ teams.leave.detail=Покинути %s?
teams.can_create_org_repo=Створити репозиторії
teams.can_create_org_repo_helper=Учасники можуть створювати нові репозиторії в організації. Автор отримає доступ адміністратора до нового репозиторію.
teams.none_access=Немає доступу
-teams.read_access=Прочитані
+teams.none_access_helper=Учасники не можуть переглядати або виконувати будь-які інші дії з цією одиницею. Це не впливає на загальнодоступні сховища.
+teams.general_access=Загальний доступ
+teams.general_access_helper=Дозволи учасників будуть визначатися відповідно до наведеної нижче таблиці дозволів.
+teams.read_access=Читання
teams.read_access_helper=Учасники можуть переглядати та клонувати репозиторії команд.
+teams.write_access=Запис
teams.write_access_helper=Учасники можуть читати і виконувати push в репозиторії команд.
teams.admin_access=Доступ адміністратора
teams.admin_access_helper=Учасники можуть виконувати pull, push в репозиторії команд і додавати співавторів в команду.
teams.no_desc=Ця команда не має опису
teams.settings=Налаштування
-teams.owners_permission_desc=Власник має повний доступ до усіх репозиторіїв та має права адміністратора організації.
+teams.owners_permission_desc=Власники мають повний доступ до усіх репозиторіїв та права адміністратора організації.
teams.members=Учасники команди
teams.update_settings=Оновити налаштування
teams.delete_team=Видалити команду
teams.add_team_member=Додати учасника команди
+teams.invite_team_member=Запросити до %s
teams.delete_team_title=Видалити команду
teams.delete_team_desc=Видалення команди скасовує доступ до репозиторія для її учасників. Продовжити?
teams.delete_team_success=Команду було видалено.
-teams.read_permission_desc=Ця команда має доступ для читання : учасники можуть переглядати та клонувати репозиторії.
+teams.read_permission_desc=Ця команда має доступ на читання : учасники можуть переглядати та клонувати репозиторії.
teams.write_permission_desc=Ця команда надає доступ на запис : учасники можуть отримувати й виконувати push команди до репозитрію.
teams.admin_permission_desc=Ця команда надає адміністраторський доступ: учасники можуть читати, виконувати push команди та додавати співробітників до репозиторію.
teams.create_repo_permission_desc=Крім того, ця команда надає дозвіл Створити репозиторій : учасники можуть створювати нові репозиторії в організації.
@@ -2179,6 +2594,7 @@ teams.add_all_repos_desc=Це додасть всі репозиторії ор
teams.add_duplicate_users=Користувач уже є членом команди.
teams.repos.none=Для команди немає доступних репозиторіїв.
teams.members.none=Немає членів в цій команді.
+teams.members.blocked_user=Не вдається додати користувача, оскільки він заблокований організацією.
teams.specific_repositories=Конкретні репозиторії
teams.specific_repositories_helper=Учасники матимуть доступ лише до репозиторіїв, які були явно додані до команди. Вибір цього пункту не призводить до автоматичного видалення репозиторіїв, доданих з Всі репозиторії .
teams.all_repositories=Всі репозиторії
@@ -2186,17 +2602,34 @@ teams.all_repositories_helper=Команда має доступ до всіх
teams.all_repositories_read_permission_desc=Ця команда надає дозвіл Перегляд для всіх репозиторіїв : учасники можуть переглядати та клонувати їх.
teams.all_repositories_write_permission_desc=Ця команда надає дозвіл Запис для всіх репозиторіїв : учасники можуть переглядати та виконувати push в репозиторіях.
teams.all_repositories_admin_permission_desc=Ця команда надає дозвіл Адміністрування для всіх репозиторіїв : учасники можуть переглядати, виконувати push та додавати співробітників.
+teams.invite.title=Вас запросили приєднатися до команди %s в організації %s .
+teams.invite.by=Запрошений %s
+teams.invite.description=Будь ласка, натисніть на кнопку нижче, щоб приєднатися до команди.
+view_as_role=Переглянути як: %s
+view_as_public_hint=Ви переглядаєте README як публічний користувач.
+view_as_member_hint=Ви переглядаєте README як член цієї організації.
+worktime=Час роботи
+worktime.date_range_start=Дата початку
+worktime.date_range_end=Дата завершення
+worktime.query=Запит
+worktime.time=Час
+worktime.by_milestones=За етапами
+worktime.by_members=За учасниками
[admin]
+maintenance=Технічне обслуговування
dashboard=Панель управління
+self_check=Самоперевірка
+identity_access=Ідентифікація та доступ
users=Облікові записи користувачів
organizations=Організації
+assets=Ресурси коду
repositories=Репозиторії
hooks=Веб-хуки
+integrations=Інтеграції
authentication=Джерела автентифікації
-emails=Електронні адреси Користувача
config=Конфігурація
config_summary=Підсумок
config_settings=Налаштування
@@ -2205,8 +2638,11 @@ monitor=Моніторинг
first_page=Перша
last_page=Остання
total=Разом: %d
+settings=Адміністративні налаштування
+dashboard.new_version_hint=Gitea %s тепер доступна, ви використовуєте %s. Перевірте блог для отримання додаткової інформації.
dashboard.statistic=Підсумок
+dashboard.maintenance_operations=Операції з технічного обслуговування
dashboard.system_status=Статус системи
dashboard.operation_name=Назва операції
dashboard.operation_switch=Перемкнути
@@ -2215,34 +2651,28 @@ dashboard.clean_unbind_oauth=Очистити список незавершен
dashboard.clean_unbind_oauth_success=Всі незавершені зв'язки OAuth були видалені.
dashboard.task.started=Запущено завдання: %[1]s
dashboard.task.process=Завдання: %[1]s
+dashboard.task.cancelled=Завдання: %[1]s скасовано: %[3]s
dashboard.task.error=Помилка у завданні: %[1]s:%[3]s
dashboard.task.finished=Завершилося завдання, яке запустив %[2]s: %[1]s
dashboard.task.unknown=Невідоме завдання: %[1]s
dashboard.cron.started=Запущено Cron: %[1]s
dashboard.cron.process=Cron: %[1]s
+dashboard.cron.cancelled=Планувальник: %[1]s скасовано: %[3]s
dashboard.cron.error=Помилка в Cron: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s завершено
dashboard.delete_inactive_accounts=Видалити всі неактивовані облікові записи
-dashboard.delete_inactive_accounts.started=Запущено завдання видалення всі неактивованих облікових записів.
dashboard.delete_repo_archives=Видалити всі архіви репозиторіїв (ZIP, TAR.GZ, і т. д..)
-dashboard.delete_repo_archives.started=Запущено завдання видалення всіх архівів репозиторіїв.
-dashboard.delete_missing_repos=Видалити всі записи про репозиторії з відсутніми файлами Git
-dashboard.delete_missing_repos.started=Запущено завдання видалення всіх репозиторіїв, в яких відсутні файли Git.
-dashboard.delete_generated_repository_avatars=Видалити репозиторій з згенерованими аватарами
+dashboard.delete_missing_repos=Видаліть усі сховища, в яких відсутні файли Git
+dashboard.delete_generated_repository_avatars=Видалити згенеровані аватарки сховища
+dashboard.sync_repo_branches=Синхронізувати пропущені гілки з даних git до баз даних
dashboard.update_mirrors=Оновити дзеркала
dashboard.repo_health_check=Перевірка стану всіх репозиторіїв
dashboard.check_repo_stats=Перевірити статистику всіх репозиторіїв
dashboard.archive_cleanup=Видалити старі архіви репозиторіїв
-dashboard.deleted_branches_cleanup=Прибрати видалені гілки
dashboard.update_migration_poster_id=Оновити мігровані ID авторів
-dashboard.git_gc_repos=Виконати очистку сміття для всіх репозиторіїв
-dashboard.resync_all_sshkeys=Оновити файл '.ssh/authorized_keys' з SSH ключами Gitea.
-dashboard.resync_all_sshprincipals=Оновіть файл '.ssh/authorized_princтipals' з SSH даними користувача Gitea.
-dashboard.resync_all_hooks=Пересинхронізувати перед-прийнятні, оновлюючі та пост-прийнятні хуки в усіх репозиторіях.
-dashboard.reinit_missing_repos=Переініціалізувати усі репозитрії git-файли яких втрачено
+dashboard.reinit_missing_repos=Заново ініціалізувати всі відсутні сховища Git'а, для яких існують записи
dashboard.sync_external_users=Синхронізувати дані зовнішніх користувачів
-dashboard.cleanup_hook_task_table=Очистити hook_task таблицю
-dashboard.server_uptime=Uptime серверу
+dashboard.server_uptime=Час роботи сервера
dashboard.current_goroutine=Поточна кількість Goroutines
dashboard.current_memory_usage=Поточне використання пам'яті
dashboard.total_memory_allocated=Виділено пам'яті загалом
@@ -2271,6 +2701,16 @@ dashboard.total_gc_time=Загальна пауза збирача сміття
dashboard.total_gc_pause=Загальна пауза збирача сміття (GC)
dashboard.last_gc_pause=Остання пауза збирача сміття (GC)
dashboard.gc_times=Кількість запусків збирача сміття (GC)
+dashboard.delete_old_actions=Видалити всі старі дії з бази даних
+dashboard.update_checker=Перевірка оновлень
+dashboard.delete_old_system_notices=Видалити всі старі системні повідомлення з бази даних
+dashboard.stop_endless_tasks=Зупинити нескінченні завдання
+dashboard.cancel_abandoned_jobs=Скасувати покинуті завдання
+dashboard.start_schedule_tasks=Запуск запланованих завдань
+dashboard.sync_branch.started=Розпочато синхронізацію гілок
+dashboard.sync_tag.started=Розпочато синхронізацію міток
+dashboard.rebuild_issue_indexer=Перебудувати індексатор задач
+dashboard.sync_repo_licenses=Синхронізувати ліцензії сховища
users.user_manage_panel=Керування обліковими записами користувачів
users.new_account=Створити обліковий запис
@@ -2279,12 +2719,15 @@ users.full_name=Повне ім'я
users.activated=Активовано
users.admin=Адміністратор
users.restricted=Обмежено
+users.reserved=Зарезервовано
+users.bot=Бот
+users.remote=Віддалений
users.2fa=2FA
users.repos=Репозиторії
users.created=Створено
users.last_login=Останній вхід
-users.never_login=Ніколи не входив
users.send_register_notify=Надіслати повідомлення про реєстрацію користувача
+users.new_success=Обліковий запис "%s" створено.
users.edit=Редагувати
users.auth_source=Джерело автентифікації
users.local=Локальні
@@ -2304,8 +2747,10 @@ users.allow_import_local=Може імпортувати локальні реп
users.allow_create_organization=Може створювати організацій
users.update_profile=Оновити обліковий запис
users.delete_account=Видалити цей обліковий запис
-users.still_own_repo=Ваш обліковий запис все ще володіє одним або кількома репозиторіями, спочатку вам потрібно видалити або передати їх.
-users.still_has_org=Цей обліковий запис все ще є учасником однієї або декількох організацій. Для продовження, покиньте або видаліть організації.
+users.cannot_delete_self=Ви не можете видалити себе
+users.still_own_repo=Цей користувач все ще володіє одним або кількома сховищами. Спочатку видаліть або передайте ці сховища.
+users.still_has_org=Цей користувач є членом організації. Спочатку видаліть користувача з усіх організацій.
+users.purge=Видалити користувача
users.deletion_success=Обліковий запис користувача було видалено.
users.reset_2fa=Скинути 2FA
users.list_status_filter.menu_text=Фільтр
@@ -2316,22 +2761,23 @@ users.list_status_filter.is_admin=Адміністратор
users.list_status_filter.not_admin=Не адміністратор
users.list_status_filter.is_restricted=З обмеженнями
users.list_status_filter.not_restricted=Без обмежень
-users.list_status_filter.is_prohibit_login=Вхід заборонено
-users.list_status_filter.not_prohibit_login=Вхід дозволено
+users.list_status_filter.is_prohibit_login=Заборонити вхід
+users.list_status_filter.not_prohibit_login=Дозволити вхід
users.list_status_filter.is_2fa_enabled=2FA увімкнена
users.list_status_filter.not_2fa_enabled=2FA вимкнена
+users.details=Інформація про користувача
emails.email_manage_panel=Управління поштою користувача
-emails.primary=Головний
+emails.primary=Основна
emails.activated=Активовано
-emails.filter_sort.email=Електронна пошта
-emails.filter_sort.email_reverse=Електронна пошта (зворотна)
-emails.filter_sort.name=Ім'я користувача
-emails.filter_sort.name_reverse=Ім'я користувача (зворотне)
-emails.updated=Електронну пошту оновлено
+emails.filter_sort.name=Ім'я кристувача
emails.not_updated=Не вдалось оновити адресу електронної пошти: %v
-emails.duplicate_active=Ця електронна адреса вже активна для іншого користувача.
+emails.duplicate_active=Ця адреса електронної пошти вже активна для іншого користувача.
emails.change_email_header=Редагувати властивості електронної пошти
+emails.change_email_text=Ви впевнені, що хочете оновити адресу електронної пошти?
+emails.delete=Видалити адресу електронної пошти
+emails.delete_desc=Ви впевнені, що хочете видалити адресу електронної пошти?
+emails.deletion_success=Адресу електронної пошти видалено.
orgs.org_manage_panel=Керування організаціями
orgs.name=Назва
@@ -2347,12 +2793,21 @@ repos.name=Назва
repos.private=Приватний
repos.issues=Задачі
repos.size=Розмір
+repos.lfs_size=Розмір LFS
+packages.package_manage_panel=Керування пакетами
+packages.total_size=Загальний розмір: %s
+packages.unreferenced_size=Розмір без посилань: %s
+packages.cleanup=Очистити прострочені дані
+packages.cleanup.success=Очищення прострочених даних завершено
packages.owner=Власник
+packages.creator=Автор
packages.name=Назва
+packages.version=Версія
packages.type=Тип
-packages.repository=Репозиторій
+packages.repository=Сховище
packages.size=Розмір
+packages.published=Опубліковано
defaulthooks=Веб-хуки за замовчуванням
defaulthooks.add_webhook=Додати веб-хук за замовчуванням
@@ -2364,7 +2819,7 @@ systemhooks.update_webhook=Оновити системний вебхук
auths.auth_manage_panel=Керування джерелом автентифікації
auths.new=Додати джерело автентифікації
-auths.name=Ім'я
+auths.name=Назва
auths.type=Тип
auths.enabled=Увімкнено
auths.syncenabled=Увімкнути синхронізацію користувача
@@ -2381,12 +2836,13 @@ auths.user_base=База пошуку користувачів
auths.user_dn=DN користувача
auths.attribute_username=Атрибут імені користувача
auths.attribute_username_placeholder=Залиште порожнім, щоб використовувати ім'я користувача для реєстрації.
-auths.attribute_name=Атрибут імені
-auths.attribute_surname=Атрибут Surname
-auths.attribute_mail=Атрибут Email
-auths.attribute_ssh_public_key=Атрибут Відкритий SSH ключ
+auths.attribute_name=Властивості імені
+auths.attribute_surname=Властивості прізвища
+auths.attribute_mail=Властивості електронної пошти
+auths.attribute_ssh_public_key=Властивості публічного ключа SSH
+auths.attribute_avatar=Властивості аватару
auths.attributes_in_bind=Витягувати атрибути в контексті Bind DN
-auths.allow_deactivate_all=Дозволити порожньому результату пошуку відключити всіх користувачів
+auths.allow_deactivate_all=Дозволити порожній результат пошуку, щоб деактивувати всіх користувачів
auths.use_paged_search=Використовувати посторінковий пошук
auths.search_page_size=Розмір сторінки
auths.filter=Користувацький фільтр
@@ -2396,6 +2852,7 @@ auths.restricted_filter_helper=Залиште пустим, щоб не вста
auths.group_search_base=Пошукова база груп DN
auths.group_attribute_list_users=Атрибут групи зі списком користувачів
auths.user_attribute_in_group=Атрибути користувача в групі
+auths.enable_ldap_groups=Увімкнути групи LDAP
auths.ms_ad_sa=Атрибути пошуку MS AD
auths.smtp_auth=Тип автентифікації SMTP
auths.smtphost=SMTP хост
@@ -2411,7 +2868,7 @@ auths.disable_helo=Вимкнути HELO
auths.pam_service_name=Ім'я служби PAM
auths.pam_email_domain=Поштовий домен PAM (необов'язково)
auths.oauth2_provider=Постачальник OAuth2
-auths.oauth2_icon_url=URL іконки
+auths.oauth2_icon_url=URL піктограми
auths.oauth2_clientID=ID клієнта (ключ)
auths.oauth2_clientSecret=Ключ клієнта
auths.openIdConnectAutoDiscoveryURL=OpenID Connect URL для автоматизації входу
@@ -2423,34 +2880,42 @@ auths.oauth2_emailURL=URL електронної пошти
auths.skip_local_two_fa=Пропустити локальну 2FA
auths.skip_local_two_fa_helper=Якщо значення не вказано, локальнам користувачам, що використовують двофакторну автентифікацію, все одно проходитимуть її для входу в систему
auths.oauth2_tenant=Tenant
+auths.oauth2_map_group_to_team_removal=Видалити користувачів із синхронізованих команд, якщо користувач не належить до відповідної групи.
auths.enable_auto_register=Увімкнути автоматичну реєстрацію
auths.sspi_auto_create_users=Автоматично створювати користувачів
-auths.sspi_auto_create_users_helper=Дозволити автоматичне створення нових облікових записів для користувачів, які вперше увійшли з використання автентифікації SSPI
auths.sspi_auto_activate_users=Автоматично активувати користувачів
auths.sspi_auto_activate_users_helper=Дозволити автоматичну активацію облікових записів, створених при автентифікації SSPI
auths.sspi_strip_domain_names=Вилучати назви доменів з імен користувачів
-auths.sspi_strip_domain_names_helper=Якщо увімкнено, доменні імена будуть видалятися з імені входу (наприклад, "DOMAIN\user" та "user@example.org" стануть "user").
auths.sspi_separator_replacement=Використовувати замість \, / та @ роздільник
-auths.sspi_separator_replacement_helper=Символ, який замінює роздільники імен входу нижнього рівня (наприклад, \ в "DOMAIN\user") та основних імен користувачів (наприклад, @ "user@example.org").
auths.sspi_default_language=Типова мова користувача
-auths.sspi_default_language_helper=Типова мова для користувачів, які створюються автоматично при SSPI-автентифікації. Залиште не вказаним, якщо надаєте перевагу автоматичному визначенню мови.
auths.tips=Поради
auths.tips.oauth2.general=OAuth2 автентифікація
+auths.tips.oauth2.general.tip=Під час реєстрації нової автентифікації OAuth2 URL-адреса зворотного виклику/перенаправлення повинна бути такою:
auths.tip.oauth2_provider=Постачальник OAuth2
-auths.tip.nextcloud=`Зареєструйте нового споживача OAuth у вашому екземплярі за допомогою наступного меню "Налаштування -> Безпека -> клієнт OAuth 2.0"`
+auths.tip.bitbucket=`Зареєструйте нового споживача OAuth на %s і додайте дозвіл "Обліковий запис" - "Читання"`
+auths.tip.dropbox=Створити новий додаток на %s
+auths.tip.facebook=`Зареєструйте новий додаток на %s і додайте модуль "Facebook Login"`
+auths.tip.github=Зареєструйте новий додаток OAuth на %s
+auths.tip.gitlab_new=Зареєструйте новий додаток на %s
+auths.tip.google_plus=Отримайте облікові дані клієнта OAuth2 з консолі Google API за адресою %s
+auths.tip.twitter=Перейдіть до %s, створіть додаток і переконайтеся, що параметр «Дозволити використовувати цей додаток для входу в Twitter» увімкнено
+auths.tip.discord=Зареєструвати новий додаток на %s
+auths.tip.gitea=Зареєструйте новий додаток OAuth2. Посібник можна знайти за посиланням %s
auths.tip.mastodon=Введіть URL спеціального екземпляра для екземпляра mastodon, який ви хочете автентифікувати за допомогою (або використовувати за замовчуванням)
auths.edit=Редагувати джерело автентифікації
-auths.activated=Ця аутентифікація активована
-auths.update_success=Параметри аутентифікації оновлені.
+auths.activated=Це джерело автентифікації активовано
+auths.new_success=Автентифікацію "%s" додано.
+auths.update_success=Джерело автентифікації оновлено.
auths.update=Оновити джерело автентифікації
auths.delete=Видалити джерело автентифікації
auths.delete_auth_title=Видалити джерело автентифікації
-auths.delete_auth_desc=Це джерело аутентифікації буде видалене, ви впевнені, що ви хочете продовжити?
-auths.still_in_used=Ця перевірка справжності досі використовується деякими користувачами. Видаліть або змініть для цих користувачів тип входу в систему.
-auths.deletion_success=Канал аутентифікації успішно знищений.
-auths.login_source_of_type_exist=Джерело автентифікації такого типу вже наявне.
+auths.delete_auth_desc=Видалення джерела автентифікації забороняє користувачам використовувати його для входу. Продовжити?
+auths.still_in_used=Джерело автентифікації все ще використовується. Спочатку перетворіть або видаліть користувачів, які використовують це джерело автентифікації.
+auths.deletion_success=Джерело автентифікації видалено.
+auths.login_source_exist=Джерело автентифікації "%s" вже існує.
+auths.login_source_of_type_exist=Джерело автентифікації такого типу вже існує.
-config.server_config=Конфігурація сервера
+config.server_config=Налаштування сервера
config.app_name=Назва сайту
config.app_ver=Версія Gitea
config.app_url=Базова URL-адреса Gitea
@@ -2458,13 +2923,14 @@ config.custom_conf=Шлях до файлу конфігурації
config.custom_file_root_path=Шлях до файлу користувача
config.domain=Домен сервера
config.offline_mode=Локальний режим
-config.disable_router_log=Вимкнути логування роутеру
+config.disable_router_log=Вимкнути журнал маршрутизатора
config.run_user=Запуск від імені Користувача
config.run_mode=Режим виконання
config.git_version=Версія Git
+config.app_data_path=Шлях до даних додатка
config.repo_root_path=Кореневий шлях репозиторія
-config.lfs_root_path=Кореневої шлях LFS
-config.log_file_root_path=Шлях до лог файлу
+config.lfs_root_path=Кореневий шлях LFS
+config.log_file_root_path=Шлях до журналу
config.script_type=Тип скрипта
config.reverse_auth_user=Ім'я користувача для авторизації на reverse proxy
@@ -2474,7 +2940,7 @@ config.ssh_start_builtin_server=Використовувати вбудован
config.ssh_domain=Домен SSH сервера
config.ssh_port=Порт
config.ssh_listen_port=Порт що прослуховується
-config.ssh_root_path=Шлях до кореню
+config.ssh_root_path=Шлях до кореня
config.ssh_minimum_key_size_check=Мінімальний розмір ключа перевірки
config.ssh_minimum_key_sizes=Мінімальні розміри ключів
@@ -2486,8 +2952,8 @@ config.lfs_http_auth_expiry=Застаріла LFS HTTP аунтифікація
config.db_config=Конфігурація бази даних
config.db_type=Тип
config.db_host=Хост
-config.db_name=Ім'я
-config.db_user=Ім'я кристувача
+config.db_name=Назва
+config.db_user=Ім'я користувача
config.db_schema=Схема
config.db_ssl_mode=SSL
config.db_path=Шлях
@@ -2519,16 +2985,23 @@ config.queue_length=Довжина черги
config.deliver_timeout=Затримка доставки
config.skip_tls_verify=Пропустити перевірку TLS
+config.mailer_config=Налаштування пошти
config.mailer_enabled=Увімкнено
-config.mailer_name=Ім'я
-config.mailer_smtp_port=SMTP порт
+config.mailer_enable_helo=Увімкнути HELO
+config.mailer_name=Назва
+config.mailer_protocol=Протокол
+config.mailer_smtp_addr=Адреса SMTP
+config.mailer_smtp_port=Порт SMTP
config.mailer_user=Користувач
config.mailer_use_sendmail=Використовувати Sendmail
config.mailer_sendmail_path=Шлях до Sendmail
config.mailer_sendmail_args=Додаткові аргументи до Sendmail
config.mailer_sendmail_timeout=Тайм-аут Sendmail
-config.test_email_placeholder=Адреса електронної пошти (наприклад, test@example.com)
+config.mailer_use_dummy=Даммі
config.send_test_mail=Відправити тестового листа
+config.send_test_mail_submit=Надіслати
+config.test_mail_failed=Не вдалося надіслати тестовий лист "%s": %v
+config.test_mail_sent=Тестовий лист надіслано "%s".
config.oauth_config=Конфігурація OAuth
config.oauth_enabled=Увімкнено
@@ -2538,6 +3011,10 @@ config.cache_adapter=Адаптер кешу
config.cache_interval=Інтервал кешування
config.cache_conn=Підключення до кешу
config.cache_item_ttl=Час зберігання даних кешу
+config.cache_test=Перевірити кеш
+config.cache_test_failed=Не вдалося перевірити кеш: %v.
+config.cache_test_slow=Перевірка кешу успішна, але відповідь повільна: %s.
+config.cache_test_succeeded=Тест кешу успішно завершено, отримано відповідь за %s.
config.session_config=Конфігурація сесії
config.session_provider=Провайдер сесії
@@ -2566,22 +3043,30 @@ config.git_pull_timeout=Тайм-аут операції Pull
config.git_gc_timeout=Тайм-аут операції збирача сміття (GC)
config.log_config=Конфігурація журналу
+config.logger_name_fmt=Журнал: %s
config.disabled_logger=Вимкнено
config.access_log_mode=Режим доступу до журналу
+config.access_log_template=Шаблон журналу доступу
config.xorm_log_sql=Журнал SQL
+config.set_setting_failed=Не вдалося встановити параметр %s
+monitor.stats=Статистика
monitor.cron=Завдання cron
-monitor.name=Ім'я
+monitor.name=Назва
monitor.schedule=Розклад
monitor.next=Наступного разу
monitor.previous=Попереднього разу
monitor.execute_times=Кількість виконань
monitor.process=Запущені процеси
+monitor.performance_logs=Журнал швидкодії
+monitor.processes_count=%d процеси(-ів)
+monitor.download_diagnosis_report=Завантажити звіт діагностики
monitor.desc=Опис
monitor.start=Час початку
monitor.execute_time=Час виконання
+monitor.last_execution_result=Результат
monitor.process.cancel=Зупинити процес
monitor.process.children=Дочірні процеси
@@ -2592,15 +3077,18 @@ monitor.queue.type=Тип
monitor.queue.exemplar=Приклад типу
monitor.queue.numberworkers=Кількість робочих потоків
monitor.queue.maxnumberworkers=Максимальна кількість робочих потоків
+monitor.queue.numberinqueue=Номер у черзі
monitor.queue.settings.title=Налаштування пулу
-monitor.queue.settings.maxnumberworkers=Максимальна кількість робочих потоків
monitor.queue.settings.maxnumberworkers.placeholder=Поточний %[1]d
monitor.queue.settings.maxnumberworkers.error=Максимальна кількість робочих потоків має бути числом
monitor.queue.settings.submit=Оновити налаштування
monitor.queue.settings.changed=Налаштування оновлено
+monitor.queue.settings.remove_all_items=Видалити все
+monitor.queue.settings.remove_all_items_done=Усі елементи черги видалено.
notices.system_notice_list=Сповіщення системи
notices.view_detail_header=Переглянути деталі повідомлення
+notices.operations=Дії
notices.select_all=Вибрати все
notices.deselect_all=Скасувати виділення
notices.inverse_selection=Інвертувати виділене
@@ -2613,11 +3101,15 @@ notices.desc=Опис
notices.op=Оп.
notices.delete_success=Сповіщення системи були видалені.
+self_check.no_problem_found=Наразі проблем не виявлено.
+self_check.startup_warnings=Попередження під час запуску:
+self_check.database_collation_mismatch=Очікується, що база даних використає зіставлення: %s
+self_check.location_origin_mismatch=Поточна URL-адреса (%[1]) не відповідає URL-адресі Gitea (%[2]). Якщо ви використовуєте зворотний проксі, переконайтеся, що заголовки "Host" та "X-Forwarded-Proto" встановлені правильно.
[action]
create_repo=створив(ла) репозиторій %s
rename_repo=репозиторій перейменовано з %[1]s на %[3]s
-commit_repo=надіслав зміни (push) до %[3]s о %[4]s
+commit_repo=надіслав зміни (push) до %[3]s в %[4]s
create_issue=`відкрив задачу %[3]s#%[2]s `
close_issue=`закрив задачу %[3]s#%[2]s `
reopen_issue=`повторно відкрив задачу %[3]s#%[2]s `
@@ -2627,6 +3119,7 @@ reopen_pull_request=`повторно відкрив запит злиття %[3]s#%[2]s `
comment_pull=`прокоментував запит злиття %[3]s#%[2]s `
merge_pull_request=`прийняв запит злиття %[3]s#%[2]s `
+auto_merge_pull_request=`автоматично об'єднано запит на злиття %[3]s#%[2]s `
transfer_repo=перенесено репозиторій %s у %s
push_tag=створив мітку %[3]s в %[4]s
delete_tag=видалено мітку %[2]s з %[3]s
@@ -2659,7 +3152,7 @@ seconds=%d секунди
minutes=%d хвилини
hours=%d години
days=%d дні
-weeks=%d тижднів
+weeks=%d тижні(в)
months=%d місяці
years=%d роки
raw_seconds=секунди
@@ -2667,6 +3160,7 @@ raw_minutes=хвилини
[dropzone]
default_message=Перетягніть файли або натисніть тут, щоб завантажити.
+invalid_input_type=Неможливо завантажити файли цього типу.
file_too_big=Розмір файлу ({{filesize}} MB), що більше ніж максимальний розмір: ({{maxFilesize}} MB).
remove_file=Видалити файл
@@ -2680,60 +3174,274 @@ pin=Прикріпити сповіщення
mark_as_read=Позначити як прочитане
mark_as_unread=Позначити як непрочитане
mark_all_as_read=Позначити всі як прочитані
+subscriptions=Абонементи
+watching=Стежить
+no_subscriptions=Немає абонементів
[gpg]
default_key=Підписано типовим ключем
error.extract_sign=Не вдалося витягти підпис
error.generate_hash=Не вдалося згенерувати хеш коміту
-error.no_committer_account=Аккаунт користувача з таким Email не знайдено
-error.no_gpg_keys_found=Не вдалося знайти GPG ключ що відповідає даному підпису
+error.no_committer_account=Немає облікового запису, прив'язаного до адреси електронної пошти комітера
+error.no_gpg_keys_found=Для цього підпису в базі даних не знайдено жодного відомого ключа
error.not_signed_commit=Непідписаний коміт
-error.failed_retrieval_gpg_keys=Не вдалося отримати відповідний GPG ключ користувача
-error.probable_bad_signature=УВАГА! Хоча ключ з таким ID і є в базі, коміт не може бути ним перевірено! Цей коміт ПІДОЗРІЛИЙ.
-error.probable_bad_default_signature=УВАГА! Хоча типовий ключ має цей ID, коміт не може бути ним перевірено! Цей коміт ПІДОЗРІЛИЙ.
+error.failed_retrieval_gpg_keys=Не вдалося отримати жодного ключа, прив'язаного до облікового запису комітера
[units]
-error.no_unit_allowed_repo=У вас немає доступу до жодного розділу цього репозитория.
-error.unit_not_allowed=У вас немає доступу до жодного розділу цього репозитория.
+unit=Одиниця вимірювання
+error.no_unit_allowed_repo=У вас немає доступу до жодного розділу цього сховища.
+error.unit_not_allowed=У вас немає доступу до жодного розділу цього сховища.
[packages]
+title=Пакети
+desc=Керувати пакетами сховища.
+empty=Наразі пакети відсутні.
+no_metadata=Немає метаданих.
+empty.documentation=Для отримання додаткової інформації про реєстр пакетів, дивіться документацію .
+empty.repo=Ви завантажили пакунок, але він тут не відображається? Перейдіть до налаштування пакету та під'єднайте його до цього сховища.
+registry.documentation=Докладнішу інформацію про реєстр %s наведено у документації .
filter.type=Тип
+filter.type.all=Всі
+filter.no_result=Ваш фільтр не дав результатів.
+filter.container.tagged=З міткою
+filter.container.untagged=Без мітки
+published_by=%[1]s опубліковано %[3]s
+published_by_in=%[1]s опубліковано %[3]s у %[5]s
+installation=Встановлення
+about=Про цей пакет
+requirements=Вимоги
+dependencies=Залежності
+keywords=Ключові слова
+details=Подробиці
details.author=Автор
+details.project_site=Сторінка проєкту
+details.repository_site=Сторінка сховища
+details.documentation_site=Сторінка документації
+details.license=Ліцензія
+assets=Ресурси
+versions=Версії
+versions.view_all=Переглянути все
+dependency.id=ID
+dependency.version=Версія
+search_in_external_registry=Шукати в %s
+alpine.registry.key=Завантажте публічний ключ RSA реєстру в теку /etc/apk/keys/ для перевірки підпису індексу:
+alpine.registry.info=Виберіть $branch та $repository зі списку нижче.
+alpine.install=Щоб встановити пакет, виконайте наступну команду:
+alpine.repository=Інформація про сховище
alpine.repository.branches=Гілки
alpine.repository.repositories=Репозиторії
+alpine.repository.architectures=Архітектури
+arch.registry=Додати сервер з відповідним сховищем та архітектурою до /etc/pacman.conf:
+arch.install=Синхронізувати пакет з pacman:
+arch.repository=Інформація про сховище
arch.repository.repositories=Репозиторії
-conan.details.repository=Репозиторій
+arch.repository.architectures=Архітектури
+cargo.install=Щоб встановити пакет за допомогою Cargo, виконайте наступну команду:
+chef.install=Щоб встановити пакет, виконайте наступну команду:
+composer.install=Щоб встановити пакет за допомогою Composer, виконайте наступну команду:
+composer.dependencies=Залежності
+composer.dependencies.development=Залежності розробки
+conan.details.repository=Сховище
+conan.install=Щоб встановити пакет за допомогою Conan, виконайте наступну команду:
+conda.install=Щоб встановити пакет за допомогою Conda, виконайте наступну команду:
+container.details.type=Тип зображення
+container.details.platform=Платформа
+container.pull=Завантажити образ з командного рядка:
+container.images=Образи
+container.multi_arch=ОС / Архітектура
+container.layers=Шари образів
+container.labels=Мітки
+container.labels.key=Ключ
container.labels.value=Значення
+cran.install=Щоб встановити пакет, виконайте наступну команду:
+debian.registry.info=Оберіть $distribution та $component зі списку нижче.
+debian.install=Щоб встановити пакет, виконайте наступну команду:
+debian.repository=Інформація про сховище
+debian.repository.distributions=Дистрибутиви
+debian.repository.components=Компоненти
+debian.repository.architectures=Архітектури
+generic.download=Завантажити пакет з командного рядка:
+go.install=Встановити пакет із командного рядка:
+helm.install=Щоб встановити пакет, виконайте наступну команду:
+maven.install2=Виконати з командного рядка:
+maven.download=Щоб завантажити залежність, виконайте в командному рядку:
+nuget.install=Щоб встановити пакет за допомогою NuGet, запустіть наступну команду:
+nuget.dependency.framework=Цільовий фреймворк
+npm.install=Щоб встановити пакет за допомогою npm, виконайте наступну команду:
+npm.install2=або додайте до файлу package.json:
+npm.dependencies=Залежності
+npm.dependencies.development=Залежності розробки
+npm.dependencies.optional=Необовʼязкові залежності
+npm.details.tag=Мітка
+pypi.requires=Потрібен Python
+rpm.distros.redhat=на дистрибутивах на основі RedHat
+rpm.distros.suse=на дистрибутивах на основі SUSE
+rpm.install=Щоб встановити пакет, виконайте наступну команду:
+rpm.repository=Інформація про сховище
+rpm.repository.architectures=Архітектури
+rpm.repository.multiple_groups=Цей пакет доступний у багатьох групах.
+rubygems.install=Щоб встановити пакет за допомогою gem, виконайте наступну команду:
+rubygems.install2=або додайте до Gemfile:
+rubygems.dependencies.development=Залежності розробки
+rubygems.required.ruby=Вимагає версію Ruby
+rubygems.required.rubygems=Вимагає версію RubyGem
+swift.install=Додайте пакет у ваш файл Package.swift:
+swift.install2=і виконайте наступну команду:
+vagrant.install=Щоб додати бокс Vagrant, виконайте наступну команду:
+settings.link=Прив'язати пакет до сховища
+settings.link.description=Якщо ви зв'яжете пакет зі сховищем, його буде вказано у списку пакетів сховища.
+settings.link.select=Обрати сховище
+settings.link.button=Оновити посилання на сховище
+settings.link.error=Не вдалося оновити посилання на сховище.
+settings.delete=Видалити пакет
+settings.delete.description=Видалення пакета є остаточним і не може бути скасоване.
+settings.delete.notice=Ви збираєтесь видалити %s (%s). Цю операцію неможливо скасувати, ви впевнені?
+settings.delete.success=Пакет видалено.
+settings.delete.error=Не вдалося видалити пакет.
+owner.settings.cargo.title=Індекс реєстру Cargo
+owner.settings.cargo.initialize=Ініціалізувати індекс
+owner.settings.cargo.initialize.description=Для використання реєстру Cargo потрібне спеціальне сховище індексів Git. Використання цього параметра дозволить (повторно) створити та автоматично налаштувати сховище.
+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.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.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. Якщо ви створювали ключову пару раніше, створення нової пари призведе до скасування старої.
[secrets]
; These keys are also for "edit secret", the keys are kept as-is to avoid unnecessary re-translation
creation.description=Опис
+creation.name_placeholder=без урахування регістру, тільки алфавітно-цифрові символи або підкреслення, не можуть починатися з GITEA_ або GITHUB_.
+creation.value_placeholder=Введіть довільний вміст. Пробіли на початку та в кінці будуть пропущені.
+creation.description_placeholder=Введіть короткий опис (необов'язково).
[actions]
+actions=Дії
+unit.desc=Керувати діями
+status.unknown=Невідомий
+status.waiting=Очікування
+status.running=Виконується
+status.success=Успіх
+status.failure=Невдача
+status.cancelled=Скасовано
+status.skipped=Пропущено
+status.blocked=Заблоковано
+runners.status=Статус
+runners.id=ID
runners.name=Назва
runners.owner_type=Тип
runners.description=Опис
+runners.labels=Мітки
+runners.last_online=Останній раз онлайн
+runners.task_list.no_tasks=Наразі завдань немає.
runners.task_list.run=Запустити
+runners.task_list.status=Статус
runners.task_list.repository=Репозиторій
runners.task_list.commit=Коміт
+runners.task_list.done_at=Завершено о
+runners.update_runner=Оновити зміни
+runners.status.unspecified=Невідомий
+runners.status.idle=Очікування
runners.status.active=Активний
+runners.version=Версія
+runners.reset_registration_token=Скинути реєстраційний токен
+runs.all_workflows=Всі робочі процеси
runs.commit=Коміт
+runs.scheduled=Заплановано
+runs.pushed_by=завантажено
+runs.invalid_workflow_helper=Файл конфігурації робочих процесів недійсний. Будь ласка, перевірте файл конфігурації: %s
+runs.no_job_without_needs=Робочий процес повинен містити принаймні одну задачу без залежностей.
+runs.no_job=Робочий процес повинен містити принаймні одну задачу
+runs.actor=Актор
+runs.status=Статус
+runs.actors_no_select=Усі актори
+runs.status_no_select=Всі статуси
+runs.no_results=Збігів немає.
+runs.no_workflows=Робочих процесів наразі немає.
+runs.no_workflows.quick_start=Не знаєте, як почати з Gitea Дії? Дивіться посібник швидкого старту .
+runs.no_workflows.documentation=Для отримання додаткової інформації про Gitea Дії, перегляньте документацію .
+runs.no_runs=Робочий процес ще не виконувався.
+runs.empty_commit_message=(порожнє повідомлення коміту)
+runs.expire_log_message=Журнали були очищені, тому що вони були занадто старі.
+runs.delete=Видалити запущений робочий процес
+runs.delete.description=Ви впевнені, що хочете остаточно видалити цей робочий процес? Цю дію неможливо скасувати.
+runs.not_done=Виконання цього робочого процесу не завершено.
+runs.view_workflow_file=Перегляд файлу робочого процесу
+
+workflow.disable=Вимкнути робочий процес
+workflow.disable_success=Робочий процес '%s' успішно вимкнено.
+workflow.enable=Увімкнути робочий процес
+workflow.enable_success=Робочий процес '%s' успішно ввімкнено.
+workflow.disabled=Робочий процес вимкнений.
+workflow.run=Запустити робочий процес
+workflow.not_found=Робочий процес '%s' не знайдено.
+workflow.run_success=Робочий процес '%s' завершився успішно.
+workflow.from_ref=Використати робочий процес з
+workflow.has_workflow_dispatch=Цей робочий процес має тригер події workflow_dispatch.
+workflow.has_no_workflow_dispatch=Робочий процес “%s” не має тригера події workflow_dispatch.
+variables=Змінні
+variables.management=Керування змінними
+variables.creation=Додати змінну
+variables.none=Наразі немає змінних.
+variables.deletion=Видалити змінну
+variables.deletion.description=Видалення змінної є остаточним і не може бути скасоване. Продовжити?
+variables.description=Змінні будуть передані певним діям і не можуть бути прочитані інакше.
+variables.id_not_exist=Змінної з ідентифікатором %d не існує.
+variables.edit=Редагувати змінну
+variables.deletion.failed=Не вдалося видалити змінну.
+variables.deletion.success=Змінну видалено.
+variables.creation.failed=Не вдалося додати змінну.
+variables.creation.success=Змінну "%s" додано.
+variables.update.failed=Не вдалося відредагувати змінну.
+variables.update.success=Змінну відредаговано.
-
+logs.always_auto_scroll=Завжди автоматично прокручувати журнали
+logs.always_expand_running=Завжди розгортати поточні журнали
[projects]
+deleted.display_name=Видалений проєкт
+type-1.display_name=Індивідуальний проєкт
+type-2.display_name=Проєкт сховища
+type-3.display_name=Проєкт організації
+enter_fullscreen=Повноекранний режим
+exit_fullscreen=Вийти з повноекранного режиму
[git.filemode]
+changed_filemode=%[1]s → %[2]s
; Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", …
+directory=Тека
+normal_file=Звичайний файл
+executable_file=Виконуваний файл
symbolic_link=Символічне посилання
+submodule=Підмодуль
diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini
index d35814d82a5..f834d92b264 100644
--- a/options/locale/locale_zh-CN.ini
+++ b/options/locale/locale_zh-CN.ini
@@ -4,14 +4,14 @@ explore=探索
help=帮助
logo=徽标
sign_in=登录
-sign_in_with_provider=使用 %s 登录
+sign_in_with_provider=使用「%s」登录
sign_in_or=或
sign_out=退出
sign_up=注册
link_account=链接账户
register=注册
-version=当前版本
-powered_by=Powered by %s
+version=版本
+powered_by=由 %s 强力驱动
page=页面
template=模板
language=语言选项
@@ -28,7 +28,7 @@ return_to_gitea=返回 Gitea
more_items=更多选项
username=用户名
-email=电子邮件地址
+email=邮箱地址
password=密码
access_token=访问令牌(Access Token)
re_type=确认密码
@@ -42,7 +42,7 @@ webauthn_sign_in=按下安全密钥上的按钮。如果安全密钥没有按钮
webauthn_press_button=请按下安全密钥上的按钮…
webauthn_use_twofa=使用来自手机中的两步验证码
webauthn_error=无法读取安全密钥。
-webauthn_unsupported_browser=你的浏览器目前不支持 WebAuthn。
+webauthn_unsupported_browser=您的浏览器目前不支持 WebAuthn。
webauthn_error_unknown=发生未知错误。请重试。
webauthn_error_insecure=WebAuthn 仅支持安全连接。如果要在 HTTP 协议上进行测试,请使用 "localhost" 或 "127.0.0.1" 作为访问来源
webauthn_error_unable_to_process=服务器无法处理您的请求。
@@ -58,11 +58,11 @@ issue_milestone=里程碑
new_repo=创建仓库
new_migrate=迁移外部仓库
new_mirror=创建新的镜像
-new_fork=新的仓库Fork
+new_fork=派生新仓库
new_org=创建组织
new_project=创建项目
new_project_column=创建列
-manage_org=管理我的组织
+manage_org=管理组织
admin_panel=管理后台
account_settings=帐户设置
settings=设置
@@ -78,7 +78,7 @@ forks=派生
activities=最近活动
pull_requests=合并请求
-issues=工单管理
+issues=工单
milestones=里程碑
ok=确定
@@ -91,7 +91,7 @@ add=添加
add_all=添加所有
remove=移除
remove_all=移除所有
-remove_label_str=`删除标签 "%s"`
+remove_label_str=删除标签「%s」
edit=编辑
view=查看
test=测试
@@ -112,7 +112,7 @@ copy_type_unsupported=无法复制此类型的文件内容
write=撰写
preview=预览
-loading=正在加载...
+loading=正在加载…
files=文件
error=错误
@@ -126,12 +126,12 @@ unknown=未知
rss_feed=RSS 订阅源
-pin=固定
+pin=置顶
unpin=取消置顶
-artifacts=制品
+artifacts=产物
expired=已过期
-confirm_delete_artifact=您确定要删除制品'%s'吗?
+confirm_delete_artifact=您确定要删除产物「%s」吗?
archived=已归档
@@ -165,10 +165,10 @@ filter.public=公开
filter.private=私有
no_results_found=未找到结果
-internal_error_skipped=发生内部错误,但已被跳过: %s
+internal_error_skipped=发生内部错误,但已跳过: %s
[search]
-search=搜索...
+search=搜索…
type_tooltip=搜索类型
fuzzy=模糊
fuzzy_tooltip=包含近似匹配搜索词的结果
@@ -178,23 +178,23 @@ regexp=正则表达式
regexp_tooltip=仅包含匹配正则表达式搜索词的结果
exact=精确
exact_tooltip=仅包含精确匹配搜索词的结果
-repo_kind=搜索仓库...
-user_kind=搜索用户...
-org_kind=搜索组织...
-team_kind=搜索团队...
-code_kind=搜索代码...
+repo_kind=搜索仓库…
+user_kind=搜索用户…
+org_kind=搜索组织…
+team_kind=搜索团队…
+code_kind=搜索代码…
code_search_unavailable=代码搜索当前不可用。请与网站管理员联系。
-code_search_by_git_grep=当前代码搜索结果由“git grep”提供。如果站点管理员启用仓库索引器,可能会有更好的结果。
-package_kind=搜索软件包...
-project_kind=搜索项目...
-branch_kind=搜索分支...
-tag_kind=搜索标签...
-tag_tooltip=搜索匹配的标签。使用“%”来匹配任何序列的数字
-commit_kind=搜索提交记录...
-runner_kind=搜索runners...
+code_search_by_git_grep=当前代码搜索结果由「git grep」提供。如果站点管理员启用仓库索引器,可能会有更好的结果。
+package_kind=搜索软件包…
+project_kind=搜索项目…
+branch_kind=搜索分支…
+tag_kind=搜索 Git 标签…
+tag_tooltip=搜索匹配的 Git 标签。使用「%」来匹配任何序列的数字。
+commit_kind=搜索提交记录…
+runner_kind=搜索运行器…
no_results=未找到匹配结果
-issue_kind=搜索工单...
-pull_kind=搜索合并请求...
+issue_kind=搜索工单…
+pull_kind=搜索合并请求…
keyword_search_unavailable=按关键字搜索当前不可用。请联系站点管理员。
[aria]
@@ -252,7 +252,7 @@ license_desc=所有的代码都开源在 官方文档 后再对本页面进行填写。
require_db_desc=Gitea 需要使用 MySQL、PostgreSQL、MSSQL、SQLite3 或 TiDB (MySQL协议) 等数据库
@@ -262,20 +262,20 @@ host=数据库主机
user=用户名
password=数据库用户密码
db_name=数据库名称
-db_schema=Schema
+db_schema=架构
db_schema_helper=留空则数据库中默认值为("public")。
ssl_mode=SSL
path=数据库文件路径
sqlite_helper=SQLite3 数据库的文件路径。 如果以服务的方式运行 Gitea,请输入绝对路径。
reinstall_error=您正在尝试安装到一个已经有 Gitea 数据的数据库中
-reinstall_confirm_message=使用现有的 Gitea 数据库重新安装可能会导致多个问题。在大多数情况下,你应该使用你现有的 “app.ini” 来运行 Gitea。如果你知道自己在做什么,请确认以下内容:
+reinstall_confirm_message=使用现有的 Gitea 数据库重新安装可能会导致多个问题。在大多数情况下,您应该使用您现有的「app.ini」来运行 Gitea。如果您知道自己在做什么,请确认以下内容:
reinstall_confirm_check_1=使用 app.ini 中 SECRET KEY 加密的数据可能会丢失:用户可能无法使用 2FA/OTP 登录,仓库镜像可能无法正常工作。勾选此框,表示您确认当前 app.ini 文件包含正确的 SECRET KEY。
reinstall_confirm_check_2=代码仓库和设置可能需要重新同步。勾选此框,表示您确认将手动重新同步仓库和 SSH authorized_keys 的钩子。您确认您将确保代码仓库和镜像设置是正确的。
-reinstall_confirm_check_3=你确认你绝对肯定这个 Gitea 在正确的 app.ini 位置上运行,而且你确定你必须重新安装。你确认你知晓上述风险。
+reinstall_confirm_check_3=您确认您绝对肯定这个 Gitea 在正确的 app.ini 位置上运行,而且您确定您必须重新安装。您确认您知晓上述风险。
err_empty_db_path=SQLite 数据库文件路径不能为空。
no_admin_and_disable_registration=您不能够在未创建管理员用户的情况下禁止注册。
err_empty_admin_password=管理员密码不能为空。
-err_empty_admin_email=管理员电子邮件不能为空。
+err_empty_admin_email=管理员邮箱不能为空。
err_admin_name_is_reserved=管理员用户名无效,用户名是保留的
err_admin_name_pattern_not_allowed=管理员用户名无效,用户名是保留字
err_admin_name_is_invalid=管理员用户名无效
@@ -294,9 +294,9 @@ domain_helper=服务器的域名或主机地址。
ssh_port=SSH 服务端口
ssh_port_helper=SSH 服务器的端口号,为空则禁用它。
http_port=HTTP 服务端口
-http_port_helper=Giteas web 服务器将侦听的端口号。
+http_port_helper=Gitea Web 服务器将侦听的端口号。
app_url=基础URL
-app_url_helper=用于 HTTP (S) 克隆和电子邮件通知的基本地址。
+app_url_helper=用于 HTTP (S) 克隆和邮件通知的基本地址。
log_root_path=日志路径
log_root_path_helper=日志文件将写入此目录。
@@ -304,20 +304,20 @@ optional_title=可选设置
email_title=电子邮箱设置
smtp_addr=SMTP 主机地址
smtp_port=SMTP 端口
-smtp_from=电子邮件发件人
-smtp_from_invalid=`"发送电子邮件为"地址无效`
-smtp_from_helper=请输入一个用于 Gitea 的电子邮件地址,或者使用完整格式:"名称"
+smtp_from=邮件发件人
+smtp_from_invalid=「邮件发件人」地址无效
+smtp_from_helper=请输入一个用于 Gitea 的邮箱地址,或者使用完整格式:「名称」。
mailer_user=SMTP 用户名
mailer_password=SMTP 密码
-register_confirm=需要发电子邮件确认注册
+register_confirm=需要邮件确认注册
mail_notify=启用邮件通知提醒
server_service_title=服务器和第三方服务设置
offline_mode=启用本地模式
offline_mode_popup=禁用第三方 CDN 并在本地服务所有资源。
disable_gravatar=禁用 Gravatar 头像
-disable_gravatar_popup=禁用 Gravatar 和第三方头像源。除非用户在本地上传头像, 否则将使用默认的头像。
+disable_gravatar_popup=禁用 Gravatar 和第三方头像源。除非用户在本地上传头像,否则将使用默认头像。
federated_avatar_lookup=启用 Federated 头像
-federated_avatar_lookup_popup=启用 Federated Avatars 查找以使用开源的 Libravatar 服务。
+federated_avatar_lookup_popup=启用 Federated 头像查找以使用开源的 Libravatar 服务。
disable_registration=禁止用户自助注册
disable_registration_popup=禁用用户自助注册。只有管理员才能创建新的用户帐户。
allow_only_external_registration_popup=仅允许通过外部服务注册
@@ -334,28 +334,28 @@ admin_title=管理员帐号设置
admin_name=管理员用户名
admin_password=管理员密码
confirm_password=确认密码
-admin_email=电子邮件地址
+admin_email=邮箱地址
install_btn_confirm=立即安装
test_git_failed=无法识别 'git' 命令:%v
sqlite3_not_available=您所使用的发行版不支持 SQLite3,请从 %s 下载官方构建版,而不是 gobuild 版本。
invalid_db_setting=数据库设置无效: %v
-invalid_db_table=数据库表 '%s' 无效: %v
+invalid_db_table=数据库表「%s」无效:%v
invalid_repo_path=仓库根目录设置无效:%v
invalid_app_data_path=应用数据路径无效: %v
run_user_not_match=运行用户名不是当前的用户名:%s -> %s
-internal_token_failed=生成内部令牌失败: %v
-secret_key_failed=生成密钥失败: %v
+internal_token_failed=生成内部令牌失败:%v
+secret_key_failed=生成密钥失败:%v
save_config_failed=应用配置保存失败:%v
invalid_admin_setting=管理员帐户设置无效: %v
invalid_log_root_path=日志路径无效: %v
-default_keep_email_private=默认情况下隐藏电子邮件地址
-default_keep_email_private_popup=默认情况下, 隐藏新用户帐户的电子邮件地址。
+default_keep_email_private=默认情况下隐藏邮箱地址
+default_keep_email_private_popup=默认情况下,隐藏新用户帐户的邮箱地址。
default_allow_create_organization=默认情况下允许创建组织
-default_allow_create_organization_popup=默认情况下, 允许新用户帐户创建组织。
+default_allow_create_organization_popup=默认情况下,允许新用户帐户创建组织。
default_enable_timetracking=默认情况下启用时间跟踪
default_enable_timetracking_popup=默认情况下启用新仓库的时间跟踪。
-no_reply_address=隐藏电子邮件
-no_reply_address_helper=具有隐藏电子邮件地址的用户的域名。例如, 用户名 "joe" 将以 "joe@noreply.example.org" 的身份登录到 Git 中. 如果隐藏的电子邮件域设置为 "noreply.example.org"。
+no_reply_address=隐藏邮件域
+no_reply_address_helper=具有隐藏邮箱地址的用户的域名。例如,如果隐藏邮箱域名设置为「noreply.example.org」,那么用户名「joe」在 Git 中将显示为「joe@noreply.example.org」。
password_algorithm=密码哈希算法
invalid_password_algorithm=无效的密码哈希算法
password_algorithm_helper=设置密码散列算法。算法有不同的要求和强度。 argon2 算法相当安全,但使用大量内存,因此可能不适合小型系统。
@@ -378,7 +378,7 @@ my_mirrors=我的镜像
view_home=访问 %s
filter=其他过滤器
filter_by_team_repositories=按团队仓库筛选
-feed_of=`"%s"的源`
+feed_of=「%s」的源
show_archived=已归档
show_both_archived_unarchived=显示已归档和未归档的
@@ -414,43 +414,44 @@ create_new_account=注册帐号
already_have_account=已有账号?
sign_in_now=立即登录
disable_register_prompt=对不起,注册功能已被关闭。请联系网站管理员。
-disable_register_mail=已禁用注册的电子邮件确认。
+disable_register_mail=已禁用注册邮件确认。
manual_activation_only=请联系您的站点管理员来完成激活。
remember_me=记住此设备
remember_me.compromised=登录令牌不再有效,因为它可能表明帐户已被破坏。请检查您的帐户是否有异常活动。
forgot_password_title=忘记密码
forgot_password=忘记密码?
-need_account=需要一个帐户?
-sign_up_now=还没账号?马上注册。
+need_account=需要一个帐户?
+sign_up_tip=您正在系统中注册第一个帐户,它拥有管理员权限。请仔细记住您的用户名和密码。 如果您忘记了用户名或密码,请参阅 Gitea 文档以恢复账户。
+sign_up_now=立即注册。
sign_up_successful=帐户创建成功。欢迎!
-confirmation_mail_sent_prompt_ex=一封新的确认邮件已经发送到 %s 请在下一个 %s 中检查您的收件箱以完成注册过程。 如果您的注册电子邮件地址不正确,您可以重新登录并更改它。
+confirmation_mail_sent_prompt_ex=一封新的确认邮件已经发送到 %s 。请在下一个 %s 中检查您的收件箱以完成注册流程。 如果您的注册邮箱地址不正确,您可以重新登录并更改它。
must_change_password=更新您的密码
allow_password_change=要求用户更改密码(推荐)
-reset_password_mail_sent_prompt=确认电子邮件已被发送到 %s 。请您在 %s 内检查您的收件箱 ,完成密码重置过程。
+reset_password_mail_sent_prompt=确认邮件已被发送到 %s 。请您在 %s 内检查您的收件箱 ,完成密码重置流程。
active_your_account=激活您的帐户
account_activated=帐户已激活
prohibit_login=禁止登录
prohibit_login_desc=您的帐户被禁止登录,请与网站管理员联系。
resent_limit_prompt=您请求发送激活邮件过于频繁,请等待 3 分钟后再试!
has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 %s 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
-change_unconfirmed_mail_address=如果您的注册电子邮件地址不正确,您可以在此更改并重新发送新的确认电子邮件。
+change_unconfirmed_mail_address=如果您的注册邮箱地址不正确,您可以在此更改并重新发送新的确认邮件。
resend_mail=单击此处重新发送确认邮件
email_not_associate=您输入的邮箱地址未被关联到任何帐号!
send_reset_mail=发送账户恢复邮件
reset_password=账户恢复
invalid_code=此确认密钥无效或已过期。
-invalid_code_forgot_password=你的确认码无效或者已过期,点击 这里 开始新的会话。
+invalid_code_forgot_password=您的确认码无效或已过期,点击 这里 开始新的会话。
invalid_password=您的密码与用于创建账户的密码不匹配。
reset_password_helper=恢复账户
reset_password_wrong_user=您以 %s 登录,但恢复账号链接是用于 %s。
password_too_short=密码长度不能少于 %d 位。
-non_local_account=非本地帐户不能通过 Gitea 的 web 界面更改密码。
+non_local_account=非本地帐户不能通过 Gitea 的 Web 界面更改密码。
verify=验证
scratch_code=验证口令
use_scratch_code=使用验证口令
-twofa_scratch_used=你已经使用了你的验证口令。你将会转到两步验证设置页面以便移除你的注册设备或者重新生成新的验证口令。
-twofa_passcode_incorrect=你的验证码不正确。如果你丢失了你的设备,请使用你的验证口令。
-twofa_scratch_token_incorrect=你的验证口令不正确。
+twofa_scratch_used=您已经使用了您的验证口令。您将会转到两步验证设置页面以便移除您的注册设备或者重新生成新的验证口令。
+twofa_passcode_incorrect=您的验证码不正确。如果您丢失了您的设备,请使用您的验证口令。
+twofa_scratch_token_incorrect=您的验证口令不正确。
twofa_required=您必须设置两步验证来访问仓库,或者尝试重新登录。
login_userpass=登录
login_openid=OpenID
@@ -463,21 +464,21 @@ oauth_signin_submit=绑定账号
oauth.signin.error.general=处理授权请求时出错:%s。如果此错误仍然存在,请与站点管理员联系。
oauth.signin.error.access_denied=授权请求被拒绝。
oauth.signin.error.temporarily_unavailable=授权失败,因为认证服务器暂时不可用。请稍后再试。
-oauth_callback_unable_auto_reg=自动注册已启用,但OAuth2 提供商 %[1]s 返回缺失的字段:%[2]s,无法自动创建帐户,请创建或链接到一个帐户,或联系站点管理员。
+oauth_callback_unable_auto_reg=自动注册已启用,但 OAuth2 提供商 %[1]s 返回缺失的字段:%[2]s,无法自动创建帐户,请创建或链接到一个帐户,或联系站点管理员。
openid_connect_submit=连接
openid_connect_title=连接到现有的帐户
openid_connect_desc=所选的 OpenID URI 未知。在这里关联一个新帐户。
openid_register_title=创建新帐户
openid_register_desc=所选的 OpenID URI 未知。在这里关联一个新帐户。
openid_signin_desc=输入您的OpenID地址。例如:alice.openid.example.org 或 https://openid.example.org/alice.
-disable_forgot_password_mail=由于未设置电子邮件,帐户恢复被禁用。 请联系您的站点管理员。
-disable_forgot_password_mail_admin=帐户恢复仅在设置电子邮件后可用。 请设置电子邮件以启用帐户恢复。
-email_domain_blacklisted=您不能使用您的电子邮件地址注册。
+disable_forgot_password_mail=由于未设置邮箱,帐户恢复被禁用。 请联系您的站点管理员。
+disable_forgot_password_mail_admin=帐户恢复仅在设置邮箱后可用。 请设置邮箱以启用帐户恢复。
+email_domain_blacklisted=您不能使用您的邮箱地址注册。
authorize_application=应用授权
authorize_redirect_notice=如果您授权此应用,您将会被重定向到 %s。
-authorize_application_created_by=此应用由%s创建。
+authorize_application_created_by=此应用由 %s 创建。
authorize_application_description=如果您允许,它将能够读取和修改您的所有帐户信息,包括私人仓库和组织。
-authorize_application_with_scopes=范围: %s
+authorize_application_with_scopes=范围:%s
authorize_title=授权 %s 访问您的帐户?
authorization_failed=授权失败
authorization_failed_desc=因为检测到无效请求,授权失败。请尝试联系您授权应用的管理员。
@@ -485,7 +486,7 @@ sspi_auth_failed=SSPI 认证失败
password_pwned=此密码出现在 被盗密码 列表上并且曾经被公开。 请使用另一个密码再试一次。
password_pwned_err=无法完成对 HaveIBeenPwned 的请求
last_admin=您不能删除最后一个管理员。必须至少保留一个管理员。
-signin_passkey=使用密钥登录
+signin_passkey=使用通行密钥登录
back_to_sign_in=返回登录页面
[mail]
@@ -501,24 +502,24 @@ activate_account.text_2=请在 %s 时间内,点击以下链接激活您
activate_email=请验证您的邮箱地址
activate_email.title=%s,请验证您的邮箱
-activate_email.text=请在 %s 时间内,点击以下链接,以验证你的电子邮件地址:
+activate_email.text=请在 %s 时间内,点击以下链接,以验证您的邮箱地址:
register_notify=欢迎来到 %s
register_notify.title=%[1]s,欢迎来到 %[2]s
-register_notify.text_1=这是您的 %s 注册确认电子邮件 !
+register_notify.text_1=这是您的 %s 注册确认邮件 !
register_notify.text_2=您现在可以以用户名 %s 登录。
register_notify.text_3=如果此账户已为您创建,请先 设置您的密码 。
reset_password=恢复您的账户
reset_password.title=%s,您已请求恢复您的帐户
-reset_password.text=请在 %s 时间内,点击以下链接,恢复你的账户:
+reset_password.text=请在 %s 时间内,点击以下链接,以恢复您的账户:
register_success=注册成功
issue_assigned.pull=@%[1]s 已将仓库 %[3]s 中的合并请求 %[2]s 指派给您
issue_assigned.issue=@%[1]s 已将仓库 %[3]s 中的工单 %[2]s 指派给您
-issue.x_mentioned_you=@%s 提到了您:
+issue.x_mentioned_you=@%s 提及了您:
issue.action.force_push=%[1]s 强制从 %[3]s 推送 %[2]s 至 [4]s。
issue.action.push_1=@%[1]s 推送了 %[3]d 个提交到 %[2]s
issue.action.push_n=@%[1]s 推送了 %[3]d 个提交到 %[2]s
@@ -533,26 +534,26 @@ issue.action.ready_for_review=@%[1]s 标记此合并请求已评审通过
issue.action.new=@%[1]s 创建了 #%[2]d.
issue.in_tree_path=在 %s 中:
-release.new.subject=%[2]s 中的 %[1]s 发布了
+release.new.subject=%[2]s 中的 %[1]s 已发布
release.new.text=@%[1]s 于 %[3]s 发布了 %[2]s
-release.title=标题: %s
+release.title=标题:%s
release.note=注释:
release.downloads=下载:
-release.download.zip=源代码 (ZIP)
-release.download.targz=源代码 (TAR.GZ)
+release.download.zip=源代码(ZIP)
+release.download.targz=源代码(TAR.GZ)
-repo.transfer.subject_to=%s 想要将 "%s" 转让给 %s
-repo.transfer.subject_to_you=%s 想要将 "%s" 转让给你
-repo.transfer.to_you=你
+repo.transfer.subject_to=%s 想要将「%s」转移给 %s
+repo.transfer.subject_to_you=%s 想要将「%s」转移给您
+repo.transfer.to_you=您
repo.transfer.body=访问 %s 以接受或拒绝转移,亦可忽略此邮件。
-repo.collaborator.added.subject=%s 把你添加到了 %s
-repo.collaborator.added.text=您已被添加为代码库的协作者:
+repo.collaborator.added.subject=%s 把您添加到 %s
+repo.collaborator.added.text=您已被添加为仓库的协作者:
team_invite.subject=%[1]s 邀请您加入组织 %[2]s
team_invite.text_1=%[1]s 邀请您加入组织 %[3]s 中的团队 %[2]s。
team_invite.text_2=请点击下面的链接加入团队:
-team_invite.text_3=注意:这是发送给 %[1]s 的邀请。如果您未曾收到过此类邀请,请忽略这封电子邮件。
+team_invite.text_3=注意:此邀请是发送给 %[1]s 的。如果您未预期收到此邀请,请忽略这封邮件。
[modal]
yes=确认操作
@@ -585,44 +586,44 @@ SSPISeparatorReplacement=分隔符
SSPIDefaultLanguage=默认语言
require_error=不能为空。
-alpha_dash_error=应该只包含字母数字、破折号 ('-') 和下划线 ('_') 字符。
-alpha_dash_dot_error=` 应该只包含字母数字, 破折号 ('-'), 下划线 ('_') 和点 ('. ') 。`
+alpha_dash_error=`应该只包含字母数字、破折号('-')和下划线('_')。`
+alpha_dash_dot_error=`应该只包含字母数字、破折号('-')、下划线('_')和点('.')。`
git_ref_name_error=` 必须是格式良好的 git 引用名称。`
size_error=长度必须为 %s。
min_size_error=长度最小为 %s 个字符。
max_size_error=长度最大为 %s 个字符。
email_error=不是一个有效的邮箱地址。
-url_error=`'%s' 不是一个有效的 URL。`
-include_error=`必须包含子字符串 "%s"。`
-glob_pattern_error=`匹配模式无效:%s.`
+url_error=`「%s」不是一个有效的 URL。`
+include_error=`必须包含子字符串「%s」。`
+glob_pattern_error=`匹配表达式无效:%s.`
regex_pattern_error=`正则表达式无效:%s.`
-username_error=` 只能包含字母数字字符('0-9','a-z','A-Z'), 破折号 ('-'), 下划线 ('_') 和点 ('.'). 不能以非字母数字字符开头或结尾,并且不允许连续的非字母数字字符。`
+username_error=`只能包含字母数字('0-9'、'a-z'、'A-Z')破折号('-')下划线('_')和点('.')。不能以非字母数字字符开头和结尾且不允许连续的非字母数字字符。`
invalid_group_team_map_error=`映射无效: %s`
unknown_error=未知错误:
captcha_incorrect=验证码不正确。
password_not_match=密码不匹配。
lang_select_error=从列表中选出语言
-username_been_taken=用户名已被使用。
+username_been_taken=用户名已使用。
username_change_not_local_user=非本地用户不允许更改用户名。
-change_username_disabled=更改用户名已被禁用。
+change_username_disabled=更改用户名已禁用。
change_full_name_disabled=更改用户全名已禁用
username_has_not_been_changed=用户名未更改
-repo_name_been_taken=仓库名称已被使用。
-repository_force_private=“强制私有”已启用:私有仓库不能被公开。
+repo_name_been_taken=仓库名称已使用。
+repository_force_private=「强制私有」已启用:私有仓库不能被公开。
repository_files_already_exist=此仓库已存在文件。请联系系统管理员。
repository_files_already_exist.adopt=此仓库已存在文件,只能被收录。
repository_files_already_exist.delete=此仓库已存在文件,必须先删除他们。
repository_files_already_exist.adopt_or_delete=此仓库已存在文件,要么删除他们,要么收录他们。
visit_rate_limit=远程访问达到速度限制。
-2fa_auth_required=远程访问需要双重验证。
-org_name_been_taken=组织名称已被使用。
-team_name_been_taken=团队名称已被使用。
+2fa_auth_required=远程访问需要两步验证。
+org_name_been_taken=组织名称已使用。
+team_name_been_taken=团队名称已使用。
team_no_units_error=至少选择一项仓库单元。
-email_been_used=该电子邮件地址已在使用中。
+email_been_used=该邮箱地址已在使用中。
email_invalid=此邮箱地址无效。
email_domain_is_not_allowed=用户 %s 与EMAIL_DOMAIN_ALLOWLIT 或 EMAIL_DOMAIN_BLOCKLIT 冲突。请确保您的操作是预期的。
-openid_been_used=OpenID 地址 "%s" 已被使用。
+openid_been_used=OpenID 地址「%s」已被使用。
username_password_incorrect=用户名或密码不正确。
password_complexity=密码未达到复杂程度要求:
password_lowercase_one=至少一个小写字符
@@ -637,14 +638,14 @@ unset_password=登录用户没有设置密码。
unsupported_login_type=此登录类型不支持手动删除帐户。
user_not_exist=该用户不存在
team_not_exist=团队不存在
-last_org_owner=您不能从 "所有者" 团队中删除最后一个用户。组织中必须至少有一个所有者。
-cannot_add_org_to_team=组织不能被加入到团队中。
+last_org_owner=您不能从「所有者」团队中删除最后一个用户。组织中必须至少有一个所有者。
+cannot_add_org_to_team=组织不能加入到团队中。
duplicate_invite_to_team=此用户已被邀请为团队成员。
organization_leave_success=您已成功离开组织 %s。
-invalid_ssh_key=无法验证您的 SSH 密钥: %s
-invalid_gpg_key=无法验证您的 GPG 密钥: %s
-invalid_ssh_principal=无效的规则: %s
+invalid_ssh_key=无法验证您的 SSH 密钥:%s
+invalid_gpg_key=无法验证您的 GPG 密钥:%s
+invalid_ssh_principal=无效的规则:%s
must_use_public_key=您提供的密钥是私钥。不要在任何地方上传您的私钥,请改用您的公钥。
unable_verify_ssh_key=无法验证 SSH 密钥,请仔细检查是否有错误。
auth_failed=授权验证失败:%v
@@ -677,27 +678,27 @@ follow=关注
unfollow=取消关注
user_bio=简历
disabled_public_activity=该用户已隐藏活动记录。
-email_visibility.limited=所有已认证用户均可看到您的电子邮件地址
-email_visibility.private=只有你本人和管理员可以看到你的电子邮件地址
+email_visibility.limited=所有已认证用户均可看到您的邮箱地址
+email_visibility.private=只有您本人和管理员可以看到您的邮箱地址
show_on_map=在地图上显示这个位置
settings=用户设置
-form.name_reserved=用户名 "%s" 被保留。
-form.name_pattern_not_allowed=用户名中不允许使用 "%s" 格式。
-form.name_chars_not_allowed=用户名 "%s" 包含无效字符。
+form.name_reserved=用户名「%s」被保留。
+form.name_pattern_not_allowed=用户名中不允许使用「%s」格式。
+form.name_chars_not_allowed=用户名「%s」包含无效字符。
block.block=屏蔽
block.block.user=屏蔽用户
block.block.org=屏蔽用户访问组织
-block.block.failure=屏蔽用户失败: %s
+block.block.failure=屏蔽用户失败:%s
block.unblock=取消屏蔽
-block.unblock.failure=屏蔽用户失败: %s
+block.unblock.failure=取消屏蔽用户失败:%s
block.blocked=您已屏蔽此用户。
block.title=屏蔽一个用户
block.info=屏蔽用户会阻止他们与仓库进行交互,例如打开或评论合并请求或出现问题。了解更多关于屏蔽用户的信息。
block.info_1=阻止用户在您的帐户和仓库中进行以下操作:
-block.info_2=关注你的账号
-block.info_3=通过@提及您的用户名向您发送通知
+block.info_2=关注您的账号
+block.info_3=通过 @ 提及您的用户名向您发送通知
block.info_4=邀请您作为协作者到他们的仓库中
block.info_5=在仓库中点赞、派生或关注
block.info_6=打开和评论工单或合并请求
@@ -730,18 +731,18 @@ uid=UID
webauthn=两步验证(安全密钥)
public_profile=公开信息
-biography_placeholder=告诉我们一点您自己! (您可以使用Markdown)
-location_placeholder=与他人分享你的大概位置
-profile_desc=控制您的个人资料对其他用户的显示方式。您的主要电子邮件地址将用于通知、密码恢复和基于网页界面的 Git 操作
-password_username_disabled=您不被允许更改你的用户名。更多详情请联系您的系统管理员。
-password_full_name_disabled=您不被允许更改你的全名。请联系您的站点管理员了解更多详情。
+biography_placeholder=告诉我们一点您自己! (您可以使用 Markdown)
+location_placeholder=与他人分享您的大概位置
+profile_desc=控制您的个人资料对其他用户的显示方式。您的主邮箱地址将用于通知、密码恢复和基于网页的 Git 操作。
+password_username_disabled=您不被允许更改您的用户名。更多详情请联系您的系统管理员。
+password_full_name_disabled=您不被允许更改您的全名。请联系您的站点管理员了解更多详情。
full_name=自定义名称
website=个人网站
location=所在地区
update_theme=更新主题
update_profile=更新信息
update_language=更新语言
-update_language_not_found=语言 %s 不可用。
+update_language_not_found=语言「%s」不可用。
update_language_success=语言已更新。
update_profile_success=您的资料信息已经更新
change_username=您的用户名已更改。
@@ -752,9 +753,9 @@ cancel=取消操作
language=界面语言
ui=主题
hidden_comment_types=隐藏的评论类型
-hidden_comment_types_description=此处选中的注释类型不会显示在问题页面中。比如,勾选”标签“删除所有 " 添加/删除的 " 注释。
-hidden_comment_types.ref_tooltip=注释此问题在何处被提及过,如另一个问题、代码提交等
-hidden_comment_types.issue_ref_tooltip=注释用户在何处更改了与此问题相关联的分支/标签
+hidden_comment_types_description=此处选中的注释类型不会显示在工单页面上。比如,勾选「标签」删除所有「{user} 添加/删除的 {label}」注释。
+hidden_comment_types.ref_tooltip=注释此工单在何处被提及过,如另一个工单、提交…
+hidden_comment_types.issue_ref_tooltip=注释用户在何处更改了与此工单相关联的分支 / Git 标签
comment_type_group_reference=引用
comment_type_group_label=标签
comment_type_group_milestone=里程碑
@@ -774,14 +775,14 @@ privacy=隐私设置
keep_activity_private=隐藏个人资料页面中的活动
keep_activity_private_popup=使活动仅对您和管理员可见
-lookup_avatar_by_mail=从电子邮箱地址查找头像
-federated_avatar_lookup=Federated Avatar 查找
-enable_custom_avatar=启动自定义头像
+lookup_avatar_by_mail=从邮箱地址查找头像
+federated_avatar_lookup=查找 Federated 头像
+enable_custom_avatar=使用自定义头像
choose_new_avatar=选择新的头像
update_avatar=更新头像
delete_current_avatar=删除当前头像
uploaded_avatar_not_a_image=上传的文件不是一张图片。
-uploaded_avatar_is_too_big=上传的文件大小(%d KiB) 超过最大限制(%d KiB)。
+uploaded_avatar_is_too_big=上传的文件大小(%d KiB)超过最大限制(%d KiB)。
update_avatar_success=您的头像已更新。
update_user_avatar_success=用户头像已更新。
cropper_prompt=您可以在保存前编辑图像。编辑的图像将被保存为 PNG 格式。
@@ -798,61 +799,61 @@ emails=邮箱地址
manage_emails=管理邮箱地址
manage_themes=选择默认主题
manage_openid=管理 OpenID 地址
-email_desc=您的主要电子邮件地址将用于通知、密码恢复,基于网页界面的Git操作(只要它不是设置为隐藏的)。
+email_desc=您的主邮箱地址将用于通知、密码恢复以及基于网页的 Git 操作(如果它未设为隐藏)。
theme_desc=这将是您在整个网站上的默认主题。
theme_colorblindness_help=颜色障碍主题支持
-theme_colorblindness_prompt=Gitea 只能获得一些基本的颜色障碍支持,这些主题只定义了少数颜色。 这项工作仍在进行中,可以通过在主题的 CSS 文件中定义更多颜色来做更多的改进。
-primary=主要
+theme_colorblindness_prompt=Gitea 仅有少数主题存在基本的颜色障碍支持,这些主题只定义了少数颜色。这项工作仍在进行中,可以通过在主题的 CSS 文件中定义更多颜色来实现更多改进。
+primary=主
activated=已激活
requires_activation=需要激活
-primary_email=设为主要邮件地址
+primary_email=设为主邮箱
activate_email=发送激活邮件
activations_pending=等待激活
-can_not_add_email_activations_pending=有一个待处理的激活请求,请稍等几分钟后再尝试添加新的电子邮件地址。
+can_not_add_email_activations_pending=有一个待处理的激活请求,请稍等几分钟后再尝试添加新的邮箱地址。
delete_email=移除
-email_deletion=移除电子邮件地址
-email_deletion_desc=电子邮箱地址和相关信息将会被删除。使用此电子邮箱地址发送的Git提交将会保留,继续?
-email_deletion_success=您的电子邮箱地址已被移除。
+email_deletion=移除邮箱地址
+email_deletion_desc=邮箱地址和相关信息将会被删除。使用此邮箱地址发送的 Git 提交将会保留,继续?
+email_deletion_success=您的邮箱地址已移除。
theme_update_success=您的主题已更新。
theme_update_error=所选主题不存在。
openid_deletion=移除 OpenID 地址
-openid_deletion_desc=删除此 OpenID 地址将会阻止你使用它进行登录。你确定要继续吗?
-openid_deletion_success=OpenID地址已被移除。
+openid_deletion_desc=删除此 OpenID 地址将会阻止您使用它进行登录。您确定要继续吗?
+openid_deletion_success=OpenID 地址已移除。
add_new_email=添加新的邮箱地址
add_new_openid=添加新的 OpenID URI
-add_email=增加电子邮件地址
+add_email=新增邮箱地址
add_openid=添加 OpenID URI
-add_email_confirmation_sent=一封确认邮件已经被发送至 %s,请检查您的收件箱并在 %s 内完成确认注册操作。
-add_email_success=新的电子邮件地址已添加。
-email_preference_set_success=电子邮件首选项已成功设置。
+add_email_confirmation_sent=一封确认邮件已经发送至「%s」,请检查您的收件箱并在 %s 内完成确认注册操作。
+add_email_success=新邮箱地址已添加。
+email_preference_set_success=邮件首选项已成功设置。
add_openid_success=新的 OpenID 地址已添加。
-keep_email_private=隐藏电子邮件地址
-keep_email_private_popup=这将会隐藏您的电子邮件地址,不仅在您的个人资料中,还在您使用Web界面创建合并请求或编辑文件时。已推送的提交将不会被修改。在提交中使用 %s 以和您的账号关联。
-openid_desc=OpenID 让你可以将认证转发到外部服务。
+keep_email_private=隐藏邮箱地址
+keep_email_private_popup=这将会隐藏您的邮箱地址,不仅在您的个人资料中,还在您使用 Web 界面创建合并请求或编辑文件时。已推送的提交将不会被修改。在提交中使用 %s 以和您的账号关联。
+openid_desc=OpenID 让您可以将认证转发到外部服务。
manage_ssh_keys=管理 SSH 密钥
-manage_ssh_principals=管理SSH证书规则
+manage_ssh_principals=管理 SSH 证书规则
manage_gpg_keys=管理 GPG 密钥
add_key=增加密钥
-ssh_desc=这些 SSH 公钥已经关联到你的账号。相应的私钥拥有完全操作你的仓库的权限。
-principal_desc=这些SSH证书规则已关联到你的账号将允许完全访问你的所有仓库。
-gpg_desc=这些 GPG 公钥已经关联到你的账号。请妥善保管你的私钥因为他们将被用于认证提交。
+ssh_desc=这些 SSH 公钥已经关联到您的账号。相应的私钥拥有完全操作您仓库的权限。
+principal_desc=这些 SSH 证书规则已关联到您的账号将允许完全访问您所有仓库。
+gpg_desc=这些 GPG 公钥已经关联到您的账号。请妥善保管您的私钥因为他们将被用于认证提交。
ssh_helper=需要帮助? 请查看有关 如何生成 SSH 密钥 或 常见 SSH 问题 寻找答案。
-gpg_helper=需要帮助吗? 看一看 GitHub 关于GPG 的指导。
+gpg_helper=需要帮助? 看一看 GitHub 关于 GPG 的指导。
add_new_key=增加 SSH 密钥
add_new_gpg_key=添加的 GPG 密钥
key_content_ssh_placeholder=以 'ssh-ed25519'、 'ssh-rsa'、 'ecdsa-sha2-nistp256'、'ecdsa-sha2-nistp384'、'ecdsa-sha2-nistp521'、 'sk-ecdsa-sha2-nistp256@openssh.com' 或 'sk-ssh-ed25519@openssh.com' 开头
key_content_gpg_placeholder=以 '-----BEGIN PGP PUBLIC KEY BLOCK-----' 开头
add_new_principal=添加规则
ssh_key_been_used=此 SSH 密钥已添加到服务器。
-ssh_key_name_used=使用相同名称的SSH公钥已经存在!
-ssh_principal_been_used=此规则已经加入到了服务器。
-gpg_key_id_used=使用相同名称的GPG公钥已经存在!
-gpg_no_key_email_found=此 GPG 密钥与您帐户关联的任何已激活电子邮件地址均不匹配。如果您在提供的令牌上签名,它仍然可以被添加。
+ssh_key_name_used=使用相同名称的 SSH 公钥已经存在。
+ssh_principal_been_used=此规则已经加入到服务器。
+gpg_key_id_used=使用相同名称的 GPG 公钥已经存在。
+gpg_no_key_email_found=此 GPG 密钥与您帐户关联的任何已激活邮箱地址均不匹配。如果您已对提供的令牌进行签名,仍可添加该密钥。
gpg_key_matched_identities=匹配的身份:
-gpg_key_matched_identities_long=此密钥中包含的身份信息与下面这个该用户已激活电子邮件地址是相匹配的。因此,能与这些电子邮件地址相匹配的提交可以通过此密钥进行验证。
+gpg_key_matched_identities_long=此密钥中包含的身份信息与以下此用户已激活邮箱地址匹配。与这些邮箱地址相匹配的提交可通过此密钥进行验证。
gpg_key_verified=已验证的密钥
-gpg_key_verified_long=密钥已经用令牌进行了验证,并且可以用来验证匹配此用户任何已激活电子邮件地址的提交,以及匹配此密钥的任何身份。
+gpg_key_verified_long=密钥已通过令牌验证,除与此密钥匹配的任何身份外,还可用于验证与该用户任何已激活邮箱地址匹配的提交。
gpg_key_verify=验证
gpg_invalid_token_signature=提供的 GPG 密钥、签名和令牌不匹配或过期。
gpg_token_required=您必须为下面的令牌提供签名
@@ -860,9 +861,9 @@ gpg_token=令牌
gpg_token_help=您可以使用以下方式生成签名:
gpg_token_signature=GPG 增强签名
key_signature_gpg_placeholder=以 '-----BEGIN PGP PUBLIC KEY BLOCK-----' 开头
-verify_gpg_key_success=GPG 密钥 %s 已被验证。
+verify_gpg_key_success=GPG 密钥「%s」已验证。
ssh_key_verified=已验证的密钥
-ssh_key_verified_long=密钥已经用令牌进行了验证,并且可以用来验证匹配此用户任何已激活电子邮件地址的提交。
+ssh_key_verified_long=密钥已通过令牌验证,可用于验证与该用户任何已激活邮箱地址匹配的提交。
ssh_key_verify=验证
ssh_invalid_token_signature=提供的 SSH 密钥、签名或令牌不匹配或令牌已过期。
ssh_token_required=您必须为下面的令牌提供签名
@@ -870,24 +871,24 @@ ssh_token=令牌
ssh_token_help=您可以使用以下方式生成签名:
ssh_token_signature=增强 SSH 签名
key_signature_ssh_placeholder=以 '-----BEGIN SSH SIGNATURE -----' 开头
-verify_ssh_key_success=SSH 密钥 %s 已被验证。
+verify_ssh_key_success=SSH 密钥「%s」已验证。
subkeys=子项
-key_id=键ID
+key_id=密钥 ID
key_name=密钥名称
key_content=密钥内容
principal_content=内容
-add_key_success=SSH 密钥 %s 添加成功。
-add_gpg_key_success=GPG 密钥 %s 添加成功。
-add_principal_success=SSH证书规则 %s 添加成功。
+add_key_success=SSH 密钥「%s」添加成功。
+add_gpg_key_success=GPG 密钥「%s」添加成功。
+add_principal_success=SSH 证书规则「%s」添加成功。
delete_key=删除
ssh_key_deletion=删除 SSH 密钥
gpg_key_deletion=删除 GPG 密钥
ssh_principal_deletion=删除 SSH 证书规则
ssh_key_deletion_desc=删除 SSH 公钥将取消对应的私钥对您的 Gitea 帐户的访问权限。继续?
-gpg_key_deletion_desc=删除 GPG 公钥将无法认知使用对应私钥签名的提交,继续?
+gpg_key_deletion_desc=删除 GPG 公钥将无法认证对应私钥签名的提交,继续?
ssh_principal_deletion_desc=删除此 SSH 证书规则将取消它对您的账户的访问权限。继续?
-ssh_key_deletion_success=GPG 密钥已被删除。
-gpg_key_deletion_success=GPG 密钥已被删除。
+ssh_key_deletion_success=SSH 密钥已删除。
+gpg_key_deletion_success=GPG 密钥已删除。
ssh_principal_deletion_success=此规则删除成功。
added_on=添加于 %s
valid_until_date=有效期至 %s
@@ -901,7 +902,7 @@ token_state_desc=7 天内使用过该密钥
principal_state_desc=7 天内使用过该规则
show_openid=在个人信息上显示
hide_openid=在个人信息上隐藏
-ssh_disabled=SSH 被禁用
+ssh_disabled=SSH 已禁用
ssh_signonly=SSH 目前已禁用,因此这些密钥仅用于提交签名验证。
ssh_externally_managed=此 SSH 密钥是由外部管理的
manage_social=管理关联社交帐户
@@ -921,10 +922,10 @@ access_token_deletion=删除 Access Token
access_token_deletion_cancel_action=取消
access_token_deletion_confirm_action=刪除
access_token_deletion_desc=删除令牌将撤销程序对您账户的访问权限。此操作无法撤消。是否继续?
-delete_token_success=令牌已经被删除。使用该令牌的应用将不再能够访问你的账号。
+delete_token_success=令牌已经被删除。使用该令牌的应用将不再能够访问您的账号。
repo_and_org_access=仓库和组织访问权限
permissions_public_only=仅公开
-permissions_access_all=全部(公开、私有和受限)
+permissions_access_all=全部(公开、私有和受限)
permission_not_set=未设置
permission_no_access=无访问权限
permission_read=可读
@@ -933,7 +934,7 @@ permission_anonymous_read=匿名读
permission_everyone_read=所有人可读
permission_everyone_write=所有人可写
access_token_desc=所选令牌权限仅限于对应的 API 路由的授权。阅读 文档 以获取更多信息。
-at_least_one_permission=你需要选择至少一个权限才能创建令牌
+at_least_one_permission=您需要选择至少一个权限才能创建令牌
permissions_list=权限:
manage_oauth2_applications=管理 OAuth2 应用程序
@@ -941,13 +942,13 @@ edit_oauth2_application=编辑 OAuth2 应用程序
oauth2_applications_desc=OAuth2 应用允许第三方应用程序在此 Gitea 实例中安全验证用户。
remove_oauth2_application=删除 OAuth2 应用程序
remove_oauth2_application_desc=删除 OAuth2 应用将撤销所有签名的访问令牌。继续吗?
-remove_oauth2_application_success=该应用已被删除。
+remove_oauth2_application_success=该应用已删除。
create_oauth2_application=创建新的 OAuth2 应用程序
create_oauth2_application_button=创建应用
-create_oauth2_application_success=您已成功创建了一个新的 OAuth2 应用。
-update_oauth2_application_success=您已成功更新了此 OAuth2 应用。
+create_oauth2_application_success=您已成功创建一个新的 OAuth2 应用。
+update_oauth2_application_success=您已成功更新此 OAuth2 应用。
oauth2_application_name=应用名称
-oauth2_confidential_client=机密客户端。是否是能够维持凭据机密性的应用,比如网页应用程序。如果是本地应用程序请不要勾选,包括桌面和移动端应用。
+oauth2_confidential_client=机密客户端。对于需要保密的应用(例如 Web 应用),请选择此选项。对于包括桌面和移动应用在内的本机应用,请勿选择此选项。
oauth2_skip_secondary_authorization=首次授权后允许公共客户端跳过授权步骤。 可能会带来安全风险。
oauth2_redirect_uris=重定向 URI。每行一个 URI。
save_application=保存
@@ -959,32 +960,32 @@ oauth2_client_secret_hint=您离开或刷新此页面后将不会再显示此密
oauth2_application_edit=编辑
oauth2_application_create_description=OAuth2 应用允许您的第三方应用程序访问此实例的用户帐户。
oauth2_application_remove_description=移除一个OAuth2应用将会阻止它访问此实例上的已授权用户账户。是否继续?
-oauth2_application_locked=如果配置启用,Gitea预注册一些OAuth2应用程序。 为了防止意外的行为, 这些应用既不能编辑也不能删除。请参阅OAuth2文档以获取更多信息。
+oauth2_application_locked=如果配置启用,Gitea 将在启动时预注册一些 OAuth2 应用程序。 为了防止意外的行为, 这些应用既不能编辑也不能删除。请参阅 OAuth2 文档以获取更多信息。
authorized_oauth2_applications=已授权的 OAuth2 应用
authorized_oauth2_applications_description=您已授予这些第三方应用程序访问您的个人 Gitea 账户的权限。请撤销那些您不再需要的应用程序的访问权限。
revoke_key=撤销
revoke_oauth2_grant=撤回权限
revoke_oauth2_grant_description=确定撤销此三方应用程序的授权,并阻止此应用程序访问您的数据?
-revoke_oauth2_grant_success=成功撤销了访问权限。
+revoke_oauth2_grant_success=成功撤销访问权限。
-twofa_desc=为保护你的账号密码安全,你可以使用智能手机或其它设备来接收时间强相关的一次性密码(TOTP)。
+twofa_desc=为保护您的账号密码安全,您可以使用智能手机或其它设备来接收时间强相关的一次性密码(TOTP)。
twofa_recovery_tip=如果您丢失了您的设备,您将能够使用一次性恢复密钥来重新获得对您账户的访问。
-twofa_is_enrolled=你的账号已启用 了两步验证。
-twofa_not_enrolled=你的账号未开启两步验证。
+twofa_is_enrolled=您的账号已启用 了两步验证。
+twofa_not_enrolled=您的账号未开启两步验证。
twofa_disable=禁用两步认证
twofa_scratch_token_regenerate=重新生成初始令牌
twofa_scratch_token_regenerated=您的初始令牌现在是 %s。将其存放在安全的地方,它将不会再次显示。
twofa_enroll=启用两步验证
-twofa_disable_note=如果需要, 可以禁用双因素身份验证。
+twofa_disable_note=如果需要,您可以禁用两步验证。
twofa_disable_desc=关掉两步验证会使得您的账号不安全,继续执行?
-regenerate_scratch_token_desc=如果您丢失了您的恢复密钥或已经使用它登录, 您可以在这里重置它。
-twofa_disabled=两步验证已被禁用。
+regenerate_scratch_token_desc=如果您丢失了您的恢复密钥或已经使用它登录,您可以在这里重置它。
+twofa_disabled=两步验证已禁用。
scan_this_image=使用您的授权应用扫描这张图片:
or_enter_secret=或者输入密钥:%s
then_enter_passcode=并输入应用程序中显示的密码:
passcode_invalid=密码不正确。再试一次。
-twofa_enrolled=你的账号已经启用了两步验证。请保存初始令牌(%s)到一个安全的地方,此令牌仅显示一次。
+twofa_enrolled=您的账号已经启用两步验证。请保存初始令牌(%s)到一个安全的地方,此令牌仅显示一次。
twofa_failed_get_secret=获取 secret 失败。
webauthn_desc=安全密钥是包含加密密钥的硬件设备。它们可以用于双因素身份验证。安全密钥必须支持 WebAuthn 身份验证器 标准。
@@ -997,29 +998,31 @@ webauthn_alternative_tip=您可能想要配置额外的身份验证方法。
manage_account_links=管理绑定过的账号
manage_account_links_desc=这些外部帐户已经绑定到您的 Gitea 帐户。
-account_links_not_available=当前没有与您的 Gitea 帐户绑定的外部帐户。
+account_links_not_available=当前没有外部帐户链接到您的 Gitea 帐户。
link_account=链接账户
remove_account_link=删除已绑定的账号
remove_account_link_desc=删除已绑定帐户将吊销其对您的 Gitea 帐户的访问权限。继续?
remove_account_link_success=已取消绑定帐户。
-hooks.desc=添加 Webhooks,它们将会在您拥有的所有仓库 上触发
+hooks.desc=添加 Web 钩子,它们将会在您拥有的所有仓库 上触发。
orgs_none=您现在还不是任何组织的成员。
-repos_none=你并不拥有任何仓库。
+repos_none=您并不拥有任何仓库。
delete_account=删除当前帐户
-delete_prompt=此操作将永久删除您的用户帐户。它 不能 被撤消。
-delete_with_all_comments=你的帐户年龄小于 %s。为了避免幽灵评论,所有工单/合并请求的评论都将与它一起被删除。
+delete_prompt=此操作将永久删除您的用户帐户。它 无法 被撤消。
+delete_with_all_comments=您的帐户年龄小于 %s。为了避免幽灵评论,所有工单 / 合并请求的评论都将与它一起被删除。
confirm_delete_account=确认删除帐户
delete_account_title=删除当前帐户
delete_account_desc=确实要永久删除此用户帐户吗?
email_notifications.enable=启用邮件通知
-email_notifications.onmention=只在被提到时邮件通知
+email_notifications.onmention=仅被提及时通知
email_notifications.disable=停用邮件通知
-email_notifications.submit=邮件通知设置
-email_notifications.andyourown=和您自己的通知
+email_notifications.submit=设置邮件通知
+email_notifications.andyourown=仅与您相关的通知
+email_notifications.actions.desc=已设置 Gitea 工作流 的仓库中工作流运行的通知。
+email_notifications.actions.failure_only=仅在工作流运行失败时通知
visibility=用户可见性
visibility.public=公开
@@ -1034,9 +1037,9 @@ new_repo_helper=代码仓库包含了所有的项目文件,包括版本历史
owner=拥有者
owner_helper=由于最大仓库数量限制,一些组织可能不会显示在下拉列表中。
repo_name=仓库名称
-repo_name_profile_public_hint=.profile 是一个特殊的存储库,您可以使用它将 README.md 添加到您的公共组织资料中,任何人都可以看到。请确保它是公开的,并使用个人资料目录中的 README 对其进行初始化以开始使用。
-repo_name_profile_private_hint=.profile-private 是一个特殊的存储库,您可以使用它向您的组织成员个人资料添加 README.md,仅对组织成员可见。请确保它是私有的,并使用个人资料目录中的 README 对其进行初始化以开始使用。
-repo_name_helper=理想的仓库名称应由简短、有意义和独特的关键词组成。".profile" 和 ".profile-private" 可用于为用户/组织添加 README.md。
+repo_name_profile_public_hint=.profile 是一个特殊的仓库,您可以使用它将 README.md 添加到您的公共组织资料中,任何人都可以看到。请确保它是公开的,并使用个人资料目录中的 README 对其进行初始化以开始使用。
+repo_name_profile_private_hint=.profile-private 是一个特殊的仓库,您可以使用它向您的组织成员个人资料添加 README.md,仅对组织成员可见。请确保它是私有的,并使用个人资料目录中的 README 对其进行初始化以开始使用。
+repo_name_helper=理想的仓库名称应由简短、有意义和独特的关键词组成。「.profile」和「.profile-private」可用于为用户/组织添加 README.md。
repo_size=仓库大小
template=模板
template_select=选择模板
@@ -1050,41 +1053,42 @@ visibility_fork_helper=(修改该值将会影响到所有派生仓库)
clone_helper=不知道如何克隆?查看帮助 。
fork_repo=派生仓库
fork_from=派生自
-already_forked=你已经派生过 %s
+already_forked=您已经派生过 %s
fork_to_different_account=派生到其他账号
fork_visibility_helper=无法更改派生仓库的可见性。
-fork_branch=要克隆到 Fork 的分支
+fork_branch=要克隆为派生的分支
all_branches=所有分支
view_all_branches=查看所有分支
-view_all_tags=查看所有标签
+view_all_tags=查看所有 Git 标签
fork_no_valid_owners=这个代码仓库无法被派生,因为没有有效的所有者。
fork.blocked_user=无法克隆仓库,因为您被仓库所有者屏蔽。
use_template=使用此模板
open_with_editor=用 %s 打开
+
download_zip=下载 ZIP
download_tar=下载 TAR.GZ
download_bundle=下载 BUNDLE
generate_repo=生成仓库
generate_from=生成自
-repo_desc=仓库描述
+repo_desc=描述
repo_desc_helper=输入简要描述 (可选)
repo_no_desc=无详细信息
-repo_lang=编程语言
-repo_gitignore_helper=选择 .gitignore 模板。
+repo_lang=语言
+repo_gitignore_helper=选择 .gitignore 模板
repo_gitignore_helper_desc=从常见语言的模板列表中选择忽略跟踪的文件。默认情况下,由开发或构建工具生成的特殊文件都包含在 .gitignore 中。
issue_labels=工单标签
issue_labels_helper=选择一个工单标签集
license=授权许可
-license_helper=选择授权许可文件。
-license_helper_desc=许可证说明了其他人可以和不可以用您的代码做什么。不确定哪一个适合你的项目?见 选择一个许可证
+license_helper=选择授权许可文件
+license_helper_desc=许可证说明了其他人可以和不可以用您的代码做什么。不确定哪一个适合您的项目?见 选择一个许可证
multiple_licenses=多许可证
object_format=对象格式
object_format_helper=仓库的对象格式。之后无法更改。SHA1 是最兼容的。
readme=自述
readme_helper=选择自述文件模板。
readme_helper_desc=这是您可以为您的项目撰写完整描述的地方。
-auto_init=初始化仓库(添加. gitignore、许可证和自述文件)
-trust_model_helper=选择签名验证的“信任模型”。可能的选项是:
+auto_init=初始化仓库(添加 .gitignore、许可证和自述文件)
+trust_model_helper=选择签名验证的信任模型。可能的选项是:
trust_model_helper_collaborator=协作者:信任协作者的签名
trust_model_helper_committer=提交者:信任与提交者相符的签名
trust_model_helper_collaborator_committer=协作者+提交者:信任协作者同时是提交者的签名
@@ -1095,31 +1099,31 @@ default_branch_label=默认
default_branch_helper=默认分支是用于合并请求和代码提交的基础分支。
mirror_prune=修剪
mirror_prune_desc=删除过时的远程跟踪引用
-mirror_interval=镜像间隔 (有效的时间单位是 'h', 'm', 's')。0 禁用自动定期同步 (最短间隔: %s)
+mirror_interval=镜像间隔(有效的时间单位是 'h'、'm'、's')。0 禁用自动定期同步(最短间隔: %s)
mirror_interval_invalid=镜像间隔无效。
mirror_sync=已同步
mirror_sync_on_commit=推送提交时同步
mirror_address=从 URL 克隆
mirror_address_desc=在授权框中输入必要的凭据。
-mirror_address_url_invalid=URL无效。请检查您所输入的URL是否正确。
+mirror_address_url_invalid=提供的 URL 无效。请确保 URL 的所有组成部分均已正确转义。
mirror_address_protocol_invalid=提供的URL无效。只能使用http(s)://或git://地址进行镜像操作。
mirror_lfs=大文件存储 (LFS)
mirror_lfs_desc=镜像 LFS 数据。
mirror_lfs_endpoint=LFS 网址
-mirror_lfs_endpoint_desc=同步将尝试使用克隆网址来 确定 LFS 服务器 。如果仓库 LFS 数据存储在其他位置,你还可以指定自定义网址。
+mirror_lfs_endpoint_desc=同步将尝试使用克隆 URL 来 确定 LFS 服务器 。如果仓库 LFS 数据存储在其他位置,您还可以指定自定义网址。
mirror_last_synced=上次同步
mirror_password_placeholder=(未更改)
mirror_password_blank_placeholder=(未设置)
mirror_password_help=更改用户名以删除已储存的密码。
watchers=关注者
-stargazers=称赞者
+stargazers=已赞者
stars_remove_warning=这将清除此仓库的所有点赞数。
forks=派生仓库
stars=点赞数
reactions_more=再加载 %d
unit_disabled=站点管理员已禁用此仓库单元。
language_other=其它
-adopt_search=输入用户名以搜索未被收录的仓库... (留空以查找全部)
+adopt_search=输入用户名以搜索未被收录的仓库…(留空以查找全部)
adopt_preexisting_label=收录仓库
adopt_preexisting=收录已存在的仓库
adopt_preexisting_content=从 %s 创建仓库
@@ -1136,11 +1140,11 @@ user_search_tooltip=最多显示30名用户
tree_path_not_found=%[2]s 中不存在路径 %[1]s
transfer.accept=接受转移
-transfer.accept_desc=`转移到 "%s"`
+transfer.accept_desc=转移到「%s」
transfer.reject=拒绝转移
-transfer.reject_desc=`取消转移到 "%s"`
-transfer.no_permission_to_accept=您没有权限接受此转让。
-transfer.no_permission_to_reject=您没有权限拒绝此转让。
+transfer.reject_desc=取消转移到「%s」
+transfer.no_permission_to_accept=您没有权限接受此转移。
+transfer.no_permission_to_reject=您没有权限拒绝此转移。
desc.private=私有库
desc.public=公开
@@ -1151,9 +1155,9 @@ desc.archived=已存档
desc.sha256=SHA256
template.items=模板选项
-template.git_content=Git数据(默认分支)
+template.git_content=Git 数据(默认分支)
template.git_hooks=Git 钩子
-template.git_hooks_tooltip=你目前无法修改或删除被添加过的 Git Hook。仅当你信任模板仓库时才可以选择此项。
+template.git_hooks_tooltip=您目前无法修改或删除被添加过的 Git 钩子。仅当您信任模板仓库时才可以选择此项。
template.webhooks=Web 钩子
template.topics=主题
template.avatar=头像
@@ -1161,15 +1165,15 @@ template.issue_labels=工单标签
template.one_item=必须至少选择一个模板项
template.invalid=必须选择一个模板仓库
-archive.title=该仓库已被归档。您可以查看文件和克隆它,但不能推送、创建工单或合并请求。
-archive.title_date=该仓库已于 %s 归档。您可以查看文件或克隆它,但不能推送、创建工单或合并请求。
+archive.title=该仓库已被归档。您可以查看文件和克隆它,但不能创建工单、合并请求或推送提交。
+archive.title_date=该仓库已于 %s 归档。您可以查看文件和克隆它,但不能创建工单、合并请求或推送提交。
archive.issue.nocomment=此仓库已存档,您不能在此工单添加评论。
archive.pull.nocomment=此仓库已存档,您不能在此合并请求添加评论。
-form.reach_limit_of_creation_1=你已经达到了 %d 仓库的上限。
-form.reach_limit_of_creation_n=你已经达到了 %d 个仓库的上限。
-form.name_reserved=仓库名称 %s 是被保留的。
-form.name_pattern_not_allowed=仓库名称中不允许使用 %s 格式。
+form.reach_limit_of_creation_1=您已经达到了 %d 仓库的上限。
+form.reach_limit_of_creation_n=您已经达到了 %d 个仓库的上限。
+form.name_reserved=仓库名称 %s 是保留的。
+form.name_pattern_not_allowed=仓库名中不允许使用「%s」格式。
need_auth=授权
migrate_options=迁移选项
@@ -1177,7 +1181,7 @@ migrate_service=迁移服务
migrate_options_mirror_helper=该仓库将是一个镜像
migrate_options_lfs=迁移 LFS 文件
migrate_options_lfs_endpoint.label=LFS 网址
-migrate_options_lfs_endpoint.description=迁移将尝试使用你的 Git remote 来 确定 LFS 服务器 。如果仓库 LFS 数据存储在其他位置,你还可以指定自定义网址。
+migrate_options_lfs_endpoint.description=迁移将尝试使用您的 Git remote 来 确定 LFS 服务器 。如果仓库 LFS 数据存储在其他位置,您还可以指定自定义网址。
migrate_options_lfs_endpoint.description.local=支持本地服务器路径。
migrate_options_lfs_endpoint.placeholder=如果留空,网址将从克隆 URL 中得到
migrate_items=迁移项目
@@ -1187,11 +1191,11 @@ migrate_items_labels=标签
migrate_items_issues=工单
migrate_items_pullrequests=合并请求
migrate_items_merge_requests=合并请求
-migrate_items_releases=版本发布
+migrate_items_releases=发布
migrate_repo=迁移仓库
migrate.clone_address=从 URL 迁移/克隆
migrate.clone_address_desc=现有仓库的 HTTP(s) 或 Git "clone" URL
-migrate.github_token_desc=由于 GitHub API 速率限制,您可以在此处放置一个或多个以逗号分隔的令牌,以加快迁移速度。 警告:滥用此功能可能会违反服务提供商的政策并导致帐户被封。
+migrate.github_token_desc=您可以在此处输入一个或多个令牌(以逗号分隔),以绕过 GitHub API 速率限制来加快迁移速度。警告:滥用此功能可能会违反服务提供商的政策并导致帐户被封禁。
migrate.clone_local_path=或服务器本地路径
migrate.permission_denied=您没有获得导入本地仓库的权限。
migrate.permission_denied_blocked=您不能从不允许的主机导入,请询问管理员以检查 ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS 设置。
@@ -1202,7 +1206,7 @@ migrate.migrate_items_options=需要访问令牌来迁移额外的内容
migrated_from=从 %[2]s 迁移
migrated_from_fake=从 %[1]s 迁移成功
migrate.migrate=从 %s 迁移
-migrate.migrating=正在从 %s 迁移...
+migrate.migrating=正在从 %s 迁移…
migrate.migrating_failed=从 %s 迁移失败。
migrate.migrating_failed.error=迁移失败:%s
migrate.migrating_failed_no_addr=迁移失败。
@@ -1228,7 +1232,7 @@ migrate.migrating_issues=迁移工单
migrate.migrating_pulls=迁移合并请求
migrate.cancel_migrating_title=取消迁移
migrate.cancel_migrating_confirm=您想要取消此次迁移吗?
-migrating_status=迁移状态
+migration_status=迁移状态
mirror_from=镜像自地址
forked_from=派生自
@@ -1260,15 +1264,15 @@ code.desc=查看源码、文件、提交和分支。
branch=分支
tree=目录树
clear_ref=`清除当前引用`
-filter_branch_and_tag=过滤分支或标签
-find_tag=查找Git标签
+filter_branch_and_tag=过滤分支或 Git 标签
+find_tag=查找 Git 标签
branches=分支列表
-tags=标签列表
+tags=Git 标签列表
issues=工单
pulls=合并请求
projects=项目
packages=软件包
-actions=Actions
+actions=工作流
labels=标签
org_labels_desc=组织级别的标签,可以被本组织下的 所有仓库 使用
org_labels_desc_manage=管理
@@ -1277,10 +1281,10 @@ milestone=里程碑
milestones=里程碑
commits=提交
commit=提交
-release=版本发布
-releases=版本发布
-tag=Git标签
-released_this=发布
+release=发布
+releases=发布
+tag=Git 标签
+released_this=发布于
tagged_this=已标记
file.title=%s 位于 %s
file_raw=原始文件
@@ -1318,7 +1322,8 @@ commit_graph.monochrome=黑白
commit_graph.color=彩色
commit.contained_in=这个提交包含在:
commit.contained_in_default_branch=此提交是默认分支的一部分
-commit.load_referencing_branches_and_tags=加载引用该提交的分支和标签
+commit.load_referencing_branches_and_tags=加载引用该提交的分支和 Git 标签
+commit.merged_in_pr=此提交已合并在合并请求 %s 中。
blame=Blame
download_file=下载文件
normal_view=普通视图
@@ -1332,16 +1337,18 @@ editor.upload_file=上传文件
editor.edit_file=编辑文件
editor.preview_changes=预览变更
editor.cannot_edit_lfs_files=无法在 web 界面中编辑 lfs 文件。
+editor.cannot_edit_too_large_file=文件过大,无法编辑。
editor.cannot_edit_non_text_files=网页不能编辑二进制文件。
+editor.file_not_editable_hint=但您仍然可以重命名或移动它。
editor.edit_this_file=编辑文件
editor.this_file_locked=文件已锁定
editor.must_be_on_a_branch=您必须在某个分支上才能对此文件进行修改操作。
-editor.fork_before_edit=您必须在派生这个仓库才能对此文件进行修改操作
+editor.fork_before_edit=您必须派生这个仓库才能对此文件进行修改操作。
editor.delete_this_file=删除文件
editor.must_have_write_access=您必须具有写权限才能对此文件进行修改操作。
-editor.file_delete_success=文件 %s 已被删除。
-editor.name_your_file=命名文件...
-editor.filename_help=通过键入名称后跟斜线 ("/") 来添加目录。通过在输入框的开头键入 "退格" 来删除目录。
+editor.file_delete_success=文件「%s」已删除。
+editor.name_your_file=命名文件…
+editor.filename_help=通过键入名称后跟斜线 ("/") 来添加目录。通过在输入框的开头键入「退格」来删除目录。
editor.or=或
editor.cancel_lower=取消
editor.commit_signed_changes=提交已签名的更改
@@ -1352,56 +1359,62 @@ editor.update=更新 %s
editor.delete=删除 %s
editor.patch=应用补丁
editor.patching=打补丁:
-editor.fail_to_apply_patch=无法应用补丁 %s
+editor.fail_to_apply_patch=无法应用补丁
editor.new_patch=新补丁
-editor.commit_message_desc=添加一个可选的扩展描述...
+editor.commit_message_desc=添加一个可选的扩展描述…
editor.signoff_desc=在提交日志消息末尾添加签署人信息。
editor.commit_directly_to_this_branch=直接提交至 %s 分支。
editor.create_new_branch=为此提交创建一个 新的分支 并发起合并请求。
editor.create_new_branch_np=为此提交创建 新分支 。
-editor.propose_file_change=提议文件更改
+editor.propose_file_change=建议文件更改
editor.new_branch_name=为这次提交的新分支命名
-editor.new_branch_name_desc=新的分支名称...
+editor.new_branch_name_desc=新的分支名称…
editor.cancel=取消
editor.filename_cannot_be_empty=文件名不能为空。
-editor.filename_is_invalid=文件名 %s 无效
+editor.filename_is_invalid=文件名无效:「%s」。
editor.commit_email=提交邮箱地址
editor.invalid_commit_email=提交的邮箱地址无效。
-editor.branch_does_not_exist=此仓库中不存在名为 %s 的分支。
-editor.branch_already_exists=此仓库已存在名为 %s 的分支。
-editor.directory_is_a_file=%s 已经作为文件名在此仓库中存在。
-editor.file_is_a_symlink=`"%s" 是一个符号链接,无法在 web 编辑器中编辑`
-editor.filename_is_a_directory=此仓库中已存在名为“%s” 的目录。
-editor.file_editing_no_longer_exists=正在编辑的文件 %s 已不存在。
-editor.file_deleting_no_longer_exists=正在删除的文件 %s 已不存在。
+editor.branch_does_not_exist=此仓库中不存在名为「%s」的分支。
+editor.branch_already_exists=此仓库已存在名为「%s」的分支。
+editor.directory_is_a_file=目录名「%s」已作为文件名在此仓库中存在。
+editor.file_is_a_symlink=`「%s」是一个符号链接,无法在 Web 编辑器中编辑`
+editor.filename_is_a_directory=文件名「%s」已作为目录名在此仓库中存在。
+editor.file_modifying_no_longer_exists=正在修改的文件「%s」已不存在于此仓库。
editor.file_changed_while_editing=文件内容在您进行编辑时已经发生变动。单击此处 查看变动的具体内容,或者 再次提交 覆盖已发生的变动。
-editor.file_already_exists=此仓库已经存在名为 %s 的文件。
-editor.commit_id_not_matching=提交ID与您开始编辑时的ID不匹配。请提交到补丁分支然后合并。
+editor.file_already_exists=此仓库已经存在名为「%s」的文件。
+editor.commit_id_not_matching=提交 ID 与您开始编辑时的 ID 不匹配。请提交到补丁分支然后合并。
editor.push_out_of_date=推送似乎已经过时。
editor.commit_empty_file_header=提交一个空文件
editor.commit_empty_file_text=您要提交的文件是空的,继续吗?
editor.no_changes_to_show=没有可以显示的变更。
-editor.fail_to_update_file=更新/创建文件 %s 失败。
-editor.fail_to_update_file_summary=错误信息:
-editor.push_rejected_no_message=此修改被服务器拒绝并且没有反馈消息。请检查 Git Hook。
-editor.push_rejected=此修改被服务器拒绝。请检查 Git Hook。
+editor.push_rejected_no_message=此修改被服务器拒绝并且没有反馈消息。请检查 Git 钩子。
+editor.push_rejected=此修改被服务器拒绝。请检查 Git 钩子。
editor.push_rejected_summary=详细拒绝信息:
-editor.add_subdir=添加目录
-editor.unable_to_upload_files=上传文件至 %s 时发生错误:%v
-editor.upload_file_is_locked=文件 %s 被 %s 锁定。
-editor.upload_files_to_dir=上传文件至 %s
-editor.cannot_commit_to_protected_branch=不可以提交到受保护的分支 %s。
+editor.add_subdir=添加目录…
+editor.unable_to_upload_files=上传文件至「%s」失败:%v
+editor.upload_file_is_locked=文件「%s」被 %s 锁定。
+editor.upload_files_to_dir=上传文件至「%s」
+editor.cannot_commit_to_protected_branch=不可以提交到受保护的分支「%s」。
editor.no_commit_to_branch=无法直接提交分支,因为:
editor.user_no_push_to_branch=用户不能推送到分支
editor.require_signed_commit=分支需要签名提交
-editor.cherry_pick=Cherry-pick %s 到:
+editor.cherry_pick=拣选提交 %s 到:
editor.revert=将 %s 还原到:
+editor.failed_to_commit=提交更改失败。
+editor.failed_to_commit_summary=错误信息:
+
+editor.fork_create=派生仓库以请求变更
+editor.fork_create_description=您不能直接编辑此仓库。您可以派生此仓库,进行编辑并创建一个合并请求。
+editor.fork_edit_description=您不能直接编辑此仓库。 更改将写入您的派生仓库 %s ,以便您可以创建一个合并请求。
+editor.fork_not_editable=您已经派生了此仓库,但您的派生是不可编辑的。
+editor.fork_failed_to_push_branch=推送分支 %s 到仓库失败。
+editor.fork_branch_exists=分支「%s」已存在于您的派生仓库中,请选择一个新的分支名称。
commits.desc=浏览代码修改历史
commits.commits=次代码提交
-commits.no_commits=没有共同的提交。%s 和 %s 的历史完全不同。
+commits.no_commits=没有共同的提交。「%s」和「%s」的历史完全不同。
commits.nothing_to_compare=这些分支是相同的。
-commits.search.tooltip=`您可以在关键词前加上前缀,如"author:", "committer:", "after:", 或"before:", 例如 "retrin author:Alice before:2019-01-13"`
+commits.search.tooltip=您可以在关键词前加上前缀,如「author:」、「committer:」、「after:」或「before:」,例如「retrin author:Alice before:2019-01-13」。
commits.search_branch=此分支
commits.search_all=所有分支
commits.author=作者
@@ -1419,11 +1432,11 @@ commits.view_file_diff=查看提交中的文件更改
commit.operations=操作
commit.revert=还原
-commit.revert-header=还原: %s
+commit.revert-header=还原:%s
commit.revert-content=选择要还原的分支:
-commit.cherry-pick=Cherry-pick
-commit.cherry-pick-header=Cherry-pick: %s
-commit.cherry-pick-content=选择 cherry-pick 的目标分支:
+commit.cherry-pick=拣选提交
+commit.cherry-pick-header=拣选提交:%s
+commit.cherry-pick-content=选择要拣选提交的目标分支:
commitstatus.error=错误
commitstatus.failure=失败
@@ -1440,14 +1453,14 @@ projects.create=创建项目
projects.title=标题
projects.new=创建项目
projects.new_subheader=在一个地方协调、跟踪和更新您的工作,让项目保持透明并按计划进行。
-projects.create_success=项目 %s 创建成功。
+projects.create_success=项目「%s」创建成功。
projects.deletion=删除项目
projects.deletion_desc=删除项目会从所有相关的工单中移除它。是否继续?
-projects.deletion_success=该项目已被删除。
+projects.deletion_success=该项目已删除。
projects.edit=编辑项目
projects.edit_subheader=项目用于组织工单和跟踪进展情况。
projects.modify=更新项目
-projects.edit_success=项目 %s 更新成功。
+projects.edit_success=项目「%s」更新成功。
projects.type.none=无
projects.type.basic_kanban=基础看板
projects.type.bug_triage=Bug分类看板
@@ -1461,7 +1474,7 @@ projects.column.new=创建列
projects.column.set_default=设为默认
projects.column.set_default_desc=设置此列为未分类问题和合并请求的默认值
projects.column.delete=删除列
-projects.column.deletion_desc=删除项目列会将所有相关问题移到“未分类”。是否继续?
+projects.column.deletion_desc=删除项目列会将所有相关问题移至默认列。是否继续?
projects.column.color=颜色
projects.open=开启
projects.close=关闭
@@ -1475,7 +1488,7 @@ issues.filter_assignees=筛选指派人
issues.filter_milestones=筛选里程碑
issues.filter_projects=筛选项目
issues.filter_labels=筛选标签
-issues.filter_reviewers=筛选审核者
+issues.filter_reviewers=筛选评审人
issues.filter_no_results=没有结果
issues.filter_no_results_placeholder=请尝试调整您的搜索过滤器。
issues.new=创建工单
@@ -1495,9 +1508,9 @@ issues.new.clear_milestone=取消选中里程碑
issues.new.assignees=指派成员
issues.new.clear_assignees=取消指派成员
issues.new.no_assignees=未指派成员
-issues.new.no_reviewers=无审核者
+issues.new.no_reviewers=无评审人
issues.new.blocked_user=无法创建工单,因为您已被仓库所有者屏蔽。
-issues.edit.already_changed=无法保存对工单的更改。其内容似乎已被其他用户更改。 请刷新页面并重新编辑以避免覆盖他们的更改
+issues.edit.already_changed=无法保存对工单的更改。其内容似乎已被其他用户更改。请刷新页面并重新编辑以避免覆盖他们的更改。
issues.edit.blocked_user=无法编辑内容,因为您已被仓库所有者或工单创建者屏蔽。
issues.choose.get_started=开始
issues.choose.open_external_link=开启
@@ -1506,40 +1519,40 @@ issues.choose.blank_about=从默认模板创建一个工单。
issues.choose.ignore_invalid_templates=已忽略无效模板
issues.choose.invalid_templates=发现了 %v 个无效模板
issues.choose.invalid_config=问题配置包含错误:
-issues.no_ref=分支/标记未指定
+issues.no_ref=分支 / Git 标签未指定
issues.create=创建工单
issues.new_label=创建标签
issues.new_label_placeholder=标签名称
issues.new_label_desc_placeholder=描述
issues.create_label=创建标签
issues.label_templates.title=加载预定义的标签模板
-issues.label_templates.info=还没有任何标签。您可以使用'创建标签'按钮或者加载预定义的标签集创建标签
+issues.label_templates.info=还没有任何标签。您可以使用「创建标签」按钮或者加载预定义的标签集创建标签:
issues.label_templates.helper=选择标签模板
issues.label_templates.use=使用标签集
-issues.label_templates.fail_to_load_file=加载标签模板文件 %s 时发生错误:%v
-issues.add_label=于 %[2]s 添加了标签 %[1]s
-issues.add_labels=于 %s 添加 %s 标签
-issues.remove_label=于 %[2]s 删除了标签 %[1]s
-issues.remove_labels=于 %[2]s 删除了标签 %[1]s
-issues.add_remove_labels=于 %[3]s 添加了标签 %[1]s ,删除了标签 %[2]s
-issues.add_milestone_at=`于 %[2]s 添加了里程碑 %[1]s `
-issues.add_project_at=`于 %[2]s 将此添加到 %[1]s 项目`
-issues.move_to_column_of_project=`将此对象移至 %s 的 %s 中在 %s 上`
-issues.change_milestone_at=`%[3]s 修改了里程碑从 %[1]s 到 %[2]s `
-issues.change_project_at=于 %[3]s 将此从项目 %[1]s 移到 %[2]s
-issues.remove_milestone_at=`%[2]s 删除了里程碑 %[1]s `
-issues.remove_project_at=`于 %[2]s 将此工单从项目 %[1]s 中删除`
+issues.label_templates.fail_to_load_file=加载标签模板文件「%s」时发生错误:%v
+issues.add_label=于 %[2]s 添加标签 %[1]s
+issues.add_labels=于 %[2]s 添加标签 %[1]s
+issues.remove_label=于 %[2]s 移除标签 %[1]s
+issues.remove_labels=于 %[2]s 移除标签 %[1]s
+issues.add_remove_labels=于 %[3]s 添加标签 %[1]s 移除标签 %[2]s
+issues.add_milestone_at=`于 %[2]s 添加里程碑 %[1]s `
+issues.add_project_at=`于 %[2]s 将此工单添加到 %[1]s 项目`
+issues.move_to_column_of_project=`将 %[3]s 上的 %[2]s 移至 %[1]s`
+issues.change_milestone_at=`于 %[3]s 修改里程碑从 %[1]s 到 %[2]s `
+issues.change_project_at=于 %[3]s 将项目从 %[1]s 移至 %[2]s
+issues.remove_milestone_at=`于 %[2]s 删除里程碑 %[1]s `
+issues.remove_project_at=`于 %[2]s 将此工单从项目 %[1]s 中移除`
issues.deleted_milestone=(已删除)
issues.deleted_project=`(已删除)`
issues.self_assign_at=`于 %s 指派给自己`
-issues.add_assignee_at=`于 %[2]s 被 %[1]s 指派`
-issues.remove_assignee_at=`%s 取消了指派在 %s`
-issues.remove_self_assignment=`于 %s 取消了指派`
+issues.add_assignee_at=`于 %[2]s 由 %[1]s 指派`
+issues.remove_assignee_at=`于 %[2]s 由 %[1]s 取消指派`
+issues.remove_self_assignment=`于 %s 取消指派`
issues.change_title_at=`于 %[3]s 修改标题 %[1]s 为 %[2]s `
-issues.change_ref_at=`将引用从 %s 更改为了 %s %s`
-issues.remove_ref_at=`删除了引用 %s %s`
-issues.add_ref_at=`添加了引用 %s %s`
-issues.delete_branch_at=`于 %[2]s 删除了分支 %[1]s `
+issues.change_ref_at=`于 %[3]s 修改引用 %[1]s 为 %[2]s `
+issues.remove_ref_at=`于 %[2]s 删除引用 %[1]s `
+issues.add_ref_at=`于 %[2]s 添加引用 %[1]s `
+issues.delete_branch_at=`于 %[2]s 删除分支 %[1]s `
issues.filter_label=标签筛选
issues.filter_label_exclude=`使用 alt + 鼠标左键 / 回车 排除标签`
issues.filter_label_no_select=所有标签
@@ -1565,7 +1578,7 @@ issues.filter_type.assigned_to_you=指派给您的
issues.filter_type.created_by_you=由您创建的
issues.filter_type.mentioning_you=提及您的
issues.filter_type.review_requested=已请求评审
-issues.filter_type.reviewed_by_you=您评审过的
+issues.filter_type.reviewed_by_you=您已评审的
issues.filter_sort=排序
issues.filter_sort.latest=最新创建
issues.filter_sort.oldest=最早创建
@@ -1589,11 +1602,11 @@ issues.action_assignee_no_select=未指派
issues.action_check=选中/取消选中
issues.action_check_all=选中/取消选中所有项目
issues.opened_by=由 %[3]s 于 %[1]s创建
-pulls.merged_by=由 %[3]s 创建,被合并于 %[1]s
-pulls.merged_by_fake=由 %[2]s 创建,被合并于 %[1]s
-issues.closed_by=由 %[3]s 创建,被关闭于 %[1]s
+pulls.merged_by=由 %[3]s 创建,合并于 %[1]s
+pulls.merged_by_fake=由 %[2]s 创建,合并于 %[1]s
+issues.closed_by=由 %[3]s 创建,关闭于 %[1]s
issues.opened_by_fake=由 %[2]s 于 %[1]s 打开
-issues.closed_by_fake=由 %[2]s 创建,被关闭于 %[1]s
+issues.closed_by_fake=由 %[2]s 创建,关闭于 %[1]s
issues.previous=上一页
issues.next=下一页
issues.open_title=开启中
@@ -1610,33 +1623,33 @@ issues.context.edit=编辑
issues.context.delete=刪除
issues.no_content=没有提供说明。
issues.close=关闭工单
-issues.comment_pull_merged_at=已合并提交 %[1]s 到 %[2]s %[3]s
-issues.comment_manually_pull_merged_at=手动合并提交 %[1]s 到 %[2]s %[3]s
+issues.comment_pull_merged_at=于 %[3]s 合并提交 %[1]s 到 %[2]s
+issues.comment_manually_pull_merged_at=于 %[3]s 手动合并提交 %[1]s 到 %[2]s
issues.close_comment_issue=评论并关闭
-issues.reopen_issue=重新开启
-issues.reopen_comment_issue=评论并重新开启
+issues.reopen_issue=重新打开
+issues.reopen_comment_issue=评论并重新打开
issues.create_comment=评论
issues.comment.blocked_user=无法创建或编辑评论,因为您已被仓库所有者或工单创建者屏蔽。
issues.closed_at=`于 %[2]s 关闭此工单`
-issues.reopened_at=`重新打开此问题 %[2]s `
-issues.commit_ref_at=`于 %[2]s 在代码提交中引用了该工单`
-issues.ref_issue_from=`于 %[2]s 引用了工单 %[4]s `
-issues.ref_pull_from=`于 %[2]s 引用了合并请求 %[4]s `
-issues.ref_closing_from=`于 %[2]s 引用了合并请求 %[4]s 将关闭此工单 `
-issues.ref_reopening_from=`于 %[2]s 引用了合并请求 %[4]s 将重新讨论此工单 `
-issues.ref_closed_from=`关闭了这个工单 %[4]s %[2]s `
-issues.ref_reopened_from=`重新打开这个工单 %[4]s %[2]s `
+issues.reopened_at=`于 %[2]s 重新打开此工单`
+issues.commit_ref_at=`于 %[2]s 在代码提交中引用该工单`
+issues.ref_issue_from=`于 %[2]s 引用工单 %[4]s `
+issues.ref_pull_from=`于 %[2]s 引用合并请求 %[4]s `
+issues.ref_closing_from=`于 %[2]s 引用合并请求 %[4]s 将关闭此工单 `
+issues.ref_reopening_from=`于 %[2]s 引用合并请求 %[4]s 将重新打开此工单 `
+issues.ref_closed_from=`关闭此工单 %[4]s %[2]s `
+issues.ref_reopened_from=`重新打开此工单 %[4]s %[2]s `
issues.ref_from=`来自 %[1]s`
issues.author=作者
issues.author_helper=此用户是作者。
issues.role.owner=所有者
-issues.role.owner_helper=该用户是该仓库的所有者。
+issues.role.owner_helper=该用户是此仓库的所有者。
issues.role.member=成员
-issues.role.member_helper=该用户是拥有该仓库的组织成员。
+issues.role.member_helper=该用户是拥有此仓库的组织的成员。
issues.role.collaborator=协作者
issues.role.collaborator_helper=该用户已被邀请在仓库上进行协作。
issues.role.first_time_contributor=首次贡献者
-issues.role.first_time_contributor_helper=这是该用户对仓库的第一次贡献。
+issues.role.first_time_contributor_helper=这是该用户对此仓库的第一次贡献。
issues.role.contributor=贡献者
issues.role.contributor_helper=该用户之前提交过该仓库。
issues.re_request_review=再次请求审核
@@ -1650,42 +1663,43 @@ issues.edit=编辑
issues.cancel=取消
issues.save=保存
issues.label_title=标签名称
-issues.label_description=标签描述
-issues.label_color=标签颜色
-issues.label_exclusive=互斥标签
+issues.label_description=描述
+issues.label_color=颜色
+issues.label_color_invalid=无效的颜色
+issues.label_exclusive=互斥
issues.label_archive=归档标签
-issues.label_archived_filter=显示存档标签
-issues.label_archive_tooltip=在标签搜索时,默认情况下存档标签将被排除在外。
+issues.label_archived_filter=显示已归档标签
+issues.label_archive_tooltip=在标签搜索时,默认情况下已归档标签将被排除在外。
issues.label_exclusive_desc=命名标签为 scope/item 以使其与其他以 scope/ 开头的标签互斥。
issues.label_exclusive_warning=在编辑工单或合并请求的标签时,任何冲突的范围标签都将被删除。
issues.label_exclusive_order=排序顺序
issues.label_exclusive_order_tooltip=在同一个范围内的互斥标签将按照这个数字进行排序
issues.label_count=%d 个标签
-issues.label_open_issues=%d 个开启的工单
+issues.label_open_issues=%d 个开启中工单 / 合并请求
issues.label_edit=编辑
issues.label_delete=删除
issues.label_modify=编辑标签
issues.label_deletion=删除标签
issues.label_deletion_desc=删除标签会将其从所有问题中删除。继续?
-issues.label_deletion_success=该标签已被删除。
+issues.label_deletion_success=该标签已删除。
issues.label.filter_sort.alphabetically=按字母顺序排序
issues.label.filter_sort.reverse_alphabetically=按字母逆序排序
issues.label.filter_sort.by_size=最小尺寸
issues.label.filter_sort.reverse_by_size=最大尺寸
issues.num_participants=%d 名参与者
-issues.attachment.open_tab=`在新的标签页中查看 '%s'`
-issues.attachment.download=`点击下载 '%s'`
+issues.attachment.open_tab=`在新的标签页中查看「%s」`
+issues.attachment.download=`点击下载「%s」`
issues.subscribe=订阅
issues.unsubscribe=取消订阅
issues.unpin=取消置顶
issues.max_pinned=您不能置顶更多工单
-issues.pin_comment=于 %s 被置顶
+issues.pin_comment=于 %s 置顶
issues.unpin_comment=于 %s 取消置顶
issues.lock=锁定对话
issues.unlock=解锁对话
-issues.lock_duplicate=一个工单不能被锁定两次。
+issues.lock_duplicate=一个工单不能锁定两次。
issues.unlock_error=无法解锁一个未锁定的工单。
-issues.lock_with_reason=因为 %s 而锁定,并将对话限制为协作者 %s
+issues.lock_with_reason=于 %s 锁定为 %s ,并将对话限制为协作者
issues.lock_no_reason=锁定并限制仅协作者 %s
issues.unlock_comment=解锁此对话 %s
issues.lock_confirm=锁定
@@ -1694,10 +1708,10 @@ issues.lock.notice_1=- 其他用户不能对这个工单添加新的评论。
issues.lock.notice_2=- 您和仓库其他协作者仍可评论并可见。
issues.lock.notice_3=- 您可以在未来再次解锁这个工单。
issues.unlock.notice_1=- 每个人都可以再次就这一工单发表评论。
-issues.unlock.notice_2=- 您可以在未来再次解锁这个工单。
+issues.unlock.notice_2=- 您可以在未来再次锁定这个工单。
issues.lock.reason=锁定原因
-issues.lock.title=锁定有关此问题的对话。
-issues.unlock.title=解锁有关此问题的对话。
+issues.lock.title=锁定有关此工单的对话。
+issues.unlock.title=解锁有关此工单的对话。
issues.comment_on_locked=您不能对锁定的问题发表评论。
issues.delete=删除
issues.delete.title=是否删除工单?
@@ -1710,90 +1724,92 @@ issues.timetracker_timer_discard=删除计时器
issues.timetracker_timer_manually_add=添加时间
issues.time_estimate_set=设置预计时间
-issues.time_estimate_display=预计: %s
+issues.time_estimate_display=预估:%s
issues.change_time_estimate_at=预估时间已修改为 %[1]s %[2]s
-issues.remove_time_estimate_at=删除预计时间 %s
+issues.remove_time_estimate_at=删除预估时间 %s
issues.time_estimate_invalid=预计时间格式无效
issues.start_tracking_history=`开始工作 %s`
issues.tracker_auto_close=当此工单关闭时,自动停止计时器
-issues.tracking_already_started=`你已经开始对 另一个工单 进行时间跟踪!`
+issues.stopwatch_already_stopped=此工单的计时器已经停止
+issues.stopwatch_already_created=此工单的计时器已经存在
+issues.tracking_already_started=`您已经开始对 另一个工单 进行时间跟踪!`
issues.stop_tracking=停止计时器
issues.stop_tracking_history=工作 %[1]s 于 %[2]s 停止
issues.cancel_tracking=取消
issues.cancel_tracking_history=`取消时间跟踪 %s`
issues.del_time=删除此时间跟踪日志
-issues.add_time_history=已于 %[2]s 添加计时 %[1]
+issues.add_time_history=于 %[2]s 添加计时 %[1]
issues.del_time_history=`已删除时间 %s`
issues.add_time_manually=手动添加时间
issues.add_time_hours=小时
issues.add_time_minutes=分钟
issues.add_time_sum_to_small=没有输入时间。
issues.time_spent_total=总用时
-issues.time_spent_from_all_authors=`总花费时间:%s`
+issues.time_spent_from_all_authors=`总用时:%s`
-issues.due_date=到期时间
-issues.invalid_due_date_format=到期时间的格式必须是 'yyyy-mm-dd' 的形式。
-issues.error_modifying_due_date=修改到期时间失败。
-issues.error_removing_due_date=删除到期时间失败。
-issues.push_commit_1=于 %[2]s 推送了 %[1]d 个提交
-issues.push_commits_n=于 %[2]s 推送了 %[1]d 个提交
-issues.force_push_codes=`于 %[6]s 强制推送 %[1]s,从 %[2]s ,至 %[4]s `
+issues.due_date=截止日期
+issues.invalid_due_date_format=截止日期的格式必须是「yyyy-mm-dd」的形式。
+issues.error_modifying_due_date=修改截止日期失败。
+issues.error_removing_due_date=删除截止日期失败。
+issues.push_commit_1=于 %[2]s 推送 %[1]d 个提交
+issues.push_commits_n=于 %[2]s 推送 %[1]d 个提交
+issues.force_push_codes=`于 %[6]s 强制推送 %[1]s,从 %[2]s 至 %[4]s `
issues.force_push_compare=比较
issues.due_date_form=yyyy年mm月dd日
-issues.due_date_form_add=设置到期时间
+issues.due_date_form_add=设置截止日期
issues.due_date_form_edit=编辑
issues.due_date_form_remove=删除
-issues.due_date_not_writer=您需要该仓库的写权限才能更新工单的到期日期。
-issues.due_date_not_set=未设置到期时间。
-issues.due_date_added=于 %[2]s 设置到期时间为 %[1]s
-issues.due_date_modified=将到期日从 %[2]s 修改为 %[1]s %[3]s
-issues.due_date_remove=于 %[2]s 删除了到期时间 %[1]s
+issues.due_date_not_writer=您需要该仓库的写权限以更新工单的截止日期。
+issues.due_date_not_set=未设置截止日期。
+issues.due_date_added=于 %[2]s 设置截止日期为 %[1]s
+issues.due_date_modified=于 %[3]s 将截止日期从 %[2]s 修改为 %[1]s
+issues.due_date_remove=于 %[2]s 删除截止日期 %[1]s
issues.due_date_overdue=过期
-issues.due_date_invalid=到期日期无效或超出范围。请使用 'yyyy-mm-dd' 格式。
+issues.due_date_invalid=截止日期无效或超出范围。请使用「yyyy-mm-dd」格式。
issues.dependency.title=依赖工单
-issues.dependency.issue_no_dependencies=没有设置依赖项。
-issues.dependency.pr_no_dependencies=没有设置依赖项。
+issues.dependency.issue_no_dependencies=未设置依赖工单。
+issues.dependency.pr_no_dependencies=未设置依赖工单。
issues.dependency.no_permission_1=您没有读取 %d 依赖关系的权限
issues.dependency.no_permission_n=您没有读取 %d 依赖关系的权限
issues.dependency.no_permission.can_remove=您没有读取此依赖关系的权限,但可以删除此依赖关系
-issues.dependency.add=添加依赖工单...
+issues.dependency.add=添加依赖工单…
issues.dependency.cancel=取消
issues.dependency.remove=删除
issues.dependency.remove_info=删除此依赖项
-issues.dependency.added_dependency=`添加了一个新的依赖项 %s`
+issues.dependency.added_dependency=`添加了一个新依赖项 %s`
issues.dependency.removed_dependency=`移除了一个依赖项 %s`
-issues.dependency.pr_closing_blockedby=以下工单阻止了关闭此合并请求
+issues.dependency.pr_closing_blockedby=以下工单阻止关闭此合并请求
issues.dependency.issue_closing_blockedby=关闭此工单被以下工单阻止
-issues.dependency.issue_close_blocks=此工单阻止了以下工单的关闭
+issues.dependency.issue_close_blocks=此工单阻止以下工单的关闭
issues.dependency.pr_close_blocks=此合并请求阻止以下工单的关闭
-issues.dependency.issue_close_blocked=您需要关闭所有阻止此工单的工单, 然后才能关闭它。
+issues.dependency.issue_close_blocked=您需要关闭所有阻止此工单的工单后才能关闭它。
issues.dependency.issue_batch_close_blocked=无法批量关闭您所选择的工单,因为 #%d 工单仍然有处于打开状态的依赖工单
-issues.dependency.pr_close_blocked=您需要关闭所有阻止此合并请求的工单, 然后才能合并它。
+issues.dependency.pr_close_blocked=您需要关闭所有阻止此合并请求的工单后才能合并它。
issues.dependency.blocks_short=阻止
issues.dependency.blocked_by_short=依赖于
issues.dependency.remove_header=删除依赖项
-issues.dependency.issue_remove_text=此操作将从工单中删除依赖。是否要继续?
-issues.dependency.pr_remove_text=此操作将从合并请求中删除依赖。是否要继续?
+issues.dependency.issue_remove_text=此操作将从工单中删除依赖。是否要继续?
+issues.dependency.pr_remove_text=此操作将从合并请求中删除依赖。是否要继续?
issues.dependency.setting=为工单和合并请求启用依赖
-issues.dependency.add_error_same_issue=你不能让一个工单依赖于自己。
+issues.dependency.add_error_same_issue=您不能让一个工单依赖于自身。
issues.dependency.add_error_dep_issue_not_exist=依赖项不存在。
issues.dependency.add_error_dep_not_exist=依赖项不存在。
issues.dependency.add_error_dep_exists=依赖项已存在。
-issues.dependency.add_error_cannot_create_circular=您不能创建依赖, 使得两个工单相互阻止。
+issues.dependency.add_error_cannot_create_circular=您无法在相互阻塞的工单之间建立依赖关系。
issues.dependency.add_error_dep_not_same_repo=这两个工单必须在同一仓库。
issues.review.self.approval=您不能批准您自己的合并请求。
issues.review.self.rejection=您不能请求对您自己的合并请求进行更改。
issues.review.approve=于 %s 批准此合并请求
-issues.review.comment=评审于 %s
-issues.review.dismissed=于 %[2]s 取消了 %[1]s 的评审
+issues.review.comment=于 %s 评审
+issues.review.dismissed=于 %[2]s 取消 %[1]s 的评审
issues.review.dismissed_label=已取消
issues.review.left_comment=留下了一条评论
issues.review.content.empty=您需要留下一个注释,表明需要的更改。
issues.review.reject=请求变更 %s
-issues.review.wait=已请求 %s 审核
+issues.review.wait=已请求 %s 评审
issues.review.add_review_request=于 %[2]s 请求 %[1]s 评审
issues.review.remove_review_request=取消对 %s 的评审请求 %s
-issues.review.remove_review_request_self=拒绝审核 %s
+issues.review.remove_review_request_self=拒绝评审 %s
issues.review.pending=待定
issues.review.pending.tooltip=此评论目前对其他用户不可见。 若要提交您的待定评论,请在页面顶部选择 %s -> %s/%s/%s。
issues.review.review=评审
@@ -1817,13 +1833,13 @@ issues.review.stale=批准后已更新
issues.review.unofficial=非官方审批数
issues.assignee.error=因为未知原因,并非所有的指派都成功。
issues.reference_issue.body=内容
-issues.content_history.deleted=删除于
-issues.content_history.edited=最后编辑于
-issues.content_history.created=创建于
+issues.content_history.deleted=已删除
+issues.content_history.edited=已编辑
+issues.content_history.created=已创建
issues.content_history.delete_from_history=从历史记录中删除
issues.content_history.delete_from_history_confirm=从历史记录中删除吗?
issues.content_history.options=选项
-issues.reference_link=参考:%s
+issues.reference_link=引用:%s
compare.compare_base=基准分支
compare.compare_head=比较
@@ -1832,7 +1848,7 @@ pulls.desc=启用合并请求和代码评审。
pulls.new=创建合并请求
pulls.new.blocked_user=无法创建合并请求,因为您已被仓库所有者屏蔽。
pulls.new.must_collaborator=您必须是仓库的协作者才能创建合并请求。
-pulls.edit.already_changed=无法保存对合并请求的更改。其内容似乎已被其他用户更改。 请刷新页面并重新编辑以避免覆盖他们的更改
+pulls.edit.already_changed=无法保存对合并请求的更改。其内容似乎已被其他用户更改。请刷新页面并重新编辑以避免覆盖他们的更改。
pulls.view=查看合并请求
pulls.compare_changes=创建合并请求
pulls.allow_edits_from_maintainers=允许维护者编辑
@@ -1852,14 +1868,14 @@ pulls.filter_branch=过滤分支
pulls.show_all_commits=显示所有提交
pulls.show_changes_since_your_last_review=显示自您上次审核以来的更改
pulls.showing_only_single_commit=仅显示提交 %[1]s 的更改
-pulls.showing_specified_commit_range=仅显示 %[1]s...%[2]s 之间的更改
+pulls.showing_specified_commit_range=仅显示 %[1]s..%[2]s 之间的更改
pulls.select_commit_hold_shift_for_range=选择提交。按住 Shift + 单击选择一个范围
pulls.review_only_possible_for_full_diff=只有在查看全部差异时才能进行审核
pulls.filter_changes_by_commit=按提交筛选
pulls.nothing_to_compare=分支内容相同,无需创建合并请求。
-pulls.nothing_to_compare_have_tag=所选分支/标签相同。
+pulls.nothing_to_compare_have_tag=所选分支 / Git 标签相同。
pulls.nothing_to_compare_and_allow_empty_pr=这些分支是相等的,此合并请求将为空。
-pulls.has_pull_request=这些分支之间的合并请求已存在: %[2]s#%[3]d
+pulls.has_pull_request=这些分支之间的合并请求已存在:%[2]s#%[3]d
pulls.create=创建合并请求
pulls.title_desc=请求将 %[1]d 次代码提交从 %[2]s 合并至 %[3]s
pulls.merged_title_desc=于 %[4]s 将 %[1]d 次代码提交从 %[2]s合并至 %[3]s
@@ -1870,11 +1886,11 @@ pulls.tab_files=文件变动
pulls.reopen_to_merge=请重新创建此合并请求。
pulls.cant_reopen_deleted_branch=无法重新打开此合并请求,因为分支已删除。
pulls.merged=已合并
-pulls.merged_success=合并请求已成功合并和关闭
+pulls.merged_success=合并请求已成功合并并关闭
pulls.closed=合并请求已关闭
pulls.manually_merged=已手动合并
-pulls.merged_info_text=分支 %s 现在可以被删除了。
-pulls.is_closed=合并请求已经关闭。
+pulls.merged_info_text=分支 %s 现在可以删除了。
+pulls.is_closed=合并请求已关闭。
pulls.title_wip_desc=`标题以 %s 开头 以免合并请求意外合并。`
pulls.cannot_merge_work_in_progress=此合并请求被标记为正在进行的工作。
pulls.still_in_progress=仍在进行中?
@@ -1882,14 +1898,14 @@ pulls.add_prefix=添加 %s 前缀
pulls.remove_prefix=删除 %s 前缀
pulls.data_broken=此合并请求因为派生仓库信息缺失而中断。
pulls.files_conflicted=此合并请求有变更与目标分支冲突。
-pulls.is_checking=正在进行合并冲突检测 ...
+pulls.is_checking=正在进行合并冲突检查…
pulls.is_ancestor=此分支已经包含在目标分支中,没有什么可以合并。
pulls.is_empty=此分支上的更改已经在目标分支上。这将是一个空提交。
pulls.required_status_check_failed=一些必要的检查没有成功
pulls.required_status_check_missing=缺少一些必要的检查。
pulls.required_status_check_administrator=作为管理员,您仍可合并此合并请求
pulls.blocked_by_approvals=此合并请求还没有足够的批准。已获批准数 %d 个,需获批准数 %d 个。
-pulls.blocked_by_approvals_whitelisted=此合并请求还没有足够的批准。%[2]d 中的 %[1]d 个已由允许名单中的用户或团队批准。
+pulls.blocked_by_approvals_whitelisted=此合并请求尚未获得足够的批准。已获得 %d/%d 个来自允许列表中用户或团队的批准。
pulls.blocked_by_rejection=此合并请求有官方审核员请求的更改。
pulls.blocked_by_official_review_requests=此合并请求需要官方评审。
pulls.blocked_by_outdated_branch=此合并请求因过期而被阻止。
@@ -1906,9 +1922,9 @@ pulls.reject_count_1=%d 变更请求
pulls.reject_count_n=%d 变更请求
pulls.waiting_count_1=%d 个正在等待审核
pulls.waiting_count_n=%d 个正在等待审核
-pulls.wrong_commit_id=提交 id 必须在目标分支 上
+pulls.wrong_commit_id=提交 id 必须在目标分支上
-pulls.no_merge_desc=由于未启用合并选项,此合并请求无法被合并。
+pulls.no_merge_desc=由于未启用合并选项,此合并请求无法合并。
pulls.no_merge_helper=在仓库设置中启用合并选项或者手工合并请求。
pulls.no_merge_wip=这个合并请求无法合并,因为被标记为尚未完成的工作。
pulls.no_merge_not_ready=此合并请求尚未准备好合并,请检查审核状态和状态检查。
@@ -1922,21 +1938,21 @@ pulls.merge_manually=手动合并
pulls.merge_commit_id=合并提交 ID
pulls.require_signed_wont_sign=分支需要签名的提交,但这个合并将不会被签名
-pulls.invalid_merge_option=你可以在此合并请求中使用合并选项。
-pulls.merge_conflict=合并失败:合并时有冲突发生。提示:采用其它合并策略
+pulls.invalid_merge_option=您可以在此合并请求中使用合并选项。
+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.unrelated_histories=合并失败:两个分支没有共同历史。提示:尝试不同的策略。
pulls.merge_out_of_date=合并失败:在生成合并时,主分支已更新。提示:再试一次。
pulls.head_out_of_date=合并失败:在生成合并时,head 已更新。提示:再试一次。
-pulls.has_merged=失败:合并请求已经被合并,您不能再次合并或更改目标分支。
+pulls.has_merged=失败:合并请求已经合并。您不能再次合并或更改目标分支。
pulls.push_rejected=推送失败:推送被拒绝。审查此仓库的 Git 钩子。
pulls.push_rejected_summary=详细拒绝信息
pulls.push_rejected_no_message=推送失败:此推送被拒绝但未提供其他信息。请检查此仓库的 Git 钩子。
-pulls.open_unmerged_pull_exists=`您不能执行重新打开操作, 因为已经存在相同的合并请求 (#%d)。`
-pulls.status_checking=一些检测仍在等待运行
-pulls.status_checks_success=所有检测均成功
+pulls.open_unmerged_pull_exists=`您不能执行重新打开操作,因为已经存在相同的合并请求 (#%d)。`
+pulls.status_checking=一些检查仍在等待运行
+pulls.status_checks_success=所有检查均成功
pulls.status_checks_warning=一些检查报告了警告
pulls.status_checks_failure=一些检查失败了
pulls.status_checks_error=一些检查报告了错误
@@ -1951,15 +1967,15 @@ pulls.update_not_allowed=您无权更新分支
pulls.outdated_with_base_branch=此分支相比基础分支已过期
pulls.close=关闭合并请求
pulls.closed_at=`于 %[2]s 关闭此合并请求 `
-pulls.reopened_at=`重新打开此合并请求 %[2]s `
+pulls.reopened_at=`于 %[2]s 重新打开此合并请求`
pulls.cmd_instruction_hint=查看命令行提示
pulls.cmd_instruction_checkout_title=检出
-pulls.cmd_instruction_checkout_desc=从你的仓库中检出一个新的分支并测试变更。
+pulls.cmd_instruction_checkout_desc=从您的仓库中检出一个新的分支并测试变更。
pulls.cmd_instruction_merge_title=合并
pulls.cmd_instruction_merge_desc=合并变更并更新到 Gitea 上
-pulls.cmd_instruction_merge_warning=警告:此操作不能合并该合并请求,因为“自动检测手动合并”未启用
+pulls.cmd_instruction_merge_warning=警告:此操作不能合并该合并请求,因为「自动检查手动合并」未启用。
pulls.clear_merge_message=清除合并信息
-pulls.clear_merge_message_hint=清除合并消息只会删除提交消息内容,并保留生成的 git 附加内容,如“Co-Authored-By …”。
+pulls.clear_merge_message_hint=清除合并消息只会删除提交消息内容,并保留生成的 Git 附加内容,如「Co-Authored-By…」。
pulls.auto_merge_button_when_succeed=(当检查成功时)
pulls.auto_merge_when_succeed=在所有检查成功后自动合并
@@ -1971,19 +1987,19 @@ 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.auto_merge_canceled_schedule_comment=`已于 %[1]s 取消自动合并设置 `
pulls.delete.title=删除此合并请求?
-pulls.delete.text=你真的要删除这个合并请求吗? (这将永久删除所有内容。如果你打算将内容存档,请考虑关闭它)
+pulls.delete.text=您真的要删除这个合并请求吗?(这将永久删除所有内容。如果您打算将内容存档,请考虑关闭它)
-pulls.recently_pushed_new_branches=您已经于%[2]s推送了分支 %[1]s
+pulls.recently_pushed_new_branches=您已经于 %[2]s 推送分支 %[1]s
pulls.upstream_diverging_prompt_behind_1=该分支落后于 %[2]s %[1]d 个提交
pulls.upstream_diverging_prompt_behind_n=该分支落后于 %[2]s %[1]d 个提交
pulls.upstream_diverging_prompt_base_newer=基础分支 %s 有新的更改
pulls.upstream_diverging_merge=同步派生
pulls.upstream_diverging_merge_confirm=要将 %[1]s 合并到 %[2]s 吗?
-pull.deleted_branch=(已删除): %s
+pull.deleted_branch=(已删除):%s
pull.agit_documentation=查看有关 AGit 的文档
comments.edit.already_changed=无法保存对评论的更改。其内容似乎已被其他用户更改。 请刷新页面并重新编辑以避免覆盖他们的更改
@@ -1992,7 +2008,7 @@ milestones.new=新的里程碑
milestones.closed=于 %s关闭
milestones.update_ago=已更新 %s
milestones.no_due_date=暂无截止日期
-milestones.open=开启
+milestones.open=打开
milestones.close=关闭
milestones.new_subheader=里程碑可以帮助您组织工单并跟踪其进度。
milestones.completeness=%d%% 已完成
@@ -2001,16 +2017,16 @@ milestones.title=标题
milestones.desc=描述
milestones.due_date=截止日期(可选)
milestones.clear=清除
-milestones.invalid_due_date_format=到期时间的格式必须是 'yyyy-mm-dd' 的形式。
-milestones.create_success=里程碑 %s 创建成功。
+milestones.invalid_due_date_format=截止日期的格式必须是「yyyy-mm-dd」的形式。
+milestones.create_success=里程碑「%s」创建成功。
milestones.edit=编辑里程碑
milestones.edit_subheader=里程碑组织工单,合并请求和跟踪进度。
milestones.cancel=取消
milestones.modify=更新里程碑
-milestones.edit_success=里程碑 %s 已经更新。
+milestones.edit_success=里程碑「%s」更新成功。
milestones.deletion=删除里程碑
milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
-milestones.deletion_success=里程碑已被删除。
+milestones.deletion_success=里程碑已删除。
milestones.filter_sort.name=名称
milestones.filter_sort.earliest_due_data=到期日从远到近
milestones.filter_sort.latest_due_date=到期日从近到远
@@ -2019,7 +2035,7 @@ milestones.filter_sort.most_complete=完成度从高到低
milestones.filter_sort.most_issues=工单从多到少
milestones.filter_sort.least_issues=工单从少到多
-signing.will_sign=这个提交将用密钥 "%s" 签名。
+signing.will_sign=这个提交将用密钥「%s」签名。
signing.wont_sign.error=在检查提交是否可以被签名时出错。
signing.wont_sign.nokey=没有可用的密钥来签署这个提交。
signing.wont_sign.never=提交从未签名。
@@ -2034,11 +2050,11 @@ signing.wont_sign.approved=合并将不会被签名,因为合并请求未被
signing.wont_sign.not_signed_in=您还没有登录。
ext_wiki=访问外部百科
-ext_wiki.desc=链接到外部 wiki。
+ext_wiki.desc=链接到外部百科。
wiki=百科
-wiki.welcome=欢迎来到百科!
-wiki.welcome_desc=百科允许你撰写和与协作者分享文档
+wiki.welcome=欢迎来到百科。
+wiki.welcome_desc=百科允许您撰写并与协作者分享文档。
wiki.desc=撰写和与协作者分享文档
wiki.create_first_page=创建第一个页面
wiki.page=页面
@@ -2055,95 +2071,95 @@ wiki.file_revision=页面历史
wiki.wiki_page_revisions=页面历史
wiki.back_to_wiki=返回百科
wiki.delete_page_button=删除页面
-wiki.delete_page_notice_1=百科页面 %s 删除后无法恢复,是否继续?
-wiki.page_already_exists=相同名称的 Wiki 页面已经存在。
-wiki.reserved_page=百科页面名称 %s 是被保留的。
+wiki.delete_page_notice_1=百科页面「%s」删除后无法恢复,是否继续?
+wiki.page_already_exists=相同名称的百科页面已经存在。
+wiki.reserved_page=百科页面名称「%s」是保留的。
wiki.pages=所有页面
wiki.last_updated=最后更新于 %s
-wiki.page_name_desc=输入此 Wiki 页面的名称。特殊名称有:'Home', '_Sidebar' 和 '_Footer'。
+wiki.page_name_desc=输入此百科页面的名称。特殊名称有:「Home」、「_Sidebar」和「_Footer」。
wiki.original_git_entry_tooltip=查看原始的 Git 文件而不是使用友好链接。
-activity=动态
+activity=活动
activity.navbar.pulse=活动
activity.navbar.code_frequency=代码频率
activity.navbar.contributors=贡献者
-activity.navbar.recent_commits=最近的提交
+activity.navbar.recent_commits=最近提交
activity.period.filter_label=周期:
activity.period.daily=1 天
activity.period.halfweekly=3 天
-activity.period.weekly=1周
-activity.period.monthly=1 个月
-activity.period.quarterly=3个月
-activity.period.semiyearly=6 个月
-activity.period.yearly=1年
+activity.period.weekly=1 周
+activity.period.monthly=1 月
+activity.period.quarterly=3 月
+activity.period.semiyearly=6 月
+activity.period.yearly=1 年
activity.overview=概览
-activity.active_prs_count_1=%d 合并请求
-activity.active_prs_count_n=%d 合并请求
-activity.merged_prs_count_1=合并请求
-activity.merged_prs_count_n=合并请求
-activity.opened_prs_count_1=新合并请求
-activity.opened_prs_count_n=新合并请求
-activity.title.user_1=%d 用户
-activity.title.user_n=%d 用户
-activity.title.prs_1=%d 合并请求
-activity.title.prs_n=%d 合并请求
-activity.title.prs_merged_by=%[2]s 由 %[1]s 合并
+activity.active_prs_count_1=%d 个合并请求
+activity.active_prs_count_n=%d 个合并请求
+activity.merged_prs_count_1=已合并的合并请求
+activity.merged_prs_count_n=已合并的合并请求
+activity.opened_prs_count_1=已创建的合并请求
+activity.opened_prs_count_n=已创建的合并请求
+activity.title.user_1=%d 位用户
+activity.title.user_n=%d 位用户
+activity.title.prs_1=%d 个合并请求
+activity.title.prs_n=%d 个合并请求
+activity.title.prs_merged_by=%[2]s 合并了 %[1]s
activity.title.prs_opened_by=%[2]s 创建了 %[1]s
activity.merged_prs_label=已合并
activity.opened_prs_label=已创建
-activity.active_issues_count_1=%d 工单
-activity.active_issues_count_n=%d 工单
+activity.active_issues_count_1=%d 张工单
+activity.active_issues_count_n=%d 张工单
activity.closed_issues_count_1=已关闭的工单
activity.closed_issues_count_n=已关闭的工单
-activity.title.issues_1=%d 工单
-activity.title.issues_n=%d 工单
-activity.title.issues_closed_from=%s 从 %s 被关闭
+activity.title.issues_1=%d 张工单
+activity.title.issues_n=%d 张工单
+activity.title.issues_closed_from=%[2]s 关闭了 %[1]s
activity.title.issues_created_by=%[2]s 创建了 %[1]s
activity.closed_issue_label=已关闭
-activity.new_issues_count_1=创建工单
-activity.new_issues_count_n=创建工单
+activity.new_issues_count_1=开启的工单
+activity.new_issues_count_n=已打开的工单
activity.new_issue_label=打开的
activity.title.unresolved_conv_1=%d 未解决的会话
activity.title.unresolved_conv_n=%d 未解决的会话
activity.unresolved_conv_desc=这些最近更新的工单和合并请求还没有解决。
activity.unresolved_conv_label=打开
-activity.title.releases_1=%d 版本发布
-activity.title.releases_n=%d 版本发布
+activity.title.releases_1=%d 个版本
+activity.title.releases_n=%d 个版本
activity.title.releases_published_by=%[2]s 发布了 %[1]s
activity.published_release_label=已发布
activity.no_git_activity=在此期间没有任何提交活动。
-activity.git_stats_exclude_merges=排除合并,
-activity.git_stats_author_1=%d 作者
-activity.git_stats_author_n=%d 作者
-activity.git_stats_pushed_1=已经推送
-activity.git_stats_pushed_n=已经推送
-activity.git_stats_commit_1=%d 提交
-activity.git_stats_commit_n=%d 提交
+activity.git_stats_exclude_merges=排除合并后,
+activity.git_stats_author_1=%d 位作者
+activity.git_stats_author_n=%d 位作者
+activity.git_stats_pushed_1=已推送
+activity.git_stats_pushed_n=已推送
+activity.git_stats_commit_1=%d 次提交
+activity.git_stats_commit_n=%d 次提交
activity.git_stats_push_to_branch=到 %s 和
activity.git_stats_push_to_all_branches=到所有分支。
activity.git_stats_on_default_branch=在 %s 上,
-activity.git_stats_file_1=%d 文件
-activity.git_stats_file_n=%d 文件
-activity.git_stats_files_changed_1=已经改变
-activity.git_stats_files_changed_n=已经改变
-activity.git_stats_additions=而且
-activity.git_stats_addition_1=新增 %d 行
-activity.git_stats_addition_n=新增 %d 行
+activity.git_stats_file_1=%d 个文件
+activity.git_stats_file_n=%d 个文件
+activity.git_stats_files_changed_1=已修改
+activity.git_stats_files_changed_n=已修改
+activity.git_stats_additions=并且已有
+activity.git_stats_addition_1=%d 行新增
+activity.git_stats_addition_n=%d 行新增
activity.git_stats_and_deletions=和
-activity.git_stats_deletion_1=删除 %d 行
-activity.git_stats_deletion_n=删除 %d 行
+activity.git_stats_deletion_1=%d 行删除
+activity.git_stats_deletion_n=%d 行删除
contributors.contribution_type.filter_label=贡献类型:
contributors.contribution_type.commits=提交
-contributors.contribution_type.additions=更多
+contributors.contribution_type.additions=新增
contributors.contribution_type.deletions=删除
settings=设置
-settings.desc=设置是你可以管理仓库设置的地方
+settings.desc=设置是您可以管理仓库设置的地方。
settings.options=仓库
settings.public_access=公开访问
-settings.public_access_desc=配置公共访客访问权限以覆盖此存储库的默认值。
-settings.public_access.docs.not_set=未设置:没有额外的公共访问权限。访客权限遵循存储库的可见性和成员权限。
+settings.public_access_desc=配置公共访客访问权限以覆盖此仓库的默认值。
+settings.public_access.docs.not_set=未设置:没有额外的公共访问权限。访客权限遵循仓库的可见性和成员权限。
settings.public_access.docs.anonymous_read=匿名可读:未登录的用户可以通过读取权限访问单元。
settings.public_access.docs.everyone_read=所有人可读:所有登录用户都可以通过读取权限访问单元。读取问题/拉取请求单元的权限也意味着用户可以创建新的问题/拉取请求。
settings.public_access.docs.everyone_write=所有人可写:所有登录用户都有写入权限。只有百科支持此权限。
@@ -2153,21 +2169,22 @@ settings.collaboration.write=可写权限
settings.collaboration.read=可读权限
settings.collaboration.owner=所有者
settings.collaboration.undefined=未定义
+settings.collaboration.per_unit=单元权限
settings.hooks=Web 钩子
settings.githooks=管理 Git 钩子
settings.basic_settings=基本设置
settings.mirror_settings=镜像设置
-settings.mirror_settings.docs=设置您的仓库以自动同步另一个仓库的提交、标签和分支。
-settings.mirror_settings.docs.disabled_pull_mirror.instructions=设置您的项目以自动将提交、标签和分支推送到另一个仓库。您的站点管理员已禁用了拉取镜像。
-settings.mirror_settings.docs.disabled_push_mirror.instructions=将您的项目设置为自动从一个仓库拉取提交、标签和分支。
-settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=现在,这只能在“迁移外部仓库”菜单中完成。欲了解更多信息,请咨询:
+settings.mirror_settings.docs=将您的仓库设置为自动同步另一个仓库的提交、Git 标签和分支。
+settings.mirror_settings.docs.disabled_pull_mirror.instructions=将您的项目设置为自动将提交、Git 标签和分支推送到另一个仓库。您的站点管理员已禁用了拉取镜像。
+settings.mirror_settings.docs.disabled_push_mirror.instructions=将您的项目设置为自动从一个仓库拉取提交、Git 标签和分支。
+settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=现在,这只能在「迁移外部仓库」菜单中完成。欲了解更多信息,请参考:
settings.mirror_settings.docs.disabled_push_mirror.info=您的站点管理员已禁用推送镜像。
-settings.mirror_settings.docs.no_new_mirrors=您的仓库将镜像同步另一个仓库的更改。请注意,您现在不能创建任何新的镜像。
+settings.mirror_settings.docs.no_new_mirrors=您的仓库将镜像同步另一个仓库的更改。请注意,您目前无法创建任何新的镜像。
settings.mirror_settings.docs.can_still_use=虽然您不能修改现有镜像或创建新镜像,但您仍然可以使用已存在的镜像。
settings.mirror_settings.docs.pull_mirror_instructions=要创建一个拉取镜像,请参阅:
settings.mirror_settings.docs.more_information_if_disabled=您可以在这里找到更多关于推送和拉取镜像的信息:
settings.mirror_settings.docs.doc_link_title=如何镜像仓库?
-settings.mirror_settings.docs.doc_link_pull_section=文档中的 “从远程仓库拉取” 部分。
+settings.mirror_settings.docs.doc_link_pull_section=文档中的「从远程仓库拉取」部分。
settings.mirror_settings.docs.pulling_remote_title=从远程仓库拉取代码
settings.mirror_settings.mirrored_repository=镜像库
settings.mirror_settings.pushed_repository=推送仓库
@@ -2195,40 +2212,40 @@ settings.use_internal_wiki=使用内置百科
settings.default_wiki_branch_name=默认百科分支名称
settings.failed_to_change_default_wiki_branch=更改百科默认分支失败。
settings.use_external_wiki=使用外部百科
-settings.external_wiki_url=外部 Wiki 链接
+settings.external_wiki_url=外部百科链接
settings.external_wiki_url_error=外部百科链接无效
-settings.external_wiki_url_desc=当点击百科标签时,访问者将被重定向到外部百科系统的URL。
+settings.external_wiki_url_desc=当点击百科标签时,访问者将被重定向到外部百科系统的 URL。
settings.issues_desc=启用工单系统
-settings.use_internal_issue_tracker=使用内置的轻量级工单管理系统
-settings.use_external_issue_tracker=使用外部的工单管理系统
+settings.use_internal_issue_tracker=使用内置工单系统
+settings.use_external_issue_tracker=使用外部工单系统
settings.external_tracker_url=外部工单系统 URL
settings.external_tracker_url_error=外部百科链接无效
-settings.external_tracker_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的URL。
+settings.external_tracker_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的 URL。
settings.tracker_url_format=外部工单管理系统的 URL 格式
settings.tracker_url_format_error=外部工单链接无效
settings.tracker_issue_style=外部工单管理系统的编号格式
settings.tracker_issue_style.numeric=纯数字形式
settings.tracker_issue_style.alphanumeric=英文字母数字组合形式
settings.tracker_issue_style.regexp=正则表达式
-settings.tracker_issue_style.regexp_pattern=正则表达式模式
+settings.tracker_issue_style.regexp_pattern=正则表达式
settings.tracker_issue_style.regexp_pattern_desc=第一个被捕获的组将取代 {index}。
-settings.tracker_url_format_desc=使用占位符 {user}, {repo} 和 {index} 作为用户名、仓库名和工单索引。
+settings.tracker_url_format_desc=使用占位符 {user}、{repo} 和 {index} 作为用户名、仓库名和工单索引。
settings.enable_timetracker=启用时间跟踪
settings.allow_only_contributors_to_track_time=仅允许成员跟踪时间
settings.pulls_desc=启用合并请求
settings.pulls.ignore_whitespace=忽略空白冲突
-settings.pulls.enable_autodetect_manual_merge=启用自动检测手动合并 (注意:在某些特殊情况下可能发生错误判断)
+settings.pulls.enable_autodetect_manual_merge=启用自动检查手动合并(注意:在某些特殊情况下可能会出现误判)
settings.pulls.allow_rebase_update=允许通过变基更新合并请求分支
settings.pulls.default_delete_branch_after_merge=默认合并后删除合并请求分支
-settings.pulls.default_allow_edits_from_maintainers=默认开启允许维护者编辑
-settings.releases_desc=启用发布
+settings.pulls.default_allow_edits_from_maintainers=默认允许维护者编辑
+settings.releases_desc=启用仓库发布
settings.packages_desc=启用仓库软件包注册中心
settings.projects_desc=启用项目
settings.projects_mode_desc=项目模式 (要显示的项目类型)
settings.projects_mode_repo=仅仓库项目
settings.projects_mode_owner=仅限用户或组织项目
settings.projects_mode_all=所有项目
-settings.actions_desc=启用 Actions
+settings.actions_desc=启用仓库工作流
settings.admin_settings=管理员设置
settings.admin_enable_health_check=启用仓库健康检查 (git fsck)
settings.admin_code_indexer=代码索引器
@@ -2251,23 +2268,23 @@ settings.convert_fork_notices_1=该操作会将派生仓库转换为普通仓库
settings.convert_fork_confirm=转换仓库
settings.convert_fork_succeed=此派生仓库已经转换为普通仓库。
settings.transfer=转移仓库所有权
-settings.transfer.rejected=代码库转移被拒绝。
-settings.transfer.success=代码库转移成功。
-settings.transfer.blocked_user=无法传输仓库,因为您被新的所有者屏蔽。
+settings.transfer.rejected=仓库转移被拒绝。
+settings.transfer.success=仓库转移成功。
+settings.transfer.blocked_user=无法转移仓库,因为您已被新所有者屏蔽。
settings.transfer_abort=取消转移
-settings.transfer_abort_invalid=你不能取消不存在的代码库转移。
-settings.transfer_abort_success=成功取消了将代码库转让给 %s。
+settings.transfer_abort_invalid=您不能取消不存在的仓库转移。
+settings.transfer_abort_success=成功取消将仓库转移给 %s。
settings.transfer_desc=您可以将仓库转移至您拥有管理员权限的帐户或组织。
-settings.transfer_form_title=输入仓库名称以做确认:
-settings.transfer_in_progress=当前正在进行转让。 如果你想将此代码库转让给另一个用户,请取消它。
-settings.transfer_notices_1=- 如果将此仓库转移给其他用户, 您将失去对此仓库的访问权限。
-settings.transfer_notices_2=-如果将其转移到您 (共同) 拥有的组织,您可以继续访问该仓库。
-settings.transfer_notices_3=- 如果仓库是私有的并且被转移给某个用户,那么此操作可以确保该用户至少具有读权限(以及必要时的更改权限)。
-settings.transfer_notices_4=- 如果存储库属于某个组织,而您将其转移给另一个组织或个人,那么您将失去存储库工单与其组织项目系统之间的链接。
+settings.transfer_form_title=输入仓库名称以确认:
+settings.transfer_in_progress=当前正在进行转移。 如果您想将此仓库转移给另一个用户,请取消它。
+settings.transfer_notices_1=- 如果将此仓库转移给其他用户,您将失去对此仓库的访问权限。
+settings.transfer_notices_2=- 如果将其转移到您(共同)拥有的组织,您可以继续访问该仓库。
+settings.transfer_notices_3=- 如果仓库是私有的并且被转移给某个用户,那么此操作可以确保该用户至少具有读权限(以及必要时的更改权限)。
+settings.transfer_notices_4=- 如果仓库属于某个组织,而您将其转移给另一个组织或个人,那么您将失去仓库工单与其组织项目系统之间的链接。
settings.transfer_owner=新拥有者
-settings.transfer_perform=执行转让
-settings.transfer_started=该代码库已被标记为转让并等待来自 %s 的确认
-settings.transfer_succeed=仓库已被转移。
+settings.transfer_perform=执行转移
+settings.transfer_started=该仓库已标记为转移并等待来自 %s 的确认
+settings.transfer_succeed=仓库已转移。
settings.signing_settings=签名验证设置
settings.trust_model=签名信任模型
settings.trust_model.default=默认信任模型
@@ -2276,8 +2293,8 @@ settings.trust_model.collaborator=协作者
settings.trust_model.collaborator.long=协作者:信任协作者的签名
settings.trust_model.collaborator.desc=此仓库中协作者的有效签名将被标记为「可信」(无论它们是否是提交者),签名只符合提交者时将标记为「不可信」,都不匹配时标记为「不匹配」。
settings.trust_model.committer=提交者
-settings.trust_model.committer.long=提交者: 信任与提交者相符的签名 (此特性类似 GitHub,这会强制采用 Gitea 作为提交者和签名者)
-settings.trust_model.committer.desc=有效签名只有和提交者相匹配才会被标记为“受信任”,否则它们将被标记为“不匹配”。这强制 Gitea 成为签名提交的提交者,而实际提交者被加上 Co-authored-by: 和 Co-committed-by: 的标记。 默认的 Gitea 密钥必须匹配数据库中的一名用户。
+settings.trust_model.committer.long=提交者: 信任与提交者相符的签名(这符合 GitHub 的行为并将强制 Gitea 签名的提交以 Gitea 为提交者)。
+settings.trust_model.committer.desc=有效签名只有和提交者相匹配才会被标记为「受信任」,否则它们将被标记为「不匹配」。这强制 Gitea 成为签名提交的提交者,而实际提交者被加上 Co-authored-by: 和 Co-committed-by: 的标记。 默认的 Gitea 密钥必须匹配数据库中的一名用户。
settings.trust_model.collaboratorcommitter=协作者+提交者
settings.trust_model.collaboratorcommitter.long=协作者+提交者:信任协作者同时是提交者的签名
settings.trust_model.collaboratorcommitter.desc=此仓库中协作者的有效签名在他同时是提交者时将被标记为「可信」,签名只匹配了提交者时将标记为「不可信」,都不匹配时标记为「不匹配」。这会强制 Gitea 成为签名者和提交者,实际的提交者将被标记于提交消息结尾处的「Co-Authored-By:」和「Co-Committed-By:」。默认的 Gitea 签名密钥必须匹配数据库中的一个用户密钥。
@@ -2287,20 +2304,20 @@ settings.wiki_delete_notices_1=- 这将永久删除和禁用 %s 的百科。
settings.confirm_wiki_delete=删除百科数据
settings.wiki_deletion_success=仓库百科数据删除成功!
settings.delete=删除本仓库
-settings.delete_desc=删除仓库是永久性的, 无法撤消。
-settings.delete_notices_1=- 此操作 不可以 被回滚。
-settings.delete_notices_2=- 此操作将永久删除仓库 %s ,包括 Git 数据、 工单、评论、百科和协作者的操作权限。
+settings.delete_desc=删除仓库是永久性的,无法撤消。
+settings.delete_notices_1=- 此操作 无法 被回滚。
+settings.delete_notices_2=- 此操作将永久删除仓库 %s ,包括代码、 工单、评论、百科数据和协作者设置。
settings.delete_notices_fork_1=- 在此仓库删除后,它的派生仓库将变成独立仓库。
-settings.deletion_success=仓库已被删除。
+settings.deletion_success=仓库已删除。
settings.update_settings_success=仓库设置已更新。
-settings.update_settings_no_unit=该代码库应该至少允许某种形式的交互。
+settings.update_settings_no_unit=该仓库应至少允许某种形式的交互。
settings.confirm_delete=删除本仓库
settings.add_collaborator=增加协作者
settings.add_collaborator_success=协作者添加成功!
settings.add_collaborator_inactive_user=无法添加未激活的用户作为合作者。
settings.add_collaborator_owner=不能将所有者添加为协作者。
-settings.add_collaborator_duplicate=合作者已经被添加到本仓库。
-settings.add_collaborator.blocked_user=此写作者被仓库所有者屏蔽,反之亦然。
+settings.add_collaborator_duplicate=协作者已经添加到本仓库。
+settings.add_collaborator.blocked_user=此协作者被仓库所有者屏蔽,反之亦然。
settings.delete_collaborator=删除
settings.collaborator_deletion=删除协作者
settings.collaborator_deletion_desc=删除协作者后他将无法再对此仓库的访问。继续?
@@ -2313,26 +2330,26 @@ settings.add_team=添加团队
settings.add_team_duplicate=团队已经拥有仓库
settings.add_team_success=团队现在可以访问仓库。
settings.change_team_permission_tip=团队权限设置于团队设置页面,不能根据仓库更改
-settings.delete_team_tip=该团队仍有仓库, 无法删除
-settings.remove_team_success=团队访问仓库的权限已被删除。
+settings.delete_team_tip=该团队仍有仓库,无法删除
+settings.remove_team_success=团队访问仓库的权限已删除。
settings.add_webhook=添加 Web 钩子
-settings.add_webhook.invalid_channel_name=Webhook 通道名称不能为空且不能仅包含一个 # 字符。
-settings.hooks_desc=当Gitea事件发生时,Web钩子自动发出HTTP POST请求。在 指南 中阅读更多内容。
+settings.add_webhook.invalid_channel_name=Web 钩子通道名称不能为空且不能仅包含一个 # 字符。
+settings.hooks_desc=当 Gitea 事件发生时,Web 钩子自动发出 HTTP POST 请求。在 指南 中阅读更多内容。
settings.webhook_deletion=删除 Web 钩子
-settings.webhook_deletion_desc=删除 web钩子 将删除其设置和历史记录。继续?
+settings.webhook_deletion_desc=删除 Web 钩子将删除其设置和历史记录。继续?
settings.webhook_deletion_success=Web 钩子删除成功!
-settings.webhook.test_delivery=测试推送
-settings.webhook.test_delivery_desc=用假事件测试这个 web钩子。
-settings.webhook.test_delivery_desc_disabled=要用 虚假事件 测试这个Webhook,请激活它。
+settings.webhook.test_delivery=测试推送事件
+settings.webhook.test_delivery_desc=用假推送事件测试这个 Web 钩子。
+settings.webhook.test_delivery_desc_disabled=要用假事件测试这个 Web钩子,请激活它。
settings.webhook.request=请求内容
settings.webhook.response=响应内容
settings.webhook.headers=头信息
settings.webhook.payload=内容
settings.webhook.body=响应体
-settings.webhook.replay.description=重放此 webhook。
-settings.webhook.replay.description_disabled=若要重播此 WebHook,请激活它。
-settings.webhook.delivery.success=一个事件已被添加到推送队列。可能需要过几秒钟才会显示在推送记录中。
-settings.githooks_desc=Git Hook 是 Git 本身提供的功能。您可以在下方编辑 hook 文件以设置自定义操作。
+settings.webhook.replay.description=重放此 Web 钩子。
+settings.webhook.replay.description_disabled=若要重新运行此 Web 钩子,请激活它。
+settings.webhook.delivery.success=一个事件已添加到推送队列。可能需要过几秒钟才会显示在推送记录中。
+settings.githooks_desc=Git 钩子是 Git 本身提供的功能。您可以在下方编辑 hook 文件以设置自定义操作。
settings.githook_edit_desc=如果钩子未启动,则会显示样例文件中的内容。如果想要删除某个钩子,则提交空白文本即可。
settings.githook_name=钩子名称
settings.githook_content=钩子文本
@@ -2340,8 +2357,9 @@ settings.update_githook=更新钩子设置
settings.add_webhook_desc=Gitea 将向目标 URL 发送具有指定内容类型的 POST 请求。在 webhooks 指南 中阅读更多内容。
settings.payload_url=目标 URL
settings.http_method=HTTP 方法
-settings.content_type=POST Content Type
-settings.secret=密钥文本
+settings.content_type=POST 内容类型
+settings.secret=密钥
+settings.webhook_secret_desc=如果 Webhook 服务器支持使用密钥,您可以按照 Webhook 的手册在此处填写一个密钥。
settings.slack_username=服务名称
settings.slack_icon_url=图标 URL
settings.slack_color=颜色
@@ -2350,19 +2368,19 @@ settings.discord_icon_url=图标 URL
settings.event_desc=触发条件:
settings.event_push_only=推送事件
settings.event_send_everything=所有事件
-settings.event_choose=自定义事件...
+settings.event_choose=自定义事件…
settings.event_header_repository=仓库事件
settings.event_create=创建
-settings.event_create_desc=创建分支或标签
+settings.event_create_desc=分支或 Git 标签已创建。
settings.event_delete=刪除
-settings.event_delete_desc=分支或标签已删除。
+settings.event_delete_desc=分支或 Git 标签已删除。
settings.event_fork=派生
-settings.event_fork_desc=仓库被派生。
+settings.event_fork_desc=仓库已派生。
settings.event_wiki=百科
settings.event_wiki_desc=创建、重命名、编辑或删除了百科页面。
settings.event_statuses=状态
settings.event_statuses_desc=已从 API 更新提交状态。
-settings.event_release=版本发布
+settings.event_release=发布
settings.event_release_desc=发布、更新或删除版本时。
settings.event_push=推送
settings.event_force_push=强制推送
@@ -2373,43 +2391,45 @@ settings.event_header_issue=工单事件
settings.event_issues=工单
settings.event_issues_desc=工单已打开、已关闭、已重新打开或已编辑。
settings.event_issue_assign=工单已指派
-settings.event_issue_assign_desc=工单已被指派或取消指派。
-settings.event_issue_label=已标记工单
-settings.event_issue_label_desc=工单标签被更新或清除。
-settings.event_issue_milestone=工单被收入里程碑中
-settings.event_issue_milestone_desc=工单被收入或取消收入里程碑中。
+settings.event_issue_assign_desc=工单已指派或取消指派。
+settings.event_issue_label=工单增删标签
+settings.event_issue_label_desc=工单标签已更新或清除。
+settings.event_issue_milestone=工单已收入里程碑中
+settings.event_issue_milestone_desc=工单已收入或取消收入里程碑中。
settings.event_issue_comment=工单评论
-settings.event_issue_comment_desc=工单评论被创建、编辑或删除
+settings.event_issue_comment_desc=工单评论已创建、编辑或删除。
settings.event_header_pull_request=合并请求事件
settings.event_pull_request=合并请求
-settings.event_pull_request_desc=合并请求被打开、被关闭、被重新打开或被编辑。
-settings.event_pull_request_assign=合并请求被指派
-settings.event_pull_request_assign_desc=合并请求被指派或取消指派。
-settings.event_pull_request_label=合并请求被贴上标签
-settings.event_pull_request_label_desc=合并请求的标签被更新或清除。
-settings.event_pull_request_milestone=合并请求被记录于里程碑中
-settings.event_pull_request_milestone_desc=合并请求被记录或取消记录于里程碑中。
-settings.event_pull_request_comment=合并请求被评论
-settings.event_pull_request_comment_desc=合并请求评论被创建、编辑或删除。
+settings.event_pull_request_desc=合并请求已打开、关闭、重新打开或编辑。
+settings.event_pull_request_assign=合并请求已指派
+settings.event_pull_request_assign_desc=合并请求已指派或取消指派。
+settings.event_pull_request_label=合并请求增删标签
+settings.event_pull_request_label_desc=合并请求的标签已更新或清除。
+settings.event_pull_request_milestone=合并请求已记录于里程碑中
+settings.event_pull_request_milestone_desc=合并请求已记录或取消记录于里程碑中。
+settings.event_pull_request_comment=合并请求已评论
+settings.event_pull_request_comment_desc=合并请求评论已创建、编辑或删除。
settings.event_pull_request_review=已审核的合并请求
-settings.event_pull_request_review_desc=合并请求被批准、拒绝或提出审查意见
-settings.event_pull_request_sync=合并请求被同步
-settings.event_pull_request_sync_desc=合并请求被同步。
+settings.event_pull_request_review_desc=合并请求已批准、拒绝或提出审查意见。
+settings.event_pull_request_sync=合并请求已同步
+settings.event_pull_request_sync_desc=合并请求已同步。
settings.event_pull_request_review_request=发起合并请求评审
settings.event_pull_request_review_request_desc=合并请求评审已请求或已取消
settings.event_pull_request_approvals=合并请求批准
settings.event_pull_request_merge=合并请求合并
settings.event_header_workflow=工作流程事件
+settings.event_workflow_run=工作流运行
+settings.event_workflow_run_desc=Gitea 工作流队列中、等待中、正在进行或已完成的任务。
settings.event_workflow_job=工作流任务
-settings.event_workflow_job_desc=Gitea Actions 工作流队列中、等待中、正在进行或已完成任务。
+settings.event_workflow_job_desc=Gitea 工作流队列中、等待中、正在进行或已完成的任务。
settings.event_package=软件包
-settings.event_package_desc=软件包已在仓库中被创建或删除。
+settings.event_package_desc=软件包在仓库中已创建或删除。
settings.branch_filter=分支过滤
-settings.branch_filter_desc=推送、创建,删除分支事件的分支白名单,使用 glob 模式匹配指定。若为空或 *,则将报告所有分支的事件。语法文档见 %[2]s 。示例:master,{master,release*}。
+settings.branch_filter_desc=推送、创建,删除分支事件的分支白名单,使用 glob 表达式匹配指定。若为空或 *,则会报告所有分支的事件。语法文档见 %[2]s 。示例:master、{master,release*}。
settings.authorization_header=授权标头
settings.authorization_header_desc=当存在时将被作为授权标头包含在内。例如: %s。
settings.active=激活
-settings.active_helper=触发事件的信息将发送到此 webhook 网址。
+settings.active_helper=触发事件的信息将发送到此 Web 钩子 URL。
settings.add_hook_success=Web 钩子添加成功!
settings.update_webhook=更新 Web 钩子
settings.update_hook_success=Web 钩子更新成功!
@@ -2419,7 +2439,7 @@ settings.hook_type=钩子类型
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=频道
-settings.add_web_hook_desc=将 %s 集成到您的代码库。
+settings.add_web_hook_desc=将 %s 集成到您的仓库。
settings.web_hook_name_gitea=Gitea
settings.web_hook_name_gogs=Gogs
settings.web_hook_name_slack=Slack
@@ -2446,7 +2466,7 @@ settings.title=标题
settings.deploy_key_content=密钥文本
settings.key_been_used=具有相同内容的部署密钥已在使用中。
settings.key_name_used=使用相同名称的部署密钥已经存在!
-settings.add_key_success=部署密钥 %s 添加成功。
+settings.add_key_success=部署密钥「%s」添加成功。
settings.deploy_key_deletion=删除部署密钥
settings.deploy_key_deletion_desc=删除部署密钥将取消此密钥对此仓库的访问权限。继续?
settings.deploy_key_deletion_success=部署密钥已删除。
@@ -2455,11 +2475,11 @@ settings.protected_branch=分支保护
settings.protected_branch.save_rule=保存规则
settings.protected_branch.delete_rule=删除规则
settings.protected_branch_can_push=是否允许推送?
-settings.protected_branch_can_push_yes=你可以推
-settings.protected_branch_can_push_no=你不能推送
-settings.branch_protection=分支 '%s ' 的保护规则
+settings.protected_branch_can_push_yes=您可以推送
+settings.protected_branch_can_push_no=您不能推送
+settings.branch_protection=分支「%s 」的保护规则
settings.protect_this_branch=启用分支保护
-settings.protect_this_branch_desc=阻止删除并限制Git推送和合并到分支。
+settings.protect_this_branch_desc=阻止删除并限制 Git 推送和合并到分支。
settings.protect_disable_push=禁用推送
settings.protect_disable_push_desc=此分支不允许推送。
settings.protect_disable_force_push=禁用强制推送
@@ -2485,13 +2505,13 @@ settings.protect_merge_whitelist_committers_desc=仅允许白名单用户或团
settings.protect_merge_whitelist_users=合并白名单用户:
settings.protect_merge_whitelist_teams=合并白名单团队:
settings.protect_check_status_contexts=启用状态检查
-settings.protect_status_check_patterns=状态检查模式:
-settings.protect_status_check_patterns_desc=输入模式,指定哪些状态检查必须通过,才能将分支合并到符合此规则的分支中去。每一行指定一个模式,模式不能为空。
+settings.protect_status_check_patterns=状态检查表达式:
+settings.protect_status_check_patterns_desc=输入表达式以指定在分支合并到匹配此规则的分支之前必须通过哪些状态检查。每一行指定一个表达式且表达式不能为空。
settings.protect_check_status_contexts_desc=要求状态检查通过才能合并。如果启用,提交必须先推送到另一个分支,然后再合并或推送到匹配这些保护规则的分支。如果没有选择具体的状态检查上下文,则所有的状态检查都通过才能合并。
settings.protect_check_status_contexts_list=此仓库上周进行过的状态检查
settings.protect_status_check_matched=匹配
-settings.protect_invalid_status_check_pattern=无效的状态检查规则:“%s”。
-settings.protect_no_valid_status_check_patterns=没有有效的状态检查规则。
+settings.protect_invalid_status_check_pattern=无效的状态检查表达式:「%s」。
+settings.protect_no_valid_status_check_patterns=没有有效的状态检查表达式。
settings.protect_required_approvals=所需的批准:
settings.protect_required_approvals_desc=只允许合并有足够审核的合并请求。要求的审核必须来自白名单或者有权限的用户或团队。
settings.protect_approvals_whitelist_enabled=仅列入白名单的用户或团队才可批准
@@ -2504,18 +2524,18 @@ settings.ignore_stale_approvals=忽略过期批准
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
settings.require_signed_commits=需要签名提交
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
-settings.protect_branch_name_pattern=受保护的分支名称模式
-settings.protect_branch_name_pattern_desc=分支保护的名称匹配规则。语法请参阅 文档 。如:main, release/**
-settings.protect_patterns=规则
-settings.protect_protected_file_patterns=受保护的文件模式(使用分号 ';' 分隔):
-settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。 可以使用分号 (';') 分隔多个模式。 见%[2]s 文档了解模式语法。例如: .drone.yml, /docs/**/*.txt
-settings.protect_unprotected_file_patterns=不受保护的文件模式(使用分号 ';' 分隔):
-settings.protect_unprotected_file_patterns_desc=如果用户有写权限,则允许直接更改的不受保护的文件,以绕过推送限制。可以使用分号分隔多个模式 (';')。 见 %[2]s 文档了解模式语法。例如: .drone.yml, /docs/**/*.txt
+settings.protect_branch_name_pattern=受保护的分支名称表达式
+settings.protect_branch_name_pattern_desc=分支保护的名称匹配表达式。语法请参阅 文档 。如:main, release/**
+settings.protect_patterns=表达式
+settings.protect_protected_file_patterns=受保护的文件表达式(使用分号「;」分隔):
+settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。可以使用分号(';')分隔多个表达式。见 %[2]s 文档了解表达式语法。例如:.drone.yml、/docs/**/*.txt。
+settings.protect_unprotected_file_patterns=不受保护的文件表达式(使用分号「;」分隔):
+settings.protect_unprotected_file_patterns_desc=如果用户具有写权限则允许直接更改的不受保护文件,可绕过推送限制。可使用分号(';')分隔多个表达式。见 %[2]s 文档了解表达式语法。例如:.drone.yml、/docs/**/*.txt。
settings.add_protected_branch=启用保护
settings.delete_protected_branch=禁用保护
-settings.update_protect_branch_success=分支保护规则 %s 更新成功。
-settings.remove_protected_branch_success=移除分支保护规则"%s"成功。
-settings.remove_protected_branch_failed=移除分支保护规则"%s"失败。
+settings.update_protect_branch_success=分支保护规则「%s」更新成功。
+settings.remove_protected_branch_success=分支保护规则「%s」移除成功。
+settings.remove_protected_branch_failed=分支保护规则「%s」移除失败。
settings.protected_branch_deletion=删除分支保护
settings.protected_branch_deletion_desc=禁用分支保护允许具有写入权限的用户推送提交到此分支。继续?
settings.block_rejected_reviews=拒绝审核阻止了此合并
@@ -2529,22 +2549,22 @@ settings.block_admin_merge_override_desc=管理员须遵守分支保护规则,
settings.default_branch_desc=请选择一个默认的分支用于合并请求和提交:
settings.merge_style_desc=合并方式
settings.default_merge_style_desc=默认合并风格
-settings.choose_branch=选择一个分支...
+settings.choose_branch=选择一个分支…
settings.no_protected_branch=没有受保护的分支
settings.edit_protected_branch=编辑
settings.protected_branch_required_rule_name=必须填写规则名称
settings.protected_branch_duplicate_rule_name=规则名称已存在
settings.protected_branch_required_approvals_min=所需的审批数不能为负数。
-settings.tags=标签
-settings.tags.protection=Git标签保护
-settings.tags.protection.pattern=Git标签模式
+settings.tags=Git 标签
+settings.tags.protection=Git 标签保护
+settings.tags.protection.pattern=Git 标签表达式
settings.tags.protection.allowed=允许列表
settings.tags.protection.allowed.users=允许的账号
settings.tags.protection.allowed.teams=允许的团队
settings.tags.protection.allowed.noone=无
-settings.tags.protection.create=保护Git标签
-settings.tags.protection.none=没有受保护的Git标签
-settings.tags.protection.pattern.description=你可以使用单个名称或 glob 模式匹配或正则表达式来匹配多个标签。了解详情请访问 保护Git标签指南 。
+settings.tags.protection.create=保护 Git 标签
+settings.tags.protection.none=没有受保护的 Git 标签。
+settings.tags.protection.pattern.description=您可以使用单个名称或 glob 表达式匹配或正则表达式来匹配多个 Git 标签。了解详情请访问 保护标签指南 。
settings.bot_token=Bot 令牌
settings.chat_id=聊天 ID
settings.thread_id=线程 ID
@@ -2552,7 +2572,7 @@ settings.matrix.homeserver_url=主服务器网址
settings.matrix.room_id=房间ID
settings.matrix.message_type=消息类型
settings.visibility.private.button=设为私有
-settings.visibility.private.text=将可见性更改为私有不仅会使仓库仅对允许的成员可见,而且可能会消除它与派生仓库、关注者和点赞之间的关系。
+settings.visibility.private.text=将可见性更改为私有会使仓库仅对允许的成员可见,而且可能会消除它与派生仓库、关注者和点赞之间的关系。
settings.visibility.private.bullet_title=将可见性改为私有将会:
settings.visibility.private.bullet_one=使仓库只对允许的成员可见。
settings.visibility.private.bullet_two=可能会删除它与 派生仓库 、 关注者 和 点赞 之间的关系。
@@ -2565,13 +2585,13 @@ settings.visibility.error=试图更改仓库可见性时出错。
settings.visibility.fork_error=无法更改派生仓库的可见性。
settings.archive.button=归档仓库
settings.archive.header=归档此仓库
-settings.archive.text=归档仓库将使其完全只读。它将在首页隐藏。没有人(甚至你!)能够进行新的提交,或打开工单及合并请求。
+settings.archive.text=归档仓库将使其完全只读。它将在首页隐藏。没有人(包括您)能够进行新的提交,或创建工单及合并请求。
settings.archive.success=仓库已成功归档。
settings.archive.error=仓库在归档时出现异常。请通过日志获取详细信息。
settings.archive.error_ismirror=请不要对镜像仓库归档,谢谢!
settings.archive.branchsettings_unavailable=已归档仓库无法进行分支设置。
-settings.archive.tagsettings_unavailable=已归档仓库的Git标签设置不可用。
-settings.archive.mirrors_unavailable=如果仓库已被归档,镜像将不可用。
+settings.archive.tagsettings_unavailable=已归档仓库的 Git 标签设置不可用。
+settings.archive.mirrors_unavailable=如果仓库已归档,镜像将不可用。
settings.unarchive.button=撤销仓库归档
settings.unarchive.header=撤销此仓库归档
settings.unarchive.text=撤销归档将恢复仓库接收提交、推送,以及新工单和合并请求的能力。
@@ -2592,11 +2612,11 @@ settings.lfs_invalid_locking_path=无效路径:%s
settings.lfs_invalid_lock_directory=无法锁定目录:%s
settings.lfs_lock_already_exists=锁已经存在:%s
settings.lfs_lock=锁定
-settings.lfs_lock_path=要锁定的文件路径...
+settings.lfs_lock_path=要锁定的文件路径…
settings.lfs_locks_no_locks=无锁定
settings.lfs_lock_file_no_exist=锁定的文件在默认分支中不存在
settings.lfs_force_unlock=强制解锁
-settings.lfs_pointers.found=找到 %d 个块指针 - %d 个关联, %d 个未关联(%d 个从仓库丢失)
+settings.lfs_pointers.found=找到 %d 个块指针 — %d 个关联, %d 个未关联(%d 个从仓库丢失)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=在仓库中
@@ -2625,7 +2645,7 @@ diff.whitespace_show_everything=显示所有更改
diff.whitespace_ignore_all_whitespace=比较行时忽略空白符号
diff.whitespace_ignore_amount_changes=忽略空白符号数量的变化
diff.whitespace_ignore_at_eol=忽略行末空白符号的更改
-diff.stats_desc=共有 %d 个文件被更改 ,包括 %d 次插入 和 %d 次删除
+diff.stats_desc=共修改 %d 个文件 ,包含 %d 行新增 和 %d 行删除
diff.stats_desc_file=变更 %d 行:新增 %d 行,删除 %d 行
diff.bin=二进制
diff.bin_not_shown=二进制文件未显示。
@@ -2671,102 +2691,105 @@ diff.submodule_updated=子模块 %[1]s 已更新:%[2]s
releases.desc=跟踪项目版本和下载。
release.releases=版本发布
release.detail=发布详情
-release.tags=Git标签
+release.tags=Git 标签
release.new_release=发布新版
release.draft=草稿
-release.prerelease=预发行
+release.prerelease=预发布
release.stable=稳定
-release.latest=最新版本
+release.latest=最新
release.compare=比较
release.edit=编辑
release.ahead.commits=%d 次提交
-release.ahead.target=在此版本发布后被加入到 %s
-tag.ahead.target=自此标签到 %s
+release.ahead.target=在此版本后已推送到 %s
+tag.ahead.target=自此 Git 标签到 %s
release.source_code=源代码
-release.new_subheader=版本发布组织项目的版本。
-release.edit_subheader=版本发布组织项目的版本。
-release.tag_name=标签名称
+release.new_subheader=发布组织项目的版本。
+release.edit_subheader=发布组织项目的版本。
+release.tag_name=Git 标签名称
release.target=目标分支
-release.tag_helper=选择一个存在的标签或者创建新标签。
-release.tag_helper_new=新标签。此标签将从目标创建。
-release.tag_helper_existing=现有标签。
+release.tag_helper=选择一个存在的 Git 标签或者创建新 Git 标签。
+release.tag_helper_new=新 Git 标签。此 Git 标签将从目标创建。
+release.tag_helper_existing=现有 Git 标签。
release.title=发布标题
release.title_empty=标题不能为空。
release.message=描述这个版本
-release.prerelease_desc=标记为预发行
+release.prerelease_desc=标记为预发布
release.prerelease_helper=标记此版本不适合生产使用。
release.cancel=取消
release.publish=发布版本
release.save_draft=保存草稿
release.edit_release=保存此次发布
release.delete_release=删除发布
-release.delete_tag=删除 Git标签
+release.delete_tag=删除 Git 标签
release.deletion=删除发布
-release.deletion_desc=删除版本发布只会从 Gitea 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
-release.deletion_success=Release已被删除。
-release.deletion_tag_desc=将从仓库中删除此 Git标签。仓库内容和历史记录保持不变。继续吗?
-release.deletion_tag_success=该 Git标签 已经被删除
-release.tag_name_already_exist=使用此标签名称的发布版本已经存在。
-release.tag_name_invalid=标签名称无效。
-release.tag_name_protected=Git标签名称已受保护。
-release.tag_already_exist=此 Git标签 名称已存在
+release.deletion_desc=删除发布只会从 Gitea 中移除发布。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
+release.deletion_success=该发布已删除。
+release.deletion_tag_desc=将从仓库中删除此 Git 标签。仓库内容和历史记录保持不变。继续吗?
+release.deletion_tag_success=该 Git 标签已删除。
+release.tag_name_already_exist=使用此 Git 标签名称的发布已经存在。
+release.tag_name_invalid=Git 标签名称无效。
+release.tag_name_protected=Git 标签名已受保护。
+release.tag_already_exist=此 Git 标签名已存在。
release.downloads=下载附件
release.download_count=下载:%s
-release.add_tag_msg=使用发布的标题和内容作为标签消息。
-release.add_tag=仅创建标签
-release.releases_for=%s 的版本发布
-release.tags_for=%s 的标签
+release.add_tag_msg=使用发布的标题和内容作为 Git 标签消息。
+release.add_tag=仅创建 Git 标签
+release.releases_for=%s 的发布
+release.tags_for=%s 的 Git 标签
branch.name=分支名称
-branch.already_exists=名为 %s 的分支已存在。
+branch.already_exists=名为「%s」的分支已存在。
branch.delete_head=刪除
-branch.delete=删除分支 %s
+branch.delete=删除分支「%s」
branch.delete_html=删除分支
branch.delete_desc=删除分支是永久的。虽然已删除的分支在实际被删除前有可能会短时间存在,但这在大多数情况下无法撤销。是否继续?
-branch.deletion_success=分支 %s 已被删除。
-branch.deletion_failed=删除分支 %s 失败。
-branch.delete_branch_has_new_commits=因为合并之后有新的提交,分支 %s 无法被删除。
+branch.deletion_success=分支「%s」删除成功。
+branch.deletion_failed=分支「%s」删除失败。
+branch.delete_branch_has_new_commits=因为合并之后有新的提交,分支「%s」无法删除。
branch.create_branch=创建分支 %s
-branch.create_from=从 %s
-branch.create_success=分支 '%s' 已创建。
-branch.branch_already_exists=此仓库已存在名为 %s 的分支。
-branch.branch_name_conflict=分支名称"%s"与已存在的分支"%s"冲突。
-branch.tag_collision=分支 %s 不能被创建因为同名的标签已经存在。
+branch.create_from=从「%s」
+branch.create_success=分支「%s」已创建。
+branch.branch_already_exists=此仓库已存在名为「%s」的分支。
+branch.branch_name_conflict=分支名称「%s」与已存在的分支「%s」冲突。
+branch.tag_collision=分支「%s」无法创建,因为同名的 Git 标签已经存在。
branch.deleted_by=删除人:%s
-branch.restore_success=分支 "%s"已还原。
-branch.restore_failed=还原分支 "%s"失败。
-branch.protected_deletion_failed=不能删除受保护的分支 "%s"。
-branch.default_deletion_failed=不能删除默认分支"%s"。
-branch.default_branch_not_exist=默认分支 %s 不存在。
-branch.restore=`还原分支 "%s"`
-branch.download=`下载分支 "%s"`
-branch.rename=`重命名分支 "%s"`
+branch.restore_success=分支「%s」已还原。
+branch.restore_failed=分支「%s」还原失败。
+branch.protected_deletion_failed=不能删除受保护的分支「%s」。
+branch.default_deletion_failed=不能删除默认分支「%s」。
+branch.default_branch_not_exist=默认分支「%s」不存在。
+branch.restore=还原分支「%s」
+branch.download=下载分支「%s」
+branch.rename=重命名分支「%s」
branch.included_desc=此分支是默认分支的一部分
branch.included=已包含
branch.create_new_branch=从下列分支创建分支:
branch.confirm_create_branch=创建分支
branch.warning_rename_default_branch=您正在重命名默认分支。
-branch.rename_branch_to=重命名 %s 为:
+branch.rename_branch_to=重命名「%s」为:
branch.confirm_rename_branch=重命名分支
branch.create_branch_operation=创建分支
branch.new_branch=创建新分支
-branch.new_branch_from=基于"%s"创建新分支
-branch.renamed=分支 %s 被重命名为 %s。
+branch.new_branch_from=基于「%s」创建新分支
+branch.renamed=分支 %s 已重命名为 %s。
branch.rename_default_or_protected_branch_error=只有管理员能重命名默认分支和受保护的分支。
branch.rename_protected_branch_failed=此分支受到 glob 语法规则的保护。
+branch.commits_divergence_from=提交分歧:落后 %[3]s %[1]d 个提交,领先 %[2]d 个提交
+branch.commits_no_divergence=与分支 %[1]s 相同
-tag.create_tag=创建标签 %s
-tag.create_tag_operation=创建标签
-tag.confirm_create_tag=创建标签
-tag.create_tag_from=基于"%s"创建新标签
+tag.create_tag=创建 Git 标签 %s
+tag.create_tag_operation=创建 Git 标签
+tag.confirm_create_tag=创建 Git 标签
+tag.create_tag_from=基于「%s」创建新 Git 标签
-tag.create_success=标签"%s"已存在
+tag.create_success=Git 标签「%s」已存在。
topic.manage_topics=管理主题
topic.done=保存
topic.count_prompt=您最多选择25个主题
topic.format_prompt=主题必须以字母或数字开头,可以包含连字符 ('-') 和句点 ('.'),长度不得超过35个字符。字符必须为小写。
+find_file.follow_symlink=跟随此符号链接的指向位置
find_file.go_to_file=转到文件
find_file.no_matching=没有找到匹配的文件
@@ -2776,9 +2799,9 @@ error.csv.invalid_field_count=无法渲染此文件,因为它在第 %d 行中
error.broken_git_hook=此仓库的 Git 钩子似乎已损坏。 请按照 文档 来修复它们,然后推送一些提交来刷新状态。
[graphs]
-component_loading=正在加载 %s...
+component_loading=正在加载 %s…
component_loading_failed=无法加载 %s
-component_loading_info=这可能需要一点…
+component_loading_info=这可能需要一点时间…
component_failed_to_load=意外的错误发生了。
code_frequency.what=代码频率
contributors.what=贡献
@@ -2805,16 +2828,17 @@ team_desc_helper=描述团队的目的或作用。
team_access_desc=仓库权限
team_permission_desc=权限
team_unit_desc=允许访问仓库单元
-team_unit_disabled=(已禁用)
+team_unit_disabled=(已禁用)
-form.name_reserved=组织名称 '%s' 是被保留的。
-form.name_pattern_not_allowed=仓库名称中不允许使用 "%s"。
+form.name_been_taken=组织名称「%s」已经被占用。
+form.name_reserved=组织名称「%s」是保留的。
+form.name_pattern_not_allowed=组织名中不允许使用「%s」格式。
form.create_org_not_allowed=此账号禁止创建组织
settings=组织设置
settings.options=组织
settings.full_name=组织全名
-settings.email=联系电子邮件
+settings.email=联系邮箱
settings.website=网站
settings.location=所在地区
settings.permission=权限
@@ -2828,15 +2852,28 @@ settings.visibility.private_shortname=私有
settings.update_settings=更新组织设置
settings.update_setting_success=组织设置已更新。
-settings.change_orgname_prompt=注意:更改组织名称同时会更改组织的 URL 地址并释放旧的名称。
-settings.change_orgname_redirect_prompt=在被人使用前,旧用户名将会被重定向。
+
+settings.rename=修改组织名称
+settings.rename_desc=更改组织名称同时会更改组织的 URL 地址并释放旧的名称。
+settings.rename_success=组织 %[1]s 已成功重命名为 %[2]s。
+settings.rename_no_change=组织名称没有变更。
+settings.rename_new_org_name=新组织名称
+settings.rename_failed=由于内部错误,重命名组织失败
+settings.rename_notices_1=此操作 无法 被回滚。
+settings.rename_notices_2=在被人使用前,旧名称将会被重定向。
+
settings.update_avatar_success=组织头像已经更新。
settings.delete=删除组织
settings.delete_account=删除当前组织
-settings.delete_prompt=删除操作会永久清除该组织的信息,并且 不可恢复 !
+settings.delete_prompt=删除操作会永久清除该组织的信息,并且 无法 恢复!
+settings.name_confirm=输入组织名称以确认:
+settings.delete_notices_1=此操作 无法 被回滚。
+settings.delete_notices_2=此操作将永久删除 %s 的所有仓库 ,包括 Git 数据、 工单、评论、百科和协作者的操作权限。
+settings.delete_notices_3=此操作将永久删除 %s 的所有 软件包 。
+settings.delete_notices_4=此操作将永久删除 %s 的所有 项目 。
settings.confirm_delete_account=确认删除组织
-settings.delete_org_title=删除组织
-settings.delete_org_desc=此组织将会被永久删除,确认继续吗?
+settings.delete_failed=由于内部错误,删除组织失败
+settings.delete_successful=组织 %s 已成功删除。
settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 所有仓库 。
settings.labels_desc=添加能够被该组织下的 所有仓库 的工单使用的标签。
@@ -2882,7 +2919,7 @@ teams.invite_team_member=邀请加入 %s
teams.invite_team_member.list=待处理的邀请
teams.delete_team_title=删除团队
teams.delete_team_desc=删除一个团队将删除团队成员的访问权限,继续?
-teams.delete_team_success=该团队已被删除。
+teams.delete_team_success=该团队已删除。
teams.read_permission_desc=该团队拥有对所属仓库的 读取 权限,团队成员可以进行查看和克隆等只读操作。
teams.write_permission_desc=该团队拥有对所属仓库的 读取 和 写入 的权限。
teams.admin_permission_desc=该团队拥有一定的 管理 权限,团队成员可以读取、克隆、推送以及添加其它仓库协作者。
@@ -2933,7 +2970,7 @@ repositories=仓库管理
hooks=Web 钩子
integrations=集成
authentication=认证源
-emails=用户邮件
+emails=用户邮箱
config=应用配置
config_summary=摘要
config_settings=设置
@@ -2952,27 +2989,27 @@ dashboard.operation_name=操作名称
dashboard.operation_switch=开关
dashboard.operation_run=执行
dashboard.clean_unbind_oauth=清理未绑定的 OAuth 连接
-dashboard.clean_unbind_oauth_success=所有未绑定的 OAuth 连接已被删除。
+dashboard.clean_unbind_oauth_success=所有未绑定的 OAuth 连接已删除。
dashboard.task.started=已开始任务:%[1]s
dashboard.task.process=任务: %[1]s
dashboard.task.cancelled=任务: %[1]s 已取消: %[3]s
dashboard.task.error=任务中的错误: %[1]s: %[3]s
dashboard.task.finished=任务: %[2]s 启动的 %[1]s 已完成
dashboard.task.unknown=未知任务: %[1]s
-dashboard.cron.started=已开始计划任务:%[1]s
+dashboard.cron.started=计划任务:%[1]s 已启动
dashboard.cron.process=计划任务:%[1]s
-dashboard.cron.cancelled=定时任务: %[1]s 已取消: %[3]s
-dashboard.cron.error=任务中的错误: %s: %[3]s
-dashboard.cron.finished=任务:%[1]s 已经完成
+dashboard.cron.cancelled=计划任务:%[1]s 已取消:%[3]s
+dashboard.cron.error=计划任务错误: %s: %[3]s
+dashboard.cron.finished=计划任务:%[1]s 已完成
dashboard.delete_inactive_accounts=删除所有未激活的帐户
-dashboard.delete_inactive_accounts.started=删除所有未激活的账户任务已启动。
-dashboard.delete_repo_archives=删除所有代码库的存档 (ZIP、 TAR、GZ, 等...)
+dashboard.delete_inactive_accounts.started=删除所有未激活的账号任务已启动。
+dashboard.delete_repo_archives=删除所有仓库的存档(ZIP、TAR、GZ等)
dashboard.delete_repo_archives.started=删除所有仓库存档任务已启动。
dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库
dashboard.delete_missing_repos.started=删除所有丢失 Git 文件的仓库任务已启动。
dashboard.delete_generated_repository_avatars=删除生成的仓库头像
-dashboard.sync_repo_branches=将缺少的分支从 git 数据同步到数据库
-dashboard.sync_repo_tags=从 git 数据同步标签到数据库
+dashboard.sync_repo_branches=将缺少的分支从 Git 数据同步到数据库
+dashboard.sync_repo_tags=从 Git 数据同步 Git 标签到数据库
dashboard.update_mirrors=更新镜像仓库
dashboard.repo_health_check=健康检查所有仓库
dashboard.check_repo_stats=检查所有仓库统计
@@ -2987,11 +3024,11 @@ dashboard.reinit_missing_repos=重新初始化所有丢失的 Git 仓库存在
dashboard.sync_external_users=同步外部用户数据
dashboard.cleanup_hook_task_table=清理 hook_task 表
dashboard.cleanup_packages=清理过期的软件包
-dashboard.cleanup_actions=清理过期的 Actions 资源
+dashboard.cleanup_actions=清理过期的工作流资源
dashboard.server_uptime=服务运行时间
dashboard.current_goroutine=当前 Goroutines 数量
dashboard.current_memory_usage=当前内存使用量
-dashboard.total_memory_allocated=所有被分配的内存
+dashboard.total_memory_allocated=所有已分配的内存
dashboard.memory_obtained=内存占用量
dashboard.pointer_lookup_times=指针查找次数
dashboard.memory_allocate_times=内存分配次数
@@ -3000,36 +3037,36 @@ dashboard.current_heap_usage=当前 Heap 内存使用量
dashboard.heap_memory_obtained=Heap 内存占用量
dashboard.heap_memory_idle=Heap 内存空闲量
dashboard.heap_memory_in_use=正在使用的 Heap 内存
-dashboard.heap_memory_released=被释放的 Heap 内存
+dashboard.heap_memory_released=已释放的 Heap 内存
dashboard.heap_objects=Heap 对象数量
dashboard.bootstrap_stack_usage=启动 Stack 使用量
-dashboard.stack_memory_obtained=被分配的 Stack 内存
+dashboard.stack_memory_obtained=已分配的 Stack 内存
dashboard.mspan_structures_usage=MSpan 结构内存使用量
-dashboard.mspan_structures_obtained=被分配的 MSpan 结构内存
+dashboard.mspan_structures_obtained=已分配的 MSpan 结构内存
dashboard.mcache_structures_usage=MCache 结构内存使用量
-dashboard.mcache_structures_obtained=被分配的 MCache 结构内存
-dashboard.profiling_bucket_hash_table_obtained=被分配的剖析哈希表内存
-dashboard.gc_metadata_obtained=被分配的 GC 元数据内存
-dashboard.other_system_allocation_obtained=其它被分配的系统内存
+dashboard.mcache_structures_obtained=已分配的 MCache 结构内存
+dashboard.profiling_bucket_hash_table_obtained=已分配的剖析哈希表内存
+dashboard.gc_metadata_obtained=已分配的 GC 元数据内存
+dashboard.other_system_allocation_obtained=其它已分配的系统内存
dashboard.next_gc_recycle=下次 GC 内存回收量
dashboard.last_gc_time=距离上次 GC 时间
dashboard.total_gc_time=GC 暂停时间总量
dashboard.total_gc_pause=GC 暂停时间总量
dashboard.last_gc_pause=上次 GC 暂停时间
dashboard.gc_times=GC 执行次数
-dashboard.delete_old_actions=从数据库中删除所有旧操作记录
-dashboard.delete_old_actions.started=已开始从数据库中删除所有旧操作记录。
+dashboard.delete_old_actions=从数据库中删除所有旧工作流记录
+dashboard.delete_old_actions.started=已开始从数据库中删除所有旧工作流记录。
dashboard.update_checker=更新检查器
dashboard.delete_old_system_notices=从数据库中删除所有旧系统通知
dashboard.gc_lfs=垃圾回收 LFS 元数据
-dashboard.stop_zombie_tasks=停止僵尸任务
-dashboard.stop_endless_tasks=停止无法停止的任务
-dashboard.cancel_abandoned_jobs=取消丢弃的任务
-dashboard.start_schedule_tasks=开始Actions调度任务
+dashboard.stop_zombie_tasks=停止僵尸工作流任务
+dashboard.stop_endless_tasks=停止无限循环的工作流任务
+dashboard.cancel_abandoned_jobs=取消已放弃的工作流任务
+dashboard.start_schedule_tasks=启动工作流计划任务
dashboard.sync_branch.started=分支同步已开始
-dashboard.sync_tag.started=标签同步已开始
+dashboard.sync_tag.started=Git 标签同步已开始
dashboard.rebuild_issue_indexer=重建工单索引
-dashboard.sync_repo_licenses=重新仓库许可证探测
+dashboard.sync_repo_licenses=重新探测仓库许可证
users.user_manage_panel=用户帐户管理
users.new_account=创建新帐户
@@ -3047,33 +3084,33 @@ users.created=创建时间
users.last_login=上次登录
users.never_login=从未登录
users.send_register_notify=发送注册通知
-users.new_success=用户账户 '%s' 已被创建。
+users.new_success=用户账户「%s」已创建。
users.edit=修改
users.auth_source=认证源
users.local=本地
users.auth_login_name=认证登录名称
users.password_helper=保持密码为空将不更改密码。
-users.update_profile_success=该帐户已被更新。
+users.update_profile_success=该帐户已更新。
users.edit_account=编辑帐号
users.max_repo_creation=最大仓库数
users.max_repo_creation_desc=(设置为 -1 表示使用全局默认值)
-users.is_activated=该用户已被激活
+users.is_activated=用户已激活
users.prohibit_login=禁用登录
users.is_admin=是管理员
users.is_restricted=受限
users.allow_git_hook=允许创建 Git 钩子
-users.allow_git_hook_tooltip=Git 钩子将会被以操作系统用户运行,将会拥有同样的主机访问权限。因此,拥有此特殊的Git 钩子权限将能够访问合修改所有的 Gitea 仓库或者Gitea的数据库。同时也能获得Gitea的管理员权限。
+users.allow_git_hook_tooltip=Git 钩子将会以操作系统用户运行,拥有同样的主机访问权限。因此,拥有此特殊的 Git 钩子权限将能够访问合修改所有的 Gitea 仓库或者 Gitea 的数据库。同时也能获得 Gitea 的管理员权限。
users.allow_import_local=允许导入本地仓库
users.allow_create_organization=允许创建组织
users.update_profile=更新帐户
users.delete_account=删除帐户
-users.cannot_delete_self=你不能删除自己
-users.still_own_repo=此用户仍然拥有一个或多个仓库。必须首先删除或转让这些仓库。
+users.cannot_delete_self=您不能删除自己
+users.still_own_repo=此用户仍然拥有一个或多个仓库。必须首先删除或转移这些仓库。
users.still_has_org=此用户是组织的成员。必须先从组织中删除用户。
users.purge=清理用户
-users.purge_help=强制删除用户和用户拥有的任何仓库、组织和软件包。所有评论也将被删除。
+users.purge_help=强制删除用户和用户拥有的任何仓库、组织和软件包。所有评论也将删除。
users.still_own_packages=此用户仍然拥有一个或多个软件包,请先删除这些软件包。
-users.deletion_success=用户帐户已被删除。
+users.deletion_success=用户帐户已删除。
users.reset_2fa=重置两步验证
users.list_status_filter.menu_text=过滤
users.list_status_filter.reset=重置
@@ -3090,21 +3127,21 @@ users.list_status_filter.not_2fa_enabled=未启用 2FA
users.details=用户详细信息
emails.email_manage_panel=邮件管理
-emails.primary=主要的
+emails.primary=主
emails.activated=已激活
-emails.filter_sort.email=电子邮件
-emails.filter_sort.email_reverse=电子邮件(逆序)
+emails.filter_sort.email=邮箱
+emails.filter_sort.email_reverse=邮箱(倒序)
emails.filter_sort.name=用户名
-emails.filter_sort.name_reverse=用户名(倒序)
-emails.updated=电子邮件已更新
-emails.not_updated=无法更新请求的电子邮件地址: %v
-emails.duplicate_active=此电子邮件地址已被另一个用户激活使用。
-emails.change_email_header=更新电子邮件属性
-emails.change_email_text=您确定要更新该电子邮件地址吗?
-emails.delete=删除电子邮件
-emails.delete_desc=您确定要删除该电子邮件地址?
-emails.deletion_success=电子邮件地址已被删除。
-emails.delete_primary_email_error=您不能删除主电子邮件。
+emails.filter_sort.name_reverse=用户名(倒序)
+emails.updated=邮箱已更新
+emails.not_updated=无法更新请求的邮箱地址:%v
+emails.duplicate_active=此邮箱地址已被另一个用户激活使用。
+emails.change_email_header=更新邮箱属性
+emails.change_email_text=您确定要更新该邮箱地址吗?
+emails.delete=删除邮箱
+emails.delete_desc=您确定要删除该邮箱地址?
+emails.deletion_success=邮箱地址已删除。
+emails.delete_primary_email_error=您不能删除主邮箱。
orgs.org_manage_panel=组织管理
orgs.name=名称
@@ -3124,7 +3161,7 @@ repos.lfs_size=LFS 大小
packages.package_manage_panel=软件包管理
packages.total_size=总大小:%s
-packages.unreferenced_size=未引用大小: %s
+packages.unreferenced_size=未引用大小:%s
packages.cleanup=清理过期数据
packages.cleanup.success=清理过期数据成功
packages.owner=所有者
@@ -3136,13 +3173,13 @@ packages.repository=仓库
packages.size=大小
packages.published=已发布
-defaulthooks=默认Web钩子
+defaulthooks=默认 Web 钩子
defaulthooks.desc=当某些 Gitea 事件触发时,Web 钩子自动向服务器发出 HTTP POST 请求。这里定义的 Web 钩子是默认配置,将被复制到所有新的仓库中。详情请访问 Web 钩子指南 。
-defaulthooks.add_webhook=添加默认Web 钩子
+defaulthooks.add_webhook=添加默认 Web 钩子
defaulthooks.update_webhook=更新默认 Web 钩子
systemhooks=系统 Web 钩子
-systemhooks.desc=当某些 Gitea 事件触发时,Web 钩子自动向服务器发出HTTP POST请求。这里定义的 Web 钩子将作用于系统上的所有仓库,所以请考虑这可能带来的任何性能影响。了解详情请访问 Web 钩子指南 。
+systemhooks.desc=当某些 Gitea 事件触发时,Web 钩子自动向服务器发出 HTTP POST 请求。这里定义的 Web 钩子将作用于系统上的所有仓库,所以请考虑这可能带来的任何性能影响。了解详情请访问 Web 钩子指南 。
systemhooks.add_webhook=添加系统 Web 钩子
systemhooks.update_webhook=更新系统 Web 钩子
@@ -3164,7 +3201,7 @@ auths.bind_password=绑定密码
auths.user_base=用户搜索基准
auths.user_dn=用户 DN
auths.attribute_username=用户名属性
-auths.attribute_username_placeholder=置空将使用Gitea的用户名。
+auths.attribute_username_placeholder=置空将使用 Gitea 的用户名。
auths.attribute_name=名字属性
auths.attribute_surname=姓氏属性
auths.attribute_mail=电子邮箱属性
@@ -3198,7 +3235,7 @@ auths.helo_hostname=HELO 主机名
auths.helo_hostname_helper=用 HELO 发送的主机名。 留空发送当前主机名。
auths.disable_helo=禁用 HELO
auths.pam_service_name=PAM 服务名称
-auths.pam_email_domain=PAM 电子邮件域(可选)
+auths.pam_email_domain=PAM 邮件域(可选)
auths.oauth2_provider=OAuth2 提供程序
auths.oauth2_icon_url=图标 URL
auths.oauth2_clientID=客户端 ID (键)
@@ -3207,8 +3244,8 @@ auths.openIdConnectAutoDiscoveryURL=OpenID 连接自动发现 URL
auths.oauth2_use_custom_url=使用自定义的 URL 而不是默认的 URL
auths.oauth2_tokenURL=令牌 URL
auths.oauth2_authURL=授权 URL
-auths.oauth2_profileURL=Profile URL
-auths.oauth2_emailURL=电子邮件 URL
+auths.oauth2_profileURL=个人资料 URL
+auths.oauth2_emailURL=邮箱 URL
auths.skip_local_two_fa=跳过本地两步验证
auths.skip_local_two_fa_helper=不设置意味着设置了两步验证的本地用户仍然需要通过两步验证才能登录
auths.oauth2_tenant=租户
@@ -3218,9 +3255,11 @@ auths.oauth2_required_claim_name_helper=设置此名称,只有具有此名称
auths.oauth2_required_claim_value=必须填写 Claim 声明的值
auths.oauth2_required_claim_value_helper=设置此值,只有拥有对应的声明(Claim)的名称和值的用户才被允许从此源登录
auths.oauth2_group_claim_name=用于提供用户组名称的 Claim 声明名称。(可选)
-auths.oauth2_admin_group=管理员用户组的 Claim 声明值。(可选 - 需要上面的声明名称)
-auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 - 需要上面的声明名称)
-auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 - 要求在上面填写声明的名字)
+auths.oauth2_full_name_claim_name=全名声明名称。(可选,如果设置,用户的全名将始终与此声明同步)
+auths.oauth2_ssh_public_key_claim_name=SSH 公钥声明名称
+auths.oauth2_admin_group=管理员用户组的 Claim 声明值。(可选 — 需要上面的声明名称)
+auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 — 需要上面的声明名称)
+auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 — 要求在上面填写声明的名字)
auths.oauth2_map_group_to_team_removal=如果用户不属于相应的组,从已同步团队中移除用户
auths.enable_auto_register=允许用户自动注册
auths.sspi_auto_create_users=自动创建用户
@@ -3228,31 +3267,31 @@ auths.sspi_auto_create_users_helper=允许 SSPI 认证在用户第一次登录
auths.sspi_auto_activate_users=自动激活用户
auths.sspi_auto_activate_users_helper=允许 SSPI 认证自动激活新用户
auths.sspi_strip_domain_names=从用户名中删除域名部分
-auths.sspi_strip_domain_names_helper=如果选中此项,域名将从登录名中删除(例如,"DOMAIN\user"和"user@example.org",两者都将变成只是“用户”)。
+auths.sspi_strip_domain_names_helper=如果选中此项,域名将从登录名中删除(例如,「DOMAIN\user」和「user@example.org」,两者都将变成只是「用户」)。
auths.sspi_separator_replacement=要使用的分隔符代替\, / 和 @
-auths.sspi_separator_replacement_helper=用于替换下级登录名称分隔符的字符 (例如 "DOMAIN\user") 中的 \ 和用户主名字(如"user@example.org"中的 @)。
+auths.sspi_separator_replacement_helper=用于替换下级登录名称分隔符的字符(例如「DOMAIN\user」)中的 \ 和用户主名字(如「user@example.org」中的 @)。
auths.sspi_default_language=默认语言
-auths.sspi_default_language_helper=SSPI 认证方法为用户自动创建的默认语言。如果您想要自动检测到语言,请留空。
+auths.sspi_default_language_helper=通过 SSPI 身份验证方式自动创建的用户的默认语言。如果您希望自动检测语言,请留空。
auths.tips=帮助提示
auths.tips.oauth2.general=OAuth2 认证
auths.tips.oauth2.general.tip=当注册新的 OAuth2 身份验证时,回调/重定向 URL 应该是:
auths.tip.oauth2_provider=OAuth2 提供程序
-auths.tip.bitbucket=在 %s 注册新的 OAuth 使用者同时添加权限“账号”-“读取”
-auths.tip.nextcloud=使用下面的菜单“设置(Settings) -> 安全(Security) -> OAuth 2.0 client”在您的实例上注册一个新的 OAuth 客户端。
+auths.tip.bitbucket=在 %s 注册新的 OAuth 使用者同时添加权限「账号」-「读取」
+auths.tip.nextcloud=使用下面的菜单「设置 -> 安全 -> OAuth 2.0 客户端」在您的实例上注册一个新的 OAuth 客户端
auths.tip.dropbox=在 %s 上创建一个新的应用程序
-auths.tip.facebook=`在 %s 注册一个新的应用,并添加产品"Facebook 登录"`
+auths.tip.facebook=在 %s 注册一个新的应用,并添加产品「Facebook 登录」
auths.tip.github=在 %s 注册一个 OAuth 应用程序
auths.tip.gitlab_new=在 %s 注册一个新的应用
auths.tip.google_plus=从谷歌 API 控制台 %s 获得 OAuth2 客户端凭据
-auths.tip.openid_connect=使用 OpenID 连接发现 URL ({server}/.well-known/openid-configuration) 来指定终点
-auths.tip.twitter=访问 %s,创建应用并确保启用了"允许此应用程序用于登录 Twitter"的选项。
+auths.tip.openid_connect=使用 OpenID 连接发现 URL「{server}/.well-known/openid-configuration」来指定终点
+auths.tip.twitter=访问 %s,创建应用并确保启用了「允许此应用程序使用 Twitter 登录」的选项
auths.tip.discord=在 %s 上注册新应用程序
auths.tip.gitea=注册一个新的 OAuth2 应用程序。可以访问 %s 查看帮助
-auths.tip.yandex=在 %s 上创建一个新的应用程序。在“ Yandex.Passport API”这部分中选择以下权限:“访问电子邮件地址(Access to email address)”,“访问用户头像(Access to user avatar)”和“访问用户名,名字和姓氏,性别(Access to username, first name and surname, genderAccess to username, first name and surname, gender)”
+auths.tip.yandex=在 %s 上创建一个新的应用。在「Yandex.Passport API」这部分中选择以下权限:「访问邮箱地址」、「访问用户头像」和「访问用户名,名字和姓氏,性别」
auths.tip.mastodon=输入您想要认证的 mastodon 实例的自定义 URL (或使用默认值)
auths.edit=修改认证源
auths.activated=该认证源已经启用
-auths.new_success=已添加身份验证 '%s'。
+auths.new_success=已添加身份验证「%s」。
auths.update_success=认证源已经更新。
auths.update=更新认证源
auths.delete=删除认证源
@@ -3260,14 +3299,14 @@ auths.delete_auth_title=删除身份验证源
auths.delete_auth_desc=删除一个认证源将阻止使用它进行登录。确认?
auths.still_in_used=认证源仍在使用。请先解除或者删除使用此认证源的用户。
auths.deletion_success=认证源已经更新。
-auths.login_source_exist=认证源 '%s' 已经存在。
+auths.login_source_exist=认证源「%s」已经存在。
auths.login_source_of_type_exist=此类型的认证源已存在。
-auths.unable_to_initialize_openid=无法初始化 OpenID Connect 提供商: %s
-auths.invalid_openIdConnectAutoDiscoveryURL=无效的 Auto Discovery URL (这必须是一个以 http:// 或 https://开头的有效的 URL)
+auths.unable_to_initialize_openid=无法初始化 OpenID Connect 提供商:%s
+auths.invalid_openIdConnectAutoDiscoveryURL=无效的自动发现 URL(这必须是一个以 http:// 或 https:// 开头的有效的 URL)
config.server_config=服务器配置
config.app_name=站点名称
-config.app_ver=Gitea版本
+config.app_ver=Gitea 版本
config.app_url=Gitea 基本 URL
config.custom_conf=配置文件路径
config.custom_file_root_path=自定义文件根路径
@@ -3304,16 +3343,16 @@ config.db_type=类型
config.db_host=主机
config.db_name=数据库名称
config.db_user=用户名
-config.db_schema=架构模式
+config.db_schema=架构
config.db_ssl_mode=SSL
config.db_path=数据库路径
config.service_config=服务配置
-config.register_email_confirm=需要电子邮件确认注册
+config.register_email_confirm=需要邮件确认注册
config.disable_register=禁止用户注册
-config.allow_only_internal_registration=只允许通过 Gitea 进行注册
+config.allow_only_internal_registration=仅允许通过 Gitea 进行注册
config.allow_only_external_registration=仅允许通过外部服务注册
-config.enable_openid_signup=启用 OpenID 自注册
+config.enable_openid_signup=启用 OpenID 自助注册
config.enable_openid_signin=启用 OpenID 登录
config.show_registration_button=显示注册按钮
config.require_sign_in_view=启用登录访问限制
@@ -3321,12 +3360,12 @@ config.mail_notify=启用邮件通知
config.enable_captcha=启用登录验证码
config.active_code_lives=激活用户链接有效期
config.reset_password_code_lives=恢复账户验证码过期时间
-config.default_keep_email_private=默认情况下隐藏电子邮件地址
+config.default_keep_email_private=默认隐藏邮箱地址
config.default_allow_create_organization=默认情况下允许创建组织
config.enable_timetracking=启用时间跟踪
config.default_enable_timetracking=默认情况下启用时间跟踪
config.default_allow_only_contributors_to_track_time=仅允许成员跟踪时间
-config.no_reply_address=隐藏电子邮件域
+config.no_reply_address=隐藏邮件域
config.default_visibility_organization=新组织的默认可见性
config.default_enable_dependencies=默认情况下启用工单依赖
@@ -3337,7 +3376,7 @@ config.skip_tls_verify=跳过 TLS 验证
config.mailer_config=Mailer 配置
config.mailer_enabled=启用服务
-config.mailer_enable_helo=启用HELO
+config.mailer_enable_helo=启用 HELO
config.mailer_name=任务名称
config.mailer_protocol=协议
config.mailer_smtp_addr=SMTP 地址
@@ -3348,38 +3387,38 @@ config.mailer_sendmail_path=Sendmail 路径
config.mailer_sendmail_args=Sendmail 的额外参数
config.mailer_sendmail_timeout=Sendmail 超时
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=电子邮址 (例如,test@example.com)
+config.test_email_placeholder=电子邮箱(例如,test@example.com)
config.send_test_mail=发送测试邮件
config.send_test_mail_submit=发送
-config.test_mail_failed=发送测试邮件至 '%s' 时失败:%v
-config.test_mail_sent=测试邮件已经发送至 '%s'。
+config.test_mail_failed=发送测试邮件至「%s」失败:%v
+config.test_mail_sent=测试邮件已经发送至「%s」。
config.oauth_config=OAuth 配置
config.oauth_enabled=启用
-config.cache_config=Cache 配置
-config.cache_adapter=Cache 适配器
-config.cache_interval=Cache 周期
-config.cache_conn=Cache 连接字符串
+config.cache_config=缓存配置
+config.cache_adapter=缓存适配器
+config.cache_interval=缓存周期
+config.cache_conn=缓存连接字符串
config.cache_item_ttl=缓存项目 TTL
config.cache_test=测试缓存
-config.cache_test_failed=缓存测试失败: %v。
-config.cache_test_slow=缓存测试成功,但响应缓慢: %s。
+config.cache_test_failed=缓存测试失败:%v。
+config.cache_test_slow=缓存测试成功,但响应缓慢:%s。
config.cache_test_succeeded=缓存测试成功,在 %s 时间内得到响应。
-config.session_config=Session 配置
-config.session_provider=Session 提供者
+config.session_config=会话配置
+config.session_provider=会话提供者
config.provider_config=提供者配置
config.cookie_name=Cookie 名称
config.gc_interval_time=GC 周期
-config.session_life_time=Session 生命周期
+config.session_life_time=会话生命周期
config.https_only=仅限 HTTPS
config.cookie_life_time=Cookie 生命周期
config.picture_config=图片和头像配置
config.picture_service=图片服务
config.disable_gravatar=禁用 Gravatar 头像
-config.enable_federated_avatar=启用 Federated Avatars
+config.enable_federated_avatar=启用 Federated 头像
config.open_with_editor_app_help=用于克隆菜单的编辑器。如果为空将使用默认值。展开可以查看默认值。
config.git_config=Git 配置
@@ -3395,17 +3434,17 @@ config.git_pull_timeout=拉取操作超时
config.git_gc_timeout=GC 操作超时
config.log_config=日志配置
-config.logger_name_fmt=日志:%s
+config.logger_name_fmt=%s 日志
config.disabled_logger=禁用
config.access_log_mode=访问日志模式
config.access_log_template=访问日志模板
-config.xorm_log_sql=日志 SQL
+config.xorm_log_sql=SQL 日志
config.set_setting_failed=设置 %s 失败
monitor.stats=统计
-monitor.cron=Cron 任务
+monitor.cron=计划任务
monitor.name=任务名称
monitor.schedule=任务安排
monitor.next=下次执行时间
@@ -3426,7 +3465,7 @@ monitor.process.cancel_desc=中止一个进程可能导致数据丢失
monitor.process.children=子进程
monitor.queues=队列
-monitor.queue=队列: %s
+monitor.queue=队列:%s
monitor.queue.name=名称
monitor.queue.type=类型
monitor.queue.exemplar=数据类型
@@ -3443,7 +3482,7 @@ monitor.queue.settings.maxnumberworkers.error=最大工作者数必须是数字
monitor.queue.settings.submit=更新设置
monitor.queue.settings.changed=设置已更新
monitor.queue.settings.remove_all_items=移除全部
-monitor.queue.settings.remove_all_items_done=队列中的所有项目已被移除。
+monitor.queue.settings.remove_all_items_done=队列中的所有项目已移除。
notices.system_notice_list=系统提示管理
notices.view_detail_header=查看提示详情
@@ -3458,35 +3497,35 @@ notices.type_1=仓库
notices.type_2=任务
notices.desc=提示描述
notices.op=操作
-notices.delete_success=系统通知已被删除。
+notices.delete_success=系统通知已删除。
self_check.no_problem_found=尚未发现问题。
self_check.startup_warnings=启动警告:
self_check.database_collation_mismatch=期望数据库使用的校验方式:%s
-self_check.database_collation_case_insensitive=数据库正在使用一个校验 %s, 这是一个不敏感的校验. 虽然Gitea可以与它合作,但可能有一些罕见的情况不如预期的那样起作用。
-self_check.database_inconsistent_collation_columns=数据库正在使用%s的排序规则,但是这些列使用了不匹配的排序规则。这可能会造成一些意外问题。
-self_check.database_fix_mysql=对于MySQL/MariaDB用户,您可以使用“gitea doctor convert”命令来解决校验问题。 或者您也可以通过 "ALTER ... COLLATE ..." 这样的SQL 来手动解决这个问题。
-self_check.database_fix_mssql=对于MSSQL用户,您现在只能通过"ALTER ... COLLATE ..."SQLs手动解决这个问题。
-self_check.location_origin_mismatch=当前 URL (%[1]s) 与 Gitea 的 URL (%[2]s) 不匹配 。 如果您正在使用反向代理,请确保设置正确的“主机”和“X-转发-原始”标题。
+self_check.database_collation_case_insensitive=数据库正在使用一个排序规则 %s,这是一个不区分大小写的排序规则。虽然 Gitea 可以在此环境下工作,但可能存在一些无法按预期工作的罕见情况。
+self_check.database_inconsistent_collation_columns=数据库正在使用排序规则 %s,但这些列使用了不匹配的排序规则。这可能会导致一些意外问题。
+self_check.database_fix_mysql=对于 MySQL/MariaDB 用户,您可以使用「gitea doctor convert」命令来解决校验问题。 或者您也可以通过「ALTER ... COLLATE ...」这样的 SQL 来手动解决这个问题。
+self_check.database_fix_mssql=对于 MSSQL 用户,您现在只能通过「ALTER ... COLLATE ...」SQL 手动解决这个问题。
+self_check.location_origin_mismatch=当前 URL(%[1]s)与 Gitea 的 URL(%[2]s)不匹配。如果您正在使用反向代理,请确保设置正确的「Host」和「X-Forwarded-Proto」标头。
[action]
create_repo=创建了仓库 %s
-rename_repo=重命名仓库 %[1]s 为 %[3]s
-commit_repo=推送到了仓库 %[4]s 的 %[3]s 分支
+rename_repo=重命名了仓库 %[1]s 为 %[3]s
+commit_repo=推送了仓库 %[4]s 的 %[3]s 分支
create_issue=`创建了工单 %[3]s#%[2]s `
close_issue=`关闭了工单 %[3]s#%[2]s `
-reopen_issue=`重新开启了工单 %[3]s#%[2]s `
+reopen_issue=`重新打开了工单 %[3]s#%[2]s `
create_pull_request=`创建了合并请求 %[3]s#%[2]s `
close_pull_request=`关闭了合并请求 %[3]s#%[2]s `
-reopen_pull_request=`重新开启了合并请求 %[3]s#%[2]s `
+reopen_pull_request=`重新打开了合并请求 %[3]s#%[2]s `
comment_issue=`评论了工单 %[3]s#%[2]s `
comment_pull=`评论了合并请求 %[3]s#%[2]s `
merge_pull_request=`合并了合并请求 %[3]s#%[2]s `
auto_merge_pull_request=`自动合并了合并请求 %[3]s#%[2]s `
transfer_repo=将仓库 %s 转移至 %s
-push_tag=推送了标签 %[3]s 至仓库 %[4]s
-delete_tag=从%[3]s 删除了标签 %[2]s
-delete_branch=从 %[3]s 删除分支 %[2]s
+push_tag=推送了 Git 标签 %[3]s 至仓库 %[4]s
+delete_tag=从 %[3]s 删除了 Git 标签 %[2]s
+delete_branch=从 %[3]s 删除了分支 %[2]s
compare_branch=比较
compare_commits=比较 %d 提交
compare_commits_general=比较提交
@@ -3494,13 +3533,13 @@ mirror_sync_push=从镜像同步了提交至仓库 %[4]s 的
mirror_sync_create=从镜像同步了引用 %[3]s 至仓库 %[4]s
mirror_sync_delete=从镜像同步并从 %[3]s 删除了引用 %[2]s
approve_pull_request=`批准了 %[3]s#%[2]s `
-reject_pull_request=`建议变更 %[3]s#%[2]s `
+reject_pull_request=`建议了变更 %[3]s#%[2]s `
publish_release=`在 %[3]s 发布了 %[4]s `
-review_dismissed=`取消了 %[4]s 对 %[3]s#%[2]s 的变更请求`
+review_dismissed=`取消了 %[4]s 对 %[3]s#%[2]s 的评审`
review_dismissed_reason=原因:
create_branch=于 %[4]s 创建了分支 %[3]s
starred_repo=点赞了 %[2]s
-watched_repo=开始关注 %[2]s
+watched_repo=关注了 %[2]s
[tool]
now=现在
@@ -3523,7 +3562,7 @@ raw_seconds=秒
raw_minutes=分钟
[dropzone]
-default_message=拖动文件或者点击此处上传。
+default_message=拖曳文件或点击此处上传。
invalid_input_type=您不能上传该类型的文件
file_too_big=文件体积({{filesize}} MB)超过了最大允许体积({{maxFilesize}} MB)
remove_file=移除文件
@@ -3546,12 +3585,12 @@ no_subscriptions=无订阅
default_key=使用默认密钥签名
error.extract_sign=无法提取签名
error.generate_hash=无法生成提交的哈希
-error.no_committer_account=没有帐户链接到提交者的电子邮件
+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,但它没有验证此提交!此提交是有疑问的。
+error.probable_bad_signature=警告!虽然数据库中有一个此 ID 的密钥,但它没有验证此提交!此提交是可疑的。
+error.probable_bad_default_signature=警告!虽然默认密钥拥有此 ID,但它没有验证此提交!此提交是可疑的。
[units]
unit=单元
@@ -3603,7 +3642,7 @@ arch.install=使用 pacman 同步软件包:
arch.repository=仓库信息
arch.repository.repositories=仓库
arch.repository.architectures=架构
-cargo.registry=在 Cargo 配置文件中设置此注册中心(例如:~/.cargo/config.toml):
+cargo.registry=在 Cargo 配置文件中设置此注册中心(例如:~/.cargo/config.toml):
cargo.install=要使用 Cargo 安装软件包,请运行以下命令:
chef.registry=在您的 ~/.chef/config.rb 文件中设置此注册中心:
chef.install=要安装软件包,请运行以下命令:
@@ -3658,7 +3697,7 @@ npm.details.tag=标签
pub.install=要使用 Dart 安装软件包,请运行以下命令:
pypi.requires=需要 Python
pypi.install=要使用 pip 安装软件包,请运行以下命令:
-rpm.registry=从命令行设置此注册中心:
+rpm.registry=从命令行设置此仓库:
rpm.distros.redhat=在基于 RedHat 的发行版
rpm.distros.suse=在基于 SUSE 的发行版
rpm.install=要安装软件包,请运行以下命令:
@@ -3671,12 +3710,12 @@ rubygems.dependencies.runtime=运行时依赖
rubygems.dependencies.development=开发依赖
rubygems.required.ruby=需要 Ruby 版本
rubygems.required.rubygems=需要 RubyGem 版本
-swift.registry=从命令行设置此注册中心:
-swift.install=在你的 Package.swift文件中添加该包:
+swift.registry=从命令行设置此仓库:
+swift.install=在您的 Package.swift 文件中添加该包:
swift.install2=并运行以下命令:
vagrant.install=若要添加一个 Vagrant box,请运行以下命令:
settings.link=将此软件包链接到仓库
-settings.link.description=如果您将一个软件包与一个代码库链接起来,软件包将显示在代码库的软件包列表中。
+settings.link.description=如果您将一个软件包与一个仓库链接起来,软件包将显示在仓库的软件包列表中。
settings.link.select=选择仓库
settings.link.button=更新仓库链接
settings.link.success=仓库链接已成功更新。
@@ -3684,13 +3723,13 @@ settings.link.error=更新仓库链接失败。
settings.delete=删除软件包
settings.delete.description=删除软件包是永久性的,无法撤消。
settings.delete.notice=您将要删除 %s (%s)。此操作是不可逆的,您确定吗?
-settings.delete.success=软件包已被删除。
+settings.delete.success=软件包已删除。
settings.delete.error=删除软件包失败。
owner.settings.cargo.title=Cargo 注册中心索引
owner.settings.cargo.initialize=初始化索引
-owner.settings.cargo.initialize.description=使用 Cargo 注册中心时需要一个特殊索引的 Git 仓库。使用此选项将(重新)创建存储库并自动配置它。
-owner.settings.cargo.initialize.error=初始化Cargo索引失败: %v
-owner.settings.cargo.initialize.success=Cargo索引已经成功创建。
+owner.settings.cargo.initialize.description=使用 Cargo 注册中心时需要一个特殊索引的 Git 仓库。使用此选项将(重新)创建仓库并自动配置它。
+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
@@ -3703,7 +3742,7 @@ 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.pattern_full_match=应用表达式到完整软件包名称
owner.settings.cleanuprules.keep.title=与这些规则相匹配的版本即使与下面的删除规则相匹配,也将予以保留。
owner.settings.cleanuprules.keep.count=保留最新的
owner.settings.cleanuprules.keep.count.1=每个软件包1个版本
@@ -3721,30 +3760,30 @@ owner.settings.chef.keypair.description=需要密钥对才能向 Chef 注册中
[secrets]
secrets=密钥
-description=Secrets 将被传给特定的 Actions,其它情况将不能读取
+description=密钥将被传给特定的工作流,其它情况无法读取。
none=还没有密钥。
; These keys are also for "edit secret", the keys are kept as-is to avoid unnecessary re-translation
creation.description=组织描述
-creation.name_placeholder=不区分大小写,字母数字或下划线不能以GITEA_ 或 GITHUB_ 开头。
-creation.value_placeholder=输入任何内容,开头和结尾的空白都会被省略
-creation.description_placeholder=输入简短描述(可选)。
+creation.name_placeholder=不区分大小写,仅限字母数字或下划线且不能以 GITEA_ 或 GITHUB_ 开头
+creation.value_placeholder=输入任何内容,开头和结尾的空白将会被忽略
+creation.description_placeholder=输入简短描述(可选)
-save_success=密钥 '%s' 保存成功。
+save_success=密钥「%s」保存成功。
save_failed=密钥保存失败。
add_secret=添加密钥
edit_secret=编辑密钥
deletion=删除密钥
-deletion.description=删除密钥是永久性的,无法撤消。继续吗?
-deletion.success=此Secret已被删除。
+deletion.description=删除密钥是永久性的且无法撤消。继续?
+deletion.success=此密钥已删除。
deletion.failed=删除密钥失败。
management=密钥管理
[actions]
-actions=Actions
+actions=工作流
-unit.desc=管理Actions
+unit.desc=管理工作流
status.unknown=未知
status.waiting=等待中
@@ -3755,9 +3794,9 @@ status.cancelled=已取消
status.skipped=已忽略
status.blocked=阻塞中
-runners=Runners
-runners.runner_manage_panel=Runners管理
-runners.new=创建 Runner
+runners=运行器
+runners.runner_manage_panel=运行器管理
+runners.new=创建新运行器
runners.new_notice=如何启动一个运行器
runners.status=状态
runners.id=ID
@@ -3766,9 +3805,9 @@ runners.owner_type=类型
runners.description=描述
runners.labels=标签
runners.last_online=上次在线时间
-runners.runner_title=Runner
-runners.task_list=最近在此runner上的任务
-runners.task_list.no_tasks=还没有任务。
+runners.runner_title=运行器
+runners.task_list=最近在此运行器上的任务
+runners.task_list.no_tasks=目前还没有任务。
runners.task_list.run=执行
runners.task_list.status=状态
runners.task_list.repository=仓库
@@ -3777,13 +3816,13 @@ runners.task_list.done_at=完成于
runners.edit_runner=编辑运行器
runners.update_runner=更新更改
runners.update_runner_success=运行器更新成功
-runners.update_runner_failed=更新运行器失败
-runners.delete_runner=删除运行器
+runners.update_runner_failed=运行器更新失败
+runners.delete_runner=删除此运行器
runners.delete_runner_success=运行器删除成功
-runners.delete_runner_failed=删除运行器失败
+runners.delete_runner_failed=运行器删除失败
runners.delete_runner_header=确认要删除此运行器
runners.delete_runner_notice=如果一个任务正在运行在此运行器上,它将被终止并标记为失败。它可能会打断正在构建的工作流。
-runners.none=无可用的 Runner
+runners.none=无可用运行器
runners.status.unspecified=未知
runners.status.idle=空闲
runners.status.active=启用
@@ -3797,8 +3836,8 @@ runs.all_workflows=所有工作流
runs.commit=提交
runs.scheduled=已计划的
runs.pushed_by=推送者
-runs.invalid_workflow_helper=工作流配置文件无效。请检查您的配置文件: %s
-runs.no_matching_online_runner_helper=没有匹配标签的在线 runner: %s
+runs.invalid_workflow_helper=工作流配置文件无效。请检查您的配置文件:%s
+runs.no_matching_online_runner_helper=没有匹配 %s 标签的在线运行器
runs.no_job_without_needs=工作流必须包含至少一个没有依赖关系的作业。
runs.no_job=工作流必须包含至少一个作业
runs.actor=操作者
@@ -3807,27 +3846,28 @@ runs.actors_no_select=所有操作者
runs.status_no_select=所有状态
runs.no_results=没有匹配的结果。
runs.no_workflows=目前还没有工作流。
-runs.no_workflows.quick_start=不知道如何使用 Gitea Actions吗?请查看 快速启动指南 。
-runs.no_workflows.documentation=关于Gitea Actions的更多信息,请参阅 文档 。
+runs.no_workflows.quick_start=不知道如何使用 Gitea 工作流吗?请查看快速开始指南 。
+runs.no_workflows.documentation=关于 Gitea 工作流的更多信息,请参阅文档 。
runs.no_runs=工作流尚未运行过。
-runs.empty_commit_message=(空白的提交消息)
-runs.expire_log_message=旧的日志已被清除
+runs.empty_commit_message=(空白的提交消息)
+runs.expire_log_message=旧的日志已清除。
runs.delete=删除工作流运行
+runs.cancel=取消工作流运行
runs.delete.description=您确定要永久删除此工作流运行吗?此操作无法撤消。
-runs.not_done=此工作流运行未完成。
+runs.not_done=此工作流运行尚未完成。
runs.view_workflow_file=查看工作流文件
workflow.disable=禁用工作流
-workflow.disable_success=工作流 '%s' 已成功禁用。
+workflow.disable_success=工作流「%s」已成功禁用。
workflow.enable=启用工作流
-workflow.enable_success=工作流 '%s' 已成功启用。
+workflow.enable_success=工作流「%s」已成功启用。
workflow.disabled=工作流已禁用。
workflow.run=运行工作流
-workflow.not_found=工作流 %s 未找到。
-workflow.run_success=工作流 %s 已成功运行。
+workflow.not_found=工作流「%s」未找到。
+workflow.run_success=工作流「%s」已成功运行。
workflow.from_ref=使用工作流从
-workflow.has_workflow_dispatch=此 Workflow 有一个 Workflow_dispatch 事件触发器。
-workflow.has_no_workflow_dispatch=工作流 %s 没有 workflow_dispatch 事件的触发器。
+workflow.has_workflow_dispatch=此工作流有一个 workflow_dispatch 事件触发器。
+workflow.has_no_workflow_dispatch=工作流「%s」没有 workflow_dispatch 事件触发器。
need_approval_desc=该工作流由派生仓库的合并请求所触发,需要批准方可运行。
@@ -3837,15 +3877,15 @@ variables.creation=添加变量
variables.none=目前还没有变量。
variables.deletion=删除变量
variables.deletion.description=删除变量是永久性的,无法撤消。继续吗?
-variables.description=变量将被传给特定的 Actions,其它情况将不能读取
+variables.description=变量将被传给特定的工作流,其它情况下无法读取。
variables.id_not_exist=ID为 %d 的变量不存在。
variables.edit=编辑变量
-variables.deletion.failed=删除变量失败。
-variables.deletion.success=变量已被删除。
-variables.creation.failed=添加变量失败。
-variables.creation.success=变量 “%s” 添加成功。
-variables.update.failed=编辑变量失败。
-variables.update.success=该变量已被编辑。
+variables.deletion.failed=变量删除失败。
+variables.deletion.success=变量已删除。
+variables.creation.failed=变量添加失败。
+variables.creation.success=变量「%s」添加成功。
+variables.update.failed=变量编辑失败。
+variables.update.success=变量已编辑。
logs.always_auto_scroll=总是自动滚动日志
logs.always_expand_running=总是展开运行日志
diff --git a/options/locale/locale_zh-HK.ini b/options/locale/locale_zh-HK.ini
index 2874da3170d..0cf0de3ec4e 100644
--- a/options/locale/locale_zh-HK.ini
+++ b/options/locale/locale_zh-HK.ini
@@ -374,6 +374,7 @@ editor.create_new_branch=建立 新的分支 為此提交和開
editor.cancel=取消
editor.no_changes_to_show=沒有可以顯示的變更。
+
commits.commits=次程式碼提交
commits.author=作者
commits.message=備註
@@ -423,7 +424,6 @@ issues.filter_type.mentioning_you=提及您的
issues.filter_sort=排序
issues.filter_sort.latest=最新建立
issues.filter_sort.oldest=最早建立
-issues.filter_sort.recentupdate=最近更新
issues.filter_sort.leastupdate=最少更新
issues.filter_sort.mostcomment=最多評論
issues.filter_sort.leastcomment=最少評論
@@ -540,7 +540,6 @@ activity.new_issues_count_1=建立問題
contributors.contribution_type.commits=提交歷史
settings=儲存庫設定
-settings.desc=設定是您可以管理儲存庫設定的地方
settings.options=儲存庫
settings.collaboration.write=可寫權限
settings.collaboration.read=可讀權限
@@ -568,7 +567,6 @@ settings.delete_notices_1=- 此操作 不可以 被回滾。
settings.delete_collaborator=移除成員
settings.teams=組織團隊
settings.add_webhook=建立 Webhook
-settings.webhook.test_delivery=測試推送
settings.webhook.request=請求內容
settings.webhook.response=響應內容
settings.webhook.headers=標題
@@ -656,10 +654,11 @@ settings.visibility.private_shortname=私有庫
settings.update_settings=更新組織設定
settings.update_setting_success=組織設定已更新。
+
+
settings.delete=刪除組織
settings.delete_account=刪除當前組織
settings.confirm_delete_account=確認刪除組織
-settings.delete_org_title=刪除組織
settings.hooks_desc=新增 webhooks 將觸發在這個組織下 全部的儲存庫 。
diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini
index a52e1474151..10f103b82ac 100644
--- a/options/locale/locale_zh-TW.ini
+++ b/options/locale/locale_zh-TW.ini
@@ -44,7 +44,6 @@ webauthn_use_twofa=使用來自手機的兩步驟驗證碼
webauthn_error=無法讀取您的安全金鑰。
webauthn_unsupported_browser=您的瀏覽器還不支援 WebAuthn。
webauthn_error_unknown=發生未知的錯誤,請再試一次。
-webauthn_error_insecure=WebAuthn 只支援安全連線。想在 HTTP 上測試,您可以使用「localhost」或「127.0.0.1」
webauthn_error_unable_to_process=伺服器無法執行您的請求。
webauthn_error_duplicated=此請求不允許使用這個安全金鑰。請確保該金鑰尚未註冊。
webauthn_error_empty=您必須命名此金鑰。
@@ -128,7 +127,6 @@ pin=固定
unpin=取消固定
artifacts=檔案或工件
-confirm_delete_artifact=你確定要刪除這個檔案 '%s' 嗎?
archived=已封存
@@ -164,29 +162,14 @@ no_results_found=找不到結果。
internal_error_skipped=已略過內部錯誤:%s
[search]
-search=搜尋…
type_tooltip=搜尋類型
fuzzy=模糊
-fuzzy_tooltip=包含與搜尋詞接近的結果
exact=精確
exact_tooltip=只包含完全符合關鍵字的結果
-repo_kind=搜尋儲存庫…
-user_kind=搜尋使用者…
-org_kind=搜尋組織…
-team_kind=搜尋團隊…
-code_kind=搜尋代碼…
code_search_unavailable=現在無法使用原始碼搜尋。請與網站管理員聯絡。
code_search_by_git_grep=目前的原始碼搜尋結果是由「git grep」提供。如果網站管理者啟用 Repository Indexer 可能可以提供更好的結果。
-package_kind=搜尋軟體包...
-project_kind=搜尋專案…
-branch_kind=搜尋分支…
-tag_kind=搜尋標籤…
tag_tooltip=搜尋符合的標籤。使用「%」以比對任意長度的數字。
-commit_kind=搜尋提交歷史…
-runner_kind=搜尋 Runner...
no_results=找不到符合的結果。
-issue_kind=搜尋議題…
-pull_kind=搜尋合併請求...
keyword_search_unavailable=現在無法使用關鍵字搜尋。請與網站管理員聯絡。
[aria]
@@ -222,8 +205,6 @@ buttons.enable_monospace_font=啟用等寬字型
buttons.disable_monospace_font=停用等寬字型
[filter]
-string.asc=A - Z
-string.desc=Z - A
[error]
occurred=發生錯誤
@@ -260,16 +241,10 @@ path=資料庫檔案路徑
sqlite_helper=SQLite3 或 TiDB 資料庫的檔案路徑。 如果將 Gitea 註冊為服務執行,請輸入絕對路徑。
reinstall_error=您正試圖安裝到既有的 Gitea 資料庫中
reinstall_confirm_message=使用既有的 Gitea 資料庫來安裝可能造成多種問題。大部分的情形下您應使用既有的「app.ini」來執行 Gitea。如果您知道自己正在做什麼,請確認下列事項:
-reinstall_confirm_check_1=您可能會遺失以 app.ini 中 SECRET_KEY 所加密的資料:使用者或將無法再以 2FA/OTP 方式登入、鏡像可能無法正常運作。核取此方塊代表您確認目前的 app.ini 包含正確的 SECRET_KEY。
-reinstall_confirm_check_2=儲存庫和設定可能需要重新同步。核取此方塊代表您確認您將會手動重新同步儲存庫的 Hook 和 SSH authorized_keys 檔案。您確認您會確保儲存庫和鏡像設定正確。
reinstall_confirm_check_3=您確認您絕對肯定此 Gitea 在正確的 app.ini 位置上執行,而且您確定您必須重新安裝。您確認您瞭解上述風險。
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_pattern_not_allowed=無效的管理員帳號,該帳號符合保留規則
-err_admin_name_is_invalid=無效的管理員帳號
general_title=一般設定
app_name=網站標題
@@ -285,7 +260,6 @@ domain_helper=伺服器的域名或主機位置。
ssh_port=SSH 伺服器埠
ssh_port_helper=SSH 伺服器使用的埠號,留空以停用此設定。
http_port=Gitea HTTP 埠
-http_port_helper=Gitea 的網頁伺服器要接聽的埠號。
app_url=Gitea 基本 URL
app_url_helper=用於 HTTP(S) Clone 和電子郵件通知的基本網址。
log_root_path=日誌路徑
@@ -349,7 +323,6 @@ no_reply_address=隱藏電子信箱域名
no_reply_address_helper=作為隱藏電子信箱使用者的域名。例如,如果隱藏的電子信箱域名設定為「noreply.example.org」,帳號「joe」將以「joe@noreply.example.org」的身分登錄到 Git 中。
password_algorithm=密碼雜湊演算法
invalid_password_algorithm=無效的密碼雜湊演算法
-password_algorithm_helper=設定密碼雜湊演算法。演算法有不同的需求與強度。argon2 演算法雖然較安全但會使用大量記憶體,可能不適用於小型系統。
enable_update_checker=啟用更新檢查器
enable_update_checker_helper=定期連線到 gitea.io 檢查更新。
env_config_keys=環境組態設定
@@ -414,8 +387,6 @@ allow_password_change=要求使用者更改密碼 (推薦)
reset_password_mail_sent_prompt=確認信已發送至 %s 。請在 %s內檢查您的收件匣並完成帳戶救援作業。
active_your_account=啟用您的帳戶
account_activated=帳戶已啟用
-prohibit_login=禁止登入
-prohibit_login_desc=您的帳戶被禁止登入,請聯絡網站管理員
resent_limit_prompt=抱歉,您請求發送驗證電子郵件太過頻繁,請等待 3 分鐘後再試一次。
has_unconfirmed_mail=%s 您好,您有一封發送至( %s ) 但未被確認的郵件。如果您未收到啟用郵件,或需要重新發送,請單擊下方的按鈕。
change_unconfirmed_mail_address=如果您註冊的電子郵件地址有錯誤,您可以在這邊更正,並重新寄送確認郵件。
@@ -446,23 +417,18 @@ oauth_signin_title=登入以授權連結帳戶
oauth_signin_submit=連結帳戶
oauth.signin.error.access_denied=授權請求被拒絕。
oauth.signin.error.temporarily_unavailable=授權失敗,因為認證伺服器暫時無法使用。請稍後再試。
-oauth_callback_unable_auto_reg=自助註冊已啟用,但是 OAuth2 提供者 %[1]s 回傳的結果缺少欄位:%[2]s,導致無法自動建立帳號。請建立新帳號或是連結至既存的帳號,或是聯絡網站管理者。
openid_connect_submit=連接
openid_connect_title=連接到現有帳戶
openid_connect_desc=所選的 OpenID URI 未知。在這裡連結一個新帳戶。
openid_register_title=建立新帳戶
openid_register_desc=所選的 OpenID URI 未知。在這裡連結一個新帳戶。
openid_signin_desc=輸入您的 OpenID 位址。例如:alice.openid.example.org 或是 https://openid.example.org/alice。
-disable_forgot_password_mail=由於未設定電子郵件功能,帳戶救援功能已被停用。請與網站管理員聯絡。
-disable_forgot_password_mail_admin=帳戶救援功能需要設定電子郵件功能才能使用。請設定電子郵件功能以啟用帳戶救援功能。
email_domain_blacklisted=您無法使用您的電子信箱註冊帳號。
authorize_application=授權應用程式
authorize_redirect_notice=如果您授權此應用程式,您將會被重新導向至 %s。
authorize_application_created_by=此應用程式是由 %s 建立的。
-authorize_application_description=如果您允許,它將能夠讀取和修改您的所有帳戶資訊,包括私有儲存庫和組織。
authorize_title=授權「%s」存取您的帳戶?
authorization_failed=授權失效
-authorization_failed_desc=授權失敗,因為我們偵測到無效的請求。請聯絡您欲授權之應用程式的維護人員。
sspi_auth_failed=SSPI 認證失敗
password_pwned=您選擇的密碼已被列於被盜密碼清單 中,該清單因公共資料外洩而暴露。請試試其他密碼。
password_pwned_err=無法完成對 HaveIBeenPwned 的請求。
@@ -487,8 +453,6 @@ activate_email.text=請在 %s 內點擊下列連結以驗證您的電子
register_notify=歡迎來到 Gitea
register_notify.title=%[1]s,歡迎來到 %[2]s
-register_notify.text_1=這是您在 %s 的註冊確認信!
-register_notify.text_2=您現在可以用帳號 %s 登入。
register_notify.text_3=如果這是由管理員為您建立的帳戶,請先設定您的密碼 。
reset_password=救援您的帳戶
@@ -526,7 +490,6 @@ release.download.targz=原始碼 (TAR.GZ)
repo.transfer.subject_to=%s 想要把「%s」轉移給 %s
repo.transfer.subject_to_you=%s 想要把「%s」轉移給您
repo.transfer.to_you=您
-repo.transfer.body=請造訪 %s 以接受或拒絕轉移,您也可以忽略它。
repo.collaborator.added.subject=%s 把您加入到 %s
repo.collaborator.added.text=您已被新增為儲存庫的協作者:
@@ -578,7 +541,6 @@ url_error=`「%s」是無效的 URL。`
include_error=` 必須包含子字串「%s」。`
glob_pattern_error=` glob 比對模式無效:%s.`
regex_pattern_error=` 正規表示式模式無效:%s.`
-username_error=`只能包含英文字母數字 ('0-9'、'a-z'、'A-Z')、破折號 ('-')、底線 ('_')、句點 ('.'),不能以非英文字母數字開頭或結尾,也不允許連續的非英文字母數字。`
invalid_group_team_map_error=` 對應無效: %s`
unknown_error=未知錯誤:
captcha_incorrect=驗證碼不正確。
@@ -593,17 +555,14 @@ username_has_not_been_changed=使用者名稱並未變更
repo_name_been_taken=儲存庫名稱已被使用。
repository_force_private=已啟用「強制私有」:私有儲存庫不能被公開。
repository_files_already_exist=此儲存庫的檔案已存在,請聯絡系統管理有。
-repository_files_already_exist.adopt=此儲存庫的檔案已存在,並且只能被接管。
repository_files_already_exist.delete=此儲存庫的檔案已存在,您必須刪除它們。
repository_files_already_exist.adopt_or_delete=此儲存庫的檔案已存在,您可以接管或刪除它們。
visit_rate_limit=遠端造訪已達用量上限。
-2fa_auth_required=遠端造訪需要兩步驟驗證。
org_name_been_taken=組織名稱已被使用。
team_name_been_taken=團隊名稱已被使用。
team_no_units_error=請至少選擇一個儲存庫區域。
email_been_used=此電子信箱已被使用
email_invalid=此電子信箱無效。
-email_domain_is_not_allowed=使用者的電子郵件地址 %s 與電子郵件域名允許清單或是電子郵件域名禁止清單有衝突。請確認您預期執行這個動作。
openid_been_used=OpenID 位址「%s」已被使用。
username_password_incorrect=帳號或密碼不正確
password_complexity=密碼複雜度沒有通過以下的要求:
@@ -628,14 +587,8 @@ invalid_ssh_key=無法驗證您的 SSH 密鑰:%s
invalid_gpg_key=無法驗證您的 GPG 密鑰:%s
invalid_ssh_principal=無效的主體: %s
must_use_public_key=您提供的金鑰是私有金鑰,請勿上傳您的私有金鑰到任何地方,請使用您的公鑰。
-unable_verify_ssh_key=無法驗證 SSH 金鑰,請再次檢查以避免錯誤。
auth_failed=授權認證失敗:%v
-still_own_repo=您的帳戶擁有一個以上的儲存庫,請先刪除或轉移它們。
-still_has_org=您的帳戶是一個或多個組織的成員,請先離開它們。
-still_own_packages=您的帳戶擁有一個以上的套件,請先刪除它們。
-org_still_own_repo=此組織仍然擁有一個以上的儲存庫,請先刪除或轉移它們。
-org_still_own_packages=此組織仍然擁有一個以上的套件,請先刪除它們。
target_branch_not_exist=目標分支不存在
target_ref_not_exist=目標參考不存在 %s
@@ -666,11 +619,9 @@ settings=使用者設定
form.name_reserved=「%s」是保留的帳號。
form.name_pattern_not_allowed=帳號不可包含字元「%s」。
-form.name_chars_not_allowed=帳號「%s」包含無效字元。
block.block=封鎖
block.block.user=封鎖使用者
-block.block.org=為組織阻擋使用者
block.block.failure=無法封鎖使用者: %s
block.unblock=解除封鎖
block.unblock.failure=無法解除封鎖使用者: %s
@@ -683,7 +634,6 @@ block.info_3=透過 @mentioning 標記您的使用者名稱來通知您
block.info_4=邀請您成為他們的儲存庫的協作者
block.info_5=對儲存庫加上星號、建立分之或是關注儲存庫
block.info_6=建立問題或是合併請求,或是對其進行留言
-block.info_7=對您在問題或是合併請求中的留言送出反應
block.user_to_block=欲阻擋的使用者
block.note=備註
block.note.title=選用附註:
@@ -713,7 +663,6 @@ webauthn=安全金鑰
public_profile=公開的個人資料
biography_placeholder=告訴我們一些關於您的事情吧! (您可以使用 Markdown)
location_placeholder=與其他人分享您的大概位置
-profile_desc=控制您的個人檔案會如何呈現給其她使用者。您的主要電子郵件地址會被用於通知、密碼救援以及網頁上的 Git 操作。
full_name=全名
website=個人網站
location=所在地區
@@ -731,7 +680,6 @@ cancel=取消
language=語言
ui=佈景主題
hidden_comment_types=隱藏的留言類型
-hidden_comment_types_description=此處勾選的評論類型將不會顯示在問題頁面內。例如勾選「標籤」將移除所有的"{user} 新增/移除{label}" 評論。
hidden_comment_types.ref_tooltip=當這個問題在其他的問題、提交…等地方被引用時的留言
hidden_comment_types.issue_ref_tooltip=當使用者更改與這個問題相關聯的分支、標籤時的留言
comment_type_group_reference=參考
@@ -779,18 +727,14 @@ manage_themes=選擇預設佈景主題
manage_openid=管理 OpenID 位址
email_desc=您的主要電子信箱將用於通知、密碼恢復以及(如果未隱藏)基於網頁的 Git 操作。
theme_desc=這將是您在整個網站上的預設佈景主題。
-theme_colorblindness_help=色盲主題支援
-theme_colorblindness_prompt=Gitea 剛取得了一些具有基本色盲支援的主題,其中僅定義了幾種顏色。這項工作仍在進行中。透過在主題 CSS 檔案中定義更多顏色可以完成更多改進。
primary=主要
activated=已啟用
requires_activation=需要啟動
primary_email=設為主要
activate_email=寄出啟用信
activations_pending=等待啟用中
-can_not_add_email_activations_pending=有一個待處理的啟用,若要新增電子信箱,請幾分鐘後再試。
delete_email=移除
email_deletion=移除電子信箱
-email_deletion_desc=電子信箱和相關資訊將從您的帳戶中刪除,由此電子信箱所提交的 Git 將保持不變,是否繼續?
email_deletion_success=該電子信箱已被刪除
theme_update_success=已更新佈景主題。
theme_update_error=選取的佈景主題不存在。
@@ -833,7 +777,6 @@ gpg_key_matched_identities_long=此金鑰中嵌入的身分符合此使用者已
gpg_key_verified=已驗證的金鑰
gpg_key_verified_long=金鑰已被 Token 驗證且可用來驗證符合此使用者已啟用的電子信箱的提交,以及任何符合此金鑰的身分。
gpg_key_verify=驗證
-gpg_invalid_token_signature=提供的 GPG 金鑰、簽署、Token 不符合或 Token 已過期。
gpg_token_required=您必須為下列的 Token 提供簽署
gpg_token=Token
gpg_token_help=您可以使用以下方法產生簽署:
@@ -843,7 +786,6 @@ verify_gpg_key_success=已驗證 GPG 金鑰「%s」。
ssh_key_verified=已驗證的金鑰
ssh_key_verified_long=金鑰已被 Token 驗證且可用來驗證符合此使用者已啟用的電子信箱的提交。
ssh_key_verify=驗證
-ssh_invalid_token_signature=提供的 SSH 金鑰、簽署、Token 不符合或 Token 已過期。
ssh_token_required=您必須為下列的 Token 提供簽署
ssh_token=Token
ssh_token_help=您可以使用以下方法產生簽署:
@@ -864,7 +806,6 @@ gpg_key_deletion=移除 GPG 金鑰
ssh_principal_deletion=移除 SSH 認證主體
ssh_key_deletion_desc=刪除 SSH 金鑰將撤銷其對您帳戶的存取權限。是否繼續?
gpg_key_deletion_desc=刪除 GPG 金鑰將取消驗證由其簽署的提交。是否繼續?
-ssh_principal_deletion_desc=移除 SSH 認證主體將撤銷其對您帳戶的存取權限。是否繼續?
ssh_key_deletion_success=SSH 金鑰已被移除。
gpg_key_deletion_success=GPG 金鑰已被移除。
ssh_principal_deletion_success=已移除主體。
@@ -923,7 +864,6 @@ create_oauth2_application_button=建立應用程式
create_oauth2_application_success=您已成功建立新的 OAuth2 應用程式。
update_oauth2_application_success=您已成功更新 OAuth2 應用程式。
oauth2_application_name=應用程式名稱
-oauth2_confidential_client=機密客戶端 (Confidential Client)。請為能保持機密性的程式勾選,例如網頁應用程式。使用原生程式時不要勾選,包含桌面、行動應用程式。
oauth2_skip_secondary_authorization=授權一次後,跳過公用客戶端的二次授權。可能會帶來安全風險。
oauth2_redirect_uris=重新導向 URI,每行一個 URI。
save_application=儲存
@@ -938,10 +878,8 @@ oauth2_application_remove_description=移除 OAuth2 應用程式將阻止其存
oauth2_application_locked=Gitea 在啟動時會預先註冊一些 OAuth2 應用程式(如果在配置中啟用)。為防止意外行為,這些應用程式無法編輯或刪除。請參閱 OAuth2 文件以獲取更多資訊。
authorized_oauth2_applications=已授權的 OAuth2 應用程式
-authorized_oauth2_applications_description=您已授權這些第三方應用程式存取您的 Gitea 帳戶。請撤銷不再需要的應用程式的存取權。
revoke_key=撤銷
revoke_oauth2_grant=撤銷存取權
-revoke_oauth2_grant_description=撤銷此第三方應用程式的存取權,此應用程式就無法再存取您的資料。您確定嗎?
revoke_oauth2_grant_success=成功撤銷存取權。
twofa_desc=兩步驟驗證可以增強您的帳戶安全性。
@@ -951,7 +889,6 @@ twofa_not_enrolled=您的帳戶目前尚未啟用兩步驟驗證。
twofa_disable=停用兩步驟驗證
twofa_scratch_token_regenerate=重新產生備用驗證碼
twofa_scratch_token_regenerated=您的單次使用恢復密鑰現在是 %s。請將其存放在安全的地方,因為它不會再次顯示。
-twofa_enroll=啟用兩步驟驗證
twofa_disable_note=如有需要,您可以停用兩步驟驗證。
twofa_disable_desc=關閉兩步驟驗證會使您的帳戶安全性降低,是否繼續?
regenerate_scratch_token_desc=如果您遺失了備用驗證碼或已經使用它登入,您可以在此重新設定。
@@ -967,13 +904,11 @@ webauthn_desc=安全金鑰是包含加密密鑰的硬體設備,它們可以用
webauthn_register_key=新增安全金鑰
webauthn_nickname=暱稱
webauthn_delete_key=移除安全金鑰
-webauthn_delete_key_desc=如果您移除安全金鑰,將不能再使用它登入。是否繼續?
webauthn_key_loss_warning=如果您遺失了安全金鑰,您將無法存取您的帳戶。
webauthn_alternative_tip=您可能需要設定其他的驗證方法。
manage_account_links=管理已連結的帳戶
manage_account_links_desc=這些外部帳戶已連結到您的 Gitea 帳戶。
-account_links_not_available=目前沒有連結到您的 Gitea 帳戶的外部帳戶
link_account=連結帳戶
remove_account_link=刪除已連結的帳戶
remove_account_link_desc=刪除連結帳戶將撤銷其對 Gitea 帳戶的存取權限。是否繼續?
@@ -1030,7 +965,6 @@ fork_branch=要克隆到 fork 的分支
all_branches=所有分支
view_all_branches=查看所有分支
view_all_tags=查看所有標籤
-fork_no_valid_owners=此儲存庫無法 fork,因為沒有有效的擁有者。
fork.blocked_user=無法 fork 儲存庫,因為您被儲存庫擁有者封鎖。
use_template=使用此範本
open_with_editor=以 %s 開啟
@@ -1074,12 +1008,10 @@ mirror_sync=已同步
mirror_sync_on_commit=推送提交後進行同步
mirror_address=從 URL Clone
mirror_address_desc=在授權資訊中填入必要的資料。
-mirror_address_url_invalid=提供的 URL 無效。您必須正確轉義 URL 的所有組件。
mirror_address_protocol_invalid=提供的 URL 無效。僅可使用 http(s):// 或 git:// 位置進行鏡像。
mirror_lfs=大型檔案存儲 (LFS)
mirror_lfs_desc=啟動 LFS 檔案的鏡像功能。
mirror_lfs_endpoint=LFS 端點
-mirror_lfs_endpoint_desc=同步將會嘗試使用 Clone URL 來確認 LFS 伺服器 。如果存儲庫的 LFS 資料放在其他地方,您也可以指定自訂的端點。
mirror_last_synced=上次同步
mirror_password_placeholder=(未變更)
mirror_password_blank_placeholder=(未設定)
@@ -1092,7 +1024,6 @@ stars=星
reactions_more=再多添加 %d個
unit_disabled=網站管理員已經停用這個儲存庫區域。
language_other=其他
-adopt_search=輸入帳號以搜尋未接管的儲存庫... (留白以查詢全部)
adopt_preexisting_label=接管檔案
adopt_preexisting=接管既有的檔案
adopt_preexisting_content=從 %s 建立儲存庫
@@ -1131,8 +1062,6 @@ template.issue_labels=問題標籤
template.one_item=至少須選擇一個範本項目
template.invalid=必須選擇一個儲存庫範本
-archive.title=此儲存庫已封存。您可以查看檔案並進行 Clone,但無法推送或開啟問題或合併請求。
-archive.title_date=此儲存庫已於 %s 封存。您可以查看檔案並進行 Clone,但無法推送或開啟問題或合併請求。
archive.issue.nocomment=此儲存庫已封存,您不能在問題上留言。
archive.pull.nocomment=此儲存庫已封存,您不能在合併請求上留言。
@@ -1149,7 +1078,6 @@ migrate_options_lfs=遷移 LFS 檔案
migrate_options_lfs_endpoint.label=LFS 端點
migrate_options_lfs_endpoint.description=遷移將會嘗試使用您的 Git Remote 來確認 LFS 伺服器 。如果存儲庫的 LFS 資料放在其他地方,您也可以指定自訂的端點。
migrate_options_lfs_endpoint.description.local=同時也支援本地伺服器路徑。
-migrate_options_lfs_endpoint.placeholder=如果留空,端點將從 Clone URL 中推導出來
migrate_items=遷移項目
migrate_items_wiki=Wiki
migrate_items_milestones=里程碑
@@ -1161,10 +1089,8 @@ migrate_items_releases=版本發布
migrate_repo=遷移儲存庫
migrate.clone_address=從 URL 遷移 / Clone
migrate.clone_address_desc=現有存儲庫的 HTTP(S) 或 Git Clone URL
-migrate.github_token_desc=由於 GitHub API 的速率限制,您可在此輸入一個或多個由半形逗號「,」分隔的 Token 來加快遷移速度。警告:濫用此功能可能會違反該服務提供者的政策並導致帳戶被封鎖。
migrate.clone_local_path=或者是本地端伺服器路徑
migrate.permission_denied=您並沒有導入本地儲存庫的權限。
-migrate.permission_denied_blocked=您無法從未允許的主機匯入,請聯絡管理員檢查以下設定值 ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS
migrate.invalid_local_path=無效的本地路徑,該路徑不存在或不是一個目錄。
migrate.invalid_lfs_endpoint=該 LFS 端點無效。
migrate.failed=遷移失敗:%v
@@ -1172,7 +1098,6 @@ migrate.migrate_items_options=遷移其他項目需要 Access Token。
migrated_from=已從 %[2]s 遷移
migrated_from_fake=已從 %[1]s 遷移
migrate.migrate=從 %s 遷移
-migrate.migrating=正在從 %s 遷移...
migrate.migrating_failed=從 %s 遷移失敗
migrate.migrating_failed.error=遷移失敗: %s
migrate.migrating_failed_no_addr=遷移失敗。
@@ -1218,7 +1143,6 @@ clone_this_repo=Clone 此儲存庫
cite_this_repo=引用此儲存庫
create_new_repo_command=從命令列建立新儲存庫。
push_exist_repo=從命令列推送已存在的儲存庫
-empty_message=此儲存庫未包含任何內容。
broken_message=無法讀取此儲存庫底層的 Git 資料。請聯絡此 Gitea 執行個體的管理員或刪除此儲存庫。
code=程式碼
@@ -1236,7 +1160,6 @@ projects=專案
packages=套件
actions=Actions
labels=標籤
-org_labels_desc=組織層級標籤可用於此組織下的所有存儲庫 。
org_labels_desc_manage=管理
milestone=里程碑
@@ -1318,7 +1241,6 @@ editor.update=更新 %s
editor.delete=刪除 %s
editor.patch=套用 Patch
editor.patching=正在 Patch:
-editor.fail_to_apply_patch=無法套用 Patch「%s」
editor.new_patch=新增 Patch
editor.commit_message_desc=(選用) 加入詳細說明...
editor.signoff_desc=在提交訊息底部加入提交者的「Signed-off-by」資訊。
@@ -1334,19 +1256,13 @@ editor.filename_is_invalid=檔名無效:「%s」。
editor.branch_does_not_exist=此儲存庫沒有名為「%s」的分支。
editor.branch_already_exists=此儲存庫已有名為「%s」的分支。
editor.directory_is_a_file=目錄名稱「%s」已被此儲存庫的檔案使用。
-editor.file_is_a_symlink=`"%s" 是一個符號連結。符號連結無法在網頁編輯器中編輯`
editor.filename_is_a_directory=檔名「%s」已被此儲存庫的目錄名稱使用。
-editor.file_editing_no_longer_exists=正要編輯的檔案「%s」已不存在此儲存庫中。
-editor.file_deleting_no_longer_exists=正要刪除的檔案「%s」已不存在此儲存庫中。
editor.file_changed_while_editing=檔案內容在您編輯的途中已被變更。按一下此處 查看更動的地方或再次提交 以覆蓋這些變更。
editor.file_already_exists=此儲存庫已有名為「%s」的檔案。
-editor.commit_id_not_matching=提交 ID 與您開始編輯時的 ID 不匹配。請提交到一個補丁分支然後合併。
editor.push_out_of_date=推送似乎已過時。
editor.commit_empty_file_header=提交空白檔案
editor.commit_empty_file_text=你準備提交的檔案是空白的,是否繼續?
editor.no_changes_to_show=沒有可以顯示的變更。
-editor.fail_to_update_file=更新/建立檔案「%s」失敗。
-editor.fail_to_update_file_summary=錯誤訊息:
editor.push_rejected_no_message=該變更被伺服器拒絕但未提供其他資訊。請檢查 Git Hook。
editor.push_rejected=該變更被伺服器拒絕。請檢查 Git Hook。
editor.push_rejected_summary=完整的拒絕訊息:
@@ -1361,6 +1277,7 @@ editor.require_signed_commit=分支僅接受經簽署的提交
editor.cherry_pick=Cherry-pick %s 到:
editor.revert=還原 %s 到:
+
commits.desc=瀏覽原始碼修改歷程。
commits.commits=次程式碼提交
commits.no_commits=沒有共同的提交。「%s」和「%s」的歷史完全不同。
@@ -1458,7 +1375,6 @@ issues.new.clear_assignees=清除負責人
issues.new.no_assignees=沒有負責人
issues.new.no_reviewers=沒有審核者
issues.new.blocked_user=無法建立問題,因為您被儲存庫擁有者封鎖。
-issues.edit.already_changed=無法儲存問題的變更。看起來內容已被其他使用者更改。請重新整理頁面並再次嘗試編輯以避免覆蓋他們的變更。
issues.edit.blocked_user=無法編輯內容,因為您被發文者或儲存庫擁有者封鎖。
issues.choose.get_started=開始
issues.choose.open_external_link=開啟
@@ -1527,7 +1443,6 @@ issues.filter_type.reviewed_by_you=由您審核
issues.filter_sort=排序
issues.filter_sort.latest=最新建立
issues.filter_sort.oldest=最早建立
-issues.filter_sort.recentupdate=最近更新
issues.filter_sort.leastupdate=最少更新
issues.filter_sort.mostcomment=最多留言
issues.filter_sort.leastcomment=最少留言
@@ -1646,7 +1561,6 @@ issues.lock_no_reason=鎖定並將對話設為協作者限定 %s
issues.unlock_comment=解鎖這個對話 %s
issues.lock_confirm=鎖定
issues.unlock_confirm=解除鎖定
-issues.lock.notice_1=- 其他使用者不能在這個問題上新增留言。
issues.lock.notice_2=- 你和此儲存庫的協作者依然可留言,其他人也能看到。
issues.lock.notice_3=- 你以後可以隨時再解鎖這個問題。
issues.unlock.notice_1=- 所有人將可對此問題再次發表留言。
@@ -1694,7 +1608,6 @@ issues.due_date_form=yyyy年mm月dd日
issues.due_date_form_add=新增截止日期
issues.due_date_form_edit=編輯
issues.due_date_form_remove=移除
-issues.due_date_not_writer=您需要對此儲存庫的寫入權限才能更新問題的截止日期。
issues.due_date_not_set=未設定截止日期。
issues.due_date_added=新增了截止日期 %s %s
issues.due_date_modified=將截止日期從 %[2]s 修改為 %[1]s %[3]s
@@ -1717,9 +1630,7 @@ issues.dependency.pr_closing_blockedby=此合併請求被下列問題阻擋而
issues.dependency.issue_closing_blockedby=此問題被下列問題阻擋而無法關閉
issues.dependency.issue_close_blocks=因為此問題的阻擋,下列問題無法被關閉
issues.dependency.pr_close_blocks=因為此合併請求的阻擋,下列問題無法被關閉
-issues.dependency.issue_close_blocked=在您關閉此問題以前,您必須先關閉所有阻擋它的問題。
issues.dependency.issue_batch_close_blocked=無法批次關閉您選擇的問題,因為問題 #%d 還有開放中的先決條件。
-issues.dependency.pr_close_blocked=在您合併以前,您必須先關閉所有阻擋它的問題。
issues.dependency.blocks_short=阻擋
issues.dependency.blocked_by_short=先決於
issues.dependency.remove_header=移除先決條件
@@ -1730,13 +1641,11 @@ issues.dependency.add_error_same_issue=您無法將問題設定為自己的先
issues.dependency.add_error_dep_issue_not_exist=先決條件問題不存在。
issues.dependency.add_error_dep_not_exist=先決條件不存在。
issues.dependency.add_error_dep_exists=先決條件已存在。
-issues.dependency.add_error_cannot_create_circular=您無法建立讓兩個問題互相阻擋的先決條件。
issues.dependency.add_error_dep_not_same_repo=這兩個問題必須在同一個存儲庫中。
issues.review.self.approval=您不能核可自己的合併請求。
issues.review.self.rejection=您不能對自己的合併請求提出請求變更。
issues.review.approve=核可了這些變更 %s
issues.review.comment=已審核 %s
-issues.review.dismissed=取消 %s 的審核 %s
issues.review.dismissed_label=已取消
issues.review.left_comment=留下了回應
issues.review.content.empty=您必須留下訊息指出需要修正的地方。
@@ -1744,7 +1653,6 @@ issues.review.reject=請求了變更 %s
issues.review.wait=被請求進行審核 %s
issues.review.add_review_request=請求了 %s 來審核 %s
issues.review.remove_review_request=移除了對 %s 的審核請求 %s
-issues.review.remove_review_request_self=拒絕了審核 %s
issues.review.pending=待處理
issues.review.pending.tooltip=目前其他使用者還不能看見此留言。要送出您待定的留言請在頁面最上方選擇「%s」->「%s/%s/%s」。
issues.review.review=審核
@@ -1766,7 +1674,6 @@ issues.review.requested=審核待處理
issues.review.rejected=請求變更
issues.review.stale=核准後已更新
issues.review.unofficial=未計入的核准
-issues.assignee.error=因為未預期的錯誤,未能成功加入所有負責人。
issues.reference_issue.body=內容
issues.content_history.deleted=刪除
issues.content_history.edited=編輯
@@ -1783,7 +1690,6 @@ pulls.desc=啟用合併請求和程式碼審核。
pulls.new=建立合併請求
pulls.new.blocked_user=無法建立合併請求,因為您被儲存庫擁有者封鎖。
pulls.new.must_collaborator=您必須是協作者才能建立合併請求。
-pulls.edit.already_changed=無法儲存合併請求的變更。看起來內容已被其他使用者更改。請重新整理頁面並再次嘗試編輯以避免覆蓋他們的變更。
pulls.view=檢視合併請求
pulls.compare_changes=建立合併請求
pulls.allow_edits_from_maintainers=允許維護者編輯
@@ -1804,11 +1710,9 @@ pulls.show_all_commits=顯示所有提交
pulls.show_changes_since_your_last_review=顯示自上次審核以來的變更
pulls.showing_only_single_commit=僅顯示提交 %[1]s 的變更
pulls.showing_specified_commit_range=僅顯示介於 %[1]s 和 %[2]s 之間的變更
-pulls.select_commit_hold_shift_for_range=選擇提交。按住 Shift 並點擊以選擇範圍
pulls.review_only_possible_for_full_diff=僅在查看完整差異時才能進行審核
pulls.filter_changes_by_commit=按提交篩選變更
pulls.nothing_to_compare=這些分支的內容相同,無需建立合併請求。
-pulls.nothing_to_compare_have_tag=所選的分支/標籤相同。
pulls.nothing_to_compare_and_allow_empty_pr=這些分支的內容相同,此合併請求將會是空白的。
pulls.has_pull_request=`已有介於這些分支間的合併請求:%[2]s#%[3]d `
pulls.create=建立合併請求
@@ -1856,33 +1760,22 @@ pulls.reject_count_1=%d 變更請求
pulls.reject_count_n=%d 變更請求
pulls.waiting_count_1=%d 等待審核
pulls.waiting_count_n=%d 等待審核
-pulls.wrong_commit_id=提交 id 必須存在於目標分支上
pulls.no_merge_desc=無法進行合併,因為所有儲存庫的合併選項已被停用。
pulls.no_merge_helper=在儲存庫設定啟用合併選項或手動合併該合併請求。
pulls.no_merge_wip=無法進行合併,因為它被標記為還在進行中。
-pulls.no_merge_not_ready=此合併請求還沒準備好被合併,請檢查審核狀態和狀態檢查。
pulls.no_merge_access=您未被授權合併此合併請求。
pulls.merge_pull_request=建立合併提交
-pulls.rebase_merge_pull_request=Rebase 後快轉
-pulls.rebase_merge_commit_pull_request=Rebase 後建立合併提交
pulls.squash_merge_pull_request=建立 Squash 提交
pulls.merge_manually=手動合併
pulls.merge_commit_id=合併提交 ID
pulls.require_signed_wont_sign=該分支需要經簽署的提交,但此合併將不會被簽署。
pulls.invalid_merge_option=您無法對此合併請求使用這個合併選項。
-pulls.merge_conflict=合併失敗:合併時發生衝突。 提示:請嘗試不同的策略
pulls.merge_conflict_summary=錯誤訊息
-pulls.rebase_conflict=合併失敗:Rebase 提交時發生衝突:%[1]s。 提示:請嘗試不同的策略
pulls.rebase_conflict_summary=錯誤訊息
-pulls.unrelated_histories=合併失敗:要合併的 HEAD 和基底分支沒有共同的歷史。 提示:請嘗試不同的策略
-pulls.merge_out_of_date=合併失敗:產生合併時,基底已被更新。提示:再試一次。
-pulls.head_out_of_date=合併失敗:產生合併時,head 已被更新。提示:再試一次。
-pulls.has_merged=失敗:此合併請求已被合併,您不能再次合併或更改目標分支。
pulls.push_rejected=合併失敗:此推送被拒絕。請檢查此儲存庫的 Git Hook。
pulls.push_rejected_summary=完整的拒絕訊息
-pulls.push_rejected_no_message=合併失敗:此推送被拒絕但未提供其他資訊。 請檢查此儲存庫的 Git Hook。
pulls.open_unmerged_pull_exists=`您不能重新開放,因為目前有相同的合併請求 (#%d) 正在進行中。`
pulls.status_checking=還在進行一些檢查
pulls.status_checks_success=已通過所有檢查
@@ -1905,9 +1798,7 @@ pulls.cmd_instruction_checkout_title=檢出
pulls.cmd_instruction_checkout_desc=從您的專案儲存庫中,檢出一個新分支並測試變更。
pulls.cmd_instruction_merge_title=合併
pulls.cmd_instruction_merge_desc=合併變更並在 Gitea 上更新。
-pulls.cmd_instruction_merge_warning=警告:此操作無法合併合併請求,因為未啟用「自動檢測手動合併」
pulls.clear_merge_message=清除合併訊息
-pulls.clear_merge_message_hint=清除合併訊息將僅移除提交訊息內容,留下產生的 git 結尾,如「Co-Authored-By …」。
pulls.auto_merge_button_when_succeed=(當通過檢查後)
pulls.auto_merge_when_succeed=通過所有檢查後自動合併
@@ -1965,12 +1856,10 @@ milestones.filter_sort.most_issues=問題由多到少
milestones.filter_sort.least_issues=問題由少到多
signing.will_sign=此提交將使用金鑰「%s」簽署。
-signing.wont_sign.error=檢查提交是否可以簽署時發生錯誤。
signing.wont_sign.nokey=沒有可用的金鑰來簽署此提交。
signing.wont_sign.never=提交從不簽署。
signing.wont_sign.always=提交總是簽署。
signing.wont_sign.pubkey=提交不會被簽署,因為您的帳戶沒有關聯的公鑰。
-signing.wont_sign.twofa=您必須啟用雙因素驗證才能簽署提交。
signing.wont_sign.parentsigned=提交不會被簽署,因為父提交未簽署。
signing.wont_sign.basesigned=合併不會被簽署,因為基底提交未簽署。
signing.wont_sign.headsigned=合併不會被簽署,因為 head 提交未簽署。
@@ -2056,7 +1945,6 @@ activity.title.releases_1=%d 個版本
activity.title.releases_n=%d 個版本
activity.title.releases_published_by=%[2]s發布了 %[1]s
activity.published_release_label=已發布
-activity.no_git_activity=期間內沒有任何提交動態
activity.git_stats_exclude_merges=不計合併,
activity.git_stats_author_1=%d 位作者
activity.git_stats_author_n=%d 位作者
@@ -2084,7 +1972,6 @@ contributors.contribution_type.additions=新增
contributors.contribution_type.deletions=刪除
settings=設定
-settings.desc=設定是您可以管理儲存庫設定的地方
settings.options=儲存庫
settings.collaboration=協作者
settings.collaboration.admin=管理員
@@ -2101,7 +1988,6 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=設定您的專
settings.mirror_settings.docs.disabled_push_mirror.instructions=設定您的專案自動從其他儲存庫拉取提交、標籤、分支。
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=現在這個功能只能從「遷移外部儲存庫」進行設定,詳情請參考:
settings.mirror_settings.docs.disabled_push_mirror.info=您的網站管理員已停用了推送鏡像。
-settings.mirror_settings.docs.no_new_mirrors=您的儲存庫正在鏡像變更到或從另一個儲存庫。請注意,您目前無法建立任何新的鏡像。
settings.mirror_settings.docs.can_still_use=雖然您無法修改現有的鏡像或建立新的鏡像,但您仍然可以使用現有的鏡像。
settings.mirror_settings.docs.pull_mirror_instructions=設定拉取鏡像請參考:
settings.mirror_settings.docs.more_information_if_disabled=您可以在這裡找到有關推送和拉取鏡像的更多資訊:
@@ -2176,7 +2062,6 @@ settings.admin_indexer_commit_sha=最後索引的 SHA
settings.admin_indexer_unindexed=未索引
settings.reindex_button=加入到重新索引佇列
settings.reindex_requested=已請求重新索引
-settings.admin_enable_close_issues_via_commit_in_any_branch=可以從非預設分支的提交訊息關閉問題
settings.danger_zone=危險操作區
settings.new_owner_has_same_repo=新的儲存庫擁有者已經存在同名儲存庫!
settings.convert=轉換為普通儲存庫
@@ -2198,7 +2083,6 @@ settings.transfer_abort_invalid=您無法取消不存在的儲存庫轉移。
settings.transfer_abort_success=成功取消轉移儲存庫至 %s。
settings.transfer_desc=將此儲存庫轉移給其他使用者或受您管理的組織。
settings.transfer_form_title=輸入儲存庫名稱以確認:
-settings.transfer_in_progress=目前正在進行轉移。如果您想要將此儲存庫轉移給其他使用者,請取消他。
settings.transfer_notices_1=- 如果將此儲存庫轉移給個別使用者,您將會失去此儲存庫的存取權。
settings.transfer_notices_2=- 如果將此儲存庫轉移到您(共同)擁有的組織,您將能繼續保有此儲存庫的存取權。
settings.transfer_notices_3=- 如果此儲存庫為私有儲存庫且將轉移給個別使用者,此動作確保該使用者至少擁有讀取權限 (必要時將會修改權限)。
@@ -2213,13 +2097,9 @@ settings.trust_model.default=預設信任模式
settings.trust_model.default.desc=使用此 Gitea 的預設儲存庫信任模式。
settings.trust_model.collaborator=協作者
settings.trust_model.collaborator.long=協作者: 信任協作者的簽署
-settings.trust_model.collaborator.desc=此儲存庫協作者的有效簽署將被標記為「受信任」(無論它們是否符合提交者),簽署只符合提交者時將標記為「不受信任」,都不符合時標記為「不符合」。
settings.trust_model.committer=提交者
-settings.trust_model.committer.long=提交者: 信任與提交者相符的簽署 (此選項與 GitHub 相同,這會強制 Gitea 簽署提交並以 Gitea 作為提交者)
-settings.trust_model.committer.desc=提交者的有效簽署將被標記為「受信任」,否則將被標記為「不符合」。這將會強制 Gitea 成為受簽署提交的提交者,實際的提交者將於提交訊息結尾被標記為「Co-authored-by:」和「Co-committed-by:」。預設的 Gitea 金鑰必須符合資料庫中的一位使用者。
settings.trust_model.collaboratorcommitter=協作者+提交者
settings.trust_model.collaboratorcommitter.long=協作者 + 提交者: 信任協作者同時是提交者的簽署
-settings.trust_model.collaboratorcommitter.desc=此儲存庫協作者的有效簽署在他同時是提交者時將被標記為「受信任」,簽署只符合提交者時將標記為「不受信任」,都不符合時標記為「不符合」。這會強制 Gitea 成為受簽署提交的提交者,實際的提交者將於提交訊息結尾被標記為「Co-Authored-By:」和「Co-Committed-By:」。預設的 Gitea 金鑰必須符合資料庫中的一位使用者。
settings.wiki_delete=刪除 Wiki 資料
settings.wiki_delete_desc=刪除儲存庫 Wiki 資料是永久的且不可還原。
settings.wiki_delete_notices_1=- 這將會永久刪除與停用 %s 的儲存庫 Wiki。
@@ -2228,7 +2108,6 @@ settings.wiki_deletion_success=已刪除儲存庫的 Wiki 資料。
settings.delete=刪除本儲存庫
settings.delete_desc=刪除儲存庫是永久的且不可還原。
settings.delete_notices_1=- 此動作不可 還原。
-settings.delete_notices_2=- 此操作將永久刪除 %s 儲存庫,包括程式碼、問題、留言、Wiki 資料和協作者設定。
settings.delete_notices_fork_1=- 在此儲存庫刪除後,它的 fork 將會變成獨立儲存庫。
settings.deletion_success=這個儲存庫已被刪除。
settings.update_settings_success=已更新儲存庫的設定。
@@ -2250,8 +2129,6 @@ settings.team_not_in_organization=團隊和儲存庫不在相同的組織內
settings.teams=團隊
settings.add_team=增加團隊
settings.add_team_duplicate=團隊已擁有該儲存庫
-settings.add_team_success=團隊現在可存取該儲存庫了。
-settings.change_team_permission_tip=團隊權限可於團隊設定頁面修改,不能針對儲存庫分別調整。
settings.delete_team_tip=此團隊可存取所有儲存庫,無法移除
settings.remove_team_success=已移除團隊存取儲存庫的權限。
settings.add_webhook=建立 Webhook
@@ -2260,8 +2137,6 @@ settings.hooks_desc=當觸發某些 Gitea 事件時,Webhook 會自動發出 HT
settings.webhook_deletion=移除 Webhook
settings.webhook_deletion_desc=移除 Webhook 將刪除它的設定及傳送記錄,是否繼續?
settings.webhook_deletion_success=Webhook 已移除。
-settings.webhook.test_delivery=傳送測試資料
-settings.webhook.test_delivery_desc=使用假事件測試此 Webhook。
settings.webhook.test_delivery_desc_disabled=要使用假事件測試此 Webhook,請啟用它。
settings.webhook.request=請求
settings.webhook.response=回應
@@ -2308,7 +2183,6 @@ settings.event_repository=儲存庫
settings.event_repository_desc=建立或刪除儲存庫。
settings.event_header_issue=問題事件
settings.event_issues=問題
-settings.event_issues_desc=建立、編輯、關閉及重新開放問題。
settings.event_issue_assign=指派問題
settings.event_issue_assign_desc=指派或取消指派問題。
settings.event_issue_label=標籤
@@ -2319,7 +2193,6 @@ settings.event_issue_comment=問題留言
settings.event_issue_comment_desc=已經建立、編輯或刪除的問題留言。
settings.event_header_pull_request=合併請求事件
settings.event_pull_request=合併請求
-settings.event_pull_request_desc=建立、編輯、關閉及重新開放合併請求。
settings.event_pull_request_assign=指派合併請求
settings.event_pull_request_assign_desc=指派或取消指派合併請求。
settings.event_pull_request_label=合併請求標籤
@@ -2459,7 +2332,6 @@ settings.block_on_official_review_requests_desc=如果有官方的審核請求
settings.block_outdated_branch=如果合併請求已經過時則阻擋合併
settings.block_outdated_branch_desc=當 head 分支落後於基礎分支時不得合併。
settings.block_admin_merge_override=管理員必須遵守分支保護規則
-settings.block_admin_merge_override_desc=管理員必須遵守分支保護規則,不能繞過它。
settings.default_branch_desc=請選擇用來提交程式碼和合併請求的預設分支。
settings.merge_style_desc=合併方式
settings.default_merge_style_desc=預設合併方式
@@ -2486,10 +2358,7 @@ settings.matrix.homeserver_url=主伺服器網址
settings.matrix.room_id=聊天室 ID
settings.matrix.message_type=訊息類型
settings.visibility.private.button=設為私人
-settings.visibility.private.text=將可見性更改為私人不僅會使儲存庫僅對允許的成員可見,還可能會移除它與 fork、關注者和星標之間的關係。
settings.visibility.private.bullet_title=更改可見性為私人將:
-settings.visibility.private.bullet_one=使儲存庫僅對允許的成員可見。
-settings.visibility.private.bullet_two=可能會移除它與 fork 、關注者 和 星標 之間的關係。
settings.visibility.public.button=設為公開
settings.visibility.public.text=將可見性更改為公開將使儲存庫對任何人可見。
settings.visibility.public.bullet_title=更改可見性為公開將:
@@ -2508,7 +2377,6 @@ settings.archive.tagsettings_unavailable=已封存的儲存庫無法使用標籤
settings.archive.mirrors_unavailable=如果儲存庫已封存,則無法使用鏡像。
settings.unarchive.button=取消封存儲存庫
settings.unarchive.header=取消封存此儲存庫
-settings.unarchive.text=取消封存儲存庫將恢復其接收提交和推送的能力,以及新問題和合併請求。
settings.unarchive.success=儲存庫已成功取消封存。
settings.unarchive.error=嘗試取消封存儲存庫時發生錯誤。查看日誌檔以獲得更多資訊。
settings.update_avatar_success=已更新儲存庫的大頭貼。
@@ -2526,11 +2394,9 @@ settings.lfs_invalid_locking_path=無效的路徑: %s
settings.lfs_invalid_lock_directory=無法鎖定目錄: %s
settings.lfs_lock_already_exists=鎖定已存在:%s
settings.lfs_lock=鎖定
-settings.lfs_lock_path=要鎖定的檔案路徑...
settings.lfs_locks_no_locks=沒有鎖定
settings.lfs_lock_file_no_exist=已鎖定的檔案不存在於預設分支
settings.lfs_force_unlock=強制解鎖
-settings.lfs_pointers.found=找到 %d 個 blob 指標 - %d 個已關聯, %d 個未關聯 (%d 個從存放區遺失)
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=在儲存庫中
@@ -2704,7 +2570,6 @@ error.csv.invalid_field_count=無法渲染此檔案,因為它第 %d 行的欄
error.broken_git_hook=此儲存庫的 Git hooks 似乎已損壞。請按照 文件 進行修復,然後推送一些提交以刷新狀態。
[graphs]
-component_loading=正在載入 %s...
component_loading_failed=無法載入 %s
component_loading_info=這可能需要一點時間…
component_failed_to_load=發生意外錯誤。
@@ -2742,7 +2607,6 @@ form.create_org_not_allowed=此帳號禁止建立組織。
settings=設定
settings.options=組織
settings.full_name=組織全名
-settings.email=聯絡電子郵件
settings.website=官方網站
settings.location=所在地區
settings.permission=權限
@@ -2756,15 +2620,13 @@ settings.visibility.private_shortname=私有
settings.update_settings=更新設定
settings.update_setting_success=組織設定已更新。
-settings.change_orgname_prompt=注意:更改組織名稱將同時更改組織的 URL 並釋放舊名稱。
-settings.change_orgname_redirect_prompt=舊的名稱被領用前,會重新導向新名稱。
+
+
settings.update_avatar_success=已更新組織的大頭貼。
settings.delete=刪除組織
settings.delete_account=刪除這個組織
settings.delete_prompt=該組織將被永久刪除。此動作不可 還原!
settings.confirm_delete_account=確認刪除組織
-settings.delete_org_title=刪除組織
-settings.delete_org_desc=即將永久刪除這個組織,是否繼續?
settings.hooks_desc=此組織下的所有存儲庫 都會觸發在此新增的 Webhook。
settings.labels_desc=在此處新增的標籤可用於此組織下的所有儲存庫 。
@@ -2820,7 +2682,6 @@ teams.remove_all_repos_title=移除所有團隊儲存庫
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.members.none=這個團隊沒有任何成員。
@@ -2850,7 +2711,6 @@ repositories=儲存庫
hooks=Webhook
integrations=整合
authentication=認證來源
-emails=使用者電子信箱
config=組態
config_summary=摘要
config_settings=設定
@@ -2882,11 +2742,8 @@ dashboard.cron.cancelled=Cron: %[1]s 已取消: %[3]s
dashboard.cron.error=Cron 中的錯誤: %s: %[3]s
dashboard.cron.finished=Cron: %[1]s 已完成
dashboard.delete_inactive_accounts=刪除所有未啟用帳戶
-dashboard.delete_inactive_accounts.started=刪除所有未啟用帳戶的任務已啟動。
dashboard.delete_repo_archives=刪除所有儲存庫存檔 (ZIP, TAR.GZ, etc..)
-dashboard.delete_repo_archives.started=刪除所有儲存庫存檔的任務已啟動。
dashboard.delete_missing_repos=刪除所有遺失 Git 檔案的儲存庫
-dashboard.delete_missing_repos.started=刪除所有遺失 Git 檔案的儲存庫的任務已啟動。
dashboard.delete_generated_repository_avatars=刪除產生的儲存庫大頭貼
dashboard.sync_repo_branches=從 Git 資料同步遺漏的分支到資料庫
dashboard.sync_repo_tags=從 Git 資料同步標籤到資料庫
@@ -2894,17 +2751,9 @@ dashboard.update_mirrors=更新鏡像
dashboard.repo_health_check=對所有儲存庫進行健康檢查
dashboard.check_repo_stats=檢查所有儲存庫的統計資料
dashboard.archive_cleanup=刪除舊的儲存庫存檔
-dashboard.deleted_branches_cleanup=清理已刪除的分支
dashboard.update_migration_poster_id=更新遷移發布者 ID
-dashboard.git_gc_repos=對所有儲存庫進行垃圾回收
-dashboard.resync_all_sshkeys=使用 Gitea 的 SSH 金鑰更新「.ssh/authorized_keys」檔案。
-dashboard.resync_all_sshprincipals=使用 Gitea 的 SSH 主體更新「.ssh/authorized_principals」檔案。
-dashboard.resync_all_hooks=重新同步所有儲存庫的 pre-receive、update 和 post-receive Hook。
dashboard.reinit_missing_repos=重新初始化所有記錄存在但遺失的 Git 儲存庫
dashboard.sync_external_users=同步外部使用者資料
-dashboard.cleanup_hook_task_table=清理 hook_task 資料表
-dashboard.cleanup_packages=清理已過期的套件
-dashboard.cleanup_actions=清理過期的操作資源
dashboard.server_uptime=服務執行時間
dashboard.current_goroutine=目前的 Goroutines 數量
dashboard.current_memory_usage=目前記憶體使用量
@@ -2935,10 +2784,8 @@ dashboard.total_gc_pause=總 GC 暫停時間
dashboard.last_gc_pause=上次 GC 暫停時間
dashboard.gc_times=GC 執行次數
dashboard.delete_old_actions=從資料庫刪除所有舊行為
-dashboard.delete_old_actions.started=從資料庫刪除所有舊行為的任務已啟動。
dashboard.update_checker=更新檢查器
dashboard.delete_old_system_notices=從資料庫刪除所有舊系統提示
-dashboard.gc_lfs=對 LFS meta objects 進行垃圾回收
dashboard.stop_zombie_tasks=停止殭屍任務
dashboard.stop_endless_tasks=停止永不停止的任務
dashboard.cancel_abandoned_jobs=取消已放棄的工作
@@ -2962,7 +2809,6 @@ users.2fa=兩步驟驗證
users.repos=儲存庫數
users.created=建立時間
users.last_login=上次登入
-users.never_login=從未登入
users.send_register_notify=寄送使用者註冊通知
users.new_success=已建立新帳戶「%s」。
users.edit=編輯
@@ -2989,7 +2835,6 @@ users.still_own_repo=這個使用者還擁有一個或更多的儲存庫。請
users.still_has_org=此使用者是組織的成員。請先將他從組織中移除。
users.purge=清除使用者
users.purge_help=強制刪除使用者和他擁有的所有儲存庫、組織、套件,所有留言也會被刪除。
-users.still_own_packages=此使用者仍然擁有一個以上的套件,請先刪除這些套件。
users.deletion_success=使用者帳戶已被刪除。
users.reset_2fa=重設兩步驟驗證
users.list_status_filter.menu_text=篩選
@@ -3009,11 +2854,7 @@ users.details=使用者詳細資訊
emails.email_manage_panel=使用者電子信箱管理
emails.primary=主要
emails.activated=已啟用
-emails.filter_sort.email=電子信箱
-emails.filter_sort.email_reverse=電子信箱(倒序)
-emails.filter_sort.name=使用者名稱
-emails.filter_sort.name_reverse=使用者名稱(倒序)
-emails.updated=信箱已更新
+emails.filter_sort.name=帳號
emails.not_updated=電子信箱更新失敗: %v
emails.duplicate_active=此信箱已被其他使用者使用
emails.change_email_header=更新電子信箱屬性
@@ -3021,7 +2862,6 @@ emails.change_email_text=您確定要更新此電子郵件地址嗎?
emails.delete=刪除電子郵件
emails.delete_desc=您確定要刪除此電子郵件地址嗎?
emails.deletion_success=電子郵件地址已被刪除。
-emails.delete_primary_email_error=您不能刪除主要的電子郵件地址。
orgs.org_manage_panel=組織管理
orgs.name=名稱
@@ -3135,27 +2975,19 @@ auths.oauth2_required_claim_name_helper=填寫此名稱以限制 Claim 中有此
auths.oauth2_required_claim_value=必須填寫 Claim 值
auths.oauth2_required_claim_value_helper=填寫此名稱以限制 Claim 中有此名稱和值的使用者才能從此來源登入
auths.oauth2_group_claim_name=Claim 名稱提供群組名稱給此來源。(選用)
-auths.oauth2_admin_group=管理員使用者的群組 Claim 值。(選用 - 需要上面的 Claim 名稱)
-auths.oauth2_restricted_group=受限制使用者的群組 Claim 值。(選用 - 需要上面的 Claim 名稱)
-auths.oauth2_map_group_to_team=將已 Claim 的群組對應到組織團隊。(選用 - 需要上述 Claim 名稱)
auths.oauth2_map_group_to_team_removal=如果使用者不屬於相對應的群組,將使用者從已同步的團隊移除。
auths.enable_auto_register=允許授權用戶自動註冊
auths.sspi_auto_create_users=自動建立使用者
-auths.sspi_auto_create_users_helper=允許 SSPI 認證方法於使用者首次登入時自動建立新帳戶
auths.sspi_auto_activate_users=自動啟用使用者
auths.sspi_auto_activate_users_helper=允許 SSPI 認證方法自動啟用新使用者
auths.sspi_strip_domain_names=從帳號中移除域名
-auths.sspi_strip_domain_names_helper=勾選後,將從登入名稱中移除域名 (例如:「DOMAIN\user」和「user@example.org」都會變成「user」)
auths.sspi_separator_replacement=用來替換 \, / 和 @ 的分隔符號
-auths.sspi_separator_replacement_helper=用來替換下級登入名稱分隔符號的字元 (例如:「DOMAIN\user」中的「\」) 和使用者主體名稱 (例如:「user@example.org」中的「@」)。
auths.sspi_default_language=使用者預設語言
-auths.sspi_default_language_helper=SSPI 認證方法自動建立之使用者的預設語言,留白以自動偵測。
auths.tips=幫助提示
auths.tips.oauth2.general=OAuth2 認證
auths.tips.oauth2.general.tip=註冊新的 OAuth2 認證時,回調/重定向 URL 應為:
auths.tip.oauth2_provider=OAuth2 提供者
auths.tip.bitbucket=註冊新的 OAuth 客戶端並加入權限「Account - Read」。網址:https://bitbucket.org/account/user//oauth-consumers/new
-auths.tip.nextcloud=在您的執行個體中,於選單「設定 -> 安全性 -> OAuth 2.0 客戶端」註冊新的 OAuth 客戶端
auths.tip.dropbox=建立新的 App。網址:https://www.dropbox.com/developers/apps
auths.tip.facebook=註冊新的應用程式並新增產品「Facebook 登入」。網址:https://developers.facebook.com/apps
auths.tip.github=註冊新的 OAuth 應用程式。網址:https://github.com/settings/applications/new
@@ -3265,7 +3097,6 @@ config.mailer_sendmail_path=Sendmail 路徑
config.mailer_sendmail_args=Sendmail 參數
config.mailer_sendmail_timeout=Sendmail 逾時
config.mailer_use_dummy=Dummy
-config.test_email_placeholder=電子信箱 (例:test@example.com)
config.send_test_mail=傳送測試郵件
config.send_test_mail_submit=傳送
config.test_mail_failed=傳送測試郵件到「%s」時失敗: %v
@@ -3337,7 +3168,6 @@ monitor.start=開始時間
monitor.execute_time=已執行時間
monitor.last_execution_result=結果
monitor.process.cancel=結束處理程序
-monitor.process.cancel_desc=結束處理程序可能造成資料遺失
monitor.process.children=子程序
monitor.queues=佇列
@@ -3352,7 +3182,6 @@ monitor.queue.numberinqueue=佇列中的數量
monitor.queue.review_add=審查 / 增加工作者
monitor.queue.settings.title=集區設定
monitor.queue.settings.desc=集區會根據工作者佇列的阻塞情況動態增長。
-monitor.queue.settings.maxnumberworkers=最大工作者數量
monitor.queue.settings.maxnumberworkers.placeholder=目前 %[1]d
monitor.queue.settings.maxnumberworkers.error=最大工作者數量必須是數字
monitor.queue.settings.submit=更新設定
@@ -3378,10 +3207,6 @@ notices.delete_success=已刪除系統提示。
self_check.no_problem_found=尚未發現任何問題。
self_check.startup_warnings=啟動警告:
self_check.database_collation_mismatch=預期資料庫使用排序規則:%s
-self_check.database_collation_case_insensitive=資料庫正在使用排序規則 %s,這是一個不區分大小寫的排序規則。雖然 Gitea 可以正常運作,但在某些罕見情況下可能會出現預期外的問題。
-self_check.database_inconsistent_collation_columns=資料庫正在使用排序規則 %s,但這些欄位使用了不匹配的排序規則。這可能會導致一些預期外的問題。
-self_check.database_fix_mysql=對於 MySQL/MariaDB 使用者,您可以使用 "gitea doctor convert" 命令來修復排序規則問題,或者也可以手動使用 "ALTER ... COLLATE ..." SQL 語句來修復問題。
-self_check.database_fix_mssql=對於 MSSQL 使用者,目前您只能手動使用 "ALTER ... COLLATE ..." SQL 語句來修復問題。
self_check.location_origin_mismatch=當前 URL (%[1]s) 與 Gitea 看到的 URL (%[2]s) 不匹配。如果您使用了反向代理,請確保 "Host" 和 "X-Forwarded-Proto" 標頭設置正確。
[action]
@@ -3465,8 +3290,6 @@ 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=單元
@@ -3504,7 +3327,6 @@ versions=版本
versions.view_all=檢視全部
dependency.id=ID
dependency.version=版本
-alpine.registry=在您的 /etc/apk/repositories 檔加入下列 URL 以設定此註冊中心:
alpine.registry.key=下載註冊中心的公開 RSA 金鑰到 /etc/apk/keys/ 資料夾來驗證索引簽署:
alpine.registry.info=從下列清單選擇 $branch 和 $repository
alpine.install=執行下列命令安裝此套件:
@@ -3517,18 +3339,13 @@ arch.install=使用 pacman 同步套件:
arch.repository=儲存庫資訊
arch.repository.repositories=儲存庫
arch.repository.architectures=架構
-cargo.registry=在 Cargo 組態檔設定此註冊中心 (例如: ~/.cargo/config.toml):
cargo.install=執行下列命令以使用 Cargo 安裝此套件:
-chef.registry=在您的 ~/.chef/config.rb 檔設定此註冊中心:
chef.install=執行下列命令安裝此套件:
-composer.registry=在您的 ~/.composer/config.json 檔設定此註冊中心:
composer.install=執行下列命令以使用 Composer 安裝此套件:
composer.dependencies=相依性
composer.dependencies.development=開發相依性
conan.details.repository=儲存庫
-conan.registry=透過下列命令設定此註冊中心:
conan.install=執行下列命令以使用 Conan 安裝此套件:
-conda.registry=在您的 .condarc 檔設定此註冊中心為 Conda 存儲庫:
conda.install=執行下列命令以使用 Conda 安裝此套件:
container.details.type=映像檔類型
container.details.platform=平台
@@ -3538,9 +3355,7 @@ container.layers=映像檔 Layers
container.labels=標籤
container.labels.key=鍵
container.labels.value=值
-cran.registry=在您的 Rprofile.site 檔設定此註冊中心:
cran.install=執行下列命令安裝此套件:
-debian.registry=透過下列命令設定此註冊中心:
debian.registry.info=從下列清單選擇$distribution和$component
debian.install=執行下列命令安裝此套件:
debian.repository=儲存庫資訊
@@ -3549,16 +3364,11 @@ debian.repository.components=元件
debian.repository.architectures=架構
generic.download=透過下列命令下載套件:
go.install=透過下列命令安裝套件:
-helm.registry=透過下列命令設定此註冊中心:
helm.install=執行下列命令安裝此套件:
-maven.registry=在您專案的 pom.xml 檔設定此註冊中心:
-maven.install=若要使用此套件,請在您 pom.xml 檔的 dependencies 段落加入下列內容:
maven.install2=透過下列命令執行:
maven.download=透過下列命令下載相依性:
-nuget.registry=透過下列命令設定此註冊中心:
nuget.install=執行下列命令以使用 NuGet 安裝此套件:
nuget.dependency.framework=目標框架
-npm.registry=在您專案的 .npmrc 檔設定此註冊中心:
npm.install=執行下列命令以使用 npm 安裝此套件:
npm.install2=或將它加到 package.json 檔:
npm.dependencies=相依性
@@ -3570,7 +3380,6 @@ npm.details.tag=標籤
pub.install=執行下列命令以使用 Dart 安裝此套件:
pypi.requires=需要 Python
pypi.install=執行下列命令以使用 pip 安裝此套件:
-rpm.registry=透過下列命令設定此註冊中心:
rpm.distros.redhat=在基於 RedHat 的發行版上
rpm.distros.suse=在基於 SUSE 的發行版上
rpm.install=執行下列命令安裝此套件:
@@ -3583,7 +3392,6 @@ rubygems.dependencies.runtime=執行階段相依性
rubygems.dependencies.development=開發相依性
rubygems.required.ruby=需要的 Ruby 版本
rubygems.required.rubygems=需要的 RubyGem 版本
-swift.registry=透過下列命令設定此註冊中心:
swift.install=將此套件加入您的 Package.swift 檔:
swift.install2=並執行下列命令:
vagrant.install=執行下列命令以新增 Vagrant box:
@@ -3606,7 +3414,6 @@ 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.cleanuprules.title=管理清理規則
owner.settings.cleanuprules.add=加入清理規則
owner.settings.cleanuprules.edit=編輯清理規則
@@ -3689,7 +3496,6 @@ runners.delete_runner=刪除此 Runner
runners.delete_runner_success=刪除 Runner 成功
runners.delete_runner_failed=刪除 Runner 失敗
runners.delete_runner_header=確認刪除此 Runner
-runners.delete_runner_notice=如果有任務正在此 Runner 上執行,它可能會被中止並標記為失敗,這可能會打斷建置工作流程。
runners.none=沒有可用的 Runner
runners.status.unspecified=未知
runners.status.idle=閒置
diff --git a/package-lock.json b/package-lock.json
index 780b95d5929..ecf333c9a62 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,12 +13,12 @@
"@github/relative-time-element": "4.4.8",
"@github/text-expander-element": "2.9.2",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
- "@primer/octicons": "19.15.2",
+ "@primer/octicons": "19.15.5",
"@silverwind/vue3-calendar-heatmap": "2.0.6",
"add-asset-webpack-plugin": "3.0.0",
"ansi_up": "6.0.6",
"asciinema-player": "3.10.0",
- "chart.js": "4.4.9",
+ "chart.js": "4.5.0",
"chartjs-adapter-dayjs-4": "1.0.4",
"chartjs-plugin-zoom": "2.2.0",
"clippie": "4.1.7",
@@ -28,25 +28,25 @@
"dropzone": "6.0.0-beta.2",
"easymde": "2.20.0",
"esbuild-loader": "4.3.0",
- "escape-goat": "4.0.0",
"fast-glob": "3.3.3",
- "htmx.org": "2.0.4",
+ "htmx.org": "2.0.6",
"idiomorph": "0.7.3",
"jquery": "3.7.1",
"katex": "0.16.22",
"license-checker-webpack-plugin": "0.2.1",
- "mermaid": "11.6.0",
+ "mermaid": "11.10.0",
"mini-css-extract-plugin": "2.9.2",
- "minimatch": "10.0.1",
+ "minimatch": "10.0.3",
"monaco-editor": "0.52.2",
"monaco-editor-webpack-plugin": "7.1.0",
+ "online-3d-viewer": "0.16.0",
"pdfobject": "2.3.1",
"perfect-debounce": "1.0.0",
- "postcss": "8.5.4",
+ "postcss": "8.5.6",
"postcss-loader": "8.1.1",
- "postcss-nesting": "13.0.1",
+ "postcss-nesting": "13.0.2",
"sortablejs": "1.15.6",
- "swagger-ui-dist": "5.24.0",
+ "swagger-ui-dist": "5.27.0",
"tailwindcss": "3.4.17",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
@@ -54,70 +54,70 @@
"toastify-js": "1.12.0",
"tributejs": "5.1.3",
"typescript": "5.8.3",
- "uint8-to-base64": "0.2.0",
+ "uint8-to-base64": "0.2.1",
"vanilla-colorful": "0.7.2",
- "vue": "3.5.16",
+ "vue": "3.5.18",
"vue-bar-graph": "2.2.0",
"vue-chartjs": "5.3.2",
"vue-loader": "17.4.2",
- "webpack": "5.99.9",
+ "webpack": "5.101.0",
"webpack-cli": "6.0.1",
"wrap-ansi": "9.0.0"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
- "@playwright/test": "1.52.0",
+ "@playwright/test": "1.54.1",
"@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin-js": "3.1.0",
- "@stylistic/stylelint-plugin": "3.1.2",
+ "@stylistic/stylelint-plugin": "4.0.0",
"@types/dropzone": "5.7.9",
"@types/jquery": "3.5.32",
"@types/katex": "0.16.7",
- "@types/license-checker-webpack-plugin": "0.2.4",
+ "@types/license-checker-webpack-plugin": "0.2.5",
"@types/pdfobject": "2.2.5",
"@types/sortablejs": "1.15.8",
- "@types/swagger-ui-dist": "3.30.5",
+ "@types/swagger-ui-dist": "3.30.6",
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
"@types/toastify-js": "1.12.4",
- "@typescript-eslint/eslint-plugin": "8.33.1",
- "@typescript-eslint/parser": "8.33.1",
- "@vitejs/plugin-vue": "5.2.4",
- "@vitest/eslint-plugin": "1.2.1",
+ "@typescript-eslint/eslint-plugin": "8.38.0",
+ "@typescript-eslint/parser": "8.38.0",
+ "@vitejs/plugin-vue": "6.0.1",
+ "@vitest/eslint-plugin": "1.3.4",
"eslint": "8.57.0",
- "eslint-import-resolver-typescript": "4.4.3",
+ "eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "4.0.0",
"eslint-plugin-github": "5.0.2",
- "eslint-plugin-import-x": "4.15.1",
+ "eslint-plugin-import-x": "4.16.1",
"eslint-plugin-no-jquery": "3.1.1",
"eslint-plugin-no-use-extend-native": "0.5.0",
- "eslint-plugin-playwright": "2.2.0",
- "eslint-plugin-regexp": "2.8.0",
- "eslint-plugin-sonarjs": "3.0.2",
+ "eslint-plugin-playwright": "2.2.2",
+ "eslint-plugin-regexp": "2.9.0",
+ "eslint-plugin-sonarjs": "3.0.4",
"eslint-plugin-unicorn": "56.0.1",
- "eslint-plugin-vue": "10.2.0",
- "eslint-plugin-vue-scoped-css": "2.10.0",
+ "eslint-plugin-vue": "10.4.0",
+ "eslint-plugin-vue-scoped-css": "2.11.0",
"eslint-plugin-wc": "3.0.1",
- "happy-dom": "17.6.3",
+ "happy-dom": "18.0.1",
"markdownlint-cli": "0.45.0",
- "material-icon-theme": "5.23.0",
+ "material-icon-theme": "5.24.0",
"nolyfill": "1.0.44",
"postcss-html": "1.8.0",
- "stylelint": "16.20.0",
- "stylelint-config-recommended": "16.0.0",
+ "stylelint": "16.23.1",
+ "stylelint-config-recommended": "17.0.0",
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
"stylelint-declaration-strict-value": "1.10.11",
- "stylelint-define-config": "16.19.0",
+ "stylelint-define-config": "16.22.0",
"stylelint-value-no-unknown-custom-properties": "6.0.1",
- "svgo": "3.3.2",
+ "svgo": "4.0.0",
"type-fest": "4.41.0",
- "updates": "16.4.2",
- "vite-string-plugin": "1.4.4",
- "vitest": "3.2.2",
- "vue-tsc": "2.2.10"
+ "updates": "16.5.2",
+ "vite-string-plugin": "1.4.6",
+ "vitest": "3.2.4",
+ "vue-tsc": "3.0.4"
},
"engines": {
- "node": ">= 18.0.0"
+ "node": ">= 20.0.0"
}
},
"node_modules/@alloc/quick-lru": {
@@ -203,12 +203,12 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.27.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
- "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz",
+ "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.27.3"
+ "@babel/types": "^7.28.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -218,18 +218,18 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
+ "version": "7.28.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz",
+ "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
- "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
+ "version": "7.28.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
+ "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -474,9 +474,9 @@
}
},
"node_modules/@csstools/media-query-list-parser": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
- "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
+ "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
"dev": true,
"funding": [
{
@@ -493,8 +493,52 @@
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.1",
- "@csstools/css-tokenizer": "^3.0.1"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/selector-resolve-nested": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz",
+ "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.0.0"
+ }
+ },
+ "node_modules/@csstools/selector-specificity": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.0.0"
}
},
"node_modules/@discoveryjs/json-ext": {
@@ -518,21 +562,21 @@
}
},
"node_modules/@emnapi/core": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
- "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz",
+ "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@emnapi/wasi-threads": "1.0.2",
+ "@emnapi/wasi-threads": "1.0.4",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
- "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
+ "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -541,9 +585,9 @@
}
},
"node_modules/@emnapi/wasi-threads": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
- "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz",
+ "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -552,9 +596,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
- "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
+ "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==",
"cpu": [
"ppc64"
],
@@ -568,9 +612,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
- "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz",
+ "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==",
"cpu": [
"arm"
],
@@ -584,9 +628,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
- "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz",
+ "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==",
"cpu": [
"arm64"
],
@@ -600,9 +644,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
- "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz",
+ "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==",
"cpu": [
"x64"
],
@@ -616,9 +660,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
- "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz",
+ "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==",
"cpu": [
"arm64"
],
@@ -632,9 +676,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
- "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz",
+ "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==",
"cpu": [
"x64"
],
@@ -648,9 +692,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
- "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz",
+ "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==",
"cpu": [
"arm64"
],
@@ -664,9 +708,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
- "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz",
+ "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==",
"cpu": [
"x64"
],
@@ -680,9 +724,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
- "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz",
+ "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==",
"cpu": [
"arm"
],
@@ -696,9 +740,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
- "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz",
+ "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==",
"cpu": [
"arm64"
],
@@ -712,9 +756,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
- "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz",
+ "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==",
"cpu": [
"ia32"
],
@@ -728,9 +772,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
- "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz",
+ "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==",
"cpu": [
"loong64"
],
@@ -744,9 +788,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
- "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz",
+ "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==",
"cpu": [
"mips64el"
],
@@ -760,9 +804,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
- "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz",
+ "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==",
"cpu": [
"ppc64"
],
@@ -776,9 +820,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
- "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz",
+ "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==",
"cpu": [
"riscv64"
],
@@ -792,9 +836,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
- "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz",
+ "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==",
"cpu": [
"s390x"
],
@@ -808,9 +852,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
- "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz",
+ "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==",
"cpu": [
"x64"
],
@@ -824,9 +868,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz",
+ "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==",
"cpu": [
"arm64"
],
@@ -840,9 +884,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
- "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz",
+ "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==",
"cpu": [
"x64"
],
@@ -856,9 +900,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz",
+ "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==",
"cpu": [
"arm64"
],
@@ -872,9 +916,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
- "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz",
+ "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==",
"cpu": [
"x64"
],
@@ -887,10 +931,26 @@
"node": ">=18"
}
},
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz",
+ "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@esbuild/sunos-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
- "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz",
+ "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==",
"cpu": [
"x64"
],
@@ -904,9 +964,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
- "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz",
+ "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==",
"cpu": [
"arm64"
],
@@ -920,9 +980,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
- "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz",
+ "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==",
"cpu": [
"ia32"
],
@@ -936,9 +996,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
- "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz",
+ "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==",
"cpu": [
"x64"
],
@@ -1054,17 +1114,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -1177,17 +1226,6 @@
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -1257,6 +1295,27 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@isaacs/balanced-match": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
+ "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@isaacs/brace-expansion": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
+ "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@isaacs/balanced-match": "^4.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -1348,17 +1407,13 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+ "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
"license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
@@ -1370,19 +1425,10 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz",
+ "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==",
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -1390,15 +1436,15 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+ "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "version": "0.3.29",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -1445,39 +1491,11 @@
}
},
"node_modules/@keyv/serialize": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz",
- "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.0.tgz",
+ "integrity": "sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer": "^6.0.3"
- }
- },
- "node_modules/@keyv/serialize/node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
+ "license": "MIT"
},
"node_modules/@kurkle/color": {
"version": "0.3.4",
@@ -1537,25 +1555,25 @@
}
},
"node_modules/@mermaid-js/parser": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz",
- "integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.2.tgz",
+ "integrity": "sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==",
"license": "MIT",
"dependencies": {
"langium": "3.3.1"
}
},
"node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz",
- "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==",
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "^1.4.3",
"@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.9.0"
+ "@tybys/wasm-util": "^0.10.0"
}
},
"node_modules/@nodelib/fs.scandir": {
@@ -1611,9 +1629,9 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
- "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1624,13 +1642,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz",
- "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==",
+ "version": "1.54.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.1.tgz",
+ "integrity": "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.52.0"
+ "playwright": "1.54.1"
},
"bin": {
"playwright": "cli.js"
@@ -1650,14 +1668,21 @@
}
},
"node_modules/@primer/octicons": {
- "version": "19.15.2",
- "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-19.15.2.tgz",
- "integrity": "sha512-B80KFaujnmYTB339nPsQm3epqVHz4NaaoD6PoOvPSEsJ5vdfCpM94NX99eq2La84aBm44BKE0uVTzQ8qjk34Kg==",
+ "version": "19.15.5",
+ "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-19.15.5.tgz",
+ "integrity": "sha512-FCXPTlXlHvAS3rRBd1C/xVBYSYzPPwS8tNcUxnvUYK6L4/d+zUy2KExLtzW+L9xKo2z8J9uY+c1VCsNRf+b4MQ==",
"license": "MIT",
"dependencies": {
"object-assign": "^4.1.1"
}
},
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.29",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz",
+ "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@rollup/plugin-commonjs": {
"version": "22.0.2",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz",
@@ -1706,9 +1731,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.42.0.tgz",
- "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz",
+ "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==",
"cpu": [
"arm"
],
@@ -1720,9 +1745,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.42.0.tgz",
- "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz",
+ "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==",
"cpu": [
"arm64"
],
@@ -1734,9 +1759,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.42.0.tgz",
- "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz",
+ "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==",
"cpu": [
"arm64"
],
@@ -1748,9 +1773,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.42.0.tgz",
- "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz",
+ "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==",
"cpu": [
"x64"
],
@@ -1762,9 +1787,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.42.0.tgz",
- "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz",
+ "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==",
"cpu": [
"arm64"
],
@@ -1776,9 +1801,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.42.0.tgz",
- "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz",
+ "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==",
"cpu": [
"x64"
],
@@ -1790,9 +1815,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.42.0.tgz",
- "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz",
+ "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==",
"cpu": [
"arm"
],
@@ -1804,9 +1829,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.42.0.tgz",
- "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz",
+ "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==",
"cpu": [
"arm"
],
@@ -1818,9 +1843,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.42.0.tgz",
- "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz",
+ "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==",
"cpu": [
"arm64"
],
@@ -1832,9 +1857,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.42.0.tgz",
- "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz",
+ "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==",
"cpu": [
"arm64"
],
@@ -1846,9 +1871,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.42.0.tgz",
- "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz",
+ "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==",
"cpu": [
"loong64"
],
@@ -1859,10 +1884,10 @@
"linux"
]
},
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.42.0.tgz",
- "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==",
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz",
+ "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==",
"cpu": [
"ppc64"
],
@@ -1874,9 +1899,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.42.0.tgz",
- "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz",
+ "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==",
"cpu": [
"riscv64"
],
@@ -1888,9 +1913,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.42.0.tgz",
- "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz",
+ "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==",
"cpu": [
"riscv64"
],
@@ -1902,9 +1927,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.42.0.tgz",
- "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz",
+ "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==",
"cpu": [
"s390x"
],
@@ -1916,9 +1941,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz",
- "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz",
+ "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==",
"cpu": [
"x64"
],
@@ -1930,9 +1955,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz",
- "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz",
+ "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==",
"cpu": [
"x64"
],
@@ -1944,9 +1969,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.42.0.tgz",
- "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz",
+ "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==",
"cpu": [
"arm64"
],
@@ -1958,9 +1983,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.42.0.tgz",
- "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz",
+ "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==",
"cpu": [
"ia32"
],
@@ -1972,9 +1997,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz",
- "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz",
+ "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==",
"cpu": [
"x64"
],
@@ -2012,6 +2037,16 @@
"vue": "^3.2.29"
}
},
+ "node_modules/@simonwep/pickr": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.9.0.tgz",
+ "integrity": "sha512-oEYvv15PyfZzjoAzvXYt3UyNGwzsrpFxLaZKzkOSd0WYBVwLd19iJerePDONxC1iF6+DpcswPdLIM2KzCJuYFg==",
+ "license": "MIT",
+ "dependencies": {
+ "core-js": "3.32.2",
+ "nanopop": "2.3.0"
+ }
+ },
"node_modules/@stoplight/better-ajv-errors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz",
@@ -2221,17 +2256,6 @@
"node": "^12.20 || >=14.13"
}
},
- "node_modules/@stoplight/spectral-core/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/@stoplight/spectral-core/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -2548,26 +2572,25 @@
}
},
"node_modules/@stylistic/stylelint-plugin": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz",
- "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-4.0.0.tgz",
+ "integrity": "sha512-CFwt3K4Y/7bygNCLCQ8Sy4Hzgbhxq3BsNW0FIuYxl17HD3ywptm54ocyeiLVRrk5jtz1Zwks7Xr9eiZt8SWHAw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.1",
- "@csstools/css-tokenizer": "^3.0.1",
- "@csstools/media-query-list-parser": "^3.0.1",
- "is-plain-object": "^5.0.0",
- "postcss-selector-parser": "^6.1.2",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3",
+ "postcss": "^8.5.6",
+ "postcss-selector-parser": "^7.1.0",
"postcss-value-parser": "^4.2.0",
- "style-search": "^0.1.0",
- "stylelint": "^16.8.2"
+ "style-search": "^0.1.0"
},
"engines": {
"node": "^18.12 || >=20.9"
},
"peerDependencies": {
- "stylelint": "^16.8.0"
+ "stylelint": "^16.22.0"
}
},
"node_modules/@swc/helpers": {
@@ -2576,20 +2599,10 @@
"integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==",
"license": "MIT"
},
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/@tybys/wasm-util": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
- "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
+ "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -2707,9 +2720,9 @@
"license": "MIT"
},
"node_modules/@types/d3-dispatch": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz",
- "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
+ "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
"license": "MIT"
},
"node_modules/@types/d3-drag": {
@@ -2975,9 +2988,9 @@
"license": "MIT"
},
"node_modules/@types/license-checker-webpack-plugin": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@types/license-checker-webpack-plugin/-/license-checker-webpack-plugin-0.2.4.tgz",
- "integrity": "sha512-QTWqHJ5T9lgm3vPwWSZnBwAB+15zl4QBfGoNDcjnthHQEP8VTV87fYfp1HVeCtrDip73xWMtasQeA4QHQ0nFLw==",
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@types/license-checker-webpack-plugin/-/license-checker-webpack-plugin-0.2.5.tgz",
+ "integrity": "sha512-raj3YPZxjkDlRrJJUq6So+C9i/fqYxUtVZzlXxm6bwwXONOnTHvGCfYmbQhzsHJneiJdlR6mMH76/bvWbZZN8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3005,12 +3018,12 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.15.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz",
- "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==",
+ "version": "24.1.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
+ "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==",
"license": "MIT",
"dependencies": {
- "undici-types": "~6.21.0"
+ "undici-types": "~7.8.0"
}
},
"node_modules/@types/normalize-package-data": {
@@ -3056,9 +3069,9 @@
"license": "MIT"
},
"node_modules/@types/swagger-ui-dist": {
- "version": "3.30.5",
- "resolved": "https://registry.npmjs.org/@types/swagger-ui-dist/-/swagger-ui-dist-3.30.5.tgz",
- "integrity": "sha512-SrXhD9L8qeIxJzN+o1kmf3wXeVf/+Km3jIdRM1+Yq3I5b/dlF5TcGr5WCVM7I/cBYpgf43/gCPIucQ13AhICiw==",
+ "version": "3.30.6",
+ "resolved": "https://registry.npmjs.org/@types/swagger-ui-dist/-/swagger-ui-dist-3.30.6.tgz",
+ "integrity": "sha512-FVxN7wjLYRtJsZBscOcOcf8oR++m38vbUFjT33Mr9HBuasX9bRDrJsp7iwixcOtKSHEEa2B7o2+4wEiXqC+Ebw==",
"dev": true,
"license": "MIT"
},
@@ -3158,27 +3171,34 @@
}
},
"node_modules/@types/webpack-sources/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
+ "node_modules/@types/whatwg-mimetype": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
+ "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz",
- "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz",
+ "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.33.1",
- "@typescript-eslint/type-utils": "8.33.1",
- "@typescript-eslint/utils": "8.33.1",
- "@typescript-eslint/visitor-keys": "8.33.1",
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/type-utils": "8.38.0",
+ "@typescript-eslint/utils": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"graphemer": "^1.4.0",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
@@ -3192,7 +3212,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.33.1",
+ "@typescript-eslint/parser": "^8.38.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
}
@@ -3208,16 +3228,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz",
- "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz",
+ "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.33.1",
- "@typescript-eslint/types": "8.33.1",
- "@typescript-eslint/typescript-estree": "8.33.1",
- "@typescript-eslint/visitor-keys": "8.33.1",
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3233,14 +3253,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz",
- "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
+ "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.33.1",
- "@typescript-eslint/types": "^8.33.1",
+ "@typescript-eslint/tsconfig-utils": "^8.38.0",
+ "@typescript-eslint/types": "^8.38.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3255,14 +3275,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz",
- "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
+ "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.33.1",
- "@typescript-eslint/visitor-keys": "8.33.1"
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3273,9 +3293,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz",
- "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
+ "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3290,14 +3310,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz",
- "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz",
+ "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.33.1",
- "@typescript-eslint/utils": "8.33.1",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0",
+ "@typescript-eslint/utils": "8.38.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -3314,9 +3335,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz",
- "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
+ "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3328,16 +3349,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz",
- "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
+ "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.33.1",
- "@typescript-eslint/tsconfig-utils": "8.33.1",
- "@typescript-eslint/types": "8.33.1",
- "@typescript-eslint/visitor-keys": "8.33.1",
+ "@typescript-eslint/project-service": "8.38.0",
+ "@typescript-eslint/tsconfig-utils": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -3356,6 +3377,23 @@
"typescript": ">=4.8.4 <5.9.0"
}
},
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -3373,16 +3411,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz",
- "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
+ "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.33.1",
- "@typescript-eslint/types": "8.33.1",
- "@typescript-eslint/typescript-estree": "8.33.1"
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3397,14 +3435,14 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz",
- "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
+ "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.33.1",
- "eslint-visitor-keys": "^4.2.0"
+ "@typescript-eslint/types": "8.38.0",
+ "eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3421,10 +3459,38 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
"node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.11.tgz",
- "integrity": "sha512-i3/wlWjQJXMh1uiGtiv7k1EYvrrS3L1hdwmWJJiz1D8jWy726YFYPIxQWbEIVPVAgrfRR0XNlLrTQwq17cuCGw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
"cpu": [
"arm64"
],
@@ -3436,9 +3502,9 @@
]
},
"node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.11.tgz",
- "integrity": "sha512-8XXyFvc6w6kmMmi6VYchZhjd5CDcp+Lv6Cn1YmUme0ypsZ/0Kzd+9ESrWtDrWibKPTgSteDTxp75cvBOY64FQQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
"cpu": [
"x64"
],
@@ -3450,9 +3516,9 @@
]
},
"node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.11.tgz",
- "integrity": "sha512-0qJBYzP8Qk24CZ05RSWDQUjdiQUeIJGfqMMzbtXgCKl/a5xa6thfC0MQkGIr55LCLd6YmMyO640ifYUa53lybQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
"cpu": [
"x64"
],
@@ -3464,9 +3530,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.11.tgz",
- "integrity": "sha512-1sGwpgvx+WZf0GFT6vkkOm6UJ+mlsVnjw+Yv9esK71idWeRAG3bbpkf3AoY8KIqKqmnzJExi0uKxXpakQ5Pcbg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
"cpu": [
"arm"
],
@@ -3478,9 +3544,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.11.tgz",
- "integrity": "sha512-D/1F/2lTe+XAl3ohkYj51NjniVly8sIqkA/n1aOND3ZMO418nl2JNU95iVa1/RtpzaKcWEsNTtHRogykrUflJg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
"cpu": [
"arm"
],
@@ -3492,9 +3558,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.11.tgz",
- "integrity": "sha512-7vFWHLCCNFLEQlmwKQfVy066ohLLArZl+AV/AdmrD1/pD1FlmqM+FKbtnONnIwbHtgetFUCV/SRi1q4D49aTlw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
"cpu": [
"arm64"
],
@@ -3506,9 +3572,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.11.tgz",
- "integrity": "sha512-tYkGIx8hjWPh4zcn17jLEHU8YMmdP2obRTGkdaB3BguGHh31VCS3ywqC4QjTODjmhhNyZYkj/1Dz/+0kKvg9YA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
"cpu": [
"arm64"
],
@@ -3520,9 +3586,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.11.tgz",
- "integrity": "sha512-6F328QIUev29vcZeRX6v6oqKxfUoGwIIAhWGD8wSysnBYFY0nivp25jdWmAb1GildbCCaQvOKEhCok7YfWkj4Q==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
"cpu": [
"ppc64"
],
@@ -3534,9 +3600,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.11.tgz",
- "integrity": "sha512-NqhWmiGJGdzbZbeucPZIG9Iav4lyYLCarEnxAceguMx9qlpeEF7ENqYKOwB8Zqk7/CeuYMEcLYMaW2li6HyDzQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
"cpu": [
"riscv64"
],
@@ -3548,9 +3614,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.11.tgz",
- "integrity": "sha512-J2RPIFKMdTrLtBdfR1cUMKl8Gcy05nlQ+bEs/6al7EdWLk9cs3tnDREHZ7mV9uGbeghpjo4i8neNZNx3PYUY9w==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
"cpu": [
"riscv64"
],
@@ -3562,9 +3628,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.11.tgz",
- "integrity": "sha512-bDpGRerHvvHdhun7MmFUNDpMiYcJSqWckwAVVRTJf8F+RyqYJOp/mx04PDc7DhpNPeWdnTMu91oZRMV+gGaVcQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
"cpu": [
"s390x"
],
@@ -3576,9 +3642,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.11.tgz",
- "integrity": "sha512-G9U7bVmylzRLma3cK39RBm3guoD1HOvY4o0NS4JNm37AD0lS7/xyMt7kn0JejYyc0Im8J+rH69/dXGM9DAJcSQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
"cpu": [
"x64"
],
@@ -3590,9 +3656,9 @@
]
},
"node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.11.tgz",
- "integrity": "sha512-7qL20SBKomekSunm7M9Fe5L93bFbn+FbHiGJbfTlp0RKhPVoJDP73vOxf1QrmJHyDPECsGWPFnKa/f8fO2FsHw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
"cpu": [
"x64"
],
@@ -3604,9 +3670,9 @@
]
},
"node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.11.tgz",
- "integrity": "sha512-jisvIva8MidjI+B1lFRZZMfCPaCISePgTyR60wNT1MeQvIh5Ksa0G3gvI+Iqyj3jqYbvOHByenpa5eDGcSdoSg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
"cpu": [
"wasm32"
],
@@ -3614,16 +3680,16 @@
"license": "MIT",
"optional": true,
"dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.10"
+ "@napi-rs/wasm-runtime": "^0.2.11"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.11.tgz",
- "integrity": "sha512-G+H5nQZ8sRZ8ebMY6mRGBBvTEzMYEcgVauLsNHpvTUavZoCCRVP1zWkCZgOju2dW3O22+8seTHniTdl1/uLz3g==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
"cpu": [
"arm64"
],
@@ -3635,9 +3701,9 @@
]
},
"node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.11.tgz",
- "integrity": "sha512-Hfy46DBfFzyv0wgR0MMOwFFib2W2+Btc8oE5h4XlPhpelnSyA6nFxkVIyTgIXYGTdFaLoZFNn62fmqx3rjEg3A==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
"cpu": [
"ia32"
],
@@ -3649,9 +3715,9 @@
]
},
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.11.tgz",
- "integrity": "sha512-7L8NdsQlCJ8T106Gbz/AjzM4QKWVsoQbKpB9bMBGcIZswUuAnJMHpvbqGW3RBqLHCIwX4XZ5fxSBHEFcK2h9wA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
"cpu": [
"x64"
],
@@ -3663,27 +3729,30 @@
]
},
"node_modules/@vitejs/plugin-vue": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
- "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz",
+ "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@rolldown/pluginutils": "1.0.0-beta.29"
+ },
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"peerDependencies": {
- "vite": "^5.0.0 || ^6.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
"vue": "^3.2.25"
}
},
"node_modules/@vitest/eslint-plugin": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.2.1.tgz",
- "integrity": "sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz",
+ "integrity": "sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/utils": "^8.24.0"
+ "@typescript-eslint/utils": "^8.24.1"
},
"peerDependencies": {
"eslint": ">= 8.57.0",
@@ -3700,15 +3769,15 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.2.tgz",
- "integrity": "sha512-ipHw0z669vEMjzz3xQE8nJX1s0rQIb7oEl4jjl35qWTwm/KIHERIg/p/zORrjAaZKXfsv7IybcNGHwhOOAPMwQ==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.2",
- "@vitest/utils": "3.2.2",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -3717,13 +3786,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.2.tgz",
- "integrity": "sha512-jKojcaRyIYpDEf+s7/dD3LJt53c0dPfp5zCPXz9H/kcGrSlovU/t1yEaNzM9oFME3dcd4ULwRI/x0Po1Zf+LTw==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.2",
+ "@vitest/spy": "3.2.4",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -3771,9 +3840,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.2.tgz",
- "integrity": "sha512-FY4o4U1UDhO9KMd2Wee5vumwcaHw7Vg4V7yR4Oq6uK34nhEJOmdRYrk3ClburPRUA09lXD/oXWZ8y/Sdma0aUQ==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3784,27 +3853,28 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.2.tgz",
- "integrity": "sha512-GYcHcaS3ejGRZYed2GAkvsjBeXIEerDKdX3orQrBJqLRiea4NSS9qvn9Nxmuy1IwIB+EjFOaxXnX79l8HFaBwg==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.2",
- "pathe": "^2.0.3"
+ "@vitest/utils": "3.2.4",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.2.tgz",
- "integrity": "sha512-aMEI2XFlR1aNECbBs5C5IZopfi5Lb8QJZGGpzS8ZUHML5La5wCbrbhLOVSME68qwpT05ROEEOAZPRXFpxZV2wA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.2",
+ "@vitest/pretty-format": "3.2.4",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -3823,9 +3893,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.2.tgz",
- "integrity": "sha512-6Utxlx3o7pcTxvp0u8kUiXtRFScMrUg28KjB3R2hon7w4YqOFAEA9QwzPVVS1QNL3smo4xRNOpNZClRVfpMcYg==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3836,14 +3906,14 @@
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.2.tgz",
- "integrity": "sha512-qJYMllrWpF/OYfWHP32T31QCaLa3BAzT/n/8mNGhPdVcjY+JYazQFO1nsJvXU12Kp1xMpNY4AGuljPTNjQve6A==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.2",
- "loupe": "^3.1.3",
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
"tinyrainbow": "^2.0.0"
},
"funding": {
@@ -3851,71 +3921,71 @@
}
},
"node_modules/@volar/language-core": {
- "version": "2.4.14",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.14.tgz",
- "integrity": "sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==",
+ "version": "2.4.20",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.20.tgz",
+ "integrity": "sha512-dRDF1G33xaAIDqR6+mXUIjXYdu9vzSxlMGfMEwBxQsfY/JMUEXSpLTR057oTKlUQ2nIvCmP9k94A8h8z2VrNSA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/source-map": "2.4.14"
+ "@volar/source-map": "2.4.20"
}
},
"node_modules/@volar/source-map": {
- "version": "2.4.14",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.14.tgz",
- "integrity": "sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==",
+ "version": "2.4.20",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.20.tgz",
+ "integrity": "sha512-mVjmFQH8mC+nUaVwmbxoYUy8cww+abaO8dWzqPUjilsavjxH0jCJ3Mp8HFuHsdewZs2c+SP+EO7hCd8Z92whJg==",
"dev": true,
"license": "MIT"
},
"node_modules/@volar/typescript": {
- "version": "2.4.14",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.14.tgz",
- "integrity": "sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==",
+ "version": "2.4.20",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.20.tgz",
+ "integrity": "sha512-Oc4DczPwQyXcVbd+5RsNEqX6ia0+w3p+klwdZQ6ZKhFjWoBP9PCPQYlKYRi/tDemWphW93P/Vv13vcE9I9D2GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/language-core": "2.4.14",
+ "@volar/language-core": "2.4.20",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz",
- "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
+ "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.27.2",
- "@vue/shared": "3.5.16",
+ "@babel/parser": "^7.28.0",
+ "@vue/shared": "3.5.18",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",
- "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
+ "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-core": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-core": "3.5.18",
+ "@vue/shared": "3.5.18"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",
- "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
+ "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.27.2",
- "@vue/compiler-core": "3.5.16",
- "@vue/compiler-dom": "3.5.16",
- "@vue/compiler-ssr": "3.5.16",
- "@vue/shared": "3.5.16",
+ "@babel/parser": "^7.28.0",
+ "@vue/compiler-core": "3.5.18",
+ "@vue/compiler-dom": "3.5.18",
+ "@vue/compiler-ssr": "3.5.18",
+ "@vue/shared": "3.5.18",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.17",
- "postcss": "^8.5.3",
+ "postcss": "^8.5.6",
"source-map-js": "^1.2.1"
}
},
@@ -3929,13 +3999,13 @@
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",
- "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
+ "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-dom": "3.5.18",
+ "@vue/shared": "3.5.18"
}
},
"node_modules/@vue/compiler-vue2": {
@@ -3950,20 +4020,20 @@
}
},
"node_modules/@vue/language-core": {
- "version": "2.2.10",
- "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.10.tgz",
- "integrity": "sha512-+yNoYx6XIKuAO8Mqh1vGytu8jkFEOH5C8iOv3i8Z/65A7x9iAOXA97Q+PqZ3nlm2lxf5rOJuIGI/wDtx/riNYw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.4.tgz",
+ "integrity": "sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/language-core": "~2.4.11",
+ "@volar/language-core": "2.4.20",
"@vue/compiler-dom": "^3.5.0",
"@vue/compiler-vue2": "^2.7.16",
"@vue/shared": "^3.5.0",
- "alien-signals": "^1.0.3",
- "minimatch": "^9.0.3",
+ "alien-signals": "^2.0.5",
"muggle-string": "^0.4.1",
- "path-browserify": "^1.0.1"
+ "path-browserify": "^1.0.1",
+ "picomatch": "^4.0.2"
},
"peerDependencies": {
"typescript": "*"
@@ -3974,70 +4044,67 @@
}
}
},
- "node_modules/@vue/language-core/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "node_modules/@vue/language-core/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@vue/reactivity": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.16.tgz",
- "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz",
+ "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
"license": "MIT",
"dependencies": {
- "@vue/shared": "3.5.16"
+ "@vue/shared": "3.5.18"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz",
- "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
+ "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@vue/reactivity": "3.5.18",
+ "@vue/shared": "3.5.18"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz",
- "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
+ "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.16",
- "@vue/runtime-core": "3.5.16",
- "@vue/shared": "3.5.16",
+ "@vue/reactivity": "3.5.18",
+ "@vue/runtime-core": "3.5.18",
+ "@vue/shared": "3.5.18",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz",
- "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
+ "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-ssr": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-ssr": "3.5.18",
+ "@vue/shared": "3.5.18"
},
"peerDependencies": {
- "vue": "3.5.16"
+ "vue": "3.5.18"
}
},
"node_modules/@vue/shared": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz",
- "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz",
+ "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==",
"license": "MIT"
},
"node_modules/@webassemblyjs/ast": {
@@ -4256,9 +4323,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -4267,6 +4334,18 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "peerDependencies": {
+ "acorn": "^8.14.0"
+ }
+ },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -4363,9 +4442,9 @@
}
},
"node_modules/alien-signals": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz",
- "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.5.tgz",
+ "integrity": "sha512-PdJB6+06nUNAClInE3Dweq7/2xVAYM64vvvS1IHVHSJmgeOtEdrAGyp7Z2oJtYm0B342/Exd2NT0uMJaThcjLQ==",
"dev": true,
"license": "MIT"
},
@@ -4622,9 +4701,10 @@
}
},
"node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
@@ -4676,14 +4756,21 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
+ "node_modules/brace-expansion/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
@@ -4697,9 +4784,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
- "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
+ "version": "4.25.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
+ "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
"funding": [
{
"type": "opencollective",
@@ -4716,8 +4803,8 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001718",
- "electron-to-chromium": "^1.5.160",
+ "caniuse-lite": "^1.0.30001726",
+ "electron-to-chromium": "^1.5.173",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@@ -4799,24 +4886,24 @@
}
},
"node_modules/cacheable": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz",
- "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==",
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.3.tgz",
+ "integrity": "sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.8.2",
- "keyv": "^5.3.3"
+ "hookified": "^1.10.0",
+ "keyv": "^5.4.0"
}
},
"node_modules/cacheable/node_modules/keyv": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
- "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.4.0.tgz",
+ "integrity": "sha512-TMckyVjEoacG5IteUpUrOBsFORtheqziVyyY2dLUwg1jwTb8u48LX4TgmtogkNl9Y9unaEJ1luj10fGyjMGFOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@keyv/serialize": "^1.0.3"
+ "@keyv/serialize": "^1.1.0"
}
},
"node_modules/callsites": {
@@ -4838,9 +4925,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001721",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
- "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
+ "version": "1.0.30001731",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz",
+ "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==",
"funding": [
{
"type": "opencollective",
@@ -4858,9 +4945,9 @@
"license": "CC-BY-4.0"
},
"node_modules/chai": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
- "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz",
+ "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4871,7 +4958,7 @@
"pathval": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/chalk": {
@@ -4924,9 +5011,9 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.9",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz",
- "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
+ "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@@ -5050,9 +5137,9 @@
}
},
"node_modules/ci-info": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
- "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz",
+ "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==",
"dev": true,
"funding": [
{
@@ -5240,14 +5327,25 @@
"integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==",
"license": "MIT"
},
+ "node_modules/core-js": {
+ "version": "3.32.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz",
+ "integrity": "sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-js-compat": {
- "version": "3.42.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz",
- "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==",
+ "version": "3.44.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz",
+ "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.24.4"
+ "browserslist": "^4.25.1"
},
"funding": {
"type": "opencollective",
@@ -5367,9 +5465,9 @@
}
},
"node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5398,9 +5496,9 @@
}
},
"node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -5465,9 +5563,9 @@
"license": "MIT"
},
"node_modules/cytoscape": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz",
- "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==",
+ "version": "3.33.0",
+ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.0.tgz",
+ "integrity": "sha512-2d2EwwhaxLWC8ahkH1PpQwCyu6EY3xDRdcEJXrLTb4fOUtVc+YWQalHU67rFS1a6ngj1fgv9dQLtJxP/KAFZEw==",
"license": "MIT",
"engines": {
"node": ">=0.10"
@@ -6017,9 +6115,9 @@
}
},
"node_modules/decode-named-character-reference": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
- "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6282,9 +6380,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.165",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
- "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
+ "version": "1.5.194",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz",
+ "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==",
"license": "ISC"
},
"node_modules/emoji-regex": {
@@ -6303,9 +6401,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
- "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "version": "5.18.2",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
+ "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -6378,9 +6476,9 @@
"license": "MIT"
},
"node_modules/esbuild": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
- "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz",
+ "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -6390,31 +6488,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.5",
- "@esbuild/android-arm": "0.25.5",
- "@esbuild/android-arm64": "0.25.5",
- "@esbuild/android-x64": "0.25.5",
- "@esbuild/darwin-arm64": "0.25.5",
- "@esbuild/darwin-x64": "0.25.5",
- "@esbuild/freebsd-arm64": "0.25.5",
- "@esbuild/freebsd-x64": "0.25.5",
- "@esbuild/linux-arm": "0.25.5",
- "@esbuild/linux-arm64": "0.25.5",
- "@esbuild/linux-ia32": "0.25.5",
- "@esbuild/linux-loong64": "0.25.5",
- "@esbuild/linux-mips64el": "0.25.5",
- "@esbuild/linux-ppc64": "0.25.5",
- "@esbuild/linux-riscv64": "0.25.5",
- "@esbuild/linux-s390x": "0.25.5",
- "@esbuild/linux-x64": "0.25.5",
- "@esbuild/netbsd-arm64": "0.25.5",
- "@esbuild/netbsd-x64": "0.25.5",
- "@esbuild/openbsd-arm64": "0.25.5",
- "@esbuild/openbsd-x64": "0.25.5",
- "@esbuild/sunos-x64": "0.25.5",
- "@esbuild/win32-arm64": "0.25.5",
- "@esbuild/win32-ia32": "0.25.5",
- "@esbuild/win32-x64": "0.25.5"
+ "@esbuild/aix-ppc64": "0.25.8",
+ "@esbuild/android-arm": "0.25.8",
+ "@esbuild/android-arm64": "0.25.8",
+ "@esbuild/android-x64": "0.25.8",
+ "@esbuild/darwin-arm64": "0.25.8",
+ "@esbuild/darwin-x64": "0.25.8",
+ "@esbuild/freebsd-arm64": "0.25.8",
+ "@esbuild/freebsd-x64": "0.25.8",
+ "@esbuild/linux-arm": "0.25.8",
+ "@esbuild/linux-arm64": "0.25.8",
+ "@esbuild/linux-ia32": "0.25.8",
+ "@esbuild/linux-loong64": "0.25.8",
+ "@esbuild/linux-mips64el": "0.25.8",
+ "@esbuild/linux-ppc64": "0.25.8",
+ "@esbuild/linux-riscv64": "0.25.8",
+ "@esbuild/linux-s390x": "0.25.8",
+ "@esbuild/linux-x64": "0.25.8",
+ "@esbuild/netbsd-arm64": "0.25.8",
+ "@esbuild/netbsd-x64": "0.25.8",
+ "@esbuild/openbsd-arm64": "0.25.8",
+ "@esbuild/openbsd-x64": "0.25.8",
+ "@esbuild/openharmony-arm64": "0.25.8",
+ "@esbuild/sunos-x64": "0.25.8",
+ "@esbuild/win32-arm64": "0.25.8",
+ "@esbuild/win32-ia32": "0.25.8",
+ "@esbuild/win32-x64": "0.25.8"
}
},
"node_modules/esbuild-loader": {
@@ -6444,18 +6543,6 @@
"node": ">=6"
}
},
- "node_modules/escape-goat": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz",
- "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -6543,9 +6630,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
- "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
"bin": {
@@ -6559,14 +6646,14 @@
}
},
"node_modules/eslint-import-context": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.8.tgz",
- "integrity": "sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==",
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz",
+ "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-tsconfig": "^4.10.1",
- "stable-hash-x": "^0.1.1"
+ "stable-hash-x": "^0.2.0"
},
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
@@ -6606,9 +6693,9 @@
}
},
"node_modules/eslint-import-resolver-typescript": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.3.tgz",
- "integrity": "sha512-elVDn1eWKFrWlzxlWl9xMt8LltjKl161Ix50JFC50tHXI5/TRP32SNEqlJ/bo/HV+g7Rou/tlPQU2AcRtIhrOg==",
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz",
+ "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6616,7 +6703,7 @@
"eslint-import-context": "^0.1.8",
"get-tsconfig": "^4.10.1",
"is-bun-module": "^2.0.0",
- "stable-hash-x": "^0.1.1",
+ "stable-hash-x": "^0.2.0",
"tinyglobby": "^0.2.14",
"unrs-resolver": "^1.7.11"
},
@@ -6641,9 +6728,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
- "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
+ "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6783,30 +6870,30 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.31.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
- "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "version": "2.32.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
+ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.8",
- "array.prototype.findlastindex": "^1.2.5",
- "array.prototype.flat": "^1.3.2",
- "array.prototype.flatmap": "^1.3.2",
+ "array-includes": "^3.1.9",
+ "array.prototype.findlastindex": "^1.2.6",
+ "array.prototype.flat": "^1.3.3",
+ "array.prototype.flatmap": "^1.3.3",
"debug": "^3.2.7",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.0",
+ "eslint-module-utils": "^2.12.1",
"hasown": "^2.0.2",
- "is-core-module": "^2.15.1",
+ "is-core-module": "^2.16.1",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
"object.fromentries": "^2.0.8",
"object.groupby": "^1.0.3",
- "object.values": "^1.2.0",
+ "object.values": "^1.2.1",
"semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimend": "^1.0.9",
"tsconfig-paths": "^3.15.0"
},
"engines": {
@@ -6817,21 +6904,21 @@
}
},
"node_modules/eslint-plugin-import-x": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.15.1.tgz",
- "integrity": "sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==",
+ "version": "4.16.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.1.tgz",
+ "integrity": "sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "^8.33.1",
+ "@typescript-eslint/types": "^8.35.0",
"comment-parser": "^1.4.1",
"debug": "^4.4.1",
- "eslint-import-context": "^0.1.7",
+ "eslint-import-context": "^0.1.9",
"is-glob": "^4.0.3",
"minimatch": "^9.0.3 || ^10.0.1",
"semver": "^7.7.2",
- "stable-hash-x": "^0.1.1",
- "unrs-resolver": "^1.7.10"
+ "stable-hash-x": "^0.2.0",
+ "unrs-resolver": "^1.9.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6853,17 +6940,6 @@
}
}
},
- "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/eslint-plugin-import/node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -6940,17 +7016,6 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
}
},
- "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -7001,14 +7066,11 @@
}
},
"node_modules/eslint-plugin-playwright": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.2.0.tgz",
- "integrity": "sha512-qSQpAw7RcSzE3zPp8FMGkthaCWovHZ/BsXtpmnGax9vQLIovlh1bsZHEa2+j2lv9DWhnyeLM/qZmp7ffQZfQvg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.2.2.tgz",
+ "integrity": "sha512-j0jKpndIPOXRRP9uMkwb9l/nSmModOU3452nrFdgFJoEv/435J1onk8+aITzjDW8DfypxgmVaDMdmVIa6F7I0w==",
"dev": true,
"license": "MIT",
- "workspaces": [
- "examples"
- ],
"dependencies": {
"globals": "^13.23.0"
},
@@ -7020,9 +7082,9 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz",
- "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==",
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz",
+ "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7051,9 +7113,9 @@
}
},
"node_modules/eslint-plugin-regexp": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.8.0.tgz",
- "integrity": "sha512-xme90IvkMgdyS+NJC21FM0H6ek4urGsdlIFTXpZRqH2BKJKVSd8hRbyrCpbcqfGBi2jth3eQoLiO3RC1gxZHiw==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.9.0.tgz",
+ "integrity": "sha512-9WqJMnOq8VlE/cK+YAo9C9YHhkOtcEtEk9d12a+H7OSZFwlpI6stiHmYPGa2VE0QhTzodJyhlyprUaXDZLgHBw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7073,9 +7135,9 @@
}
},
"node_modules/eslint-plugin-sonarjs": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.2.tgz",
- "integrity": "sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.4.tgz",
+ "integrity": "sha512-ftQcP811kRJNXapqpQXHErEoVOdTPfYPPYd7n3AExIPwv4qWKKHf4slFvXmodiOnfgy1Tl3waPZZLD7lcvJOtw==",
"dev": true,
"license": "LGPL-3.0-only",
"dependencies": {
@@ -7084,15 +7146,33 @@
"bytes": "3.1.2",
"functional-red-black-tree": "1.0.1",
"jsx-ast-utils": "3.3.5",
+ "lodash.merge": "4.6.2",
"minimatch": "9.0.5",
"scslre": "0.3.0",
- "semver": "7.7.1",
- "typescript": "^5"
+ "semver": "7.7.2",
+ "typescript": ">=5"
},
"peerDependencies": {
"eslint": "^8.0.0 || ^9.0.0"
}
},
+ "node_modules/eslint-plugin-sonarjs/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint-plugin-sonarjs/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/eslint-plugin-sonarjs/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -7109,19 +7189,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/eslint-plugin-sonarjs/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-plugin-unicorn": {
"version": "56.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz",
@@ -7170,9 +7237,9 @@
}
},
"node_modules/eslint-plugin-vue": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz",
- "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.4.0.tgz",
+ "integrity": "sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7187,24 +7254,30 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"peerDependencies": {
+ "@typescript-eslint/parser": "^7.0.0 || ^8.0.0",
"eslint": "^8.57.0 || ^9.0.0",
"vue-eslint-parser": "^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/parser": {
+ "optional": true
+ }
}
},
"node_modules/eslint-plugin-vue-scoped-css": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue-scoped-css/-/eslint-plugin-vue-scoped-css-2.10.0.tgz",
- "integrity": "sha512-oH2NY7XFHF3EGOotvuPdnhB0x4uOmjoRoWZVfMnJ2PILDKVgZgM8WZ0rhDlh+fsr9jO9P8CAXO5/9s9v/GZNhg==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue-scoped-css/-/eslint-plugin-vue-scoped-css-2.11.0.tgz",
+ "integrity": "sha512-rrJgLY8iroTIUMSyxhyhJzFcRxABbk3gFrOLkl41F9G1VBqNNpDShyf6PmDoBEWDk07/bJlnqYlvnQ3giUrRYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "eslint-compat-utils": "^0.6.0",
+ "eslint-compat-utils": "^0.6.5",
"lodash": "^4.17.21",
"postcss": "^8.4.31",
"postcss-safe-parser": "^6.0.0",
"postcss-scss": "^4.0.3",
- "postcss-selector-parser": "^6.0.9",
+ "postcss-selector-parser": "^7.0.0",
"postcss-styl": "^0.12.0"
},
"engines": {
@@ -7218,6 +7291,20 @@
"vue-eslint-parser": ">=7.1.0"
}
},
+ "node_modules/eslint-plugin-vue/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/eslint-plugin-wc": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.0.1.tgz",
@@ -7260,9 +7347,9 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -7289,17 +7376,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -7352,15 +7428,15 @@
}
},
"node_modules/espree": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.0"
+ "eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7446,9 +7522,9 @@
}
},
"node_modules/expect-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
- "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
+ "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -7456,9 +7532,9 @@
}
},
"node_modules/exsolve": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz",
- "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz",
+ "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==",
"license": "MIT"
},
"node_modules/fast-deep-equal": {
@@ -7586,6 +7662,12 @@
}
}
},
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
+ "license": "MIT"
+ },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -7811,16 +7893,6 @@
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"license": "BSD-2-Clause"
},
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/glob/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -7967,19 +8039,37 @@
}
},
"node_modules/happy-dom": {
- "version": "17.6.3",
- "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-17.6.3.tgz",
- "integrity": "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug==",
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-18.0.1.tgz",
+ "integrity": "sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "webidl-conversions": "^7.0.0",
+ "@types/node": "^20.0.0",
+ "@types/whatwg-mimetype": "^3.0.2",
"whatwg-mimetype": "^3.0.0"
},
"engines": {
"node": ">=20.0.0"
}
},
+ "node_modules/happy-dom/node_modules/@types/node": {
+ "version": "20.19.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz",
+ "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/happy-dom/node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -8017,9 +8107,9 @@
}
},
"node_modules/hookified": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.1.tgz",
- "integrity": "sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz",
+ "integrity": "sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==",
"dev": true,
"license": "MIT"
},
@@ -8074,9 +8164,9 @@
}
},
"node_modules/htmx.org": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-2.0.4.tgz",
- "integrity": "sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-2.0.6.tgz",
+ "integrity": "sha512-7ythjYneGSk3yCHgtCnQeaoF+D+o7U2LF37WU3O0JYv3gTZSicdEFiI/Ai/NJyC5ZpYJWMpUb11OC5Lr6AfAqA==",
"license": "0BSD"
},
"node_modules/iconv-lite": {
@@ -8782,9 +8872,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
- "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
+ "version": "0.37.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+ "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
"dev": true,
"license": "MIT"
},
@@ -8880,16 +8970,6 @@
"webpack": "^4.4.0 || ^5.4.0"
}
},
- "node_modules/license-checker-webpack-plugin/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/license-checker-webpack-plugin/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -9105,9 +9185,9 @@
"license": "MIT"
},
"node_modules/loupe": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
- "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz",
+ "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==",
"dev": true,
"license": "MIT"
},
@@ -9226,15 +9306,15 @@
}
},
"node_modules/markdownlint-cli/node_modules/glob": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz",
- "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==",
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz",
+ "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==",
"dev": true,
"license": "ISC",
"dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^4.0.1",
- "minimatch": "^10.0.0",
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.0.3",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^2.0.0"
@@ -9279,9 +9359,9 @@
}
},
"node_modules/material-icon-theme": {
- "version": "5.23.0",
- "resolved": "https://registry.npmjs.org/material-icon-theme/-/material-icon-theme-5.23.0.tgz",
- "integrity": "sha512-coDbg7MzBzQoLfv501w63pP1QjyCbP5mICm40WxyHIxa+aA4yS9QMOKGzaZDsq7oUKjJ0NfjjkIMG4ngGO9erQ==",
+ "version": "5.24.0",
+ "resolved": "https://registry.npmjs.org/material-icon-theme/-/material-icon-theme-5.24.0.tgz",
+ "integrity": "sha512-fKCtRSOZwSMipgfsisDtlERXndg7hu4Ykhw8Vr+92NFVhYAi3izRHyKg6YooTw6yIB8fMF6Gq8IeNhbRxRY2SQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9351,14 +9431,14 @@
}
},
"node_modules/mermaid": {
- "version": "11.6.0",
- "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz",
- "integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==",
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.10.0.tgz",
+ "integrity": "sha512-oQsFzPBy9xlpnGxUqLbVY8pvknLlsNIJ0NWwi8SUJjhbP1IT0E0o1lfhU4iYV3ubpy+xkzkaOyDUQMn06vQElQ==",
"license": "MIT",
"dependencies": {
"@braintree/sanitize-url": "^7.0.4",
"@iconify/utils": "^2.1.33",
- "@mermaid-js/parser": "^0.4.0",
+ "@mermaid-js/parser": "^0.6.2",
"@types/d3": "^7.4.3",
"cytoscape": "^3.29.3",
"cytoscape-cose-bilkent": "^4.1.0",
@@ -9367,11 +9447,11 @@
"d3-sankey": "^0.12.3",
"dagre-d3-es": "7.0.11",
"dayjs": "^1.11.13",
- "dompurify": "^3.2.4",
- "katex": "^0.16.9",
+ "dompurify": "^3.2.5",
+ "katex": "^0.16.22",
"khroma": "^2.1.0",
"lodash-es": "^4.17.21",
- "marked": "^15.0.7",
+ "marked": "^16.0.0",
"roughjs": "^4.6.6",
"stylis": "^4.3.6",
"ts-dedent": "^2.2.0",
@@ -9379,15 +9459,15 @@
}
},
"node_modules/mermaid/node_modules/marked": {
- "version": "15.0.12",
- "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
- "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-16.1.1.tgz",
+ "integrity": "sha512-ij/2lXfCRT71L6u0M29tJPhP0bM5shLL3u5BePhFwPELj2blMJ6GDtD7PfJhRLhJ/c2UwrK17ySVcDzy2YHjHQ==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
- "node": ">= 18"
+ "node": ">= 20"
}
},
"node_modules/micromark": {
@@ -9991,12 +10071,12 @@
}
},
"node_modules/minimatch": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
- "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz",
+ "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "@isaacs/brace-expansion": "^5.0.0"
},
"engines": {
"node": "20 || >=22"
@@ -10120,10 +10200,16 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/nanopop": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.3.0.tgz",
+ "integrity": "sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==",
+ "license": "MIT"
+ },
"node_modules/napi-postinstall": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz",
- "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz",
+ "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==",
"dev": true,
"license": "MIT",
"bin": {
@@ -10360,6 +10446,17 @@
"wrappy": "1"
}
},
+ "node_modules/online-3d-viewer": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/online-3d-viewer/-/online-3d-viewer-0.16.0.tgz",
+ "integrity": "sha512-Mcmo41TM3K+svlMDRH8ySKSY2e8s7Sssdb5U9LV3gkFKVWGGuS304Vk5gqxopAJbE72DpsC67Ve3YNtcAuROwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@simonwep/pickr": "1.9.0",
+ "fflate": "0.8.2",
+ "three": "0.176.0"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -10561,9 +10658,9 @@
"license": "MIT"
},
"node_modules/pathval": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
- "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10683,24 +10780,24 @@
}
},
"node_modules/pkg-types": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz",
- "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz",
+ "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==",
"license": "MIT",
"dependencies": {
- "confbox": "^0.2.1",
- "exsolve": "^1.0.1",
+ "confbox": "^0.2.2",
+ "exsolve": "^1.0.7",
"pathe": "^2.0.3"
}
},
"node_modules/playwright": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz",
- "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==",
+ "version": "1.54.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.1.tgz",
+ "integrity": "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.52.0"
+ "playwright-core": "1.54.1"
},
"bin": {
"playwright": "cli.js"
@@ -10713,9 +10810,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz",
- "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==",
+ "version": "1.54.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.1.tgz",
+ "integrity": "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -10762,9 +10859,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
- "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
@@ -10901,19 +10998,6 @@
"postcss": "^8.1.0"
}
},
- "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
- "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss-modules-scope": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
@@ -10929,19 +11013,6 @@
"postcss": "^8.1.0"
}
},
- "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
- "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss-modules-values": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
@@ -10982,10 +11053,23 @@
"postcss": "^8.2.14"
}
},
+ "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/postcss-nesting": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz",
- "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz",
+ "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==",
"funding": [
{
"type": "github",
@@ -10998,7 +11082,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/selector-resolve-nested": "^3.0.0",
+ "@csstools/selector-resolve-nested": "^3.1.0",
"@csstools/selector-specificity": "^5.0.0",
"postcss-selector-parser": "^7.0.0"
},
@@ -11009,63 +11093,6 @@
"postcss": "^8.4"
}
},
- "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz",
- "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^7.0.0"
- }
- },
- "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
- "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^7.0.0"
- }
- },
- "node_modules/postcss-nesting/node_modules/postcss-selector-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
- "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss-resolve-nested-selector": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
@@ -11118,9 +11145,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@@ -11167,9 +11194,9 @@
}
},
"node_modules/prettier": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
- "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -12051,9 +12078,9 @@
}
},
"node_modules/stable-hash-x": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.1.1.tgz",
- "integrity": "sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz",
+ "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12215,6 +12242,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/strip-literal": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
+ "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
@@ -12223,9 +12263,9 @@
"license": "ISC"
},
"node_modules/stylelint": {
- "version": "16.20.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz",
- "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==",
+ "version": "16.23.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.23.1.tgz",
+ "integrity": "sha512-dNvDTsKV1U2YtiUDfe9d2gp902veFeo3ecCWdGlmLm2WFrAV0+L5LoOj/qHSBABQwMsZPJwfC4bf39mQm1S5zw==",
"dev": true,
"funding": [
{
@@ -12239,9 +12279,9 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/media-query-list-parser": "^4.0.2",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3",
"@csstools/selector-specificity": "^5.0.0",
"@dual-bundle/import-meta-resolve": "^4.1.0",
"balanced-match": "^2.0.0",
@@ -12252,21 +12292,21 @@
"debug": "^4.4.1",
"fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^10.1.0",
+ "file-entry-cache": "^10.1.3",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^7.0.4",
+ "ignore": "^7.0.5",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.36.0",
+ "known-css-properties": "^0.37.0",
"mathml-tag-names": "^2.1.3",
"meow": "^13.2.0",
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"picocolors": "^1.1.1",
- "postcss": "^8.5.3",
+ "postcss": "^8.5.6",
"postcss-resolve-nested-selector": "^0.1.6",
"postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^7.1.0",
@@ -12286,9 +12326,9 @@
}
},
"node_modules/stylelint-config-recommended": {
- "version": "16.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz",
- "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==",
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz",
+ "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==",
"dev": true,
"funding": [
{
@@ -12305,7 +12345,7 @@
"node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^16.16.0"
+ "stylelint": "^16.23.0"
}
},
"node_modules/stylelint-declaration-block-no-ignored-properties": {
@@ -12335,9 +12375,9 @@
}
},
"node_modules/stylelint-define-config": {
- "version": "16.19.0",
- "resolved": "https://registry.npmjs.org/stylelint-define-config/-/stylelint-define-config-16.19.0.tgz",
- "integrity": "sha512-J+VluCron5JwUS/sjtTwzMjpvjqvTe5Rs0SB4mjZDTonPFINEhS9/r0yIA9olfjdf9enV8H/oLMm22SF5yykig==",
+ "version": "16.22.0",
+ "resolved": "https://registry.npmjs.org/stylelint-define-config/-/stylelint-define-config-16.22.0.tgz",
+ "integrity": "sha512-EEgHRugsryKo7LpenYyd4yLoZon3lHvRAi7WsMaZoRX9GPOkeDXrMga+N4VA4nK4Zus02EQwyYkndNQ64jaB2A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12369,80 +12409,26 @@
"stylelint": ">=16"
}
},
- "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
- "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.5",
- "@csstools/css-tokenizer": "^3.0.4"
- }
- },
- "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
- "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^7.0.0"
- }
- },
- "node_modules/stylelint/node_modules/balanced-match": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
- "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz",
- "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==",
+ "version": "10.1.3",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.3.tgz",
+ "integrity": "sha512-D+w75Ub8T55yor7fPgN06rkCAUbAYw2vpxJmmjv/GDAcvCnv9g7IvHhIZoxzRZThrXPFI2maeY24pPbtyYU7Lg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "flat-cache": "^6.1.9"
+ "flat-cache": "^6.1.12"
}
},
"node_modules/stylelint/node_modules/flat-cache": {
- "version": "6.1.9",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz",
- "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==",
+ "version": "6.1.12",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.12.tgz",
+ "integrity": "sha512-U+HqqpZPPXP5d24bWuRzjGqVqUcw64k4nZAbruniDwdRg0H10tvN7H6ku1tjhA4rg5B9GS3siEvwO2qjJJ6f8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cacheable": "^1.9.0",
+ "cacheable": "^1.10.3",
"flatted": "^3.3.3",
- "hookified": "^1.8.2"
+ "hookified": "^1.10.0"
}
},
"node_modules/stylelint/node_modules/ignore": {
@@ -12482,20 +12468,6 @@
"postcss": "^8.4.31"
}
},
- "node_modules/stylelint/node_modules/postcss-selector-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
- "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/stylelint/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -12534,13 +12506,13 @@
}
},
"node_modules/stylus/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
"node_modules/sucrase": {
@@ -12565,6 +12537,21 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/sucrase/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/sucrase/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -12711,25 +12698,25 @@
"dev": true
},
"node_modules/svgo": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
- "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
+ "commander": "^11.1.0",
"css-select": "^5.1.0",
- "css-tree": "^2.3.1",
+ "css-tree": "^3.0.1",
"css-what": "^6.1.0",
"csso": "^5.0.5",
- "picocolors": "^1.0.0"
+ "picocolors": "^1.1.1",
+ "sax": "^1.4.1"
},
"bin": {
- "svgo": "bin/svgo"
+ "svgo": "bin/svgo.js"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16"
},
"funding": {
"type": "opencollective",
@@ -12737,35 +12724,21 @@
}
},
"node_modules/svgo/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">=16"
}
},
- "node_modules/svgo/node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "node_modules/svgo/node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/svgo/node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true,
- "license": "CC0-1.0"
+ "license": "ISC"
},
"node_modules/svgson": {
"version": "5.3.1",
@@ -12779,9 +12752,9 @@
}
},
"node_modules/swagger-ui-dist": {
- "version": "5.24.0",
- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.24.0.tgz",
- "integrity": "sha512-okwN8vf14TOgBTUyGgCXEAoHnrwwp/042dC00B3kPu2OAe9zD75BtSbLlgAK1Y5e3csJhs+AdnIxJYZN9uvptg==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.27.0.tgz",
+ "integrity": "sha512-tS6LRyBhY6yAqxrfsA9IYpGWPUJOri6sclySa7TdC7XQfGLvTwDY531KLgfQwHEtQsn+sT4JlUspbeQDBVGWig==",
"license": "Apache-2.0",
"dependencies": {
"@scarf/scarf": "=1.4.0"
@@ -12801,13 +12774,13 @@
}
},
"node_modules/synckit": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
- "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz",
+ "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@pkgr/core": "^0.2.4"
+ "@pkgr/core": "^0.2.9"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -12905,6 +12878,19 @@
}
}
},
+ "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/tapable": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
@@ -12915,9 +12901,9 @@
}
},
"node_modules/terser": {
- "version": "5.41.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.41.0.tgz",
- "integrity": "sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==",
+ "version": "5.43.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
+ "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
"license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -13000,6 +12986,12 @@
"node": ">=0.8"
}
},
+ "node_modules/three": {
+ "version": "0.176.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.176.0.tgz",
+ "integrity": "sha512-PWRKYWQo23ojf9oZSlRGH8K09q7nRSWx6LY/HF/UUrMdYgN9i1e2OwJYHoQjwc6HF/4lvvYLC5YC1X8UJL2ZpA==",
+ "license": "MIT"
+ },
"node_modules/throttle-debounce": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
@@ -13046,9 +13038,9 @@
}
},
"node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
- "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "version": "6.4.6",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -13061,9 +13053,9 @@
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13074,9 +13066,9 @@
}
},
"node_modules/tinypool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz",
- "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13243,9 +13235,9 @@
}
},
"node_modules/typo-js": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.2.5.tgz",
- "integrity": "sha512-F45vFWdGX8xahIk/sOp79z2NJs8ETMYsmMChm9D5Hlx3+9j7VnCyQyvij5MOCrNY3NNe8noSyokRjQRfq+Bc7A==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.3.0.tgz",
+ "integrity": "sha512-ERVoYp5PG7jpj7+kzKmFZfp5+IYMOOQM3etNnlYu06Z2CL5UmC9ekT8Z/JVYpR7e7sXB4bOFq1fz/budv++Z0g==",
"license": "BSD-3-Clause"
},
"node_modules/uc.micro": {
@@ -13262,15 +13254,15 @@
"license": "MIT"
},
"node_modules/uint8-to-base64": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/uint8-to-base64/-/uint8-to-base64-0.2.0.tgz",
- "integrity": "sha512-r13jrghEYZAN99GeYpEjM107DOxqB65enskpwce8rRHVAGEtaWmsF5GqoGdPMf8DIXc9XyAJTdvlvRZi4LsszA==",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/uint8-to-base64/-/uint8-to-base64-0.2.1.tgz",
+ "integrity": "sha512-uO/84GaoDUfiAxpa8EksjVLE77A9Kc7ZTziN4zRpq4de9yLaLcZn3jx1/sVjyupsywcVX6RKWbqLe7gUNyzH+Q==",
"license": "ISC"
},
"node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
+ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
"license": "MIT"
},
"node_modules/universalify": {
@@ -13284,36 +13276,38 @@
}
},
"node_modules/unrs-resolver": {
- "version": "1.7.11",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.11.tgz",
- "integrity": "sha512-OhuAzBImFPjKNgZ2JwHMfGFUA6NSbRegd1+BPjC1Y0E6X9Y/vJ4zKeGmIMqmlYboj6cMNEwKI+xQisrg4J0HaQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "napi-postinstall": "^0.2.2"
+ "napi-postinstall": "^0.3.0"
},
"funding": {
"url": "https://opencollective.com/unrs-resolver"
},
"optionalDependencies": {
- "@unrs/resolver-binding-darwin-arm64": "1.7.11",
- "@unrs/resolver-binding-darwin-x64": "1.7.11",
- "@unrs/resolver-binding-freebsd-x64": "1.7.11",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.11",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.11",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.7.11",
- "@unrs/resolver-binding-linux-arm64-musl": "1.7.11",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.11",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.11",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.7.11",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.7.11",
- "@unrs/resolver-binding-linux-x64-gnu": "1.7.11",
- "@unrs/resolver-binding-linux-x64-musl": "1.7.11",
- "@unrs/resolver-binding-wasm32-wasi": "1.7.11",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.7.11",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.7.11",
- "@unrs/resolver-binding-win32-x64-msvc": "1.7.11"
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
}
},
"node_modules/update-browserslist-db": {
@@ -13347,16 +13341,16 @@
}
},
"node_modules/updates": {
- "version": "16.4.2",
- "resolved": "https://registry.npmjs.org/updates/-/updates-16.4.2.tgz",
- "integrity": "sha512-FCnbRnBUWrzhbsatc+RqUoLK7WB88VDGB9Jb1vB2JOx8gN69oXAE4/umtZsUzdeiM2TZ0aVb0kQJ0NbY8K21nw==",
+ "version": "16.5.2",
+ "resolved": "https://registry.npmjs.org/updates/-/updates-16.5.2.tgz",
+ "integrity": "sha512-CyxIT9TvUGe62hNWXW5FjbgNd8cPucqO5yrihmf+WgMtSUj31b4HyPuMsozxTnO0XQhTTLShIyV7ySJSSC5dsg==",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"updates": "dist/index.js"
},
"engines": {
- "node": ">=18"
+ "node": ">=20"
}
},
"node_modules/uri-js": {
@@ -13433,24 +13427,24 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz",
+ "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
+ "fdir": "^6.4.6",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.40.0",
+ "tinyglobby": "^0.2.14"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -13459,14 +13453,14 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@types/node": "^20.19.0 || >=22.12.0",
"jiti": ">=1.21.0",
- "less": "*",
+ "less": "^4.0.0",
"lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
"terser": "^5.16.0",
"tsx": "^4.8.1",
"yaml": "^2.4.2"
@@ -13508,9 +13502,9 @@
}
},
"node_modules/vite-node": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.2.tgz",
- "integrity": "sha512-Xj/jovjZvDXOq2FgLXu8NsY4uHUMWtzVmMC2LkCu9HWdr9Qu1Is5sanX3Z4jOFKdohfaWDnEJWp9pRP0vVpAcA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13531,23 +13525,23 @@
}
},
"node_modules/vite-string-plugin": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/vite-string-plugin/-/vite-string-plugin-1.4.4.tgz",
- "integrity": "sha512-mHcdjsDaJSBnUrsAb4L+AWamWVWSFwDb5JuBbU5hAOt1w/ixaQ0EwWx2gAZiqFfpl5XlSE0WmCp2ShbdwgqsvQ==",
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/vite-string-plugin/-/vite-string-plugin-1.4.6.tgz",
+ "integrity": "sha512-Csjtny8/uVIynzlaRRj4RpHrPAakNwlH9jw6kgQ8tQhc2f0zzA6bCbAgWD0y84EgB8aLNrz7pZFUqSt3LOtk+w==",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/vite/node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
"node_modules/vite/node_modules/fdir": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
- "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "version": "6.4.6",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -13575,9 +13569,9 @@
}
},
"node_modules/vite/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13588,13 +13582,13 @@
}
},
"node_modules/vite/node_modules/rollup": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz",
- "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz",
+ "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.7"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -13604,44 +13598,44 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.42.0",
- "@rollup/rollup-android-arm64": "4.42.0",
- "@rollup/rollup-darwin-arm64": "4.42.0",
- "@rollup/rollup-darwin-x64": "4.42.0",
- "@rollup/rollup-freebsd-arm64": "4.42.0",
- "@rollup/rollup-freebsd-x64": "4.42.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.42.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.42.0",
- "@rollup/rollup-linux-arm64-gnu": "4.42.0",
- "@rollup/rollup-linux-arm64-musl": "4.42.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.42.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.42.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.42.0",
- "@rollup/rollup-linux-riscv64-musl": "4.42.0",
- "@rollup/rollup-linux-s390x-gnu": "4.42.0",
- "@rollup/rollup-linux-x64-gnu": "4.42.0",
- "@rollup/rollup-linux-x64-musl": "4.42.0",
- "@rollup/rollup-win32-arm64-msvc": "4.42.0",
- "@rollup/rollup-win32-ia32-msvc": "4.42.0",
- "@rollup/rollup-win32-x64-msvc": "4.42.0",
+ "@rollup/rollup-android-arm-eabi": "4.46.2",
+ "@rollup/rollup-android-arm64": "4.46.2",
+ "@rollup/rollup-darwin-arm64": "4.46.2",
+ "@rollup/rollup-darwin-x64": "4.46.2",
+ "@rollup/rollup-freebsd-arm64": "4.46.2",
+ "@rollup/rollup-freebsd-x64": "4.46.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.46.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.46.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.46.2",
+ "@rollup/rollup-linux-arm64-musl": "4.46.2",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.46.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.46.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.46.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.46.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.46.2",
+ "@rollup/rollup-linux-x64-gnu": "4.46.2",
+ "@rollup/rollup-linux-x64-musl": "4.46.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.46.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.46.2",
+ "@rollup/rollup-win32-x64-msvc": "4.46.2",
"fsevents": "~2.3.2"
}
},
"node_modules/vitest": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.2.tgz",
- "integrity": "sha512-fyNn/Rp016Bt5qvY0OQvIUCwW2vnaEBLxP42PmKbNIoasSYjML+8xyeADOPvBe+Xfl/ubIw4og7Lt9jflRsCNw==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.2",
- "@vitest/mocker": "3.2.2",
- "@vitest/pretty-format": "^3.2.2",
- "@vitest/runner": "3.2.2",
- "@vitest/snapshot": "3.2.2",
- "@vitest/spy": "3.2.2",
- "@vitest/utils": "3.2.2",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
"chai": "^5.2.0",
"debug": "^4.4.1",
"expect-type": "^1.2.1",
@@ -13652,10 +13646,10 @@
"tinybench": "^2.9.0",
"tinyexec": "^0.3.2",
"tinyglobby": "^0.2.14",
- "tinypool": "^1.1.0",
+ "tinypool": "^1.1.1",
"tinyrainbow": "^2.0.0",
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
- "vite-node": "3.2.2",
+ "vite-node": "3.2.4",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -13671,8 +13665,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.2",
- "@vitest/ui": "3.2.2",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
"happy-dom": "*",
"jsdom": "*"
},
@@ -13711,9 +13705,9 @@
}
},
"node_modules/vitest/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13780,16 +13774,16 @@
"license": "MIT"
},
"node_modules/vue": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz",
- "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==",
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz",
+ "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.16",
- "@vue/compiler-sfc": "3.5.16",
- "@vue/runtime-dom": "3.5.16",
- "@vue/server-renderer": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-dom": "3.5.18",
+ "@vue/compiler-sfc": "3.5.18",
+ "@vue/runtime-dom": "3.5.18",
+ "@vue/server-renderer": "3.5.18",
+ "@vue/shared": "3.5.18"
},
"peerDependencies": {
"typescript": "*"
@@ -13820,9 +13814,9 @@
}
},
"node_modules/vue-eslint-parser": {
- "version": "10.1.3",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.1.3.tgz",
- "integrity": "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz",
+ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -13832,7 +13826,6 @@
"eslint-visitor-keys": "^4.2.0",
"espree": "^10.3.0",
"esquery": "^1.6.0",
- "lodash": "^4.17.21",
"semver": "^7.6.3"
},
"engines": {
@@ -13846,9 +13839,9 @@
}
},
"node_modules/vue-eslint-parser/node_modules/eslint-scope": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
- "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
@@ -13886,14 +13879,14 @@
}
},
"node_modules/vue-tsc": {
- "version": "2.2.10",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.10.tgz",
- "integrity": "sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.4.tgz",
+ "integrity": "sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/typescript": "~2.4.11",
- "@vue/language-core": "2.2.10"
+ "@volar/typescript": "2.4.20",
+ "@vue/language-core": "3.0.4"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
@@ -13916,31 +13909,28 @@
}
},
"node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- }
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.99.9",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz",
- "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",
+ "version": "5.101.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz",
+ "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==",
"license": "MIT",
"dependencies": {
"@types/eslint-scope": "^3.7.7",
- "@types/estree": "^1.0.6",
+ "@types/estree": "^1.0.8",
"@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
+ "acorn-import-phases": "^1.0.3",
"browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
+ "enhanced-resolve": "^5.17.2",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
@@ -13954,7 +13944,7 @@
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.11",
"watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
+ "webpack-sources": "^3.3.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -14076,9 +14066,9 @@
}
},
"node_modules/webpack/node_modules/webpack-sources": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz",
- "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"license": "MIT",
"engines": {
"node": ">=10.13.0"
@@ -14104,12 +14094,6 @@
"webidl-conversions": "^3.0.0"
}
},
- "node_modules/whatwg-url/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "license": "BSD-2-Clause"
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index 0f12b831fa1..1fe8bd021a6 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"engines": {
- "node": ">= 18.0.0"
+ "node": ">= 20.0.0"
},
"dependencies": {
"@citation-js/core": "0.7.18",
@@ -12,12 +12,12 @@
"@github/relative-time-element": "4.4.8",
"@github/text-expander-element": "2.9.2",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
- "@primer/octicons": "19.15.2",
+ "@primer/octicons": "19.15.5",
"@silverwind/vue3-calendar-heatmap": "2.0.6",
"add-asset-webpack-plugin": "3.0.0",
"ansi_up": "6.0.6",
"asciinema-player": "3.10.0",
- "chart.js": "4.4.9",
+ "chart.js": "4.5.0",
"chartjs-adapter-dayjs-4": "1.0.4",
"chartjs-plugin-zoom": "2.2.0",
"clippie": "4.1.7",
@@ -27,25 +27,25 @@
"dropzone": "6.0.0-beta.2",
"easymde": "2.20.0",
"esbuild-loader": "4.3.0",
- "escape-goat": "4.0.0",
"fast-glob": "3.3.3",
- "htmx.org": "2.0.4",
+ "htmx.org": "2.0.6",
"idiomorph": "0.7.3",
"jquery": "3.7.1",
"katex": "0.16.22",
"license-checker-webpack-plugin": "0.2.1",
- "mermaid": "11.6.0",
+ "mermaid": "11.10.0",
"mini-css-extract-plugin": "2.9.2",
- "minimatch": "10.0.1",
+ "minimatch": "10.0.3",
"monaco-editor": "0.52.2",
"monaco-editor-webpack-plugin": "7.1.0",
+ "online-3d-viewer": "0.16.0",
"pdfobject": "2.3.1",
"perfect-debounce": "1.0.0",
- "postcss": "8.5.4",
+ "postcss": "8.5.6",
"postcss-loader": "8.1.1",
- "postcss-nesting": "13.0.1",
+ "postcss-nesting": "13.0.2",
"sortablejs": "1.15.6",
- "swagger-ui-dist": "5.24.0",
+ "swagger-ui-dist": "5.27.0",
"tailwindcss": "3.4.17",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
@@ -53,67 +53,67 @@
"toastify-js": "1.12.0",
"tributejs": "5.1.3",
"typescript": "5.8.3",
- "uint8-to-base64": "0.2.0",
+ "uint8-to-base64": "0.2.1",
"vanilla-colorful": "0.7.2",
- "vue": "3.5.16",
+ "vue": "3.5.18",
"vue-bar-graph": "2.2.0",
"vue-chartjs": "5.3.2",
"vue-loader": "17.4.2",
- "webpack": "5.99.9",
+ "webpack": "5.101.0",
"webpack-cli": "6.0.1",
"wrap-ansi": "9.0.0"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
- "@playwright/test": "1.52.0",
+ "@playwright/test": "1.54.1",
"@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin-js": "3.1.0",
- "@stylistic/stylelint-plugin": "3.1.2",
+ "@stylistic/stylelint-plugin": "4.0.0",
"@types/dropzone": "5.7.9",
"@types/jquery": "3.5.32",
"@types/katex": "0.16.7",
- "@types/license-checker-webpack-plugin": "0.2.4",
+ "@types/license-checker-webpack-plugin": "0.2.5",
"@types/pdfobject": "2.2.5",
"@types/sortablejs": "1.15.8",
- "@types/swagger-ui-dist": "3.30.5",
+ "@types/swagger-ui-dist": "3.30.6",
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
"@types/toastify-js": "1.12.4",
- "@typescript-eslint/eslint-plugin": "8.33.1",
- "@typescript-eslint/parser": "8.33.1",
- "@vitejs/plugin-vue": "5.2.4",
- "@vitest/eslint-plugin": "1.2.1",
+ "@typescript-eslint/eslint-plugin": "8.38.0",
+ "@typescript-eslint/parser": "8.38.0",
+ "@vitejs/plugin-vue": "6.0.1",
+ "@vitest/eslint-plugin": "1.3.4",
"eslint": "8.57.0",
- "eslint-import-resolver-typescript": "4.4.3",
+ "eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "4.0.0",
"eslint-plugin-github": "5.0.2",
- "eslint-plugin-import-x": "4.15.1",
+ "eslint-plugin-import-x": "4.16.1",
"eslint-plugin-no-jquery": "3.1.1",
"eslint-plugin-no-use-extend-native": "0.5.0",
- "eslint-plugin-playwright": "2.2.0",
- "eslint-plugin-regexp": "2.8.0",
- "eslint-plugin-sonarjs": "3.0.2",
+ "eslint-plugin-playwright": "2.2.2",
+ "eslint-plugin-regexp": "2.9.0",
+ "eslint-plugin-sonarjs": "3.0.4",
"eslint-plugin-unicorn": "56.0.1",
- "eslint-plugin-vue": "10.2.0",
- "eslint-plugin-vue-scoped-css": "2.10.0",
+ "eslint-plugin-vue": "10.4.0",
+ "eslint-plugin-vue-scoped-css": "2.11.0",
"eslint-plugin-wc": "3.0.1",
- "happy-dom": "17.6.3",
+ "happy-dom": "18.0.1",
"markdownlint-cli": "0.45.0",
- "material-icon-theme": "5.23.0",
+ "material-icon-theme": "5.24.0",
"nolyfill": "1.0.44",
"postcss-html": "1.8.0",
- "stylelint": "16.20.0",
- "stylelint-config-recommended": "16.0.0",
+ "stylelint": "16.23.1",
+ "stylelint-config-recommended": "17.0.0",
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
"stylelint-declaration-strict-value": "1.10.11",
- "stylelint-define-config": "16.19.0",
+ "stylelint-define-config": "16.22.0",
"stylelint-value-no-unknown-custom-properties": "6.0.1",
- "svgo": "3.3.2",
+ "svgo": "4.0.0",
"type-fest": "4.41.0",
- "updates": "16.4.2",
- "vite-string-plugin": "1.4.4",
- "vitest": "3.2.2",
- "vue-tsc": "2.2.10"
+ "updates": "16.5.2",
+ "vite-string-plugin": "1.4.6",
+ "vitest": "3.2.4",
+ "vue-tsc": "3.0.4"
},
"browserslist": [
"defaults"
diff --git a/poetry.lock b/poetry.lock
deleted file mode 100644
index 7c3f6901756..00000000000
--- a/poetry.lock
+++ /dev/null
@@ -1,426 +0,0 @@
-# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand.
-
-[[package]]
-name = "click"
-version = "8.1.8"
-description = "Composable command line interface toolkit"
-optional = false
-python-versions = ">=3.7"
-groups = ["dev"]
-files = [
- {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
- {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
-]
-
-[package.dependencies]
-colorama = {version = "*", markers = "platform_system == \"Windows\""}
-
-[[package]]
-name = "colorama"
-version = "0.4.6"
-description = "Cross-platform colored terminal text."
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
-groups = ["dev"]
-files = [
- {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
- {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
-]
-
-[[package]]
-name = "cssbeautifier"
-version = "1.15.4"
-description = "CSS unobfuscator and beautifier."
-optional = false
-python-versions = "*"
-groups = ["dev"]
-files = [
- {file = "cssbeautifier-1.15.4-py3-none-any.whl", hash = "sha256:78c84d5e5378df7d08622bbd0477a1abdbd209680e95480bf22f12d5701efc98"},
- {file = "cssbeautifier-1.15.4.tar.gz", hash = "sha256:9bb08dc3f64c101a01677f128acf01905914cf406baf87434dcde05b74c0acf5"},
-]
-
-[package.dependencies]
-editorconfig = ">=0.12.2"
-jsbeautifier = "*"
-six = ">=1.13.0"
-
-[[package]]
-name = "djlint"
-version = "1.36.4"
-description = "HTML Template Linter and Formatter"
-optional = false
-python-versions = ">=3.9"
-groups = ["dev"]
-files = [
- {file = "djlint-1.36.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a2dfb60883ceb92465201bfd392291a7597c6752baede6fbb6f1980cac8d6c5c"},
- {file = "djlint-1.36.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc6a1320c0030244b530ac200642f883d3daa451a115920ef3d56d08b644292"},
- {file = "djlint-1.36.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3164a048c7bb0baf042387b1e33f9bbbf99d90d1337bb4c3d66eb0f96f5400a1"},
- {file = "djlint-1.36.4-cp310-cp310-win_amd64.whl", hash = "sha256:3196d5277da5934962d67ad6c33a948ba77a7b6eadf064648bef6ee5f216b03c"},
- {file = "djlint-1.36.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d68da0ed10ee9ca1e32e225cbb8e9b98bf7e6f8b48a8e4836117b6605b88cc7"},
- {file = "djlint-1.36.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c0478d5392247f1e6ee29220bbdbf7fb4e1bc0e7e83d291fda6fb926c1787ba7"},
- {file = "djlint-1.36.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:962f7b83aee166e499eff916d631c6dde7f1447d7610785a60ed2a75a5763483"},
- {file = "djlint-1.36.4-cp311-cp311-win_amd64.whl", hash = "sha256:53cbc450aa425c832f09bc453b8a94a039d147b096740df54a3547fada77ed08"},
- {file = "djlint-1.36.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ff9faffd7d43ac20467493fa71d5355b5b330a00ade1c4d1e859022f4195223b"},
- {file = "djlint-1.36.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:79489e262b5ac23a8dfb7ca37f1eea979674cfc2d2644f7061d95bea12c38f7e"},
- {file = "djlint-1.36.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e58c5fa8c6477144a0be0a87273706a059e6dd0d6efae01146ae8c29cdfca675"},
- {file = "djlint-1.36.4-cp312-cp312-win_amd64.whl", hash = "sha256:bb6903777bf3124f5efedcddf1f4716aef097a7ec4223fc0fa54b865829a6e08"},
- {file = "djlint-1.36.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ead475013bcac46095b1bbc8cf97ed2f06e83422335734363f8a76b4ba7e47c2"},
- {file = "djlint-1.36.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6c601dfa68ea253311deb4a29a7362b7a64933bdfcfb5a06618f3e70ad1fa835"},
- {file = "djlint-1.36.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bda5014f295002363381969864addeb2db13955f1b26e772657c3b273ed7809f"},
- {file = "djlint-1.36.4-cp313-cp313-win_amd64.whl", hash = "sha256:16ce37e085afe5a30953b2bd87cbe34c37843d94c701fc68a2dda06c1e428ff4"},
- {file = "djlint-1.36.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:89678661888c03d7bc6cadd75af69db29962b5ecbf93a81518262f5c48329f04"},
- {file = "djlint-1.36.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b01a98df3e1ab89a552793590875bc6e954cad661a9304057db75363d519fa0"},
- {file = "djlint-1.36.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dabbb4f7b93223d471d09ae34ed515fef98b2233cbca2449ad117416c44b1351"},
- {file = "djlint-1.36.4-cp39-cp39-win_amd64.whl", hash = "sha256:7a483390d17e44df5bc23dcea29bdf6b63f3ed8b4731d844773a4829af4f5e0b"},
- {file = "djlint-1.36.4-py3-none-any.whl", hash = "sha256:e9699b8ac3057a6ed04fb90835b89bee954ed1959c01541ce4f8f729c938afdd"},
- {file = "djlint-1.36.4.tar.gz", hash = "sha256:17254f218b46fe5a714b224c85074c099bcb74e3b2e1f15c2ddc2cf415a408a1"},
-]
-
-[package.dependencies]
-click = ">=8.0.1"
-colorama = ">=0.4.4"
-cssbeautifier = ">=1.14.4"
-jsbeautifier = ">=1.14.4"
-json5 = ">=0.9.11"
-pathspec = ">=0.12"
-pyyaml = ">=6"
-regex = ">=2023"
-tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
-tqdm = ">=4.62.2"
-typing-extensions = {version = ">=3.6.6", markers = "python_version < \"3.11\""}
-
-[[package]]
-name = "editorconfig"
-version = "0.17.0"
-description = "EditorConfig File Locator and Interpreter for Python"
-optional = false
-python-versions = "*"
-groups = ["dev"]
-files = [
- {file = "EditorConfig-0.17.0-py3-none-any.whl", hash = "sha256:fe491719c5f65959ec00b167d07740e7ffec9a3f362038c72b289330b9991dfc"},
- {file = "editorconfig-0.17.0.tar.gz", hash = "sha256:8739052279699840065d3a9f5c125d7d5a98daeefe53b0e5274261d77cb49aa2"},
-]
-
-[[package]]
-name = "jsbeautifier"
-version = "1.15.4"
-description = "JavaScript unobfuscator and beautifier."
-optional = false
-python-versions = "*"
-groups = ["dev"]
-files = [
- {file = "jsbeautifier-1.15.4-py3-none-any.whl", hash = "sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528"},
- {file = "jsbeautifier-1.15.4.tar.gz", hash = "sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592"},
-]
-
-[package.dependencies]
-editorconfig = ">=0.12.2"
-six = ">=1.13.0"
-
-[[package]]
-name = "json5"
-version = "0.12.0"
-description = "A Python implementation of the JSON5 data format."
-optional = false
-python-versions = ">=3.8.0"
-groups = ["dev"]
-files = [
- {file = "json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db"},
- {file = "json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a"},
-]
-
-[package.extras]
-dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"]
-
-[[package]]
-name = "pathspec"
-version = "0.12.1"
-description = "Utility library for gitignore style pattern matching of file paths."
-optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
-files = [
- {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
- {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
-]
-
-[[package]]
-name = "pyyaml"
-version = "6.0.2"
-description = "YAML parser and emitter for Python"
-optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
-files = [
- {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
- {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
- {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
- {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
- {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
- {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
- {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
- {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
- {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
- {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
- {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
- {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
- {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
- {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
- {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
- {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
- {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
- {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
- {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
- {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
- {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
- {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
- {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
- {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
- {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
- {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
- {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
- {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
- {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
- {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
- {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
- {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
- {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
- {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
- {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
-]
-
-[[package]]
-name = "regex"
-version = "2024.11.6"
-description = "Alternative regular expression module, to replace re."
-optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
-files = [
- {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
- {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
- {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"},
- {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"},
- {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"},
- {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"},
- {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"},
- {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"},
- {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"},
- {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"},
- {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"},
- {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"},
- {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"},
- {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"},
- {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"},
- {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"},
- {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"},
- {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"},
- {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"},
- {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"},
- {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"},
- {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"},
- {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"},
- {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"},
- {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"},
- {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"},
- {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"},
- {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"},
- {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"},
- {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"},
- {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"},
- {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"},
- {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"},
- {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"},
- {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"},
- {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"},
- {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"},
- {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"},
- {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"},
- {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"},
- {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"},
- {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"},
- {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"},
- {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"},
- {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"},
- {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"},
- {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"},
- {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"},
- {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"},
- {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"},
- {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"},
- {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"},
- {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"},
- {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"},
- {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"},
- {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"},
- {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"},
- {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"},
- {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"},
- {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"},
- {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"},
- {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"},
- {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"},
- {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"},
- {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"},
- {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"},
- {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"},
- {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"},
- {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"},
- {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"},
- {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"},
- {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"},
- {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"},
- {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"},
- {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"},
- {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"},
- {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"},
- {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"},
- {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"},
-]
-
-[[package]]
-name = "six"
-version = "1.17.0"
-description = "Python 2 and 3 compatibility utilities"
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-groups = ["dev"]
-files = [
- {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
- {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
-]
-
-[[package]]
-name = "tomli"
-version = "2.2.1"
-description = "A lil' TOML parser"
-optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
-markers = "python_version == \"3.10\""
-files = [
- {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
- {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"},
- {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"},
- {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"},
- {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"},
- {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"},
- {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"},
- {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"},
- {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"},
- {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"},
- {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"},
- {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"},
- {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"},
- {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"},
-]
-
-[[package]]
-name = "tqdm"
-version = "4.67.1"
-description = "Fast, Extensible Progress Meter"
-optional = false
-python-versions = ">=3.7"
-groups = ["dev"]
-files = [
- {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"},
- {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"},
-]
-
-[package.dependencies]
-colorama = {version = "*", markers = "platform_system == \"Windows\""}
-
-[package.extras]
-dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"]
-discord = ["requests"]
-notebook = ["ipywidgets (>=6)"]
-slack = ["slack-sdk"]
-telegram = ["requests"]
-
-[[package]]
-name = "typing-extensions"
-version = "4.13.2"
-description = "Backported and Experimental Type Hints for Python 3.8+"
-optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
-markers = "python_version == \"3.10\""
-files = [
- {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"},
- {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"},
-]
-
-[[package]]
-name = "yamllint"
-version = "1.37.1"
-description = "A linter for YAML files."
-optional = false
-python-versions = ">=3.9"
-groups = ["dev"]
-files = [
- {file = "yamllint-1.37.1-py3-none-any.whl", hash = "sha256:364f0d79e81409f591e323725e6a9f4504c8699ddf2d7263d8d2b539cd66a583"},
- {file = "yamllint-1.37.1.tar.gz", hash = "sha256:81f7c0c5559becc8049470d86046b36e96113637bcbe4753ecef06977c00245d"},
-]
-
-[package.dependencies]
-pathspec = ">=0.5.3"
-pyyaml = "*"
-
-[package.extras]
-dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"]
-
-[metadata]
-lock-version = "2.1"
-python-versions = "^3.10"
-content-hash = "ec65cbc253ccb822e50bb7bdb9a3185a5ab781024175a4d5a339055a06207af6"
diff --git a/poetry.toml b/poetry.toml
deleted file mode 100644
index 6eda9f8effc..00000000000
--- a/poetry.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-[virtualenvs]
-in-project = true
-options.no-pip = true
diff --git a/public/assets/img/svg/gitea-chef.svg b/public/assets/img/svg/gitea-chef.svg
index c5e8a721cc1..8fd8ed325d8 100644
--- a/public/assets/img/svg/gitea-chef.svg
+++ b/public/assets/img/svg/gitea-chef.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-codecommit.svg b/public/assets/img/svg/gitea-codecommit.svg
index b44847d9e13..35d0b39c037 100644
--- a/public/assets/img/svg/gitea-codecommit.svg
+++ b/public/assets/img/svg/gitea-codecommit.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-debian.svg b/public/assets/img/svg/gitea-debian.svg
index fa2f2f49dc6..e92d0b6937f 100644
--- a/public/assets/img/svg/gitea-debian.svg
+++ b/public/assets/img/svg/gitea-debian.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-gitbucket.svg b/public/assets/img/svg/gitea-gitbucket.svg
index 62f603484e9..b9e99724b21 100644
--- a/public/assets/img/svg/gitea-gitbucket.svg
+++ b/public/assets/img/svg/gitea-gitbucket.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-gitlab.svg b/public/assets/img/svg/gitea-gitlab.svg
index 03fcb0b87e9..e2d708e7be1 100644
--- a/public/assets/img/svg/gitea-gitlab.svg
+++ b/public/assets/img/svg/gitea-gitlab.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-google.svg b/public/assets/img/svg/gitea-google.svg
index 7dd2622df6a..26ee04cb64e 100644
--- a/public/assets/img/svg/gitea-google.svg
+++ b/public/assets/img/svg/gitea-google.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-maven.svg b/public/assets/img/svg/gitea-maven.svg
index 320d01a234b..f6ece7dc286 100644
--- a/public/assets/img/svg/gitea-maven.svg
+++ b/public/assets/img/svg/gitea-maven.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-microsoftonline.svg b/public/assets/img/svg/gitea-microsoftonline.svg
index f2ce13ac222..c143eccbb68 100644
--- a/public/assets/img/svg/gitea-microsoftonline.svg
+++ b/public/assets/img/svg/gitea-microsoftonline.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-npm.svg b/public/assets/img/svg/gitea-npm.svg
index 7ef74e72bd1..2b05c793536 100644
--- a/public/assets/img/svg/gitea-npm.svg
+++ b/public/assets/img/svg/gitea-npm.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-onedev.svg b/public/assets/img/svg/gitea-onedev.svg
index 94ad1bab317..7ecd18895d6 100644
--- a/public/assets/img/svg/gitea-onedev.svg
+++ b/public/assets/img/svg/gitea-onedev.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-openid.svg b/public/assets/img/svg/gitea-openid.svg
index f4702d2cdf6..10c37145a3d 100644
--- a/public/assets/img/svg/gitea-openid.svg
+++ b/public/assets/img/svg/gitea-openid.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-rubygems.svg b/public/assets/img/svg/gitea-rubygems.svg
index 4e43bdf2f43..7cd9d34e6a7 100644
--- a/public/assets/img/svg/gitea-rubygems.svg
+++ b/public/assets/img/svg/gitea-rubygems.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-swift.svg b/public/assets/img/svg/gitea-swift.svg
index 41821001851..891ac12b56d 100644
--- a/public/assets/img/svg/gitea-swift.svg
+++ b/public/assets/img/svg/gitea-swift.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/gitea-vagrant.svg b/public/assets/img/svg/gitea-vagrant.svg
index ba50101d528..18b05e900dd 100644
--- a/public/assets/img/svg/gitea-vagrant.svg
+++ b/public/assets/img/svg/gitea-vagrant.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-agent.svg b/public/assets/img/svg/octicon-agent.svg
new file mode 100644
index 00000000000..9e2bce0fef0
--- /dev/null
+++ b/public/assets/img/svg/octicon-agent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-loop.svg b/public/assets/img/svg/octicon-loop.svg
new file mode 100644
index 00000000000..967641f1216
--- /dev/null
+++ b/public/assets/img/svg/octicon-loop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-mention.svg b/public/assets/img/svg/octicon-mention.svg
index 75b414e123d..ff408c59a2f 100644
--- a/public/assets/img/svg/octicon-mention.svg
+++ b/public/assets/img/svg/octicon-mention.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-space.svg b/public/assets/img/svg/octicon-space.svg
new file mode 100644
index 00000000000..22912be37a5
--- /dev/null
+++ b/public/assets/img/svg/octicon-space.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-sparkle.svg b/public/assets/img/svg/octicon-sparkle.svg
new file mode 100644
index 00000000000..769350bbbec
--- /dev/null
+++ b/public/assets/img/svg/octicon-sparkle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 439b9a6fbd5..3657feb2ce3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,12 +1,13 @@
-[tool.poetry]
-package-mode = false
+[project]
+name = "gitea"
+version = "0.0.0"
+requires-python = ">=3.10"
-[tool.poetry.dependencies]
-python = "^3.10"
-
-[tool.poetry.group.dev.dependencies]
-djlint = "1.36.4"
-yamllint = "1.37.1"
+[dependency-groups]
+dev = [
+ "djlint==1.36.4",
+ "yamllint==1.37.1",
+]
[tool.djlint]
profile="golang"
diff --git a/routers/api/actions/artifacts.go b/routers/api/actions/artifacts.go
index 6473659e5cb..d71a6f487cb 100644
--- a/routers/api/actions/artifacts.go
+++ b/routers/api/actions/artifacts.go
@@ -428,7 +428,7 @@ func (ar artifactRoutes) getDownloadArtifactURL(ctx *ArtifactContext) {
for _, artifact := range artifacts {
var downloadURL string
if setting.Actions.ArtifactStorage.ServeDirect() {
- u, err := ar.fs.URL(artifact.StoragePath, artifact.ArtifactName, nil)
+ u, err := ar.fs.URL(artifact.StoragePath, artifact.ArtifactName, ctx.Req.Method, nil)
if err != nil && !errors.Is(err, storage.ErrURLNotSupported) {
log.Error("Error getting serve direct url: %v", err)
}
diff --git a/routers/api/actions/artifacts_utils.go b/routers/api/actions/artifacts_utils.go
index 77ce7650986..35868c290e9 100644
--- a/routers/api/actions/artifacts_utils.go
+++ b/routers/api/actions/artifacts_utils.go
@@ -43,7 +43,7 @@ func validateRunID(ctx *ArtifactContext) (*actions.ActionTask, int64, bool) {
return task, runID, true
}
-func validateRunIDV4(ctx *ArtifactContext, rawRunID string) (*actions.ActionTask, int64, bool) { //nolint:unparam
+func validateRunIDV4(ctx *ArtifactContext, rawRunID string) (*actions.ActionTask, int64, bool) { //nolint:unparam // ActionTask is never used
task := ctx.ActionTask
runID, err := strconv.ParseInt(rawRunID, 10, 64)
if err != nil || task.Job.RunID != runID {
diff --git a/routers/api/actions/artifactsv4.go b/routers/api/actions/artifactsv4.go
index e9e9fc63934..6d274796285 100644
--- a/routers/api/actions/artifactsv4.go
+++ b/routers/api/actions/artifactsv4.go
@@ -517,7 +517,7 @@ func (r *artifactV4Routes) getSignedArtifactURL(ctx *ArtifactContext) {
respData := GetSignedArtifactURLResponse{}
if setting.Actions.ArtifactStorage.ServeDirect() {
- u, err := storage.ActionsArtifacts.URL(artifact.StoragePath, artifact.ArtifactPath, nil)
+ u, err := storage.ActionsArtifacts.URL(artifact.StoragePath, artifact.ArtifactPath, ctx.Req.Method, nil)
if u != nil && err == nil {
respData.SignedUrl = u.String()
}
diff --git a/routers/api/packages/alpine/alpine.go b/routers/api/packages/alpine/alpine.go
index f35cff3df23..f250a1a5494 100644
--- a/routers/api/packages/alpine/alpine.go
+++ b/routers/api/packages/alpine/alpine.go
@@ -25,9 +25,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
func GetRepositoryKey(ctx *context.Context) {
@@ -68,13 +67,14 @@ func GetRepositoryFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pv,
&packages_service.PackageFileInfo{
Filename: alpine_service.IndexArchiveFilename,
CompositeKey: fmt.Sprintf("%s|%s|%s", ctx.PathParam("branch"), ctx.PathParam("repository"), ctx.PathParam("architecture")),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
@@ -216,7 +216,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
}
- s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0])
+ s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)
diff --git a/routers/api/packages/api.go b/routers/api/packages/api.go
index ae4ea7ea87a..f6ee5958b5b 100644
--- a/routers/api/packages/api.go
+++ b/routers/api/packages/api.go
@@ -5,8 +5,6 @@ package packages
import (
"net/http"
- "regexp"
- "strings"
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/perm"
@@ -101,7 +99,7 @@ func verifyAuth(r *web.Router, authMethods []auth.Method) {
ctx.Doer, err = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
if err != nil {
log.Error("Failed to verify user: %v", err)
- ctx.HTTPError(http.StatusUnauthorized, "authGroup.Verify")
+ ctx.HTTPError(http.StatusUnauthorized, "Failed to authenticate user")
return
}
ctx.IsSigned = ctx.Doer != nil
@@ -282,42 +280,10 @@ func CommonRoutes() *web.Router {
})
})
}, reqPackageAccess(perm.AccessModeRead))
- r.Group("/conda", func() {
- var (
- downloadPattern = regexp.MustCompile(`\A(.+/)?(.+)/((?:[^/]+(?:\.tar\.bz2|\.conda))|(?:current_)?repodata\.json(?:\.bz2)?)\z`)
- uploadPattern = regexp.MustCompile(`\A(.+/)?([^/]+(?:\.tar\.bz2|\.conda))\z`)
- )
-
- r.Get("/*", func(ctx *context.Context) {
- m := downloadPattern.FindStringSubmatch(ctx.PathParam("*"))
- if len(m) == 0 {
- ctx.Status(http.StatusNotFound)
- return
- }
-
- ctx.SetPathParam("channel", strings.TrimSuffix(m[1], "/"))
- ctx.SetPathParam("architecture", m[2])
- ctx.SetPathParam("filename", m[3])
-
- switch m[3] {
- case "repodata.json", "repodata.json.bz2", "current_repodata.json", "current_repodata.json.bz2":
- conda.EnumeratePackages(ctx)
- default:
- conda.DownloadPackageFile(ctx)
- }
- })
- r.Put("/*", reqPackageAccess(perm.AccessModeWrite), func(ctx *context.Context) {
- m := uploadPattern.FindStringSubmatch(ctx.PathParam("*"))
- if len(m) == 0 {
- ctx.Status(http.StatusNotFound)
- return
- }
-
- ctx.SetPathParam("channel", strings.TrimSuffix(m[1], "/"))
- ctx.SetPathParam("filename", m[2])
-
- conda.UploadPackageFile(ctx)
- })
+ r.PathGroup("/conda/*", func(g *web.RouterPathGroup) {
+ g.MatchPath("GET", "//", conda.ListOrGetPackages)
+ g.MatchPath("GET", "///", conda.ListOrGetPackages)
+ g.MatchPath("PUT", "//", reqPackageAccess(perm.AccessModeWrite), conda.UploadPackageFile)
}, reqPackageAccess(perm.AccessModeRead))
r.Group("/cran", func() {
r.Group("/src", func() {
@@ -358,67 +324,22 @@ func CommonRoutes() *web.Router {
}, reqPackageAccess(perm.AccessModeRead))
r.Group("/go", func() {
r.Put("/upload", reqPackageAccess(perm.AccessModeWrite), goproxy.UploadPackage)
- r.Get("/sumdb/sum.golang.org/supported", func(ctx *context.Context) {
- ctx.Status(http.StatusNotFound)
- })
+ r.Get("/sumdb/sum.golang.org/supported", http.NotFound)
- // Manual mapping of routes because the package name contains slashes which chi does not support
// https://go.dev/ref/mod#goproxy-protocol
- r.Get("/*", func(ctx *context.Context) {
- path := ctx.PathParam("*")
-
- if strings.HasSuffix(path, "/@latest") {
- ctx.SetPathParam("name", path[:len(path)-len("/@latest")])
- ctx.SetPathParam("version", "latest")
-
- goproxy.PackageVersionMetadata(ctx)
- return
- }
-
- parts := strings.SplitN(path, "/@v/", 2)
- if len(parts) != 2 {
- ctx.Status(http.StatusNotFound)
- return
- }
-
- ctx.SetPathParam("name", parts[0])
-
- // /@v/list
- if parts[1] == "list" {
- goproxy.EnumeratePackageVersions(ctx)
- return
- }
-
- // /@v/.zip
- if strings.HasSuffix(parts[1], ".zip") {
- ctx.SetPathParam("version", parts[1][:len(parts[1])-len(".zip")])
-
- goproxy.DownloadPackageFile(ctx)
- return
- }
- // /@v/.info
- if strings.HasSuffix(parts[1], ".info") {
- ctx.SetPathParam("version", parts[1][:len(parts[1])-len(".info")])
-
- goproxy.PackageVersionMetadata(ctx)
- return
- }
- // /@v/.mod
- if strings.HasSuffix(parts[1], ".mod") {
- ctx.SetPathParam("version", parts[1][:len(parts[1])-len(".mod")])
-
- goproxy.PackageVersionGoModContent(ctx)
- return
- }
-
- ctx.Status(http.StatusNotFound)
+ r.PathGroup("/*", func(g *web.RouterPathGroup) {
+ g.MatchPath("GET", "//@", goproxy.PackageVersionMetadata)
+ g.MatchPath("GET", "//@v/list", goproxy.EnumeratePackageVersions)
+ g.MatchPath("GET", "//@v/.zip", goproxy.DownloadPackageFile)
+ g.MatchPath("GET", "//@v/.info", goproxy.PackageVersionMetadata)
+ g.MatchPath("GET", "//@v/.mod", goproxy.PackageVersionGoModContent)
})
}, reqPackageAccess(perm.AccessModeRead))
r.Group("/generic", func() {
r.Group("/{packagename}/{packageversion}", func() {
r.Delete("", reqPackageAccess(perm.AccessModeWrite), generic.DeletePackage)
r.Group("/{filename}", func() {
- r.Get("", generic.DownloadPackageFile)
+ r.Methods("HEAD,GET", "", generic.DownloadPackageFile)
r.Group("", func() {
r.Put("", generic.UploadPackage)
r.Delete("", generic.DeletePackageFile)
@@ -532,82 +453,26 @@ func CommonRoutes() *web.Router {
})
})
}, reqPackageAccess(perm.AccessModeRead))
+
r.Group("/pypi", func() {
r.Post("/", reqPackageAccess(perm.AccessModeWrite), pypi.UploadPackageFile)
r.Get("/files/{id}/{version}/{filename}", pypi.DownloadPackageFile)
r.Get("/simple/{id}", pypi.PackageMetadata)
}, reqPackageAccess(perm.AccessModeRead))
- r.Group("/rpm", func() {
- r.Group("/repository.key", func() {
- r.Head("", rpm.GetRepositoryKey)
- r.Get("", rpm.GetRepositoryKey)
- })
- var (
- repoPattern = regexp.MustCompile(`\A(.*?)\.repo\z`)
- uploadPattern = regexp.MustCompile(`\A(.*?)/upload\z`)
- filePattern = regexp.MustCompile(`\A(.*?)/package/([^/]+)/([^/]+)/([^/]+)(?:/([^/]+\.rpm)|)\z`)
- repoFilePattern = regexp.MustCompile(`\A(.*?)/repodata/([^/]+)\z`)
- )
-
- r.Methods("HEAD,GET,PUT,DELETE", "*", func(ctx *context.Context) {
- path := ctx.PathParam("*")
- isHead := ctx.Req.Method == http.MethodHead
- isGetHead := ctx.Req.Method == http.MethodHead || ctx.Req.Method == http.MethodGet
- isPut := ctx.Req.Method == http.MethodPut
- isDelete := ctx.Req.Method == http.MethodDelete
-
- m := repoPattern.FindStringSubmatch(path)
- if len(m) == 2 && isGetHead {
- ctx.SetPathParam("group", strings.Trim(m[1], "/"))
- rpm.GetRepositoryConfig(ctx)
- return
- }
-
- m = repoFilePattern.FindStringSubmatch(path)
- if len(m) == 3 && isGetHead {
- ctx.SetPathParam("group", strings.Trim(m[1], "/"))
- ctx.SetPathParam("filename", m[2])
- if isHead {
- rpm.CheckRepositoryFileExistence(ctx)
- } else {
- rpm.GetRepositoryFile(ctx)
- }
- return
- }
-
- m = uploadPattern.FindStringSubmatch(path)
- if len(m) == 2 && isPut {
- reqPackageAccess(perm.AccessModeWrite)(ctx)
- if ctx.Written() {
- return
- }
- ctx.SetPathParam("group", strings.Trim(m[1], "/"))
- rpm.UploadPackageFile(ctx)
- return
- }
-
- m = filePattern.FindStringSubmatch(path)
- if len(m) == 6 && (isGetHead || isDelete) {
- ctx.SetPathParam("group", strings.Trim(m[1], "/"))
- ctx.SetPathParam("name", m[2])
- ctx.SetPathParam("version", m[3])
- ctx.SetPathParam("architecture", m[4])
- if isGetHead {
- rpm.DownloadPackageFile(ctx)
- } else {
- reqPackageAccess(perm.AccessModeWrite)(ctx)
- if ctx.Written() {
- return
- }
- rpm.DeletePackageFile(ctx)
- }
- return
- }
-
- ctx.Status(http.StatusNotFound)
- })
+ r.Methods("HEAD,GET", "/rpm.repo", reqPackageAccess(perm.AccessModeRead), rpm.GetRepositoryConfig)
+ r.PathGroup("/rpm/*", func(g *web.RouterPathGroup) {
+ g.MatchPath("HEAD,GET", "/repository.key", rpm.GetRepositoryKey)
+ g.MatchPath("HEAD,GET", "/.repo", rpm.GetRepositoryConfig)
+ g.MatchPath("HEAD", "//repodata/", rpm.CheckRepositoryFileExistence)
+ g.MatchPath("GET", "//repodata/", rpm.GetRepositoryFile)
+ g.MatchPath("PUT", "//upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
+ // this URL pattern is only used internally in the RPM index, it is generated by us, the filename part is not really used (can be anything)
+ g.MatchPath("HEAD,GET", "//package///", rpm.DownloadPackageFile)
+ g.MatchPath("HEAD,GET", "//package////", rpm.DownloadPackageFile)
+ g.MatchPath("DELETE", "//package///", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
}, reqPackageAccess(perm.AccessModeRead))
+
r.Group("/rubygems", func() {
r.Get("/specs.4.8.gz", rubygems.EnumeratePackages)
r.Get("/latest_specs.4.8.gz", rubygems.EnumeratePackagesLatest)
@@ -621,6 +486,7 @@ func CommonRoutes() *web.Router {
r.Delete("/yank", rubygems.DeletePackage)
}, reqPackageAccess(perm.AccessModeWrite))
}, reqPackageAccess(perm.AccessModeRead))
+
r.Group("/swift", func() {
r.Group("", func() { // Needs to be unauthenticated.
r.Post("", swift.CheckAuthenticate)
@@ -632,31 +498,12 @@ func CommonRoutes() *web.Router {
r.Get("", swift.EnumeratePackageVersions)
r.Get(".json", swift.EnumeratePackageVersions)
}, swift.CheckAcceptMediaType(swift.AcceptJSON))
- r.Group("/{version}", func() {
- r.Get("/Package.swift", swift.CheckAcceptMediaType(swift.AcceptSwift), swift.DownloadManifest)
- r.Put("", reqPackageAccess(perm.AccessModeWrite), swift.CheckAcceptMediaType(swift.AcceptJSON), swift.UploadPackageFile)
- r.Get("", func(ctx *context.Context) {
- // Can't use normal routes here: https://github.com/go-chi/chi/issues/781
-
- version := ctx.PathParam("version")
- if strings.HasSuffix(version, ".zip") {
- swift.CheckAcceptMediaType(swift.AcceptZip)(ctx)
- if ctx.Written() {
- return
- }
- ctx.SetPathParam("version", version[:len(version)-4])
- swift.DownloadPackageFile(ctx)
- } else {
- swift.CheckAcceptMediaType(swift.AcceptJSON)(ctx)
- if ctx.Written() {
- return
- }
- if strings.HasSuffix(version, ".json") {
- ctx.SetPathParam("version", version[:len(version)-5])
- }
- swift.PackageVersionMetadata(ctx)
- }
- })
+ r.PathGroup("/*", func(g *web.RouterPathGroup) {
+ g.MatchPath("GET", "/.json", swift.CheckAcceptMediaType(swift.AcceptJSON), swift.PackageVersionMetadata)
+ g.MatchPath("GET", "/.zip", swift.CheckAcceptMediaType(swift.AcceptZip), swift.DownloadPackageFile)
+ g.MatchPath("GET", "//Package.swift", swift.CheckAcceptMediaType(swift.AcceptSwift), swift.DownloadManifest)
+ g.MatchPath("GET", "/", swift.CheckAcceptMediaType(swift.AcceptJSON), swift.PackageVersionMetadata)
+ g.MatchPath("PUT", "/", reqPackageAccess(perm.AccessModeWrite), swift.CheckAcceptMediaType(swift.AcceptJSON), swift.UploadPackageFile)
})
})
r.Get("/identifiers", swift.CheckAcceptMediaType(swift.AcceptJSON), swift.LookupPackageIdentifiers)
@@ -693,6 +540,8 @@ func ContainerRoutes() *web.Router {
&container.Auth{},
})
+ // TODO: Content Discovery / References (not implemented yet)
+
r.Get("", container.ReqContainerAccess, container.DetermineSupport)
r.Group("/token", func() {
r.Get("", container.Authenticate)
@@ -701,27 +550,22 @@ func ContainerRoutes() *web.Router {
r.Get("/_catalog", container.ReqContainerAccess, container.GetRepositoryList)
r.Group("/{username}", func() {
r.PathGroup("/*", func(g *web.RouterPathGroup) {
- g.MatchPath("POST", "//blobs/uploads", reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName, container.InitiateUploadBlob)
- g.MatchPath("GET", "//tags/list", container.VerifyImageName, container.GetTagList)
- g.MatchPath("GET,PATCH,PUT,DELETE", `//blobs/uploads/`, reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName, func(ctx *context.Context) {
- switch ctx.Req.Method {
- case http.MethodGet:
- container.GetUploadBlob(ctx)
- case http.MethodPatch:
- container.UploadBlob(ctx)
- case http.MethodPut:
- container.EndUploadBlob(ctx)
- default: /* DELETE */
- container.CancelUploadBlob(ctx)
- }
- })
+ g.MatchPath("POST", "//blobs/uploads", reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName, container.PostBlobsUploads)
+ g.MatchPath("GET", "//tags/list", container.VerifyImageName, container.GetTagsList)
+
+ patternBlobsUploadsUUID := g.PatternRegexp(`//blobs/uploads/`, reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName)
+ g.MatchPattern("GET", patternBlobsUploadsUUID, container.GetBlobsUpload)
+ g.MatchPattern("PATCH", patternBlobsUploadsUUID, container.PatchBlobsUpload)
+ g.MatchPattern("PUT", patternBlobsUploadsUUID, container.PutBlobsUpload)
+ g.MatchPattern("DELETE", patternBlobsUploadsUUID, container.DeleteBlobsUpload)
+
g.MatchPath("HEAD", `//blobs/`, container.VerifyImageName, container.HeadBlob)
g.MatchPath("GET", `//blobs/`, container.VerifyImageName, container.GetBlob)
g.MatchPath("DELETE", `//blobs/`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.DeleteBlob)
g.MatchPath("HEAD", `//manifests/`, container.VerifyImageName, container.HeadManifest)
g.MatchPath("GET", `//manifests/`, container.VerifyImageName, container.GetManifest)
- g.MatchPath("PUT", `//manifests/`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.UploadManifest)
+ g.MatchPath("PUT", `//manifests/`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.PutManifest)
g.MatchPath("DELETE", `//manifests/`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.DeleteManifest)
})
}, container.ReqContainerAccess, context.UserAssignmentWeb(), context.PackageAssignment(), reqPackageAccess(perm.AccessModeRead))
diff --git a/routers/api/packages/arch/arch.go b/routers/api/packages/arch/arch.go
index f5dc6c1d019..061484785da 100644
--- a/routers/api/packages/arch/arch.go
+++ b/routers/api/packages/arch/arch.go
@@ -24,9 +24,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
func GetRepositoryKey(ctx *context.Context) {
@@ -239,7 +238,7 @@ func GetPackageOrRepositoryFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0])
+ s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)
diff --git a/routers/api/packages/cargo/cargo.go b/routers/api/packages/cargo/cargo.go
index 710c614c6e3..a7f00ee1cbe 100644
--- a/routers/api/packages/cargo/cargo.go
+++ b/routers/api/packages/cargo/cargo.go
@@ -37,15 +37,14 @@ type StatusMessage struct {
}
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, StatusResponse{
- OK: false,
- Errors: []StatusMessage{
- {
- Message: message,
- },
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, StatusResponse{
+ OK: false,
+ Errors: []StatusMessage{
+ {
+ Message: message,
},
- })
+ },
})
}
@@ -95,10 +94,7 @@ type SearchResultMeta struct {
// https://doc.rust-lang.org/cargo/reference/registries.html#search
func SearchPackages(ctx *context.Context) {
- page := ctx.FormInt("page")
- if page < 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
perPage := ctx.FormInt("per_page")
paginator := db.ListOptions{
Page: page,
@@ -168,7 +164,7 @@ func ListOwners(ctx *context.Context) {
// DownloadPackageFile serves the content of a package
func DownloadPackageFile(ctx *context.Context) {
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -179,6 +175,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: strings.ToLower(fmt.Sprintf("%s-%s.crate", ctx.PathParam("package"), ctx.PathParam("version"))),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/chef/chef.go b/routers/api/packages/chef/chef.go
index a0c8c5696c6..50011ab0b17 100644
--- a/routers/api/packages/chef/chef.go
+++ b/routers/api/packages/chef/chef.go
@@ -30,10 +30,9 @@ func apiError(ctx *context.Context, status int, obj any) {
ErrorMessages []string `json:"error_messages"`
}
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, Error{
- ErrorMessages: []string{message},
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, Error{
+ ErrorMessages: []string{message},
})
}
@@ -343,7 +342,7 @@ func DownloadPackage(ctx *context.Context) {
pf := pd.Files[0].File
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pf)
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pf, ctx.Req.Method)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
diff --git a/routers/api/packages/composer/composer.go b/routers/api/packages/composer/composer.go
index c6c14e5cf4f..df04f49d2d5 100644
--- a/routers/api/packages/composer/composer.go
+++ b/routers/api/packages/composer/composer.go
@@ -28,18 +28,17 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- type Error struct {
- Status int `json:"status"`
- Message string `json:"message"`
- }
- ctx.JSON(status, struct {
- Errors []Error `json:"errors"`
- }{
- Errors: []Error{
- {Status: status, Message: message},
- },
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ type Error struct {
+ Status int `json:"status"`
+ Message string `json:"message"`
+ }
+ ctx.JSON(status, struct {
+ Errors []Error `json:"errors"`
+ }{
+ Errors: []Error{
+ {Status: status, Message: message},
+ },
})
}
@@ -53,10 +52,7 @@ func ServiceIndex(ctx *context.Context) {
// SearchPackages searches packages, only "q" is supported
// https://packagist.org/apidoc#search-packages
func SearchPackages(ctx *context.Context) {
- page := ctx.FormInt("page")
- if page < 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
perPage := ctx.FormInt("per_page")
paginator := db.ListOptions{
Page: page,
@@ -163,7 +159,7 @@ func PackageMetadata(ctx *context.Context) {
// DownloadPackageFile serves the content of a package
func DownloadPackageFile(ctx *context.Context) {
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -174,6 +170,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: ctx.PathParam("filename"),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/conan/auth.go b/routers/api/packages/conan/auth.go
index 9c03d01391f..bce3235a2ea 100644
--- a/routers/api/packages/conan/auth.go
+++ b/routers/api/packages/conan/auth.go
@@ -34,7 +34,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
u, err := user_model.GetUserByID(req.Context(), packageMeta.UserID)
if err != nil {
- log.Error("GetUserByID: %v", err)
return nil, err
}
if packageMeta.Scope != "" {
diff --git a/routers/api/packages/conan/conan.go b/routers/api/packages/conan/conan.go
index 8019eee9f74..126b1593cde 100644
--- a/routers/api/packages/conan/conan.go
+++ b/routers/api/packages/conan/conan.go
@@ -55,16 +55,13 @@ func jsonResponse(ctx *context.Context, status int, obj any) {
// https://github.com/conan-io/conan/issues/6613
ctx.Resp.Header().Set("Content-Type", "application/json")
ctx.Status(status)
- if err := json.NewEncoder(ctx.Resp).Encode(obj); err != nil {
- log.Error("JSON encode: %v", err)
- }
+ _ = json.NewEncoder(ctx.Resp).Encode(obj)
}
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- jsonResponse(ctx, status, map[string]string{
- "message": message,
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ jsonResponse(ctx, status, map[string]string{
+ "message": message,
})
}
@@ -393,7 +390,6 @@ func uploadFile(ctx *context.Context, fileFilter container.Set[string], fileKey
if isConanfileFile {
metadata, err := conan_module.ParseConanfile(buf)
if err != nil {
- log.Error("Error parsing package metadata: %v", err)
apiError(ctx, http.StatusInternalServerError, err)
return
}
@@ -419,7 +415,6 @@ func uploadFile(ctx *context.Context, fileFilter container.Set[string], fileKey
} else {
info, err := conan_module.ParseConaninfo(buf)
if err != nil {
- log.Error("Error parsing conan info: %v", err)
apiError(ctx, http.StatusInternalServerError, err)
return
}
@@ -480,7 +475,7 @@ func downloadFile(ctx *context.Context, fileFilter container.Set[string], fileKe
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -492,6 +487,7 @@ func downloadFile(ctx *context.Context, fileFilter container.Set[string], fileKe
Filename: filename,
CompositeKey: fileKey,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/conda/conda.go b/routers/api/packages/conda/conda.go
index 7a46681235a..f496002bb5a 100644
--- a/routers/api/packages/conda/conda.go
+++ b/routers/api/packages/conda/conda.go
@@ -13,7 +13,6 @@ import (
packages_model "code.gitea.io/gitea/models/packages"
conda_model "code.gitea.io/gitea/models/packages/conda"
"code.gitea.io/gitea/modules/json"
- "code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
conda_module "code.gitea.io/gitea/modules/packages/conda"
"code.gitea.io/gitea/modules/util"
@@ -25,17 +24,34 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, struct {
- Reason string `json:"reason"`
- Message string `json:"message"`
- }{
- Reason: http.StatusText(status),
- Message: message,
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, struct {
+ Reason string `json:"reason"`
+ Message string `json:"message"`
+ }{
+ Reason: http.StatusText(status),
+ Message: message,
})
}
+func isCondaPackageFileName(filename string) bool {
+ return strings.HasSuffix(filename, ".tar.bz2") || strings.HasSuffix(filename, ".conda")
+}
+
+func ListOrGetPackages(ctx *context.Context) {
+ filename := ctx.PathParam("filename")
+ switch filename {
+ case "repodata.json", "repodata.json.bz2", "current_repodata.json", "current_repodata.json.bz2":
+ EnumeratePackages(ctx)
+ return
+ }
+ if isCondaPackageFileName(filename) {
+ DownloadPackageFile(ctx)
+ return
+ }
+ http.NotFound(ctx.Resp, ctx.Req)
+}
+
func EnumeratePackages(ctx *context.Context) {
type Info struct {
Subdir string `json:"subdir"`
@@ -167,13 +183,16 @@ func EnumeratePackages(ctx *context.Context) {
}
resp.WriteHeader(http.StatusOK)
-
- if err := json.NewEncoder(w).Encode(repoData); err != nil {
- log.Error("JSON encode: %v", err)
- }
+ _ = json.NewEncoder(w).Encode(repoData)
}
func UploadPackageFile(ctx *context.Context) {
+ filename := ctx.PathParam("filename")
+ if !isCondaPackageFileName(filename) {
+ apiError(ctx, http.StatusBadRequest, nil)
+ return
+ }
+
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
@@ -191,7 +210,7 @@ func UploadPackageFile(ctx *context.Context) {
defer buf.Close()
var pck *conda_module.Package
- if strings.HasSuffix(strings.ToLower(ctx.PathParam("filename")), ".tar.bz2") {
+ if strings.HasSuffix(filename, ".tar.bz2") {
pck, err = conda_module.ParsePackageBZ2(buf)
} else {
pck, err = conda_module.ParsePackageConda(buf, buf.Size())
@@ -293,7 +312,7 @@ func DownloadPackageFile(ctx *context.Context) {
pf := pfs[0]
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pf)
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pf, ctx.Req.Method)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
diff --git a/routers/api/packages/container/auth.go b/routers/api/packages/container/auth.go
index 1d8ae6af7d7..19a931c4057 100644
--- a/routers/api/packages/container/auth.go
+++ b/routers/api/packages/container/auth.go
@@ -21,7 +21,7 @@ func (a *Auth) Name() string {
}
// Verify extracts the user from the Bearer token
-// If it's an anonymous session a ghost user is returned
+// If it's an anonymous session, a ghost user is returned
func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataStore, sess auth.SessionStore) (*user_model.User, error) {
packageMeta, err := packages.ParseAuthorizationRequest(req)
if err != nil {
@@ -35,7 +35,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
u, err := user_model.GetPossibleUserByID(req.Context(), packageMeta.UserID)
if err != nil {
- log.Error("GetPossibleUserByID: %v", err)
return nil, err
}
diff --git a/routers/api/packages/container/blob.go b/routers/api/packages/container/blob.go
index 4a2320ab760..4b7bcee9d0b 100644
--- a/routers/api/packages/container/blob.go
+++ b/routers/api/packages/container/blob.go
@@ -20,11 +20,13 @@ import (
container_module "code.gitea.io/gitea/modules/packages/container"
"code.gitea.io/gitea/modules/util"
packages_service "code.gitea.io/gitea/services/packages"
+
+ "github.com/opencontainers/go-digest"
)
// saveAsPackageBlob creates a package blob from an upload
// The uploaded blob gets stored in a special upload version to link them to the package/image
-func saveAsPackageBlob(ctx context.Context, hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) { //nolint:unparam
+func saveAsPackageBlob(ctx context.Context, hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) { //nolint:unparam // PackageBlob is never used
pb := packages_service.NewPackageBlob(hsr)
exists := false
@@ -88,20 +90,18 @@ func mountBlob(ctx context.Context, pi *packages_service.PackageInfo, pb *packag
})
}
-func containerPkgName(piOwnerID int64, piName string) string {
- return fmt.Sprintf("pkg_%d_container_%s", piOwnerID, strings.ToLower(piName))
+func containerGlobalLockKey(piOwnerID int64, piName, usage string) string {
+ return fmt.Sprintf("pkg_%d_container_%s_%s", piOwnerID, strings.ToLower(piName), usage)
}
func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageInfo) (*packages_model.PackageVersion, error) {
- var uploadVersion *packages_model.PackageVersion
-
- releaser, err := globallock.Lock(ctx, containerPkgName(pi.Owner.ID, pi.Name))
+ releaser, err := globallock.Lock(ctx, containerGlobalLockKey(pi.Owner.ID, pi.Name, "package"))
if err != nil {
return nil, err
}
defer releaser()
- err = db.WithTx(ctx, func(ctx context.Context) error {
+ return db.WithTx2(ctx, func(ctx context.Context) (*packages_model.PackageVersion, error) {
created := true
p := &packages_model.Package{
OwnerID: pi.Owner.ID,
@@ -113,7 +113,7 @@ func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageI
if p, err = packages_model.TryInsertPackage(ctx, p); err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackage) {
log.Error("Error inserting package: %v", err)
- return err
+ return nil, err
}
created = false
}
@@ -121,31 +121,26 @@ func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageI
if created {
if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypePackage, p.ID, container_module.PropertyRepository, strings.ToLower(pi.Owner.LowerName+"/"+pi.Name)); err != nil {
log.Error("Error setting package property: %v", err)
- return err
+ return nil, err
}
}
pv := &packages_model.PackageVersion{
PackageID: p.ID,
CreatorID: pi.Owner.ID,
- Version: container_model.UploadVersion,
- LowerVersion: container_model.UploadVersion,
+ Version: container_module.UploadVersion,
+ LowerVersion: container_module.UploadVersion,
IsInternal: true,
MetadataJSON: "null",
}
if pv, err = packages_model.GetOrInsertVersion(ctx, pv); err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
log.Error("Error inserting package: %v", err)
- return err
+ return nil, err
}
}
-
- uploadVersion = pv
-
- return nil
+ return pv, nil
})
-
- return uploadVersion, err
}
func createFileForBlob(ctx context.Context, pv *packages_model.PackageVersion, pb *packages_model.PackageBlob) error {
@@ -175,8 +170,8 @@ func createFileForBlob(ctx context.Context, pv *packages_model.PackageVersion, p
return nil
}
-func deleteBlob(ctx context.Context, ownerID int64, image, digest string) error {
- releaser, err := globallock.Lock(ctx, containerPkgName(ownerID, image))
+func deleteBlob(ctx context.Context, ownerID int64, image string, digest digest.Digest) error {
+ releaser, err := globallock.Lock(ctx, containerGlobalLockKey(ownerID, image, "blob"))
if err != nil {
return err
}
@@ -186,7 +181,7 @@ func deleteBlob(ctx context.Context, ownerID int64, image, digest string) error
pfds, err := container_model.GetContainerBlobs(ctx, &container_model.BlobSearchOptions{
OwnerID: ownerID,
Image: image,
- Digest: digest,
+ Digest: string(digest),
})
if err != nil {
return err
diff --git a/routers/api/packages/container/container.go b/routers/api/packages/container/container.go
index 53f1f130f80..db81dd13c28 100644
--- a/routers/api/packages/container/container.go
+++ b/routers/api/packages/container/container.go
@@ -13,6 +13,7 @@ import (
"regexp"
"strconv"
"strings"
+ "sync"
auth_model "code.gitea.io/gitea/models/auth"
packages_model "code.gitea.io/gitea/models/packages"
@@ -32,17 +33,21 @@ import (
packages_service "code.gitea.io/gitea/services/packages"
container_service "code.gitea.io/gitea/services/packages/container"
- digest "github.com/opencontainers/go-digest"
+ "github.com/opencontainers/go-digest"
)
// maximum size of a container manifest
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-manifests
const maxManifestSize = 10 * 1024 * 1024
-var (
- imageNamePattern = regexp.MustCompile(`\A[a-z0-9]+([._-][a-z0-9]+)*(/[a-z0-9]+([._-][a-z0-9]+)*)*\z`)
- referencePattern = regexp.MustCompile(`\A[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}\z`)
-)
+var globalVars = sync.OnceValue(func() (ret struct {
+ imageNamePattern, referencePattern *regexp.Regexp
+},
+) {
+ ret.imageNamePattern = regexp.MustCompile(`\A[a-z0-9]+([._-][a-z0-9]+)*(/[a-z0-9]+([._-][a-z0-9]+)*)*\z`)
+ ret.referencePattern = regexp.MustCompile(`\A[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}\z`)
+ return ret
+})
type containerHeaders struct {
Status int
@@ -84,16 +89,13 @@ func jsonResponse(ctx *context.Context, status int, obj any) {
Status: status,
ContentType: "application/json",
})
- if err := json.NewEncoder(ctx.Resp).Encode(obj); err != nil {
- log.Error("JSON encode: %v", err)
- }
+ _ = json.NewEncoder(ctx.Resp).Encode(obj) // ignore network errors
}
func apiError(ctx *context.Context, status int, err error) {
- helper.LogAndProcessError(ctx, status, err, func(message string) {
- setResponseHeaders(ctx.Resp, &containerHeaders{
- Status: status,
- })
+ _ = helper.ProcessErrorForUser(ctx, status, err)
+ setResponseHeaders(ctx.Resp, &containerHeaders{
+ Status: status,
})
}
@@ -134,7 +136,7 @@ func ReqContainerAccess(ctx *context.Context) {
// VerifyImageName is a middleware which checks if the image name is allowed
func VerifyImageName(ctx *context.Context) {
- if !imageNamePattern.MatchString(ctx.PathParam("image")) {
+ if !globalVars().imageNamePattern.MatchString(ctx.PathParam("image")) {
apiErrorDefined(ctx, errNameInvalid)
}
}
@@ -216,7 +218,7 @@ func GetRepositoryList(ctx *context.Context) {
if len(repositories) == n {
v := url.Values{}
if n > 0 {
- v.Add("n", strconv.Itoa(n))
+ v.Add("n", strconv.Itoa(n)) // FIXME: "n" can't be zero here, the logic is inconsistent with GetTagsList
}
v.Add("last", repositories[len(repositories)-1])
@@ -231,7 +233,7 @@ func GetRepositoryList(ctx *context.Context) {
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#mounting-a-blob-from-another-repository
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#single-post
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
-func InitiateUploadBlob(ctx *context.Context) {
+func PostBlobsUploads(ctx *context.Context) {
image := ctx.PathParam("image")
mount := ctx.FormTrim("mount")
@@ -313,14 +315,14 @@ func InitiateUploadBlob(ctx *context.Context) {
setResponseHeaders(ctx.Resp, &containerHeaders{
Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, upload.ID),
- Range: "0-0",
UploadUUID: upload.ID,
Status: http.StatusAccepted,
})
}
-// https://docs.docker.com/registry/spec/api/#get-blob-upload
-func GetUploadBlob(ctx *context.Context) {
+// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
+func GetBlobsUpload(ctx *context.Context) {
+ image := ctx.PathParam("image")
uuid := ctx.PathParam("uuid")
upload, err := packages_model.GetBlobUploadByID(ctx, uuid)
@@ -333,15 +335,21 @@ func GetUploadBlob(ctx *context.Context) {
return
}
- setResponseHeaders(ctx.Resp, &containerHeaders{
- Range: fmt.Sprintf("0-%d", upload.BytesReceived),
+ // FIXME: undefined behavior when the uploaded content is empty: https://github.com/opencontainers/distribution-spec/issues/578
+ respHeaders := &containerHeaders{
+ Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, upload.ID),
UploadUUID: upload.ID,
Status: http.StatusNoContent,
- })
+ }
+ if upload.BytesReceived > 0 {
+ respHeaders.Range = fmt.Sprintf("0-%d", upload.BytesReceived-1)
+ }
+ setResponseHeaders(ctx.Resp, respHeaders)
}
+// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#single-post
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
-func UploadBlob(ctx *context.Context) {
+func PatchBlobsUpload(ctx *context.Context) {
image := ctx.PathParam("image")
uploader, err := container_service.NewBlobUploader(ctx, ctx.PathParam("uuid"))
@@ -377,16 +385,19 @@ func UploadBlob(ctx *context.Context) {
return
}
- setResponseHeaders(ctx.Resp, &containerHeaders{
+ respHeaders := &containerHeaders{
Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, uploader.ID),
- Range: fmt.Sprintf("0-%d", uploader.Size()-1),
UploadUUID: uploader.ID,
Status: http.StatusAccepted,
- })
+ }
+ if uploader.Size() > 0 {
+ respHeaders.Range = fmt.Sprintf("0-%d", uploader.Size()-1)
+ }
+ setResponseHeaders(ctx.Resp, respHeaders)
}
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
-func EndUploadBlob(ctx *context.Context) {
+func PutBlobsUpload(ctx *context.Context) {
image := ctx.PathParam("image")
digest := ctx.FormTrim("digest")
@@ -437,9 +448,9 @@ func EndUploadBlob(ctx *context.Context) {
return
}
- // There was a strange bug: the "Close" fails with error "close .../tmp/package-upload/....: file already closed"
- // AFAIK there should be no other "Close" call to the uploader between NewBlobUploader and this line.
- // At least it's safe to call Close twice, so ignore the error.
+ // Some SDK (e.g.: minio) will close the Reader if it is also a Closer after "uploading".
+ // And we don't need to wrap the reader to anything else because the SDK will benefit from other interfaces like Seeker.
+ // It's safe to call Close twice, so ignore the error.
_ = uploader.Close()
if err := container_service.RemoveBlobUploadByID(ctx, uploader.ID); err != nil {
@@ -455,7 +466,7 @@ func EndUploadBlob(ctx *context.Context) {
}
// https://docs.docker.com/registry/spec/api/#delete-blob-upload
-func CancelUploadBlob(ctx *context.Context) {
+func DeleteBlobsUpload(ctx *context.Context) {
uuid := ctx.PathParam("uuid")
_, err := packages_model.GetBlobUploadByID(ctx, uuid)
@@ -479,16 +490,15 @@ func CancelUploadBlob(ctx *context.Context) {
}
func getBlobFromContext(ctx *context.Context) (*packages_model.PackageFileDescriptor, error) {
- d := ctx.PathParam("digest")
-
- if digest.Digest(d).Validate() != nil {
+ d := digest.Digest(ctx.PathParam("digest"))
+ if d.Validate() != nil {
return nil, container_model.ErrContainerBlobNotExist
}
return workaroundGetContainerBlob(ctx, &container_model.BlobSearchOptions{
OwnerID: ctx.Package.Owner.ID,
Image: ctx.PathParam("image"),
- Digest: d,
+ Digest: string(d),
})
}
@@ -528,9 +538,8 @@ func GetBlob(ctx *context.Context) {
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#deleting-blobs
func DeleteBlob(ctx *context.Context) {
- d := ctx.PathParam("digest")
-
- if digest.Digest(d).Validate() != nil {
+ d := digest.Digest(ctx.PathParam("digest"))
+ if d.Validate() != nil {
apiErrorDefined(ctx, errBlobUnknown)
return
}
@@ -546,7 +555,7 @@ func DeleteBlob(ctx *context.Context) {
}
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-manifests
-func UploadManifest(ctx *context.Context) {
+func PutManifest(ctx *context.Context) {
reference := ctx.PathParam("reference")
mci := &manifestCreationInfo{
@@ -558,7 +567,7 @@ func UploadManifest(ctx *context.Context) {
IsTagged: digest.Digest(reference).Validate() != nil,
}
- if mci.IsTagged && !referencePattern.MatchString(reference) {
+ if mci.IsTagged && !globalVars().referencePattern.MatchString(reference) {
apiErrorDefined(ctx, errManifestInvalid.WithMessage("Tag is invalid"))
return
}
@@ -602,18 +611,18 @@ func UploadManifest(ctx *context.Context) {
}
func getBlobSearchOptionsFromContext(ctx *context.Context) (*container_model.BlobSearchOptions, error) {
- reference := ctx.PathParam("reference")
-
opts := &container_model.BlobSearchOptions{
OwnerID: ctx.Package.Owner.ID,
Image: ctx.PathParam("image"),
IsManifest: true,
}
- if digest.Digest(reference).Validate() == nil {
- opts.Digest = reference
- } else if referencePattern.MatchString(reference) {
+ reference := ctx.PathParam("reference")
+ if d := digest.Digest(reference); d.Validate() == nil {
+ opts.Digest = string(d)
+ } else if globalVars().referencePattern.MatchString(reference) {
opts.Tag = reference
+ opts.OnlyLead = true
} else {
return nil, container_model.ErrContainerBlobNotExist
}
@@ -700,7 +709,7 @@ func DeleteManifest(ctx *context.Context) {
func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor) {
serveDirectReqParams := make(url.Values)
serveDirectReqParams.Set("response-content-type", pfd.Properties.GetByName(container_module.PropertyMediaType))
- s, u, _, err := packages_service.GetPackageBlobStream(ctx, pfd.File, pfd.Blob, serveDirectReqParams)
+ s, u, _, err := packages_service.OpenBlobForDownload(ctx, pfd.File, pfd.Blob, ctx.Req.Method, serveDirectReqParams)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
@@ -724,13 +733,11 @@ func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor)
defer s.Close()
setResponseHeaders(ctx.Resp, headers)
- if _, err := io.Copy(ctx.Resp, s); err != nil {
- log.Error("Error whilst copying content to response: %v", err)
- }
+ _, _ = io.Copy(ctx.Resp, s)
}
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#content-discovery
-func GetTagList(ctx *context.Context) {
+func GetTagsList(ctx *context.Context) {
image := ctx.PathParam("image")
if _, err := packages_model.GetPackageByName(ctx, ctx.Package.Owner.ID, packages_model.TypeContainer, image); err != nil {
@@ -775,7 +782,8 @@ func GetTagList(ctx *context.Context) {
})
}
-// FIXME: Workaround to be removed in v1.20
+// FIXME: Workaround to be removed in v1.20.
+// Update maybe we should never really remote it, as long as there is legacy data?
// https://github.com/go-gitea/gitea/issues/19586
func workaroundGetContainerBlob(ctx *context.Context, opts *container_model.BlobSearchOptions) (*packages_model.PackageFileDescriptor, error) {
blob, err := container_model.GetContainerBlob(ctx, opts)
diff --git a/routers/api/packages/container/manifest.go b/routers/api/packages/container/manifest.go
index 26faa7b0241..de40215aa76 100644
--- a/routers/api/packages/container/manifest.go
+++ b/routers/api/packages/container/manifest.go
@@ -10,11 +10,13 @@ import (
"io"
"os"
"strings"
+ "time"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
container_model "code.gitea.io/gitea/models/packages/container"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/globallock"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
@@ -22,23 +24,12 @@ import (
"code.gitea.io/gitea/modules/util"
notify_service "code.gitea.io/gitea/services/notify"
packages_service "code.gitea.io/gitea/services/packages"
+ container_service "code.gitea.io/gitea/services/packages/container"
- digest "github.com/opencontainers/go-digest"
+ "github.com/opencontainers/go-digest"
oci "github.com/opencontainers/image-spec/specs-go/v1"
)
-func isValidMediaType(mt string) bool {
- return strings.HasPrefix(mt, "application/vnd.docker.") || strings.HasPrefix(mt, "application/vnd.oci.")
-}
-
-func isImageManifestMediaType(mt string) bool {
- return strings.EqualFold(mt, oci.MediaTypeImageManifest) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.v2+json")
-}
-
-func isImageIndexMediaType(mt string) bool {
- return strings.EqualFold(mt, oci.MediaTypeImageIndex) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.list.v2+json")
-}
-
// manifestCreationInfo describes a manifest to create
type manifestCreationInfo struct {
MediaType string
@@ -55,71 +46,71 @@ func processManifest(ctx context.Context, mci *manifestCreationInfo, buf *packag
if err := json.NewDecoder(buf).Decode(&index); err != nil {
return "", err
}
-
if index.SchemaVersion != 2 {
return "", errUnsupported.WithMessage("Schema version is not supported")
}
-
if _, err := buf.Seek(0, io.SeekStart); err != nil {
return "", err
}
- if !isValidMediaType(mci.MediaType) {
+ if !container_module.IsMediaTypeValid(mci.MediaType) {
mci.MediaType = index.MediaType
- if !isValidMediaType(mci.MediaType) {
+ if !container_module.IsMediaTypeValid(mci.MediaType) {
return "", errManifestInvalid.WithMessage("MediaType not recognized")
}
}
- if isImageManifestMediaType(mci.MediaType) {
- return processImageManifest(ctx, mci, buf)
- } else if isImageIndexMediaType(mci.MediaType) {
- return processImageManifestIndex(ctx, mci, buf)
+ // .../container/manifest.go:453:createManifestBlob() [E] Error inserting package blob: Error 1062 (23000): Duplicate entry '..........' for key 'package_blob.UQE_package_blob_md5'
+ releaser, err := globallock.Lock(ctx, containerGlobalLockKey(mci.Owner.ID, mci.Image, "manifest"))
+ if err != nil {
+ return "", err
+ }
+ defer releaser()
+
+ if container_module.IsMediaTypeImageManifest(mci.MediaType) {
+ return processOciImageManifest(ctx, mci, buf)
+ } else if container_module.IsMediaTypeImageIndex(mci.MediaType) {
+ return processOciImageIndex(ctx, mci, buf)
}
return "", errManifestInvalid
}
-func processImageManifest(ctx context.Context, mci *manifestCreationInfo, buf *packages_module.HashedBuffer) (string, error) {
- manifestDigest := ""
+type processManifestTxRet struct {
+ pv *packages_model.PackageVersion
+ pb *packages_model.PackageBlob
+ created bool
+ digest string
+}
- err := func() error {
- var manifest oci.Manifest
- if err := json.NewDecoder(buf).Decode(&manifest); err != nil {
- return err
+func handleCreateManifestResult(ctx context.Context, err error, mci *manifestCreationInfo, contentStore *packages_module.ContentStore, txRet *processManifestTxRet) (string, error) {
+ if err != nil && txRet.created && txRet.pb != nil {
+ if err := contentStore.Delete(packages_module.BlobHash256Key(txRet.pb.HashSHA256)); err != nil {
+ log.Error("Error deleting package blob from content store: %v", err)
}
+ return "", err
+ }
+ pd, err := packages_model.GetPackageDescriptor(ctx, txRet.pv)
+ if err != nil {
+ log.Error("Error getting package descriptor: %v", err) // ignore this error
+ } else {
+ notify_service.PackageCreate(ctx, mci.Creator, pd)
+ }
+ return txRet.digest, nil
+}
- if _, err := buf.Seek(0, io.SeekStart); err != nil {
- return err
- }
-
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
-
- configDescriptor, err := container_model.GetContainerBlob(ctx, &container_model.BlobSearchOptions{
- OwnerID: mci.Owner.ID,
- Image: mci.Image,
- Digest: string(manifest.Config.Digest),
- })
- if err != nil {
- return err
- }
-
- configReader, err := packages_module.NewContentStore().Get(packages_module.BlobHash256Key(configDescriptor.Blob.HashSHA256))
- if err != nil {
- return err
- }
- defer configReader.Close()
-
- metadata, err := container_module.ParseImageConfig(manifest.Config.MediaType, configReader)
- if err != nil {
- return err
- }
+func processOciImageManifest(ctx context.Context, mci *manifestCreationInfo, buf *packages_module.HashedBuffer) (manifestDigest string, errRet error) {
+ manifest, configDescriptor, metadata, err := container_service.ParseManifestMetadata(ctx, buf, mci.Owner.ID, mci.Image)
+ if err != nil {
+ return "", err
+ }
+ if _, err = buf.Seek(0, io.SeekStart); err != nil {
+ return "", err
+ }
+ contentStore := packages_module.NewContentStore()
+ var txRet processManifestTxRet
+ err = db.WithTx(ctx, func(ctx context.Context) (err error) {
blobReferences := make([]*blobReference, 0, 1+len(manifest.Layers))
-
blobReferences = append(blobReferences, &blobReference{
Digest: manifest.Config.Digest,
MediaType: manifest.Config.MediaType,
@@ -150,78 +141,43 @@ func processImageManifest(ctx context.Context, mci *manifestCreationInfo, buf *p
return err
}
- uploadVersion, err := packages_model.GetInternalVersionByNameAndVersion(ctx, mci.Owner.ID, packages_model.TypeContainer, mci.Image, container_model.UploadVersion)
- if err != nil && err != packages_model.ErrPackageNotExist {
+ uploadVersion, err := packages_model.GetInternalVersionByNameAndVersion(ctx, mci.Owner.ID, packages_model.TypeContainer, mci.Image, container_module.UploadVersion)
+ if err != nil && !errors.Is(err, packages_model.ErrPackageNotExist) {
return err
}
for _, ref := range blobReferences {
- if err := createFileFromBlobReference(ctx, pv, uploadVersion, ref); err != nil {
+ if _, err = createFileFromBlobReference(ctx, pv, uploadVersion, ref); err != nil {
return err
}
}
+ txRet.pv = pv
+ txRet.pb, txRet.created, txRet.digest, err = createManifestBlob(ctx, contentStore, mci, pv, buf)
+ return err
+ })
- pb, created, digest, err := createManifestBlob(ctx, mci, pv, buf)
- removeBlob := false
- defer func() {
- if removeBlob {
- contentStore := packages_module.NewContentStore()
- if err := contentStore.Delete(packages_module.BlobHash256Key(pb.HashSHA256)); err != nil {
- log.Error("Error deleting package blob from content store: %v", err)
- }
- }
- }()
- if err != nil {
- removeBlob = created
- return err
- }
+ return handleCreateManifestResult(ctx, err, mci, contentStore, &txRet)
+}
- if err := committer.Commit(); err != nil {
- removeBlob = created
- return err
- }
-
- if err := notifyPackageCreate(ctx, mci.Creator, pv); err != nil {
- return err
- }
-
- manifestDigest = digest
-
- return nil
- }()
- if err != nil {
+func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *packages_module.HashedBuffer) (manifestDigest string, errRet error) {
+ var index oci.Index
+ if err := json.NewDecoder(buf).Decode(&index); err != nil {
+ return "", err
+ }
+ if _, err := buf.Seek(0, io.SeekStart); err != nil {
return "", err
}
- return manifestDigest, nil
-}
-
-func processImageManifestIndex(ctx context.Context, mci *manifestCreationInfo, buf *packages_module.HashedBuffer) (string, error) {
- manifestDigest := ""
-
- err := func() error {
- var index oci.Index
- if err := json.NewDecoder(buf).Decode(&index); err != nil {
- return err
- }
-
- if _, err := buf.Seek(0, io.SeekStart); err != nil {
- return err
- }
-
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
-
+ contentStore := packages_module.NewContentStore()
+ var txRet processManifestTxRet
+ err := db.WithTx(ctx, func(ctx context.Context) (err error) {
metadata := &container_module.Metadata{
Type: container_module.TypeOCI,
Manifests: make([]*container_module.Manifest, 0, len(index.Manifests)),
}
for _, manifest := range index.Manifests {
- if !isImageManifestMediaType(manifest.MediaType) {
+ if !container_module.IsMediaTypeImageManifest(manifest.MediaType) {
return errManifestInvalid
}
@@ -265,50 +221,12 @@ func processImageManifestIndex(ctx context.Context, mci *manifestCreationInfo, b
return err
}
- pb, created, digest, err := createManifestBlob(ctx, mci, pv, buf)
- removeBlob := false
- defer func() {
- if removeBlob {
- contentStore := packages_module.NewContentStore()
- if err := contentStore.Delete(packages_module.BlobHash256Key(pb.HashSHA256)); err != nil {
- log.Error("Error deleting package blob from content store: %v", err)
- }
- }
- }()
- if err != nil {
- removeBlob = created
- return err
- }
-
- if err := committer.Commit(); err != nil {
- removeBlob = created
- return err
- }
-
- if err := notifyPackageCreate(ctx, mci.Creator, pv); err != nil {
- return err
- }
-
- manifestDigest = digest
-
- return nil
- }()
- if err != nil {
- return "", err
- }
-
- return manifestDigest, nil
-}
-
-func notifyPackageCreate(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
- pd, err := packages_model.GetPackageDescriptor(ctx, pv)
- if err != nil {
+ txRet.pv = pv
+ txRet.pb, txRet.created, txRet.digest, err = createManifestBlob(ctx, contentStore, mci, pv, buf)
return err
- }
+ })
- notify_service.PackageCreate(ctx, doer, pd)
-
- return nil
+ return handleCreateManifestResult(ctx, err, mci, contentStore, &txRet)
}
func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, metadata *container_module.Metadata) (*packages_model.PackageVersion, error) {
@@ -349,24 +267,31 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
LowerVersion: strings.ToLower(mci.Reference),
MetadataJSON: string(metadataJSON),
}
- var pv *packages_model.PackageVersion
- if pv, err = packages_model.GetOrInsertVersion(ctx, _pv); err != nil {
+ pv, err := packages_model.GetOrInsertVersion(ctx, _pv)
+ if err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
log.Error("Error inserting package: %v", err)
return nil, err
}
- if err = packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
- return nil, err
- }
-
- // keep download count on overwrite
- _pv.DownloadCount = pv.DownloadCount
-
- if pv, err = packages_model.GetOrInsertVersion(ctx, _pv); err != nil {
- if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
- log.Error("Error inserting package: %v", err)
- return nil, err
+ if container_module.IsMediaTypeImageIndex(mci.MediaType) {
+ if pv.CreatedUnix.AsTime().Before(time.Now().Add(-24 * time.Hour)) {
+ if err = packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
+ return nil, err
+ }
+ // keep download count on overwriting
+ _pv.DownloadCount = pv.DownloadCount
+ if pv, err = packages_model.GetOrInsertVersion(ctx, _pv); err != nil {
+ if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
+ log.Error("Error inserting package: %v", err)
+ return nil, err
+ }
+ }
+ } else {
+ err = packages_model.UpdateVersion(ctx, &packages_model.PackageVersion{ID: pv.ID, MetadataJSON: _pv.MetadataJSON})
+ if err != nil {
+ return nil, err
+ }
}
}
}
@@ -376,14 +301,20 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
}
if mci.IsTagged {
- if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged, ""); err != nil {
- log.Error("Error setting package version property: %v", err)
+ if err = packages_model.InsertOrUpdateProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged, ""); err != nil {
+ return nil, err
+ }
+ } else {
+ if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged); err != nil {
return nil, err
}
}
+
+ if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference); err != nil {
+ return nil, err
+ }
for _, manifest := range metadata.Manifests {
- if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference, manifest.Digest); err != nil {
- log.Error("Error setting package version property: %v", err)
+ if _, err = packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference, manifest.Digest); err != nil {
return nil, err
}
}
@@ -400,9 +331,9 @@ type blobReference struct {
IsLead bool
}
-func createFileFromBlobReference(ctx context.Context, pv, uploadVersion *packages_model.PackageVersion, ref *blobReference) error {
+func createFileFromBlobReference(ctx context.Context, pv, uploadVersion *packages_model.PackageVersion, ref *blobReference) (*packages_model.PackageFile, error) {
if ref.File.Blob.Size != ref.ExpectedSize {
- return errSizeInvalid
+ return nil, errSizeInvalid
}
if ref.Name == "" {
@@ -410,20 +341,21 @@ func createFileFromBlobReference(ctx context.Context, pv, uploadVersion *package
}
pf := &packages_model.PackageFile{
- VersionID: pv.ID,
- BlobID: ref.File.Blob.ID,
- Name: ref.Name,
- LowerName: ref.Name,
- IsLead: ref.IsLead,
+ VersionID: pv.ID,
+ BlobID: ref.File.Blob.ID,
+ Name: ref.Name,
+ LowerName: ref.Name,
+ CompositeKey: string(ref.Digest),
+ IsLead: ref.IsLead,
}
var err error
if pf, err = packages_model.TryInsertFile(ctx, pf); err != nil {
if errors.Is(err, packages_model.ErrDuplicatePackageFile) {
// Skip this blob because the manifest contains the same filesystem layer multiple times.
- return nil
+ return pf, nil
}
log.Error("Error inserting package file: %v", err)
- return err
+ return nil, err
}
props := map[string]string{
@@ -433,21 +365,21 @@ func createFileFromBlobReference(ctx context.Context, pv, uploadVersion *package
for name, value := range props {
if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypeFile, pf.ID, name, value); err != nil {
log.Error("Error setting package file property: %v", err)
- return err
+ return nil, err
}
}
- // Remove the file from the blob upload version
+ // Remove the ref file (old file) from the blob upload version
if uploadVersion != nil && ref.File.File != nil && uploadVersion.ID == ref.File.File.VersionID {
if err := packages_service.DeletePackageFile(ctx, ref.File.File); err != nil {
- return err
+ return nil, err
}
}
- return nil
+ return pf, nil
}
-func createManifestBlob(ctx context.Context, mci *manifestCreationInfo, pv *packages_model.PackageVersion, buf *packages_module.HashedBuffer) (*packages_model.PackageBlob, bool, string, error) {
+func createManifestBlob(ctx context.Context, contentStore *packages_module.ContentStore, mci *manifestCreationInfo, pv *packages_model.PackageVersion, buf *packages_module.HashedBuffer) (_ *packages_model.PackageBlob, created bool, manifestDigest string, _ error) {
pb, exists, err := packages_model.GetOrInsertBlob(ctx, packages_service.NewPackageBlob(buf))
if err != nil {
log.Error("Error inserting package blob: %v", err)
@@ -456,29 +388,48 @@ func createManifestBlob(ctx context.Context, mci *manifestCreationInfo, pv *pack
// FIXME: Workaround to be removed in v1.20
// https://github.com/go-gitea/gitea/issues/19586
if exists {
- err = packages_module.NewContentStore().Has(packages_module.BlobHash256Key(pb.HashSHA256))
+ err = contentStore.Has(packages_module.BlobHash256Key(pb.HashSHA256))
if err != nil && (errors.Is(err, util.ErrNotExist) || errors.Is(err, os.ErrNotExist)) {
log.Debug("Package registry inconsistent: blob %s does not exist on file system", pb.HashSHA256)
exists = false
}
}
if !exists {
- contentStore := packages_module.NewContentStore()
if err := contentStore.Save(packages_module.BlobHash256Key(pb.HashSHA256), buf, buf.Size()); err != nil {
log.Error("Error saving package blob in content store: %v", err)
return nil, false, "", err
}
}
- manifestDigest := digestFromHashSummer(buf)
- err = createFileFromBlobReference(ctx, pv, nil, &blobReference{
+ manifestDigest = digestFromHashSummer(buf)
+ pf, err := createFileFromBlobReference(ctx, pv, nil, &blobReference{
Digest: digest.Digest(manifestDigest),
MediaType: mci.MediaType,
- Name: container_model.ManifestFilename,
+ Name: container_module.ManifestFilename,
File: &packages_model.PackageFileDescriptor{Blob: pb},
ExpectedSize: pb.Size,
IsLead: true,
})
+ if err != nil {
+ return nil, false, "", err
+ }
+ oldManifestFiles, _, err := packages_model.SearchFiles(ctx, &packages_model.PackageFileSearchOptions{
+ OwnerID: mci.Owner.ID,
+ PackageType: packages_model.TypeContainer,
+ VersionID: pv.ID,
+ Query: container_module.ManifestFilename,
+ })
+ if err != nil {
+ return nil, false, "", err
+ }
+ for _, oldManifestFile := range oldManifestFiles {
+ if oldManifestFile.ID != pf.ID && oldManifestFile.IsLead {
+ err = packages_model.UpdateFile(ctx, &packages_model.PackageFile{ID: oldManifestFile.ID, IsLead: false}, []string{"is_lead"})
+ if err != nil {
+ return nil, false, "", err
+ }
+ }
+ }
return pb, !exists, manifestDigest, err
}
diff --git a/routers/api/packages/cran/cran.go b/routers/api/packages/cran/cran.go
index 8a20072cb6d..323690fd52d 100644
--- a/routers/api/packages/cran/cran.go
+++ b/routers/api/packages/cran/cran.go
@@ -22,9 +22,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
func EnumerateSourcePackages(ctx *context.Context) {
@@ -250,7 +249,7 @@ func downloadPackageFile(ctx *context.Context, opts *cran_model.SearchOptions) {
return
}
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pf)
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pf, ctx.Req.Method)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)
diff --git a/routers/api/packages/debian/debian.go b/routers/api/packages/debian/debian.go
index fec34c91a6e..82c7952bdbb 100644
--- a/routers/api/packages/debian/debian.go
+++ b/routers/api/packages/debian/debian.go
@@ -24,9 +24,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
func GetRepositoryKey(ctx *context.Context) {
@@ -59,13 +58,14 @@ func GetRepositoryFile(ctx *context.Context) {
key += "|" + component + "|" + architecture
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pv,
&packages_service.PackageFileInfo{
Filename: ctx.PathParam("filename"),
CompositeKey: key,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
@@ -106,7 +106,7 @@ func GetRepositoryFileByHash(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0])
+ s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)
@@ -210,7 +210,7 @@ func DownloadPackageFile(ctx *context.Context) {
name := ctx.PathParam("name")
version := ctx.PathParam("version")
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -222,6 +222,7 @@ func DownloadPackageFile(ctx *context.Context) {
Filename: fmt.Sprintf("%s_%s_%s.deb", name, version, ctx.PathParam("architecture")),
CompositeKey: fmt.Sprintf("%s|%s", ctx.PathParam("distribution"), ctx.PathParam("component")),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go
index 0b5daa7334a..5eb189e6d9c 100644
--- a/routers/api/packages/generic/generic.go
+++ b/routers/api/packages/generic/generic.go
@@ -11,7 +11,6 @@ import (
"unicode"
packages_model "code.gitea.io/gitea/models/packages"
- "code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
"code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/services/context"
@@ -24,14 +23,13 @@ var (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
// DownloadPackageFile serves the specific generic package.
func DownloadPackageFile(ctx *context.Context) {
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -42,6 +40,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: ctx.PathParam("filename"),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
@@ -101,7 +100,6 @@ func UploadPackage(ctx *context.Context) {
buf, err := packages_module.CreateHashedBufferFromReader(upload)
if err != nil {
- log.Error("Error creating hashed buffer: %v", err)
apiError(ctx, http.StatusInternalServerError, err)
return
}
diff --git a/routers/api/packages/goproxy/goproxy.go b/routers/api/packages/goproxy/goproxy.go
index bde29df7393..951f50053c3 100644
--- a/routers/api/packages/goproxy/goproxy.go
+++ b/routers/api/packages/goproxy/goproxy.go
@@ -22,9 +22,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
func EnumeratePackageVersions(ctx *context.Context) {
@@ -106,7 +105,7 @@ func DownloadPackageFile(ctx *context.Context) {
return
}
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pfs[0])
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)
diff --git a/routers/api/packages/helm/helm.go b/routers/api/packages/helm/helm.go
index fb12daaa46a..4c1b72d5c01 100644
--- a/routers/api/packages/helm/helm.go
+++ b/routers/api/packages/helm/helm.go
@@ -14,7 +14,6 @@ import (
packages_model "code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/modules/json"
- "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/optional"
packages_module "code.gitea.io/gitea/modules/packages"
helm_module "code.gitea.io/gitea/modules/packages/helm"
@@ -28,13 +27,12 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- type Error struct {
- Error string `json:"error"`
- }
- ctx.JSON(status, Error{
- Error: message,
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ type Error struct {
+ Error string `json:"error"`
+ }
+ ctx.JSON(status, Error{
+ Error: message,
})
}
@@ -87,16 +85,14 @@ func Index(ctx *context.Context) {
}
ctx.Resp.WriteHeader(http.StatusOK)
- if err := yaml.NewEncoder(ctx.Resp).Encode(&Index{
+ _ = yaml.NewEncoder(ctx.Resp).Encode(&Index{
APIVersion: "v1",
Entries: entries,
Generated: time.Now(),
ServerInfo: &ServerInfo{
ContextPath: setting.AppSubURL + "/api/packages/" + url.PathEscape(ctx.Package.Owner.Name) + "/helm",
},
- }); err != nil {
- log.Error("YAML encode failed: %v", err)
- }
+ })
}
// DownloadPackageFile serves the content of a package
@@ -122,12 +118,13 @@ func DownloadPackageFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pvs[0],
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/helper/helper.go b/routers/api/packages/helper/helper.go
index cdb64109ade..27d4e6ffdc6 100644
--- a/routers/api/packages/helper/helper.go
+++ b/routers/api/packages/helper/helper.go
@@ -15,31 +15,29 @@ import (
"code.gitea.io/gitea/services/context"
)
-// LogAndProcessError logs an error and calls a custom callback with the processed error message.
-// If the error is an InternalServerError the message is stripped if the user is not an admin.
-func LogAndProcessError(ctx *context.Context, status int, obj any, cb func(string)) {
+// ProcessErrorForUser logs the error and returns a user-error message for the end user.
+// If the status is http.StatusInternalServerError, the message is stripped for non-admin users in production.
+func ProcessErrorForUser(ctx *context.Context, status int, errObj any) string {
var message string
- if err, ok := obj.(error); ok {
+ if err, ok := errObj.(error); ok {
message = err.Error()
- } else if obj != nil {
- message = fmt.Sprintf("%s", obj)
+ } else if errObj != nil {
+ message = fmt.Sprint(errObj)
}
+
if status == http.StatusInternalServerError {
- log.ErrorWithSkip(1, message)
-
+ log.Log(2, log.ERROR, "Package registry API internal error: %d %s", status, message)
if setting.IsProd && (ctx.Doer == nil || !ctx.Doer.IsAdmin) {
- message = ""
+ message = "internal server error"
}
- } else {
- log.Debug(message)
+ return message
}
- if cb != nil {
- cb(message)
- }
+ log.Log(2, log.DEBUG, "Package registry API user error: %d %s", status, message)
+ return message
}
-// Serves the content of the package file
+// ServePackageFile the content of the package file
// If the url is set it will redirect the request, otherwise the content is copied to the response.
func ServePackageFile(ctx *context.Context, s io.ReadSeekCloser, u *url.URL, pf *packages_model.PackageFile, forceOpts ...*context.ServeHeaderOptions) {
if u != nil {
diff --git a/routers/api/packages/maven/maven.go b/routers/api/packages/maven/maven.go
index 9089c2eccfa..6c2916908b6 100644
--- a/routers/api/packages/maven/maven.go
+++ b/routers/api/packages/maven/maven.go
@@ -22,7 +22,6 @@ import (
packages_model "code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/modules/globallock"
"code.gitea.io/gitea/modules/json"
- "code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
maven_module "code.gitea.io/gitea/modules/packages/maven"
"code.gitea.io/gitea/modules/util"
@@ -49,14 +48,9 @@ var (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- // The maven client does not present the error message to the user. Log it for users with access to server logs.
- if status == http.StatusBadRequest || status == http.StatusInternalServerError {
- log.Error(message)
- }
-
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ // Maven client doesn't present the error message to end users; site admin can check the server logs that outputted by ProcessErrorForUser
+ ctx.PlainText(status, message)
}
// DownloadPackageFile serves the content of a package
@@ -223,7 +217,7 @@ func servePackageFile(ctx *context.Context, params parameters, serveContent bool
return
}
- s, u, _, err := packages_service.GetPackageBlobStream(ctx, pf, pb, nil)
+ s, u, _, err := packages_service.OpenBlobForDownload(ctx, pf, pb, ctx.Req.Method, nil)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
diff --git a/routers/api/packages/npm/npm.go b/routers/api/packages/npm/npm.go
index 6ec46bcb365..cc2aff8ea01 100644
--- a/routers/api/packages/npm/npm.go
+++ b/routers/api/packages/npm/npm.go
@@ -33,10 +33,9 @@ import (
var errInvalidTagName = errors.New("The tag name is invalid")
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, map[string]string{
- "error": message,
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, map[string]string{
+ "error": message,
})
}
@@ -85,7 +84,7 @@ func DownloadPackageFile(ctx *context.Context) {
packageVersion := ctx.PathParam("version")
filename := ctx.PathParam("filename")
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -96,6 +95,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
@@ -132,12 +132,13 @@ func DownloadPackageFileByName(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pvs[0],
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/nuget/api_v2.go b/routers/api/packages/nuget/api_v2.go
index a726065ad08..801c60af130 100644
--- a/routers/api/packages/nuget/api_v2.go
+++ b/routers/api/packages/nuget/api_v2.go
@@ -246,21 +246,30 @@ type TypedValue[T any] struct {
}
type FeedEntryProperties struct {
- Version string `xml:"d:Version"`
- NormalizedVersion string `xml:"d:NormalizedVersion"`
Authors string `xml:"d:Authors"`
+ Copyright string `xml:"d:Copyright,omitempty"`
+ Created TypedValue[time.Time] `xml:"d:Created"`
Dependencies string `xml:"d:Dependencies"`
Description string `xml:"d:Description"`
- VersionDownloadCount TypedValue[int64] `xml:"d:VersionDownloadCount"`
+ DevelopmentDependency TypedValue[bool] `xml:"d:DevelopmentDependency"`
DownloadCount TypedValue[int64] `xml:"d:DownloadCount"`
- PackageSize TypedValue[int64] `xml:"d:PackageSize"`
- Created TypedValue[time.Time] `xml:"d:Created"`
+ ID string `xml:"d:Id"`
+ IconURL string `xml:"d:IconUrl,omitempty"`
+ Language string `xml:"d:Language,omitempty"`
LastUpdated TypedValue[time.Time] `xml:"d:LastUpdated"`
- Published TypedValue[time.Time] `xml:"d:Published"`
+ LicenseURL string `xml:"d:LicenseUrl,omitempty"`
+ MinClientVersion string `xml:"d:MinClientVersion,omitempty"`
+ NormalizedVersion string `xml:"d:NormalizedVersion"`
+ Owners string `xml:"d:Owners,omitempty"`
+ PackageSize TypedValue[int64] `xml:"d:PackageSize"`
ProjectURL string `xml:"d:ProjectUrl,omitempty"`
+ Published TypedValue[time.Time] `xml:"d:Published"`
ReleaseNotes string `xml:"d:ReleaseNotes,omitempty"`
RequireLicenseAcceptance TypedValue[bool] `xml:"d:RequireLicenseAcceptance"`
- Title string `xml:"d:Title"`
+ Tags string `xml:"d:Tags,omitempty"`
+ Title string `xml:"d:Title,omitempty"`
+ Version string `xml:"d:Version"`
+ VersionDownloadCount TypedValue[int64] `xml:"d:VersionDownloadCount"`
}
type FeedEntry struct {
@@ -353,21 +362,30 @@ func createEntry(l *linkBuilder, pd *packages_model.PackageDescriptor, withNames
Author: metadata.Authors,
Content: content,
Properties: &FeedEntryProperties{
- Version: pd.Version.Version,
- NormalizedVersion: pd.Version.Version,
Authors: metadata.Authors,
+ Copyright: metadata.Copyright,
+ Created: createdValue,
Dependencies: buildDependencyString(metadata),
Description: metadata.Description,
- VersionDownloadCount: TypedValue[int64]{Type: "Edm.Int64", Value: pd.Version.DownloadCount},
+ DevelopmentDependency: TypedValue[bool]{Type: "Edm.Boolean", Value: metadata.DevelopmentDependency},
DownloadCount: TypedValue[int64]{Type: "Edm.Int64", Value: pd.Version.DownloadCount},
- PackageSize: TypedValue[int64]{Type: "Edm.Int64", Value: pd.CalculateBlobSize()},
- Created: createdValue,
+ ID: pd.Package.Name,
+ IconURL: metadata.IconURL,
+ Language: metadata.Language,
LastUpdated: createdValue,
- Published: createdValue,
+ LicenseURL: metadata.LicenseURL,
+ MinClientVersion: metadata.MinClientVersion,
+ NormalizedVersion: pd.Version.Version,
+ Owners: metadata.Owners,
+ PackageSize: TypedValue[int64]{Type: "Edm.Int64", Value: pd.CalculateBlobSize()},
ProjectURL: metadata.ProjectURL,
+ Published: createdValue,
ReleaseNotes: metadata.ReleaseNotes,
RequireLicenseAcceptance: TypedValue[bool]{Type: "Edm.Boolean", Value: metadata.RequireLicenseAcceptance},
- Title: pd.Package.Name,
+ Tags: metadata.Tags,
+ Title: metadata.Title,
+ Version: pd.Version.Version,
+ VersionDownloadCount: TypedValue[int64]{Type: "Edm.Int64", Value: pd.Version.DownloadCount},
},
}
diff --git a/routers/api/packages/nuget/api_v3.go b/routers/api/packages/nuget/api_v3.go
index 2fe25dc0f80..3262f2d9afb 100644
--- a/routers/api/packages/nuget/api_v3.go
+++ b/routers/api/packages/nuget/api_v3.go
@@ -53,15 +53,23 @@ type RegistrationIndexPageItem struct {
// https://docs.microsoft.com/en-us/nuget/api/registration-base-url-resource#catalog-entry
type CatalogEntry struct {
CatalogLeafURL string `json:"@id"`
- PackageContentURL string `json:"packageContent"`
- ID string `json:"id"`
- Version string `json:"version"`
- Description string `json:"description"`
- ReleaseNotes string `json:"releaseNotes"`
Authors string `json:"authors"`
- RequireLicenseAcceptance bool `json:"requireLicenseAcceptance"`
- ProjectURL string `json:"projectURL"`
+ Copyright string `json:"copyright"`
DependencyGroups []*PackageDependencyGroup `json:"dependencyGroups"`
+ Description string `json:"description"`
+ IconURL string `json:"iconUrl"`
+ ID string `json:"id"`
+ IsPrerelease bool `json:"isPrerelease"`
+ Language string `json:"language"`
+ LicenseURL string `json:"licenseUrl"`
+ PackageContentURL string `json:"packageContent"`
+ ProjectURL string `json:"projectUrl"`
+ RequireLicenseAcceptance bool `json:"requireLicenseAcceptance"`
+ Summary string `json:"summary"`
+ Tags string `json:"tags"`
+ Version string `json:"version"`
+ ReleaseNotes string `json:"releaseNotes"`
+ Published time.Time `json:"published"`
}
// https://docs.microsoft.com/en-us/nuget/api/registration-base-url-resource#package-dependency-group
@@ -109,15 +117,24 @@ func createRegistrationIndexPageItem(l *linkBuilder, pd *packages_model.PackageD
RegistrationLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
PackageContentURL: l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version),
CatalogEntry: &CatalogEntry{
- CatalogLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
- PackageContentURL: l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version),
- ID: pd.Package.Name,
- Version: pd.Version.Version,
- Description: metadata.Description,
- ReleaseNotes: metadata.ReleaseNotes,
- Authors: metadata.Authors,
- ProjectURL: metadata.ProjectURL,
- DependencyGroups: createDependencyGroups(pd),
+ CatalogLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
+ Authors: metadata.Authors,
+ Copyright: metadata.Copyright,
+ DependencyGroups: createDependencyGroups(pd),
+ Description: metadata.Description,
+ IconURL: metadata.IconURL,
+ ID: pd.Package.Name,
+ IsPrerelease: pd.Version.IsPrerelease(),
+ Language: metadata.Language,
+ LicenseURL: metadata.LicenseURL,
+ PackageContentURL: l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version),
+ ProjectURL: metadata.ProjectURL,
+ RequireLicenseAcceptance: metadata.RequireLicenseAcceptance,
+ Summary: metadata.Summary,
+ Tags: metadata.Tags,
+ Version: pd.Version.Version,
+ ReleaseNotes: metadata.ReleaseNotes,
+ Published: pd.Version.CreatedUnix.AsLocalTime(),
},
}
}
@@ -145,22 +162,42 @@ func createDependencyGroups(pd *packages_model.PackageDescriptor) []*PackageDepe
// https://docs.microsoft.com/en-us/nuget/api/registration-base-url-resource#registration-leaf
type RegistrationLeafResponse struct {
- RegistrationLeafURL string `json:"@id"`
- Type []string `json:"@type"`
- Listed bool `json:"listed"`
- PackageContentURL string `json:"packageContent"`
- Published time.Time `json:"published"`
- RegistrationIndexURL string `json:"registration"`
+ RegistrationLeafURL string `json:"@id"`
+ Type []string `json:"@type"`
+ PackageContentURL string `json:"packageContent"`
+ RegistrationIndexURL string `json:"registration"`
+ CatalogEntry CatalogEntry `json:"catalogEntry"`
}
func createRegistrationLeafResponse(l *linkBuilder, pd *packages_model.PackageDescriptor) *RegistrationLeafResponse {
+ registrationLeafURL := l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version)
+ packageDownloadURL := l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version)
+ metadata := pd.Metadata.(*nuget_module.Metadata)
return &RegistrationLeafResponse{
- Type: []string{"Package", "http://schema.nuget.org/catalog#Permalink"},
- Listed: true,
- Published: pd.Version.CreatedUnix.AsLocalTime(),
- RegistrationLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
- PackageContentURL: l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version),
+ RegistrationLeafURL: registrationLeafURL,
RegistrationIndexURL: l.GetRegistrationIndexURL(pd.Package.Name),
+ PackageContentURL: packageDownloadURL,
+ Type: []string{"Package", "http://schema.nuget.org/catalog#Permalink"},
+ CatalogEntry: CatalogEntry{
+ CatalogLeafURL: registrationLeafURL,
+ Authors: metadata.Authors,
+ Copyright: metadata.Copyright,
+ DependencyGroups: createDependencyGroups(pd),
+ Description: metadata.Description,
+ IconURL: metadata.IconURL,
+ ID: pd.Package.Name,
+ IsPrerelease: pd.Version.IsPrerelease(),
+ Language: metadata.Language,
+ LicenseURL: metadata.LicenseURL,
+ PackageContentURL: packageDownloadURL,
+ ProjectURL: metadata.ProjectURL,
+ RequireLicenseAcceptance: metadata.RequireLicenseAcceptance,
+ Summary: metadata.Summary,
+ Tags: metadata.Tags,
+ Version: pd.Version.Version,
+ ReleaseNotes: metadata.ReleaseNotes,
+ Published: pd.Version.CreatedUnix.AsLocalTime(),
+ },
}
}
@@ -188,13 +225,24 @@ type SearchResultResponse struct {
// https://docs.microsoft.com/en-us/nuget/api/search-query-service-resource#search-result
type SearchResult struct {
- ID string `json:"id"`
- Version string `json:"version"`
- Versions []*SearchResultVersion `json:"versions"`
- Description string `json:"description"`
- Authors string `json:"authors"`
- ProjectURL string `json:"projectURL"`
- RegistrationIndexURL string `json:"registration"`
+ Authors string `json:"authors"`
+ Copyright string `json:"copyright"`
+ DependencyGroups []*PackageDependencyGroup `json:"dependencyGroups"`
+ Description string `json:"description"`
+ IconURL string `json:"iconUrl"`
+ ID string `json:"id"`
+ IsPrerelease bool `json:"isPrerelease"`
+ Language string `json:"language"`
+ LicenseURL string `json:"licenseUrl"`
+ ProjectURL string `json:"projectUrl"`
+ RequireLicenseAcceptance bool `json:"requireLicenseAcceptance"`
+ Summary string `json:"summary"`
+ Tags string `json:"tags"`
+ Title string `json:"title"`
+ TotalDownloads int64 `json:"totalDownloads"`
+ Version string `json:"version"`
+ Versions []*SearchResultVersion `json:"versions"`
+ RegistrationIndexURL string `json:"registration"`
}
// https://docs.microsoft.com/en-us/nuget/api/search-query-service-resource#search-result
@@ -230,11 +278,12 @@ func createSearchResultResponse(l *linkBuilder, totalHits int64, pds []*packages
func createSearchResult(l *linkBuilder, pds []*packages_model.PackageDescriptor) *SearchResult {
latest := pds[0]
versions := make([]*SearchResultVersion, 0, len(pds))
+ totalDownloads := int64(0)
for _, pd := range pds {
if latest.SemVer.LessThan(pd.SemVer) {
latest = pd
}
-
+ totalDownloads += pd.Version.DownloadCount
versions = append(versions, &SearchResultVersion{
RegistrationLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
Version: pd.Version.Version,
@@ -244,12 +293,23 @@ func createSearchResult(l *linkBuilder, pds []*packages_model.PackageDescriptor)
metadata := latest.Metadata.(*nuget_module.Metadata)
return &SearchResult{
- ID: latest.Package.Name,
- Version: latest.Version.Version,
- Versions: versions,
- Description: metadata.Description,
- Authors: metadata.Authors,
- ProjectURL: metadata.ProjectURL,
- RegistrationIndexURL: l.GetRegistrationIndexURL(latest.Package.Name),
+ Authors: metadata.Authors,
+ Copyright: metadata.Copyright,
+ Description: metadata.Description,
+ DependencyGroups: createDependencyGroups(latest),
+ IconURL: metadata.IconURL,
+ ID: latest.Package.Name,
+ IsPrerelease: latest.Version.IsPrerelease(),
+ Language: metadata.Language,
+ LicenseURL: metadata.LicenseURL,
+ ProjectURL: metadata.ProjectURL,
+ RequireLicenseAcceptance: metadata.RequireLicenseAcceptance,
+ Summary: metadata.Summary,
+ Tags: metadata.Tags,
+ Title: metadata.Title,
+ TotalDownloads: totalDownloads,
+ Version: latest.Version.Version,
+ Versions: versions,
+ RegistrationIndexURL: l.GetRegistrationIndexURL(latest.Package.Name),
}
}
diff --git a/routers/api/packages/nuget/auth.go b/routers/api/packages/nuget/auth.go
index e81ad01b2b3..ce7df0ce0a0 100644
--- a/routers/api/packages/nuget/auth.go
+++ b/routers/api/packages/nuget/auth.go
@@ -26,7 +26,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
token, err := auth_model.GetAccessTokenBySHA(req.Context(), req.Header.Get("X-NuGet-ApiKey"))
if err != nil {
if !(auth_model.IsErrAccessTokenNotExist(err) || auth_model.IsErrAccessTokenEmpty(err)) {
- log.Error("GetAccessTokenBySHA: %v", err)
return nil, err
}
return nil, nil
@@ -34,7 +33,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
u, err := user_model.GetUserByID(req.Context(), token.UID)
if err != nil {
- log.Error("GetUserByID: %v", err)
return nil, err
}
diff --git a/routers/api/packages/nuget/nuget.go b/routers/api/packages/nuget/nuget.go
index fa5067a278e..c42fdd7db53 100644
--- a/routers/api/packages/nuget/nuget.go
+++ b/routers/api/packages/nuget/nuget.go
@@ -17,7 +17,6 @@ import (
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
nuget_model "code.gitea.io/gitea/models/packages/nuget"
- "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/optional"
packages_module "code.gitea.io/gitea/modules/packages"
nuget_module "code.gitea.io/gitea/modules/packages/nuget"
@@ -29,22 +28,17 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, map[string]string{
- "Message": message,
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, map[string]string{
+ "Message": message,
})
}
-func xmlResponse(ctx *context.Context, status int, obj any) { //nolint:unparam
+func xmlResponse(ctx *context.Context, status int, obj any) { //nolint:unparam // status is always StatusOK
ctx.Resp.Header().Set("Content-Type", "application/atom+xml; charset=utf-8")
ctx.Resp.WriteHeader(status)
- if _, err := ctx.Resp.Write([]byte(xml.Header)); err != nil {
- log.Error("Write failed: %v", err)
- }
- if err := xml.NewEncoder(ctx.Resp).Encode(obj); err != nil {
- log.Error("XML encode failed: %v", err)
- }
+ _, _ = ctx.Resp.Write([]byte(xml.Header))
+ _ = xml.NewEncoder(ctx.Resp).Encode(obj)
}
// https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedQueryBuilder.cs
@@ -405,7 +399,7 @@ func DownloadPackageFile(ctx *context.Context) {
packageVersion := ctx.PathParam("version")
filename := ctx.PathParam("filename")
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -416,6 +410,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
@@ -669,7 +664,7 @@ func DownloadSymbolFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0])
+ s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
diff --git a/routers/api/packages/pub/pub.go b/routers/api/packages/pub/pub.go
index e7b07aefd07..7564e14d0e8 100644
--- a/routers/api/packages/pub/pub.go
+++ b/routers/api/packages/pub/pub.go
@@ -15,7 +15,6 @@ import (
packages_model "code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/modules/json"
- "code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
pub_module "code.gitea.io/gitea/modules/packages/pub"
"code.gitea.io/gitea/modules/setting"
@@ -29,9 +28,7 @@ func jsonResponse(ctx *context.Context, status int, obj any) {
resp := ctx.Resp
resp.Header().Set("Content-Type", "application/vnd.pub.v2+json")
resp.WriteHeader(status)
- if err := json.NewEncoder(resp).Encode(obj); err != nil {
- log.Error("JSON encode: %v", err)
- }
+ _ = json.NewEncoder(resp).Encode(obj)
}
func apiError(ctx *context.Context, status int, obj any) {
@@ -43,13 +40,12 @@ func apiError(ctx *context.Context, status int, obj any) {
Error Error `json:"error"`
}
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- jsonResponse(ctx, status, ErrorWrapper{
- Error: Error{
- Code: http.StatusText(status),
- Message: message,
- },
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ jsonResponse(ctx, status, ErrorWrapper{
+ Error: Error{
+ Code: http.StatusText(status),
+ Message: message,
+ },
})
}
@@ -274,7 +270,7 @@ func DownloadPackageFile(ctx *context.Context) {
pf := pd.Files[0].File
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pf)
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pf, ctx.Req.Method)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
diff --git a/routers/api/packages/pypi/pypi.go b/routers/api/packages/pypi/pypi.go
index 199f4e74787..1b8f4bea34a 100644
--- a/routers/api/packages/pypi/pypi.go
+++ b/routers/api/packages/pypi/pypi.go
@@ -40,9 +40,8 @@ var versionMatcher = regexp.MustCompile(`\Av?` +
`\z`)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
// PackageMetadata returns the metadata for a single package
@@ -82,7 +81,7 @@ func DownloadPackageFile(ctx *context.Context) {
packageVersion := ctx.PathParam("version")
filename := ctx.PathParam("filename")
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -93,6 +92,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/packages/rpm/rpm.go b/routers/api/packages/rpm/rpm.go
index a00a61c0799..5abbb0c8ae6 100644
--- a/routers/api/packages/rpm/rpm.go
+++ b/routers/api/packages/rpm/rpm.go
@@ -26,9 +26,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
// https://dnf.readthedocs.io/en/latest/conf_ref.html
@@ -96,13 +95,14 @@ func GetRepositoryFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pv,
&packages_service.PackageFileInfo{
Filename: ctx.PathParam("filename"),
CompositeKey: ctx.PathParam("group"),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
@@ -220,7 +220,7 @@ func DownloadPackageFile(ctx *context.Context) {
name := ctx.PathParam("name")
version := ctx.PathParam("version")
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -232,6 +232,7 @@ func DownloadPackageFile(ctx *context.Context) {
Filename: fmt.Sprintf("%s-%s.%s.rpm", name, version, ctx.PathParam("architecture")),
CompositeKey: ctx.PathParam("group"),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
diff --git a/routers/api/packages/rubygems/rubygems.go b/routers/api/packages/rubygems/rubygems.go
index de8c7ef3ed0..1ecf93592e1 100644
--- a/routers/api/packages/rubygems/rubygems.go
+++ b/routers/api/packages/rubygems/rubygems.go
@@ -14,6 +14,7 @@ import (
"strings"
packages_model "code.gitea.io/gitea/models/packages"
+ "code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/optional"
packages_module "code.gitea.io/gitea/modules/packages"
rubygems_module "code.gitea.io/gitea/modules/packages/rubygems"
@@ -24,9 +25,8 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.PlainText(status, message)
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.PlainText(status, message)
}
// EnumeratePackages serves the package list
@@ -177,12 +177,13 @@ func DownloadPackageFile(ctx *context.Context) {
return
}
- s, u, pf, err := packages_service.GetFileStreamByPackageVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion(
ctx,
pvs[0],
&packages_service.PackageFileInfo{
Filename: filename,
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageFileNotExist) {
@@ -309,7 +310,7 @@ func GetPackageInfo(ctx *context.Context) {
apiError(ctx, http.StatusNotFound, nil)
return
}
- infoContent, err := makePackageInfo(ctx, versions)
+ infoContent, err := makePackageInfo(ctx, versions, cache.NewEphemeralCache())
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
@@ -317,7 +318,7 @@ func GetPackageInfo(ctx *context.Context) {
ctx.PlainText(http.StatusOK, infoContent)
}
-// GetAllPackagesVersions returns a custom text based format containing information about all versions of all rubygems.
+// GetAllPackagesVersions returns a custom text-based format containing information about all versions of all rubygems.
// ref: https://guides.rubygems.org/rubygems-org-compact-index-api/
func GetAllPackagesVersions(ctx *context.Context) {
packages, err := packages_model.GetPackagesByType(ctx, ctx.Package.Owner.ID, packages_model.TypeRubyGems)
@@ -326,6 +327,7 @@ func GetAllPackagesVersions(ctx *context.Context) {
return
}
+ ephemeralCache := cache.NewEphemeralCache()
out := &strings.Builder{}
out.WriteString("---\n")
for _, pkg := range packages {
@@ -338,7 +340,7 @@ func GetAllPackagesVersions(ctx *context.Context) {
continue
}
- info, err := makePackageInfo(ctx, versions)
+ info, err := makePackageInfo(ctx, versions, ephemeralCache)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
@@ -348,7 +350,14 @@ func GetAllPackagesVersions(ctx *context.Context) {
_, _ = fmt.Fprintf(out, "%s ", pkg.Name)
for i, v := range versions {
sep := util.Iif(i == len(versions)-1, "", ",")
- _, _ = fmt.Fprintf(out, "%s%s", v.Version, sep)
+ pd, err := packages_model.GetPackageDescriptorWithCache(ctx, v, ephemeralCache)
+ if errors.Is(err, util.ErrNotExist) {
+ continue
+ } else if err != nil {
+ apiError(ctx, http.StatusInternalServerError, err)
+ return
+ }
+ writePackageVersionForList(pd.Metadata, v.Version, sep, out)
}
_, _ = fmt.Fprintf(out, " %x\n", md5.Sum([]byte(info)))
}
@@ -356,6 +365,16 @@ func GetAllPackagesVersions(ctx *context.Context) {
ctx.PlainText(http.StatusOK, out.String())
}
+func writePackageVersionForList(metadata any, version, sep string, out *strings.Builder) {
+ if metadata, _ := metadata.(*rubygems_module.Metadata); metadata != nil && metadata.Platform != "" && metadata.Platform != "ruby" {
+ // VERSION_PLATFORM (see comment above in GetAllPackagesVersions)
+ _, _ = fmt.Fprintf(out, "%s_%s%s", version, metadata.Platform, sep)
+ } else {
+ // VERSION only
+ _, _ = fmt.Fprintf(out, "%s%s", version, sep)
+ }
+}
+
func writePackageVersionRequirements(prefix string, reqs []rubygems_module.VersionRequirement, out *strings.Builder) {
out.WriteString(prefix)
if len(reqs) == 0 {
@@ -367,11 +386,21 @@ func writePackageVersionRequirements(prefix string, reqs []rubygems_module.Versi
}
}
-func makePackageVersionDependency(ctx *context.Context, version *packages_model.PackageVersion) (string, error) {
+func writePackageVersionForDependency(version, platform string, out *strings.Builder) {
+ if platform != "" && platform != "ruby" {
+ // VERSION-PLATFORM (see comment below in makePackageVersionDependency)
+ _, _ = fmt.Fprintf(out, "%s-%s ", version, platform)
+ } else {
+ // VERSION only
+ _, _ = fmt.Fprintf(out, "%s ", version)
+ }
+}
+
+func makePackageVersionDependency(ctx *context.Context, version *packages_model.PackageVersion, c *cache.EphemeralCache) (string, error) {
// format: VERSION[-PLATFORM] [DEPENDENCY[,DEPENDENCY,...]]|REQUIREMENT[,REQUIREMENT,...]
// DEPENDENCY: GEM:CONSTRAINT[&CONSTRAINT]
// REQUIREMENT: KEY:VALUE (always contains "checksum")
- pd, err := packages_model.GetPackageDescriptor(ctx, version)
+ pd, err := packages_model.GetPackageDescriptorWithCache(ctx, version, c)
if err != nil {
return "", err
}
@@ -388,8 +417,7 @@ func makePackageVersionDependency(ctx *context.Context, version *packages_model.
}
buf := &strings.Builder{}
- buf.WriteString(version.Version)
- buf.WriteByte(' ')
+ writePackageVersionForDependency(version.Version, metadata.Platform, buf)
for i, dep := range metadata.RuntimeDependencies {
sep := util.Iif(i == 0, "", ",")
writePackageVersionRequirements(fmt.Sprintf("%s%s:", sep, dep.Name), dep.Version, buf)
@@ -404,10 +432,10 @@ func makePackageVersionDependency(ctx *context.Context, version *packages_model.
return buf.String(), nil
}
-func makePackageInfo(ctx *context.Context, versions []*packages_model.PackageVersion) (string, error) {
+func makePackageInfo(ctx *context.Context, versions []*packages_model.PackageVersion, c *cache.EphemeralCache) (string, error) {
ret := "---\n"
for _, v := range versions {
- dep, err := makePackageVersionDependency(ctx, v)
+ dep, err := makePackageVersionDependency(ctx, v, c)
if err != nil {
return "", err
}
diff --git a/routers/api/packages/rubygems/rubygems_test.go b/routers/api/packages/rubygems/rubygems_test.go
new file mode 100644
index 00000000000..a07e12a7d3c
--- /dev/null
+++ b/routers/api/packages/rubygems/rubygems_test.go
@@ -0,0 +1,41 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package rubygems
+
+import (
+ "strings"
+ "testing"
+
+ rubygems_module "code.gitea.io/gitea/modules/packages/rubygems"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestWritePackageVersion(t *testing.T) {
+ buf := &strings.Builder{}
+
+ writePackageVersionForList(nil, "1.0", " ", buf)
+ assert.Equal(t, "1.0 ", buf.String())
+ buf.Reset()
+
+ writePackageVersionForList(&rubygems_module.Metadata{Platform: "ruby"}, "1.0", " ", buf)
+ assert.Equal(t, "1.0 ", buf.String())
+ buf.Reset()
+
+ writePackageVersionForList(&rubygems_module.Metadata{Platform: "linux"}, "1.0", " ", buf)
+ assert.Equal(t, "1.0_linux ", buf.String())
+ buf.Reset()
+
+ writePackageVersionForDependency("1.0", "", buf)
+ assert.Equal(t, "1.0 ", buf.String())
+ buf.Reset()
+
+ writePackageVersionForDependency("1.0", "ruby", buf)
+ assert.Equal(t, "1.0 ", buf.String())
+ buf.Reset()
+
+ writePackageVersionForDependency("1.0", "os", buf)
+ assert.Equal(t, "1.0-os ", buf.String())
+ buf.Reset()
+}
diff --git a/routers/api/packages/swift/swift.go b/routers/api/packages/swift/swift.go
index 47439c4c3bb..e1c3b368345 100644
--- a/routers/api/packages/swift/swift.go
+++ b/routers/api/packages/swift/swift.go
@@ -77,17 +77,14 @@ func apiError(ctx *context.Context, status int, obj any) {
Detail string `json:"detail"`
}
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- setResponseHeaders(ctx.Resp, &headers{
- Status: status,
- ContentType: "application/problem+json",
- })
- if err := json.NewEncoder(ctx.Resp).Encode(Problem{
- Status: status,
- Detail: message,
- }); err != nil {
- log.Error("JSON encode: %v", err)
- }
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ setResponseHeaders(ctx.Resp, &headers{
+ Status: status,
+ ContentType: "application/problem+json",
+ })
+ _ = json.NewEncoder(ctx.Resp).Encode(Problem{
+ Status: status,
+ Detail: message,
})
}
@@ -429,7 +426,7 @@ func DownloadPackageFile(ctx *context.Context) {
pf := pd.Files[0].File
- s, u, _, err := packages_service.GetPackageFileStream(ctx, pf)
+ s, u, _, err := packages_service.OpenFileForDownload(ctx, pf, ctx.Req.Method)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
diff --git a/routers/api/packages/vagrant/vagrant.go b/routers/api/packages/vagrant/vagrant.go
index 3afaa5de1f3..36fc41f5819 100644
--- a/routers/api/packages/vagrant/vagrant.go
+++ b/routers/api/packages/vagrant/vagrant.go
@@ -24,14 +24,13 @@ import (
)
func apiError(ctx *context.Context, status int, obj any) {
- helper.LogAndProcessError(ctx, status, obj, func(message string) {
- ctx.JSON(status, struct {
- Errors []string `json:"errors"`
- }{
- Errors: []string{
- message,
- },
- })
+ message := helper.ProcessErrorForUser(ctx, status, obj)
+ ctx.JSON(status, struct {
+ Errors []string `json:"errors"`
+ }{
+ Errors: []string{
+ message,
+ },
})
}
@@ -218,7 +217,7 @@ func UploadPackageFile(ctx *context.Context) {
}
func DownloadPackageFile(ctx *context.Context) {
- s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
+ s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion(
ctx,
&packages_service.PackageInfo{
Owner: ctx.Package.Owner,
@@ -229,6 +228,7 @@ func DownloadPackageFile(ctx *context.Context) {
&packages_service.PackageFileInfo{
Filename: ctx.PathParam("provider"),
},
+ ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
diff --git a/routers/api/v1/activitypub/person.go b/routers/api/v1/activitypub/person.go
index 0b0db011c6a..f2ba2baf7fa 100644
--- a/routers/api/v1/activitypub/person.go
+++ b/routers/api/v1/activitypub/person.go
@@ -52,7 +52,7 @@ func Person(ctx *context.APIContext) {
return
}
- person.URL = ap.IRI(ctx.ContextUser.HTMLURL())
+ person.URL = ap.IRI(ctx.ContextUser.HTMLURL(ctx))
person.Icon = ap.Image{
Type: ap.ImageType,
diff --git a/routers/api/v1/admin/action.go b/routers/api/v1/admin/action.go
new file mode 100644
index 00000000000..2fbb8e1a955
--- /dev/null
+++ b/routers/api/v1/admin/action.go
@@ -0,0 +1,93 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package admin
+
+import (
+ "code.gitea.io/gitea/routers/api/v1/shared"
+ "code.gitea.io/gitea/services/context"
+)
+
+// ListWorkflowJobs Lists all jobs
+func ListWorkflowJobs(ctx *context.APIContext) {
+ // swagger:operation GET /admin/actions/jobs admin listAdminWorkflowJobs
+ // ---
+ // summary: Lists all jobs
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJobsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ shared.ListJobs(ctx, 0, 0, 0)
+}
+
+// ListWorkflowRuns Lists all runs
+func ListWorkflowRuns(ctx *context.APIContext) {
+ // swagger:operation GET /admin/actions/runs admin listAdminWorkflowRuns
+ // ---
+ // summary: Lists all runs
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: event
+ // in: query
+ // description: workflow event name
+ // type: string
+ // required: false
+ // - name: branch
+ // in: query
+ // description: workflow branch
+ // type: string
+ // required: false
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: actor
+ // in: query
+ // description: triggered by user
+ // type: string
+ // required: false
+ // - name: head_sha
+ // in: query
+ // description: triggering sha of the workflow run
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowRunsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ shared.ListRuns(ctx, 0, 0)
+}
diff --git a/routers/api/v1/admin/org.go b/routers/api/v1/admin/org.go
index c7a4ae84192..c3473372f2f 100644
--- a/routers/api/v1/admin/org.go
+++ b/routers/api/v1/admin/org.go
@@ -29,7 +29,7 @@ func CreateOrg(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of the user that will own the created organization
+ // description: username of the user who will own the created organization
// type: string
// required: true
// - name: organization
diff --git a/routers/api/v1/admin/repo.go b/routers/api/v1/admin/repo.go
index c119d5390a2..12a78c9c4b7 100644
--- a/routers/api/v1/admin/repo.go
+++ b/routers/api/v1/admin/repo.go
@@ -22,7 +22,7 @@ func CreateRepo(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of the user. This user will own the created repository
+ // description: username of the user who will own the created repository
// type: string
// required: true
// - name: repository
diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go
index c29f4e46229..494bace5851 100644
--- a/routers/api/v1/admin/user.go
+++ b/routers/api/v1/admin/user.go
@@ -175,7 +175,7 @@ func EditUser(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to edit
+ // description: username of the user whose data is to be edited
// type: string
// required: true
// - name: body
@@ -240,7 +240,7 @@ func EditUser(ctx *context.APIContext) {
Description: optional.FromPtr(form.Description),
IsActive: optional.FromPtr(form.Active),
IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin),
- Visibility: optional.FromNonDefault(api.VisibilityModes[form.Visibility]),
+ Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility),
AllowGitHook: optional.FromPtr(form.AllowGitHook),
AllowImportLocal: optional.FromPtr(form.AllowImportLocal),
MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation),
@@ -272,7 +272,7 @@ func DeleteUser(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to delete
+ // description: username of the user to delete
// type: string
// required: true
// - name: purge
@@ -328,7 +328,7 @@ func CreatePublicKey(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user who is to receive a public key
// type: string
// required: true
// - name: key
@@ -358,7 +358,7 @@ func DeleteUserPublicKey(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose public key is to be deleted
// type: string
// required: true
// - name: id
@@ -405,7 +405,7 @@ func SearchUsers(ctx *context.APIContext) {
// format: int64
// - name: login_name
// in: query
- // description: user's login name to search for
+ // description: identifier of the user, provided by the external authenticator
// type: string
// - name: page
// in: query
@@ -456,7 +456,7 @@ func RenameUser(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: existing username of user
+ // description: current username of the user
// type: string
// required: true
// - name: body
diff --git a/routers/api/v1/admin/user_badge.go b/routers/api/v1/admin/user_badge.go
index 6d9665a72bf..ce32f455b02 100644
--- a/routers/api/v1/admin/user_badge.go
+++ b/routers/api/v1/admin/user_badge.go
@@ -22,7 +22,7 @@ func ListUserBadges(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose badges are to be listed
// type: string
// required: true
// responses:
@@ -53,7 +53,7 @@ func AddUserBadges(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user to whom a badge is to be added
// type: string
// required: true
// - name: body
@@ -87,7 +87,7 @@ func DeleteUserBadges(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose badge is to be deleted
// type: string
// required: true
// - name: body
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 95512cb9b63..e185a2147c5 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -72,13 +72,13 @@ import (
actions_model "code.gitea.io/gitea/models/actions"
auth_model "code.gitea.io/gitea/models/auth"
- "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/organization"
"code.gitea.io/gitea/models/perm"
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
@@ -145,7 +145,7 @@ func repoAssignment() func(ctx *context.APIContext) {
)
// Check if the user is the same as the repository owner.
- if ctx.IsSigned && ctx.Doer.LowerName == strings.ToLower(userName) {
+ if ctx.IsSigned && strings.EqualFold(ctx.Doer.LowerName, userName) {
owner = ctx.Doer
} else {
owner, err = user_model.GetUserByName(ctx, userName)
@@ -228,7 +228,7 @@ func repoAssignment() func(ctx *context.APIContext) {
}
}
- if !ctx.Repo.Permission.HasAnyUnitAccess() {
+ if !ctx.Repo.Permission.HasAnyUnitAccessOrPublicAccess() {
ctx.APIErrorNotFound()
return
}
@@ -455,15 +455,6 @@ func reqRepoWriter(unitTypes ...unit.Type) func(ctx *context.APIContext) {
}
}
-// reqRepoBranchWriter user should have a permission to write to a branch, or be a site admin
-func reqRepoBranchWriter(ctx *context.APIContext) {
- options, ok := web.GetForm(ctx).(api.FileOptionInterface)
- if !ok || (!ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, options.Branch()) && !ctx.IsUserSiteAdmin()) {
- ctx.APIError(http.StatusForbidden, "user should have a permission to write to this branch")
- return
- }
-}
-
// reqRepoReader user should have specific read permission or be a repo admin or a site admin
func reqRepoReader(unitType unit.Type) func(ctx *context.APIContext) {
return func(ctx *context.APIContext) {
@@ -744,9 +735,17 @@ func mustEnableWiki(ctx *context.APIContext) {
}
}
+// FIXME: for consistency, maybe most mustNotBeArchived checks should be replaced with mustEnableEditor
func mustNotBeArchived(ctx *context.APIContext) {
if ctx.Repo.Repository.IsArchived {
- ctx.APIError(http.StatusLocked, fmt.Errorf("%s is archived", ctx.Repo.Repository.LogString()))
+ ctx.APIError(http.StatusLocked, fmt.Errorf("%s is archived", ctx.Repo.Repository.FullName()))
+ return
+ }
+}
+
+func mustEnableEditor(ctx *context.APIContext) {
+ if !ctx.Repo.Repository.CanEnableEditor() {
+ ctx.APIError(http.StatusLocked, fmt.Errorf("%s is not allowed to edit", ctx.Repo.Repository.FullName()))
return
}
}
@@ -781,7 +780,7 @@ func buildAuthGroup() *auth.Group {
group.Add(&auth.ReverseProxy{})
}
- if setting.IsWindows && auth_model.IsSSPIEnabled(db.DefaultContext) {
+ if setting.IsWindows && auth_model.IsSSPIEnabled(graceful.GetManager().ShutdownContext()) {
group.Add(&auth.SSPI{}) // it MUST be the last, see the comment of SSPI
}
@@ -942,6 +941,8 @@ func Routes() *web.Router {
m.Get("/{runner_id}", reqToken(), reqChecker, act.GetRunner)
m.Delete("/{runner_id}", reqToken(), reqChecker, act.DeleteRunner)
})
+ m.Get("/runs", reqToken(), reqChecker, act.ListWorkflowRuns)
+ m.Get("/jobs", reqToken(), reqChecker, act.ListWorkflowJobs)
})
}
@@ -971,7 +972,8 @@ func Routes() *web.Router {
// Misc (public accessible)
m.Group("", func() {
m.Get("/version", misc.Version)
- m.Get("/signing-key.gpg", misc.SigningKey)
+ m.Get("/signing-key.gpg", misc.SigningKeyGPG)
+ m.Get("/signing-key.pub", misc.SigningKeySSH)
m.Post("/markup", reqToken(), bind(api.MarkupOption{}), misc.Markup)
m.Post("/markdown", reqToken(), bind(api.MarkdownOption{}), misc.Markdown)
m.Post("/markdown/raw", reqToken(), misc.MarkdownRaw)
@@ -1077,6 +1079,9 @@ func Routes() *web.Router {
m.Get("/{runner_id}", reqToken(), user.GetRunner)
m.Delete("/{runner_id}", reqToken(), user.DeleteRunner)
})
+
+ m.Get("/runs", reqToken(), user.ListWorkflowRuns)
+ m.Get("/jobs", reqToken(), user.ListWorkflowJobs)
})
m.Get("/followers", user.ListMyFollowers)
@@ -1201,6 +1206,7 @@ func Routes() *web.Router {
}, context.ReferencesGitRepo(), reqToken(), reqRepoReader(unit.TypeActions))
m.Group("/actions/jobs", func() {
+ m.Get("/{job_id}", repo.GetWorkflowJob)
m.Get("/{job_id}/logs", repo.DownloadActionsRunJobLogs)
}, reqToken(), reqRepoReader(unit.TypeActions))
@@ -1241,7 +1247,7 @@ func Routes() *web.Router {
}, reqToken())
m.Get("/raw/*", context.ReferencesGitRepo(), context.RepoRefForAPI, reqRepoReader(unit.TypeCode), repo.GetRawFile)
m.Get("/media/*", context.ReferencesGitRepo(), context.RepoRefForAPI, reqRepoReader(unit.TypeCode), repo.GetRawFileOrLFS)
- m.Get("/archive/*", reqRepoReader(unit.TypeCode), repo.GetArchive)
+ m.Methods("HEAD,GET", "/archive/*", reqRepoReader(unit.TypeCode), repo.GetArchive)
m.Combo("/forks").Get(repo.ListForks).
Post(reqToken(), reqRepoReader(unit.TypeCode), bind(api.CreateForkOption{}), repo.CreateFork)
m.Post("/merge-upstream", reqToken(), mustNotBeArchived, reqRepoWriter(unit.TypeCode), bind(api.MergeUpstreamRequest{}), repo.MergeUpstream)
@@ -1279,9 +1285,13 @@ func Routes() *web.Router {
}, reqToken(), reqAdmin())
m.Group("/actions", func() {
m.Get("/tasks", repo.ListActionTasks)
- m.Group("/runs/{run}", func() {
- m.Get("/artifacts", repo.GetArtifactsOfRun)
- m.Delete("", reqToken(), reqRepoWriter(unit.TypeActions), repo.DeleteActionRun)
+ m.Group("/runs", func() {
+ m.Group("/{run}", func() {
+ m.Get("", repo.GetWorkflowRun)
+ m.Delete("", reqToken(), reqRepoWriter(unit.TypeActions), repo.DeleteActionRun)
+ m.Get("/jobs", repo.ListWorkflowRunJobs)
+ m.Get("/artifacts", repo.GetArtifactsOfRun)
+ })
})
m.Get("/artifacts", repo.GetArtifacts)
m.Group("/artifacts/{artifact_id}", func() {
@@ -1413,21 +1423,29 @@ func Routes() *web.Router {
m.Get("/tags/{sha}", repo.GetAnnotatedTag)
m.Get("/notes/{sha}", repo.GetNote)
}, context.ReferencesGitRepo(true), reqRepoReader(unit.TypeCode))
- m.Post("/diffpatch", reqRepoWriter(unit.TypeCode), reqToken(), bind(api.ApplyDiffPatchFileOptions{}), mustNotBeArchived, repo.ApplyDiffPatch)
m.Group("/contents", func() {
m.Get("", repo.GetContentsList)
m.Get("/*", repo.GetContents)
- m.Post("", reqToken(), bind(api.ChangeFilesOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.ChangeFiles)
- m.Group("/*", func() {
- m.Post("", bind(api.CreateFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.CreateFile)
- m.Put("", bind(api.UpdateFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.UpdateFile)
- m.Delete("", bind(api.DeleteFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.DeleteFile)
- }, reqToken())
+ m.Group("", func() {
+ // "change file" operations, need permission to write to the target branch provided by the form
+ m.Post("", bind(api.ChangeFilesOptions{}), repo.ReqChangeRepoFileOptionsAndCheck, repo.ChangeFiles)
+ m.Group("/*", func() {
+ m.Post("", bind(api.CreateFileOptions{}), repo.ReqChangeRepoFileOptionsAndCheck, repo.CreateFile)
+ m.Put("", bind(api.UpdateFileOptions{}), repo.ReqChangeRepoFileOptionsAndCheck, repo.UpdateFile)
+ m.Delete("", bind(api.DeleteFileOptions{}), repo.ReqChangeRepoFileOptionsAndCheck, repo.DeleteFile)
+ })
+ m.Post("/diffpatch", bind(api.ApplyDiffPatchFileOptions{}), repo.ReqChangeRepoFileOptionsAndCheck, repo.ApplyDiffPatch)
+ }, mustEnableEditor, reqToken())
+ }, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo())
+ m.Group("/contents-ext", func() {
+ m.Get("", repo.GetContentsExt)
+ m.Get("/*", repo.GetContentsExt)
}, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo())
m.Combo("/file-contents", reqRepoReader(unit.TypeCode), context.ReferencesGitRepo()).
Get(repo.GetFileContentsGet).
- Post(bind(api.GetFilesOptions{}), repo.GetFileContentsPost) // POST method requires "write" permission, so we also support "GET" method above
- m.Get("/signing-key.gpg", misc.SigningKey)
+ Post(bind(api.GetFilesOptions{}), repo.GetFileContentsPost) // the POST method requires "write" permission, so we also support "GET" method above
+ m.Get("/signing-key.gpg", misc.SigningKeyGPG)
+ m.Get("/signing-key.pub", misc.SigningKeySSH)
m.Group("/topics", func() {
m.Combo("").Get(repo.ListTopics).
Put(reqToken(), reqAdmin(), bind(api.RepoTopicOptions{}), repo.UpdateTopics)
@@ -1448,7 +1466,7 @@ func Routes() *web.Router {
m.Delete("", repo.DeleteAvatar)
}, reqAdmin(), reqToken())
- m.Get("/{ball_type:tarball|zipball|bundle}/*", reqRepoReader(unit.TypeCode), repo.DownloadArchive)
+ m.Methods("HEAD,GET", "/{ball_type:tarball|zipball|bundle}/*", reqRepoReader(unit.TypeCode), repo.DownloadArchive)
}, repoAssignment(), checkTokenPublicOnly())
}, tokenRequiresScopes(auth_model.AccessTokenScopeCategoryRepository))
@@ -1732,11 +1750,15 @@ func Routes() *web.Router {
Patch(bind(api.EditHookOption{}), admin.EditHook).
Delete(admin.DeleteHook)
})
- m.Group("/actions/runners", func() {
- m.Get("", admin.ListRunners)
- m.Post("/registration-token", admin.CreateRegistrationToken)
- m.Get("/{runner_id}", admin.GetRunner)
- m.Delete("/{runner_id}", admin.DeleteRunner)
+ m.Group("/actions", func() {
+ m.Group("/runners", func() {
+ m.Get("", admin.ListRunners)
+ m.Post("/registration-token", admin.CreateRegistrationToken)
+ m.Get("/{runner_id}", admin.GetRunner)
+ m.Delete("/{runner_id}", admin.DeleteRunner)
+ })
+ m.Get("/runs", admin.ListWorkflowRuns)
+ m.Get("/jobs", admin.ListWorkflowJobs)
})
m.Group("/runners", func() {
m.Get("/registration-token", admin.GetRegistrationToken)
diff --git a/routers/api/v1/misc/markup.go b/routers/api/v1/misc/markup.go
index 0cd4b8c5c5a..909310b4c86 100644
--- a/routers/api/v1/misc/markup.go
+++ b/routers/api/v1/misc/markup.go
@@ -42,7 +42,7 @@ func Markup(ctx *context.APIContext) {
return
}
- mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck
+ mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck // form.Wiki is deprecated
common.RenderMarkup(ctx.Base, ctx.Repo, mode, form.Text, form.Context, form.FilePath)
}
@@ -73,7 +73,7 @@ func Markdown(ctx *context.APIContext) {
return
}
- mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck
+ mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck // form.Wiki is deprecated
common.RenderMarkup(ctx.Base, ctx.Repo, mode, form.Text, form.Context, "")
}
diff --git a/routers/api/v1/misc/signing.go b/routers/api/v1/misc/signing.go
index 667396e39ca..db70e04b8f6 100644
--- a/routers/api/v1/misc/signing.go
+++ b/routers/api/v1/misc/signing.go
@@ -4,14 +4,35 @@
package misc
import (
- "fmt"
-
+ "code.gitea.io/gitea/modules/git"
asymkey_service "code.gitea.io/gitea/services/asymkey"
"code.gitea.io/gitea/services/context"
)
-// SigningKey returns the public key of the default signing key if it exists
-func SigningKey(ctx *context.APIContext) {
+func getSigningKey(ctx *context.APIContext, expectedFormat string) {
+ // if the handler is in the repo's route group, get the repo's signing key
+ // otherwise, get the global signing key
+ path := ""
+ if ctx.Repo != nil && ctx.Repo.Repository != nil {
+ path = ctx.Repo.Repository.RepoPath()
+ }
+ content, format, err := asymkey_service.PublicSigningKey(ctx, path)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ if format == "" {
+ ctx.APIErrorNotFound("no signing key")
+ return
+ } else if format != expectedFormat {
+ ctx.APIErrorNotFound("signing key format is " + format)
+ return
+ }
+ _, _ = ctx.Write([]byte(content))
+}
+
+// SigningKeyGPG returns the public key of the default signing key if it exists
+func SigningKeyGPG(ctx *context.APIContext) {
// swagger:operation GET /signing-key.gpg miscellaneous getSigningKey
// ---
// summary: Get default signing-key.gpg
@@ -44,19 +65,42 @@ func SigningKey(ctx *context.APIContext) {
// description: "GPG armored public key"
// schema:
// type: string
-
- path := ""
- if ctx.Repo != nil && ctx.Repo.Repository != nil {
- path = ctx.Repo.Repository.RepoPath()
- }
-
- content, err := asymkey_service.PublicSigningKey(ctx, path)
- if err != nil {
- ctx.APIErrorInternal(err)
- return
- }
- _, err = ctx.Write([]byte(content))
- if err != nil {
- ctx.APIErrorInternal(fmt.Errorf("Error writing key content %w", err))
- }
+ getSigningKey(ctx, git.SigningKeyFormatOpenPGP)
+}
+
+// SigningKeySSH returns the public key of the default signing key if it exists
+func SigningKeySSH(ctx *context.APIContext) {
+ // swagger:operation GET /signing-key.pub miscellaneous getSigningKeySSH
+ // ---
+ // summary: Get default signing-key.pub
+ // produces:
+ // - text/plain
+ // responses:
+ // "200":
+ // description: "ssh public key"
+ // schema:
+ // type: string
+
+ // swagger:operation GET /repos/{owner}/{repo}/signing-key.pub repository repoSigningKeySSH
+ // ---
+ // summary: Get signing-key.pub for given repository
+ // produces:
+ // - text/plain
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repo
+ // type: string
+ // required: true
+ // responses:
+ // "200":
+ // description: "ssh public key"
+ // schema:
+ // type: string
+ getSigningKey(ctx, git.SigningKeyFormatSSH)
}
diff --git a/routers/api/v1/org/action.go b/routers/api/v1/org/action.go
index 5cd3ea07f4d..3ae5e605854 100644
--- a/routers/api/v1/org/action.go
+++ b/routers/api/v1/org/action.go
@@ -570,6 +570,96 @@ func (Action) DeleteRunner(ctx *context.APIContext) {
shared.DeleteRunner(ctx, ctx.Org.Organization.ID, 0, ctx.PathParamInt64("runner_id"))
}
+func (Action) ListWorkflowJobs(ctx *context.APIContext) {
+ // swagger:operation GET /orgs/{org}/actions/jobs organization getOrgWorkflowJobs
+ // ---
+ // summary: Get org-level workflow jobs
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: org
+ // in: path
+ // description: name of the organization
+ // type: string
+ // required: true
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJobsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+ shared.ListJobs(ctx, ctx.Org.Organization.ID, 0, 0)
+}
+
+func (Action) ListWorkflowRuns(ctx *context.APIContext) {
+ // swagger:operation GET /orgs/{org}/actions/runs organization getOrgWorkflowRuns
+ // ---
+ // summary: Get org-level workflow runs
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: org
+ // in: path
+ // description: name of the organization
+ // type: string
+ // required: true
+ // - name: event
+ // in: query
+ // description: workflow event name
+ // type: string
+ // required: false
+ // - name: branch
+ // in: query
+ // description: workflow branch
+ // type: string
+ // required: false
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: actor
+ // in: query
+ // description: triggered by user
+ // type: string
+ // required: false
+ // - name: head_sha
+ // in: query
+ // description: triggering sha of the workflow run
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowRunsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+ shared.ListRuns(ctx, ctx.Org.Organization.ID, 0)
+}
+
var _ actions_service.API = new(Action)
// Action implements actions_service.API
diff --git a/routers/api/v1/org/block.go b/routers/api/v1/org/block.go
index 69a5222a20a..6b2f3dc615e 100644
--- a/routers/api/v1/org/block.go
+++ b/routers/api/v1/org/block.go
@@ -47,7 +47,7 @@ func CheckUserBlock(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: user to check
+ // description: username of the user to check
// type: string
// required: true
// responses:
@@ -71,7 +71,7 @@ func BlockUser(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: user to block
+ // description: username of the user to block
// type: string
// required: true
// - name: note
@@ -101,7 +101,7 @@ func UnblockUser(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: user to unblock
+ // description: username of the user to unblock
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/org/member.go b/routers/api/v1/org/member.go
index a1875a7886a..1c12b0cc944 100644
--- a/routers/api/v1/org/member.go
+++ b/routers/api/v1/org/member.go
@@ -133,7 +133,7 @@ func IsMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user to check for an organization membership
// type: string
// required: true
// responses:
@@ -186,7 +186,7 @@ func IsPublicMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user to check for a public organization membership
// type: string
// required: true
// responses:
@@ -240,7 +240,7 @@ func PublicizeMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user whose membership is to be publicized
// type: string
// required: true
// responses:
@@ -282,7 +282,7 @@ func ConcealMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user whose membership is to be concealed
// type: string
// required: true
// responses:
@@ -324,7 +324,7 @@ func DeleteMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user
+ // description: username of the user to remove from the organization
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go
index adb117c4e8e..cd676860658 100644
--- a/routers/api/v1/org/org.go
+++ b/routers/api/v1/org/org.go
@@ -82,7 +82,7 @@ func ListUserOrgs(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose organizations are to be listed
// type: string
// required: true
// - name: page
@@ -112,7 +112,7 @@ func GetUserOrgsPermissions(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose permissions are to be obtained
// type: string
// required: true
// - name: org
@@ -391,7 +391,7 @@ func Edit(ctx *context.APIContext) {
Description: optional.Some(form.Description),
Website: optional.Some(form.Website),
Location: optional.Some(form.Location),
- Visibility: optional.FromNonDefault(api.VisibilityModes[form.Visibility]),
+ Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility),
RepoAdminChangeTeamAccess: optional.FromPtr(form.RepoAdminChangeTeamAccess),
}
if err := user_service.UpdateUser(ctx, ctx.Org.Organization.AsUser(), opts); err != nil {
diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go
index 71c21f2ddea..1a1710750a2 100644
--- a/routers/api/v1/org/team.go
+++ b/routers/api/v1/org/team.go
@@ -426,7 +426,7 @@ func GetTeamMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the member to list
+ // description: username of the user whose data is to be listed
// type: string
// required: true
// responses:
@@ -467,7 +467,7 @@ func AddTeamMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user to add
+ // description: username of the user to add to a team
// type: string
// required: true
// responses:
@@ -509,7 +509,7 @@ func RemoveTeamMember(ctx *context.APIContext) {
// required: true
// - name: username
// in: path
- // description: username of the user to remove
+ // description: username of the user to remove from a team
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/repo/action.go b/routers/api/v1/repo/action.go
index 3f64e2477d7..25aabe6dd27 100644
--- a/routers/api/v1/repo/action.go
+++ b/routers/api/v1/repo/action.go
@@ -46,7 +46,7 @@ func (Action) ListActionsSecrets(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: owner of the repository
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -216,7 +216,7 @@ func (Action) GetVariable(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -270,7 +270,7 @@ func (Action) DeleteVariable(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -319,7 +319,7 @@ func (Action) CreateVariable(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -386,7 +386,7 @@ func (Action) UpdateVariable(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -458,7 +458,7 @@ func (Action) ListVariables(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -650,6 +650,114 @@ func (Action) DeleteRunner(ctx *context.APIContext) {
shared.DeleteRunner(ctx, 0, ctx.Repo.Repository.ID, ctx.PathParamInt64("runner_id"))
}
+// GetWorkflowRunJobs Lists all jobs for a workflow run.
+func (Action) ListWorkflowJobs(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/actions/jobs repository listWorkflowJobs
+ // ---
+ // summary: Lists all jobs for a repository
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repository
+ // type: string
+ // required: true
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJobsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ repoID := ctx.Repo.Repository.ID
+
+ shared.ListJobs(ctx, 0, repoID, 0)
+}
+
+// ListWorkflowRuns Lists all runs for a repository run.
+func (Action) ListWorkflowRuns(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/actions/runs repository getWorkflowRuns
+ // ---
+ // summary: Lists all runs for a repository run
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repository
+ // type: string
+ // required: true
+ // - name: event
+ // in: query
+ // description: workflow event name
+ // type: string
+ // required: false
+ // - name: branch
+ // in: query
+ // description: workflow branch
+ // type: string
+ // required: false
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: actor
+ // in: query
+ // description: triggered by user
+ // type: string
+ // required: false
+ // - name: head_sha
+ // in: query
+ // description: triggering sha of the workflow run
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowRunsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ repoID := ctx.Repo.Repository.ID
+
+ shared.ListRuns(ctx, 0, repoID)
+}
+
var _ actions_service.API = new(Action)
// Action implements actions_service.API
@@ -756,7 +864,7 @@ func ActionsListRepositoryWorkflows(ctx *context.APIContext) {
// "500":
// "$ref": "#/responses/error"
- workflows, err := actions_service.ListActionWorkflows(ctx)
+ workflows, err := convert.ListActionWorkflows(ctx, ctx.Repo.GitRepo, ctx.Repo.Repository)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -802,7 +910,7 @@ func ActionsGetWorkflow(ctx *context.APIContext) {
// "$ref": "#/responses/error"
workflowID := ctx.PathParam("workflow_id")
- workflow, err := actions_service.GetActionWorkflow(ctx, workflowID)
+ workflow, err := convert.GetActionWorkflow(ctx, ctx.Repo.GitRepo, ctx.Repo.Repository, workflowID)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
ctx.APIError(http.StatusNotFound, err)
@@ -992,7 +1100,168 @@ func ActionsEnableWorkflow(ctx *context.APIContext) {
ctx.Status(http.StatusNoContent)
}
-// GetArtifacts Lists all artifacts for a repository.
+// GetWorkflowRun Gets a specific workflow run.
+func GetWorkflowRun(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/actions/runs/{run} repository GetWorkflowRun
+ // ---
+ // summary: Gets a specific workflow run
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repository
+ // type: string
+ // required: true
+ // - name: run
+ // in: path
+ // description: id of the run
+ // type: string
+ // required: true
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowRun"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ runID := ctx.PathParamInt64("run")
+ job, has, err := db.GetByID[actions_model.ActionRun](ctx, runID)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+
+ if !has || job.RepoID != ctx.Repo.Repository.ID {
+ ctx.APIErrorNotFound(util.ErrNotExist)
+ return
+ }
+
+ convertedRun, err := convert.ToActionWorkflowRun(ctx, ctx.Repo.Repository, job)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ ctx.JSON(http.StatusOK, convertedRun)
+}
+
+// ListWorkflowRunJobs Lists all jobs for a workflow run.
+func ListWorkflowRunJobs(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/actions/runs/{run}/jobs repository listWorkflowRunJobs
+ // ---
+ // summary: Lists all jobs for a workflow run
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repository
+ // type: string
+ // required: true
+ // - name: run
+ // in: path
+ // description: runid of the workflow run
+ // type: integer
+ // required: true
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJobsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ repoID := ctx.Repo.Repository.ID
+
+ runID := ctx.PathParamInt64("run")
+
+ // Avoid the list all jobs functionality for this api route to be used with a runID == 0.
+ if runID <= 0 {
+ ctx.APIError(http.StatusBadRequest, util.NewInvalidArgumentErrorf("runID must be a positive integer"))
+ return
+ }
+
+ // runID is used as an additional filter next to repoID to ensure that we only list jobs for the specified repoID and runID.
+ // no additional checks for runID are needed here
+ shared.ListJobs(ctx, 0, repoID, runID)
+}
+
+// GetWorkflowJob Gets a specific workflow job for a workflow run.
+func GetWorkflowJob(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/actions/jobs/{job_id} repository getWorkflowJob
+ // ---
+ // summary: Gets a specific workflow job for a workflow run
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repository
+ // type: string
+ // required: true
+ // - name: job_id
+ // in: path
+ // description: id of the job
+ // type: string
+ // required: true
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJob"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ jobID := ctx.PathParamInt64("job_id")
+ job, has, err := db.GetByID[actions_model.ActionRunJob](ctx, jobID)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+
+ if !has || job.RepoID != ctx.Repo.Repository.ID {
+ ctx.APIErrorNotFound(util.ErrNotExist)
+ return
+ }
+
+ convertedWorkflowJob, err := convert.ToActionWorkflowJob(ctx, ctx.Repo.Repository, nil, job)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ ctx.JSON(http.StatusOK, convertedWorkflowJob)
+}
+
+// GetArtifactsOfRun Lists all artifacts for a repository.
func GetArtifactsOfRun(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/actions/runs/{run}/artifacts repository getArtifactsOfRun
// ---
@@ -1002,7 +1271,7 @@ func GetArtifactsOfRun(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1071,7 +1340,7 @@ func DeleteActionRun(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1095,7 +1364,7 @@ func DeleteActionRun(ctx *context.APIContext) {
runID := ctx.PathParamInt64("run")
run, err := actions_model.GetRunByRepoAndID(ctx, ctx.Repo.Repository.ID, runID)
if errors.Is(err, util.ErrNotExist) {
- ctx.APIError(http.StatusNotFound, err)
+ ctx.APIErrorNotFound(err)
return
} else if err != nil {
ctx.APIErrorInternal(err)
@@ -1123,7 +1392,7 @@ func GetArtifacts(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1184,7 +1453,7 @@ func GetArtifact(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1233,7 +1502,7 @@ func DeleteArtifact(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1300,7 +1569,7 @@ func DownloadArtifact(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
diff --git a/routers/api/v1/repo/actions_run.go b/routers/api/v1/repo/actions_run.go
index c6d18af6aa7..a12a6fdd6d7 100644
--- a/routers/api/v1/repo/actions_run.go
+++ b/routers/api/v1/repo/actions_run.go
@@ -21,7 +21,7 @@ func DownloadActionsRunJobLogs(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: name of the owner
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
diff --git a/routers/api/v1/repo/blob.go b/routers/api/v1/repo/blob.go
index d1cb72f5f1f..9a17fc1bbfd 100644
--- a/routers/api/v1/repo/blob.go
+++ b/routers/api/v1/repo/blob.go
@@ -47,7 +47,7 @@ func GetBlob(ctx *context.APIContext) {
return
}
- if blob, err := files_service.GetBlobBySHA(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, sha); err != nil {
+ if blob, err := files_service.GetBlobBySHA(ctx.Repo.Repository, ctx.Repo.GitRepo, sha); err != nil {
ctx.APIError(http.StatusBadRequest, err)
} else {
ctx.JSON(http.StatusOK, blob)
diff --git a/routers/api/v1/repo/branch.go b/routers/api/v1/repo/branch.go
index fe82550fdda..9af958a5b7b 100644
--- a/routers/api/v1/repo/branch.go
+++ b/routers/api/v1/repo/branch.go
@@ -224,9 +224,9 @@ func CreateBranch(ctx *context.APIContext) {
ctx.APIErrorInternal(err)
return
}
- } else if len(opt.OldBranchName) > 0 { //nolint
- if gitrepo.IsBranchExist(ctx, ctx.Repo.Repository, opt.OldBranchName) { //nolint
- oldCommit, err = ctx.Repo.GitRepo.GetBranchCommit(opt.OldBranchName) //nolint
+ } else if len(opt.OldBranchName) > 0 { //nolint:staticcheck // deprecated field
+ if gitrepo.IsBranchExist(ctx, ctx.Repo.Repository, opt.OldBranchName) { //nolint:staticcheck // deprecated field
+ oldCommit, err = ctx.Repo.GitRepo.GetBranchCommit(opt.OldBranchName) //nolint:staticcheck // deprecated field
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -579,7 +579,7 @@ func CreateBranchProtection(ctx *context.APIContext) {
ruleName := form.RuleName
if ruleName == "" {
- ruleName = form.BranchName //nolint
+ ruleName = form.BranchName //nolint:staticcheck // deprecated field
}
if len(ruleName) == 0 {
ctx.APIError(http.StatusBadRequest, "both rule_name and branch_name are empty")
@@ -1181,7 +1181,7 @@ func MergeUpstream(ctx *context.APIContext) {
// "404":
// "$ref": "#/responses/notFound"
form := web.GetForm(ctx).(*api.MergeUpstreamRequest)
- mergeStyle, err := repo_service.MergeUpstream(ctx, ctx.Doer, ctx.Repo.Repository, form.Branch)
+ mergeStyle, err := repo_service.MergeUpstream(ctx, ctx.Doer, ctx.Repo.Repository, form.Branch, form.FfOnly)
if err != nil {
if errors.Is(err, util.ErrInvalidArgument) {
ctx.APIError(http.StatusBadRequest, err)
diff --git a/routers/api/v1/repo/collaborators.go b/routers/api/v1/repo/collaborators.go
index d1652c1d513..eed9c19fe14 100644
--- a/routers/api/v1/repo/collaborators.go
+++ b/routers/api/v1/repo/collaborators.go
@@ -93,7 +93,7 @@ func IsCollaborator(ctx *context.APIContext) {
// required: true
// - name: collaborator
// in: path
- // description: username of the collaborator
+ // description: username of the user to check for being a collaborator
// type: string
// required: true
// responses:
@@ -145,7 +145,7 @@ func AddOrUpdateCollaborator(ctx *context.APIContext) {
// required: true
// - name: collaborator
// in: path
- // description: username of the collaborator to add
+ // description: username of the user to add or update as a collaborator
// type: string
// required: true
// - name: body
@@ -264,7 +264,7 @@ func GetRepoPermissions(ctx *context.APIContext) {
// required: true
// - name: collaborator
// in: path
- // description: username of the collaborator
+ // description: username of the collaborator whose permissions are to be obtained
// type: string
// required: true
// responses:
@@ -276,7 +276,7 @@ func GetRepoPermissions(ctx *context.APIContext) {
// "$ref": "#/responses/forbidden"
collaboratorUsername := ctx.PathParam("collaborator")
- if !ctx.Doer.IsAdmin && ctx.Doer.LowerName != strings.ToLower(collaboratorUsername) && !ctx.IsUserRepoAdmin() {
+ if !ctx.Doer.IsAdmin && !strings.EqualFold(ctx.Doer.LowerName, collaboratorUsername) && !ctx.IsUserRepoAdmin() {
ctx.APIError(http.StatusForbidden, "Only admins can query all permissions, repo admins can query all repo permissions, collaborators can query only their own")
return
}
diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go
index f40d39a2517..a85dda79d00 100644
--- a/routers/api/v1/repo/file.go
+++ b/routers/api/v1/repo/file.go
@@ -62,7 +62,7 @@ func GetRawFile(ctx *context.APIContext) {
// required: true
// - name: ref
// in: query
- // description: "The name of the commit/branch/tag. Default the repository’s default branch"
+ // description: "The name of the commit/branch/tag. Default to the repository’s default branch"
// type: string
// required: false
// responses:
@@ -115,7 +115,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
// required: true
// - name: ref
// in: query
- // description: "The name of the commit/branch/tag. Default the repository’s default branch"
+ // description: "The name of the commit/branch/tag. Default to the repository’s default branch"
// type: string
// required: false
// responses:
@@ -139,27 +139,27 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
ctx.RespHeader().Set(giteaObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry)))
// LFS Pointer files are at most 1024 bytes - so any blob greater than 1024 bytes cannot be an LFS file
- if blob.Size() > 1024 {
+ if blob.Size() > lfs.MetaFileMaxSize {
// First handle caching for the blob
if httpcache.HandleGenericETagTimeCache(ctx.Req, ctx.Resp, `"`+blob.ID.String()+`"`, lastModified) {
return
}
- // OK not cached - serve!
+ // If not cached - serve!
if err := common.ServeBlob(ctx.Base, ctx.Repo.Repository, ctx.Repo.TreePath, blob, lastModified); err != nil {
ctx.APIErrorInternal(err)
}
return
}
- // OK, now the blob is known to have at most 1024 bytes we can simply read this in one go (This saves reading it twice)
+ // OK, now the blob is known to have at most 1024 (lfs pointer max size) bytes,
+ // we can simply read this in one go (This saves reading it twice)
dataRc, err := blob.DataAsync()
if err != nil {
ctx.APIErrorInternal(err)
return
}
- // FIXME: code from #19689, what if the file is large ... OOM ...
buf, err := io.ReadAll(dataRc)
if err != nil {
_ = dataRc.Close()
@@ -181,7 +181,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
return
}
- // OK not cached - serve!
+ // If not cached - serve!
common.ServeContentByReader(ctx.Base, ctx.Repo.TreePath, blob.Size(), bytes.NewReader(buf))
return
}
@@ -210,7 +210,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
if setting.LFS.Storage.ServeDirect() {
// If we have a signed url (S3, object storage), redirect to this directly.
- u, err := storage.LFS.URL(pointer.RelativePath(), blob.Name(), nil)
+ u, err := storage.LFS.URL(pointer.RelativePath(), blob.Name(), ctx.Req.Method, nil)
if u != nil && err == nil {
ctx.Redirect(u.String())
return
@@ -331,7 +331,7 @@ func download(ctx *context.APIContext, archiveName string, archiver *repo_model.
rPath := archiver.RelativePath()
if setting.RepoArchive.Storage.ServeDirect() {
// If we have a signed url (S3, object storage), redirect to this directly.
- u, err := storage.RepoArchives.URL(rPath, downloadName, nil)
+ u, err := storage.RepoArchives.URL(rPath, downloadName, ctx.Req.Method, nil)
if u != nil && err == nil {
ctx.Redirect(u.String())
return
@@ -405,13 +405,6 @@ func GetEditorconfig(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, def)
}
-// canWriteFiles returns true if repository is editable and user has proper access level.
-func canWriteFiles(ctx *context.APIContext, branch string) bool {
- return ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, branch) &&
- !ctx.Repo.Repository.IsMirror &&
- !ctx.Repo.Repository.IsArchived
-}
-
func base64Reader(s string) (io.ReadSeeker, error) {
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
@@ -420,6 +413,45 @@ func base64Reader(s string) (io.ReadSeeker, error) {
return bytes.NewReader(b), nil
}
+func ReqChangeRepoFileOptionsAndCheck(ctx *context.APIContext) {
+ commonOpts := web.GetForm(ctx).(api.FileOptionsInterface).GetFileOptions()
+ commonOpts.BranchName = util.IfZero(commonOpts.BranchName, ctx.Repo.Repository.DefaultBranch)
+ commonOpts.NewBranchName = util.IfZero(commonOpts.NewBranchName, commonOpts.BranchName)
+ if !ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, commonOpts.NewBranchName) && !ctx.IsUserSiteAdmin() {
+ ctx.APIError(http.StatusForbidden, "user should have a permission to write to the target branch")
+ return
+ }
+ changeFileOpts := &files_service.ChangeRepoFilesOptions{
+ Message: commonOpts.Message,
+ OldBranch: commonOpts.BranchName,
+ NewBranch: commonOpts.NewBranchName,
+ Committer: &files_service.IdentityOptions{
+ GitUserName: commonOpts.Committer.Name,
+ GitUserEmail: commonOpts.Committer.Email,
+ },
+ Author: &files_service.IdentityOptions{
+ GitUserName: commonOpts.Author.Name,
+ GitUserEmail: commonOpts.Author.Email,
+ },
+ Dates: &files_service.CommitDateOptions{
+ Author: commonOpts.Dates.Author,
+ Committer: commonOpts.Dates.Committer,
+ },
+ Signoff: commonOpts.Signoff,
+ }
+ if commonOpts.Dates.Author.IsZero() {
+ commonOpts.Dates.Author = time.Now()
+ }
+ if commonOpts.Dates.Committer.IsZero() {
+ commonOpts.Dates.Committer = time.Now()
+ }
+ ctx.Data["__APIChangeRepoFilesOptions"] = changeFileOpts
+}
+
+func getAPIChangeRepoFileOptions[T api.FileOptionsInterface](ctx *context.APIContext) (apiOpts T, opts *files_service.ChangeRepoFilesOptions) {
+ return web.GetForm(ctx).(T), ctx.Data["__APIChangeRepoFilesOptions"].(*files_service.ChangeRepoFilesOptions)
+}
+
// ChangeFiles handles API call for modifying multiple files
func ChangeFiles(ctx *context.APIContext) {
// swagger:operation POST /repos/{owner}/{repo}/contents repository repoChangeFiles
@@ -456,20 +488,18 @@ func ChangeFiles(ctx *context.APIContext) {
// "$ref": "#/responses/error"
// "423":
// "$ref": "#/responses/repoArchivedError"
-
- apiOpts := web.GetForm(ctx).(*api.ChangeFilesOptions)
-
- if apiOpts.BranchName == "" {
- apiOpts.BranchName = ctx.Repo.Repository.DefaultBranch
+ apiOpts, opts := getAPIChangeRepoFileOptions[*api.ChangeFilesOptions](ctx)
+ if ctx.Written() {
+ return
}
-
- var files []*files_service.ChangeRepoFile
for _, file := range apiOpts.Files {
contentReader, err := base64Reader(file.ContentBase64)
if err != nil {
ctx.APIError(http.StatusUnprocessableEntity, err)
return
}
+ // FIXME: ChangeFileOperation.SHA is NOT required for update or delete if last commit is provided in the options
+ // But the LastCommitID is not provided in the API options, need to fully fix them in API
changeRepoFile := &files_service.ChangeRepoFile{
Operation: file.Operation,
TreePath: file.Path,
@@ -477,41 +507,15 @@ func ChangeFiles(ctx *context.APIContext) {
ContentReader: contentReader,
SHA: file.SHA,
}
- files = append(files, changeRepoFile)
- }
-
- opts := &files_service.ChangeRepoFilesOptions{
- Files: files,
- Message: apiOpts.Message,
- OldBranch: apiOpts.BranchName,
- NewBranch: apiOpts.NewBranchName,
- Committer: &files_service.IdentityOptions{
- GitUserName: apiOpts.Committer.Name,
- GitUserEmail: apiOpts.Committer.Email,
- },
- Author: &files_service.IdentityOptions{
- GitUserName: apiOpts.Author.Name,
- GitUserEmail: apiOpts.Author.Email,
- },
- Dates: &files_service.CommitDateOptions{
- Author: apiOpts.Dates.Author,
- Committer: apiOpts.Dates.Committer,
- },
- Signoff: apiOpts.Signoff,
- }
- if opts.Dates.Author.IsZero() {
- opts.Dates.Author = time.Now()
- }
- if opts.Dates.Committer.IsZero() {
- opts.Dates.Committer = time.Now()
+ opts.Files = append(opts.Files, changeRepoFile)
}
if opts.Message == "" {
- opts.Message = changeFilesCommitMessage(ctx, files)
+ opts.Message = changeFilesCommitMessage(ctx, opts.Files)
}
- if filesResponse, err := createOrUpdateFiles(ctx, opts); err != nil {
- handleCreateOrUpdateFileError(ctx, err)
+ if filesResponse, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, opts); err != nil {
+ handleChangeRepoFilesError(ctx, err)
} else {
ctx.JSON(http.StatusCreated, filesResponse)
}
@@ -559,56 +563,27 @@ func CreateFile(ctx *context.APIContext) {
// "423":
// "$ref": "#/responses/repoArchivedError"
- apiOpts := web.GetForm(ctx).(*api.CreateFileOptions)
-
- if apiOpts.BranchName == "" {
- apiOpts.BranchName = ctx.Repo.Repository.DefaultBranch
+ apiOpts, opts := getAPIChangeRepoFileOptions[*api.CreateFileOptions](ctx)
+ if ctx.Written() {
+ return
}
-
contentReader, err := base64Reader(apiOpts.ContentBase64)
if err != nil {
ctx.APIError(http.StatusUnprocessableEntity, err)
return
}
- opts := &files_service.ChangeRepoFilesOptions{
- Files: []*files_service.ChangeRepoFile{
- {
- Operation: "create",
- TreePath: ctx.PathParam("*"),
- ContentReader: contentReader,
- },
- },
- Message: apiOpts.Message,
- OldBranch: apiOpts.BranchName,
- NewBranch: apiOpts.NewBranchName,
- Committer: &files_service.IdentityOptions{
- GitUserName: apiOpts.Committer.Name,
- GitUserEmail: apiOpts.Committer.Email,
- },
- Author: &files_service.IdentityOptions{
- GitUserName: apiOpts.Author.Name,
- GitUserEmail: apiOpts.Author.Email,
- },
- Dates: &files_service.CommitDateOptions{
- Author: apiOpts.Dates.Author,
- Committer: apiOpts.Dates.Committer,
- },
- Signoff: apiOpts.Signoff,
- }
- if opts.Dates.Author.IsZero() {
- opts.Dates.Author = time.Now()
- }
- if opts.Dates.Committer.IsZero() {
- opts.Dates.Committer = time.Now()
- }
-
+ opts.Files = append(opts.Files, &files_service.ChangeRepoFile{
+ Operation: "create",
+ TreePath: ctx.PathParam("*"),
+ ContentReader: contentReader,
+ })
if opts.Message == "" {
opts.Message = changeFilesCommitMessage(ctx, opts.Files)
}
- if filesResponse, err := createOrUpdateFiles(ctx, opts); err != nil {
- handleCreateOrUpdateFileError(ctx, err)
+ if filesResponse, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, opts); err != nil {
+ handleChangeRepoFilesError(ctx, err)
} else {
fileResponse := files_service.GetFileResponseFromFilesResponse(filesResponse, 0)
ctx.JSON(http.StatusCreated, fileResponse)
@@ -656,96 +631,55 @@ func UpdateFile(ctx *context.APIContext) {
// "$ref": "#/responses/error"
// "423":
// "$ref": "#/responses/repoArchivedError"
- apiOpts := web.GetForm(ctx).(*api.UpdateFileOptions)
- if ctx.Repo.Repository.IsEmpty {
- ctx.APIError(http.StatusUnprocessableEntity, errors.New("repo is empty"))
+
+ apiOpts, opts := getAPIChangeRepoFileOptions[*api.UpdateFileOptions](ctx)
+ if ctx.Written() {
return
}
-
- if apiOpts.BranchName == "" {
- apiOpts.BranchName = ctx.Repo.Repository.DefaultBranch
- }
-
contentReader, err := base64Reader(apiOpts.ContentBase64)
if err != nil {
ctx.APIError(http.StatusUnprocessableEntity, err)
return
}
-
- opts := &files_service.ChangeRepoFilesOptions{
- Files: []*files_service.ChangeRepoFile{
- {
- Operation: "update",
- ContentReader: contentReader,
- SHA: apiOpts.SHA,
- FromTreePath: apiOpts.FromPath,
- TreePath: ctx.PathParam("*"),
- },
- },
- Message: apiOpts.Message,
- OldBranch: apiOpts.BranchName,
- NewBranch: apiOpts.NewBranchName,
- Committer: &files_service.IdentityOptions{
- GitUserName: apiOpts.Committer.Name,
- GitUserEmail: apiOpts.Committer.Email,
- },
- Author: &files_service.IdentityOptions{
- GitUserName: apiOpts.Author.Name,
- GitUserEmail: apiOpts.Author.Email,
- },
- Dates: &files_service.CommitDateOptions{
- Author: apiOpts.Dates.Author,
- Committer: apiOpts.Dates.Committer,
- },
- Signoff: apiOpts.Signoff,
- }
- if opts.Dates.Author.IsZero() {
- opts.Dates.Author = time.Now()
- }
- if opts.Dates.Committer.IsZero() {
- opts.Dates.Committer = time.Now()
- }
-
+ opts.Files = append(opts.Files, &files_service.ChangeRepoFile{
+ Operation: "update",
+ ContentReader: contentReader,
+ SHA: apiOpts.SHA,
+ FromTreePath: apiOpts.FromPath,
+ TreePath: ctx.PathParam("*"),
+ })
if opts.Message == "" {
opts.Message = changeFilesCommitMessage(ctx, opts.Files)
}
- if filesResponse, err := createOrUpdateFiles(ctx, opts); err != nil {
- handleCreateOrUpdateFileError(ctx, err)
+ if filesResponse, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, opts); err != nil {
+ handleChangeRepoFilesError(ctx, err)
} else {
fileResponse := files_service.GetFileResponseFromFilesResponse(filesResponse, 0)
ctx.JSON(http.StatusOK, fileResponse)
}
}
-func handleCreateOrUpdateFileError(ctx *context.APIContext, err error) {
+func handleChangeRepoFilesError(ctx *context.APIContext, err error) {
if files_service.IsErrUserCannotCommit(err) || pull_service.IsErrFilePathProtected(err) {
ctx.APIError(http.StatusForbidden, err)
return
}
if git_model.IsErrBranchAlreadyExists(err) || files_service.IsErrFilenameInvalid(err) || pull_service.IsErrSHADoesNotMatch(err) ||
- files_service.IsErrFilePathInvalid(err) || files_service.IsErrRepoFileAlreadyExists(err) {
+ files_service.IsErrFilePathInvalid(err) || files_service.IsErrRepoFileAlreadyExists(err) ||
+ files_service.IsErrCommitIDDoesNotMatch(err) || files_service.IsErrSHAOrCommitIDNotProvided(err) {
ctx.APIError(http.StatusUnprocessableEntity, err)
return
}
- if git_model.IsErrBranchNotExist(err) || git.IsErrBranchNotExist(err) {
+ if git.IsErrBranchNotExist(err) || files_service.IsErrRepoFileDoesNotExist(err) || git.IsErrNotExist(err) {
ctx.APIError(http.StatusNotFound, err)
return
}
-
- ctx.APIErrorInternal(err)
-}
-
-// Called from both CreateFile or UpdateFile to handle both
-func createOrUpdateFiles(ctx *context.APIContext, opts *files_service.ChangeRepoFilesOptions) (*api.FilesResponse, error) {
- if !canWriteFiles(ctx, opts.OldBranch) {
- return nil, repo_model.ErrUserDoesNotHaveAccessToRepo{
- UserID: ctx.Doer.ID,
- RepoName: ctx.Repo.Repository.LowerName,
- }
+ if errors.Is(err, util.ErrNotExist) {
+ ctx.APIError(http.StatusNotFound, err)
+ return
}
-
- return files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, opts)
+ ctx.APIErrorInternal(err)
}
// format commit message if empty
@@ -759,7 +693,7 @@ func changeFilesCommitMessage(ctx *context.APIContext, files []*files_service.Ch
switch file.Operation {
case "create":
createFiles = append(createFiles, file.TreePath)
- case "update":
+ case "update", "upload", "rename": // upload and rename works like "update", there is no translation for them at the moment
updateFiles = append(updateFiles, file.TreePath)
case "delete":
deleteFiles = append(deleteFiles, file.TreePath)
@@ -817,74 +751,27 @@ func DeleteFile(ctx *context.APIContext) {
// "$ref": "#/responses/error"
// "404":
// "$ref": "#/responses/error"
+ // "422":
+ // "$ref": "#/responses/error"
// "423":
// "$ref": "#/responses/repoArchivedError"
- apiOpts := web.GetForm(ctx).(*api.DeleteFileOptions)
- if !canWriteFiles(ctx, apiOpts.BranchName) {
- ctx.APIError(http.StatusForbidden, repo_model.ErrUserDoesNotHaveAccessToRepo{
- UserID: ctx.Doer.ID,
- RepoName: ctx.Repo.Repository.LowerName,
- })
+ apiOpts, opts := getAPIChangeRepoFileOptions[*api.DeleteFileOptions](ctx)
+ if ctx.Written() {
return
}
- if apiOpts.BranchName == "" {
- apiOpts.BranchName = ctx.Repo.Repository.DefaultBranch
- }
-
- opts := &files_service.ChangeRepoFilesOptions{
- Files: []*files_service.ChangeRepoFile{
- {
- Operation: "delete",
- SHA: apiOpts.SHA,
- TreePath: ctx.PathParam("*"),
- },
- },
- Message: apiOpts.Message,
- OldBranch: apiOpts.BranchName,
- NewBranch: apiOpts.NewBranchName,
- Committer: &files_service.IdentityOptions{
- GitUserName: apiOpts.Committer.Name,
- GitUserEmail: apiOpts.Committer.Email,
- },
- Author: &files_service.IdentityOptions{
- GitUserName: apiOpts.Author.Name,
- GitUserEmail: apiOpts.Author.Email,
- },
- Dates: &files_service.CommitDateOptions{
- Author: apiOpts.Dates.Author,
- Committer: apiOpts.Dates.Committer,
- },
- Signoff: apiOpts.Signoff,
- }
- if opts.Dates.Author.IsZero() {
- opts.Dates.Author = time.Now()
- }
- if opts.Dates.Committer.IsZero() {
- opts.Dates.Committer = time.Now()
- }
-
+ opts.Files = append(opts.Files, &files_service.ChangeRepoFile{
+ Operation: "delete",
+ SHA: apiOpts.SHA,
+ TreePath: ctx.PathParam("*"),
+ })
if opts.Message == "" {
opts.Message = changeFilesCommitMessage(ctx, opts.Files)
}
if filesResponse, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, opts); err != nil {
- if git.IsErrBranchNotExist(err) || files_service.IsErrRepoFileDoesNotExist(err) || git.IsErrNotExist(err) {
- ctx.APIError(http.StatusNotFound, err)
- return
- } else if git_model.IsErrBranchAlreadyExists(err) ||
- files_service.IsErrFilenameInvalid(err) ||
- pull_service.IsErrSHADoesNotMatch(err) ||
- files_service.IsErrCommitIDDoesNotMatch(err) ||
- files_service.IsErrSHAOrCommitIDNotProvided(err) {
- ctx.APIError(http.StatusBadRequest, err)
- return
- } else if files_service.IsErrUserCannotCommit(err) {
- ctx.APIError(http.StatusForbidden, err)
- return
- }
- ctx.APIErrorInternal(err)
+ handleChangeRepoFilesError(ctx, err)
} else {
fileResponse := files_service.GetFileResponseFromFilesResponse(filesResponse, 0)
ctx.JSON(http.StatusOK, fileResponse) // FIXME on APIv2: return http.StatusNoContent
@@ -902,11 +789,81 @@ func resolveRefCommit(ctx *context.APIContext, ref string, minCommitIDLen ...int
return refCommit
}
-// GetContents Get the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
+func GetContentsExt(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/contents-ext/{filepath} repository repoGetContentsExt
+ // ---
+ // summary: The extended "contents" API, to get file metadata and/or content, or list a directory.
+ // description: It guarantees that only one of the response fields is set if the request succeeds.
+ // Users can pass "includes=file_content" or "includes=lfs_metadata" to retrieve more fields.
+ // "includes=file_content" only works for single file, if you need to retrieve file contents in batch,
+ // use "file-contents" API after listing the directory.
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repo
+ // type: string
+ // required: true
+ // - name: filepath
+ // in: path
+ // description: path of the dir, file, symlink or submodule in the repo. Swagger requires path parameter to be "required",
+ // you can leave it empty or pass a single dot (".") to get the root directory.
+ // type: string
+ // required: true
+ // - name: ref
+ // in: query
+ // description: the name of the commit/branch/tag, default to the repository’s default branch.
+ // type: string
+ // required: false
+ // - name: includes
+ // in: query
+ // description: By default this API's response only contains file's metadata. Use comma-separated "includes" options to retrieve more fields.
+ // Option "file_content" will try to retrieve the file content, "lfs_metadata" will try to retrieve LFS metadata,
+ // "commit_metadata" will try to retrieve commit metadata, and "commit_message" will try to retrieve commit message.
+ // type: string
+ // required: false
+ // responses:
+ // "200":
+ // "$ref": "#/responses/ContentsExtResponse"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ if treePath := ctx.PathParam("*"); treePath == "." || treePath == "/" {
+ ctx.SetPathParam("*", "") // workaround for swagger, it requires path parameter to be "required", but we need to list root directory
+ }
+ opts := files_service.GetContentsOrListOptions{TreePath: ctx.PathParam("*")}
+ for includeOpt := range strings.SplitSeq(ctx.FormString("includes"), ",") {
+ if includeOpt == "" {
+ continue
+ }
+ switch includeOpt {
+ case "file_content":
+ opts.IncludeSingleFileContent = true
+ case "lfs_metadata":
+ opts.IncludeLfsMetadata = true
+ case "commit_metadata":
+ opts.IncludeCommitMetadata = true
+ case "commit_message":
+ opts.IncludeCommitMessage = true
+ default:
+ ctx.APIError(http.StatusBadRequest, fmt.Sprintf("unknown include option %q", includeOpt))
+ return
+ }
+ }
+ ctx.JSON(http.StatusOK, getRepoContents(ctx, opts))
+}
+
func GetContents(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/contents/{filepath} repository repoGetContents
// ---
- // summary: Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
+ // summary: Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir.
+ // description: This API follows GitHub's design, and it is not easy to use. Recommend users to use the "contents-ext" API instead.
// produces:
// - application/json
// parameters:
@@ -935,29 +892,38 @@ func GetContents(ctx *context.APIContext) {
// "$ref": "#/responses/ContentsResponse"
// "404":
// "$ref": "#/responses/notFound"
-
- treePath := ctx.PathParam("*")
- refCommit := resolveRefCommit(ctx, ctx.FormTrim("ref"))
+ ret := getRepoContents(ctx, files_service.GetContentsOrListOptions{
+ TreePath: ctx.PathParam("*"),
+ IncludeSingleFileContent: true,
+ IncludeCommitMetadata: true,
+ })
if ctx.Written() {
return
}
-
- if fileList, err := files_service.GetContentsOrList(ctx, ctx.Repo.Repository, refCommit, treePath); err != nil {
- if git.IsErrNotExist(err) {
- ctx.APIErrorNotFound("GetContentsOrList", err)
- return
- }
- ctx.APIErrorInternal(err)
- } else {
- ctx.JSON(http.StatusOK, fileList)
- }
+ ctx.JSON(http.StatusOK, util.Iif[any](ret.FileContents != nil, ret.FileContents, ret.DirContents))
+}
+
+func getRepoContents(ctx *context.APIContext, opts files_service.GetContentsOrListOptions) *api.ContentsExtResponse {
+ refCommit := resolveRefCommit(ctx, ctx.FormTrim("ref"))
+ if ctx.Written() {
+ return nil
+ }
+ ret, err := files_service.GetContentsOrList(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, refCommit, opts)
+ if err != nil {
+ if git.IsErrNotExist(err) {
+ ctx.APIErrorNotFound("GetContentsOrList", err)
+ return nil
+ }
+ ctx.APIErrorInternal(err)
+ }
+ return &ret
}
-// GetContentsList Get the metadata of all the entries of the root dir
func GetContentsList(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/contents repository repoGetContentsList
// ---
- // summary: Gets the metadata of all the entries of the root dir
+ // summary: Gets the metadata of all the entries of the root dir.
+ // description: This API follows GitHub's design, and it is not easy to use. Recommend users to use our "contents-ext" API instead.
// produces:
// - application/json
// parameters:
@@ -990,7 +956,7 @@ func GetFileContentsGet(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/file-contents repository repoGetFileContents
// ---
// summary: Get the metadata and contents of requested files
- // description: See the POST method. This GET method supports to use JSON encoded request body in query parameter.
+ // description: See the POST method. This GET method supports using JSON encoded request body in query parameter.
// produces:
// - application/json
// parameters:
@@ -1020,7 +986,7 @@ func GetFileContentsGet(ctx *context.APIContext) {
// "404":
// "$ref": "#/responses/notFound"
- // POST method requires "write" permission, so we also support this "GET" method
+ // The POST method requires "write" permission, so we also support this "GET" method
handleGetFileContents(ctx)
}
@@ -1064,7 +1030,7 @@ func GetFileContentsPost(ctx *context.APIContext) {
// This is actually a "read" request, but we need to accept a "files" list, then POST method seems easy to use.
// But the permission system requires that the caller must have "write" permission to use POST method.
- // At the moment there is no other way to get around the permission check, so there is a "GET" workaround method above.
+ // At the moment, there is no other way to get around the permission check, so there is a "GET" workaround method above.
handleGetFileContents(ctx)
}
@@ -1081,6 +1047,6 @@ func handleGetFileContents(ctx *context.APIContext) {
if ctx.Written() {
return
}
- filesResponse := files_service.GetContentsListFromTreePaths(ctx, ctx.Repo.Repository, refCommit, opts.Files)
+ filesResponse := files_service.GetContentsListFromTreePaths(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, refCommit, opts.Files)
ctx.JSON(http.StatusOK, util.SliceNilAsEmpty(filesResponse))
}
diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go
index cc342a9313c..4db1e878b13 100644
--- a/routers/api/v1/repo/issue_comment.go
+++ b/routers/api/v1/repo/issue_comment.go
@@ -721,8 +721,8 @@ func deleteIssueComment(ctx *context.APIContext) {
if !ctx.IsSigned || (ctx.Doer.ID != comment.PosterID && !ctx.Repo.CanWriteIssuesOrPulls(comment.Issue.IsPull)) {
ctx.Status(http.StatusForbidden)
return
- } else if comment.Type != issues_model.CommentTypeComment {
- ctx.Status(http.StatusNoContent)
+ } else if !comment.Type.HasContentSupport() {
+ ctx.Status(http.StatusBadRequest)
return
}
diff --git a/routers/api/v1/repo/issue_dependency.go b/routers/api/v1/repo/issue_dependency.go
index 2048c76ea0e..1b58beb7b6e 100644
--- a/routers/api/v1/repo/issue_dependency.go
+++ b/routers/api/v1/repo/issue_dependency.go
@@ -77,10 +77,7 @@ func GetIssueDependencies(ctx *context.APIContext) {
return
}
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
limit := ctx.FormInt("limit")
if limit == 0 {
limit = setting.API.DefaultPagingNum
@@ -328,10 +325,7 @@ func GetIssueBlocks(ctx *context.APIContext) {
return
}
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
limit := ctx.FormInt("limit")
if limit <= 1 {
limit = setting.API.DefaultPagingNum
diff --git a/routers/api/v1/repo/issue_stopwatch.go b/routers/api/v1/repo/issue_stopwatch.go
index b18e172b370..0f28b9757d1 100644
--- a/routers/api/v1/repo/issue_stopwatch.go
+++ b/routers/api/v1/repo/issue_stopwatch.go
@@ -4,7 +4,6 @@
package repo
import (
- "errors"
"net/http"
issues_model "code.gitea.io/gitea/models/issues"
@@ -49,14 +48,17 @@ func StartIssueStopwatch(ctx *context.APIContext) {
// "409":
// description: Cannot start a stopwatch again if it already exists
- issue, err := prepareIssueStopwatch(ctx, false)
- if err != nil {
+ issue := prepareIssueForStopwatch(ctx)
+ if ctx.Written() {
return
}
- if err := issues_model.CreateIssueStopwatch(ctx, ctx.Doer, issue); err != nil {
+ if ok, err := issues_model.CreateIssueStopwatch(ctx, ctx.Doer, issue); err != nil {
ctx.APIErrorInternal(err)
return
+ } else if !ok {
+ ctx.APIError(http.StatusConflict, "cannot start a stopwatch again if it already exists")
+ return
}
ctx.Status(http.StatusCreated)
@@ -96,18 +98,20 @@ func StopIssueStopwatch(ctx *context.APIContext) {
// "404":
// "$ref": "#/responses/notFound"
// "409":
- // description: Cannot stop a non existent stopwatch
+ // description: Cannot stop a non-existent stopwatch
- issue, err := prepareIssueStopwatch(ctx, true)
- if err != nil {
+ issue := prepareIssueForStopwatch(ctx)
+ if ctx.Written() {
return
}
- if err := issues_model.FinishIssueStopwatch(ctx, ctx.Doer, issue); err != nil {
+ if ok, err := issues_model.FinishIssueStopwatch(ctx, ctx.Doer, issue); err != nil {
ctx.APIErrorInternal(err)
return
+ } else if !ok {
+ ctx.APIError(http.StatusConflict, "cannot stop a non-existent stopwatch")
+ return
}
-
ctx.Status(http.StatusCreated)
}
@@ -145,22 +149,25 @@ func DeleteIssueStopwatch(ctx *context.APIContext) {
// "404":
// "$ref": "#/responses/notFound"
// "409":
- // description: Cannot cancel a non existent stopwatch
+ // description: Cannot cancel a non-existent stopwatch
- issue, err := prepareIssueStopwatch(ctx, true)
- if err != nil {
+ issue := prepareIssueForStopwatch(ctx)
+ if ctx.Written() {
return
}
- if err := issues_model.CancelStopwatch(ctx, ctx.Doer, issue); err != nil {
+ if ok, err := issues_model.CancelStopwatch(ctx, ctx.Doer, issue); err != nil {
ctx.APIErrorInternal(err)
return
+ } else if !ok {
+ ctx.APIError(http.StatusConflict, "cannot cancel a non-existent stopwatch")
+ return
}
ctx.Status(http.StatusNoContent)
}
-func prepareIssueStopwatch(ctx *context.APIContext, shouldExist bool) (*issues_model.Issue, error) {
+func prepareIssueForStopwatch(ctx *context.APIContext) *issues_model.Issue {
issue, err := issues_model.GetIssueByIndex(ctx, ctx.Repo.Repository.ID, ctx.PathParamInt64("index"))
if err != nil {
if issues_model.IsErrIssueNotExist(err) {
@@ -168,32 +175,19 @@ func prepareIssueStopwatch(ctx *context.APIContext, shouldExist bool) (*issues_m
} else {
ctx.APIErrorInternal(err)
}
-
- return nil, err
+ return nil
}
if !ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull) {
ctx.Status(http.StatusForbidden)
- return nil, errors.New("Unable to write to PRs")
+ return nil
}
if !ctx.Repo.CanUseTimetracker(ctx, issue, ctx.Doer) {
ctx.Status(http.StatusForbidden)
- return nil, errors.New("Cannot use time tracker")
+ return nil
}
-
- if issues_model.StopwatchExists(ctx, ctx.Doer.ID, issue.ID) != shouldExist {
- if shouldExist {
- ctx.APIError(http.StatusConflict, "cannot stop/cancel a non existent stopwatch")
- err = errors.New("cannot stop/cancel a non existent stopwatch")
- } else {
- ctx.APIError(http.StatusConflict, "cannot start a stopwatch again if it already exists")
- err = errors.New("cannot start a stopwatch again if it already exists")
- }
- return nil, err
- }
-
- return issue, nil
+ return issue
}
// GetStopwatches get all stopwatches
diff --git a/routers/api/v1/repo/issue_subscription.go b/routers/api/v1/repo/issue_subscription.go
index 21e549496df..c89f228a06a 100644
--- a/routers/api/v1/repo/issue_subscription.go
+++ b/routers/api/v1/repo/issue_subscription.go
@@ -43,7 +43,7 @@ func AddIssueSubscription(ctx *context.APIContext) {
// required: true
// - name: user
// in: path
- // description: user to subscribe
+ // description: username of the user to subscribe the issue to
// type: string
// required: true
// responses:
@@ -87,7 +87,7 @@ func DelIssueSubscription(ctx *context.APIContext) {
// required: true
// - name: user
// in: path
- // description: user witch unsubscribe
+ // description: username of the user to unsubscribe from an issue
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/repo/issue_tracked_time.go b/routers/api/v1/repo/issue_tracked_time.go
index dd6abf94c68..171da272ccc 100644
--- a/routers/api/v1/repo/issue_tracked_time.go
+++ b/routers/api/v1/repo/issue_tracked_time.go
@@ -405,7 +405,7 @@ func ListTrackedTimesByUser(ctx *context.APIContext) {
// required: true
// - name: user
// in: path
- // description: username of user
+ // description: username of the user whose tracked times are to be listed
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/repo/migrate.go b/routers/api/v1/repo/migrate.go
index f2e0cad86ca..c1e0b47d331 100644
--- a/routers/api/v1/repo/migrate.go
+++ b/routers/api/v1/repo/migrate.go
@@ -203,7 +203,7 @@ func Migrate(ctx *context.APIContext) {
}
if repo != nil {
- if errDelete := repo_service.DeleteRepositoryDirectly(ctx, ctx.Doer, repo.ID); errDelete != nil {
+ if errDelete := repo_service.DeleteRepositoryDirectly(ctx, repo.ID); errDelete != nil {
log.Error("DeleteRepository: %v", errDelete)
}
}
diff --git a/routers/api/v1/repo/patch.go b/routers/api/v1/repo/patch.go
index bcf498bf7ec..e9f5cf5d908 100644
--- a/routers/api/v1/repo/patch.go
+++ b/routers/api/v1/repo/patch.go
@@ -5,15 +5,10 @@ package repo
import (
"net/http"
- "time"
- git_model "code.gitea.io/gitea/models/git"
- repo_model "code.gitea.io/gitea/models/repo"
- "code.gitea.io/gitea/modules/git"
api "code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/modules/web"
+ "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/services/context"
- pull_service "code.gitea.io/gitea/services/pull"
"code.gitea.io/gitea/services/repository/files"
)
@@ -49,63 +44,22 @@ func ApplyDiffPatch(ctx *context.APIContext) {
// "$ref": "#/responses/notFound"
// "423":
// "$ref": "#/responses/repoArchivedError"
- apiOpts := web.GetForm(ctx).(*api.ApplyDiffPatchFileOptions)
-
+ apiOpts, changeRepoFileOpts := getAPIChangeRepoFileOptions[*api.ApplyDiffPatchFileOptions](ctx)
opts := &files.ApplyDiffPatchOptions{
- Content: apiOpts.Content,
- SHA: apiOpts.SHA,
- Message: apiOpts.Message,
- OldBranch: apiOpts.BranchName,
- NewBranch: apiOpts.NewBranchName,
- Committer: &files.IdentityOptions{
- GitUserName: apiOpts.Committer.Name,
- GitUserEmail: apiOpts.Committer.Email,
- },
- Author: &files.IdentityOptions{
- GitUserName: apiOpts.Author.Name,
- GitUserEmail: apiOpts.Author.Email,
- },
- Dates: &files.CommitDateOptions{
- Author: apiOpts.Dates.Author,
- Committer: apiOpts.Dates.Committer,
- },
- Signoff: apiOpts.Signoff,
- }
- if opts.Dates.Author.IsZero() {
- opts.Dates.Author = time.Now()
- }
- if opts.Dates.Committer.IsZero() {
- opts.Dates.Committer = time.Now()
- }
+ Content: apiOpts.Content,
+ Message: util.IfZero(apiOpts.Message, "apply-patch"),
- if opts.Message == "" {
- opts.Message = "apply-patch"
- }
-
- if !canWriteFiles(ctx, apiOpts.BranchName) {
- ctx.APIErrorInternal(repo_model.ErrUserDoesNotHaveAccessToRepo{
- UserID: ctx.Doer.ID,
- RepoName: ctx.Repo.Repository.LowerName,
- })
- return
+ OldBranch: changeRepoFileOpts.OldBranch,
+ NewBranch: changeRepoFileOpts.NewBranch,
+ Committer: changeRepoFileOpts.Committer,
+ Author: changeRepoFileOpts.Author,
+ Dates: changeRepoFileOpts.Dates,
+ Signoff: changeRepoFileOpts.Signoff,
}
fileResponse, err := files.ApplyDiffPatch(ctx, ctx.Repo.Repository, ctx.Doer, opts)
if err != nil {
- if files.IsErrUserCannotCommit(err) || pull_service.IsErrFilePathProtected(err) {
- ctx.APIError(http.StatusForbidden, err)
- return
- }
- if git_model.IsErrBranchAlreadyExists(err) || files.IsErrFilenameInvalid(err) || pull_service.IsErrSHADoesNotMatch(err) ||
- files.IsErrFilePathInvalid(err) || files.IsErrRepoFileAlreadyExists(err) {
- ctx.APIError(http.StatusUnprocessableEntity, err)
- return
- }
- if git_model.IsErrBranchNotExist(err) || git.IsErrBranchNotExist(err) {
- ctx.APIError(http.StatusNotFound, err)
- return
- }
- ctx.APIErrorInternal(err)
+ handleChangeRepoFilesError(ctx, err)
} else {
ctx.JSON(http.StatusCreated, fileResponse)
}
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 2c194f92535..09729200d52 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -52,7 +52,7 @@ func ListPullRequests(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: Owner of the repo
+ // description: owner of the repo
// type: string
// required: true
// - name: repo
@@ -1461,9 +1461,9 @@ func GetPullRequestCommits(ctx *context.APIContext) {
defer closer.Close()
if pr.HasMerged {
- prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitRefName(), false, false)
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitHeadRefName(), false, false)
} else {
- prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitRefName(), false, false)
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitHeadRefName(), false, false)
}
if err != nil {
ctx.APIErrorInternal(err)
@@ -1584,16 +1584,16 @@ func GetPullRequestFiles(ctx *context.APIContext) {
var prInfo *git.CompareInfo
if pr.HasMerged {
- prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitRefName(), true, false)
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitHeadRefName(), true, false)
} else {
- prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitRefName(), true, false)
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitHeadRefName(), true, false)
}
if err != nil {
ctx.APIErrorInternal(err)
return
}
- headCommitID, err := baseGitRepo.GetRefCommitID(pr.GetGitRefName())
+ headCommitID, err := baseGitRepo.GetRefCommitID(pr.GetGitHeadRefName())
if err != nil {
ctx.APIErrorInternal(err)
return
diff --git a/routers/api/v1/repo/pull_review.go b/routers/api/v1/repo/pull_review.go
index 9421a052db5..3c00193fac1 100644
--- a/routers/api/v1/repo/pull_review.go
+++ b/routers/api/v1/repo/pull_review.go
@@ -336,7 +336,7 @@ func CreatePullReview(ctx *context.APIContext) {
}
defer closer.Close()
- headCommitID, err := gitRepo.GetRefCommitID(pr.GetGitRefName())
+ headCommitID, err := gitRepo.GetRefCommitID(pr.GetGitHeadRefName())
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -455,7 +455,7 @@ func SubmitPullReview(ctx *context.APIContext) {
return
}
- headCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(pr.GetGitRefName())
+ headCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(pr.GetGitHeadRefName())
if err != nil {
ctx.APIErrorInternal(err)
return
diff --git a/routers/api/v1/repo/release.go b/routers/api/v1/repo/release.go
index b6f5a3ac9e7..272b395dfb9 100644
--- a/routers/api/v1/repo/release.go
+++ b/routers/api/v1/repo/release.go
@@ -247,7 +247,9 @@ func CreateRelease(ctx *context.APIContext) {
IsTag: false,
Repo: ctx.Repo.Repository,
}
- if err := release_service.CreateRelease(ctx.Repo.GitRepo, rel, nil, ""); err != nil {
+ // GitHub doesn't have "tag_message", GitLab has: https://docs.gitlab.com/api/releases/#create-a-release
+ // It doesn't need to be the same as the "release note"
+ if err := release_service.CreateRelease(ctx.Repo.GitRepo, rel, nil, form.TagMessage); err != nil {
if repo_model.IsErrReleaseAlreadyExist(err) {
ctx.APIError(http.StatusConflict, err)
} else if release_service.IsErrProtectedTagName(err) {
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 8acc912796b..e69b7729a0f 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -329,7 +329,7 @@ func Generate(ctx *context.APIContext) {
// parameters:
// - name: template_owner
// in: path
- // description: name of the template repository owner
+ // description: owner of the template repository
// type: string
// required: true
// - name: template_repo
@@ -669,7 +669,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
newRepoName = *opts.Name
}
// Check if repository name has been changed and not just a case change
- if repo.LowerName != strings.ToLower(newRepoName) {
+ if !strings.EqualFold(repo.LowerName, newRepoName) {
if err := repo_service.ChangeRepositoryName(ctx, ctx.Doer, repo, newRepoName); err != nil {
switch {
case repo_model.IsErrRepoAlreadyExist(err):
@@ -772,13 +772,8 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
var units []repo_model.RepoUnit
var deleteUnitTypes []unit_model.Type
- currHasIssues := repo.UnitEnabled(ctx, unit_model.TypeIssues)
- newHasIssues := currHasIssues
if opts.HasIssues != nil {
- newHasIssues = *opts.HasIssues
- }
- if currHasIssues || newHasIssues {
- if newHasIssues && opts.ExternalTracker != nil && !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
+ if *opts.HasIssues && opts.ExternalTracker != nil && !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
// Check that values are valid
if !validation.IsValidExternalURL(opts.ExternalTracker.ExternalTrackerURL) {
err := errors.New("External tracker URL not valid")
@@ -802,7 +797,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
},
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeIssues)
- } else if newHasIssues && opts.ExternalTracker == nil && !unit_model.TypeIssues.UnitGlobalDisabled() {
+ } else if *opts.HasIssues && opts.ExternalTracker == nil && !unit_model.TypeIssues.UnitGlobalDisabled() {
// Default to built-in tracker
var config *repo_model.IssuesConfig
@@ -829,7 +824,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Config: config,
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker)
- } else if !newHasIssues {
+ } else if !*opts.HasIssues {
if !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker)
}
@@ -839,13 +834,8 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
}
}
- currHasWiki := repo.UnitEnabled(ctx, unit_model.TypeWiki)
- newHasWiki := currHasWiki
if opts.HasWiki != nil {
- newHasWiki = *opts.HasWiki
- }
- if currHasWiki || newHasWiki {
- if newHasWiki && opts.ExternalWiki != nil && !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
+ if *opts.HasWiki && opts.ExternalWiki != nil && !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
// Check that values are valid
if !validation.IsValidExternalURL(opts.ExternalWiki.ExternalWikiURL) {
err := errors.New("External wiki URL not valid")
@@ -861,7 +851,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
},
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeWiki)
- } else if newHasWiki && opts.ExternalWiki == nil && !unit_model.TypeWiki.UnitGlobalDisabled() {
+ } else if *opts.HasWiki && opts.ExternalWiki == nil && !unit_model.TypeWiki.UnitGlobalDisabled() {
config := &repo_model.UnitConfig{}
units = append(units, repo_model.RepoUnit{
RepoID: repo.ID,
@@ -869,7 +859,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Config: config,
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalWiki)
- } else if !newHasWiki {
+ } else if !*opts.HasWiki {
if !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalWiki)
}
@@ -879,13 +869,20 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
}
}
- currHasPullRequests := repo.UnitEnabled(ctx, unit_model.TypePullRequests)
- newHasPullRequests := currHasPullRequests
- if opts.HasPullRequests != nil {
- newHasPullRequests = *opts.HasPullRequests
+ if opts.HasCode != nil && !unit_model.TypeCode.UnitGlobalDisabled() {
+ if *opts.HasCode {
+ units = append(units, repo_model.RepoUnit{
+ RepoID: repo.ID,
+ Type: unit_model.TypeCode,
+ Config: &repo_model.UnitConfig{},
+ })
+ } else {
+ deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeCode)
+ }
}
- if currHasPullRequests || newHasPullRequests {
- if newHasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
+
+ if opts.HasPullRequests != nil && !unit_model.TypePullRequests.UnitGlobalDisabled() {
+ if *opts.HasPullRequests {
// We do allow setting individual PR settings through the API, so
// we get the config settings and then set them
// if those settings were provided in the opts.
@@ -953,18 +950,13 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Type: unit_model.TypePullRequests,
Config: config,
})
- } else if !newHasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
+ } else {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePullRequests)
}
}
- currHasProjects := repo.UnitEnabled(ctx, unit_model.TypeProjects)
- newHasProjects := currHasProjects
- if opts.HasProjects != nil {
- newHasProjects = *opts.HasProjects
- }
- if currHasProjects || newHasProjects {
- if newHasProjects && !unit_model.TypeProjects.UnitGlobalDisabled() {
+ if opts.HasProjects != nil && !unit_model.TypeProjects.UnitGlobalDisabled() {
+ if *opts.HasProjects {
unit, err := repo.GetUnit(ctx, unit_model.TypeProjects)
var config *repo_model.ProjectsConfig
if err != nil {
@@ -984,7 +976,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Type: unit_model.TypeProjects,
Config: config,
})
- } else if !newHasProjects && !unit_model.TypeProjects.UnitGlobalDisabled() {
+ } else {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeProjects)
}
}
diff --git a/routers/api/v1/repo/status.go b/routers/api/v1/repo/status.go
index 40007ea1e5f..d632d5b5e12 100644
--- a/routers/api/v1/repo/status.go
+++ b/routers/api/v1/repo/status.go
@@ -271,11 +271,7 @@ func GetCombinedCommitStatusByRef(ctx *context.APIContext) {
}
ctx.SetTotalCountHeader(count)
- if len(statuses) == 0 {
- ctx.JSON(http.StatusOK, &api.CombinedStatus{})
- return
- }
-
- combiStatus := convert.ToCombinedStatus(ctx, statuses, convert.ToRepo(ctx, repo, ctx.Repo.Permission))
+ combiStatus := convert.ToCombinedStatus(ctx, refCommit.Commit.ID.String(), statuses,
+ convert.ToRepo(ctx, repo, ctx.Repo.Permission))
ctx.JSON(http.StatusOK, combiStatus)
}
diff --git a/routers/api/v1/repo/wiki.go b/routers/api/v1/repo/wiki.go
index d5840b41497..8e24ffa465c 100644
--- a/routers/api/v1/repo/wiki.go
+++ b/routers/api/v1/repo/wiki.go
@@ -298,10 +298,7 @@ func ListWikiPages(ctx *context.APIContext) {
return
}
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
limit := ctx.FormInt("limit")
if limit <= 1 {
limit = setting.API.DefaultPagingNum
@@ -434,10 +431,7 @@ func ListPageRevisions(ctx *context.APIContext) {
// get commit count - wiki revisions
commitsCount, _ := wikiRepo.FileCommitsCount(ctx.Repo.Repository.DefaultWikiBranch, pageFilename)
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
// get Commit Count
commitsHistory, err := wikiRepo.CommitsByFileAndRange(
@@ -505,7 +499,7 @@ func wikiContentsByEntry(ctx *context.APIContext, entry *git.TreeEntry) string {
if blob.Size() > setting.API.DefaultMaxBlobSize {
return ""
}
- content, err := blob.GetBlobContentBase64()
+ content, err := blob.GetBlobContentBase64(nil)
if err != nil {
ctx.APIErrorInternal(err)
return ""
diff --git a/routers/api/v1/shared/action.go b/routers/api/v1/shared/action.go
new file mode 100644
index 00000000000..c97e9419fdd
--- /dev/null
+++ b/routers/api/v1/shared/action.go
@@ -0,0 +1,187 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package shared
+
+import (
+ "fmt"
+ "net/http"
+
+ actions_model "code.gitea.io/gitea/models/actions"
+ "code.gitea.io/gitea/models/db"
+ repo_model "code.gitea.io/gitea/models/repo"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/git"
+ "code.gitea.io/gitea/modules/setting"
+ api "code.gitea.io/gitea/modules/structs"
+ "code.gitea.io/gitea/modules/webhook"
+ "code.gitea.io/gitea/routers/api/v1/utils"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/convert"
+)
+
+// ListJobs lists jobs for api route validated ownerID and repoID
+// ownerID == 0 and repoID == 0 means all jobs
+// ownerID == 0 and repoID != 0 means all jobs for the given repo
+// ownerID != 0 and repoID == 0 means all jobs for the given user/org
+// ownerID != 0 and repoID != 0 undefined behavior
+// runID == 0 means all jobs
+// runID is used as an additional filter together with ownerID and repoID to only return jobs for the given run
+// Access rights are checked at the API route level
+func ListJobs(ctx *context.APIContext, ownerID, repoID, runID int64) {
+ if ownerID != 0 && repoID != 0 {
+ setting.PanicInDevOrTesting("ownerID and repoID should not be both set")
+ }
+ opts := actions_model.FindRunJobOptions{
+ OwnerID: ownerID,
+ RepoID: repoID,
+ RunID: runID,
+ ListOptions: utils.GetListOptions(ctx),
+ }
+ for _, status := range ctx.FormStrings("status") {
+ values, err := convertToInternal(status)
+ if err != nil {
+ ctx.APIError(http.StatusBadRequest, fmt.Errorf("Invalid status %s", status))
+ return
+ }
+ opts.Statuses = append(opts.Statuses, values...)
+ }
+
+ jobs, total, err := db.FindAndCount[actions_model.ActionRunJob](ctx, opts)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+
+ res := new(api.ActionWorkflowJobsResponse)
+ res.TotalCount = total
+
+ res.Entries = make([]*api.ActionWorkflowJob, len(jobs))
+
+ isRepoLevel := repoID != 0 && ctx.Repo != nil && ctx.Repo.Repository != nil && ctx.Repo.Repository.ID == repoID
+ for i := range jobs {
+ var repository *repo_model.Repository
+ if isRepoLevel {
+ repository = ctx.Repo.Repository
+ } else {
+ repository, err = repo_model.GetRepositoryByID(ctx, jobs[i].RepoID)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ }
+
+ convertedWorkflowJob, err := convert.ToActionWorkflowJob(ctx, repository, nil, jobs[i])
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ res.Entries[i] = convertedWorkflowJob
+ }
+
+ ctx.JSON(http.StatusOK, &res)
+}
+
+func convertToInternal(s string) ([]actions_model.Status, error) {
+ switch s {
+ case "pending", "waiting", "requested", "action_required":
+ return []actions_model.Status{actions_model.StatusBlocked}, nil
+ case "queued":
+ return []actions_model.Status{actions_model.StatusWaiting}, nil
+ case "in_progress":
+ return []actions_model.Status{actions_model.StatusRunning}, nil
+ case "completed":
+ return []actions_model.Status{
+ actions_model.StatusSuccess,
+ actions_model.StatusFailure,
+ actions_model.StatusSkipped,
+ actions_model.StatusCancelled,
+ }, nil
+ case "failure":
+ return []actions_model.Status{actions_model.StatusFailure}, nil
+ case "success":
+ return []actions_model.Status{actions_model.StatusSuccess}, nil
+ case "skipped", "neutral":
+ return []actions_model.Status{actions_model.StatusSkipped}, nil
+ case "cancelled", "timed_out":
+ return []actions_model.Status{actions_model.StatusCancelled}, nil
+ default:
+ return nil, fmt.Errorf("invalid status %s", s)
+ }
+}
+
+// ListRuns lists jobs for api route validated ownerID and repoID
+// ownerID == 0 and repoID == 0 means all runs
+// ownerID == 0 and repoID != 0 means all runs for the given repo
+// ownerID != 0 and repoID == 0 means all runs for the given user/org
+// ownerID != 0 and repoID != 0 undefined behavior
+// Access rights are checked at the API route level
+func ListRuns(ctx *context.APIContext, ownerID, repoID int64) {
+ if ownerID != 0 && repoID != 0 {
+ setting.PanicInDevOrTesting("ownerID and repoID should not be both set")
+ }
+ opts := actions_model.FindRunOptions{
+ OwnerID: ownerID,
+ RepoID: repoID,
+ ListOptions: utils.GetListOptions(ctx),
+ }
+
+ if event := ctx.FormString("event"); event != "" {
+ opts.TriggerEvent = webhook.HookEventType(event)
+ }
+ if branch := ctx.FormString("branch"); branch != "" {
+ opts.Ref = string(git.RefNameFromBranch(branch))
+ }
+ for _, status := range ctx.FormStrings("status") {
+ values, err := convertToInternal(status)
+ if err != nil {
+ ctx.APIError(http.StatusBadRequest, fmt.Errorf("Invalid status %s", status))
+ return
+ }
+ opts.Status = append(opts.Status, values...)
+ }
+ if actor := ctx.FormString("actor"); actor != "" {
+ user, err := user_model.GetUserByName(ctx, actor)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ opts.TriggerUserID = user.ID
+ }
+ if headSHA := ctx.FormString("head_sha"); headSHA != "" {
+ opts.CommitSHA = headSHA
+ }
+
+ runs, total, err := db.FindAndCount[actions_model.ActionRun](ctx, opts)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+
+ res := new(api.ActionWorkflowRunsResponse)
+ res.TotalCount = total
+
+ res.Entries = make([]*api.ActionWorkflowRun, len(runs))
+ isRepoLevel := repoID != 0 && ctx.Repo != nil && ctx.Repo.Repository != nil && ctx.Repo.Repository.ID == repoID
+ for i := range runs {
+ var repository *repo_model.Repository
+ if isRepoLevel {
+ repository = ctx.Repo.Repository
+ } else {
+ repository, err = repo_model.GetRepositoryByID(ctx, runs[i].RepoID)
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ }
+
+ convertedRun, err := convert.ToActionWorkflowRun(ctx, repository, runs[i])
+ if err != nil {
+ ctx.APIErrorInternal(err)
+ return
+ }
+ res.Entries[i] = convertedRun
+ }
+
+ ctx.JSON(http.StatusOK, &res)
+}
diff --git a/routers/api/v1/swagger/action.go b/routers/api/v1/swagger/action.go
index 16a250184ad..06065059502 100644
--- a/routers/api/v1/swagger/action.go
+++ b/routers/api/v1/swagger/action.go
@@ -44,5 +44,5 @@ type swaggerResponseActionWorkflow struct {
// swagger:response ActionWorkflowList
type swaggerResponseActionWorkflowList struct {
// in:body
- Body []api.ActionWorkflow `json:"body"`
+ Body api.ActionWorkflowResponse `json:"body"`
}
diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go
index df0c8a805aa..9e20c0533b9 100644
--- a/routers/api/v1/swagger/repo.go
+++ b/routers/api/v1/swagger/repo.go
@@ -331,6 +331,12 @@ type swaggerContentsListResponse struct {
Body []api.ContentsResponse `json:"body"`
}
+// swagger:response ContentsExtResponse
+type swaggerContentsExtResponse struct {
+ // in:body
+ Body api.ContentsExtResponse `json:"body"`
+}
+
// FileDeleteResponse
// swagger:response FileDeleteResponse
type swaggerFileDeleteResponse struct {
@@ -443,6 +449,34 @@ type swaggerRepoTasksList struct {
Body api.ActionTaskResponse `json:"body"`
}
+// WorkflowRunsList
+// swagger:response WorkflowRunsList
+type swaggerActionWorkflowRunsResponse struct {
+ // in:body
+ Body api.ActionWorkflowRunsResponse `json:"body"`
+}
+
+// WorkflowRun
+// swagger:response WorkflowRun
+type swaggerWorkflowRun struct {
+ // in:body
+ Body api.ActionWorkflowRun `json:"body"`
+}
+
+// WorkflowJobsList
+// swagger:response WorkflowJobsList
+type swaggerActionWorkflowJobsResponse struct {
+ // in:body
+ Body api.ActionWorkflowJobsResponse `json:"body"`
+}
+
+// WorkflowJob
+// swagger:response WorkflowJob
+type swaggerWorkflowJob struct {
+ // in:body
+ Body api.ActionWorkflowJob `json:"body"`
+}
+
// ArtifactsList
// swagger:response ArtifactsList
type swaggerRepoArtifactsList struct {
diff --git a/routers/api/v1/user/action.go b/routers/api/v1/user/action.go
index 7e4ffd9403a..e934d02aa78 100644
--- a/routers/api/v1/user/action.go
+++ b/routers/api/v1/user/action.go
@@ -12,6 +12,7 @@ import (
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
+ "code.gitea.io/gitea/routers/api/v1/shared"
"code.gitea.io/gitea/routers/api/v1/utils"
actions_service "code.gitea.io/gitea/services/actions"
"code.gitea.io/gitea/services/context"
@@ -356,3 +357,86 @@ func ListVariables(ctx *context.APIContext) {
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, variables)
}
+
+// ListWorkflowRuns lists workflow runs
+func ListWorkflowRuns(ctx *context.APIContext) {
+ // swagger:operation GET /user/actions/runs user getUserWorkflowRuns
+ // ---
+ // summary: Get workflow runs
+ // parameters:
+ // - name: event
+ // in: query
+ // description: workflow event name
+ // type: string
+ // required: false
+ // - name: branch
+ // in: query
+ // description: workflow branch
+ // type: string
+ // required: false
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: actor
+ // in: query
+ // description: triggered by user
+ // type: string
+ // required: false
+ // - name: head_sha
+ // in: query
+ // description: triggering sha of the workflow run
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // produces:
+ // - application/json
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowRunsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+ shared.ListRuns(ctx, ctx.Doer.ID, 0)
+}
+
+// ListWorkflowJobs lists workflow jobs
+func ListWorkflowJobs(ctx *context.APIContext) {
+ // swagger:operation GET /user/actions/jobs user getUserWorkflowJobs
+ // ---
+ // summary: Get workflow jobs
+ // parameters:
+ // - name: status
+ // in: query
+ // description: workflow status (pending, queued, in_progress, failure, success, skipped)
+ // type: string
+ // required: false
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // produces:
+ // - application/json
+ // responses:
+ // "200":
+ // "$ref": "#/responses/WorkflowJobsList"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ shared.ListJobs(ctx, ctx.Doer.ID, 0, 0)
+}
diff --git a/routers/api/v1/user/app.go b/routers/api/v1/user/app.go
index 72010101619..6f1053e7ac9 100644
--- a/routers/api/v1/user/app.go
+++ b/routers/api/v1/user/app.go
@@ -30,7 +30,7 @@ func ListAccessTokens(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of to user whose access tokens are to be listed
// type: string
// required: true
// - name: page
@@ -83,7 +83,7 @@ func CreateAccessToken(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose token is to be created
// required: true
// type: string
// - name: body
@@ -149,7 +149,7 @@ func DeleteAccessToken(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose token is to be deleted
// type: string
// required: true
// - name: token
diff --git a/routers/api/v1/user/block.go b/routers/api/v1/user/block.go
index 7231e9add7a..8365188f605 100644
--- a/routers/api/v1/user/block.go
+++ b/routers/api/v1/user/block.go
@@ -37,7 +37,7 @@ func CheckUserBlock(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: user to check
+ // description: username of the user to check
// type: string
// required: true
// responses:
@@ -56,7 +56,7 @@ func BlockUser(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: user to block
+ // description: username of the user to block
// type: string
// required: true
// - name: note
@@ -81,7 +81,7 @@ func UnblockUser(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: user to unblock
+ // description: username of the user to unblock
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/user/follower.go b/routers/api/v1/user/follower.go
index 0d0c0be7e01..339b994af4d 100644
--- a/routers/api/v1/user/follower.go
+++ b/routers/api/v1/user/follower.go
@@ -67,7 +67,7 @@ func ListFollowers(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose followers are to be listed
// type: string
// required: true
// - name: page
@@ -131,7 +131,7 @@ func ListFollowing(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose followed users are to be listed
// type: string
// required: true
// - name: page
@@ -167,7 +167,7 @@ func CheckMyFollowing(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of followed user
+ // description: username of the user to check for authenticated followers
// type: string
// required: true
// responses:
@@ -187,12 +187,12 @@ func CheckFollowing(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of following user
+ // description: username of the following user
// type: string
// required: true
// - name: target
// in: path
- // description: username of followed user
+ // description: username of the followed user
// type: string
// required: true
// responses:
@@ -216,7 +216,7 @@ func Follow(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to follow
+ // description: username of the user to follow
// type: string
// required: true
// responses:
@@ -246,7 +246,7 @@ func Unfollow(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to unfollow
+ // description: username of the user to unfollow
// type: string
// required: true
// responses:
diff --git a/routers/api/v1/user/gpg_key.go b/routers/api/v1/user/gpg_key.go
index b76bd8a1ee3..9ec4d2c938a 100644
--- a/routers/api/v1/user/gpg_key.go
+++ b/routers/api/v1/user/gpg_key.go
@@ -53,7 +53,7 @@ func ListGPGKeys(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose GPG key list is to be obtained
// type: string
// required: true
// - name: page
diff --git a/routers/api/v1/user/key.go b/routers/api/v1/user/key.go
index 628f5d6cac7..aa69245e499 100644
--- a/routers/api/v1/user/key.go
+++ b/routers/api/v1/user/key.go
@@ -136,7 +136,7 @@ func ListPublicKeys(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose public keys are to be listed
// type: string
// required: true
// - name: fingerprint
diff --git a/routers/api/v1/user/repo.go b/routers/api/v1/user/repo.go
index 47efeb2a2b3..6d0129681e0 100644
--- a/routers/api/v1/user/repo.go
+++ b/routers/api/v1/user/repo.go
@@ -62,7 +62,7 @@ func ListUserRepos(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose owned repos are to be listed
// type: string
// required: true
// - name: page
diff --git a/routers/api/v1/user/star.go b/routers/api/v1/user/star.go
index 4b0cb45d67e..ee5d63063b8 100644
--- a/routers/api/v1/user/star.go
+++ b/routers/api/v1/user/star.go
@@ -50,7 +50,7 @@ func GetStarredRepos(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose starred repos are to be listed
// type: string
// required: true
// - name: page
diff --git a/routers/api/v1/user/user.go b/routers/api/v1/user/user.go
index 2b98fb5ac7d..6de1125c40e 100644
--- a/routers/api/v1/user/user.go
+++ b/routers/api/v1/user/user.go
@@ -110,7 +110,7 @@ func GetInfo(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to get
+ // description: username of the user whose data is to be listed
// type: string
// required: true
// responses:
@@ -151,7 +151,7 @@ func GetUserHeatmapData(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user to get
+ // description: username of the user whose heatmap is to be obtained
// type: string
// required: true
// responses:
@@ -177,7 +177,7 @@ func ListUserActivityFeeds(ctx *context.APIContext) {
// parameters:
// - name: username
// in: path
- // description: username of user
+ // description: username of the user whose activity feeds are to be listed
// type: string
// required: true
// - name: only-performed-by
diff --git a/routers/api/v1/user/watch.go b/routers/api/v1/user/watch.go
index 76d7c817937..844eac2c674 100644
--- a/routers/api/v1/user/watch.go
+++ b/routers/api/v1/user/watch.go
@@ -49,7 +49,7 @@ func GetWatchedRepos(ctx *context.APIContext) {
// - name: username
// type: string
// in: path
- // description: username of the user
+ // description: username of the user whose watched repos are to be listed
// required: true
// - name: page
// in: query
diff --git a/routers/api/v1/utils/hook.go b/routers/api/v1/utils/hook.go
index 3bbd292718f..6f598f14c8b 100644
--- a/routers/api/v1/utils/hook.go
+++ b/routers/api/v1/utils/hook.go
@@ -173,6 +173,7 @@ func updateHookEvents(events []string) webhook_module.HookEvents {
hookEvents[webhook_module.HookEventRelease] = util.SliceContainsString(events, string(webhook_module.HookEventRelease), true)
hookEvents[webhook_module.HookEventPackage] = util.SliceContainsString(events, string(webhook_module.HookEventPackage), true)
hookEvents[webhook_module.HookEventStatus] = util.SliceContainsString(events, string(webhook_module.HookEventStatus), true)
+ hookEvents[webhook_module.HookEventWorkflowRun] = util.SliceContainsString(events, string(webhook_module.HookEventWorkflowRun), true)
hookEvents[webhook_module.HookEventWorkflowJob] = util.SliceContainsString(events, string(webhook_module.HookEventWorkflowJob), true)
// Issues
diff --git a/routers/common/pagetmpl.go b/routers/common/pagetmpl.go
index 52c9fceba32..c48596d48b6 100644
--- a/routers/common/pagetmpl.go
+++ b/routers/common/pagetmpl.go
@@ -6,6 +6,7 @@ package common
import (
goctx "context"
"errors"
+ "sync"
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/db"
@@ -22,8 +23,7 @@ type StopwatchTmplInfo struct {
Seconds int64
}
-func getActiveStopwatch(goCtx goctx.Context) *StopwatchTmplInfo {
- ctx := context.GetWebContext(goCtx)
+func getActiveStopwatch(ctx *context.Context) *StopwatchTmplInfo {
if ctx.Doer == nil {
return nil
}
@@ -48,8 +48,7 @@ func getActiveStopwatch(goCtx goctx.Context) *StopwatchTmplInfo {
}
}
-func notificationUnreadCount(goCtx goctx.Context) int64 {
- ctx := context.GetWebContext(goCtx)
+func notificationUnreadCount(ctx *context.Context) int64 {
if ctx.Doer == nil {
return 0
}
@@ -66,10 +65,19 @@ func notificationUnreadCount(goCtx goctx.Context) int64 {
return count
}
-func PageTmplFunctions(ctx *context.Context) {
- if ctx.IsSigned {
- // defer the function call to the last moment when the tmpl renders
- ctx.Data["NotificationUnreadCount"] = notificationUnreadCount
- ctx.Data["GetActiveStopwatch"] = getActiveStopwatch
- }
+type pageGlobalDataType struct {
+ IsSigned bool
+ IsSiteAdmin bool
+
+ GetNotificationUnreadCount func() int64
+ GetActiveStopwatch func() *StopwatchTmplInfo
+}
+
+func PageGlobalData(ctx *context.Context) {
+ var data pageGlobalDataType
+ data.IsSigned = ctx.Doer != nil
+ data.IsSiteAdmin = ctx.Doer != nil && ctx.Doer.IsAdmin
+ data.GetNotificationUnreadCount = sync.OnceValue(func() int64 { return notificationUnreadCount(ctx) })
+ data.GetActiveStopwatch = sync.OnceValue(func() *StopwatchTmplInfo { return getActiveStopwatch(ctx) })
+ ctx.Data["PageGlobalData"] = data
}
diff --git a/routers/init.go b/routers/init.go
index 744feee2f0d..2281260a6fa 100644
--- a/routers/init.go
+++ b/routers/init.go
@@ -111,9 +111,9 @@ func InitWebInstallPage(ctx context.Context) {
mustInit(svg.Init)
}
-// InitWebInstalled is for global installed configuration.
+// InitWebInstalled is for the global configuration of an installed instance
func InitWebInstalled(ctx context.Context) {
- mustInitCtx(ctx, git.InitFull)
+ mustInit(git.InitFull)
log.Info("Git version: %s (home: %s)", git.DefaultFeatures().VersionInfo(), git.HomeDir())
if !git.DefaultFeatures().SupportHashSha256 {
log.Warn("sha256 hash support is disabled - requires Git >= 2.42." + util.Iif(git.DefaultFeatures().UsingGogit, " Gogit is currently unsupported.", ""))
diff --git a/routers/install/install.go b/routers/install/install.go
index 2962f3948fe..4a9dabac6fe 100644
--- a/routers/install/install.go
+++ b/routers/install/install.go
@@ -10,6 +10,7 @@ import (
"os"
"os/exec"
"path/filepath"
+ "slices"
"strconv"
"strings"
"time"
@@ -98,14 +99,7 @@ func Install(ctx *context.Context) {
form.SSLMode = setting.Database.SSLMode
curDBType := setting.Database.Type.String()
- var isCurDBTypeSupported bool
- for _, dbType := range setting.SupportedDatabaseTypes {
- if dbType == curDBType {
- isCurDBTypeSupported = true
- break
- }
- }
- if !isCurDBTypeSupported {
+ if !slices.Contains(setting.SupportedDatabaseTypes, curDBType) {
curDBType = "mysql"
}
ctx.Data["CurDbType"] = curDBType
@@ -186,20 +180,20 @@ func checkDatabase(ctx *context.Context, form *forms.InstallForm) bool {
return false
}
- err = db_install.CheckDatabaseConnection()
+ err = db_install.CheckDatabaseConnection(ctx)
if err != nil {
ctx.Data["Err_DbSetting"] = true
ctx.RenderWithErr(ctx.Tr("install.invalid_db_setting", err), tplInstall, form)
return false
}
- hasPostInstallationUser, err := db_install.HasPostInstallationUsers()
+ hasPostInstallationUser, err := db_install.HasPostInstallationUsers(ctx)
if err != nil {
ctx.Data["Err_DbSetting"] = true
ctx.RenderWithErr(ctx.Tr("install.invalid_db_table", "user", err), tplInstall, form)
return false
}
- dbMigrationVersion, err := db_install.GetMigrationVersion()
+ dbMigrationVersion, err := db_install.GetMigrationVersion(ctx)
if err != nil {
ctx.Data["Err_DbSetting"] = true
ctx.RenderWithErr(ctx.Tr("install.invalid_db_table", "version", err), tplInstall, form)
@@ -606,6 +600,8 @@ func SubmitInstall(ctx *context.Context) {
// InstallDone shows the "post-install" page, makes it easier to develop the page.
// The name is not called as "PostInstall" to avoid misinterpretation as a handler for "POST /install"
-func InstallDone(ctx *context.Context) { //nolint
+func InstallDone(ctx *context.Context) { //nolint:revive // export stutter
+ hasUsers, _ := user_model.HasUsers(ctx)
+ ctx.Data["IsAccountCreated"] = hasUsers.HasAnyUser
ctx.HTML(http.StatusOK, tplPostInstall)
}
diff --git a/routers/private/hook_post_receive.go b/routers/private/hook_post_receive.go
index fb5a825ae0e..6d6ee10de6b 100644
--- a/routers/private/hook_post_receive.go
+++ b/routers/private/hook_post_receive.go
@@ -211,25 +211,19 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
return
}
- cols := make([]string, 0, 2)
-
- if isPrivate.Has() {
+ // FIXME: these options are not quite right, for example: changing visibility should do more works than just setting the is_private flag
+ // These options should only be used for "push-to-create"
+ if isPrivate.Has() && repo.IsPrivate != isPrivate.Value() {
+ // TODO: it needs to do more work
repo.IsPrivate = isPrivate.Value()
- cols = append(cols, "is_private")
+ if err = repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "is_private"); err != nil {
+ ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{Err: "Failed to change visibility"})
+ }
}
-
- if isTemplate.Has() {
+ if isTemplate.Has() && repo.IsTemplate != isTemplate.Value() {
repo.IsTemplate = isTemplate.Value()
- cols = append(cols, "is_template")
- }
-
- if len(cols) > 0 {
- if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, cols...); err != nil {
- log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
- ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
- Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err),
- })
- return
+ if err = repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "is_template"); err != nil {
+ ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{Err: "Failed to change template status"})
}
}
}
diff --git a/routers/private/hook_post_receive_test.go b/routers/private/hook_post_receive_test.go
index ca721b16d1b..23b8085e949 100644
--- a/routers/private/hook_post_receive_test.go
+++ b/routers/private/hook_post_receive_test.go
@@ -6,7 +6,6 @@ package private
import (
"testing"
- "code.gitea.io/gitea/models/db"
issues_model "code.gitea.io/gitea/models/issues"
pull_model "code.gitea.io/gitea/models/pull"
repo_model "code.gitea.io/gitea/models/repo"
@@ -21,13 +20,13 @@ import (
func TestHandlePullRequestMerging(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- pr, err := issues_model.GetUnmergedPullRequest(db.DefaultContext, 1, 1, "branch2", "master", issues_model.PullRequestFlowGithub)
+ pr, err := issues_model.GetUnmergedPullRequest(t.Context(), 1, 1, "branch2", "master", issues_model.PullRequestFlowGithub)
assert.NoError(t, err)
- assert.NoError(t, pr.LoadBaseRepo(db.DefaultContext))
+ assert.NoError(t, pr.LoadBaseRepo(t.Context()))
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
- err = pull_model.ScheduleAutoMerge(db.DefaultContext, user1, pr.ID, repo_model.MergeStyleSquash, "squash merge a pr", false)
+ err = pull_model.ScheduleAutoMerge(t.Context(), user1, pr.ID, repo_model.MergeStyleSquash, "squash merge a pr", false)
assert.NoError(t, err)
autoMerge := unittest.AssertExistsAndLoadBean(t, &pull_model.AutoMerge{PullID: pr.ID})
@@ -40,7 +39,7 @@ func TestHandlePullRequestMerging(t *testing.T) {
{NewCommitID: "01234567"},
})
assert.Empty(t, resp.Body.String())
- pr, err = issues_model.GetPullRequestByID(db.DefaultContext, pr.ID)
+ pr, err = issues_model.GetPullRequestByID(t.Context(), pr.ID)
assert.NoError(t, err)
assert.True(t, pr.HasMerged)
assert.Equal(t, "01234567", pr.MergedCommitID)
diff --git a/routers/private/hook_verification_test.go b/routers/private/hook_verification_test.go
index f6c2e1087f7..8653e34daa4 100644
--- a/routers/private/hook_verification_test.go
+++ b/routers/private/hook_verification_test.go
@@ -18,7 +18,9 @@ func TestVerifyCommits(t *testing.T) {
unittest.PrepareTestEnv(t)
gitRepo, err := git.OpenRepository(t.Context(), testReposDir+"repo1_hook_verification")
- defer gitRepo.Close()
+ if err != nil {
+ defer gitRepo.Close()
+ }
assert.NoError(t, err)
objectFormat, err := gitRepo.GetObjectFormat()
diff --git a/routers/web/admin/auths.go b/routers/web/admin/auths.go
index 80d554b6e35..fb1a7d95240 100644
--- a/routers/web/admin/auths.go
+++ b/routers/web/admin/auths.go
@@ -97,7 +97,7 @@ func NewAuthSource(ctx *context.Context) {
ctx.Data["AuthSources"] = authSources
ctx.Data["SecurityProtocols"] = securityProtocols
ctx.Data["SMTPAuths"] = smtp.Authenticators
- oauth2providers := oauth2.GetSupportedOAuth2Providers()
+ oauth2providers := oauth2.GetSupportedOAuth2Providers(ctx)
ctx.Data["OAuth2Providers"] = oauth2providers
ctx.Data["SSPIAutoCreateUsers"] = true
@@ -107,7 +107,9 @@ func NewAuthSource(ctx *context.Context) {
ctx.Data["SSPIDefaultLanguage"] = ""
// only the first as default
- ctx.Data["oauth2_provider"] = oauth2providers[0].Name()
+ if len(oauth2providers) > 0 {
+ ctx.Data["oauth2_provider"] = oauth2providers[0].Name()
+ }
ctx.HTML(http.StatusOK, tplAuthNew)
}
@@ -177,7 +179,7 @@ func parseOAuth2Config(form forms.AuthenticationForm) *oauth2.Source {
customURLMapping = nil
}
var scopes []string
- for _, s := range strings.Split(form.Oauth2Scopes, ",") {
+ for s := range strings.SplitSeq(form.Oauth2Scopes, ",") {
s = strings.TrimSpace(s)
if s != "" {
scopes = append(scopes, s)
@@ -199,6 +201,9 @@ func parseOAuth2Config(form forms.AuthenticationForm) *oauth2.Source {
AdminGroup: form.Oauth2AdminGroup,
GroupTeamMap: form.Oauth2GroupTeamMap,
GroupTeamMapRemoval: form.Oauth2GroupTeamMapRemoval,
+
+ SSHPublicKeyClaimName: form.Oauth2SSHPublicKeyClaimName,
+ FullNameClaimName: form.Oauth2FullNameClaimName,
}
}
@@ -237,7 +242,7 @@ func NewAuthSourcePost(ctx *context.Context) {
ctx.Data["AuthSources"] = authSources
ctx.Data["SecurityProtocols"] = securityProtocols
ctx.Data["SMTPAuths"] = smtp.Authenticators
- oauth2providers := oauth2.GetSupportedOAuth2Providers()
+ oauth2providers := oauth2.GetSupportedOAuth2Providers(ctx)
ctx.Data["OAuth2Providers"] = oauth2providers
ctx.Data["SSPIAutoCreateUsers"] = true
@@ -329,7 +334,7 @@ func EditAuthSource(ctx *context.Context) {
ctx.Data["SecurityProtocols"] = securityProtocols
ctx.Data["SMTPAuths"] = smtp.Authenticators
- oauth2providers := oauth2.GetSupportedOAuth2Providers()
+ oauth2providers := oauth2.GetSupportedOAuth2Providers(ctx)
ctx.Data["OAuth2Providers"] = oauth2providers
source, err := auth.GetSourceByID(ctx, ctx.PathParamInt64("authid"))
@@ -363,7 +368,7 @@ func EditAuthSourcePost(ctx *context.Context) {
ctx.Data["PageIsAdminAuthentications"] = true
ctx.Data["SMTPAuths"] = smtp.Authenticators
- oauth2providers := oauth2.GetSupportedOAuth2Providers()
+ oauth2providers := oauth2.GetSupportedOAuth2Providers(ctx)
ctx.Data["OAuth2Providers"] = oauth2providers
source, err := auth.GetSourceByID(ctx, ctx.PathParamInt64("authid"))
diff --git a/routers/web/admin/config.go b/routers/web/admin/config.go
index 520f14e89fa..310ebd3f6d4 100644
--- a/routers/web/admin/config.go
+++ b/routers/web/admin/config.go
@@ -61,7 +61,7 @@ func TestCache(ctx *context.Context) {
func shadowPasswordKV(cfgItem, splitter string) string {
fields := strings.Split(cfgItem, splitter)
- for i := 0; i < len(fields); i++ {
+ for i := range fields {
if strings.HasPrefix(fields[i], "password=") {
fields[i] = "password=******"
break
@@ -196,17 +196,21 @@ func ConfigSettings(ctx *context.Context) {
}
func ChangeConfig(ctx *context.Context) {
- key := strings.TrimSpace(ctx.FormString("key"))
- value := ctx.FormString("value")
cfg := setting.Config()
- marshalBool := func(v string) (string, error) { //nolint:unparam
- if b, _ := strconv.ParseBool(v); b {
- return "true", nil
- }
- return "false", nil
+ marshalBool := func(v string) ([]byte, error) {
+ b, _ := strconv.ParseBool(v)
+ return json.Marshal(b)
}
- marshalOpenWithApps := func(value string) (string, error) {
+
+ marshalString := func(emptyDefault string) func(v string) ([]byte, error) {
+ return func(v string) ([]byte, error) {
+ return json.Marshal(util.IfZero(v, emptyDefault))
+ }
+ }
+
+ marshalOpenWithApps := func(value string) ([]byte, error) {
+ // TODO: move the block alongside OpenWithEditorAppsType.ToTextareaString
lines := strings.Split(value, "\n")
var openWithEditorApps setting.OpenWithEditorAppsType
for _, line := range lines {
@@ -224,32 +228,47 @@ func ChangeConfig(ctx *context.Context) {
OpenURL: strings.TrimSpace(openURL),
})
}
- b, err := json.Marshal(openWithEditorApps)
- if err != nil {
- return "", err
- }
- return string(b), nil
+ return json.Marshal(openWithEditorApps)
}
- marshallers := map[string]func(string) (string, error){
+ marshallers := map[string]func(string) ([]byte, error){
cfg.Picture.DisableGravatar.DynKey(): marshalBool,
cfg.Picture.EnableFederatedAvatar.DynKey(): marshalBool,
cfg.Repository.OpenWithEditorApps.DynKey(): marshalOpenWithApps,
- }
- marshaller, hasMarshaller := marshallers[key]
- if !hasMarshaller {
- ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
- return
- }
- marshaledValue, err := marshaller(value)
- if err != nil {
- ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
- return
- }
- if err = system_model.SetSettings(ctx, map[string]string{key: marshaledValue}); err != nil {
- ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
- return
+ cfg.Repository.GitGuideRemoteName.DynKey(): marshalString(cfg.Repository.GitGuideRemoteName.DefaultValue()),
}
+ _ = ctx.Req.ParseForm()
+ configKeys := ctx.Req.Form["key"]
+ configValues := ctx.Req.Form["value"]
+ configSettings := map[string]string{}
+loop:
+ for i, key := range configKeys {
+ if i >= len(configValues) {
+ ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
+ break loop
+ }
+ value := configValues[i]
+
+ marshaller, hasMarshaller := marshallers[key]
+ if !hasMarshaller {
+ ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
+ break loop
+ }
+
+ marshaledValue, err := marshaller(value)
+ if err != nil {
+ ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
+ break loop
+ }
+ configSettings[key] = string(marshaledValue)
+ }
+ if ctx.Written() {
+ return
+ }
+ if err := system_model.SetSettings(ctx, configSettings); err != nil {
+ ctx.ServerError("SetSettings", err)
+ return
+ }
config.GetDynGetter().InvalidateCache()
ctx.JSONOK()
}
diff --git a/routers/web/admin/diagnosis.go b/routers/web/admin/diagnosis.go
index d040dbe0ba3..5395529d66a 100644
--- a/routers/web/admin/diagnosis.go
+++ b/routers/web/admin/diagnosis.go
@@ -16,13 +16,7 @@ import (
)
func MonitorDiagnosis(ctx *context.Context) {
- seconds := ctx.FormInt64("seconds")
- if seconds <= 1 {
- seconds = 1
- }
- if seconds > 300 {
- seconds = 300
- }
+ seconds := min(max(ctx.FormInt64("seconds"), 1), 300)
httplib.ServeSetHeaders(ctx.Resp, &httplib.ServeHeaderOptions{
ContentType: "application/zip",
diff --git a/routers/web/admin/notice.go b/routers/web/admin/notice.go
index 21a8ab0d176..e9d6abbe92e 100644
--- a/routers/web/admin/notice.go
+++ b/routers/web/admin/notice.go
@@ -26,10 +26,7 @@ func Notices(ctx *context.Context) {
ctx.Data["PageIsAdminNotices"] = true
total := system_model.CountNotices(ctx)
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
notices, err := system_model.Notices(ctx, page, setting.UI.Admin.NoticePagingNum)
if err != nil {
diff --git a/routers/web/admin/packages.go b/routers/web/admin/packages.go
index 51223422595..1904bfee11e 100644
--- a/routers/web/admin/packages.go
+++ b/routers/web/admin/packages.go
@@ -24,10 +24,7 @@ const (
// Packages shows all packages
func Packages(ctx *context.Context) {
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
query := ctx.FormTrim("q")
packageType := ctx.FormTrim("type")
sort := ctx.FormTrim("sort")
diff --git a/routers/web/auth/2fa.go b/routers/web/auth/2fa.go
index d15d33dfd45..1f087a78971 100644
--- a/routers/web/auth/2fa.go
+++ b/routers/web/auth/2fa.go
@@ -14,7 +14,6 @@ import (
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/services/context"
- "code.gitea.io/gitea/services/externalaccount"
"code.gitea.io/gitea/services/forms"
)
@@ -75,7 +74,7 @@ func TwoFactorPost(ctx *context.Context) {
}
if ctx.Session.Get("linkAccount") != nil {
- err = externalaccount.LinkAccountFromStore(ctx, ctx.Session, u)
+ err = linkAccountFromContext(ctx, u)
if err != nil {
ctx.ServerError("UserSignIn", err)
return
diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go
index 87edbc357bc..2ccd1c71b5c 100644
--- a/routers/web/auth/auth.go
+++ b/routers/web/auth/auth.go
@@ -329,6 +329,7 @@ func handleSignInFull(ctx *context.Context, u *user_model.User, remember, obeyRe
"twofaUid",
"twofaRemember",
"linkAccount",
+ "linkAccountData",
}, map[string]any{
session.KeyUID: u.ID,
session.KeyUname: u.Name,
@@ -421,9 +422,11 @@ func SignOut(ctx *context.Context) {
// SignUp render the register page
func SignUp(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("sign_up")
-
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"
+ hasUsers, _ := user_model.HasUsers(ctx)
+ ctx.Data["IsFirstTimeRegistration"] = !hasUsers.HasAnyUser
+
oauth2Providers, err := oauth2.GetOAuth2Providers(ctx, optional.Some(true))
if err != nil {
ctx.ServerError("UserSignUp", err)
@@ -517,7 +520,7 @@ func SignUpPost(ctx *context.Context) {
Passwd: form.Password,
}
- if !createAndHandleCreatedUser(ctx, tplSignUp, form, u, nil, nil, false) {
+ if !createAndHandleCreatedUser(ctx, tplSignUp, form, u, nil, nil) {
// error already handled
return
}
@@ -528,22 +531,22 @@ func SignUpPost(ctx *context.Context) {
// createAndHandleCreatedUser calls createUserInContext and
// then handleUserCreated.
-func createAndHandleCreatedUser(ctx *context.Context, tpl templates.TplName, form any, u *user_model.User, overwrites *user_model.CreateUserOverwriteOptions, gothUser *goth.User, allowLink bool) bool {
- if !createUserInContext(ctx, tpl, form, u, overwrites, gothUser, allowLink) {
+func createAndHandleCreatedUser(ctx *context.Context, tpl templates.TplName, form any, u *user_model.User, overwrites *user_model.CreateUserOverwriteOptions, possibleLinkAccountData *LinkAccountData) bool {
+ if !createUserInContext(ctx, tpl, form, u, overwrites, possibleLinkAccountData) {
return false
}
- return handleUserCreated(ctx, u, gothUser)
+ return handleUserCreated(ctx, u, possibleLinkAccountData)
}
// createUserInContext creates a user and handles errors within a given context.
-// Optionally a template can be specified.
-func createUserInContext(ctx *context.Context, tpl templates.TplName, form any, u *user_model.User, overwrites *user_model.CreateUserOverwriteOptions, gothUser *goth.User, allowLink bool) (ok bool) {
+// Optionally, a template can be specified.
+func createUserInContext(ctx *context.Context, tpl templates.TplName, form any, u *user_model.User, overwrites *user_model.CreateUserOverwriteOptions, possibleLinkAccountData *LinkAccountData) (ok bool) {
meta := &user_model.Meta{
InitialIP: ctx.RemoteAddr(),
InitialUserAgent: ctx.Req.UserAgent(),
}
if err := user_model.CreateUser(ctx, u, meta, overwrites); err != nil {
- if allowLink && (user_model.IsErrUserAlreadyExist(err) || user_model.IsErrEmailAlreadyUsed(err)) {
+ if possibleLinkAccountData != nil && (user_model.IsErrUserAlreadyExist(err) || user_model.IsErrEmailAlreadyUsed(err)) {
switch setting.OAuth2Client.AccountLinking {
case setting.OAuth2AccountLinkingAuto:
var user *user_model.User
@@ -559,15 +562,15 @@ func createUserInContext(ctx *context.Context, tpl templates.TplName, form any,
}
// TODO: probably we should respect 'remember' user's choice...
- linkAccount(ctx, user, *gothUser, true)
+ oauth2LinkAccount(ctx, user, possibleLinkAccountData, true)
return false // user is already created here, all redirects are handled
case setting.OAuth2AccountLinkingLogin:
- showLinkingLogin(ctx, *gothUser)
+ showLinkingLogin(ctx, possibleLinkAccountData.AuthSourceID, possibleLinkAccountData.GothUser)
return false // user will be created only after linking login
}
}
- // handle error without template
+ // handle error without a template
if len(tpl) == 0 {
ctx.ServerError("CreateUser", err)
return false
@@ -608,9 +611,15 @@ func createUserInContext(ctx *context.Context, tpl templates.TplName, form any,
// handleUserCreated does additional steps after a new user is created.
// It auto-sets admin for the only user, updates the optional external user and
// sends a confirmation email if required.
-func handleUserCreated(ctx *context.Context, u *user_model.User, gothUser *goth.User) (ok bool) {
+func handleUserCreated(ctx *context.Context, u *user_model.User, possibleLinkAccountData *LinkAccountData) (ok bool) {
// Auto-set admin for the only user.
- if user_model.CountUsers(ctx, nil) == 1 {
+ hasUsers, err := user_model.HasUsers(ctx)
+ if err != nil {
+ ctx.ServerError("HasUsers", err)
+ return false
+ }
+ if hasUsers.HasOnlyOneUser {
+ // the only user is the one just created, will set it as admin
opts := &user_service.UpdateOptions{
IsActive: optional.Some(true),
IsAdmin: user_service.UpdateOptionFieldFromValue(true),
@@ -623,8 +632,8 @@ func handleUserCreated(ctx *context.Context, u *user_model.User, gothUser *goth.
}
// update external user information
- if gothUser != nil {
- if err := externalaccount.EnsureLinkExternalToUser(ctx, u, *gothUser); err != nil {
+ if possibleLinkAccountData != nil {
+ if err := externalaccount.EnsureLinkExternalToUser(ctx, possibleLinkAccountData.AuthSourceID, u, possibleLinkAccountData.GothUser); err != nil {
log.Error("EnsureLinkExternalToUser failed: %v", err)
}
}
diff --git a/routers/web/auth/auth_test.go b/routers/web/auth/auth_test.go
index e238125407b..5ccffe0d505 100644
--- a/routers/web/auth/auth_test.go
+++ b/routers/web/auth/auth_test.go
@@ -9,7 +9,6 @@ import (
"testing"
auth_model "code.gitea.io/gitea/models/auth"
- "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/session"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
@@ -24,7 +23,7 @@ import (
func addOAuth2Source(t *testing.T, authName string, cfg oauth2.Source) {
cfg.Provider = util.IfZero(cfg.Provider, "gitea")
- err := auth_model.CreateSource(db.DefaultContext, &auth_model.Source{
+ err := auth_model.CreateSource(t.Context(), &auth_model.Source{
Type: auth_model.OAuth2,
Name: authName,
IsActive: true,
@@ -64,13 +63,14 @@ func TestUserLogin(t *testing.T) {
func TestSignUpOAuth2Login(t *testing.T) {
defer test.MockVariableValue(&setting.OAuth2Client.EnableAutoRegistration, true)()
+ _ = oauth2.Init(t.Context())
addOAuth2Source(t, "dummy-auth-source", oauth2.Source{})
t.Run("OAuth2MissingField", func(t *testing.T) {
defer test.MockVariableValue(&gothic.CompleteUserAuth, func(res http.ResponseWriter, req *http.Request) (goth.User, error) {
return goth.User{Provider: "dummy-auth-source", UserID: "dummy-user"}, nil
})()
- mockOpt := contexttest.MockContextOption{SessionStore: session.NewMockStore("dummy-sid")}
+ mockOpt := contexttest.MockContextOption{SessionStore: session.NewMockMemStore("dummy-sid")}
ctx, resp := contexttest.MockContext(t, "/user/oauth2/dummy-auth-source/callback?code=dummy-code", mockOpt)
ctx.SetPathParam("provider", "dummy-auth-source")
SignInOAuthCallback(ctx)
@@ -84,7 +84,7 @@ func TestSignUpOAuth2Login(t *testing.T) {
})
t.Run("OAuth2CallbackError", func(t *testing.T) {
- mockOpt := contexttest.MockContextOption{SessionStore: session.NewMockStore("dummy-sid")}
+ mockOpt := contexttest.MockContextOption{SessionStore: session.NewMockMemStore("dummy-sid")}
ctx, resp := contexttest.MockContext(t, "/user/oauth2/dummy-auth-source/callback", mockOpt)
ctx.SetPathParam("provider", "dummy-auth-source")
SignInOAuthCallback(ctx)
diff --git a/routers/web/auth/linkaccount.go b/routers/web/auth/linkaccount.go
index b3c61946b91..c624d896ca7 100644
--- a/routers/web/auth/linkaccount.go
+++ b/routers/web/auth/linkaccount.go
@@ -5,7 +5,6 @@ package auth
import (
"errors"
- "fmt"
"net/http"
"strings"
@@ -21,8 +20,6 @@ import (
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/externalaccount"
"code.gitea.io/gitea/services/forms"
-
- "github.com/markbates/goth"
)
var tplLinkAccount templates.TplName = "user/auth/link_account"
@@ -52,28 +49,28 @@ func LinkAccount(ctx *context.Context) {
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
- gothUser, ok := ctx.Session.Get("linkAccountGothUser").(goth.User)
+ linkAccountData := oauth2GetLinkAccountData(ctx)
// If you'd like to quickly debug the "link account" page layout, just uncomment the blow line
// Don't worry, when the below line exists, the lint won't pass: ineffectual assignment to gothUser (ineffassign)
- // gothUser, ok = goth.User{Email: "invalid-email", Name: "."}, true // intentionally use invalid data to avoid pass the registration check
+ // linkAccountData = &LinkAccountData{authSource, gothUser} // intentionally use invalid data to avoid pass the registration check
- if !ok {
+ if linkAccountData == nil {
// no account in session, so just redirect to the login page, then the user could restart the process
ctx.Redirect(setting.AppSubURL + "/user/login")
return
}
- if missingFields, ok := gothUser.RawData["__giteaAutoRegMissingFields"].([]string); ok {
- ctx.Data["AutoRegistrationFailedPrompt"] = ctx.Tr("auth.oauth_callback_unable_auto_reg", gothUser.Provider, strings.Join(missingFields, ","))
+ if missingFields, ok := linkAccountData.GothUser.RawData["__giteaAutoRegMissingFields"].([]string); ok {
+ ctx.Data["AutoRegistrationFailedPrompt"] = ctx.Tr("auth.oauth_callback_unable_auto_reg", linkAccountData.GothUser.Provider, strings.Join(missingFields, ","))
}
- uname, err := extractUserNameFromOAuth2(&gothUser)
+ uname, err := extractUserNameFromOAuth2(&linkAccountData.GothUser)
if err != nil {
ctx.ServerError("UserSignIn", err)
return
}
- email := gothUser.Email
+ email := linkAccountData.GothUser.Email
ctx.Data["user_name"] = uname
ctx.Data["email"] = email
@@ -152,8 +149,8 @@ func LinkAccountPostSignIn(ctx *context.Context) {
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
- gothUser := ctx.Session.Get("linkAccountGothUser")
- if gothUser == nil {
+ linkAccountData := oauth2GetLinkAccountData(ctx)
+ if linkAccountData == nil {
ctx.ServerError("UserSignIn", errors.New("not in LinkAccount session"))
return
}
@@ -169,11 +166,14 @@ func LinkAccountPostSignIn(ctx *context.Context) {
return
}
- linkAccount(ctx, u, gothUser.(goth.User), signInForm.Remember)
+ oauth2LinkAccount(ctx, u, linkAccountData, signInForm.Remember)
}
-func linkAccount(ctx *context.Context, u *user_model.User, gothUser goth.User, remember bool) {
- updateAvatarIfNeed(ctx, gothUser.AvatarURL, u)
+func oauth2LinkAccount(ctx *context.Context, u *user_model.User, linkAccountData *LinkAccountData, remember bool) {
+ oauth2SignInSync(ctx, linkAccountData.AuthSourceID, u, linkAccountData.GothUser)
+ if ctx.Written() {
+ return
+ }
// If this user is enrolled in 2FA, we can't sign the user in just yet.
// Instead, redirect them to the 2FA authentication page.
@@ -185,7 +185,7 @@ func linkAccount(ctx *context.Context, u *user_model.User, gothUser goth.User, r
return
}
- err = externalaccount.LinkAccountToUser(ctx, u, gothUser)
+ err = externalaccount.LinkAccountToUser(ctx, linkAccountData.AuthSourceID, u, linkAccountData.GothUser)
if err != nil {
ctx.ServerError("UserLinkAccount", err)
return
@@ -243,17 +243,11 @@ func LinkAccountPostRegister(ctx *context.Context) {
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
- gothUserInterface := ctx.Session.Get("linkAccountGothUser")
- if gothUserInterface == nil {
+ linkAccountData := oauth2GetLinkAccountData(ctx)
+ if linkAccountData == nil {
ctx.ServerError("UserSignUp", errors.New("not in LinkAccount session"))
return
}
- gothUser, ok := gothUserInterface.(goth.User)
- if !ok {
- ctx.ServerError("UserSignUp", fmt.Errorf("session linkAccountGothUser type is %t but not goth.User", gothUserInterface))
- return
- }
-
if ctx.HasError() {
ctx.HTML(http.StatusOK, tplLinkAccount)
return
@@ -296,31 +290,38 @@ func LinkAccountPostRegister(ctx *context.Context) {
}
}
- authSource, err := auth.GetActiveOAuth2SourceByName(ctx, gothUser.Provider)
- if err != nil {
- ctx.ServerError("CreateUser", err)
- return
- }
-
u := &user_model.User{
Name: form.UserName,
Email: form.Email,
Passwd: form.Password,
LoginType: auth.OAuth2,
- LoginSource: authSource.ID,
- LoginName: gothUser.UserID,
+ LoginSource: linkAccountData.AuthSourceID,
+ LoginName: linkAccountData.GothUser.UserID,
}
- if !createAndHandleCreatedUser(ctx, tplLinkAccount, form, u, nil, &gothUser, false) {
+ if !createAndHandleCreatedUser(ctx, tplLinkAccount, form, u, nil, linkAccountData) {
// error already handled
return
}
+ authSource, err := auth.GetSourceByID(ctx, linkAccountData.AuthSourceID)
+ if err != nil {
+ ctx.ServerError("GetSourceByID", err)
+ return
+ }
source := authSource.Cfg.(*oauth2.Source)
- if err := syncGroupsToTeams(ctx, source, &gothUser, u); err != nil {
+ if err := syncGroupsToTeams(ctx, source, &linkAccountData.GothUser, u); err != nil {
ctx.ServerError("SyncGroupsToTeams", err)
return
}
handleSignIn(ctx, u, false)
}
+
+func linkAccountFromContext(ctx *context.Context, user *user_model.User) error {
+ linkAccountData := oauth2GetLinkAccountData(ctx)
+ if linkAccountData == nil {
+ return errors.New("not in LinkAccount session")
+ }
+ return externalaccount.LinkAccountToUser(ctx, linkAccountData.AuthSourceID, user, linkAccountData.GothUser)
+}
diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go
index a13b987aabe..f1c155e78f5 100644
--- a/routers/web/auth/oauth.go
+++ b/routers/web/auth/oauth.go
@@ -4,6 +4,7 @@
package auth
import (
+ "encoding/gob"
"errors"
"fmt"
"html"
@@ -20,7 +21,6 @@ import (
"code.gitea.io/gitea/modules/optional"
"code.gitea.io/gitea/modules/session"
"code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/modules/web/middleware"
source_service "code.gitea.io/gitea/services/auth/source"
"code.gitea.io/gitea/services/auth/source/oauth2"
@@ -35,9 +35,8 @@ import (
// SignInOAuth handles the OAuth2 login buttons
func SignInOAuth(ctx *context.Context) {
- provider := ctx.PathParam("provider")
-
- authSource, err := auth.GetActiveOAuth2SourceByName(ctx, provider)
+ authName := ctx.PathParam("provider")
+ authSource, err := auth.GetActiveOAuth2SourceByAuthName(ctx, authName)
if err != nil {
ctx.ServerError("SignIn", err)
return
@@ -74,8 +73,6 @@ func SignInOAuth(ctx *context.Context) {
// SignInOAuthCallback handles the callback from the given provider
func SignInOAuthCallback(ctx *context.Context) {
- provider := ctx.PathParam("provider")
-
if ctx.Req.FormValue("error") != "" {
var errorKeyValues []string
for k, vv := range ctx.Req.Form {
@@ -88,7 +85,8 @@ func SignInOAuthCallback(ctx *context.Context) {
}
// first look if the provider is still active
- authSource, err := auth.GetActiveOAuth2SourceByName(ctx, provider)
+ authName := ctx.PathParam("provider")
+ authSource, err := auth.GetActiveOAuth2SourceByAuthName(ctx, authName)
if err != nil {
ctx.ServerError("SignIn", err)
return
@@ -133,7 +131,7 @@ func SignInOAuthCallback(ctx *context.Context) {
if u == nil {
if ctx.Doer != nil {
// attach user to the current signed-in user
- err = externalaccount.LinkAccountToUser(ctx, ctx.Doer, gothUser)
+ err = externalaccount.LinkAccountToUser(ctx, authSource.ID, ctx.Doer, gothUser)
if err != nil {
ctx.ServerError("UserLinkAccount", err)
return
@@ -174,12 +172,11 @@ func SignInOAuthCallback(ctx *context.Context) {
gothUser.RawData = make(map[string]any)
}
gothUser.RawData["__giteaAutoRegMissingFields"] = missingFields
- showLinkingLogin(ctx, gothUser)
+ showLinkingLogin(ctx, authSource.ID, gothUser)
return
}
u = &user_model.User{
Name: uname,
- FullName: gothUser.Name,
Email: gothUser.Email,
LoginType: auth.OAuth2,
LoginSource: authSource.ID,
@@ -196,7 +193,11 @@ func SignInOAuthCallback(ctx *context.Context) {
u.IsAdmin = isAdmin.ValueOrDefault(user_service.UpdateOptionField[bool]{FieldValue: false}).FieldValue
u.IsRestricted = isRestricted.ValueOrDefault(setting.Service.DefaultUserIsRestricted)
- if !createAndHandleCreatedUser(ctx, templates.TplName(""), nil, u, overwriteDefault, &gothUser, setting.OAuth2Client.AccountLinking != setting.OAuth2AccountLinkingDisabled) {
+ linkAccountData := &LinkAccountData{authSource.ID, gothUser}
+ if setting.OAuth2Client.AccountLinking == setting.OAuth2AccountLinkingDisabled {
+ linkAccountData = nil
+ }
+ if !createAndHandleCreatedUser(ctx, "", nil, u, overwriteDefault, linkAccountData) {
// error already handled
return
}
@@ -207,7 +208,7 @@ func SignInOAuthCallback(ctx *context.Context) {
}
} else {
// no existing user is found, request attach or new account
- showLinkingLogin(ctx, gothUser)
+ showLinkingLogin(ctx, authSource.ID, gothUser)
return
}
}
@@ -271,17 +272,36 @@ func getUserAdminAndRestrictedFromGroupClaims(source *oauth2.Source, gothUser *g
return isAdmin, isRestricted
}
-func showLinkingLogin(ctx *context.Context, gothUser goth.User) {
- if err := updateSession(ctx, nil, map[string]any{
- "linkAccountGothUser": gothUser,
- }); err != nil {
- ctx.ServerError("updateSession", err)
+type LinkAccountData struct {
+ AuthSourceID int64
+ GothUser goth.User
+}
+
+func oauth2GetLinkAccountData(ctx *context.Context) *LinkAccountData {
+ gob.Register(LinkAccountData{})
+ v, ok := ctx.Session.Get("linkAccountData").(LinkAccountData)
+ if !ok {
+ return nil
+ }
+ return &v
+}
+
+func Oauth2SetLinkAccountData(ctx *context.Context, linkAccountData LinkAccountData) error {
+ gob.Register(LinkAccountData{})
+ return updateSession(ctx, nil, map[string]any{
+ "linkAccountData": linkAccountData,
+ })
+}
+
+func showLinkingLogin(ctx *context.Context, authSourceID int64, gothUser goth.User) {
+ if err := Oauth2SetLinkAccountData(ctx, LinkAccountData{authSourceID, gothUser}); err != nil {
+ ctx.ServerError("Oauth2SetLinkAccountData", err)
return
}
ctx.Redirect(setting.AppSubURL + "/user/link_account")
}
-func updateAvatarIfNeed(ctx *context.Context, url string, u *user_model.User) {
+func oauth2UpdateAvatarIfNeed(ctx *context.Context, url string, u *user_model.User) {
if setting.OAuth2Client.UpdateAvatar && len(url) > 0 {
resp, err := http.Get(url)
if err == nil {
@@ -299,11 +319,14 @@ func updateAvatarIfNeed(ctx *context.Context, url string, u *user_model.User) {
}
}
-func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model.User, gothUser goth.User) {
- updateAvatarIfNeed(ctx, gothUser.AvatarURL, u)
+func handleOAuth2SignIn(ctx *context.Context, authSource *auth.Source, u *user_model.User, gothUser goth.User) {
+ oauth2SignInSync(ctx, authSource.ID, u, gothUser)
+ if ctx.Written() {
+ return
+ }
needs2FA := false
- if !source.TwoFactorShouldSkip() {
+ if !authSource.TwoFactorShouldSkip() {
_, err := auth.GetTwoFactorByUID(ctx, u.ID)
if err != nil && !auth.IsErrTwoFactorNotEnrolled(err) {
ctx.ServerError("UserSignIn", err)
@@ -312,7 +335,7 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
needs2FA = err == nil
}
- oauth2Source := source.Cfg.(*oauth2.Source)
+ oauth2Source := authSource.Cfg.(*oauth2.Source)
groupTeamMapping, err := auth_module.UnmarshalGroupTeamMapping(oauth2Source.GroupTeamMap)
if err != nil {
ctx.ServerError("UnmarshalGroupTeamMapping", err)
@@ -338,7 +361,7 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
}
}
- if err := externalaccount.EnsureLinkExternalToUser(ctx, u, gothUser); err != nil {
+ if err := externalaccount.EnsureLinkExternalToUser(ctx, authSource.ID, u, gothUser); err != nil {
ctx.ServerError("EnsureLinkExternalToUser", err)
return
}
diff --git a/routers/web/auth/oauth2_provider.go b/routers/web/auth/oauth2_provider.go
index 1804b5b1939..79989d8fbe6 100644
--- a/routers/web/auth/oauth2_provider.go
+++ b/routers/web/auth/oauth2_provider.go
@@ -4,7 +4,6 @@
package auth
import (
- "errors"
"fmt"
"html"
"html/template"
@@ -15,7 +14,7 @@ import (
"code.gitea.io/gitea/models/auth"
user_model "code.gitea.io/gitea/models/user"
- "code.gitea.io/gitea/modules/base"
+ "code.gitea.io/gitea/modules/auth/httpauth"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
@@ -108,9 +107,8 @@ func InfoOAuth(ctx *context.Context) {
var accessTokenScope auth.AccessTokenScope
if auHead := ctx.Req.Header.Get("Authorization"); auHead != "" {
- auths := strings.Fields(auHead)
- if len(auths) == 2 && (auths[0] == "token" || strings.ToLower(auths[0]) == "bearer") {
- accessTokenScope, _ = auth_service.GetOAuthAccessTokenScopeAndUserID(ctx, auths[1])
+ if parsed, ok := httpauth.ParseAuthorizationHeader(auHead); ok && parsed.BearerToken != nil {
+ accessTokenScope, _ = auth_service.GetOAuthAccessTokenScopeAndUserID(ctx, parsed.BearerToken.Token)
}
}
@@ -127,18 +125,12 @@ func InfoOAuth(ctx *context.Context) {
ctx.JSON(http.StatusOK, response)
}
-func parseBasicAuth(ctx *context.Context) (username, password string, err error) {
- authHeader := ctx.Req.Header.Get("Authorization")
- if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
- return base.BasicAuthDecode(authData)
- }
- return "", "", errors.New("invalid basic authentication")
-}
-
// IntrospectOAuth introspects an oauth token
func IntrospectOAuth(ctx *context.Context) {
clientIDValid := false
- if clientID, clientSecret, err := parseBasicAuth(ctx); err == nil {
+ authHeader := ctx.Req.Header.Get("Authorization")
+ if parsed, ok := httpauth.ParseAuthorizationHeader(authHeader); ok && parsed.BasicAuth != nil {
+ clientID, clientSecret := parsed.BasicAuth.Username, parsed.BasicAuth.Password
app, err := auth.GetOAuth2ApplicationByClientID(ctx, clientID)
if err != nil && !auth.IsErrOauthClientIDInvalid(err) {
// this is likely a database error; log it and respond without details
@@ -170,9 +162,7 @@ func IntrospectOAuth(ctx *context.Context) {
if err == nil && app != nil {
response.Active = true
response.Scope = grant.Scope
- response.Issuer = setting.AppURL
- response.Audience = []string{app.ClientID}
- response.Subject = strconv.FormatInt(grant.UserID, 10)
+ response.RegisteredClaims = oauth2_provider.NewJwtRegisteredClaimsFromUser(app.ClientID, grant.UserID, nil /*exp*/)
}
if user, err := user_model.GetUserByID(ctx, grant.UserID); err == nil {
response.Username = user.Name
@@ -432,7 +422,14 @@ func GrantApplicationOAuth(ctx *context.Context) {
// OIDCWellKnown generates JSON so OIDC clients know Gitea's capabilities
func OIDCWellKnown(ctx *context.Context) {
- ctx.Data["SigningKey"] = oauth2_provider.DefaultSigningKey
+ if !setting.OAuth2.Enabled {
+ http.NotFound(ctx.Resp, ctx.Req)
+ return
+ }
+ jwtRegisteredClaims := oauth2_provider.NewJwtRegisteredClaimsFromUser("well-known", 0, nil)
+ ctx.Data["OidcIssuer"] = jwtRegisteredClaims.Issuer // use the consistent issuer from the JWT registered claims
+ ctx.Data["OidcBaseUrl"] = strings.TrimSuffix(setting.AppURL, "/")
+ ctx.Data["SigningKeyMethodAlg"] = oauth2_provider.DefaultSigningKey.SigningMethod().Alg()
ctx.JSONTemplate("user/auth/oidc_wellknown")
}
@@ -465,16 +462,16 @@ func AccessTokenOAuth(ctx *context.Context) {
form := *web.GetForm(ctx).(*forms.AccessTokenForm)
// if there is no ClientID or ClientSecret in the request body, fill these fields by the Authorization header and ensure the provided field matches the Authorization header
if form.ClientID == "" || form.ClientSecret == "" {
- authHeader := ctx.Req.Header.Get("Authorization")
- if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
- clientID, clientSecret, err := base.BasicAuthDecode(authData)
- if err != nil {
+ if authHeader := ctx.Req.Header.Get("Authorization"); authHeader != "" {
+ parsed, ok := httpauth.ParseAuthorizationHeader(authHeader)
+ if !ok || parsed.BasicAuth == nil {
handleAccessTokenError(ctx, oauth2_provider.AccessTokenError{
ErrorCode: oauth2_provider.AccessTokenErrorCodeInvalidRequest,
ErrorDescription: "cannot parse basic auth header",
})
return
}
+ clientID, clientSecret := parsed.BasicAuth.Username, parsed.BasicAuth.Password
// validate that any fields present in the form match the Basic auth header
if form.ClientID != "" && form.ClientID != clientID {
handleAccessTokenError(ctx, oauth2_provider.AccessTokenError{
diff --git a/routers/web/auth/oauth_signin_sync.go b/routers/web/auth/oauth_signin_sync.go
new file mode 100644
index 00000000000..86d19660245
--- /dev/null
+++ b/routers/web/auth/oauth_signin_sync.go
@@ -0,0 +1,93 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package auth
+
+import (
+ "fmt"
+
+ asymkey_model "code.gitea.io/gitea/models/asymkey"
+ "code.gitea.io/gitea/models/auth"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/util"
+ asymkey_service "code.gitea.io/gitea/services/asymkey"
+ "code.gitea.io/gitea/services/auth/source/oauth2"
+ "code.gitea.io/gitea/services/context"
+
+ "github.com/markbates/goth"
+)
+
+func oauth2SignInSync(ctx *context.Context, authSourceID int64, u *user_model.User, gothUser goth.User) {
+ oauth2UpdateAvatarIfNeed(ctx, gothUser.AvatarURL, u)
+
+ authSource, err := auth.GetSourceByID(ctx, authSourceID)
+ if err != nil {
+ ctx.ServerError("GetSourceByID", err)
+ return
+ }
+ oauth2Source, _ := authSource.Cfg.(*oauth2.Source)
+ if !authSource.IsOAuth2() || oauth2Source == nil {
+ ctx.ServerError("oauth2SignInSync", fmt.Errorf("source %s is not an OAuth2 source", gothUser.Provider))
+ return
+ }
+
+ // sync full name
+ fullNameKey := util.IfZero(oauth2Source.FullNameClaimName, "name")
+ fullName, _ := gothUser.RawData[fullNameKey].(string)
+ fullName = util.IfZero(fullName, gothUser.Name)
+
+ // need to update if the user has no full name set
+ shouldUpdateFullName := u.FullName == ""
+ // force to update if the attribute is set
+ shouldUpdateFullName = shouldUpdateFullName || oauth2Source.FullNameClaimName != ""
+ // only update if the full name is different
+ shouldUpdateFullName = shouldUpdateFullName && u.FullName != fullName
+ if shouldUpdateFullName {
+ u.FullName = fullName
+ if err := user_model.UpdateUserCols(ctx, u, "full_name"); err != nil {
+ log.Error("Unable to sync OAuth2 user full name %s: %v", gothUser.Provider, err)
+ }
+ }
+
+ err = oauth2UpdateSSHPubIfNeed(ctx, authSource, &gothUser, u)
+ if err != nil {
+ log.Error("Unable to sync OAuth2 SSH public key %s: %v", gothUser.Provider, err)
+ }
+}
+
+func oauth2SyncGetSSHKeys(source *oauth2.Source, gothUser *goth.User) ([]string, error) {
+ value, exists := gothUser.RawData[source.SSHPublicKeyClaimName]
+ if !exists {
+ return []string{}, nil
+ }
+ rawSlice, ok := value.([]any)
+ if !ok {
+ return nil, fmt.Errorf("invalid SSH public key value type: %T", value)
+ }
+
+ sshKeys := make([]string, 0, len(rawSlice))
+ for _, v := range rawSlice {
+ str, ok := v.(string)
+ if !ok {
+ return nil, fmt.Errorf("invalid SSH public key value item type: %T", v)
+ }
+ sshKeys = append(sshKeys, str)
+ }
+ return sshKeys, nil
+}
+
+func oauth2UpdateSSHPubIfNeed(ctx *context.Context, authSource *auth.Source, gothUser *goth.User, user *user_model.User) error {
+ oauth2Source, _ := authSource.Cfg.(*oauth2.Source)
+ if oauth2Source == nil || oauth2Source.SSHPublicKeyClaimName == "" {
+ return nil
+ }
+ sshKeys, err := oauth2SyncGetSSHKeys(oauth2Source, gothUser)
+ if err != nil {
+ return err
+ }
+ if !asymkey_model.SynchronizePublicKeys(ctx, user, authSource, sshKeys) {
+ return nil
+ }
+ return asymkey_service.RewriteAllPublicKeys(ctx)
+}
diff --git a/routers/web/auth/oauth_test.go b/routers/web/auth/oauth_test.go
index 8d9365fab45..36b0cf6eace 100644
--- a/routers/web/auth/oauth_test.go
+++ b/routers/web/auth/oauth_test.go
@@ -7,7 +7,6 @@ import (
"testing"
"code.gitea.io/gitea/models/auth"
- "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/services/oauth2_provider"
@@ -21,7 +20,7 @@ func createAndParseToken(t *testing.T, grant *auth.OAuth2Grant) *oauth2_provider
assert.NoError(t, err)
assert.NotNil(t, signingKey)
- response, terr := oauth2_provider.NewAccessTokenResponse(db.DefaultContext, grant, signingKey, signingKey)
+ response, terr := oauth2_provider.NewAccessTokenResponse(t.Context(), grant, signingKey, signingKey)
assert.Nil(t, terr)
assert.NotNil(t, response)
@@ -43,7 +42,7 @@ func createAndParseToken(t *testing.T, grant *auth.OAuth2Grant) *oauth2_provider
func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- grants, err := auth.GetOAuth2GrantsByUserID(db.DefaultContext, 3)
+ grants, err := auth.GetOAuth2GrantsByUserID(t.Context(), 3)
assert.NoError(t, err)
assert.Len(t, grants, 1)
@@ -59,7 +58,7 @@ func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
assert.False(t, oidcToken.EmailVerified)
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
- grants, err = auth.GetOAuth2GrantsByUserID(db.DefaultContext, user.ID)
+ grants, err = auth.GetOAuth2GrantsByUserID(t.Context(), user.ID)
assert.NoError(t, err)
assert.Len(t, grants, 1)
@@ -67,8 +66,8 @@ func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
oidcToken = createAndParseToken(t, grants[0])
assert.Equal(t, user.DisplayName(), oidcToken.Name)
assert.Equal(t, user.Name, oidcToken.PreferredUsername)
- assert.Equal(t, user.HTMLURL(), oidcToken.Profile)
- assert.Equal(t, user.AvatarLink(db.DefaultContext), oidcToken.Picture)
+ assert.Equal(t, user.HTMLURL(t.Context()), oidcToken.Profile)
+ assert.Equal(t, user.AvatarLink(t.Context()), oidcToken.Picture)
assert.Equal(t, user.Website, oidcToken.Website)
assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt)
assert.Equal(t, user.Email, oidcToken.Email)
diff --git a/routers/web/auth/openid.go b/routers/web/auth/openid.go
index 8c2d3276a8b..4ef4c96ccc1 100644
--- a/routers/web/auth/openid.go
+++ b/routers/web/auth/openid.go
@@ -349,10 +349,7 @@ func RegisterOpenIDPost(ctx *context.Context) {
context.VerifyCaptcha(ctx, tplSignUpOID, form)
}
- length := setting.MinPasswordLength
- if length < 256 {
- length = 256
- }
+ length := max(setting.MinPasswordLength, 256)
password, err := util.CryptoRandomString(int64(length))
if err != nil {
ctx.RenderWithErr(err.Error(), tplSignUpOID, form)
@@ -364,7 +361,7 @@ func RegisterOpenIDPost(ctx *context.Context) {
Email: form.Email,
Passwd: password,
}
- if !createUserInContext(ctx, tplSignUpOID, form, u, nil, nil, false) {
+ if !createUserInContext(ctx, tplSignUpOID, form, u, nil, nil) {
// error already handled
return
}
diff --git a/routers/web/auth/webauthn.go b/routers/web/auth/webauthn.go
index 78f6c3b58e6..dacb6be225e 100644
--- a/routers/web/auth/webauthn.go
+++ b/routers/web/auth/webauthn.go
@@ -15,7 +15,6 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/services/context"
- "code.gitea.io/gitea/services/externalaccount"
"github.com/go-webauthn/webauthn/protocol"
"github.com/go-webauthn/webauthn/webauthn"
@@ -150,7 +149,7 @@ func WebAuthnPasskeyLogin(ctx *context.Context) {
// Now handle account linking if that's requested
if ctx.Session.Get("linkAccount") != nil {
- if err := externalaccount.LinkAccountFromStore(ctx, ctx.Session, user); err != nil {
+ if err := linkAccountFromContext(ctx, user); err != nil {
ctx.ServerError("LinkAccountFromStore", err)
return
}
@@ -268,7 +267,7 @@ func WebAuthnLoginAssertionPost(ctx *context.Context) {
// Now handle account linking if that's requested
if ctx.Session.Get("linkAccount") != nil {
- if err := externalaccount.LinkAccountFromStore(ctx, ctx.Session, user); err != nil {
+ if err := linkAccountFromContext(ctx, user); err != nil {
ctx.ServerError("LinkAccountFromStore", err)
return
}
diff --git a/routers/web/base.go b/routers/web/base.go
index e43f36a97be..0f06cb5e4b9 100644
--- a/routers/web/base.go
+++ b/routers/web/base.go
@@ -39,7 +39,7 @@ func avatarStorageHandler(storageSetting *setting.Storage, prefix string, objSto
rPath := strings.TrimPrefix(req.URL.Path, "/"+prefix+"/")
rPath = util.PathJoinRelX(rPath)
- u, err := objStore.URL(rPath, path.Base(rPath), nil)
+ u, err := objStore.URL(rPath, path.Base(rPath), req.Method, nil)
if err != nil {
if os.IsNotExist(err) || errors.Is(err, os.ErrNotExist) {
log.Warn("Unable to find %s %s", prefix, rPath)
diff --git a/routers/web/devtest/devtest.go b/routers/web/devtest/devtest.go
index 765931a7307..a22d3765798 100644
--- a/routers/web/devtest/devtest.go
+++ b/routers/web/devtest/devtest.go
@@ -132,7 +132,7 @@ func prepareMockDataBadgeActionsSvg(ctx *context.Context) {
selectedStyle := ctx.FormString("style", badge.DefaultStyle)
var badges []badge.Badge
badges = append(badges, badge.GenerateBadge("啊啊啊啊啊啊啊啊啊啊啊啊", "🌞🌞🌞🌞🌞", "green"))
- for r := rune(0); r < 256; r++ {
+ for r := range rune(256) {
if unicode.IsPrint(r) {
s := strings.Repeat(string(r), 15)
badges = append(badges, badge.GenerateBadge(s, util.TruncateRunes(s, 7), "green"))
diff --git a/routers/web/devtest/mail_preview.go b/routers/web/devtest/mail_preview.go
new file mode 100644
index 00000000000..d6bade15d7a
--- /dev/null
+++ b/routers/web/devtest/mail_preview.go
@@ -0,0 +1,58 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package devtest
+
+import (
+ "net/http"
+ "strings"
+
+ "code.gitea.io/gitea/modules/templates"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/mailer"
+
+ "gopkg.in/yaml.v3"
+)
+
+func MailPreviewRender(ctx *context.Context) {
+ tmplName := ctx.PathParam("*")
+ mockDataContent, err := templates.AssetFS().ReadFile("mail/" + tmplName + ".devtest.yml")
+ mockData := map[string]any{}
+ if err == nil {
+ err = yaml.Unmarshal(mockDataContent, &mockData)
+ if err != nil {
+ http.Error(ctx.Resp, "Failed to parse mock data: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ }
+ mockData["locale"] = ctx.Locale
+ err = mailer.LoadedTemplates().BodyTemplates.ExecuteTemplate(ctx.Resp, tmplName, mockData)
+ if err != nil {
+ _, _ = ctx.Resp.Write([]byte(err.Error()))
+ }
+}
+
+func prepareMailPreviewRender(ctx *context.Context, tmplName string) {
+ tmplSubject := mailer.LoadedTemplates().SubjectTemplates.Lookup(tmplName)
+ if tmplSubject == nil {
+ ctx.Data["RenderMailSubject"] = "default subject"
+ } else {
+ var buf strings.Builder
+ err := tmplSubject.Execute(&buf, nil)
+ if err != nil {
+ ctx.Data["RenderMailSubject"] = err.Error()
+ } else {
+ ctx.Data["RenderMailSubject"] = buf.String()
+ }
+ }
+ ctx.Data["RenderMailTemplateName"] = tmplName
+}
+
+func MailPreview(ctx *context.Context) {
+ ctx.Data["MailTemplateNames"] = mailer.LoadedTemplates().TemplateNames
+ tmplName := ctx.FormString("tmpl")
+ if tmplName != "" {
+ prepareMailPreviewRender(ctx, tmplName)
+ }
+ ctx.HTML(http.StatusOK, "devtest/mail-preview")
+}
diff --git a/routers/web/explore/code.go b/routers/web/explore/code.go
index 8f6518a4fc3..3bb50ef3976 100644
--- a/routers/web/explore/code.go
+++ b/routers/web/explore/code.go
@@ -5,6 +5,7 @@ package explore
import (
"net/http"
+ "slices"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
@@ -93,14 +94,7 @@ func Code(ctx *context.Context) {
loadRepoIDs := make([]int64, 0, len(searchResults))
for _, result := range searchResults {
- var find bool
- for _, id := range loadRepoIDs {
- if id == result.RepoID {
- find = true
- break
- }
- }
- if !find {
+ if !slices.Contains(loadRepoIDs, result.RepoID) {
loadRepoIDs = append(loadRepoIDs, result.RepoID)
}
}
diff --git a/routers/web/explore/repo.go b/routers/web/explore/repo.go
index 855c2a50db4..f0d7d0ce7d2 100644
--- a/routers/web/explore/repo.go
+++ b/routers/web/explore/repo.go
@@ -151,6 +151,7 @@ func Repos(ctx *context.Context) {
ctx.Data["CodePageIsDisabled"] = setting.Service.Explore.DisableCodePage
ctx.Data["Title"] = ctx.Tr("explore")
ctx.Data["PageIsExplore"] = true
+ ctx.Data["ShowRepoOwnerOnList"] = true
ctx.Data["PageIsExploreRepositories"] = true
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
diff --git a/routers/web/explore/user.go b/routers/web/explore/user.go
index af48e6fb796..3774be033db 100644
--- a/routers/web/explore/user.go
+++ b/routers/web/explore/user.go
@@ -103,7 +103,7 @@ func RenderUserSearch(ctx *context.Context, opts user_model.SearchUserOptions, t
if isSitemap {
m := sitemap.NewSitemap()
for _, item := range users {
- m.Add(sitemap.URL{URL: item.HTMLURL(), LastMod: item.UpdatedUnix.AsTimePtr()})
+ m.Add(sitemap.URL{URL: item.HTMLURL(ctx), LastMod: item.UpdatedUnix.AsTimePtr()})
}
ctx.Resp.Header().Set("Content-Type", "text/xml")
if _, err := m.WriteTo(ctx.Resp); err != nil {
diff --git a/routers/web/feed/branch.go b/routers/web/feed/branch.go
index 094fd987ac2..eb7f6dc5bc5 100644
--- a/routers/web/feed/branch.go
+++ b/routers/web/feed/branch.go
@@ -8,6 +8,7 @@ import (
"time"
"code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/services/context"
"github.com/gorilla/feeds"
@@ -15,10 +16,14 @@ import (
// ShowBranchFeed shows tags and/or releases on the repo as RSS / Atom feed
func ShowBranchFeed(ctx *context.Context, repo *repo.Repository, formatType string) {
- commits, err := ctx.Repo.Commit.CommitsByRange(0, 10, "", "", "")
- if err != nil {
- ctx.ServerError("ShowBranchFeed", err)
- return
+ var commits []*git.Commit
+ var err error
+ if ctx.Repo.Commit != nil {
+ commits, err = ctx.Repo.Commit.CommitsByRange(0, 10, "", "", "")
+ if err != nil {
+ ctx.ServerError("ShowBranchFeed", err)
+ return
+ }
}
title := "Latest commits for branch " + ctx.Repo.BranchName
diff --git a/routers/web/feed/profile.go b/routers/web/feed/profile.go
index cecf9d409ac..3ca4890e353 100644
--- a/routers/web/feed/profile.go
+++ b/routers/web/feed/profile.go
@@ -54,7 +54,7 @@ func showUserFeed(ctx *context.Context, formatType string) {
return
}
- rctx := renderhelper.NewRenderContextSimpleDocument(ctx, ctx.ContextUser.HTMLURL())
+ rctx := renderhelper.NewRenderContextSimpleDocument(ctx, ctx.ContextUser.HTMLURL(ctx))
ctxUserDescription, err := markdown.RenderString(rctx,
ctx.ContextUser.Description)
if err != nil {
@@ -64,7 +64,7 @@ func showUserFeed(ctx *context.Context, formatType string) {
feed := &feeds.Feed{
Title: ctx.Locale.TrString("home.feed_of", ctx.ContextUser.DisplayName()),
- Link: &feeds.Link{Href: ctx.ContextUser.HTMLURL()},
+ Link: &feeds.Link{Href: ctx.ContextUser.HTMLURL(ctx)},
Description: string(ctxUserDescription),
Created: time.Now(),
}
diff --git a/routers/web/feed/render.go b/routers/web/feed/render.go
index d1a229e5b27..014da253bdf 100644
--- a/routers/web/feed/render.go
+++ b/routers/web/feed/render.go
@@ -8,11 +8,18 @@ import (
)
// RenderBranchFeed render format for branch or file
-func RenderBranchFeed(ctx *context.Context) {
- _, showFeedType := GetFeedType(ctx.PathParam("reponame"), ctx.Req)
+func RenderBranchFeed(ctx *context.Context, feedType string) {
if ctx.Repo.TreePath == "" {
- ShowBranchFeed(ctx, ctx.Repo.Repository, showFeedType)
+ ShowBranchFeed(ctx, ctx.Repo.Repository, feedType)
} else {
- ShowFileFeed(ctx, ctx.Repo.Repository, showFeedType)
+ ShowFileFeed(ctx, ctx.Repo.Repository, feedType)
}
}
+
+func RenderBranchFeedRSS(ctx *context.Context) {
+ RenderBranchFeed(ctx, "rss")
+}
+
+func RenderBranchFeedAtom(ctx *context.Context) {
+ RenderBranchFeed(ctx, "atom")
+}
diff --git a/routers/web/misc/markup.go b/routers/web/misc/markup.go
index 0c7ec6c2eb6..f90cf3ffed0 100644
--- a/routers/web/misc/markup.go
+++ b/routers/web/misc/markup.go
@@ -15,6 +15,6 @@ import (
// Markup render markup document to HTML
func Markup(ctx *context.Context) {
form := web.GetForm(ctx).(*api.MarkupOption)
- mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck
+ mode := util.Iif(form.Wiki, "wiki", form.Mode) //nolint:staticcheck // form.Wiki is deprecated
common.RenderMarkup(ctx.Base, ctx.Repo, mode, form.Text, form.Context, form.FilePath)
}
diff --git a/routers/web/misc/misc.go b/routers/web/misc/misc.go
index d42afafe9e8..59b97c17175 100644
--- a/routers/web/misc/misc.go
+++ b/routers/web/misc/misc.go
@@ -20,7 +20,7 @@ func SSHInfo(rw http.ResponseWriter, req *http.Request) {
return
}
rw.Header().Set("content-type", "text/json;charset=UTF-8")
- _, err := rw.Write([]byte(`{"type":"gitea","version":1}`))
+ _, err := rw.Write([]byte(`{"type":"agit","version":1}`))
if err != nil {
log.Error("fail to write result: err: %v", err)
rw.WriteHeader(http.StatusInternalServerError)
diff --git a/routers/web/org/members.go b/routers/web/org/members.go
index 2cbe75989a5..61022d3f09a 100644
--- a/routers/web/org/members.go
+++ b/routers/web/org/members.go
@@ -28,10 +28,7 @@ func Members(ctx *context.Context) {
ctx.Data["Title"] = org.FullName
ctx.Data["PageIsOrgMembers"] = true
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
opts := &organization.FindOrgMembersOpts{
Doer: ctx.Doer,
diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go
index f423e9cb36b..059cce82813 100644
--- a/routers/web/org/projects.go
+++ b/routers/web/org/projects.go
@@ -53,10 +53,7 @@ func Projects(ctx *context.Context) {
isShowClosed := strings.ToLower(ctx.FormTrim("state")) == "closed"
keyword := ctx.FormTrim("q")
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
var projectType project_model.Type
if ctx.ContextUser.IsOrganization() {
diff --git a/routers/web/org/setting.go b/routers/web/org/setting.go
index 9dd0a98160e..fe585b3a00b 100644
--- a/routers/web/org/setting.go
+++ b/routers/web/org/setting.go
@@ -17,22 +17,21 @@ import (
"code.gitea.io/gitea/modules/optional"
repo_module "code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/templates"
+ "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
shared_user "code.gitea.io/gitea/routers/web/shared/user"
user_setting "code.gitea.io/gitea/routers/web/user/setting"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/forms"
org_service "code.gitea.io/gitea/services/org"
- repo_service "code.gitea.io/gitea/services/repository"
user_service "code.gitea.io/gitea/services/user"
)
const (
// tplSettingsOptions template path for render settings
tplSettingsOptions templates.TplName = "org/settings/options"
- // tplSettingsDelete template path for render delete repository
- tplSettingsDelete templates.TplName = "org/settings/delete"
// tplSettingsHooks template path for render hook settings
tplSettingsHooks templates.TplName = "org/settings/hooks"
// tplSettingsLabels template path for render labels settings
@@ -71,26 +70,6 @@ func SettingsPost(ctx *context.Context) {
org := ctx.Org.Organization
- if org.Name != form.Name {
- if err := user_service.RenameUser(ctx, org.AsUser(), form.Name); err != nil {
- if user_model.IsErrUserAlreadyExist(err) {
- ctx.Data["Err_Name"] = true
- ctx.RenderWithErr(ctx.Tr("form.username_been_taken"), tplSettingsOptions, &form)
- } else if db.IsErrNameReserved(err) {
- ctx.Data["Err_Name"] = true
- ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(db.ErrNameReserved).Name), tplSettingsOptions, &form)
- } else if db.IsErrNamePatternNotAllowed(err) {
- ctx.Data["Err_Name"] = true
- ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), tplSettingsOptions, &form)
- } else {
- ctx.ServerError("RenameUser", err)
- }
- return
- }
-
- ctx.Org.OrgLink = setting.AppSubURL + "/org/" + url.PathEscape(org.Name)
- }
-
if form.Email != "" {
if err := user_service.ReplacePrimaryEmailAddress(ctx, org.AsUser(), form.Email); err != nil {
ctx.Data["Err_Email"] = true
@@ -104,38 +83,17 @@ func SettingsPost(ctx *context.Context) {
Description: optional.Some(form.Description),
Website: optional.Some(form.Website),
Location: optional.Some(form.Location),
- Visibility: optional.Some(form.Visibility),
RepoAdminChangeTeamAccess: optional.Some(form.RepoAdminChangeTeamAccess),
}
if ctx.Doer.IsAdmin {
opts.MaxRepoCreation = optional.Some(form.MaxRepoCreation)
}
- visibilityChanged := org.Visibility != form.Visibility
-
if err := user_service.UpdateUser(ctx, org.AsUser(), opts); err != nil {
ctx.ServerError("UpdateUser", err)
return
}
- // update forks visibility
- if visibilityChanged {
- repos, _, err := repo_model.GetUserRepositories(ctx, repo_model.SearchRepoOptions{
- Actor: org.AsUser(), Private: true, ListOptions: db.ListOptions{Page: 1, PageSize: org.NumRepos},
- })
- if err != nil {
- ctx.ServerError("GetRepositories", err)
- return
- }
- for _, repo := range repos {
- repo.OwnerName = org.Name
- if err := repo_service.UpdateRepository(ctx, repo, true); err != nil {
- ctx.ServerError("UpdateRepository", err)
- return
- }
- }
- }
-
log.Trace("Organization setting updated: %s", org.Name)
ctx.Flash.Success(ctx.Tr("org.settings.update_setting_success"))
ctx.Redirect(ctx.Org.OrgLink + "/settings")
@@ -163,42 +121,27 @@ func SettingsDeleteAvatar(ctx *context.Context) {
ctx.JSONRedirect(ctx.Org.OrgLink + "/settings")
}
-// SettingsDelete response for deleting an organization
-func SettingsDelete(ctx *context.Context) {
- ctx.Data["Title"] = ctx.Tr("org.settings")
- ctx.Data["PageIsOrgSettings"] = true
- ctx.Data["PageIsSettingsDelete"] = true
+// SettingsDeleteOrgPost response for deleting an organization
+func SettingsDeleteOrgPost(ctx *context.Context) {
+ if ctx.Org.Organization.Name != ctx.FormString("org_name") {
+ ctx.JSONError(ctx.Tr("form.enterred_invalid_org_name"))
+ return
+ }
- if ctx.Req.Method == http.MethodPost {
- if ctx.Org.Organization.Name != ctx.FormString("org_name") {
- ctx.Data["Err_OrgName"] = true
- ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_org_name"), tplSettingsDelete, nil)
- return
- }
-
- if err := org_service.DeleteOrganization(ctx, ctx.Org.Organization, false); err != nil {
- if repo_model.IsErrUserOwnRepos(err) {
- ctx.Flash.Error(ctx.Tr("form.org_still_own_repo"))
- ctx.Redirect(ctx.Org.OrgLink + "/settings/delete")
- } else if packages_model.IsErrUserOwnPackages(err) {
- ctx.Flash.Error(ctx.Tr("form.org_still_own_packages"))
- ctx.Redirect(ctx.Org.OrgLink + "/settings/delete")
- } else {
- ctx.ServerError("DeleteOrganization", err)
- }
+ if err := org_service.DeleteOrganization(ctx, ctx.Org.Organization, false /* no purge */); err != nil {
+ if repo_model.IsErrUserOwnRepos(err) {
+ ctx.JSONError(ctx.Tr("form.org_still_own_repo"))
+ } else if packages_model.IsErrUserOwnPackages(err) {
+ ctx.JSONError(ctx.Tr("form.org_still_own_packages"))
} else {
- log.Trace("Organization deleted: %s", ctx.Org.Organization.Name)
- ctx.Redirect(setting.AppSubURL + "/")
+ log.Error("DeleteOrganization: %v", err)
+ ctx.JSONError(util.Iif(ctx.Doer.IsAdmin, err.Error(), string(ctx.Tr("org.settings.delete_failed"))))
}
return
}
- if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
- ctx.ServerError("RenderUserOrgHeader", err)
- return
- }
-
- ctx.HTML(http.StatusOK, tplSettingsDelete)
+ ctx.Flash.Success(ctx.Tr("org.settings.delete_successful", ctx.Org.Organization.Name))
+ ctx.JSONRedirect(setting.AppSubURL + "/")
}
// Webhooks render webhook list page
@@ -250,3 +193,65 @@ func Labels(ctx *context.Context) {
ctx.HTML(http.StatusOK, tplSettingsLabels)
}
+
+// SettingsRenamePost response for renaming organization
+func SettingsRenamePost(ctx *context.Context) {
+ form := web.GetForm(ctx).(*forms.RenameOrgForm)
+ if ctx.HasError() {
+ ctx.JSONError(ctx.GetErrMsg())
+ return
+ }
+
+ oldOrgName, newOrgName := ctx.Org.Organization.Name, form.NewOrgName
+
+ if form.OrgName != oldOrgName {
+ ctx.JSONError(ctx.Tr("form.enterred_invalid_org_name"))
+ return
+ }
+ if newOrgName == oldOrgName {
+ ctx.JSONError(ctx.Tr("org.settings.rename_no_change"))
+ return
+ }
+
+ if err := user_service.RenameUser(ctx, ctx.Org.Organization.AsUser(), newOrgName); err != nil {
+ if user_model.IsErrUserAlreadyExist(err) {
+ ctx.JSONError(ctx.Tr("org.form.name_been_taken", newOrgName))
+ } else if db.IsErrNameReserved(err) {
+ ctx.JSONError(ctx.Tr("org.form.name_reserved", newOrgName))
+ } else if db.IsErrNamePatternNotAllowed(err) {
+ ctx.JSONError(ctx.Tr("org.form.name_pattern_not_allowed", newOrgName))
+ } else {
+ log.Error("RenameOrganization: %v", err)
+ ctx.JSONError(util.Iif(ctx.Doer.IsAdmin, err.Error(), string(ctx.Tr("org.settings.rename_failed"))))
+ }
+ return
+ }
+
+ ctx.Flash.Success(ctx.Tr("org.settings.rename_success", oldOrgName, newOrgName))
+ ctx.JSONRedirect(setting.AppSubURL + "/org/" + url.PathEscape(newOrgName) + "/settings")
+}
+
+// SettingsChangeVisibilityPost response for change organization visibility
+func SettingsChangeVisibilityPost(ctx *context.Context) {
+ visibility, ok := structs.VisibilityModes[ctx.FormString("visibility")]
+ if !ok {
+ ctx.Flash.Error(ctx.Tr("invalid_data", visibility))
+ ctx.JSONRedirect(setting.AppSubURL + "/org/" + url.PathEscape(ctx.Org.Organization.Name) + "/settings")
+ return
+ }
+
+ if ctx.Org.Organization.Visibility == visibility {
+ ctx.Flash.Info(ctx.Tr("nothing_has_been_changed"))
+ ctx.JSONRedirect(setting.AppSubURL + "/org/" + url.PathEscape(ctx.Org.Organization.Name) + "/settings")
+ return
+ }
+
+ if err := org_service.ChangeOrganizationVisibility(ctx, ctx.Org.Organization, visibility); err != nil {
+ log.Error("ChangeOrganizationVisibility: %v", err)
+ ctx.JSONError(ctx.Tr("error.occurred"))
+ return
+ }
+
+ ctx.Flash.Success(ctx.Tr("org.settings.change_visibility_success", ctx.Org.Organization.Name))
+ ctx.JSONRedirect(setting.AppSubURL + "/org/" + url.PathEscape(ctx.Org.Organization.Name) + "/settings")
+}
diff --git a/routers/web/org/teams.go b/routers/web/org/teams.go
index 676c6d0c63d..0ec7cfddc5f 100644
--- a/routers/web/org/teams.go
+++ b/routers/web/org/teams.go
@@ -283,11 +283,22 @@ func NewTeam(ctx *context.Context) {
}
// FIXME: TEAM-UNIT-PERMISSION: this design is not right, when a new unit is added in the future,
-// admin team won't inherit the correct admin permission for the new unit.
+// The existing teams won't inherit the correct admin permission for the new unit.
+// The full history is like this:
+// 1. There was only "team", no "team unit", so "team.authorize" was used to determine the team permission.
+// 2. Later, "team unit" was introduced, then the usage of "team.authorize" became inconsistent, and causes various bugs.
+// - Sometimes, "team.authorize" is used to determine the team permission, e.g. admin, owner
+// - Sometimes, "team unit" is used not really used and "team unit" is used.
+// - Some functions like `GetTeamsWithAccessToAnyRepoUnit` use both.
+//
+// 3. After introducing "team unit" and more unclear changes, it becomes difficult to maintain team permissions.
+// - Org owner need to click the permission for each unit, but can't just set a common "write" permission for all units.
+//
+// Ideally, "team.authorize=write" should mean the team has write access to all units including newly (future) added ones.
func getUnitPerms(forms url.Values, teamPermission perm.AccessMode) map[unit_model.Type]perm.AccessMode {
unitPerms := make(map[unit_model.Type]perm.AccessMode)
for _, ut := range unit_model.AllRepoUnitTypes {
- // Default accessmode is none
+ // Default access mode is none
unitPerms[ut] = perm.AccessModeNone
v, ok := forms[fmt.Sprintf("unit_%d", ut)]
diff --git a/routers/web/org/worktime.go b/routers/web/org/worktime.go
index c7b44baf7bc..bf8db1a9a1a 100644
--- a/routers/web/org/worktime.go
+++ b/routers/web/org/worktime.go
@@ -58,13 +58,13 @@ func Worktime(ctx *context.Context) {
var err error
switch worktimeBy {
case "milestones":
- worktimeSumResult, err = organization.GetWorktimeByMilestones(ctx.Org.Organization, unixFrom, unixTo)
+ worktimeSumResult, err = organization.GetWorktimeByMilestones(ctx, ctx.Org.Organization, unixFrom, unixTo)
ctx.Data["WorktimeByMilestones"] = true
case "members":
- worktimeSumResult, err = organization.GetWorktimeByMembers(ctx.Org.Organization, unixFrom, unixTo)
+ worktimeSumResult, err = organization.GetWorktimeByMembers(ctx, ctx.Org.Organization, unixFrom, unixTo)
ctx.Data["WorktimeByMembers"] = true
default: /* by repos */
- worktimeSumResult, err = organization.GetWorktimeByRepos(ctx.Org.Organization, unixFrom, unixTo)
+ worktimeSumResult, err = organization.GetWorktimeByRepos(ctx, ctx.Org.Organization, unixFrom, unixTo)
ctx.Data["WorktimeByRepos"] = true
}
if err != nil {
diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go
index b01d57084ac..202da407d29 100644
--- a/routers/web/repo/actions/actions.go
+++ b/routers/web/repo/actions/actions.go
@@ -318,7 +318,7 @@ func prepareWorkflowList(ctx *context.Context, workflows []Workflow) {
ctx.Data["Page"] = pager
ctx.Data["HasWorkflowsOrRuns"] = len(workflows) > 0 || len(runs) > 0
- ctx.Data["AllowDeleteWorkflowRuns"] = ctx.Repo.CanWrite(unit.TypeActions)
+ ctx.Data["CanWriteRepoUnitActions"] = ctx.Repo.CanWrite(unit.TypeActions)
}
// loadIsRefDeleted loads the IsRefDeleted field for each run in the list.
@@ -377,10 +377,8 @@ func workflowDispatchConfig(w *model.Workflow) *WorkflowDispatch {
if !decodeNode(w.RawOn, &val) {
return nil
}
- for _, v := range val {
- if v == "workflow_dispatch" {
- return &WorkflowDispatch{}
- }
+ if slices.Contains(val, "workflow_dispatch") {
+ return &WorkflowDispatch{}
}
case yaml.MappingNode:
var val map[string]yaml.Node
diff --git a/routers/web/repo/actions/actions_test.go b/routers/web/repo/actions/actions_test.go
index 6a976ed65c0..9e83ff0fbba 100644
--- a/routers/web/repo/actions/actions_test.go
+++ b/routers/web/repo/actions/actions_test.go
@@ -162,7 +162,7 @@ func TestReadWorkflow_WorkflowDispatchConfig(t *testing.T) {
func Test_loadIsRefDeleted(t *testing.T) {
unittest.PrepareTestEnv(t)
- runs, total, err := db.FindAndCount[actions_model.ActionRun](db.DefaultContext,
+ runs, total, err := db.FindAndCount[actions_model.ActionRun](t.Context(),
actions_model.FindRunOptions{RepoID: 4, Ref: "refs/heads/test"})
assert.NoError(t, err)
assert.Len(t, runs, 1)
@@ -171,7 +171,7 @@ func Test_loadIsRefDeleted(t *testing.T) {
assert.False(t, run.IsRefDeleted)
}
- assert.NoError(t, loadIsRefDeleted(db.DefaultContext, 4, runs))
+ assert.NoError(t, loadIsRefDeleted(t.Context(), 4, runs))
for _, run := range runs {
assert.True(t, run.IsRefDeleted)
}
diff --git a/routers/web/repo/actions/view.go b/routers/web/repo/actions/view.go
index 1c991937b10..3422128026f 100644
--- a/routers/web/repo/actions/view.go
+++ b/routers/web/repo/actions/view.go
@@ -249,7 +249,7 @@ func ViewPost(ctx *context_module.Context) {
ID: v.ID,
Name: v.Name,
Status: v.Status.String(),
- CanRerun: v.Status.IsDone() && ctx.Repo.CanWrite(unit.TypeActions),
+ CanRerun: resp.State.Run.CanRerun,
Duration: v.Duration().String(),
})
}
@@ -304,7 +304,7 @@ func ViewPost(ctx *context_module.Context) {
if task != nil {
steps, logs, err := convertToViewModel(ctx, req.LogCursors, task)
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("convertToViewModel", err)
return
}
resp.State.CurrentJob.Steps = append(resp.State.CurrentJob.Steps, steps...)
@@ -408,7 +408,7 @@ func Rerun(ctx *context_module.Context) {
run, err := actions_model.GetRunByIndex(ctx, ctx.Repo.Repository.ID, runIndex)
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("GetRunByIndex", err)
return
}
@@ -426,9 +426,15 @@ func Rerun(ctx *context_module.Context) {
run.Started = 0
run.Stopped = 0
if err := actions_model.UpdateRun(ctx, run, "started", "stopped", "previous_duration"); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("UpdateRun", err)
return
}
+
+ if err := run.LoadAttributes(ctx); err != nil {
+ ctx.ServerError("run.LoadAttributes", err)
+ return
+ }
+ notify_service.WorkflowRunStatusUpdate(ctx, run.Repo, run.TriggerUser, run)
}
job, jobs := getRunJobs(ctx, runIndex, jobIndex)
@@ -441,11 +447,11 @@ func Rerun(ctx *context_module.Context) {
// if the job has needs, it should be set to "blocked" status to wait for other jobs
shouldBlock := len(j.Needs) > 0
if err := rerunJob(ctx, j, shouldBlock); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("RerunJob", err)
return
}
}
- ctx.JSON(http.StatusOK, struct{}{})
+ ctx.JSONOK()
return
}
@@ -455,17 +461,17 @@ func Rerun(ctx *context_module.Context) {
// jobs other than the specified one should be set to "blocked" status
shouldBlock := j.JobID != job.JobID
if err := rerunJob(ctx, j, shouldBlock); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("RerunJob", err)
return
}
}
- ctx.JSON(http.StatusOK, struct{}{})
+ ctx.JSONOK()
}
func rerunJob(ctx *context_module.Context, job *actions_model.ActionRunJob, shouldBlock bool) error {
status := job.Status
- if !status.IsDone() {
+ if !status.IsDone() || !job.Run.Status.IsDone() {
return nil
}
@@ -485,7 +491,6 @@ func rerunJob(ctx *context_module.Context, job *actions_model.ActionRunJob, shou
}
actions_service.CreateCommitStatus(ctx, job)
- _ = job.LoadAttributes(ctx)
notify_service.WorkflowJobStatusUpdate(ctx, job.Run.Repo, job.Run.TriggerUser, job, nil)
return nil
@@ -547,7 +552,7 @@ func Cancel(ctx *context_module.Context) {
}
return nil
}); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("StopTask", err)
return
}
@@ -557,8 +562,11 @@ func Cancel(ctx *context_module.Context) {
_ = job.LoadAttributes(ctx)
notify_service.WorkflowJobStatusUpdate(ctx, job.Run.Repo, job.Run.TriggerUser, job, nil)
}
-
- ctx.JSON(http.StatusOK, struct{}{})
+ if len(updatedjobs) > 0 {
+ job := updatedjobs[0]
+ actions_service.NotifyWorkflowRunStatusUpdateWithReload(ctx, job)
+ }
+ ctx.JSONOK()
}
func Approve(ctx *context_module.Context) {
@@ -593,18 +601,23 @@ func Approve(ctx *context_module.Context) {
}
return nil
}); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("UpdateRunJob", err)
return
}
actions_service.CreateCommitStatus(ctx, jobs...)
+ if len(updatedjobs) > 0 {
+ job := updatedjobs[0]
+ actions_service.NotifyWorkflowRunStatusUpdateWithReload(ctx, job)
+ }
+
for _, job := range updatedjobs {
_ = job.LoadAttributes(ctx)
notify_service.WorkflowJobStatusUpdate(ctx, job.Run.Repo, job.Run.TriggerUser, job, nil)
}
- ctx.JSON(http.StatusOK, struct{}{})
+ ctx.JSONOK()
}
func Delete(ctx *context_module.Context) {
@@ -680,7 +693,7 @@ func ArtifactsDeleteView(ctx *context_module.Context) {
return
}
if err = actions_model.SetArtifactNeedDelete(ctx, run.ID, artifactName); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("SetArtifactNeedDelete", err)
return
}
ctx.JSON(http.StatusOK, struct{}{})
@@ -696,7 +709,7 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
ctx.HTTPError(http.StatusNotFound, err.Error())
return
}
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("GetRunByIndex", err)
return
}
@@ -705,7 +718,7 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
ArtifactName: artifactName,
})
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("FindArtifacts", err)
return
}
if len(artifacts) == 0 {
@@ -726,7 +739,7 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
if len(artifacts) == 1 && actions.IsArtifactV4(artifacts[0]) {
err := actions.DownloadArtifactV4(ctx.Base, artifacts[0])
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("DownloadArtifactV4", err)
return
}
return
@@ -739,7 +752,7 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
for _, art := range artifacts {
f, err := storage.ActionsArtifacts.Open(art.StoragePath)
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("ActionsArtifacts.Open", err)
return
}
@@ -747,7 +760,7 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
if art.ContentEncoding == "gzip" {
r, err = gzip.NewReader(f)
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("gzip.NewReader", err)
return
}
} else {
@@ -757,11 +770,11 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
w, err := writer.Create(art.ArtifactPath)
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("writer.Create", err)
return
}
if _, err := io.Copy(w, r); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
+ ctx.ServerError("io.Copy", err)
return
}
}
diff --git a/routers/web/repo/attachment.go b/routers/web/repo/attachment.go
index 9eda926dad8..f6966691961 100644
--- a/routers/web/repo/attachment.go
+++ b/routers/web/repo/attachment.go
@@ -129,7 +129,7 @@ func ServeAttachment(ctx *context.Context, uuid string) {
if setting.Attachment.Storage.ServeDirect() {
// If we have a signed url (S3, object storage), redirect to this directly.
- u, err := storage.Attachments.URL(attach.RelativePath(), attach.Name, nil)
+ u, err := storage.Attachments.URL(attach.RelativePath(), attach.Name, ctx.Req.Method, nil)
if u != nil && err == nil {
ctx.Redirect(u.String())
diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go
index 5d382ebd710..96d1d878362 100644
--- a/routers/web/repo/branch.go
+++ b/routers/web/repo/branch.go
@@ -45,10 +45,7 @@ func Branches(ctx *context.Context) {
ctx.Data["PageIsViewCode"] = true
ctx.Data["PageIsBranches"] = true
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
pageSize := setting.Git.BranchesRangeSize
kw := ctx.FormString("q")
@@ -261,7 +258,7 @@ func CreateBranch(ctx *context.Context) {
func MergeUpstream(ctx *context.Context) {
branchName := ctx.FormString("branch")
- _, err := repo_service.MergeUpstream(ctx, ctx.Doer, ctx.Repo.Repository, branchName)
+ _, err := repo_service.MergeUpstream(ctx, ctx.Doer, ctx.Repo.Repository, branchName, false)
if err != nil {
if errors.Is(err, util.ErrNotExist) {
ctx.JSONErrorNotFound()
diff --git a/routers/web/repo/cherry_pick.go b/routers/web/repo/cherry_pick.go
deleted file mode 100644
index 690b830bc2f..00000000000
--- a/routers/web/repo/cherry_pick.go
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2021 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package repo
-
-import (
- "bytes"
- "errors"
- "net/http"
- "strings"
-
- git_model "code.gitea.io/gitea/models/git"
- "code.gitea.io/gitea/models/unit"
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/templates"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/modules/web"
- "code.gitea.io/gitea/services/context"
- "code.gitea.io/gitea/services/forms"
- "code.gitea.io/gitea/services/repository/files"
-)
-
-var tplCherryPick templates.TplName = "repo/editor/cherry_pick"
-
-// CherryPick handles cherrypick GETs
-func CherryPick(ctx *context.Context) {
- ctx.Data["SHA"] = ctx.PathParam("sha")
- cherryPickCommit, err := ctx.Repo.GitRepo.GetCommit(ctx.PathParam("sha"))
- if err != nil {
- if git.IsErrNotExist(err) {
- ctx.NotFound(err)
- return
- }
- ctx.ServerError("GetCommit", err)
- return
- }
-
- if ctx.FormString("cherry-pick-type") == "revert" {
- ctx.Data["CherryPickType"] = "revert"
- ctx.Data["commit_summary"] = "revert " + ctx.PathParam("sha")
- ctx.Data["commit_message"] = "revert " + cherryPickCommit.Message()
- } else {
- ctx.Data["CherryPickType"] = "cherry-pick"
- splits := strings.SplitN(cherryPickCommit.Message(), "\n", 2)
- ctx.Data["commit_summary"] = splits[0]
- ctx.Data["commit_message"] = splits[1]
- }
-
- canCommit := renderCommitRights(ctx)
- ctx.Data["TreePath"] = ""
-
- if canCommit {
- ctx.Data["commit_choice"] = frmCommitChoiceDirect
- } else {
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- }
- ctx.Data["new_branch_name"] = GetUniquePatchBranchName(ctx)
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",")
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
-
- ctx.HTML(http.StatusOK, tplCherryPick)
-}
-
-// CherryPickPost handles cherrypick POSTs
-func CherryPickPost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.CherryPickForm)
-
- sha := ctx.PathParam("sha")
- ctx.Data["SHA"] = sha
- if form.Revert {
- ctx.Data["CherryPickType"] = "revert"
- } else {
- ctx.Data["CherryPickType"] = "cherry-pick"
- }
-
- canCommit := renderCommitRights(ctx)
- branchName := ctx.Repo.BranchName
- if form.CommitChoice == frmCommitChoiceNewBranch {
- branchName = form.NewBranchName
- }
- ctx.Data["commit_summary"] = form.CommitSummary
- ctx.Data["commit_message"] = form.CommitMessage
- ctx.Data["commit_choice"] = form.CommitChoice
- ctx.Data["new_branch_name"] = form.NewBranchName
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",")
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
-
- if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplCherryPick)
- return
- }
-
- // Cannot commit to a an existing branch if user doesn't have rights
- if branchName == ctx.Repo.BranchName && !canCommit {
- ctx.Data["Err_NewBranchName"] = true
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- ctx.RenderWithErr(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", branchName), tplCherryPick, &form)
- return
- }
-
- message := strings.TrimSpace(form.CommitSummary)
- if message == "" {
- if form.Revert {
- message = ctx.Locale.TrString("repo.commit.revert-header", sha)
- } else {
- message = ctx.Locale.TrString("repo.commit.cherry-pick-header", sha)
- }
- }
-
- form.CommitMessage = strings.TrimSpace(form.CommitMessage)
- if len(form.CommitMessage) > 0 {
- message += "\n\n" + form.CommitMessage
- }
-
- gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, form.CommitEmail)
- if !valid {
- ctx.Data["Err_CommitEmail"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.invalid_commit_email"), tplCherryPick, &form)
- return
- }
- opts := &files.ApplyDiffPatchOptions{
- LastCommitID: form.LastCommit,
- OldBranch: ctx.Repo.BranchName,
- NewBranch: branchName,
- Message: message,
- Author: gitCommitter,
- Committer: gitCommitter,
- }
-
- // First lets try the simple plain read-tree -m approach
- opts.Content = sha
- if _, err := files.CherryPick(ctx, ctx.Repo.Repository, ctx.Doer, form.Revert, opts); err != nil {
- if git_model.IsErrBranchAlreadyExists(err) {
- // User has specified a branch that already exists
- branchErr := err.(git_model.ErrBranchAlreadyExists)
- ctx.Data["Err_NewBranchName"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplCherryPick, &form)
- return
- } else if files.IsErrCommitIDDoesNotMatch(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+form.LastCommit+"..."+ctx.Repo.CommitID), tplPatchFile, &form)
- return
- }
- // Drop through to the apply technique
-
- buf := &bytes.Buffer{}
- if form.Revert {
- if err := git.GetReverseRawDiff(ctx, ctx.Repo.Repository.RepoPath(), sha, buf); err != nil {
- if git.IsErrNotExist(err) {
- ctx.NotFound(errors.New("commit " + ctx.PathParam("sha") + " does not exist."))
- return
- }
- ctx.ServerError("GetRawDiff", err)
- return
- }
- } else {
- if err := git.GetRawDiff(ctx.Repo.GitRepo, sha, git.RawDiffType("patch"), buf); err != nil {
- if git.IsErrNotExist(err) {
- ctx.NotFound(errors.New("commit " + ctx.PathParam("sha") + " does not exist."))
- return
- }
- ctx.ServerError("GetRawDiff", err)
- return
- }
- }
-
- opts.Content = buf.String()
- ctx.Data["FileContent"] = opts.Content
-
- if _, err := files.ApplyDiffPatch(ctx, ctx.Repo.Repository, ctx.Doer, opts); err != nil {
- if git_model.IsErrBranchAlreadyExists(err) {
- // User has specified a branch that already exists
- branchErr := err.(git_model.ErrBranchAlreadyExists)
- ctx.Data["Err_NewBranchName"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplCherryPick, &form)
- return
- } else if files.IsErrCommitIDDoesNotMatch(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+form.LastCommit+"..."+ctx.Repo.CommitID), tplPatchFile, &form)
- return
- }
- ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_apply_patch", err), tplPatchFile, &form)
- return
- }
- }
-
- if form.CommitChoice == frmCommitChoiceNewBranch && ctx.Repo.Repository.UnitEnabled(ctx, unit.TypePullRequests) {
- ctx.Redirect(ctx.Repo.RepoLink + "/compare/" + util.PathEscapeSegments(ctx.Repo.BranchName) + "..." + util.PathEscapeSegments(form.NewBranchName))
- } else {
- ctx.Redirect(ctx.Repo.RepoLink + "/src/branch/" + util.PathEscapeSegments(branchName))
- }
-}
diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go
index 9dd6988825c..0c60abcecd0 100644
--- a/routers/web/repo/commit.go
+++ b/routers/web/repo/commit.go
@@ -15,6 +15,7 @@ import (
asymkey_model "code.gitea.io/gitea/models/asymkey"
"code.gitea.io/gitea/models/db"
git_model "code.gitea.io/gitea/models/git"
+ issues_model "code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/models/renderhelper"
repo_model "code.gitea.io/gitea/models/repo"
unit_model "code.gitea.io/gitea/models/unit"
@@ -67,10 +68,7 @@ func Commits(ctx *context.Context) {
commitsCount := ctx.Repo.CommitsCount
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
pageSize := ctx.FormInt("limit")
if pageSize <= 0 {
@@ -169,10 +167,13 @@ func Graph(ctx *context.Context) {
ctx.Data["Username"] = ctx.Repo.Owner.Name
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
+ divOnly := ctx.FormBool("div-only")
+ queryParams := ctx.Req.URL.Query()
+ queryParams.Del("div-only")
paginator := context.NewPagination(int(graphCommitsCount), setting.UI.GraphMaxCommitNum, page, 5)
- paginator.AddParamFromRequest(ctx.Req)
+ paginator.AddParamFromQuery(queryParams)
ctx.Data["Page"] = paginator
- if ctx.FormBool("div-only") {
+ if divOnly {
ctx.HTML(http.StatusOK, tplGraphDiv)
return
}
@@ -230,10 +231,7 @@ func FileHistory(ctx *context.Context) {
return
}
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(
git.CommitsByFileAndRangeOptions{
@@ -314,7 +312,7 @@ func Diff(ctx *context.Context) {
maxLines, maxFiles = -1, -1
}
- diff, err := gitdiff.GetDiffForRender(ctx, gitRepo, &gitdiff.DiffOptions{
+ diff, err := gitdiff.GetDiffForRender(ctx, ctx.Repo.RepoLink, gitRepo, &gitdiff.DiffOptions{
AfterCommitID: commitID,
SkipTo: ctx.FormString("skip-to"),
MaxLines: maxLines,
@@ -414,6 +412,11 @@ func Diff(ctx *context.Context) {
}
}
+ pr, _ := issues_model.GetPullRequestByMergedCommit(ctx, ctx.Repo.Repository.ID, commitID)
+ if pr != nil {
+ ctx.Data["MergedPRIssueNumber"] = pr.Index
+ }
+
ctx.HTML(http.StatusOK, tplCommitPage)
}
diff --git a/routers/web/repo/common_recentbranches.go b/routers/web/repo/common_recentbranches.go
new file mode 100644
index 00000000000..c2083dec738
--- /dev/null
+++ b/routers/web/repo/common_recentbranches.go
@@ -0,0 +1,73 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ git_model "code.gitea.io/gitea/models/git"
+ access_model "code.gitea.io/gitea/models/perm/access"
+ unit_model "code.gitea.io/gitea/models/unit"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/services/context"
+ repo_service "code.gitea.io/gitea/services/repository"
+)
+
+type RecentBranchesPromptDataStruct struct {
+ RecentlyPushedNewBranches []*git_model.RecentlyPushedNewBranch
+}
+
+func prepareRecentlyPushedNewBranches(ctx *context.Context) {
+ if ctx.Doer == nil {
+ return
+ }
+ if err := ctx.Repo.Repository.GetBaseRepo(ctx); err != nil {
+ log.Error("GetBaseRepo: %v", err)
+ return
+ }
+
+ opts := git_model.FindRecentlyPushedNewBranchesOptions{
+ Repo: ctx.Repo.Repository,
+ BaseRepo: ctx.Repo.Repository,
+ }
+ if ctx.Repo.Repository.IsFork {
+ opts.BaseRepo = ctx.Repo.Repository.BaseRepo
+ }
+
+ baseRepoPerm, err := access_model.GetUserRepoPermission(ctx, opts.BaseRepo, ctx.Doer)
+ if err != nil {
+ log.Error("GetUserRepoPermission: %v", err)
+ return
+ }
+ if !opts.Repo.CanContentChange() || !opts.BaseRepo.CanContentChange() {
+ return
+ }
+ if !opts.BaseRepo.UnitEnabled(ctx, unit_model.TypePullRequests) || !baseRepoPerm.CanRead(unit_model.TypePullRequests) {
+ return
+ }
+
+ var finalBranches []*git_model.RecentlyPushedNewBranch
+ branches, err := git_model.FindRecentlyPushedNewBranches(ctx, ctx.Doer, opts)
+ if err != nil {
+ log.Error("FindRecentlyPushedNewBranches failed: %v", err)
+ return
+ }
+
+ for _, branch := range branches {
+ divergingInfo, err := repo_service.GetBranchDivergingInfo(ctx,
+ branch.BranchRepo, branch.BranchName, // "base" repo for diverging info
+ opts.BaseRepo, opts.BaseRepo.DefaultBranch, // "head" repo for diverging info
+ )
+ if err != nil {
+ log.Error("GetBranchDivergingInfo failed: %v", err)
+ continue
+ }
+ branchRepoHasNewCommits := divergingInfo.BaseHasNewCommits
+ baseRepoCommitsBehind := divergingInfo.HeadCommitsBehind
+ if branchRepoHasNewCommits || baseRepoCommitsBehind > 0 {
+ finalBranches = append(finalBranches, branch)
+ }
+ }
+ if len(finalBranches) > 0 {
+ ctx.Data["RecentBranchesPromptData"] = RecentBranchesPromptDataStruct{finalBranches}
+ }
+}
diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go
index ae64dc68f26..27837196aff 100644
--- a/routers/web/repo/compare.go
+++ b/routers/web/repo/compare.go
@@ -575,7 +575,13 @@ func PrepareCompareDiff(
ctx.Data["CommitRepoLink"] = ci.HeadRepo.Link()
ctx.Data["AfterCommitID"] = headCommitID
- ctx.Data["ExpandNewPrForm"] = ctx.FormBool("expand")
+
+ // follow GitHub's behavior: autofill the form and expand
+ newPrFormTitle := ctx.FormTrim("title")
+ newPrFormBody := ctx.FormTrim("body")
+ ctx.Data["ExpandNewPrForm"] = ctx.FormBool("expand") || ctx.FormBool("quick_pull") || newPrFormTitle != "" || newPrFormBody != ""
+ ctx.Data["TitleQuery"] = newPrFormTitle
+ ctx.Data["BodyQuery"] = newPrFormBody
if (headCommitID == ci.CompareInfo.MergeBase && !ci.DirectComparison) ||
headCommitID == ci.CompareInfo.BaseCommitID {
@@ -608,7 +614,7 @@ func PrepareCompareDiff(
fileOnly := ctx.FormBool("file-only")
- diff, err := gitdiff.GetDiffForRender(ctx, ci.HeadGitRepo,
+ diff, err := gitdiff.GetDiffForRender(ctx, ci.HeadRepo.Link(), ci.HeadGitRepo,
&gitdiff.DiffOptions{
BeforeCommitID: beforeCommitID,
AfterCommitID: headCommitID,
diff --git a/routers/web/repo/download.go b/routers/web/repo/download.go
index 020cebf1963..6f394aae27d 100644
--- a/routers/web/repo/download.go
+++ b/routers/web/repo/download.go
@@ -54,7 +54,7 @@ func ServeBlobOrLFS(ctx *context.Context, blob *git.Blob, lastModified *time.Tim
if setting.LFS.Storage.ServeDirect() {
// If we have a signed url (S3, object storage, blob storage), redirect to this directly.
- u, err := storage.LFS.URL(pointer.RelativePath(), blob.Name(), nil)
+ u, err := storage.LFS.URL(pointer.RelativePath(), blob.Name(), ctx.Req.Method, nil)
if u != nil && err == nil {
ctx.Redirect(u.String())
return nil
diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go
index cbcb3a3b21d..2a5ac102824 100644
--- a/routers/web/repo/editor.go
+++ b/routers/web/repo/editor.go
@@ -4,6 +4,7 @@
package repo
import (
+ "bytes"
"fmt"
"io"
"net/http"
@@ -11,18 +12,17 @@ import (
"strings"
git_model "code.gitea.io/gitea/models/git"
- repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/charset"
"code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/json"
+ "code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
- "code.gitea.io/gitea/routers/utils"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/context/upload"
"code.gitea.io/gitea/services/forms"
@@ -34,863 +34,422 @@ const (
tplEditDiffPreview templates.TplName = "repo/editor/diff_preview"
tplDeleteFile templates.TplName = "repo/editor/delete"
tplUploadFile templates.TplName = "repo/editor/upload"
+ tplPatchFile templates.TplName = "repo/editor/patch"
+ tplCherryPick templates.TplName = "repo/editor/cherry_pick"
- frmCommitChoiceDirect string = "direct"
- frmCommitChoiceNewBranch string = "commit-to-new-branch"
+ editorCommitChoiceDirect string = "direct"
+ editorCommitChoiceNewBranch string = "commit-to-new-branch"
)
-func canCreateBasePullRequest(ctx *context.Context) bool {
- baseRepo := ctx.Repo.Repository.BaseRepo
- return baseRepo != nil && baseRepo.UnitEnabled(ctx, unit.TypePullRequests)
-}
+func prepareEditorCommitFormOptions(ctx *context.Context, editorAction string) *context.CommitFormOptions {
+ cleanedTreePath := files_service.CleanGitTreePath(ctx.Repo.TreePath)
+ if cleanedTreePath != ctx.Repo.TreePath {
+ redirectTo := fmt.Sprintf("%s/%s/%s/%s", ctx.Repo.RepoLink, editorAction, util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(cleanedTreePath))
+ if ctx.Req.URL.RawQuery != "" {
+ redirectTo += "?" + ctx.Req.URL.RawQuery
+ }
+ ctx.Redirect(redirectTo)
+ return nil
+ }
-func renderCommitRights(ctx *context.Context) bool {
- canCommitToBranch, err := ctx.Repo.CanCommitToBranch(ctx, ctx.Doer)
+ commitFormOptions, err := context.PrepareCommitFormOptions(ctx, ctx.Doer, ctx.Repo.Repository, ctx.Repo.Permission, ctx.Repo.RefFullName)
if err != nil {
- log.Error("CanCommitToBranch: %v", err)
- }
- ctx.Data["CanCommitToBranch"] = canCommitToBranch
- ctx.Data["CanCreatePullRequest"] = ctx.Repo.Repository.UnitEnabled(ctx, unit.TypePullRequests) || canCreateBasePullRequest(ctx)
-
- return canCommitToBranch.CanCommitToBranch
-}
-
-// redirectForCommitChoice redirects after committing the edit to a branch
-func redirectForCommitChoice(ctx *context.Context, commitChoice, newBranchName, treePath string) {
- if commitChoice == frmCommitChoiceNewBranch {
- // Redirect to a pull request when possible
- redirectToPullRequest := false
- repo := ctx.Repo.Repository
- baseBranch := ctx.Repo.BranchName
- headBranch := newBranchName
- if repo.UnitEnabled(ctx, unit.TypePullRequests) {
- redirectToPullRequest = true
- } else if canCreateBasePullRequest(ctx) {
- redirectToPullRequest = true
- baseBranch = repo.BaseRepo.DefaultBranch
- headBranch = repo.Owner.Name + "/" + repo.Name + ":" + headBranch
- repo = repo.BaseRepo
- }
-
- if redirectToPullRequest {
- ctx.Redirect(repo.Link() + "/compare/" + util.PathEscapeSegments(baseBranch) + "..." + util.PathEscapeSegments(headBranch))
- return
- }
+ ctx.ServerError("PrepareCommitFormOptions", err)
+ return nil
}
- returnURI := ctx.FormString("return_uri")
-
- ctx.RedirectToCurrentSite(
- returnURI,
- ctx.Repo.RepoLink+"/src/branch/"+util.PathEscapeSegments(newBranchName)+"/"+util.PathEscapeSegments(treePath),
- )
-}
-
-// getParentTreeFields returns list of parent tree names and corresponding tree paths
-// based on given tree path.
-func getParentTreeFields(treePath string) (treeNames, treePaths []string) {
- if len(treePath) == 0 {
- return treeNames, treePaths
+ if commitFormOptions.NeedFork {
+ ForkToEdit(ctx)
+ return nil
}
- treeNames = strings.Split(treePath, "/")
- treePaths = make([]string, len(treeNames))
- for i := range treeNames {
- treePaths[i] = strings.Join(treeNames[:i+1], "/")
+ if commitFormOptions.WillSubmitToFork && !commitFormOptions.TargetRepo.CanEnableEditor() {
+ ctx.Data["NotFoundPrompt"] = ctx.Locale.Tr("repo.editor.fork_not_editable")
+ ctx.NotFound(nil)
}
- return treeNames, treePaths
-}
-func editFileCommon(ctx *context.Context, isNewFile bool) {
- ctx.Data["PageIsEdit"] = true
- ctx.Data["IsNewFile"] = isNewFile
ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
+ ctx.Data["TreePath"] = ctx.Repo.TreePath
+ ctx.Data["CommitFormOptions"] = commitFormOptions
+
+ // for online editor
ctx.Data["PreviewableExtensions"] = strings.Join(markup.PreviewableExtensions(), ",")
ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",")
ctx.Data["IsEditingFileOnly"] = ctx.FormString("return_uri") != ""
ctx.Data["ReturnURI"] = ctx.FormString("return_uri")
+
+ // form fields
+ ctx.Data["commit_summary"] = ""
+ ctx.Data["commit_message"] = ""
+ ctx.Data["commit_choice"] = util.Iif(commitFormOptions.CanCommitToBranch, editorCommitChoiceDirect, editorCommitChoiceNewBranch)
+ ctx.Data["new_branch_name"] = getUniquePatchBranchName(ctx, ctx.Doer.LowerName, commitFormOptions.TargetRepo)
+ ctx.Data["last_commit"] = ctx.Repo.CommitID
+ return commitFormOptions
}
-func editFile(ctx *context.Context, isNewFile bool) {
- editFileCommon(ctx, isNewFile)
- canCommit := renderCommitRights(ctx)
+func prepareTreePathFieldsAndPaths(ctx *context.Context, treePath string) {
+ // show the tree path fields in the "breadcrumb" and help users to edit the target tree path
+ ctx.Data["TreeNames"], ctx.Data["TreePaths"] = getParentTreeFields(strings.TrimPrefix(treePath, "/"))
+}
- treePath := cleanUploadFileName(ctx.Repo.TreePath)
- if treePath != ctx.Repo.TreePath {
- if isNewFile {
- ctx.Redirect(path.Join(ctx.Repo.RepoLink, "_new", util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(treePath)))
- } else {
- ctx.Redirect(path.Join(ctx.Repo.RepoLink, "_edit", util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(treePath)))
+type preparedEditorCommitForm[T any] struct {
+ form T
+ commonForm *forms.CommitCommonForm
+ CommitFormOptions *context.CommitFormOptions
+ OldBranchName string
+ NewBranchName string
+ GitCommitter *files_service.IdentityOptions
+}
+
+func (f *preparedEditorCommitForm[T]) GetCommitMessage(defaultCommitMessage string) string {
+ commitMessage := util.IfZero(strings.TrimSpace(f.commonForm.CommitSummary), defaultCommitMessage)
+ if body := strings.TrimSpace(f.commonForm.CommitMessage); body != "" {
+ commitMessage += "\n\n" + body
+ }
+ return commitMessage
+}
+
+func prepareEditorCommitSubmittedForm[T forms.CommitCommonFormInterface](ctx *context.Context) *preparedEditorCommitForm[T] {
+ form := web.GetForm(ctx).(T)
+ if ctx.HasError() {
+ ctx.JSONError(ctx.GetErrMsg())
+ return nil
+ }
+
+ commonForm := form.GetCommitCommonForm()
+ commonForm.TreePath = files_service.CleanGitTreePath(commonForm.TreePath)
+
+ commitFormOptions, err := context.PrepareCommitFormOptions(ctx, ctx.Doer, ctx.Repo.Repository, ctx.Repo.Permission, ctx.Repo.RefFullName)
+ if err != nil {
+ ctx.ServerError("PrepareCommitFormOptions", err)
+ return nil
+ }
+ if commitFormOptions.NeedFork {
+ // It shouldn't happen, because we should have done the checks in the "GET" request. But just in case.
+ ctx.JSONError(ctx.Locale.TrString("error.not_found"))
+ return nil
+ }
+
+ // check commit behavior
+ fromBaseBranch := ctx.FormString("from_base_branch")
+ commitToNewBranch := commonForm.CommitChoice == editorCommitChoiceNewBranch || fromBaseBranch != ""
+ targetBranchName := util.Iif(commitToNewBranch, commonForm.NewBranchName, ctx.Repo.BranchName)
+ if targetBranchName == ctx.Repo.BranchName && !commitFormOptions.CanCommitToBranch {
+ ctx.JSONError(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", targetBranchName))
+ return nil
+ }
+
+ if !issues.CanMaintainerWriteToBranch(ctx, ctx.Repo.Permission, targetBranchName, ctx.Doer) {
+ ctx.NotFound(nil)
+ return nil
+ }
+
+ // Committer user info
+ gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, commonForm.CommitEmail)
+ if !valid {
+ ctx.JSONError(ctx.Tr("repo.editor.invalid_commit_email"))
+ return nil
+ }
+
+ if commitToNewBranch {
+ // if target branch exists, we should stop
+ targetBranchExists, err := git_model.IsBranchExist(ctx, commitFormOptions.TargetRepo.ID, targetBranchName)
+ if err != nil {
+ ctx.ServerError("IsBranchExist", err)
+ return nil
+ } else if targetBranchExists {
+ if fromBaseBranch != "" {
+ ctx.JSONError(ctx.Tr("repo.editor.fork_branch_exists", targetBranchName))
+ } else {
+ ctx.JSONError(ctx.Tr("repo.editor.branch_already_exists", targetBranchName))
+ }
+ return nil
}
+ }
+
+ oldBranchName := ctx.Repo.BranchName
+ if fromBaseBranch != "" {
+ err = editorPushBranchToForkedRepository(ctx, ctx.Doer, ctx.Repo.Repository.BaseRepo, fromBaseBranch, commitFormOptions.TargetRepo, targetBranchName)
+ if err != nil {
+ log.Error("Unable to editorPushBranchToForkedRepository: %v", err)
+ ctx.JSONError(ctx.Tr("repo.editor.fork_failed_to_push_branch", targetBranchName))
+ return nil
+ }
+ // we have pushed the base branch as the new branch, now we need to commit the changes directly to the new branch
+ oldBranchName = targetBranchName
+ }
+
+ return &preparedEditorCommitForm[T]{
+ form: form,
+ commonForm: commonForm,
+ CommitFormOptions: commitFormOptions,
+ OldBranchName: oldBranchName,
+ NewBranchName: targetBranchName,
+ GitCommitter: gitCommitter,
+ }
+}
+
+// redirectForCommitChoice redirects after committing the edit to a branch
+func redirectForCommitChoice[T any](ctx *context.Context, parsed *preparedEditorCommitForm[T], treePath string) {
+ // when editing a file in a PR, it should return to the origin location
+ if returnURI := ctx.FormString("return_uri"); returnURI != "" && httplib.IsCurrentGiteaSiteURL(ctx, returnURI) {
+ ctx.JSONRedirect(returnURI)
return
}
+ if parsed.commonForm.CommitChoice == editorCommitChoiceNewBranch {
+ // Redirect to a pull request when possible
+ redirectToPullRequest := false
+ repo, baseBranch, headBranch := ctx.Repo.Repository, parsed.OldBranchName, parsed.NewBranchName
+ if ctx.Repo.Repository.IsFork && parsed.CommitFormOptions.CanCreateBasePullRequest {
+ redirectToPullRequest = true
+ baseBranch = repo.BaseRepo.DefaultBranch
+ headBranch = repo.Owner.Name + "/" + repo.Name + ":" + headBranch
+ repo = repo.BaseRepo
+ } else if repo.UnitEnabled(ctx, unit.TypePullRequests) {
+ redirectToPullRequest = true
+ }
+ if redirectToPullRequest {
+ ctx.JSONRedirect(repo.Link() + "/compare/" + util.PathEscapeSegments(baseBranch) + "..." + util.PathEscapeSegments(headBranch))
+ return
+ }
+ }
+
+ // redirect to the newly updated file
+ redirectTo := util.URLJoin(ctx.Repo.RepoLink, "src/branch", util.PathEscapeSegments(parsed.NewBranchName), util.PathEscapeSegments(treePath))
+ ctx.JSONRedirect(redirectTo)
+}
+
+func editFileOpenExisting(ctx *context.Context) (prefetch []byte, dataRc io.ReadCloser, fInfo *fileInfo) {
+ entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
+ if err != nil {
+ HandleGitError(ctx, "GetTreeEntryByPath", err)
+ return nil, nil, nil
+ }
+
+ // No way to edit a directory online.
+ if entry.IsDir() {
+ ctx.NotFound(nil)
+ return nil, nil, nil
+ }
+
+ blob := entry.Blob()
+ buf, dataRc, fInfo, err := getFileReader(ctx, ctx.Repo.Repository.ID, blob)
+ if err != nil {
+ if git.IsErrNotExist(err) {
+ ctx.NotFound(err)
+ } else {
+ ctx.ServerError("getFileReader", err)
+ }
+ return nil, nil, nil
+ }
+
+ if fInfo.isLFSFile() {
+ lfsLock, err := git_model.GetTreePathLock(ctx, ctx.Repo.Repository.ID, ctx.Repo.TreePath)
+ if err != nil {
+ _ = dataRc.Close()
+ ctx.ServerError("GetTreePathLock", err)
+ return nil, nil, nil
+ } else if lfsLock != nil && lfsLock.OwnerID != ctx.Doer.ID {
+ _ = dataRc.Close()
+ ctx.NotFound(nil)
+ return nil, nil, nil
+ }
+ }
+
+ return buf, dataRc, fInfo
+}
+
+func EditFile(ctx *context.Context) {
+ editorAction := ctx.PathParam("editor_action")
+ isNewFile := editorAction == "_new"
+ ctx.Data["IsNewFile"] = isNewFile
+
// Check if the filename (and additional path) is specified in the querystring
// (filename is a misnomer, but kept for compatibility with GitHub)
- filePath, fileName := path.Split(ctx.Req.URL.Query().Get("filename"))
- filePath = strings.Trim(filePath, "/")
- treeNames, treePaths := getParentTreeFields(path.Join(ctx.Repo.TreePath, filePath))
-
- if !isNewFile {
- entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
- if err != nil {
- HandleGitError(ctx, "Repo.Commit.GetTreeEntryByPath", err)
- return
+ urlQuery := ctx.Req.URL.Query()
+ queryFilename := urlQuery.Get("filename")
+ if queryFilename != "" {
+ newTreePath := path.Join(ctx.Repo.TreePath, queryFilename)
+ redirectTo := fmt.Sprintf("%s/%s/%s/%s", ctx.Repo.RepoLink, editorAction, util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(newTreePath))
+ urlQuery.Del("filename")
+ if newQueryParams := urlQuery.Encode(); newQueryParams != "" {
+ redirectTo += "?" + newQueryParams
}
-
- // No way to edit a directory online.
- if entry.IsDir() {
- ctx.NotFound(nil)
- return
- }
-
- blob := entry.Blob()
- if blob.Size() >= setting.UI.MaxDisplayFileSize {
- ctx.NotFound(err)
- return
- }
-
- buf, dataRc, fInfo, err := getFileReader(ctx, ctx.Repo.Repository.ID, blob)
- if err != nil {
- if git.IsErrNotExist(err) {
- ctx.NotFound(err)
- } else {
- ctx.ServerError("getFileReader", err)
- }
- return
- }
-
- defer dataRc.Close()
-
- ctx.Data["FileSize"] = blob.Size()
-
- // Only some file types are editable online as text.
- if !fInfo.st.IsRepresentableAsText() || fInfo.isLFSFile {
- ctx.NotFound(nil)
- return
- }
-
- d, _ := io.ReadAll(dataRc)
-
- buf = append(buf, d...)
- if content, err := charset.ToUTF8(buf, charset.ConvertOpts{KeepBOM: true}); err != nil {
- log.Error("ToUTF8: %v", err)
- ctx.Data["FileContent"] = string(buf)
- } else {
- ctx.Data["FileContent"] = content
- }
- } else {
- // Append filename from query, or empty string to allow username the new file.
- treeNames = append(treeNames, fileName)
+ ctx.Redirect(redirectTo)
+ return
}
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["TreePaths"] = treePaths
- ctx.Data["commit_summary"] = ""
- ctx.Data["commit_message"] = ""
- ctx.Data["commit_choice"] = util.Iif(canCommit, frmCommitChoiceDirect, frmCommitChoiceNewBranch)
- ctx.Data["new_branch_name"] = GetUniquePatchBranchName(ctx)
- ctx.Data["last_commit"] = ctx.Repo.CommitID
+ // on the "New File" page, we should add an empty path field to make end users could input a new name
+ prepareTreePathFieldsAndPaths(ctx, util.Iif(isNewFile, ctx.Repo.TreePath+"/", ctx.Repo.TreePath))
- ctx.Data["EditorconfigJson"] = GetEditorConfig(ctx, treePath)
+ prepareEditorCommitFormOptions(ctx, editorAction)
+ if ctx.Written() {
+ return
+ }
+ if !isNewFile {
+ prefetch, dataRc, fInfo := editFileOpenExisting(ctx)
+ if ctx.Written() {
+ return
+ }
+ defer dataRc.Close()
+
+ ctx.Data["FileSize"] = fInfo.fileSize
+
+ // Only some file types are editable online as text.
+ if fInfo.isLFSFile() {
+ ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_lfs_files")
+ } else if !fInfo.st.IsRepresentableAsText() {
+ ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_non_text_files")
+ } else if fInfo.fileSize >= setting.UI.MaxDisplayFileSize {
+ ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_too_large_file")
+ }
+
+ if ctx.Data["NotEditableReason"] == nil {
+ buf, err := io.ReadAll(io.MultiReader(bytes.NewReader(prefetch), dataRc))
+ if err != nil {
+ ctx.ServerError("ReadAll", err)
+ return
+ }
+ if content, err := charset.ToUTF8(buf, charset.ConvertOpts{KeepBOM: true}); err != nil {
+ ctx.Data["FileContent"] = string(buf)
+ } else {
+ ctx.Data["FileContent"] = content
+ }
+ }
+ }
+
+ ctx.Data["EditorconfigJson"] = getContextRepoEditorConfig(ctx, ctx.Repo.TreePath)
ctx.HTML(http.StatusOK, tplEditFile)
}
-// GetEditorConfig returns a editorconfig JSON string for given treePath or "null"
-func GetEditorConfig(ctx *context.Context, treePath string) string {
- ec, _, err := ctx.Repo.GetEditorconfig()
- if err == nil {
- def, err := ec.GetDefinitionForFilename(treePath)
- if err == nil {
- jsonStr, _ := json.Marshal(def)
- return string(jsonStr)
- }
- }
- return "null"
-}
-
-// EditFile render edit file page
-func EditFile(ctx *context.Context) {
- editFile(ctx, false)
-}
-
-// NewFile render create file page
-func NewFile(ctx *context.Context) {
- editFile(ctx, true)
-}
-
-func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile bool) {
- editFileCommon(ctx, isNewFile)
- ctx.Data["PageHasPosted"] = true
-
- canCommit := renderCommitRights(ctx)
- treeNames, treePaths := getParentTreeFields(form.TreePath)
- branchName := ctx.Repo.BranchName
- if form.CommitChoice == frmCommitChoiceNewBranch {
- branchName = form.NewBranchName
- }
-
- ctx.Data["TreePath"] = form.TreePath
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["TreePaths"] = treePaths
- ctx.Data["FileContent"] = form.Content
- ctx.Data["commit_summary"] = form.CommitSummary
- ctx.Data["commit_message"] = form.CommitMessage
- ctx.Data["commit_choice"] = form.CommitChoice
- ctx.Data["new_branch_name"] = form.NewBranchName
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- ctx.Data["EditorconfigJson"] = GetEditorConfig(ctx, form.TreePath)
-
- if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplEditFile)
+func EditFilePost(ctx *context.Context) {
+ editorAction := ctx.PathParam("editor_action")
+ isNewFile := editorAction == "_new"
+ parsed := prepareEditorCommitSubmittedForm[*forms.EditRepoFileForm](ctx)
+ if ctx.Written() {
return
}
- // Cannot commit to an existing branch if user doesn't have rights
- if branchName == ctx.Repo.BranchName && !canCommit {
- ctx.Data["Err_NewBranchName"] = true
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- ctx.RenderWithErr(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", branchName), tplEditFile, &form)
- return
- }
+ defaultCommitMessage := util.Iif(isNewFile, ctx.Locale.TrString("repo.editor.add", parsed.form.TreePath), ctx.Locale.TrString("repo.editor.update", parsed.form.TreePath))
- // CommitSummary is optional in the web form, if empty, give it a default message based on add or update
- // `message` will be both the summary and message combined
- message := strings.TrimSpace(form.CommitSummary)
- if len(message) == 0 {
- if isNewFile {
- message = ctx.Locale.TrString("repo.editor.add", form.TreePath)
- } else {
- message = ctx.Locale.TrString("repo.editor.update", form.TreePath)
- }
- }
- form.CommitMessage = strings.TrimSpace(form.CommitMessage)
- if len(form.CommitMessage) > 0 {
- message += "\n\n" + form.CommitMessage
- }
-
- gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, form.CommitEmail)
- if !valid {
- ctx.Data["Err_CommitEmail"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.invalid_commit_email"), tplEditFile, &form)
- return
- }
-
- operation := "update"
+ var operation string
if isNewFile {
operation = "create"
+ } else if parsed.form.Content.Has() {
+ // The form content only has data if the file is representable as text, is not too large and not in lfs.
+ operation = "update"
+ } else if ctx.Repo.TreePath != parsed.form.TreePath {
+ // If it doesn't have data, the only possible operation is a "rename"
+ operation = "rename"
+ } else {
+ // It should never happen, just in case
+ ctx.JSONError(ctx.Tr("error.occurred"))
+ return
}
- if _, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
- LastCommitID: form.LastCommit,
- OldBranch: ctx.Repo.BranchName,
- NewBranch: branchName,
- Message: message,
+ _, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
+ LastCommitID: parsed.form.LastCommit,
+ OldBranch: parsed.OldBranchName,
+ NewBranch: parsed.NewBranchName,
+ Message: parsed.GetCommitMessage(defaultCommitMessage),
Files: []*files_service.ChangeRepoFile{
{
Operation: operation,
FromTreePath: ctx.Repo.TreePath,
- TreePath: form.TreePath,
- ContentReader: strings.NewReader(strings.ReplaceAll(form.Content, "\r", "")),
+ TreePath: parsed.form.TreePath,
+ ContentReader: strings.NewReader(strings.ReplaceAll(parsed.form.Content.Value(), "\r", "")),
},
},
- Signoff: form.Signoff,
- Author: gitCommitter,
- Committer: gitCommitter,
- }); err != nil {
- // This is where we handle all the errors thrown by files_service.ChangeRepoFiles
- if git.IsErrNotExist(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_editing_no_longer_exists", ctx.Repo.TreePath), tplEditFile, &form)
- } else if git_model.IsErrLFSFileLocked(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.upload_file_is_locked", err.(git_model.ErrLFSFileLocked).Path, err.(git_model.ErrLFSFileLocked).UserName), tplEditFile, &form)
- } else if files_service.IsErrFilenameInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", form.TreePath), tplEditFile, &form)
- } else if files_service.IsErrFilePathInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- if fileErr, ok := err.(files_service.ErrFilePathInvalid); ok {
- switch fileErr.Type {
- case git.EntryModeSymlink:
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_is_a_symlink", fileErr.Path), tplEditFile, &form)
- case git.EntryModeTree:
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", fileErr.Path), tplEditFile, &form)
- case git.EntryModeBlob:
- ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplEditFile, &form)
- default:
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", fileErr.Path), tplEditFile, &form)
- }
- } else {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if files_service.IsErrRepoFileAlreadyExists(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), tplEditFile, &form)
- } else if git.IsErrBranchNotExist(err) {
- // For when a user adds/updates a file to a branch that no longer exists
- if branchErr, ok := err.(git.ErrBranchNotExist); ok {
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_does_not_exist", branchErr.Name), tplEditFile, &form)
- } else {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if git_model.IsErrBranchAlreadyExists(err) {
- // For when a user specifies a new branch that already exists
- ctx.Data["Err_NewBranchName"] = true
- if branchErr, ok := err.(git_model.ErrBranchAlreadyExists); ok {
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplEditFile, &form)
- } else {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if files_service.IsErrCommitIDDoesNotMatch(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.commit_id_not_matching"), tplEditFile, &form)
- } else if git.IsErrPushOutOfDate(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.push_out_of_date"), tplEditFile, &form)
- } else if git.IsErrPushRejected(err) {
- errPushRej := err.(*git.ErrPushRejected)
- if len(errPushRej.Message) == 0 {
- ctx.RenderWithErr(ctx.Tr("repo.editor.push_rejected_no_message"), tplEditFile, &form)
- } else {
- flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
- "Message": ctx.Tr("repo.editor.push_rejected"),
- "Summary": ctx.Tr("repo.editor.push_rejected_summary"),
- "Details": utils.SanitizeFlashErrorString(errPushRej.Message),
- })
- if err != nil {
- ctx.ServerError("editFilePost.HTMLString", err)
- return
- }
- ctx.RenderWithErr(flashError, tplEditFile, &form)
- }
- } else {
- flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
- "Message": ctx.Tr("repo.editor.fail_to_update_file", form.TreePath),
- "Summary": ctx.Tr("repo.editor.fail_to_update_file_summary"),
- "Details": utils.SanitizeFlashErrorString(err.Error()),
- })
- if err != nil {
- ctx.ServerError("editFilePost.HTMLString", err)
- return
- }
- ctx.RenderWithErr(flashError, tplEditFile, &form)
- }
- }
-
- redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath)
-}
-
-// EditFilePost response for editing file
-func EditFilePost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.EditRepoFileForm)
- editFilePost(ctx, *form, false)
-}
-
-// NewFilePost response for creating file
-func NewFilePost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.EditRepoFileForm)
- editFilePost(ctx, *form, true)
-}
-
-// DiffPreviewPost render preview diff page
-func DiffPreviewPost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.EditPreviewDiffForm)
- treePath := cleanUploadFileName(ctx.Repo.TreePath)
- if len(treePath) == 0 {
- ctx.HTTPError(http.StatusInternalServerError, "file name to diff is invalid")
- return
- }
-
- entry, err := ctx.Repo.Commit.GetTreeEntryByPath(treePath)
+ Signoff: parsed.form.Signoff,
+ Author: parsed.GitCommitter,
+ Committer: parsed.GitCommitter,
+ })
if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, "GetTreeEntryByPath: "+err.Error())
- return
- } else if entry.IsDir() {
- ctx.HTTPError(http.StatusUnprocessableEntity)
+ editorHandleFileOperationError(ctx, parsed.NewBranchName, err)
return
}
- diff, err := files_service.GetDiffPreview(ctx, ctx.Repo.Repository, ctx.Repo.BranchName, treePath, form.Content)
- if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, "GetDiffPreview: "+err.Error())
- return
- }
-
- if len(diff.Files) != 0 {
- ctx.Data["File"] = diff.Files[0]
- }
-
- ctx.HTML(http.StatusOK, tplEditDiffPreview)
+ redirectForCommitChoice(ctx, parsed, parsed.form.TreePath)
}
// DeleteFile render delete file page
func DeleteFile(ctx *context.Context) {
- ctx.Data["PageIsDelete"] = true
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- treePath := cleanUploadFileName(ctx.Repo.TreePath)
-
- if treePath != ctx.Repo.TreePath {
- ctx.Redirect(path.Join(ctx.Repo.RepoLink, "_delete", util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(treePath)))
+ prepareEditorCommitFormOptions(ctx, "_delete")
+ if ctx.Written() {
return
}
-
- ctx.Data["TreePath"] = treePath
- canCommit := renderCommitRights(ctx)
-
- ctx.Data["commit_summary"] = ""
- ctx.Data["commit_message"] = ""
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- if canCommit {
- ctx.Data["commit_choice"] = frmCommitChoiceDirect
- } else {
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- }
- ctx.Data["new_branch_name"] = GetUniquePatchBranchName(ctx)
-
+ ctx.Data["PageIsDelete"] = true
ctx.HTML(http.StatusOK, tplDeleteFile)
}
// DeleteFilePost response for deleting file
func DeleteFilePost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.DeleteRepoFileForm)
- canCommit := renderCommitRights(ctx)
- branchName := ctx.Repo.BranchName
- if form.CommitChoice == frmCommitChoiceNewBranch {
- branchName = form.NewBranchName
- }
-
- ctx.Data["PageIsDelete"] = true
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- ctx.Data["TreePath"] = ctx.Repo.TreePath
- ctx.Data["commit_summary"] = form.CommitSummary
- ctx.Data["commit_message"] = form.CommitMessage
- ctx.Data["commit_choice"] = form.CommitChoice
- ctx.Data["new_branch_name"] = form.NewBranchName
- ctx.Data["last_commit"] = ctx.Repo.CommitID
-
- if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplDeleteFile)
+ parsed := prepareEditorCommitSubmittedForm[*forms.DeleteRepoFileForm](ctx)
+ if ctx.Written() {
return
}
- if branchName == ctx.Repo.BranchName && !canCommit {
- ctx.Data["Err_NewBranchName"] = true
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- ctx.RenderWithErr(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", branchName), tplDeleteFile, &form)
- return
- }
-
- message := strings.TrimSpace(form.CommitSummary)
- if len(message) == 0 {
- message = ctx.Locale.TrString("repo.editor.delete", ctx.Repo.TreePath)
- }
- form.CommitMessage = strings.TrimSpace(form.CommitMessage)
- if len(form.CommitMessage) > 0 {
- message += "\n\n" + form.CommitMessage
- }
-
- gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, form.CommitEmail)
- if !valid {
- ctx.Data["Err_CommitEmail"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.invalid_commit_email"), tplDeleteFile, &form)
- return
- }
-
- if _, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
- LastCommitID: form.LastCommit,
- OldBranch: ctx.Repo.BranchName,
- NewBranch: branchName,
+ treePath := ctx.Repo.TreePath
+ _, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
+ LastCommitID: parsed.form.LastCommit,
+ OldBranch: parsed.OldBranchName,
+ NewBranch: parsed.NewBranchName,
Files: []*files_service.ChangeRepoFile{
{
Operation: "delete",
- TreePath: ctx.Repo.TreePath,
+ TreePath: treePath,
},
},
- Message: message,
- Signoff: form.Signoff,
- Author: gitCommitter,
- Committer: gitCommitter,
- }); err != nil {
- // This is where we handle all the errors thrown by repofiles.DeleteRepoFile
- if git.IsErrNotExist(err) || files_service.IsErrRepoFileDoesNotExist(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_deleting_no_longer_exists", ctx.Repo.TreePath), tplDeleteFile, &form)
- } else if files_service.IsErrFilenameInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", ctx.Repo.TreePath), tplDeleteFile, &form)
- } else if files_service.IsErrFilePathInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- if fileErr, ok := err.(files_service.ErrFilePathInvalid); ok {
- switch fileErr.Type {
- case git.EntryModeSymlink:
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_is_a_symlink", fileErr.Path), tplDeleteFile, &form)
- case git.EntryModeTree:
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", fileErr.Path), tplDeleteFile, &form)
- case git.EntryModeBlob:
- ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplDeleteFile, &form)
- default:
- ctx.ServerError("DeleteRepoFile", err)
- }
- } else {
- ctx.ServerError("DeleteRepoFile", err)
- }
- } else if git.IsErrBranchNotExist(err) {
- // For when a user deletes a file to a branch that no longer exists
- if branchErr, ok := err.(git.ErrBranchNotExist); ok {
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_does_not_exist", branchErr.Name), tplDeleteFile, &form)
- } else {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if git_model.IsErrBranchAlreadyExists(err) {
- // For when a user specifies a new branch that already exists
- if branchErr, ok := err.(git_model.ErrBranchAlreadyExists); ok {
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplDeleteFile, &form)
- } else {
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if files_service.IsErrCommitIDDoesNotMatch(err) || git.IsErrPushOutOfDate(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_deleting", ctx.Repo.RepoLink+"/compare/"+util.PathEscapeSegments(form.LastCommit)+"..."+util.PathEscapeSegments(ctx.Repo.CommitID)), tplDeleteFile, &form)
- } else if git.IsErrPushRejected(err) {
- errPushRej := err.(*git.ErrPushRejected)
- if len(errPushRej.Message) == 0 {
- ctx.RenderWithErr(ctx.Tr("repo.editor.push_rejected_no_message"), tplDeleteFile, &form)
- } else {
- flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
- "Message": ctx.Tr("repo.editor.push_rejected"),
- "Summary": ctx.Tr("repo.editor.push_rejected_summary"),
- "Details": utils.SanitizeFlashErrorString(errPushRej.Message),
- })
- if err != nil {
- ctx.ServerError("DeleteFilePost.HTMLString", err)
- return
- }
- ctx.RenderWithErr(flashError, tplDeleteFile, &form)
- }
- } else {
- ctx.ServerError("DeleteRepoFile", err)
- }
+ Message: parsed.GetCommitMessage(ctx.Locale.TrString("repo.editor.delete", treePath)),
+ Signoff: parsed.form.Signoff,
+ Author: parsed.GitCommitter,
+ Committer: parsed.GitCommitter,
+ })
+ if err != nil {
+ editorHandleFileOperationError(ctx, parsed.NewBranchName, err)
return
}
- ctx.Flash.Success(ctx.Tr("repo.editor.file_delete_success", ctx.Repo.TreePath))
- treePath := path.Dir(ctx.Repo.TreePath)
- if treePath == "." {
- treePath = "" // the file deleted was in the root, so we return the user to the root directory
- }
- if len(treePath) > 0 {
- // Need to get the latest commit since it changed
- commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.BranchName)
- if err == nil && commit != nil {
- // We have the comment, now find what directory we can return the user to
- // (must have entries)
- treePath = GetClosestParentWithFiles(treePath, commit)
- } else {
- treePath = "" // otherwise return them to the root of the repo
- }
- }
-
- redirectForCommitChoice(ctx, form.CommitChoice, branchName, treePath)
+ ctx.Flash.Success(ctx.Tr("repo.editor.file_delete_success", treePath))
+ redirectTreePath := getClosestParentWithFiles(ctx.Repo.GitRepo, parsed.NewBranchName, treePath)
+ redirectForCommitChoice(ctx, parsed, redirectTreePath)
}
-// UploadFile render upload file page
func UploadFile(ctx *context.Context) {
ctx.Data["PageIsUpload"] = true
- upload.AddUploadContext(ctx, "repo")
- canCommit := renderCommitRights(ctx)
- treePath := cleanUploadFileName(ctx.Repo.TreePath)
- if treePath != ctx.Repo.TreePath {
- ctx.Redirect(path.Join(ctx.Repo.RepoLink, "_upload", util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(treePath)))
+ prepareTreePathFieldsAndPaths(ctx, ctx.Repo.TreePath)
+ opts := prepareEditorCommitFormOptions(ctx, "_upload")
+ if ctx.Written() {
return
}
- ctx.Repo.TreePath = treePath
-
- treeNames, treePaths := getParentTreeFields(ctx.Repo.TreePath)
- if len(treeNames) == 0 {
- // We must at least have one element for user to input.
- treeNames = []string{""}
- }
-
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["TreePaths"] = treePaths
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- ctx.Data["commit_summary"] = ""
- ctx.Data["commit_message"] = ""
- if canCommit {
- ctx.Data["commit_choice"] = frmCommitChoiceDirect
- } else {
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- }
- ctx.Data["new_branch_name"] = GetUniquePatchBranchName(ctx)
+ upload.AddUploadContextForRepo(ctx, opts.TargetRepo)
ctx.HTML(http.StatusOK, tplUploadFile)
}
-// UploadFilePost response for uploading file
func UploadFilePost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.UploadRepoFileForm)
- ctx.Data["PageIsUpload"] = true
- upload.AddUploadContext(ctx, "repo")
- canCommit := renderCommitRights(ctx)
-
- oldBranchName := ctx.Repo.BranchName
- branchName := oldBranchName
-
- if form.CommitChoice == frmCommitChoiceNewBranch {
- branchName = form.NewBranchName
- }
-
- form.TreePath = cleanUploadFileName(form.TreePath)
-
- treeNames, treePaths := getParentTreeFields(form.TreePath)
- if len(treeNames) == 0 {
- // We must at least have one element for user to input.
- treeNames = []string{""}
- }
-
- ctx.Data["TreePath"] = form.TreePath
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["TreePaths"] = treePaths
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/branch/" + util.PathEscapeSegments(branchName)
- ctx.Data["commit_summary"] = form.CommitSummary
- ctx.Data["commit_message"] = form.CommitMessage
- ctx.Data["commit_choice"] = form.CommitChoice
- ctx.Data["new_branch_name"] = branchName
-
- if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplUploadFile)
+ parsed := prepareEditorCommitSubmittedForm[*forms.UploadRepoFileForm](ctx)
+ if ctx.Written() {
return
}
- if oldBranchName != branchName {
- if exist, err := git_model.IsBranchExist(ctx, ctx.Repo.Repository.ID, branchName); err == nil && exist {
- ctx.Data["Err_NewBranchName"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplUploadFile, &form)
- return
- }
- } else if !canCommit {
- ctx.Data["Err_NewBranchName"] = true
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- ctx.RenderWithErr(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", branchName), tplUploadFile, &form)
- return
- }
-
- if !ctx.Repo.Repository.IsEmpty {
- var newTreePath string
- for _, part := range treeNames {
- newTreePath = path.Join(newTreePath, part)
- entry, err := ctx.Repo.Commit.GetTreeEntryByPath(newTreePath)
- if err != nil {
- if git.IsErrNotExist(err) {
- break // Means there is no item with that name, so we're good
- }
- ctx.ServerError("Repo.Commit.GetTreeEntryByPath", err)
- return
- }
-
- // User can only upload files to a directory, the directory name shouldn't be an existing file.
- if !entry.IsDir() {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplUploadFile, &form)
- return
- }
- }
- }
-
- message := strings.TrimSpace(form.CommitSummary)
- if len(message) == 0 {
- dir := form.TreePath
- if dir == "" {
- dir = "/"
- }
- message = ctx.Locale.TrString("repo.editor.upload_files_to_dir", dir)
- }
-
- form.CommitMessage = strings.TrimSpace(form.CommitMessage)
- if len(form.CommitMessage) > 0 {
- message += "\n\n" + form.CommitMessage
- }
-
- gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, form.CommitEmail)
- if !valid {
- ctx.Data["Err_CommitEmail"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.invalid_commit_email"), tplUploadFile, &form)
- return
- }
-
- if err := files_service.UploadRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.UploadRepoFileOptions{
- LastCommitID: ctx.Repo.CommitID,
- OldBranch: oldBranchName,
- NewBranch: branchName,
- TreePath: form.TreePath,
- Message: message,
- Files: form.Files,
- Signoff: form.Signoff,
- Author: gitCommitter,
- Committer: gitCommitter,
- }); err != nil {
- if git_model.IsErrLFSFileLocked(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.upload_file_is_locked", err.(git_model.ErrLFSFileLocked).Path, err.(git_model.ErrLFSFileLocked).UserName), tplUploadFile, &form)
- } else if files_service.IsErrFilenameInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", form.TreePath), tplUploadFile, &form)
- } else if files_service.IsErrFilePathInvalid(err) {
- ctx.Data["Err_TreePath"] = true
- fileErr := err.(files_service.ErrFilePathInvalid)
- switch fileErr.Type {
- case git.EntryModeSymlink:
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_is_a_symlink", fileErr.Path), tplUploadFile, &form)
- case git.EntryModeTree:
- ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", fileErr.Path), tplUploadFile, &form)
- case git.EntryModeBlob:
- ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplUploadFile, &form)
- default:
- ctx.HTTPError(http.StatusInternalServerError, err.Error())
- }
- } else if files_service.IsErrRepoFileAlreadyExists(err) {
- ctx.Data["Err_TreePath"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), tplUploadFile, &form)
- } else if git.IsErrBranchNotExist(err) {
- branchErr := err.(git.ErrBranchNotExist)
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_does_not_exist", branchErr.Name), tplUploadFile, &form)
- } else if git_model.IsErrBranchAlreadyExists(err) {
- // For when a user specifies a new branch that already exists
- ctx.Data["Err_NewBranchName"] = true
- branchErr := err.(git_model.ErrBranchAlreadyExists)
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplUploadFile, &form)
- } else if git.IsErrPushOutOfDate(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+util.PathEscapeSegments(ctx.Repo.CommitID)+"..."+util.PathEscapeSegments(form.NewBranchName)), tplUploadFile, &form)
- } else if git.IsErrPushRejected(err) {
- errPushRej := err.(*git.ErrPushRejected)
- if len(errPushRej.Message) == 0 {
- ctx.RenderWithErr(ctx.Tr("repo.editor.push_rejected_no_message"), tplUploadFile, &form)
- } else {
- flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
- "Message": ctx.Tr("repo.editor.push_rejected"),
- "Summary": ctx.Tr("repo.editor.push_rejected_summary"),
- "Details": utils.SanitizeFlashErrorString(errPushRej.Message),
- })
- if err != nil {
- ctx.ServerError("UploadFilePost.HTMLString", err)
- return
- }
- ctx.RenderWithErr(flashError, tplUploadFile, &form)
- }
- } else {
- // os.ErrNotExist - upload file missing in the intervening time?!
- log.Error("Error during upload to repo: %-v to filepath: %s on %s from %s: %v", ctx.Repo.Repository, form.TreePath, oldBranchName, form.NewBranchName, err)
- ctx.RenderWithErr(ctx.Tr("repo.editor.unable_to_upload_files", form.TreePath, err), tplUploadFile, &form)
- }
- return
- }
-
- if ctx.Repo.Repository.IsEmpty {
- if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty {
- _ = repo_model.UpdateRepositoryColsWithAutoTime(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty")
- }
- }
-
- redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath)
-}
-
-func cleanUploadFileName(name string) string {
- // Rebase the filename
- name = util.PathJoinRel(name)
- // Git disallows any filenames to have a .git directory in them.
- for _, part := range strings.Split(name, "/") {
- if strings.ToLower(part) == ".git" {
- return ""
- }
- }
- return name
-}
-
-// UploadFileToServer upload file to server file dir not git
-func UploadFileToServer(ctx *context.Context) {
- file, header, err := ctx.Req.FormFile("file")
- if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, fmt.Sprintf("FormFile: %v", err))
- return
- }
- defer file.Close()
-
- buf := make([]byte, 1024)
- n, _ := util.ReadAtMost(file, buf)
- if n > 0 {
- buf = buf[:n]
- }
-
- err = upload.Verify(buf, header.Filename, setting.Repository.Upload.AllowedTypes)
- if err != nil {
- ctx.HTTPError(http.StatusBadRequest, err.Error())
- return
- }
-
- name := cleanUploadFileName(header.Filename)
- if len(name) == 0 {
- ctx.HTTPError(http.StatusInternalServerError, "Upload file name is invalid")
- return
- }
-
- upload, err := repo_model.NewUpload(ctx, name, buf, file)
- if err != nil {
- ctx.HTTPError(http.StatusInternalServerError, fmt.Sprintf("NewUpload: %v", err))
- return
- }
-
- log.Trace("New file uploaded: %s", upload.UUID)
- ctx.JSON(http.StatusOK, map[string]string{
- "uuid": upload.UUID,
+ defaultCommitMessage := ctx.Locale.TrString("repo.editor.upload_files_to_dir", util.IfZero(parsed.form.TreePath, "/"))
+ err := files_service.UploadRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.UploadRepoFileOptions{
+ LastCommitID: parsed.form.LastCommit,
+ OldBranch: parsed.OldBranchName,
+ NewBranch: parsed.NewBranchName,
+ TreePath: parsed.form.TreePath,
+ Message: parsed.GetCommitMessage(defaultCommitMessage),
+ Files: parsed.form.Files,
+ Signoff: parsed.form.Signoff,
+ Author: parsed.GitCommitter,
+ Committer: parsed.GitCommitter,
})
-}
-
-// RemoveUploadFileFromServer remove file from server file dir
-func RemoveUploadFileFromServer(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.RemoveUploadFileForm)
- if len(form.File) == 0 {
- ctx.Status(http.StatusNoContent)
+ if err != nil {
+ editorHandleFileOperationError(ctx, parsed.NewBranchName, err)
return
}
-
- if err := repo_model.DeleteUploadByUUID(ctx, form.File); err != nil {
- ctx.HTTPError(http.StatusInternalServerError, fmt.Sprintf("DeleteUploadByUUID: %v", err))
- return
- }
-
- log.Trace("Upload file removed: %s", form.File)
- ctx.Status(http.StatusNoContent)
-}
-
-// GetUniquePatchBranchName Gets a unique branch name for a new patch branch
-// It will be in the form of -patch- where is the first branch of this format
-// that doesn't already exist. If we exceed 1000 tries or an error is thrown, we just return "" so the user has to
-// type in the branch name themselves (will be an empty field)
-func GetUniquePatchBranchName(ctx *context.Context) string {
- prefix := ctx.Doer.LowerName + "-patch-"
- for i := 1; i <= 1000; i++ {
- branchName := fmt.Sprintf("%s%d", prefix, i)
- if exist, err := git_model.IsBranchExist(ctx, ctx.Repo.Repository.ID, branchName); err != nil {
- log.Error("GetUniquePatchBranchName: %v", err)
- return ""
- } else if !exist {
- return branchName
- }
- }
- return ""
-}
-
-// GetClosestParentWithFiles Recursively gets the path of parent in a tree that has files (used when file in a tree is
-// deleted). Returns "" for the root if no parents other than the root have files. If the given treePath isn't a
-// SubTree or it has no entries, we go up one dir and see if we can return the user to that listing.
-func GetClosestParentWithFiles(treePath string, commit *git.Commit) string {
- if len(treePath) == 0 || treePath == "." {
- return ""
- }
- // see if the tree has entries
- if tree, err := commit.SubTree(treePath); err != nil {
- // failed to get tree, going up a dir
- return GetClosestParentWithFiles(path.Dir(treePath), commit)
- } else if entries, err := tree.ListEntries(); err != nil || len(entries) == 0 {
- // no files in this dir, going up a dir
- return GetClosestParentWithFiles(path.Dir(treePath), commit)
- }
- return treePath
+ redirectForCommitChoice(ctx, parsed, parsed.form.TreePath)
}
diff --git a/routers/web/repo/editor_apply_patch.go b/routers/web/repo/editor_apply_patch.go
new file mode 100644
index 00000000000..bd2811cc5f0
--- /dev/null
+++ b/routers/web/repo/editor_apply_patch.go
@@ -0,0 +1,51 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "net/http"
+ "strings"
+
+ "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/forms"
+ "code.gitea.io/gitea/services/repository/files"
+)
+
+func NewDiffPatch(ctx *context.Context) {
+ prepareEditorCommitFormOptions(ctx, "_diffpatch")
+ if ctx.Written() {
+ return
+ }
+
+ ctx.Data["PageIsPatch"] = true
+ ctx.HTML(http.StatusOK, tplPatchFile)
+}
+
+// NewDiffPatchPost response for sending patch page
+func NewDiffPatchPost(ctx *context.Context) {
+ parsed := prepareEditorCommitSubmittedForm[*forms.EditRepoFileForm](ctx)
+ if ctx.Written() {
+ return
+ }
+
+ defaultCommitMessage := ctx.Locale.TrString("repo.editor.patch")
+ _, err := files.ApplyDiffPatch(ctx, ctx.Repo.Repository, ctx.Doer, &files.ApplyDiffPatchOptions{
+ LastCommitID: parsed.form.LastCommit,
+ OldBranch: parsed.OldBranchName,
+ NewBranch: parsed.NewBranchName,
+ Message: parsed.GetCommitMessage(defaultCommitMessage),
+ Content: strings.ReplaceAll(parsed.form.Content.Value(), "\r\n", "\n"),
+ Author: parsed.GitCommitter,
+ Committer: parsed.GitCommitter,
+ })
+ if err != nil {
+ err = util.ErrorWrapLocale(err, "repo.editor.fail_to_apply_patch")
+ }
+ if err != nil {
+ editorHandleFileOperationError(ctx, parsed.NewBranchName, err)
+ return
+ }
+ redirectForCommitChoice(ctx, parsed, parsed.form.TreePath)
+}
diff --git a/routers/web/repo/editor_cherry_pick.go b/routers/web/repo/editor_cherry_pick.go
new file mode 100644
index 00000000000..10c2741b1cb
--- /dev/null
+++ b/routers/web/repo/editor_cherry_pick.go
@@ -0,0 +1,86 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "bytes"
+ "net/http"
+ "strings"
+
+ "code.gitea.io/gitea/modules/git"
+ "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/forms"
+ "code.gitea.io/gitea/services/repository/files"
+)
+
+func CherryPick(ctx *context.Context) {
+ prepareEditorCommitFormOptions(ctx, "_cherrypick")
+ if ctx.Written() {
+ return
+ }
+
+ fromCommitID := ctx.PathParam("sha")
+ ctx.Data["FromCommitID"] = fromCommitID
+ cherryPickCommit, err := ctx.Repo.GitRepo.GetCommit(fromCommitID)
+ if err != nil {
+ HandleGitError(ctx, "GetCommit", err)
+ return
+ }
+
+ if ctx.FormString("cherry-pick-type") == "revert" {
+ ctx.Data["CherryPickType"] = "revert"
+ ctx.Data["commit_summary"] = "revert " + ctx.PathParam("sha")
+ ctx.Data["commit_message"] = "revert " + cherryPickCommit.Message()
+ } else {
+ ctx.Data["CherryPickType"] = "cherry-pick"
+ splits := strings.SplitN(cherryPickCommit.Message(), "\n", 2)
+ ctx.Data["commit_summary"] = splits[0]
+ ctx.Data["commit_message"] = splits[1]
+ }
+
+ ctx.HTML(http.StatusOK, tplCherryPick)
+}
+
+func CherryPickPost(ctx *context.Context) {
+ fromCommitID := ctx.PathParam("sha")
+ parsed := prepareEditorCommitSubmittedForm[*forms.CherryPickForm](ctx)
+ if ctx.Written() {
+ return
+ }
+
+ defaultCommitMessage := util.Iif(parsed.form.Revert, ctx.Locale.TrString("repo.commit.revert-header", fromCommitID), ctx.Locale.TrString("repo.commit.cherry-pick-header", fromCommitID))
+ opts := &files.ApplyDiffPatchOptions{
+ LastCommitID: parsed.form.LastCommit,
+ OldBranch: parsed.OldBranchName,
+ NewBranch: parsed.NewBranchName,
+ Message: parsed.GetCommitMessage(defaultCommitMessage),
+ Author: parsed.GitCommitter,
+ Committer: parsed.GitCommitter,
+ }
+
+ // First try the simple plain read-tree -m approach
+ opts.Content = fromCommitID
+ if _, err := files.CherryPick(ctx, ctx.Repo.Repository, ctx.Doer, parsed.form.Revert, opts); err != nil {
+ // Drop through to the "apply" method
+ buf := &bytes.Buffer{}
+ if parsed.form.Revert {
+ err = git.GetReverseRawDiff(ctx, ctx.Repo.Repository.RepoPath(), fromCommitID, buf)
+ } else {
+ err = git.GetRawDiff(ctx.Repo.GitRepo, fromCommitID, "patch", buf)
+ }
+ if err == nil {
+ opts.Content = buf.String()
+ _, err = files.ApplyDiffPatch(ctx, ctx.Repo.Repository, ctx.Doer, opts)
+ if err != nil {
+ err = util.ErrorWrapLocale(err, "repo.editor.fail_to_apply_patch")
+ }
+ }
+ if err != nil {
+ editorHandleFileOperationError(ctx, parsed.NewBranchName, err)
+ return
+ }
+ }
+ redirectForCommitChoice(ctx, parsed, parsed.form.TreePath)
+}
diff --git a/routers/web/repo/editor_error.go b/routers/web/repo/editor_error.go
new file mode 100644
index 00000000000..245226a039e
--- /dev/null
+++ b/routers/web/repo/editor_error.go
@@ -0,0 +1,82 @@
+// Copyright 2025 Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "errors"
+
+ git_model "code.gitea.io/gitea/models/git"
+ "code.gitea.io/gitea/modules/git"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/routers/utils"
+ context_service "code.gitea.io/gitea/services/context"
+ files_service "code.gitea.io/gitea/services/repository/files"
+)
+
+func errorAs[T error](v error) (e T, ok bool) {
+ if errors.As(v, &e) {
+ return e, true
+ }
+ return e, false
+}
+
+func editorHandleFileOperationErrorRender(ctx *context_service.Context, message, summary, details string) {
+ flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
+ "Message": message,
+ "Summary": summary,
+ "Details": utils.SanitizeFlashErrorString(details),
+ })
+ if err == nil {
+ ctx.JSONError(flashError)
+ } else {
+ log.Error("RenderToHTML: %v", err)
+ ctx.JSONError(message + "\n" + summary + "\n" + utils.SanitizeFlashErrorString(details))
+ }
+}
+
+func editorHandleFileOperationError(ctx *context_service.Context, targetBranchName string, err error) {
+ if errAs := util.ErrorAsLocale(err); errAs != nil {
+ ctx.JSONError(ctx.Tr(errAs.TrKey, errAs.TrArgs...))
+ } else if errAs, ok := errorAs[git.ErrNotExist](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.file_modifying_no_longer_exists", errAs.RelPath))
+ } else if errAs, ok := errorAs[git_model.ErrLFSFileLocked](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.upload_file_is_locked", errAs.Path, errAs.UserName))
+ } else if errAs, ok := errorAs[files_service.ErrFilenameInvalid](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.filename_is_invalid", errAs.Path))
+ } else if errAs, ok := errorAs[files_service.ErrFilePathInvalid](err); ok {
+ switch errAs.Type {
+ case git.EntryModeSymlink:
+ ctx.JSONError(ctx.Tr("repo.editor.file_is_a_symlink", errAs.Path))
+ case git.EntryModeTree:
+ ctx.JSONError(ctx.Tr("repo.editor.filename_is_a_directory", errAs.Path))
+ case git.EntryModeBlob:
+ ctx.JSONError(ctx.Tr("repo.editor.directory_is_a_file", errAs.Path))
+ default:
+ ctx.JSONError(ctx.Tr("repo.editor.filename_is_invalid", errAs.Path))
+ }
+ } else if errAs, ok := errorAs[files_service.ErrRepoFileAlreadyExists](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.file_already_exists", errAs.Path))
+ } else if errAs, ok := errorAs[git.ErrBranchNotExist](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.branch_does_not_exist", errAs.Name))
+ } else if errAs, ok := errorAs[git_model.ErrBranchAlreadyExists](err); ok {
+ ctx.JSONError(ctx.Tr("repo.editor.branch_already_exists", errAs.BranchName))
+ } else if files_service.IsErrCommitIDDoesNotMatch(err) {
+ ctx.JSONError(ctx.Tr("repo.editor.commit_id_not_matching"))
+ } else if files_service.IsErrCommitIDDoesNotMatch(err) || git.IsErrPushOutOfDate(err) {
+ ctx.JSONError(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+util.PathEscapeSegments(ctx.Repo.CommitID)+"..."+util.PathEscapeSegments(targetBranchName)))
+ } else if errAs, ok := errorAs[*git.ErrPushRejected](err); ok {
+ if errAs.Message == "" {
+ ctx.JSONError(ctx.Tr("repo.editor.push_rejected_no_message"))
+ } else {
+ editorHandleFileOperationErrorRender(ctx, ctx.Locale.TrString("repo.editor.push_rejected"), ctx.Locale.TrString("repo.editor.push_rejected_summary"), errAs.Message)
+ }
+ } else if errors.Is(err, util.ErrNotExist) {
+ ctx.JSONError(ctx.Tr("error.not_found"))
+ } else {
+ setting.PanicInDevOrTesting("unclear err %T: %v", err, err)
+ editorHandleFileOperationErrorRender(ctx, ctx.Locale.TrString("repo.editor.failed_to_commit"), ctx.Locale.TrString("repo.editor.failed_to_commit_summary"), err.Error())
+ }
+}
diff --git a/routers/web/repo/editor_fork.go b/routers/web/repo/editor_fork.go
new file mode 100644
index 00000000000..b78a634c005
--- /dev/null
+++ b/routers/web/repo/editor_fork.go
@@ -0,0 +1,31 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "net/http"
+
+ "code.gitea.io/gitea/modules/templates"
+ "code.gitea.io/gitea/services/context"
+ repo_service "code.gitea.io/gitea/services/repository"
+)
+
+const tplEditorFork templates.TplName = "repo/editor/fork"
+
+func ForkToEdit(ctx *context.Context) {
+ ctx.HTML(http.StatusOK, tplEditorFork)
+}
+
+func ForkToEditPost(ctx *context.Context) {
+ ForkRepoTo(ctx, ctx.Doer, repo_service.ForkRepoOptions{
+ BaseRepo: ctx.Repo.Repository,
+ Name: getUniqueRepositoryName(ctx, ctx.Doer.ID, ctx.Repo.Repository.Name),
+ Description: ctx.Repo.Repository.Description,
+ SingleBranch: ctx.Repo.Repository.DefaultBranch, // maybe we only need the default branch in the fork?
+ })
+ if ctx.Written() {
+ return
+ }
+ ctx.JSONRedirect("") // reload the page, the new fork should be editable now
+}
diff --git a/routers/web/repo/editor_preview.go b/routers/web/repo/editor_preview.go
new file mode 100644
index 00000000000..14be5b72b65
--- /dev/null
+++ b/routers/web/repo/editor_preview.go
@@ -0,0 +1,41 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "net/http"
+
+ "code.gitea.io/gitea/services/context"
+ files_service "code.gitea.io/gitea/services/repository/files"
+)
+
+func DiffPreviewPost(ctx *context.Context) {
+ content := ctx.FormString("content")
+ treePath := files_service.CleanGitTreePath(ctx.Repo.TreePath)
+ if treePath == "" {
+ ctx.HTTPError(http.StatusBadRequest, "file name to diff is invalid")
+ return
+ }
+
+ entry, err := ctx.Repo.Commit.GetTreeEntryByPath(treePath)
+ if err != nil {
+ ctx.ServerError("GetTreeEntryByPath", err)
+ return
+ } else if entry.IsDir() {
+ ctx.HTTPError(http.StatusUnprocessableEntity)
+ return
+ }
+
+ diff, err := files_service.GetDiffPreview(ctx, ctx.Repo.Repository, ctx.Repo.BranchName, treePath, content)
+ if err != nil {
+ ctx.ServerError("GetDiffPreview", err)
+ return
+ }
+
+ if len(diff.Files) != 0 {
+ ctx.Data["File"] = diff.Files[0]
+ }
+
+ ctx.HTML(http.StatusOK, tplEditDiffPreview)
+}
diff --git a/routers/web/repo/editor_test.go b/routers/web/repo/editor_test.go
index 89bf8f309cd..3ba75d5d706 100644
--- a/routers/web/repo/editor_test.go
+++ b/routers/web/repo/editor_test.go
@@ -6,76 +6,26 @@ package repo
import (
"testing"
+ repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
- "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/gitrepo"
- "code.gitea.io/gitea/services/contexttest"
"github.com/stretchr/testify/assert"
)
-func TestCleanUploadName(t *testing.T) {
+func TestEditorUtils(t *testing.T) {
unittest.PrepareTestEnv(t)
-
- kases := map[string]string{
- ".git/refs/master": "",
- "/root/abc": "root/abc",
- "./../../abc": "abc",
- "a/../.git": "",
- "a/../../../abc": "abc",
- "../../../acd": "acd",
- "../../.git/abc": "",
- "..\\..\\.git/abc": "..\\..\\.git/abc",
- "..\\../.git/abc": "",
- "..\\../.git": "",
- "abc/../def": "def",
- ".drone.yml": ".drone.yml",
- ".abc/def/.drone.yml": ".abc/def/.drone.yml",
- "..drone.yml.": "..drone.yml.",
- "..a.dotty...name...": "..a.dotty...name...",
- "..a.dotty../.folder../.name...": "..a.dotty../.folder../.name...",
- }
- for k, v := range kases {
- assert.Equal(t, cleanUploadFileName(k), v)
- }
-}
-
-func TestGetUniquePatchBranchName(t *testing.T) {
- unittest.PrepareTestEnv(t)
- ctx, _ := contexttest.MockContext(t, "user2/repo1")
- ctx.SetPathParam("id", "1")
- contexttest.LoadRepo(t, ctx, 1)
- contexttest.LoadRepoCommit(t, ctx)
- contexttest.LoadUser(t, ctx, 2)
- contexttest.LoadGitRepo(t, ctx)
- defer ctx.Repo.GitRepo.Close()
-
- expectedBranchName := "user2-patch-1"
- branchName := GetUniquePatchBranchName(ctx)
- assert.Equal(t, expectedBranchName, branchName)
-}
-
-func TestGetClosestParentWithFiles(t *testing.T) {
- unittest.PrepareTestEnv(t)
- ctx, _ := contexttest.MockContext(t, "user2/repo1")
- ctx.SetPathParam("id", "1")
- contexttest.LoadRepo(t, ctx, 1)
- contexttest.LoadRepoCommit(t, ctx)
- contexttest.LoadUser(t, ctx, 2)
- contexttest.LoadGitRepo(t, ctx)
- defer ctx.Repo.GitRepo.Close()
-
- repo := ctx.Repo.Repository
- branch := repo.DefaultBranch
- gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
- defer gitRepo.Close()
- commit, _ := gitRepo.GetBranchCommit(branch)
- var expectedTreePath string // Should return the root dir, empty string, since there are no subdirs in this repo
- for _, deletedFile := range []string{
- "dir1/dir2/dir3/file.txt",
- "file.txt",
- } {
- treePath := GetClosestParentWithFiles(deletedFile, commit)
- assert.Equal(t, expectedTreePath, treePath)
- }
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+ t.Run("getUniquePatchBranchName", func(t *testing.T) {
+ branchName := getUniquePatchBranchName(t.Context(), "user2", repo)
+ assert.Equal(t, "user2-patch-1", branchName)
+ })
+ t.Run("getClosestParentWithFiles", func(t *testing.T) {
+ gitRepo, _ := gitrepo.OpenRepository(t.Context(), repo)
+ defer gitRepo.Close()
+ treePath := getClosestParentWithFiles(gitRepo, "sub-home-md-img-check", "docs/foo/bar")
+ assert.Equal(t, "docs", treePath)
+ treePath = getClosestParentWithFiles(gitRepo, "sub-home-md-img-check", "any/other")
+ assert.Empty(t, treePath)
+ })
}
diff --git a/routers/web/repo/editor_uploader.go b/routers/web/repo/editor_uploader.go
new file mode 100644
index 00000000000..1ce9a1aca46
--- /dev/null
+++ b/routers/web/repo/editor_uploader.go
@@ -0,0 +1,61 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "net/http"
+
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/context/upload"
+ files_service "code.gitea.io/gitea/services/repository/files"
+)
+
+// UploadFileToServer upload file to server file dir not git
+func UploadFileToServer(ctx *context.Context) {
+ file, header, err := ctx.Req.FormFile("file")
+ if err != nil {
+ ctx.ServerError("FormFile", err)
+ return
+ }
+ defer file.Close()
+
+ buf := make([]byte, 1024)
+ n, _ := util.ReadAtMost(file, buf)
+ if n > 0 {
+ buf = buf[:n]
+ }
+
+ err = upload.Verify(buf, header.Filename, setting.Repository.Upload.AllowedTypes)
+ if err != nil {
+ ctx.HTTPError(http.StatusBadRequest, err.Error())
+ return
+ }
+
+ name := files_service.CleanGitTreePath(header.Filename)
+ if len(name) == 0 {
+ ctx.HTTPError(http.StatusBadRequest, "Upload file name is invalid")
+ return
+ }
+
+ uploaded, err := repo_model.NewUpload(ctx, name, buf, file)
+ if err != nil {
+ ctx.ServerError("NewUpload", err)
+ return
+ }
+
+ ctx.JSON(http.StatusOK, map[string]string{"uuid": uploaded.UUID})
+}
+
+// RemoveUploadFileFromServer remove file from server file dir
+func RemoveUploadFileFromServer(ctx *context.Context) {
+ fileUUID := ctx.FormString("file")
+ if err := repo_model.DeleteUploadByUUID(ctx, fileUUID); err != nil {
+ ctx.ServerError("DeleteUploadByUUID", err)
+ return
+ }
+ ctx.Status(http.StatusNoContent)
+}
diff --git a/routers/web/repo/editor_util.go b/routers/web/repo/editor_util.go
new file mode 100644
index 00000000000..f910f0bd407
--- /dev/null
+++ b/routers/web/repo/editor_util.go
@@ -0,0 +1,110 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repo
+
+import (
+ "context"
+ "fmt"
+ "path"
+ "strings"
+
+ git_model "code.gitea.io/gitea/models/git"
+ repo_model "code.gitea.io/gitea/models/repo"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/git"
+ "code.gitea.io/gitea/modules/json"
+ "code.gitea.io/gitea/modules/log"
+ repo_module "code.gitea.io/gitea/modules/repository"
+ context_service "code.gitea.io/gitea/services/context"
+)
+
+// getUniquePatchBranchName Gets a unique branch name for a new patch branch
+// It will be in the form of -patch- where is the first branch of this format
+// that doesn't already exist. If we exceed 1000 tries or an error is thrown, we just return "" so the user has to
+// type in the branch name themselves (will be an empty field)
+func getUniquePatchBranchName(ctx context.Context, prefixName string, repo *repo_model.Repository) string {
+ prefix := prefixName + "-patch-"
+ for i := 1; i <= 1000; i++ {
+ branchName := fmt.Sprintf("%s%d", prefix, i)
+ if exist, err := git_model.IsBranchExist(ctx, repo.ID, branchName); err != nil {
+ log.Error("getUniquePatchBranchName: %v", err)
+ return ""
+ } else if !exist {
+ return branchName
+ }
+ }
+ return ""
+}
+
+// getClosestParentWithFiles Recursively gets the closest path of parent in a tree that has files when a file in a tree is
+// deleted. It returns "" for the tree root if no parents other than the root have files.
+func getClosestParentWithFiles(gitRepo *git.Repository, branchName, originTreePath string) string {
+ var f func(treePath string, commit *git.Commit) string
+ f = func(treePath string, commit *git.Commit) string {
+ if treePath == "" || treePath == "." {
+ return ""
+ }
+ // see if the tree has entries
+ if tree, err := commit.SubTree(treePath); err != nil {
+ return f(path.Dir(treePath), commit) // failed to get the tree, going up a dir
+ } else if entries, err := tree.ListEntries(); err != nil || len(entries) == 0 {
+ return f(path.Dir(treePath), commit) // no files in this dir, going up a dir
+ }
+ return treePath
+ }
+ commit, err := gitRepo.GetBranchCommit(branchName) // must get the commit again to get the latest change
+ if err != nil {
+ log.Error("GetBranchCommit: %v", err)
+ return ""
+ }
+ return f(originTreePath, commit)
+}
+
+// getContextRepoEditorConfig returns the editorconfig JSON string for given treePath or "null"
+func getContextRepoEditorConfig(ctx *context_service.Context, treePath string) string {
+ ec, _, err := ctx.Repo.GetEditorconfig()
+ if err == nil {
+ def, err := ec.GetDefinitionForFilename(treePath)
+ if err == nil {
+ jsonStr, _ := json.Marshal(def)
+ return string(jsonStr)
+ }
+ }
+ return "null"
+}
+
+// getParentTreeFields returns list of parent tree names and corresponding tree paths based on given treePath.
+// eg: []{"a", "b", "c"}, []{"a", "a/b", "a/b/c"}
+// or: []{""}, []{""} for the root treePath
+func getParentTreeFields(treePath string) (treeNames, treePaths []string) {
+ treeNames = strings.Split(treePath, "/")
+ treePaths = make([]string, len(treeNames))
+ for i := range treeNames {
+ treePaths[i] = strings.Join(treeNames[:i+1], "/")
+ }
+ return treeNames, treePaths
+}
+
+// getUniqueRepositoryName Gets a unique repository name for a user
+// It will append a - postfix if the name is already taken
+func getUniqueRepositoryName(ctx context.Context, ownerID int64, name string) string {
+ uniqueName := name
+ for i := 1; i < 1000; i++ {
+ _, err := repo_model.GetRepositoryByName(ctx, ownerID, uniqueName)
+ if err != nil || repo_model.IsErrRepoNotExist(err) {
+ return uniqueName
+ }
+ uniqueName = fmt.Sprintf("%s-%d", name, i)
+ i++
+ }
+ return ""
+}
+
+func editorPushBranchToForkedRepository(ctx context.Context, doer *user_model.User, baseRepo *repo_model.Repository, baseBranchName string, targetRepo *repo_model.Repository, targetBranchName string) error {
+ return git.Push(ctx, baseRepo.RepoPath(), git.PushOptions{
+ Remote: targetRepo.RepoPath(),
+ Branch: baseBranchName + ":" + targetBranchName,
+ Env: repo_module.PushingEnvironment(doer, targetRepo),
+ })
+}
diff --git a/routers/web/repo/fork.go b/routers/web/repo/fork.go
index 79f033659b4..c2694e540f7 100644
--- a/routers/web/repo/fork.go
+++ b/routers/web/repo/fork.go
@@ -151,7 +151,7 @@ func ForkPost(ctx *context.Context) {
ctx.Data["ContextUser"] = ctxUser
if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplFork)
+ ctx.JSONError(ctx.GetErrMsg())
return
}
@@ -159,12 +159,12 @@ func ForkPost(ctx *context.Context) {
traverseParentRepo := forkRepo
for {
if !repository.CanUserForkBetweenOwners(ctxUser.ID, traverseParentRepo.OwnerID) {
- ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), tplFork, &form)
+ ctx.JSONError(ctx.Tr("repo.settings.new_owner_has_same_repo"))
return
}
repo := repo_model.GetForkedRepo(ctx, ctxUser.ID, traverseParentRepo.ID)
if repo != nil {
- ctx.Redirect(ctxUser.HomeLink() + "/" + url.PathEscape(repo.Name))
+ ctx.JSONRedirect(ctxUser.HomeLink() + "/" + url.PathEscape(repo.Name))
return
}
if !traverseParentRepo.IsFork {
@@ -189,44 +189,50 @@ func ForkPost(ctx *context.Context) {
}
}
- repo, err := repo_service.ForkRepository(ctx, ctx.Doer, ctxUser, repo_service.ForkRepoOptions{
+ repo := ForkRepoTo(ctx, ctxUser, repo_service.ForkRepoOptions{
BaseRepo: forkRepo,
Name: form.RepoName,
Description: form.Description,
SingleBranch: form.ForkSingleBranch,
})
+ if ctx.Written() {
+ return
+ }
+ ctx.JSONRedirect(ctxUser.HomeLink() + "/" + url.PathEscape(repo.Name))
+}
+
+func ForkRepoTo(ctx *context.Context, owner *user_model.User, forkOpts repo_service.ForkRepoOptions) *repo_model.Repository {
+ repo, err := repo_service.ForkRepository(ctx, ctx.Doer, owner, forkOpts)
if err != nil {
ctx.Data["Err_RepoName"] = true
switch {
case repo_model.IsErrReachLimitOfRepo(err):
- maxCreationLimit := ctxUser.MaxCreationLimit()
+ maxCreationLimit := owner.MaxCreationLimit()
msg := ctx.TrN(maxCreationLimit, "repo.form.reach_limit_of_creation_1", "repo.form.reach_limit_of_creation_n", maxCreationLimit)
- ctx.RenderWithErr(msg, tplFork, &form)
+ ctx.JSONError(msg)
case repo_model.IsErrRepoAlreadyExist(err):
- ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), tplFork, &form)
+ ctx.JSONError(ctx.Tr("repo.settings.new_owner_has_same_repo"))
case repo_model.IsErrRepoFilesAlreadyExist(err):
switch {
case ctx.IsUserSiteAdmin() || (setting.Repository.AllowAdoptionOfUnadoptedRepositories && setting.Repository.AllowDeleteOfUnadoptedRepositories):
- ctx.RenderWithErr(ctx.Tr("form.repository_files_already_exist.adopt_or_delete"), tplFork, form)
+ ctx.JSONError(ctx.Tr("form.repository_files_already_exist.adopt_or_delete"))
case setting.Repository.AllowAdoptionOfUnadoptedRepositories:
- ctx.RenderWithErr(ctx.Tr("form.repository_files_already_exist.adopt"), tplFork, form)
+ ctx.JSONError(ctx.Tr("form.repository_files_already_exist.adopt"))
case setting.Repository.AllowDeleteOfUnadoptedRepositories:
- ctx.RenderWithErr(ctx.Tr("form.repository_files_already_exist.delete"), tplFork, form)
+ ctx.JSONError(ctx.Tr("form.repository_files_already_exist.delete"))
default:
- ctx.RenderWithErr(ctx.Tr("form.repository_files_already_exist"), tplFork, form)
+ ctx.JSONError(ctx.Tr("form.repository_files_already_exist"))
}
case db.IsErrNameReserved(err):
- ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(db.ErrNameReserved).Name), tplFork, &form)
+ ctx.JSONError(ctx.Tr("repo.form.name_reserved", err.(db.ErrNameReserved).Name))
case db.IsErrNamePatternNotAllowed(err):
- ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), tplFork, &form)
+ ctx.JSONError(ctx.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern))
case errors.Is(err, user_model.ErrBlockedUser):
- ctx.RenderWithErr(ctx.Tr("repo.fork.blocked_user"), tplFork, form)
+ ctx.JSONError(ctx.Tr("repo.fork.blocked_user"))
default:
ctx.ServerError("ForkPost", err)
}
- return
+ return nil
}
-
- log.Trace("Repository forked[%d]: %s/%s", forkRepo.ID, ctxUser.Name, repo.Name)
- ctx.Redirect(ctxUser.HomeLink() + "/" + url.PathEscape(repo.Name))
+ return repo
}
diff --git a/routers/web/repo/githttp.go b/routers/web/repo/githttp.go
index 61606f8c5f1..deb3ae4f3a6 100644
--- a/routers/web/repo/githttp.go
+++ b/routers/web/repo/githttp.go
@@ -13,6 +13,7 @@ import (
"os"
"path/filepath"
"regexp"
+ "slices"
"strconv"
"strings"
"sync"
@@ -363,12 +364,7 @@ func containsParentDirectorySeparator(v string) bool {
if !strings.Contains(v, "..") {
return false
}
- for _, ent := range strings.FieldsFunc(v, isSlashRune) {
- if ent == ".." {
- return true
- }
- }
- return false
+ return slices.Contains(strings.FieldsFunc(v, isSlashRune), "..")
}
func isSlashRune(r rune) bool { return r == '/' || r == '\\' }
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index a4747964c6f..54b7e5df2a0 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -212,7 +212,7 @@ func getActionIssues(ctx *context.Context) issues_model.IssueList {
return nil
}
issueIDs := make([]int64, 0, 10)
- for _, stringIssueID := range strings.Split(commaSeparatedIssueIDs, ",") {
+ for stringIssueID := range strings.SplitSeq(commaSeparatedIssueIDs, ",") {
issueID, err := strconv.ParseInt(stringIssueID, 10, 64)
if err != nil {
ctx.ServerError("ParseInt", err)
diff --git a/routers/web/repo/issue_comment.go b/routers/web/repo/issue_comment.go
index c2a7f6b6822..cb5b2d80195 100644
--- a/routers/web/repo/issue_comment.go
+++ b/routers/web/repo/issue_comment.go
@@ -103,7 +103,7 @@ func NewComment(ctx *context.Context) {
// check whether the ref of PR in base repo is consistent with the head commit of head branch in the head repo
// get head commit of PR
if pull.Flow == issues_model.PullRequestFlowGithub {
- prHeadRef := pull.GetGitRefName()
+ prHeadRef := pull.GetGitHeadRefName()
if err := pull.LoadBaseRepo(ctx); err != nil {
ctx.ServerError("Unable to load base repo", err)
return
diff --git a/routers/web/repo/issue_list.go b/routers/web/repo/issue_list.go
index b55f4bcc90f..fd34422cfcc 100644
--- a/routers/web/repo/issue_list.go
+++ b/routers/web/repo/issue_list.go
@@ -767,6 +767,10 @@ func Issues(ctx *context.Context) {
}
ctx.Data["Title"] = ctx.Tr("repo.pulls")
ctx.Data["PageIsPullList"] = true
+ prepareRecentlyPushedNewBranches(ctx)
+ if ctx.Written() {
+ return
+ }
} else {
MustEnableIssues(ctx)
if ctx.Written() {
diff --git a/routers/web/repo/issue_new.go b/routers/web/repo/issue_new.go
index d8863961ff8..887019b146b 100644
--- a/routers/web/repo/issue_new.go
+++ b/routers/web/repo/issue_new.go
@@ -7,6 +7,7 @@ import (
"errors"
"fmt"
"html/template"
+ "maps"
"net/http"
"slices"
"sort"
@@ -136,9 +137,7 @@ func NewIssue(ctx *context.Context) {
ret := issue_service.ParseTemplatesFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
templateLoaded, errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates, pageMetaData)
- for k, v := range errs {
- ret.TemplateErrors[k] = v
- }
+ maps.Copy(ret.TemplateErrors, errs)
if ctx.Written() {
return
}
diff --git a/routers/web/repo/issue_stopwatch.go b/routers/web/repo/issue_stopwatch.go
index 5a8d2037719..2de3a7cfecd 100644
--- a/routers/web/repo/issue_stopwatch.go
+++ b/routers/web/repo/issue_stopwatch.go
@@ -10,33 +10,47 @@ import (
"code.gitea.io/gitea/services/context"
)
-// IssueStopwatch creates or stops a stopwatch for the given issue.
-func IssueStopwatch(c *context.Context) {
+// IssueStartStopwatch creates a stopwatch for the given issue.
+func IssueStartStopwatch(c *context.Context) {
issue := GetActionIssue(c)
if c.Written() {
return
}
- var showSuccessMessage bool
-
- if !issues_model.StopwatchExists(c, c.Doer.ID, issue.ID) {
- showSuccessMessage = true
- }
-
if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
c.NotFound(nil)
return
}
- if err := issues_model.CreateOrStopIssueStopwatch(c, c.Doer, issue); err != nil {
- c.ServerError("CreateOrStopIssueStopwatch", err)
+ if ok, err := issues_model.CreateIssueStopwatch(c, c.Doer, issue); err != nil {
+ c.ServerError("CreateIssueStopwatch", err)
+ return
+ } else if !ok {
+ c.Flash.Warning(c.Tr("repo.issues.stopwatch_already_created"))
+ } else {
+ c.Flash.Success(c.Tr("repo.issues.tracker_auto_close"))
+ }
+ c.JSONRedirect("")
+}
+
+// IssueStopStopwatch stops a stopwatch for the given issue.
+func IssueStopStopwatch(c *context.Context) {
+ issue := GetActionIssue(c)
+ if c.Written() {
return
}
- if showSuccessMessage {
- c.Flash.Success(c.Tr("repo.issues.tracker_auto_close"))
+ if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
+ c.NotFound(nil)
+ return
}
+ if ok, err := issues_model.FinishIssueStopwatch(c, c.Doer, issue); err != nil {
+ c.ServerError("FinishIssueStopwatch", err)
+ return
+ } else if !ok {
+ c.Flash.Warning(c.Tr("repo.issues.stopwatch_already_stopped"))
+ }
c.JSONRedirect("")
}
@@ -51,7 +65,7 @@ func CancelStopwatch(c *context.Context) {
return
}
- if err := issues_model.CancelStopwatch(c, c.Doer, issue); err != nil {
+ if _, err := issues_model.CancelStopwatch(c, c.Doer, issue); err != nil {
c.ServerError("CancelStopwatch", err)
return
}
diff --git a/routers/web/repo/issue_view.go b/routers/web/repo/issue_view.go
index e84ffb61978..4a1bd7ebaf8 100644
--- a/routers/web/repo/issue_view.go
+++ b/routers/web/repo/issue_view.go
@@ -444,6 +444,10 @@ func ViewPullMergeBox(ctx *context.Context) {
preparePullViewPullInfo(ctx, issue)
preparePullViewReviewAndMerge(ctx, issue)
ctx.Data["PullMergeBoxReloading"] = issue.PullRequest.IsChecking()
+
+ // TODO: it should use a dedicated struct to render the pull merge box, to make sure all data is prepared correctly
+ ctx.Data["IsIssuePoster"] = ctx.IsSigned && issue.IsPoster(ctx.Doer.ID)
+ ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull)
ctx.HTML(http.StatusOK, tplPullMergeBox)
}
@@ -489,7 +493,7 @@ func preparePullViewSigning(ctx *context.Context, issue *issues_model.Issue) {
pull := issue.PullRequest
ctx.Data["WillSign"] = false
if ctx.Doer != nil {
- sign, key, _, err := asymkey_service.SignMerge(ctx, pull, ctx.Doer, pull.BaseRepo.RepoPath(), pull.BaseBranch, pull.GetGitRefName())
+ sign, key, _, err := asymkey_service.SignMerge(ctx, pull, ctx.Doer, pull.BaseRepo.RepoPath(), pull.BaseBranch, pull.GetGitHeadRefName())
ctx.Data["WillSign"] = sign
ctx.Data["SigningKey"] = key
if err != nil {
diff --git a/routers/web/repo/milestone.go b/routers/web/repo/milestone.go
index 8a26a0dcc33..dd53b1d3f10 100644
--- a/routers/web/repo/milestone.go
+++ b/routers/web/repo/milestone.go
@@ -38,10 +38,7 @@ func Milestones(ctx *context.Context) {
isShowClosed := ctx.FormString("state") == "closed"
sortType := ctx.FormString("sort")
keyword := ctx.FormTrim("q")
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
miles, total, err := db.FindAndCount[issues_model.Milestone](ctx, issues_model.FindMilestoneOptions{
ListOptions: db.ListOptions{
diff --git a/routers/web/repo/packages.go b/routers/web/repo/packages.go
index 65a340a7997..d09a57c03fe 100644
--- a/routers/web/repo/packages.go
+++ b/routers/web/repo/packages.go
@@ -21,10 +21,7 @@ const (
// Packages displays a list of all packages in the repository
func Packages(ctx *context.Context) {
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
query := ctx.FormTrim("q")
packageType := ctx.FormTrim("type")
diff --git a/routers/web/repo/patch.go b/routers/web/repo/patch.go
deleted file mode 100644
index ca346b7e6c3..00000000000
--- a/routers/web/repo/patch.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2021 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package repo
-
-import (
- "net/http"
- "strings"
-
- git_model "code.gitea.io/gitea/models/git"
- "code.gitea.io/gitea/models/unit"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/templates"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/modules/web"
- "code.gitea.io/gitea/services/context"
- "code.gitea.io/gitea/services/forms"
- "code.gitea.io/gitea/services/repository/files"
-)
-
-const (
- tplPatchFile templates.TplName = "repo/editor/patch"
-)
-
-// NewDiffPatch render create patch page
-func NewDiffPatch(ctx *context.Context) {
- canCommit := renderCommitRights(ctx)
-
- ctx.Data["PageIsPatch"] = true
-
- ctx.Data["commit_summary"] = ""
- ctx.Data["commit_message"] = ""
- if canCommit {
- ctx.Data["commit_choice"] = frmCommitChoiceDirect
- } else {
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- }
- ctx.Data["new_branch_name"] = GetUniquePatchBranchName(ctx)
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",")
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
-
- ctx.HTML(http.StatusOK, tplPatchFile)
-}
-
-// NewDiffPatchPost response for sending patch page
-func NewDiffPatchPost(ctx *context.Context) {
- form := web.GetForm(ctx).(*forms.EditRepoFileForm)
-
- canCommit := renderCommitRights(ctx)
- branchName := ctx.Repo.BranchName
- if form.CommitChoice == frmCommitChoiceNewBranch {
- branchName = form.NewBranchName
- }
- ctx.Data["PageIsPatch"] = true
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- ctx.Data["FileContent"] = form.Content
- ctx.Data["commit_summary"] = form.CommitSummary
- ctx.Data["commit_message"] = form.CommitMessage
- ctx.Data["commit_choice"] = form.CommitChoice
- ctx.Data["new_branch_name"] = form.NewBranchName
- ctx.Data["last_commit"] = ctx.Repo.CommitID
- ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",")
-
- if ctx.HasError() {
- ctx.HTML(http.StatusOK, tplPatchFile)
- return
- }
-
- // Cannot commit to an existing branch if user doesn't have rights
- if branchName == ctx.Repo.BranchName && !canCommit {
- ctx.Data["Err_NewBranchName"] = true
- ctx.Data["commit_choice"] = frmCommitChoiceNewBranch
- ctx.RenderWithErr(ctx.Tr("repo.editor.cannot_commit_to_protected_branch", branchName), tplEditFile, &form)
- return
- }
-
- // CommitSummary is optional in the web form, if empty, give it a default message based on add or update
- // `message` will be both the summary and message combined
- message := strings.TrimSpace(form.CommitSummary)
- if len(message) == 0 {
- message = ctx.Locale.TrString("repo.editor.patch")
- }
-
- form.CommitMessage = strings.TrimSpace(form.CommitMessage)
- if len(form.CommitMessage) > 0 {
- message += "\n\n" + form.CommitMessage
- }
-
- gitCommitter, valid := WebGitOperationGetCommitChosenEmailIdentity(ctx, form.CommitEmail)
- if !valid {
- ctx.Data["Err_CommitEmail"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.invalid_commit_email"), tplPatchFile, &form)
- return
- }
-
- fileResponse, err := files.ApplyDiffPatch(ctx, ctx.Repo.Repository, ctx.Doer, &files.ApplyDiffPatchOptions{
- LastCommitID: form.LastCommit,
- OldBranch: ctx.Repo.BranchName,
- NewBranch: branchName,
- Message: message,
- Content: strings.ReplaceAll(form.Content, "\r", ""),
- Author: gitCommitter,
- Committer: gitCommitter,
- })
- if err != nil {
- if git_model.IsErrBranchAlreadyExists(err) {
- // User has specified a branch that already exists
- branchErr := err.(git_model.ErrBranchAlreadyExists)
- ctx.Data["Err_NewBranchName"] = true
- ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchErr.BranchName), tplEditFile, &form)
- return
- } else if files.IsErrCommitIDDoesNotMatch(err) {
- ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+form.LastCommit+"..."+ctx.Repo.CommitID), tplPatchFile, &form)
- return
- }
- ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_apply_patch", err), tplPatchFile, &form)
- return
- }
-
- if form.CommitChoice == frmCommitChoiceNewBranch && ctx.Repo.Repository.UnitEnabled(ctx, unit.TypePullRequests) {
- ctx.Redirect(ctx.Repo.RepoLink + "/compare/" + util.PathEscapeSegments(ctx.Repo.BranchName) + "..." + util.PathEscapeSegments(form.NewBranchName))
- } else {
- ctx.Redirect(ctx.Repo.RepoLink + "/commit/" + fileResponse.Commit.SHA)
- }
-}
diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go
index 0bf1f64d094..a57976b4ca8 100644
--- a/routers/web/repo/projects.go
+++ b/routers/web/repo/projects.go
@@ -61,10 +61,7 @@ func Projects(ctx *context.Context) {
isShowClosed := strings.ToLower(ctx.FormTrim("state")) == "closed"
keyword := ctx.FormTrim("q")
repo := ctx.Repo.Repository
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
ctx.Data["OpenCount"] = repo.NumOpenProjects
ctx.Data["ClosedCount"] = repo.NumClosedProjects
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go
index 9176b14cd46..bc58efeb6f6 100644
--- a/routers/web/repo/pull.go
+++ b/routers/web/repo/pull.go
@@ -196,7 +196,7 @@ func GetPullDiffStats(ctx *context.Context) {
}
// do not report 500 server error to end users if error occurs, otherwise a PR missing ref won't be able to view.
- headCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(pull.GetGitRefName())
+ headCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(pull.GetGitHeadRefName())
if err != nil {
log.Error("Failed to GetRefCommitID: %v, repo: %v", err, ctx.Repo.Repository.FullName())
return
@@ -218,13 +218,13 @@ func GetMergedBaseCommitID(ctx *context.Context, issue *issues_model.Issue) stri
if pull.MergeBase == "" {
var commitSHA, parentCommit string
// If there is a head or a patch file, and it is readable, grab info
- commitSHA, err := ctx.Repo.GitRepo.GetRefCommitID(pull.GetGitRefName())
+ commitSHA, err := ctx.Repo.GitRepo.GetRefCommitID(pull.GetGitHeadRefName())
if err != nil {
// Head File does not exist, try the patch
commitSHA, err = ctx.Repo.GitRepo.ReadPatchCommit(pull.Index)
if err == nil {
// Recreate pull head in files for next time
- if err := ctx.Repo.GitRepo.SetReference(pull.GetGitRefName(), commitSHA); err != nil {
+ if err := ctx.Repo.GitRepo.SetReference(pull.GetGitHeadRefName(), commitSHA); err != nil {
log.Error("Could not write head file", err)
}
} else {
@@ -274,7 +274,7 @@ func prepareMergedViewPullInfo(ctx *context.Context, issue *issues_model.Issue)
baseCommit := GetMergedBaseCommitID(ctx, issue)
compareInfo, err := ctx.Repo.GitRepo.GetCompareInfo(ctx.Repo.Repository.RepoPath(),
- baseCommit, pull.GetGitRefName(), false, false)
+ baseCommit, pull.GetGitHeadRefName(), false, false)
if err != nil {
if strings.Contains(err.Error(), "fatal: Not a valid object name") || strings.Contains(err.Error(), "unknown revision or path not in the working tree") {
ctx.Data["IsPullRequestBroken"] = true
@@ -354,9 +354,9 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
ctx.Data["BaseTarget"] = pull.BaseBranch
ctx.Data["HeadTarget"] = pull.HeadBranch
- sha, err := baseGitRepo.GetRefCommitID(pull.GetGitRefName())
+ sha, err := baseGitRepo.GetRefCommitID(pull.GetGitHeadRefName())
if err != nil {
- ctx.ServerError(fmt.Sprintf("GetRefCommitID(%s)", pull.GetGitRefName()), err)
+ ctx.ServerError(fmt.Sprintf("GetRefCommitID(%s)", pull.GetGitHeadRefName()), err)
return nil
}
commitStatuses, err := git_model.GetLatestCommitStatus(ctx, repo.ID, sha, db.ListOptionsAll)
@@ -374,7 +374,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
}
compareInfo, err := baseGitRepo.GetCompareInfo(pull.BaseRepo.RepoPath(),
- pull.MergeBase, pull.GetGitRefName(), false, false)
+ pull.MergeBase, pull.GetGitHeadRefName(), false, false)
if err != nil {
if strings.Contains(err.Error(), "fatal: Not a valid object name") {
ctx.Data["IsPullRequestBroken"] = true
@@ -407,12 +407,12 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
if pull.Flow == issues_model.PullRequestFlowGithub {
headBranchExist = gitrepo.IsBranchExist(ctx, pull.HeadRepo, pull.HeadBranch)
} else {
- headBranchExist = gitrepo.IsReferenceExist(ctx, pull.BaseRepo, pull.GetGitRefName())
+ headBranchExist = gitrepo.IsReferenceExist(ctx, pull.BaseRepo, pull.GetGitHeadRefName())
}
if headBranchExist {
if pull.Flow != issues_model.PullRequestFlowGithub {
- headBranchSha, err = baseGitRepo.GetRefCommitID(pull.GetGitRefName())
+ headBranchSha, err = baseGitRepo.GetRefCommitID(pull.GetGitHeadRefName())
} else {
headBranchSha, err = headGitRepo.GetBranchCommitID(pull.HeadBranch)
}
@@ -435,7 +435,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
ctx.Data["GetCommitMessages"] = ""
}
- sha, err := baseGitRepo.GetRefCommitID(pull.GetGitRefName())
+ sha, err := baseGitRepo.GetRefCommitID(pull.GetGitHeadRefName())
if err != nil {
if git.IsErrNotExist(err) {
ctx.Data["IsPullRequestBroken"] = true
@@ -451,7 +451,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
ctx.Data["NumFiles"] = 0
return nil
}
- ctx.ServerError(fmt.Sprintf("GetRefCommitID(%s)", pull.GetGitRefName()), err)
+ ctx.ServerError(fmt.Sprintf("GetRefCommitID(%s)", pull.GetGitHeadRefName()), err)
return nil
}
@@ -522,7 +522,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
}
compareInfo, err := baseGitRepo.GetCompareInfo(pull.BaseRepo.RepoPath(),
- git.BranchPrefix+pull.BaseBranch, pull.GetGitRefName(), false, false)
+ git.BranchPrefix+pull.BaseBranch, pull.GetGitHeadRefName(), false, false)
if err != nil {
if strings.Contains(err.Error(), "fatal: Not a valid object name") {
ctx.Data["IsPullRequestBroken"] = true
@@ -581,7 +581,7 @@ func GetPullCommits(ctx *context.Context) {
}
resp := &pullCommitList{}
- commits, lastReviewCommitSha, err := pull_service.GetPullCommits(ctx, issue)
+ commits, lastReviewCommitSha, err := pull_service.GetPullCommits(ctx, ctx.Repo.GitRepo, ctx.Doer, issue)
if err != nil {
ctx.JSON(http.StatusInternalServerError, err)
return
@@ -643,8 +643,17 @@ func ViewPullCommits(ctx *context.Context) {
ctx.HTML(http.StatusOK, tplPullCommits)
}
+func indexCommit(commits []*git.Commit, commitID string) *git.Commit {
+ for i := range commits {
+ if commits[i].ID.String() == commitID {
+ return commits[i]
+ }
+ }
+ return nil
+}
+
// ViewPullFiles render pull request changed files list page
-func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommit string, willShowSpecifiedCommitRange, willShowSpecifiedCommit bool) {
+func viewPullFiles(ctx *context.Context, beforeCommitID, afterCommitID string) {
ctx.Data["PageIsPullList"] = true
ctx.Data["PageIsPullFiles"] = true
@@ -654,11 +663,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
}
pull := issue.PullRequest
- var (
- startCommitID string
- endCommitID string
- gitRepo = ctx.Repo.GitRepo
- )
+ gitRepo := ctx.Repo.GitRepo
prInfo := preparePullViewPullInfo(ctx, issue)
if ctx.Written() {
@@ -668,77 +673,68 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
return
}
- // Validate the given commit sha to show (if any passed)
- if willShowSpecifiedCommit || willShowSpecifiedCommitRange {
- foundStartCommit := len(specifiedStartCommit) == 0
- foundEndCommit := len(specifiedEndCommit) == 0
-
- if !(foundStartCommit && foundEndCommit) {
- for _, commit := range prInfo.Commits {
- if commit.ID.String() == specifiedStartCommit {
- foundStartCommit = true
- }
- if commit.ID.String() == specifiedEndCommit {
- foundEndCommit = true
- }
-
- if foundStartCommit && foundEndCommit {
- break
- }
- }
- }
-
- if !(foundStartCommit && foundEndCommit) {
- ctx.NotFound(nil)
- return
- }
- }
-
- if ctx.Written() {
- return
- }
-
- headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName())
+ headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitHeadRefName())
if err != nil {
ctx.ServerError("GetRefCommitID", err)
return
}
- ctx.Data["IsShowingOnlySingleCommit"] = willShowSpecifiedCommit
+ isSingleCommit := beforeCommitID == "" && afterCommitID != ""
+ ctx.Data["IsShowingOnlySingleCommit"] = isSingleCommit
+ isShowAllCommits := (beforeCommitID == "" || beforeCommitID == prInfo.MergeBase) && (afterCommitID == "" || afterCommitID == headCommitID)
+ ctx.Data["IsShowingAllCommits"] = isShowAllCommits
- if willShowSpecifiedCommit || willShowSpecifiedCommitRange {
- if len(specifiedEndCommit) > 0 {
- endCommitID = specifiedEndCommit
+ if afterCommitID == "" || afterCommitID == headCommitID {
+ afterCommitID = headCommitID
+ }
+ afterCommit := indexCommit(prInfo.Commits, afterCommitID)
+ if afterCommit == nil {
+ ctx.HTTPError(http.StatusBadRequest, "after commit not found in PR commits")
+ return
+ }
+
+ var beforeCommit *git.Commit
+ if !isSingleCommit {
+ if beforeCommitID == "" || beforeCommitID == prInfo.MergeBase {
+ beforeCommitID = prInfo.MergeBase
+ // mergebase commit is not in the list of the pull request commits
+ beforeCommit, err = gitRepo.GetCommit(beforeCommitID)
+ if err != nil {
+ ctx.ServerError("GetCommit", err)
+ return
+ }
} else {
- endCommitID = headCommitID
+ beforeCommit = indexCommit(prInfo.Commits, beforeCommitID)
+ if beforeCommit == nil {
+ ctx.HTTPError(http.StatusBadRequest, "before commit not found in PR commits")
+ return
+ }
}
- if len(specifiedStartCommit) > 0 {
- startCommitID = specifiedStartCommit
- } else {
- startCommitID = prInfo.MergeBase
- }
- ctx.Data["IsShowingAllCommits"] = false
} else {
- endCommitID = headCommitID
- startCommitID = prInfo.MergeBase
- ctx.Data["IsShowingAllCommits"] = true
+ beforeCommit, err = afterCommit.Parent(0)
+ if err != nil {
+ ctx.ServerError("Parent", err)
+ return
+ }
+ beforeCommitID = beforeCommit.ID.String()
}
ctx.Data["Username"] = ctx.Repo.Owner.Name
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
- ctx.Data["AfterCommitID"] = endCommitID
- ctx.Data["BeforeCommitID"] = startCommitID
-
- fileOnly := ctx.FormBool("file-only")
+ ctx.Data["MergeBase"] = prInfo.MergeBase
+ ctx.Data["AfterCommitID"] = afterCommitID
+ ctx.Data["BeforeCommitID"] = beforeCommitID
maxLines, maxFiles := setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles
files := ctx.FormStrings("files")
+ fileOnly := ctx.FormBool("file-only")
if fileOnly && (len(files) == 2 || len(files) == 1) {
maxLines, maxFiles = -1, -1
}
diffOptions := &gitdiff.DiffOptions{
- AfterCommitID: endCommitID,
+ BeforeCommitID: beforeCommitID,
+ AfterCommitID: afterCommitID,
SkipTo: ctx.FormString("skip-to"),
MaxLines: maxLines,
MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
@@ -746,11 +742,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
WhitespaceBehavior: gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)),
}
- if !willShowSpecifiedCommit {
- diffOptions.BeforeCommitID = startCommitID
- }
-
- diff, err := gitdiff.GetDiffForRender(ctx, gitRepo, diffOptions, files...)
+ diff, err := gitdiff.GetDiffForRender(ctx, ctx.Repo.RepoLink, gitRepo, diffOptions, files...)
if err != nil {
ctx.ServerError("GetDiff", err)
return
@@ -761,7 +753,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
// as the viewed information is designed to be loaded only on latest PR
// diff and if you're signed in.
var reviewState *pull_model.ReviewState
- if ctx.IsSigned && !willShowSpecifiedCommit && !willShowSpecifiedCommitRange {
+ if ctx.IsSigned && isShowAllCommits {
reviewState, err = gitdiff.SyncUserSpecificDiff(ctx, ctx.Doer.ID, pull, gitRepo, diff, diffOptions)
if err != nil {
ctx.ServerError("SyncUserSpecificDiff", err)
@@ -769,7 +761,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
}
}
- diffShortStat, err := gitdiff.GetDiffShortStat(ctx.Repo.GitRepo, startCommitID, endCommitID)
+ diffShortStat, err := gitdiff.GetDiffShortStat(ctx.Repo.GitRepo, beforeCommitID, afterCommitID)
if err != nil {
ctx.ServerError("GetDiffShortStat", err)
return
@@ -816,7 +808,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
if !fileOnly {
// note: use mergeBase is set to false because we already have the merge base from the pull request info
- diffTree, err := gitdiff.GetDiffTree(ctx, gitRepo, false, startCommitID, endCommitID)
+ diffTree, err := gitdiff.GetDiffTree(ctx, gitRepo, false, beforeCommitID, afterCommitID)
if err != nil {
ctx.ServerError("GetDiffTree", err)
return
@@ -836,17 +828,6 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
ctx.Data["Diff"] = diff
ctx.Data["DiffNotAvailable"] = diffShortStat.NumFiles == 0
- baseCommit, err := ctx.Repo.GitRepo.GetCommit(startCommitID)
- if err != nil {
- ctx.ServerError("GetCommit", err)
- return
- }
- commit, err := gitRepo.GetCommit(endCommitID)
- if err != nil {
- ctx.ServerError("GetCommit", err)
- return
- }
-
if ctx.IsSigned && ctx.Doer != nil {
if ctx.Data["CanMarkConversation"], err = issues_model.CanMarkConversation(ctx, issue, ctx.Doer); err != nil {
ctx.ServerError("CanMarkConversation", err)
@@ -854,7 +835,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
}
}
- setCompareContext(ctx, baseCommit, commit, ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
+ setCompareContext(ctx, beforeCommit, afterCommit, ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
assigneeUsers, err := repo_model.GetRepoAssignees(ctx, ctx.Repo.Repository)
if err != nil {
@@ -901,7 +882,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
ctx.Data["CanBlockUser"] = func(blocker, blockee *user_model.User) bool {
return user_service.CanBlockUser(ctx, ctx.Doer, blocker, blockee)
}
- if !willShowSpecifiedCommit && !willShowSpecifiedCommitRange && pull.Flow == issues_model.PullRequestFlowGithub {
+ if isShowAllCommits && pull.Flow == issues_model.PullRequestFlowGithub {
if err := pull.LoadHeadRepo(ctx); err != nil {
ctx.ServerError("LoadHeadRepo", err)
return
@@ -930,19 +911,17 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
}
func ViewPullFilesForSingleCommit(ctx *context.Context) {
- viewPullFiles(ctx, "", ctx.PathParam("sha"), true, true)
+ // it doesn't support showing files from mergebase to the special commit
+ // otherwise it will be ambiguous
+ viewPullFiles(ctx, "", ctx.PathParam("sha"))
}
func ViewPullFilesForRange(ctx *context.Context) {
- viewPullFiles(ctx, ctx.PathParam("shaFrom"), ctx.PathParam("shaTo"), true, false)
-}
-
-func ViewPullFilesStartingFromCommit(ctx *context.Context) {
- viewPullFiles(ctx, "", ctx.PathParam("sha"), true, false)
+ viewPullFiles(ctx, ctx.PathParam("shaFrom"), ctx.PathParam("shaTo"))
}
func ViewPullFilesForAllCommitsOfPr(ctx *context.Context) {
- viewPullFiles(ctx, "", "", false, false)
+ viewPullFiles(ctx, "", "")
}
// UpdatePullRequest merge PR's baseBranch into headBranch
@@ -1258,13 +1237,8 @@ func CancelAutoMergePullRequest(ctx *context.Context) {
}
func stopTimerIfAvailable(ctx *context.Context, user *user_model.User, issue *issues_model.Issue) error {
- if issues_model.StopwatchExists(ctx, user.ID, issue.ID) {
- if err := issues_model.CreateOrStopIssueStopwatch(ctx, user, issue); err != nil {
- return err
- }
- }
-
- return nil
+ _, err := issues_model.FinishIssueStopwatch(ctx, user, issue)
+ return err
}
func PullsNewRedirect(ctx *context.Context) {
@@ -1514,7 +1488,7 @@ func CleanUpPullRequest(ctx *context.Context) {
}()
// Check if branch has no new commits
- headCommitID, err := gitBaseRepo.GetRefCommitID(pr.GetGitRefName())
+ headCommitID, err := gitBaseRepo.GetRefCommitID(pr.GetGitHeadRefName())
if err != nil {
log.Error("GetRefCommitID: %v", err)
ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
diff --git a/routers/web/repo/pull_review.go b/routers/web/repo/pull_review.go
index 929e131d613..18e14e9b224 100644
--- a/routers/web/repo/pull_review.go
+++ b/routers/web/repo/pull_review.go
@@ -49,7 +49,7 @@ func RenderNewCodeCommentForm(ctx *context.Context) {
ctx.Data["PageIsPullFiles"] = true
ctx.Data["Issue"] = issue
ctx.Data["CurrentReview"] = currentReview
- pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(issue.PullRequest.GetGitRefName())
+ pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(issue.PullRequest.GetGitHeadRefName())
if err != nil {
ctx.ServerError("GetRefCommitID", err)
return
@@ -199,7 +199,7 @@ func renderConversation(ctx *context.Context, comment *issues_model.Comment, ori
ctx.ServerError("comment.Issue.LoadPullRequest", err)
return
}
- pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(comment.Issue.PullRequest.GetGitRefName())
+ pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(comment.Issue.PullRequest.GetGitHeadRefName())
if err != nil {
ctx.ServerError("GetRefCommitID", err)
return
diff --git a/routers/web/repo/pull_review_test.go b/routers/web/repo/pull_review_test.go
index 3d0997ab4d8..42223c1d9c6 100644
--- a/routers/web/repo/pull_review_test.go
+++ b/routers/web/repo/pull_review_test.go
@@ -23,10 +23,10 @@ import (
func TestRenderConversation(t *testing.T) {
unittest.PrepareTestEnv(t)
- pr, _ := issues_model.GetPullRequestByID(db.DefaultContext, 2)
- _ = pr.LoadIssue(db.DefaultContext)
- _ = pr.Issue.LoadPoster(db.DefaultContext)
- _ = pr.Issue.LoadRepo(db.DefaultContext)
+ pr, _ := issues_model.GetPullRequestByID(t.Context(), 2)
+ _ = pr.LoadIssue(t.Context())
+ _ = pr.Issue.LoadPoster(t.Context())
+ _ = pr.Issue.LoadRepo(t.Context())
run := func(name string, cb func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder)) {
t.Run(name, func(t *testing.T) {
@@ -73,7 +73,7 @@ func TestRenderConversation(t *testing.T) {
assert.Contains(t, resp.Body.String(), `
- {{range .OAuth2Providers}}{{if .CustomURLSettings}}
+ {{range .OAuth2Providers}}
+
+ {{if .CustomURLSettings}}
- {{end}}{{end}}
+ {{end}}
+ {{end}}
{{ctx.Locale.Tr "admin.auths.oauth2_scopes"}}
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_full_name_claim_name"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_ssh_public_key_claim_name"}}
+
+
@@ -424,16 +438,4 @@
{{ctx.Locale.Tr "admin.auths.tips.oauth2.general.tip"}}
-
-
-
-
-
{{ctx.Locale.Tr "admin.auths.delete_auth_desc"}}
-
- {{template "base/modal_actions_confirm" .}}
-
-
{{template "admin/layout_footer" .}}
diff --git a/templates/admin/auth/source/oauth.tmpl b/templates/admin/auth/source/oauth.tmpl
index f02c5bdf309..69590635e4b 100644
--- a/templates/admin/auth/source/oauth.tmpl
+++ b/templates/admin/auth/source/oauth.tmpl
@@ -63,19 +63,31 @@
- {{range .OAuth2Providers}}{{if .CustomURLSettings}}
+ {{range .OAuth2Providers}}
+
+ {{if .CustomURLSettings}}
- {{end}}{{end}}
+ {{end}}
+ {{end}}
{{ctx.Locale.Tr "admin.auths.oauth2_scopes"}}
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_full_name_claim_name"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_ssh_public_key_claim_name"}}
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_name"}}
diff --git a/templates/admin/config_settings.tmpl b/templates/admin/config_settings.tmpl
index 6b9bb8275cc..9bd37afa7d5 100644
--- a/templates/admin/config_settings.tmpl
+++ b/templates/admin/config_settings.tmpl
@@ -24,7 +24,7 @@
{{ctx.Locale.Tr "repository"}}
-
{{template "admin/layout_footer" .}}
diff --git a/templates/admin/repo/list.tmpl b/templates/admin/repo/list.tmpl
index 762013af47f..767d00fa741 100644
--- a/templates/admin/repo/list.tmpl
+++ b/templates/admin/repo/list.tmpl
@@ -7,10 +7,10 @@
- {{template "shared/repo_search" .}}
+ {{template "shared/repo/search" .}}
-
+
ID{{SortArrow "oldest" "newest" $.SortType false}}
@@ -84,7 +84,12 @@
{{FileSize .LFSSize}}
{{DateUtils.AbsoluteShort .UpdatedUnix}}
{{DateUtils.AbsoluteShort .CreatedUnix}}
- {{svg "octicon-trash"}}
+
+ {{svg "octicon-trash"}}
+
{{else}}
{{ctx.Locale.Tr "no_results_found"}}
@@ -96,17 +101,15 @@
{{template "base/paginate" .}}
-
-
+
+ {{.CsrfTokenHtml}}
+
{{ctx.Locale.Tr "repo.settings.delete_desc"}}
- {{ctx.Locale.Tr "repo.settings.delete_notices_2" (`
`|SafeHTML)}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_2" (HTMLFormat `
` "repo-name")}}
{{ctx.Locale.Tr "repo.settings.delete_notices_fork_1"}}
{{template "base/modal_actions_confirm" .}}
-
+
{{template "admin/layout_footer" .}}
diff --git a/templates/admin/user/list.tmpl b/templates/admin/user/list.tmpl
index eb3f6cd7204..49f62dda748 100644
--- a/templates/admin/user/list.tmpl
+++ b/templates/admin/user/list.tmpl
@@ -56,7 +56,7 @@
-
+
ID{{SortArrow "oldest" "newest" .SortType false}}
diff --git a/templates/admin/user/view.tmpl b/templates/admin/user/view.tmpl
index 31616ffbf96..67f9148e646 100644
--- a/templates/admin/user/view.tmpl
+++ b/templates/admin/user/view.tmpl
@@ -26,7 +26,7 @@
{{ctx.Locale.Tr "admin.repositories"}} ({{ctx.Locale.Tr "admin.total" .ReposTotal}})
- {{template "explore/repo_list" .}}
+ {{template "shared/repo/list" .}}