mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-03-14 15:52:43 +00:00
Merge branch 'forgejo' into upload_with_path_structure
This commit is contained in:
commit
a681ebad20
107 changed files with 6314 additions and 790 deletions
|
@ -87,6 +87,9 @@ code.gitea.io/gitea/modules/eventsource
|
|||
Event.String
|
||||
|
||||
code.gitea.io/gitea/modules/forgefed
|
||||
NewForgeUndoLike
|
||||
ForgeUndoLike.UnmarshalJSON
|
||||
ForgeUndoLike.Validate
|
||||
GetItemByType
|
||||
JSONUnmarshalerFn
|
||||
NotEmpty
|
||||
|
@ -103,9 +106,6 @@ code.gitea.io/gitea/modules/git
|
|||
openRepositoryWithDefaultContext
|
||||
ToEntryMode
|
||||
|
||||
code.gitea.io/gitea/modules/gitgraph
|
||||
Parser.Reset
|
||||
|
||||
code.gitea.io/gitea/modules/gitrepo
|
||||
GetBranchCommitID
|
||||
GetWikiDefaultBranch
|
||||
|
@ -224,6 +224,9 @@ code.gitea.io/gitea/services/repository
|
|||
code.gitea.io/gitea/services/repository/files
|
||||
ContentType.String
|
||||
|
||||
code.gitea.io/gitea/services/repository/gitgraph
|
||||
Parser.Reset
|
||||
|
||||
code.gitea.io/gitea/services/webhook
|
||||
NewNotifier
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
|
||||
runs-on: docker
|
||||
container:
|
||||
image: data.forgejo.org/renovate/renovate:39.158.2
|
||||
image: data.forgejo.org/renovate/renovate:39.171.2
|
||||
|
||||
steps:
|
||||
- name: Load renovate repo cache
|
||||
|
|
|
@ -71,6 +71,7 @@ RUN apk --no-cache add \
|
|||
git \
|
||||
curl \
|
||||
gnupg \
|
||||
openssh-client \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
|
||||
RUN addgroup \
|
||||
|
|
13
Makefile
13
Makefile
|
@ -49,7 +49,7 @@ GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasour
|
|||
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.29.0 # renovate: datasource=go
|
||||
GOMOCK_PACKAGE ?= go.uber.org/mock/mockgen@v0.4.0 # renovate: datasource=go
|
||||
GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.17.1 # renovate: datasource=go
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.158.2 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.171.2 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate
|
||||
|
||||
# https://github.com/disposable-email-domains/disposable-email-domains/commits/main/
|
||||
DISPOSABLE_EMAILS_SHA ?= 0c27e671231d27cf66370034d7f6818037416989 # renovate: ...
|
||||
|
@ -127,6 +127,11 @@ FORGEJO_VERSION_API ?= ${FORGEJO_VERSION}
|
|||
show-version-api:
|
||||
@echo ${FORGEJO_VERSION_API}
|
||||
|
||||
# Strip binaries by default to reduce size, allow overriding for debugging
|
||||
STRIP ?= 1
|
||||
ifeq ($(STRIP),1)
|
||||
LDFLAGS := $(LDFLAGS) -s -w
|
||||
endif
|
||||
LDFLAGS := $(LDFLAGS) -X "main.ReleaseVersion=$(RELEASE_VERSION)" -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(FORGEJO_VERSION)" -X "main.Tags=$(TAGS)" -X "main.ForgejoVersion=$(FORGEJO_VERSION_API)"
|
||||
|
||||
LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
|
||||
|
@ -827,7 +832,7 @@ check: test
|
|||
|
||||
.PHONY: install $(TAGS_PREREQ)
|
||||
install: $(wildcard *.go)
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install -v -tags '$(TAGS)' -ldflags '$(LDFLAGS)'
|
||||
|
||||
.PHONY: build
|
||||
build: frontend backend
|
||||
|
@ -855,13 +860,13 @@ merge-locales:
|
|||
@echo "NOT NEEDED: THIS IS A NOOP AS OF Forgejo 7.0 BUT KEPT FOR BACKWARD COMPATIBILITY"
|
||||
|
||||
$(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ)
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $@
|
||||
|
||||
forgejo: $(EXECUTABLE)
|
||||
ln -f $(EXECUTABLE) forgejo
|
||||
|
||||
static-executable: $(GO_SOURCES) $(TAGS_PREREQ)
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags 'netgo osusergo $(TAGS)' -ldflags '-s -w -linkmode external -extldflags "-static" $(LDFLAGS)' -o $(EXECUTABLE)
|
||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -o $(EXECUTABLE)
|
||||
|
||||
.PHONY: release
|
||||
release: frontend generate release-linux release-copy release-compress vendor release-sources release-check
|
||||
|
|
6
go.mod
6
go.mod
|
@ -26,7 +26,7 @@ require (
|
|||
github.com/alecthomas/chroma/v2 v2.15.0
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
|
||||
github.com/blevesearch/bleve/v2 v2.4.4
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.4
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.5
|
||||
github.com/caddyserver/certmagic v0.21.7
|
||||
github.com/chi-middleware/proxy v1.1.1
|
||||
github.com/djherbis/buffer v1.2.0
|
||||
|
@ -76,7 +76,7 @@ require (
|
|||
github.com/meilisearch/meilisearch-go v0.29.0
|
||||
github.com/mholt/archiver/v3 v3.5.1
|
||||
github.com/microcosm-cc/bluemonday v1.0.27
|
||||
github.com/minio/minio-go/v7 v7.0.84
|
||||
github.com/minio/minio-go/v7 v7.0.85
|
||||
github.com/msteinert/pam v1.2.0
|
||||
github.com/nektos/act v0.2.52
|
||||
github.com/niklasfasching/go-org v1.7.0
|
||||
|
@ -103,7 +103,7 @@ require (
|
|||
go.uber.org/mock v0.4.0
|
||||
golang.org/x/crypto v0.33.0
|
||||
golang.org/x/image v0.23.0
|
||||
golang.org/x/net v0.34.0
|
||||
golang.org/x/net v0.35.0
|
||||
golang.org/x/oauth2 v0.24.0
|
||||
golang.org/x/sync v0.11.0
|
||||
golang.org/x/sys v0.30.0
|
||||
|
|
12
go.sum
12
go.sum
|
@ -768,8 +768,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
|||
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
||||
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.4 h1:QFYO8IGvRnp7tGgiQb8g9uFU8kY9wOzxsFFx17+yy6Q=
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.4/go.mod h1:r/J7cC9c3EzBzP3/wDz0RJLPwv5PUAMp+KF2w+ntMc0=
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.5 h1:s/8NElw/Yhm09jKdMq4nY31tjcFMgHukjLfPrqxApcQ=
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.5/go.mod h1:PgzeBymbRFC8I2m46Sci3S18AbwonEgpaz3TGhD7EPs=
|
||||
github.com/caddyserver/certmagic v0.21.7 h1:66KJioPFJwttL43KYSWk7ErSmE6LfaJgCQuhm8Sg6fg=
|
||||
github.com/caddyserver/certmagic v0.21.7/go.mod h1:LCPG3WLxcnjVKl/xpjzM0gqh0knrKKKiO5WVttX2eEI=
|
||||
github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA=
|
||||
|
@ -1263,8 +1263,8 @@ github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcs
|
|||
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
|
||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||
github.com/minio/minio-go/v7 v7.0.84 h1:D1HVmAF8JF8Bpi6IU4V9vIEj+8pc+xU88EWMs2yed0E=
|
||||
github.com/minio/minio-go/v7 v7.0.84/go.mod h1:57YXpvc5l3rjPdhqNrDsvVlY0qPI6UTk1bflAe+9doY=
|
||||
github.com/minio/minio-go/v7 v7.0.85 h1:9psTLS/NTvC3MWoyjhjXpwcKoNbkongaCSF3PNpSuXo=
|
||||
github.com/minio/minio-go/v7 v7.0.85/go.mod h1:57YXpvc5l3rjPdhqNrDsvVlY0qPI6UTk1bflAe+9doY=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
|
@ -1640,8 +1640,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
|
|||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
|
|
@ -219,8 +219,13 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) {
|
|||
return "", 0, fmt.Errorf("ParsePublicKey: %w", err)
|
||||
}
|
||||
|
||||
pkeyType := pkey.Type()
|
||||
if certPkey, ok := pkey.(*ssh.Certificate); ok {
|
||||
pkeyType = certPkey.Key.Type()
|
||||
}
|
||||
|
||||
// The ssh library can parse the key, so next we find out what key exactly we have.
|
||||
switch pkey.Type() {
|
||||
switch pkeyType {
|
||||
case ssh.KeyAlgoDSA:
|
||||
rawPub := struct {
|
||||
Name string
|
||||
|
|
|
@ -35,6 +35,7 @@ func Test_SSHParsePublicKey(t *testing.T) {
|
|||
{"ecdsa-384", false, "ecdsa", 384, "ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBINmioV+XRX1Fm9Qk2ehHXJ2tfVxW30ypUWZw670Zyq5GQfBAH6xjygRsJ5wWsHXBsGYgFUXIHvMKVAG1tpw7s6ax9oA+dJOJ7tj+vhn8joFqT+sg3LYHgZkHrfqryRasQ== nocomment"},
|
||||
{"ecdsa-sk", true, "ecdsa-sk", 256, "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment"},
|
||||
{"ed25519-sk", true, "ed25519-sk", 256, "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIE7kM1R02+4ertDKGKEDcKG0s+2vyDDcIvceJ0Gqv5f1AAAABHNzaDo= nocomment"},
|
||||
{"ed25519-cert-v01", true, "ed25519", 256, "ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIAlIAPlEj0mYQzQo8Ks0Nm/Ct8ceNkyJSf4DLuF5l7+5AAAAIEuWAoaBo2tT29/oMNnoDfdAPRCIdM2RGapKUhY4nDfLRgPQwfnRoc0AAAABAAAAcHZhdWx0LW9pZGMtNmRhYjdiZDgtNDg5YS00MDFkLTg3ZmItNjdjNTlhMDZkZDkxLTNjNTk2M2YyMGRmMDM3MDkyMzc1YmNiYmNiNzkxY2EyZWIxM2I0NGZhMzc2NTcwMWI0MjMwODU0MWFmNjhkNTgAAAALAAAAB2Zvcmdlam8AAAAAZ6/RUQAAAABn115vAAAAAAAAAAAAAAAAAAACFwAAAAdzc2gtcnNhAAAAAwEAAQAAAgEAySnM/TvD117GyKgOgMatDB2t+fCHORFaWVmH5SaadAzNJ2DfDAauRSLfnim1xdgAOMTzsPEEHH47zyYMjE85o2AiJxrfUBMw3O/7AbNc6+HyLr/txH4+vD9tWQknKnpVWM+3Z9wiHDcOdKRoXCmFZKJH1vxs16GNWjwbrfNiimv7Oi0fadgvTDKX603gpLTuVDXqs9eQFLCONptei86JYBAJqaHvg51k8YUCKt9WFqKAj7BJUWmrDvhv5VFMOsnZieJjqxkoxnpsQNlXfPzxK0vIpJofbYfWwscv/g9WZypHwO1ZR2PqzKm99YrSdr8w5256l0f44vsF0NSP0N7bDQEfYYnRGj8zWTYCBFD+uYF7AxIeaRUpZoTQO8MvCHOLMIDinNgEeCUvNA2v9zHl4BGq+PQjzUKAgJiKj0MZeiCDAmQ22g83ggQlB6BOrBb1fNa/S1cmTbGHQ2oAN358aqkmHVCBhPOyA2Rf65D2M2vzDlUdOsNDUIWAHk7GbwSNGDgcYfTWqtR5fTzp2MJovMh1dDUDXjOvojbhzjJtSy9+rzUYIv18aXdOitzVBgPMWdeVCZFZv4OKF+5MiqxQvedUvfiSjsdxZWLxyT1CJ88G3MzxNMS/Djm86T8h/Oa55bdvFtqpsLfvpIqq0pnXq1V/vF2j1MWwRB5z5Xh/HtEAAAIUAAAADHJzYS1zaGEyLTI1NgAAAgB2I2gzqemQl8/ETxtakALlm/2BpUcbhADcFWuoH6BCPnWHuTSwf3OayM6KXv1PQfL3YFRoi9Afrp8kVFL6DePsmKH+0BUEMz71sZ7v1ty7pwfzibItGnpTbQXhzbEiNYAFoz77rl7oaXF7pV6JNZhj3DVAB5gVA2oN5KRNVxijz+6uyuFJEw1HIl1C7GworvGwZcN7BThTEh3i72/Vntejy9Z8uGVjSFjS0rjRo2oXK1LKN0rVt66p3TmCWHouLkVnOTk0qrhLGlL2HVyo24OYHbkAAObD9b6aMDYlmluk6NsaiTKsSTsvMrbIbjtFQlh7nNyoPhZ0VMwaT1l10pDQ5uxWWZjKGIkz4xM1ZfpBszjJNPo+ivYQnTSjj9LwkbLAT9a/5LawSj80TGcLEMO+0eyPdJsP0wYmOVRFAZeRiBgwb3HrzcF6Wqr8icj1EjYkKSy9YFHGTnFBGknpdh3HGwghRXrCUwAnSM76db9pv4/qowT8LthtJ3dY5Epe0OJ1Tqm+q8bkGH4gB+7uqLSqM5pIHSKLp7lfHQBt1J6xa7H2saiweaWjU+QGTgQ2Lg+uUC5DXJrmm60CeFJ4BoGhUenDlgijbQpjH/l6330PbwefgjWtUK/pqaEA4lCoPyvJ+eF2DbYfPiAIBAFQnhVJJae4AH+XoCt29nb2j30ztg== nocomment"},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
base_branch: branch2
|
||||
merge_base: 985f0301dba5e7b34be866819cd15ad3d8f508ee
|
||||
has_merged: false
|
||||
allow_maintainer_edit: true
|
||||
|
||||
-
|
||||
id: 6
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
full_name: ' < U<se>r Tw<o > >< '
|
||||
email: user2@example.com
|
||||
keep_email_private: true
|
||||
keep_pronouns_private: true
|
||||
email_notifications_preference: enabled
|
||||
passwd: ZogKvWdyEx:password
|
||||
passwd_hash_algo: dummy
|
||||
|
@ -350,6 +351,7 @@
|
|||
full_name: User Ten
|
||||
email: user10@example.com
|
||||
keep_email_private: false
|
||||
keep_pronouns_private: true
|
||||
email_notifications_preference: enabled
|
||||
passwd: ZogKvWdyEx:password
|
||||
passwd_hash_algo: dummy
|
||||
|
|
|
@ -58,40 +58,42 @@ var migrations = []*Migration{
|
|||
NewMigration("Add the `apply_to_admins` column to the `protected_branch` table", forgejo_v1_22.AddApplyToAdminsSetting),
|
||||
// v9 -> v10
|
||||
NewMigration("Add pronouns to user", forgejo_v1_22.AddPronounsToUser),
|
||||
// v11 -> v12
|
||||
// v10 -> v11
|
||||
NewMigration("Add the `created` column to the `issue` table", forgejo_v1_22.AddCreatedToIssue),
|
||||
// v12 -> v13
|
||||
// v11 -> v12
|
||||
NewMigration("Add repo_archive_download_count table", forgejo_v1_22.AddRepoArchiveDownloadCount),
|
||||
// v13 -> v14
|
||||
// v12 -> v13
|
||||
NewMigration("Add `hide_archive_links` column to `release` table", AddHideArchiveLinksToRelease),
|
||||
// v14 -> v15
|
||||
// v13 -> v14
|
||||
NewMigration("Remove Gitea-specific columns from the repository and badge tables", RemoveGiteaSpecificColumnsFromRepositoryAndBadge),
|
||||
// v15 -> v16
|
||||
// v14 -> v15
|
||||
NewMigration("Create the `federation_host` table", CreateFederationHostTable),
|
||||
// v16 -> v17
|
||||
// v15 -> v16
|
||||
NewMigration("Create the `federated_user` table", CreateFederatedUserTable),
|
||||
// v17 -> v18
|
||||
// v16 -> v17
|
||||
NewMigration("Add `normalized_federated_uri` column to `user` table", AddNormalizedFederatedURIToUser),
|
||||
// v18 -> v19
|
||||
// v17 -> v18
|
||||
NewMigration("Create the `following_repo` table", CreateFollowingRepoTable),
|
||||
// v19 -> v20
|
||||
// v18 -> v19
|
||||
NewMigration("Add external_url to attachment table", AddExternalURLColumnToAttachmentTable),
|
||||
// v20 -> v21
|
||||
// v19 -> v20
|
||||
NewMigration("Creating Quota-related tables", CreateQuotaTables),
|
||||
// v21 -> v22
|
||||
// v20 -> v21
|
||||
NewMigration("Add SSH keypair to `pull_mirror` table", AddSSHKeypairToPushMirror),
|
||||
// v22 -> v23
|
||||
// v21 -> v22
|
||||
NewMigration("Add `legacy` to `web_authn_credential` table", AddLegacyToWebAuthnCredential),
|
||||
// v23 -> v24
|
||||
// v22 -> v23
|
||||
NewMigration("Add `delete_branch_after_merge` to `auto_merge` table", AddDeleteBranchAfterMergeToAutoMerge),
|
||||
// v24 -> v25
|
||||
// v23 -> v24
|
||||
NewMigration("Add `purpose` column to `forgejo_auth_token` table", AddPurposeToForgejoAuthToken),
|
||||
// v25 -> v26
|
||||
// v24 -> v25
|
||||
NewMigration("Migrate `secret` column to store keying material", MigrateTwoFactorToKeying),
|
||||
// v26 -> v27
|
||||
// v25 -> v26
|
||||
NewMigration("Add `hash_blake2b` column to `package_blob` table", AddHashBlake2bToPackageBlob),
|
||||
// v27 -> v28
|
||||
// v26 -> v27
|
||||
NewMigration("Add `created_unix` column to `user_redirect` table", AddCreatedUnixToRedirect),
|
||||
// v27 -> v28
|
||||
NewMigration("Add pronoun privacy settings to user", AddHidePronounsOptionToUser),
|
||||
}
|
||||
|
||||
// GetCurrentDBVersion returns the current Forgejo database version.
|
||||
|
|
15
models/forgejo_migrations/v28.go
Normal file
15
models/forgejo_migrations/v28.go
Normal file
|
@ -0,0 +1,15 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgejo_migrations //nolint:revive
|
||||
|
||||
import "xorm.io/xorm"
|
||||
|
||||
func AddHidePronounsOptionToUser(x *xorm.Engine) error {
|
||||
type User struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
KeepPronounsPrivate bool `xorm:"NOT NULL DEFAULT false"`
|
||||
}
|
||||
|
||||
return x.Sync(&User{})
|
||||
}
|
|
@ -154,6 +154,7 @@ type User struct {
|
|||
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
|
||||
Theme string `xorm:"NOT NULL DEFAULT ''"`
|
||||
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
|
||||
KeepPronounsPrivate bool `xorm:"NOT NULL DEFAULT false"`
|
||||
EnableRepoUnitHints bool `xorm:"NOT NULL DEFAULT true"`
|
||||
}
|
||||
|
||||
|
@ -500,6 +501,16 @@ func (u *User) GetCompleteName() string {
|
|||
return u.Name
|
||||
}
|
||||
|
||||
// GetPronouns returns an empty string, if the user has set to keep his
|
||||
// pronouns private from non-logged in users, otherwise the pronouns
|
||||
// are returned.
|
||||
func (u *User) GetPronouns(signed bool) string {
|
||||
if u.KeepPronounsPrivate && !signed {
|
||||
return ""
|
||||
}
|
||||
return u.Pronouns
|
||||
}
|
||||
|
||||
func gitSafeName(name string) string {
|
||||
return strings.TrimSpace(strings.NewReplacer("\n", "", "<", "", ">", "").Replace(name))
|
||||
}
|
||||
|
@ -854,48 +865,46 @@ func countUsers(ctx context.Context, opts *CountUserFilter) int64 {
|
|||
|
||||
// VerifyUserActiveCode verifies that the code is valid for the given purpose for this user.
|
||||
// If delete is specified, the token will be deleted.
|
||||
func VerifyUserAuthorizationToken(ctx context.Context, code string, purpose auth.AuthorizationPurpose, delete bool) (*User, error) {
|
||||
func VerifyUserAuthorizationToken(ctx context.Context, code string, purpose auth.AuthorizationPurpose) (user *User, deleteToken func() error, err error) {
|
||||
lookupKey, validator, found := strings.Cut(code, ":")
|
||||
if !found {
|
||||
return nil, nil
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
authToken, err := auth.FindAuthToken(ctx, lookupKey, purpose)
|
||||
if err != nil {
|
||||
if errors.Is(err, util.ErrNotExist) {
|
||||
return nil, nil
|
||||
return nil, nil, nil
|
||||
}
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if authToken.IsExpired() {
|
||||
return nil, auth.DeleteAuthToken(ctx, authToken)
|
||||
return nil, nil, auth.DeleteAuthToken(ctx, authToken)
|
||||
}
|
||||
|
||||
rawValidator, err := hex.DecodeString(validator)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if subtle.ConstantTimeCompare([]byte(authToken.HashedValidator), []byte(auth.HashValidator(rawValidator))) == 0 {
|
||||
return nil, errors.New("validator doesn't match")
|
||||
return nil, nil, errors.New("validator doesn't match")
|
||||
}
|
||||
|
||||
u, err := GetUserByID(ctx, authToken.UID)
|
||||
if err != nil {
|
||||
if IsErrUserNotExist(err) {
|
||||
return nil, nil
|
||||
return nil, nil, nil
|
||||
}
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if delete {
|
||||
if err := auth.DeleteAuthToken(ctx, authToken); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
deleteToken = func() error {
|
||||
return auth.DeleteAuthToken(ctx, authToken)
|
||||
}
|
||||
|
||||
return u, nil
|
||||
return u, deleteToken, nil
|
||||
}
|
||||
|
||||
// ValidateUser check if user is valid to insert / update into database
|
||||
|
|
|
@ -756,13 +756,13 @@ func TestVerifyUserAuthorizationToken(t *testing.T) {
|
|||
assert.True(t, ok)
|
||||
|
||||
t.Run("Wrong purpose", func(t *testing.T) {
|
||||
u, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.PasswordReset, false)
|
||||
u, _, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.PasswordReset)
|
||||
require.NoError(t, err)
|
||||
assert.Nil(t, u)
|
||||
})
|
||||
|
||||
t.Run("No delete", func(t *testing.T) {
|
||||
u, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.UserActivation, false)
|
||||
u, _, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.UserActivation)
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, user.ID, u.ID)
|
||||
|
||||
|
@ -772,9 +772,10 @@ func TestVerifyUserAuthorizationToken(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("Delete", func(t *testing.T) {
|
||||
u, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.UserActivation, true)
|
||||
u, deleteToken, err := user_model.VerifyUserAuthorizationToken(db.DefaultContext, code, auth.UserActivation)
|
||||
require.NoError(t, err)
|
||||
assert.EqualValues(t, user.ID, u.ID)
|
||||
require.NoError(t, deleteToken())
|
||||
|
||||
authToken, err := auth.FindAuthToken(db.DefaultContext, lookupKey, auth.UserActivation)
|
||||
require.ErrorIs(t, err, util.ErrNotExist)
|
||||
|
@ -795,3 +796,42 @@ func TestGetInactiveUsers(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
require.Empty(t, users)
|
||||
}
|
||||
|
||||
func TestPronounsPrivacy(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
t.Run("EmptyPronounsIfNoneSet", func(t *testing.T) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user.Pronouns = ""
|
||||
user.KeepPronounsPrivate = false
|
||||
|
||||
assert.Equal(t, "", user.GetPronouns(false))
|
||||
})
|
||||
t.Run("EmptyPronounsIfSetButPrivateAndNotLoggedIn", func(t *testing.T) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user.Pronouns = "any"
|
||||
user.KeepPronounsPrivate = true
|
||||
|
||||
assert.Equal(t, "", user.GetPronouns(false))
|
||||
})
|
||||
t.Run("ReturnPronounsIfSetAndNotPrivateAndNotLoggedIn", func(t *testing.T) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user.Pronouns = "any"
|
||||
user.KeepPronounsPrivate = false
|
||||
|
||||
assert.Equal(t, "any", user.GetPronouns(false))
|
||||
})
|
||||
t.Run("ReturnPronounsIfSetAndPrivateAndLoggedIn", func(t *testing.T) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user.Pronouns = "any"
|
||||
user.KeepPronounsPrivate = false
|
||||
|
||||
assert.Equal(t, "any", user.GetPronouns(true))
|
||||
})
|
||||
t.Run("ReturnPronounsIfSetAndNotPrivateAndLoggedIn", func(t *testing.T) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user.Pronouns = "any"
|
||||
user.KeepPronounsPrivate = true
|
||||
|
||||
assert.Equal(t, "any", user.GetPronouns(true))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -21,8 +21,8 @@ type ForgeLike struct {
|
|||
func NewForgeLike(actorIRI, objectIRI string, startTime time.Time) (ForgeLike, error) {
|
||||
result := ForgeLike{}
|
||||
result.Type = ap.LikeType
|
||||
result.Actor = ap.IRI(actorIRI) // That's us, a User
|
||||
result.Object = ap.IRI(objectIRI) // That's them, a Repository
|
||||
result.Actor = ap.IRI(actorIRI)
|
||||
result.Object = ap.IRI(objectIRI)
|
||||
result.StartTime = startTime
|
||||
if valid, err := validation.IsValid(result); !valid {
|
||||
return ForgeLike{}, err
|
||||
|
@ -46,20 +46,23 @@ func (like ForgeLike) Validate() []string {
|
|||
var result []string
|
||||
result = append(result, validation.ValidateNotEmpty(string(like.Type), "type")...)
|
||||
result = append(result, validation.ValidateOneOf(string(like.Type), []any{"Like"}, "type")...)
|
||||
|
||||
if like.Actor == nil {
|
||||
result = append(result, "Actor should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(like.Actor.GetID().String(), "actor")...)
|
||||
}
|
||||
if like.Object == nil {
|
||||
result = append(result, "Object should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(like.Object.GetID().String(), "object")...)
|
||||
}
|
||||
|
||||
result = append(result, validation.ValidateNotEmpty(like.StartTime.String(), "startTime")...)
|
||||
if like.StartTime.IsZero() {
|
||||
result = append(result, "StartTime was invalid.")
|
||||
}
|
||||
|
||||
if like.Object == nil {
|
||||
result = append(result, "Object should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(like.Object.GetID().String(), "object")...)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
|
@ -16,11 +16,11 @@ import (
|
|||
)
|
||||
|
||||
func Test_NewForgeLike(t *testing.T) {
|
||||
want := []byte(`{"type":"Like","startTime":"2024-03-07T00:00:00Z","actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1","object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}`)
|
||||
|
||||
actorIRI := "https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"
|
||||
objectIRI := "https://codeberg.org/api/v1/activitypub/repository-id/1"
|
||||
want := []byte(`{"type":"Like","startTime":"2024-03-27T00:00:00Z","actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1","object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}`)
|
||||
|
||||
startTime, _ := time.Parse("2006-Jan-02", "2024-Mar-27")
|
||||
startTime, _ := time.Parse("2006-Jan-02", "2024-Mar-07")
|
||||
sut, err := NewForgeLike(actorIRI, objectIRI, startTime)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v\n", err)
|
||||
|
@ -84,7 +84,6 @@ func Test_LikeUnmarshalJSON(t *testing.T) {
|
|||
wantErr error
|
||||
}
|
||||
|
||||
//revive:disable
|
||||
tests := map[string]testPair{
|
||||
"with ID": {
|
||||
item: []byte(`{"type":"Like","actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1","object":"https://codeberg.org/api/activitypub/repository-id/1"}`),
|
||||
|
@ -100,10 +99,9 @@ func Test_LikeUnmarshalJSON(t *testing.T) {
|
|||
"invalid": {
|
||||
item: []byte(`{"type":"Invalid","actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1","object":"https://codeberg.org/api/activitypub/repository-id/1"`),
|
||||
want: &ForgeLike{},
|
||||
wantErr: fmt.Errorf("cannot parse JSON:"),
|
||||
wantErr: fmt.Errorf("cannot parse JSON"),
|
||||
},
|
||||
}
|
||||
//revive:enable
|
||||
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
|
@ -120,7 +118,9 @@ func Test_LikeUnmarshalJSON(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestActivityValidation(t *testing.T) {
|
||||
func Test_ForgeLikeValidation(t *testing.T) {
|
||||
// Successful
|
||||
|
||||
sut := new(ForgeLike)
|
||||
sut.UnmarshalJSON([]byte(`{"type":"Like",
|
||||
"actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
|
@ -130,35 +130,37 @@ func TestActivityValidation(t *testing.T) {
|
|||
t.Errorf("sut expected to be valid: %v\n", sut.Validate())
|
||||
}
|
||||
|
||||
// Errors
|
||||
|
||||
sut.UnmarshalJSON([]byte(`{"actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "2014-12-31T23:00:00-08:00"}`))
|
||||
if sut.Validate()[0] != "type should not be empty" {
|
||||
t.Errorf("validation error expected but was: %v\n", sut.Validate()[0])
|
||||
if err := validateAndCheckError(sut, "type should not be empty"); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
sut.UnmarshalJSON([]byte(`{"type":"bad-type",
|
||||
"actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "2014-12-31T23:00:00-08:00"}`))
|
||||
if sut.Validate()[0] != "Value bad-type is not contained in allowed values [Like]" {
|
||||
t.Errorf("validation error expected but was: %v\n", sut.Validate()[0])
|
||||
if err := validateAndCheckError(sut, "Value bad-type is not contained in allowed values [Like]"); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
sut.UnmarshalJSON([]byte(`{"type":"Like",
|
||||
"actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "not a date"}`))
|
||||
if sut.Validate()[0] != "StartTime was invalid." {
|
||||
t.Errorf("validation error expected but was: %v\n", sut.Validate())
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "not a date"}`))
|
||||
if err := validateAndCheckError(sut, "StartTime was invalid."); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
sut.UnmarshalJSON([]byte(`{"type":"Wrong",
|
||||
"actor":"https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "2014-12-31T23:00:00-08:00"}`))
|
||||
if sut.Validate()[0] != "Value Wrong is not contained in allowed values [Like]" {
|
||||
t.Errorf("validation error expected but was: %v\n", sut.Validate())
|
||||
"object":"https://codeberg.org/api/activitypub/repository-id/1",
|
||||
"startTime": "2014-12-31T23:00:00-08:00"}`))
|
||||
if err := validateAndCheckError(sut, "Value Wrong is not contained in allowed values [Like]"); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,6 +168,6 @@ func TestActivityValidation_Attack(t *testing.T) {
|
|||
sut := new(ForgeLike)
|
||||
sut.UnmarshalJSON([]byte(`{rubbish}`))
|
||||
if len(sut.Validate()) != 5 {
|
||||
t.Errorf("5 validateion errors expected but was: %v\n", len(sut.Validate()))
|
||||
t.Errorf("5 validation errors expected but was: %v\n", len(sut.Validate()))
|
||||
}
|
||||
}
|
80
modules/forgefed/activity_undo_like.go
Normal file
80
modules/forgefed/activity_undo_like.go
Normal file
|
@ -0,0 +1,80 @@
|
|||
// Copyright 2023, 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgefed
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"code.gitea.io/gitea/modules/validation"
|
||||
|
||||
ap "github.com/go-ap/activitypub"
|
||||
)
|
||||
|
||||
// ForgeLike activity data type
|
||||
// swagger:model
|
||||
type ForgeUndoLike struct {
|
||||
// swagger:ignore
|
||||
ap.Activity
|
||||
}
|
||||
|
||||
func NewForgeUndoLike(actorIRI, objectIRI string, startTime time.Time) (ForgeUndoLike, error) {
|
||||
result := ForgeUndoLike{}
|
||||
result.Type = ap.UndoType
|
||||
result.Actor = ap.IRI(actorIRI)
|
||||
result.StartTime = startTime
|
||||
|
||||
like := ap.Activity{}
|
||||
like.Type = ap.LikeType
|
||||
like.Actor = ap.IRI(actorIRI)
|
||||
like.Object = ap.IRI(objectIRI)
|
||||
result.Object = &like
|
||||
|
||||
if valid, err := validation.IsValid(result); !valid {
|
||||
return ForgeUndoLike{}, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (undo *ForgeUndoLike) UnmarshalJSON(data []byte) error {
|
||||
return undo.Activity.UnmarshalJSON(data)
|
||||
}
|
||||
|
||||
func (undo ForgeUndoLike) Validate() []string {
|
||||
var result []string
|
||||
result = append(result, validation.ValidateNotEmpty(string(undo.Type), "type")...)
|
||||
result = append(result, validation.ValidateOneOf(string(undo.Type), []any{"Undo"}, "type")...)
|
||||
|
||||
if undo.Actor == nil {
|
||||
result = append(result, "Actor should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(undo.Actor.GetID().String(), "actor")...)
|
||||
}
|
||||
|
||||
result = append(result, validation.ValidateNotEmpty(undo.StartTime.String(), "startTime")...)
|
||||
if undo.StartTime.IsZero() {
|
||||
result = append(result, "StartTime was invalid.")
|
||||
}
|
||||
|
||||
if undo.Object == nil {
|
||||
result = append(result, "object should not be empty.")
|
||||
} else if activity, ok := undo.Object.(*ap.Activity); !ok {
|
||||
result = append(result, "object is not of type Activity")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(string(activity.Type), "type")...)
|
||||
result = append(result, validation.ValidateOneOf(string(activity.Type), []any{"Like"}, "type")...)
|
||||
|
||||
if activity.Actor == nil {
|
||||
result = append(result, "Object.Actor should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(activity.Actor.GetID().String(), "actor")...)
|
||||
}
|
||||
|
||||
if activity.Object == nil {
|
||||
result = append(result, "Object.Object should not be nil.")
|
||||
} else {
|
||||
result = append(result, validation.ValidateNotEmpty(activity.Object.GetID().String(), "object")...)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
246
modules/forgefed/activity_undo_like_test.go
Normal file
246
modules/forgefed/activity_undo_like_test.go
Normal file
|
@ -0,0 +1,246 @@
|
|||
// Copyright 2023, 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgefed
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"code.gitea.io/gitea/modules/validation"
|
||||
|
||||
ap "github.com/go-ap/activitypub"
|
||||
)
|
||||
|
||||
func Test_NewForgeUndoLike(t *testing.T) {
|
||||
actorIRI := "https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"
|
||||
objectIRI := "https://codeberg.org/api/v1/activitypub/repository-id/1"
|
||||
want := []byte(`{"type":"Undo","startTime":"2024-03-27T00:00:00Z",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":{` +
|
||||
`"type":"Like",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`)
|
||||
|
||||
startTime, _ := time.Parse("2006-Jan-02", "2024-Mar-27")
|
||||
sut, err := NewForgeUndoLike(actorIRI, objectIRI, startTime)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v\n", err)
|
||||
}
|
||||
if valid, _ := validation.IsValid(sut); !valid {
|
||||
t.Errorf("sut expected to be valid: %v\n", sut.Validate())
|
||||
}
|
||||
|
||||
got, err := sut.MarshalJSON()
|
||||
if err != nil {
|
||||
t.Errorf("MarshalJSON() error = \"%v\"", err)
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("MarshalJSON() got = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_UndoLikeMarshalJSON(t *testing.T) {
|
||||
type testPair struct {
|
||||
item ForgeUndoLike
|
||||
want []byte
|
||||
wantErr error
|
||||
}
|
||||
|
||||
startTime, _ := time.Parse("2006-Jan-02", "2024-Mar-27")
|
||||
like, _ := NewForgeLike("https://repo.prod.meissa.de/api/v1/activitypub/user-id/1", "https://codeberg.org/api/v1/activitypub/repository-id/1", startTime)
|
||||
tests := map[string]testPair{
|
||||
"empty": {
|
||||
item: ForgeUndoLike{},
|
||||
want: nil,
|
||||
},
|
||||
"valid": {
|
||||
item: ForgeUndoLike{
|
||||
Activity: ap.Activity{
|
||||
StartTime: startTime,
|
||||
Actor: ap.IRI("https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"),
|
||||
Type: "Undo",
|
||||
Object: like,
|
||||
},
|
||||
},
|
||||
want: []byte(`{"type":"Undo",` +
|
||||
`"startTime":"2024-03-27T00:00:00Z",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":{` +
|
||||
`"type":"Like",` +
|
||||
`"startTime":"2024-03-27T00:00:00Z",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`),
|
||||
},
|
||||
}
|
||||
|
||||
for name, tt := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got, err := tt.item.MarshalJSON()
|
||||
if (err != nil || tt.wantErr != nil) && tt.wantErr.Error() != err.Error() {
|
||||
t.Errorf("MarshalJSON() error = \"%v\", wantErr \"%v\"", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("MarshalJSON() got = %q\nwant %q", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_UndoLikeUnmarshalJSON(t *testing.T) {
|
||||
type testPair struct {
|
||||
item []byte
|
||||
want *ForgeUndoLike
|
||||
wantErr error
|
||||
}
|
||||
|
||||
startTime, _ := time.Parse("2006-Jan-02", "2024-Mar-27")
|
||||
like, _ := NewForgeLike("https://repo.prod.meissa.de/api/v1/activitypub/user-id/1", "https://codeberg.org/api/v1/activitypub/repository-id/1", startTime)
|
||||
|
||||
tests := map[string]testPair{
|
||||
"valid": {
|
||||
item: []byte(`{"type":"Undo",` +
|
||||
`"startTime":"2024-03-27T00:00:00Z",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":{` +
|
||||
`"type":"Like",` +
|
||||
`"startTime":"2024-03-27T00:00:00Z",` +
|
||||
`"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",` +
|
||||
`"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`),
|
||||
want: &ForgeUndoLike{
|
||||
Activity: ap.Activity{
|
||||
StartTime: startTime,
|
||||
Actor: ap.IRI("https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"),
|
||||
Type: "Undo",
|
||||
Object: like,
|
||||
},
|
||||
},
|
||||
wantErr: nil,
|
||||
},
|
||||
"invalid": {
|
||||
item: []byte(`invalid JSON`),
|
||||
want: nil,
|
||||
wantErr: fmt.Errorf("cannot parse JSON"),
|
||||
},
|
||||
}
|
||||
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got := new(ForgeUndoLike)
|
||||
err := got.UnmarshalJSON(test.item)
|
||||
if test.wantErr != nil {
|
||||
if err == nil {
|
||||
t.Errorf("UnmarshalJSON() error = nil, wantErr \"%v\"", test.wantErr)
|
||||
} else if !strings.Contains(err.Error(), test.wantErr.Error()) {
|
||||
t.Errorf("UnmarshalJSON() error = \"%v\", wantErr \"%v\"", err, test.wantErr)
|
||||
}
|
||||
return
|
||||
}
|
||||
remarshalledgot, _ := got.MarshalJSON()
|
||||
remarshalledwant, _ := test.want.MarshalJSON()
|
||||
if !reflect.DeepEqual(remarshalledgot, remarshalledwant) {
|
||||
t.Errorf("UnmarshalJSON() got = %#v\nwant %#v", got, test.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestActivityValidationUndo(t *testing.T) {
|
||||
sut := new(ForgeUndoLike)
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`))
|
||||
if res, _ := validation.IsValid(sut); !res {
|
||||
t.Errorf("sut expected to be valid: %v\n", sut.Validate())
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`))
|
||||
if err := validateAndCheckError(sut, "type should not be empty"); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`))
|
||||
if err := validateAndCheckError(sut, "Actor should not be nil."); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"string",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`))
|
||||
if err := validateAndCheckError(sut, "Actor should not be nil."); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"
|
||||
}`))
|
||||
if err := validateAndCheckError(sut, "object should not be empty."); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":{
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":"https://codeberg.org/api/v1/activitypub/repository-id/1"}}`))
|
||||
if err := validateAndCheckError(sut, "object is not of type Activity"); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"object":""}}`))
|
||||
if err := validateAndCheckError(sut, "Object.Actor should not be nil."); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
|
||||
_ = sut.UnmarshalJSON([]byte(`
|
||||
{"type":"Undo",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
"object":{
|
||||
"type":"Like",
|
||||
"startTime":"2024-03-27T00:00:00Z",
|
||||
"actor":"https://repo.prod.meissa.de/api/v1/activitypub/user-id/1"}}`))
|
||||
if err := validateAndCheckError(sut, "Object.Object should not be nil."); err != nil {
|
||||
t.Error(*err)
|
||||
}
|
||||
}
|
23
modules/forgefed/activity_validateandcheckerror_test.go
Normal file
23
modules/forgefed/activity_validateandcheckerror_test.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
// Copyright 2023, 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgefed
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"code.gitea.io/gitea/modules/validation"
|
||||
)
|
||||
|
||||
func validateAndCheckError(subject validation.Validateable, expectedError string) *string {
|
||||
errors := subject.Validate()
|
||||
err := errors[0]
|
||||
if len(errors) < 1 {
|
||||
val := "Validation error should have been returned, but was not."
|
||||
return &val
|
||||
} else if err != expectedError {
|
||||
val := fmt.Sprintf("Validation error should be [%v] but was: %v\n", expectedError, err)
|
||||
return &val
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package repository
|
||||
|
@ -107,6 +108,9 @@ func getLicensePlaceholder(name string) *licensePlaceholder {
|
|||
}
|
||||
|
||||
// Other special placeholders can be added here.
|
||||
} else if name == "BSD-4-Clause" {
|
||||
ret.Owner = append(ret.Owner, "COPYRIGHT HOLDER")
|
||||
ret.Owner = append(ret.Owner, "the organization")
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package repository
|
||||
|
@ -170,6 +171,31 @@ Copyright (C) 2023 by Gitea teabot@gitea.io
|
|||
...
|
||||
|
||||
... THE AUTHOR BE LIABLE FOR ...
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "BSD-4-Clause",
|
||||
args: args{
|
||||
name: "BSD-4-Clause",
|
||||
values: &LicenseValues{Year: "2025", Owner: "Forgejo", Email: "hello@forgejo.org", Repo: "forgejo"},
|
||||
origin: `
|
||||
Copyright (c) <year> <owner>. All rights reserved.
|
||||
|
||||
... includes software developed by the organization.
|
||||
|
||||
... Neither the name of the copyright holder nor
|
||||
|
||||
... PROVIDED BY COPYRIGHT HOLDER "AS IS" ... NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE ...
|
||||
`,
|
||||
},
|
||||
want: `
|
||||
Copyright (c) 2025 Forgejo. All rights reserved.
|
||||
|
||||
... includes software developed by Forgejo.
|
||||
|
||||
... Neither the name of the copyright holder nor
|
||||
|
||||
... PROVIDED BY Forgejo "AS IS" ... NO EVENT SHALL Forgejo BE LIABLE ...
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ type UserSettings struct {
|
|||
EnableRepoUnitHints bool `json:"enable_repo_unit_hints"`
|
||||
// Privacy
|
||||
HideEmail bool `json:"hide_email"`
|
||||
HidePronouns bool `json:"hide_pronouns"`
|
||||
HideActivity bool `json:"hide_activity"`
|
||||
}
|
||||
|
||||
|
@ -101,6 +102,7 @@ type UserSettingsOptions struct {
|
|||
EnableRepoUnitHints *bool `json:"enable_repo_unit_hints"`
|
||||
// Privacy
|
||||
HideEmail *bool `json:"hide_email"`
|
||||
HidePronouns *bool `json:"hide_pronouns"`
|
||||
HideActivity *bool `json:"hide_activity"`
|
||||
}
|
||||
|
||||
|
|
119
options/gitignore/Flutter
Normal file
119
options/gitignore/Flutter
Normal file
|
@ -0,0 +1,119 @@
|
|||
# Miscellaneous
|
||||
*.class
|
||||
*.lock
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.buildlog/
|
||||
.history
|
||||
|
||||
|
||||
|
||||
# Flutter repo-specific
|
||||
/bin/cache/
|
||||
/bin/internal/bootstrap.bat
|
||||
/bin/internal/bootstrap.sh
|
||||
/bin/mingit/
|
||||
/dev/benchmarks/mega_gallery/
|
||||
/dev/bots/.recipe_deps
|
||||
/dev/bots/android_tools/
|
||||
/dev/devicelab/ABresults*.json
|
||||
/dev/docs/doc/
|
||||
/dev/docs/flutter.docs.zip
|
||||
/dev/docs/lib/
|
||||
/dev/docs/pubspec.yaml
|
||||
/dev/integration_tests/**/xcuserdata
|
||||
/dev/integration_tests/**/Pods
|
||||
/packages/flutter/coverage/
|
||||
version
|
||||
analysis_benchmark.json
|
||||
|
||||
# packages file containing multi-root paths
|
||||
.packages.generated
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
**/generated_plugin_registrant.dart
|
||||
.packages
|
||||
.pub-preload-cache/
|
||||
.pub/
|
||||
build/
|
||||
flutter_*.png
|
||||
linked_*.ds
|
||||
unlinked.ds
|
||||
unlinked_spec.ds
|
||||
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
.gradle/
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
**/android/key.properties
|
||||
*.jks
|
||||
|
||||
# iOS/XCode related
|
||||
**/ios/**/*.mode1v3
|
||||
**/ios/**/*.mode2v3
|
||||
**/ios/**/*.moved-aside
|
||||
**/ios/**/*.pbxuser
|
||||
**/ios/**/*.perspectivev3
|
||||
**/ios/**/*sync/
|
||||
**/ios/**/.sconsign.dblite
|
||||
**/ios/**/.tags*
|
||||
**/ios/**/.vagrant/
|
||||
**/ios/**/DerivedData/
|
||||
**/ios/**/Icon?
|
||||
**/ios/**/Pods/
|
||||
**/ios/**/.symlinks/
|
||||
**/ios/**/profile
|
||||
**/ios/**/xcuserdata
|
||||
**/ios/.generated/
|
||||
**/ios/Flutter/.last_build_id
|
||||
**/ios/Flutter/App.framework
|
||||
**/ios/Flutter/Flutter.framework
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
**/ios/Flutter/Generated.xcconfig
|
||||
**/ios/Flutter/ephemeral
|
||||
**/ios/Flutter/app.flx
|
||||
**/ios/Flutter/app.zip
|
||||
**/ios/Flutter/flutter_assets/
|
||||
**/ios/Flutter/flutter_export_environment.sh
|
||||
**/ios/ServiceDefinitions.json
|
||||
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# macOS
|
||||
**/Flutter/ephemeral/
|
||||
**/Pods/
|
||||
**/macos/Flutter/GeneratedPluginRegistrant.swift
|
||||
**/macos/Flutter/ephemeral
|
||||
**/xcuserdata/
|
||||
|
||||
# Windows
|
||||
**/windows/flutter/generated_plugin_registrant.cc
|
||||
**/windows/flutter/generated_plugin_registrant.h
|
||||
**/windows/flutter/generated_plugins.cmake
|
||||
|
||||
# Linux
|
||||
**/linux/flutter/generated_plugin_registrant.cc
|
||||
**/linux/flutter/generated_plugin_registrant.h
|
||||
**/linux/flutter/generated_plugins.cmake
|
||||
|
||||
# Coverage
|
||||
coverage/
|
||||
|
||||
# Symbols
|
||||
app.*.symbols
|
||||
|
||||
# Exceptions to above rules.
|
||||
!**/ios/**/default.mode1v3
|
||||
!**/ios/**/default.mode2v3
|
||||
!**/ios/**/default.pbxuser
|
||||
!**/ios/**/default.perspectivev3
|
||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||
!/dev/ci/**/Gemfile.lock
|
|
@ -1,3 +1,6 @@
|
|||
# Ignore build outputs from performing a nix-build or `nix build` command
|
||||
result
|
||||
result-*
|
||||
|
||||
# Ignore automatically generated direnv output
|
||||
.direnv
|
||||
|
|
16
options/gitignore/NotesAndCoreConfiguration
Normal file
16
options/gitignore/NotesAndCoreConfiguration
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Excludes Obsidian workspace cache and plugins. All notes and core obsidian
|
||||
# configuration files are tracked by Git.
|
||||
|
||||
# The current application UI state (DOM layout, recently-opened files, etc.) is
|
||||
# stored in these files (separate for desktop and mobile) so you can resume
|
||||
# your session seamlessly after a restart. If you want to track UI state, use
|
||||
# the Workspaces core plugin instead of relying on these files.
|
||||
.obsidian/workspace.json
|
||||
.obsidian/workspace-mobile.json
|
||||
|
||||
# Obsidian plugins are stored under .obsidian/plugins/$plugin_name. They
|
||||
# contain metadata (manifest.json), application code (main.js), stylesheets
|
||||
# (styles.css), and user-configuration data (data.json).
|
||||
# We want to exclude all plugin-related files, so we can exclude everything
|
||||
# under this directory.
|
||||
.obsidian/plugins/**/*
|
38
options/gitignore/NotesAndExtendedConfiguration
Normal file
38
options/gitignore/NotesAndExtendedConfiguration
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Excludes Obsidian workspace cache and plugin code, but retains plugin
|
||||
# configuration. All notes and user-controlled configuration files are tracked
|
||||
# by Git.
|
||||
#
|
||||
# !!! WARNING !!!
|
||||
#
|
||||
# Community plugins may store sensitive secrets in their data.json files. By
|
||||
# including these files, those secrets may be tracked in your Git repository.
|
||||
#
|
||||
# To ignore configurations for specific plugins, add a line like this after the
|
||||
# contents of this file (order is important):
|
||||
# .obsidian/plugins/{{plugin_name}}/data.json
|
||||
#
|
||||
# Alternatively, ensure that you are treating your entire Git repository as
|
||||
# sensitive data, since it may contain secrets, or may have contained them in
|
||||
# past commits. Understand your threat profile, and make the decision
|
||||
# appropriate for yourself. If in doubt, err on the side of not including
|
||||
# plugin configuration. Use one of the alternative gitignore files instead:
|
||||
# * NotesOnly.gitignore
|
||||
# * NotesAndCoreConfiguration.gitignore
|
||||
|
||||
# The current application UI state (DOM layout, recently-opened files, etc.) is
|
||||
# stored in these files (separate for desktop and mobile) so you can resume
|
||||
# your session seamlessly after a restart. If you want to track UI state, use
|
||||
# the Workspaces core plugin instead of relying on these files.
|
||||
.obsidian/workspace.json
|
||||
.obsidian/workspace-mobile.json
|
||||
|
||||
# Obsidian plugins are stored under .obsidian/plugins/$plugin_name. They
|
||||
# contain metadata (manifest.json), application code (main.js), stylesheets
|
||||
# (styles.css), and user-configuration data (data.json).
|
||||
# We only want to track data.json, so we:
|
||||
# 1. exclude everything under the plugins directory recursively,
|
||||
# 2. unignore the plugin directories themselves, which then allows us to
|
||||
# 3. unignore the data.json files
|
||||
.obsidian/plugins/**/*
|
||||
!.obsidian/plugins/*/
|
||||
!.obsidian/plugins/*/data.json
|
4
options/gitignore/NotesOnly
Normal file
4
options/gitignore/NotesOnly
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Excludes all Obsidian-related configuration. All notes are tracked by Git.
|
||||
|
||||
# All Obsidian configuration and runtime state is stored here
|
||||
.obsidian/**/*
|
|
@ -2873,6 +2873,8 @@ issues.reaction.alt_add = Přidat %[1]s reakci na komentář.
|
|||
archive.pull.noreview = Tento repozitář je archivován. Nemůžete kontrolovat žádosti o sloučení.
|
||||
editor.commit_email = E-mail revize
|
||||
commits.view_single_diff = Zobrazit změny tohoto souboru provedené v této revizi
|
||||
pulls.editable = Upravitelné
|
||||
pulls.editable_explanation = Tato žádost o sloučení umožňuje úpravy správci. Můžete přispět přímo do ní.
|
||||
|
||||
[graphs]
|
||||
component_loading_info = Tohle může chvíli trvat…
|
||||
|
@ -3008,8 +3010,8 @@ teams.invite.by=Pozvání od %s
|
|||
teams.invite.description=Pro připojení k týmu klikněte na tlačítko níže.
|
||||
follow_blocked_user = Tuto organizaci nemůžete sledovat, protože jste v ní zablokováni.
|
||||
open_dashboard = Otevřít nástěnku
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Staré uživatelské jméno bude dostupné ostatním po %[1]d dni. Do té doby budete moci své staré uživatelské jméno znovu získat.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Staré uživatelské jméno bude dostupné ostatním po %[1]d dnech. Do té doby budete moci své staré uživatelské jméno znovu získat.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Starý název organizace bude dostupný ostatním po %[1]d dni. Do té doby budete moci staré jméno znovu získat.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Starý název organizace bude dostupný ostatním po %[1]d dnech. Do té doby budete moci starý název znovu získat.
|
||||
|
||||
[admin]
|
||||
dashboard=Přehled
|
||||
|
@ -3956,6 +3958,7 @@ workflow.dispatch.success = Žádost o spuštění workflow byla úspěšně ode
|
|||
runs.expire_log_message = Protokoly byly smazány, protože byly příliš staré.
|
||||
runs.no_workflows.help_no_write_access = Pro více informací o Forgejo Actions se podívejte do <a target="_blank" rel="noopener noreferrer" href="%s">dokumentace</a>.
|
||||
runs.no_workflows.help_write_access = Nevíte, jak začít s Forgejo Actions? Podívejte se na <a target="_blank" rel="noopener noreferrer" href="%s">rychlý začátek v uživatelské dokumentaci</a> pro vytvoření vašeho prvního workflow. Poté <a target="_blank" rel="noopener noreferrer" href="%s">nastavte runner Forgejo</a> pro provádění vašich úloh.
|
||||
variables.not_found = Nepodařilo se najít proměnnou.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Samostatný projekt
|
||||
|
|
|
@ -1827,6 +1827,34 @@ pulls.blocked_by_outdated_branch = Denne pull-anmodning er blokeret, fordi den e
|
|||
pulls.blocked_by_changed_protected_files_1 = Denne pull-anmodning er blokeret, fordi den ændrer en beskyttet fil:
|
||||
pulls.blocked_by_changed_protected_files_n = Denne pull-anmodning er blokeret, fordi den ændrer beskyttede filer:
|
||||
pulls.can_auto_merge_desc = Denne pull-anmodning kan flettes automatisk.
|
||||
pulls.approve_count_1 = %d godkendelse
|
||||
pulls.num_conflicting_files_n = %d modstridende filer
|
||||
pulls.num_conflicting_files_1 = %d modstridende fil
|
||||
pulls.approve_count_n = %d godkendelser
|
||||
pulls.reject_count_1 = %d ændringsanmodning
|
||||
commits.view_single_diff = Se ændringer til denne fil introduceret i denne commit
|
||||
pulls.cannot_auto_merge_helper = Flet manuelt for at løse konflikterne.
|
||||
pulls.cannot_auto_merge_desc = Denne pull-anmodning kan ikke flettes automatisk på grund af konflikter.
|
||||
pulls.reject_count_n = %d ændringsanmodninger
|
||||
pulls.no_merge_desc = Denne pull-anmodning kan ikke flettes, fordi alle depotsfletningsmuligheder er deaktiveret.
|
||||
pulls.no_merge_helper = Aktiver fletteindstillinger i depotindstillingerne, eller flet pull-anmodningen manuelt.
|
||||
pulls.no_merge_wip = Denne pull-anmodning kan ikke flettes, fordi den er markeret som værende et igangværende arbejde.
|
||||
pulls.no_merge_not_ready = Denne pull-anmodning er ikke klar til at blive flettet, tjek gennemgangsstatus og statustjek.
|
||||
pulls.squash_merge_pull_request = Opret squash-commit
|
||||
pulls.fast_forward_only_merge_pull_request = Spol kun frem
|
||||
pulls.merge_manually = Manuel flet
|
||||
pulls.merge_commit_id = Flettes commit ID
|
||||
pulls.require_signed_wont_sign = Grenen kræver underskrevne tilsagn, men denne fletning vil ikke blive underskrevet
|
||||
pulls.waiting_count_n = %d venter på gennemgange
|
||||
pulls.wrong_commit_id = commit id skal være et commit id på målgrenen
|
||||
pulls.blocked_by_user = Du kan ikke oprette en pull-anmodning på dette depot, fordi du er blokeret af depotets ejer.
|
||||
pulls.no_merge_access = Du er ikke autoriseret til at flette denne pull-anmodning.
|
||||
pulls.merge_pull_request = Opret flet commit
|
||||
pulls.rebase_merge_pull_request = Rebaser og spole derefter frem
|
||||
pulls.rebase_merge_commit_pull_request = Rebase og opret derefter flet commit
|
||||
pulls.waiting_count_1 = %d venter på gennemgang
|
||||
pulls.invalid_merge_option = Du kan ikke bruge denne fletteindstilling til denne pull-anmodning.
|
||||
pulls.merge_conflict = Sammenfletning mislykkedes: Der var en konflikt under sammenlægningen. Tip: Prøv en anden strategi
|
||||
|
||||
[notification]
|
||||
watching = Overvåger
|
||||
|
|
|
@ -2874,6 +2874,7 @@ summary_card_alt = Zusammenfassungskarte des Repositorys %s
|
|||
release.summary_card_alt = Übersichtskarte eines Releases mit dem Titel „%s“ im Repository %s
|
||||
archive.pull.noreview = Dieses Repository ist archiviert. Pull-Requests können nicht gereviewt werden.
|
||||
editor.commit_email = Commit-E-Mail
|
||||
commits.view_single_diff = Änderungen an dieser Datei, die in diesem Commit eingeführt wurden, betrachten
|
||||
|
||||
[graphs]
|
||||
component_loading_failed = Konnte %s nicht laden
|
||||
|
@ -3959,6 +3960,7 @@ workflow.dispatch.success = Ausführung des Workflows wurde erfolgreich angefrag
|
|||
runs.expire_log_message = Logs wurden gelöscht, weil sie zu alt waren.
|
||||
runs.no_workflows.help_write_access = Keine Ahnung, wie man mit Forgejo Actions anfangen soll? Schau im <a target="_blank" rel="noopener noreferrer" href="%s">Schnellstart in der Benutzerdokumentation</a> vorbei, um deinen ersten Workflow zu schreiben, dann <a target="_blank" rel="noopener noreferrer" href="%s">setze einen Forgejo-Runner auf</a>, um deine Jobs auszuführen.
|
||||
runs.no_workflows.help_no_write_access = Um über Forgejo Actions zu lernen, siehe <a target="_blank" rel="noopener noreferrer" href="%s">die Dokumentation</a>.
|
||||
variables.not_found = Die Variable wurde nicht gefunden.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Individuelles Projekt
|
||||
|
|
|
@ -2828,6 +2828,8 @@ milestones.filter_sort.name = Όνομα
|
|||
release.type_external_asset = Εξωτερικό αρχείο
|
||||
mirror_public_key = Δημόσιο κλειδί SSH
|
||||
mirror_use_ssh.helper = το Forgejo θα κατοπτρίσει το αποθετήριο μέσω Git με τη χρήση SSH και θα δημιουργήσει ένα ζεύγος κλειδιών. Πρέπει να εξασφαλίσετε πως το δημιουργημένο κλειδί είναι εξουσιοδοτημένο να ωθεί στο αποθετήριο προορισμού. Εφόσον το έχετε επιλέξει, δε μπορείτε να χρησιμοποιήσετε εξουσιοδότηση συνθηματικού.
|
||||
issues.all_title = Όλα
|
||||
editor.add_tmpl.filename = Όνομα αρχείου
|
||||
|
||||
[graphs]
|
||||
component_loading_failed = Δεν ήταν δυνατή η φόρτωση του %s
|
||||
|
|
|
@ -853,6 +853,8 @@ email_preference_set_success = Email preference has been set successfully.
|
|||
add_openid_success = The new OpenID address has been added.
|
||||
keep_email_private = Hide email address
|
||||
keep_email_private_popup = Your email address will not be shown on your profile and will not be the default for commits made via the web interface, like file uploads, edits, and merge commits. Instead, a special address %s can be used to link commits to your account. This option will not affect existing commits.
|
||||
keep_pronouns_private = Only show pronouns to authenticated users
|
||||
keep_pronouns_private.description = This will hide your pronouns from visitors that are not logged in.
|
||||
openid_desc = OpenID lets you delegate authentication to an external provider.
|
||||
|
||||
manage_ssh_keys = Manage SSH keys
|
||||
|
@ -1996,6 +1998,9 @@ pulls.reopen_failed.base_branch = The pull request cannot be reopened, because t
|
|||
pulls.made_using_agit = AGit
|
||||
pulls.agit_explanation = Created using the AGit workflow. AGit lets contributors propose changes using "git push" without creating a fork or a new branch.
|
||||
|
||||
pulls.editable = Editable
|
||||
pulls.editable_explanation = This pull request allows edits from maintainers. You can contribute directly to it.
|
||||
|
||||
pulls.auto_merge_button_when_succeed = (When checks succeed)
|
||||
pulls.auto_merge_when_succeed = Auto merge when all checks succeed
|
||||
pulls.auto_merge_newly_scheduled = The pull request was scheduled to merge when all checks succeed.
|
||||
|
@ -2888,8 +2893,8 @@ 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.change_orgname_redirect_prompt.with_cooldown.one = The old username will be available to everyone after a cooldown period of %[1]d day, you can still reclaim the old username during the cooldown period.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = The old username will be available to everyone after a cooldown period of %[1]d days, you can still reclaim the old username during the cooldown period.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = The old organization name will be available to everyone after a cooldown period of %[1]d day, you can still reclaim the old name during the cooldown period.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = The old organization name will be available to everyone after a cooldown period of %[1]d days, you can still reclaim the old name during the cooldown period.
|
||||
settings.update_avatar_success = The organization's avatar has been updated.
|
||||
settings.delete = Delete organization
|
||||
settings.delete_account = Delete this organization
|
||||
|
@ -3932,4 +3937,4 @@ filepreview.lines = Lines %[1]d to %[2]d in %[3]s
|
|||
filepreview.truncated = Preview has been truncated
|
||||
|
||||
[translation_meta]
|
||||
test = This is a test string. It is not displayed in Forgejo UI but is used for testing purposes. Feel free to enter "ok" to save time (or a fun fact of your choice) to hit that sweet 100% completion mark :)
|
||||
test = This is a test string. It is not displayed in Forgejo UI but is used for testing purposes. Feel free to enter "ok" to save time (or a fun fact of your choice) to hit that sweet 100% completion mark :)
|
||||
|
|
|
@ -134,6 +134,11 @@ new_repo.title = مخزن جدید
|
|||
new_migrate.title = مهاجرت جدید
|
||||
new_repo.link = مخزن جدید
|
||||
|
||||
filter = فیلتر
|
||||
filter.is_archived = بایگانی شده
|
||||
filter.public = عمومی
|
||||
filter.private = خصوصی
|
||||
|
||||
[aria]
|
||||
|
||||
[heatmap]
|
||||
|
@ -1987,6 +1992,8 @@ error.csv.too_large=نمی توان این فایل را رندر کرد زیر
|
|||
error.csv.unexpected=نمی توان این فایل را رندر کرد زیرا حاوی یک کاراکتر غیرمنتظره در خط %d و ستون %d است.
|
||||
error.csv.invalid_field_count=نمی توان این فایل را رندر کرد زیرا تعداد فیلدهای آن در خط %d اشتباه است.
|
||||
|
||||
milestones.filter_sort.name = نام
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -2540,6 +2547,9 @@ notices.op=عملیات.
|
|||
notices.delete_success=گزارش سیستم حذف شده است.
|
||||
|
||||
|
||||
config_summary = چکیده
|
||||
config_settings = تنظيمات
|
||||
|
||||
[action]
|
||||
create_repo=مخزن ایجاد شده <a href="%s"> %s</a>
|
||||
rename_repo=مخزن تغییر نام داد از <code>%[1]s</code> به <a href="%[2]s">%[3]s</a>
|
||||
|
@ -2669,3 +2679,5 @@ executable_file = فایل اجرایی
|
|||
normal_file = فایل معمولی
|
||||
changed_filemode = %[1] ها ← %[2] ها
|
||||
directory = پوشه
|
||||
|
||||
[search]
|
||||
|
|
|
@ -290,7 +290,7 @@ server_service_title=Palvelimen ja kolmansien osapuolten palveluiden asetukset
|
|||
offline_mode=Ota käyttöön lokaali tila
|
||||
offline_mode.description=Poista kolmannen osapuolen sisällönjakeluverkot ja tarjoa kaikki resurssit paikallisesti.
|
||||
disable_gravatar=Poista Gravatar käytöstä
|
||||
disable_gravatar.description=Poista Gravatar ja kolmannen osapuolen avaratir käytöstä. Oletus-avatar näytetään, ellei käyttäjä ole ladannut omaansa.
|
||||
disable_gravatar.description=Poista Gravatar- tai muiden kolmansien osapuolien avatar-lähteet käytöstä. Oletuskuvia käytetään käyttäjien avatareissa, elleivät he uloslataa omaa avatariaan ilmentymään.
|
||||
federated_avatar_lookup=Käytä federoituja profiilikuvia
|
||||
federated_avatar_lookup.description=Käytä Libravatar-palvelua profiilikuvien hakemiseen.
|
||||
disable_registration=Poista omatoiminen rekisteröityminen käytöstä
|
||||
|
@ -953,7 +953,7 @@ repo_name=Repon nimi
|
|||
repo_name_helper=Hyvä repon nimi on lyhyt, mieleenpainuva ja yksilöllinen.
|
||||
repo_size=Repon koko
|
||||
template=Malli
|
||||
template_select=Valitse malli.
|
||||
template_select=Valitse malli
|
||||
template_helper=Tee reposta mallipohja
|
||||
visibility=Näkyvyys
|
||||
visibility_description=Vain omistaja tai organisaation jäsenet, jos heillä on oikeudet, voivat nähdä sen.
|
||||
|
@ -968,7 +968,7 @@ repo_desc=Kuvaus
|
|||
repo_lang=Kieli
|
||||
repo_gitignore_helper=Valitse .gitignore-mallit
|
||||
issue_labels=Ongelmien tunnisteet
|
||||
issue_labels_helper=Valitse pohja ongelmien nimilapuille.
|
||||
issue_labels_helper=Valitse nimiöjoukko
|
||||
license=Lisenssi
|
||||
license_helper=Valitse lisenssitiedosto
|
||||
readme=README
|
||||
|
@ -1507,12 +1507,12 @@ settings.protected_branch=Haaran suojaus
|
|||
settings.branch_protection=Haaran "<b>%s</b>" suojaussäännöt
|
||||
settings.protect_this_branch=Ota haaran suojaus käyttöön
|
||||
settings.protect_whitelist_deploy_keys=Lisää julkaisuavaimet sallittujen listalle mahdollistaaksesi repohin kirjoituksen.
|
||||
settings.protect_whitelist_users=Lista käyttäjistä joilla työntö oikeus:
|
||||
settings.protect_whitelist_users=Sallitut käyttäjät suhteessa työntämiseen
|
||||
settings.protect_whitelist_search_users=Etsi käyttäjiä…
|
||||
settings.protect_merge_whitelist_committers_desc=Salli vain listaan merkittyjen käyttäjien ja tiimien yhdistää vetopyynnöt tähän haaraan.
|
||||
settings.protect_merge_whitelist_users=Lista käyttäjistä joilla yhdistämis-oikeus:
|
||||
settings.protect_merge_whitelist_users=Sallitut käyttäjät suhteessa yhdistämiseen
|
||||
settings.protect_required_approvals=Vaadittavat hyväksynnät
|
||||
settings.protect_approvals_whitelist_users=Sallittujen tarkastajien lista:
|
||||
settings.protect_approvals_whitelist_users=Sallittujen tarkastajien lista
|
||||
settings.choose_branch=Valitse haara…
|
||||
settings.no_protected_branch=Suojattuja haaroja ei ole.
|
||||
settings.edit_protected_branch=Muokkaa
|
||||
|
@ -1686,7 +1686,7 @@ settings.event_issue_comment = Kommentit
|
|||
diff.download_patch = Lataa patch-tiedosto
|
||||
issues.filter_milestone_none = Ei merkkipaaluja
|
||||
issues.filter_milestone_open = Avoimet merkkipaalut
|
||||
new_repo_helper = Repositorio eli tietovarasto sisältää kaikki projektin tiedostot, mukaan lukien versiohistorian. Onko sinulla repo jo jossain muualla? <a href="%s">Tee repomigraatio.</a>
|
||||
new_repo_helper = Tietovarasto sisältää kaikki projektitiedostot, mukaan lukien tarkistushistoria. Järjestätkö jo sellaisen muualla? <a href="%s">Siirrä tietovarasto</a>.
|
||||
use_template = Käytä tätä mallipohjaa
|
||||
star_guest_user = Kirjaudu sisään lisätäksesi tähden tähän repoon.
|
||||
watch_guest_user = Kirjaudu sisään tarkkaillaksesi tätä repoa.
|
||||
|
|
|
@ -2730,6 +2730,9 @@ summary_card_alt = Pangkalahatang-ideyang card ng repositoryo na %s
|
|||
release.summary_card_alt = Pangkalahatang-ideyang card ng isang release na nakapamagat na "%s" sa repositoryo na %s
|
||||
editor.commit_email = Email ng commit
|
||||
archive.pull.noreview = Naka-archive ang repositoryong ito. Hindi ka makakasuri ng mga hiling sa paghila.
|
||||
commits.view_single_diff = Tignan ang mga pagbabago sa file na ito na ipinakilala sa commit na ito
|
||||
pulls.editable = Nababago
|
||||
pulls.editable_explanation = Pinapayagan ng hiling sa paghila na ito ang mga pagbabago mula sa mga tagapangasiwa. Maaari kang direktang mag-ambag dito.
|
||||
|
||||
[search]
|
||||
commit_kind = Maghanap ng mga commit…
|
||||
|
@ -3400,8 +3403,8 @@ teams.owners_permission_desc = Ang mga owner ay may punong access sa <strong>lah
|
|||
teams.add_nonexistent_repo = Hindi pa umiiral ang repositoryo na sinusubukan mong idagdag. Mangyaring gawin iyan muna.
|
||||
teams.all_repositories = Lahat ng mga repositoryo
|
||||
teams.all_repositories_helper = Ang koponan ay may access sa lahat ng mga repositoryo. Ang pagpili nito ay <strong>idadagdag ang lahat ng mga umiiral</strong> na repositoryo sa koponan.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Magiging available ang lumang pangalan ng organisasyon sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang pangalan sa panahon ng cooldown.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Magiging available ang lumang pangalan ng organisasyon sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang pangalan ng panahon ng cooldown.
|
||||
|
||||
|
||||
[packages]
|
||||
|
@ -3680,6 +3683,7 @@ variables.creation.success = Nadagdag na ang variable na "%s".
|
|||
runs.expire_log_message = Na-purge ang mga log dahil masyado silang luma.
|
||||
runs.no_workflows.help_write_access = Hindi alam kung paano magsimula sa Forgejo Actions? Tignan ang <a target="_blank" rel="noopener noreferrer" href="%s">mabilisang pagsimula sa user documentation</a> para magsimulang magsulat ng unang workflow, at <a target="_blank" rel="noopener noreferrer" href="%s">mag-setup ng Forgejo runner</a> para patakbuhin ang mga job.
|
||||
runs.no_workflows.help_no_write_access = Para matuto tungkol sa Forgejo Actions, tignan ang <a target="_blank" rel="noopener noreferrer" href="%s">dokumentasyon</a>.
|
||||
variables.not_found = Nabigong hanapin ang variable.
|
||||
|
||||
[action]
|
||||
commit_repo = itinulak sa <a href="%[2]s">%[3]s</a> sa <a href="%[1]s">%[4]s</a>
|
||||
|
|
|
@ -2871,6 +2871,7 @@ issues.context.menu = Menu commentaire
|
|||
summary_card_alt = Carte résumé du dépôt %s
|
||||
archive.pull.noreview = Ce dépôt est archivé. Vous ne pouvez pas faire de revue de demandes d'ajout.
|
||||
editor.commit_email = Courriel de commit
|
||||
commits.view_single_diff = Voir les changements dans ce fichier introduit par ce commit
|
||||
|
||||
[graphs]
|
||||
component_loading = Chargement %s...
|
||||
|
@ -3955,6 +3956,7 @@ workflow.dispatch.warn_input_limit = Affichage des %d premiers champs seulement.
|
|||
runs.expire_log_message = Les journaux ont été purgés car ils étaient trop anciens.
|
||||
runs.no_workflows.help_write_access = Vous ne savez pas par où commencer avec Forgejo Actions ? Regardez la section <a target="_blank" rel="noopener noreferrer" href="%s"> démarrage rapide dans la documentation utilisateur</a> pour écrire votre premier workflow, puis <a target="_blank" rel="noopener noreferrer" href="%s">mettre en place un Forgejo runner</a> pour exécuter vos jobs.
|
||||
runs.no_workflows.help_no_write_access = Pour en savoir plus sur Forgejo Actions, consultez <a target="_blank" rel="noopener noreferrer" href="%s">la documentation</a>.
|
||||
variables.not_found = La variable n'a pas été trouvée.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Projet personnel
|
||||
|
|
2996
options/locale/locale_ga-IE.ini
Normal file
2996
options/locale/locale_ga-IE.ini
Normal file
File diff suppressed because it is too large
Load diff
|
@ -8,15 +8,15 @@ sign_in = Iniciar sesión
|
|||
sign_in_with_provider = Iniciar Sesión con %s
|
||||
sign_in_or = ou
|
||||
sign_out = Pechar Sesión
|
||||
sign_up = Rexístrate
|
||||
sign_up = Rexistrarse
|
||||
link_account = Vincular conta
|
||||
register = Rexistro
|
||||
version = Vesión
|
||||
powered_by = Desenvolvido por %s
|
||||
version = Versión
|
||||
powered_by = Impulsado por %s
|
||||
page = Páxina
|
||||
template = Modelo
|
||||
notifications = Notificacións
|
||||
active_stopwatch = Activar Rastrexador de Tempo
|
||||
active_stopwatch = Rastreador de tempo activo
|
||||
create_new = Crear…
|
||||
user_profile_and_more = Perfil e configuración…
|
||||
signed_in_as = Sesión iniciada como
|
||||
|
@ -31,8 +31,8 @@ re_type = Confirme o contrasinal
|
|||
captcha = CAPTCHA
|
||||
twofa = Autenticación de dobre factor
|
||||
passcode = Código de acceso
|
||||
webauthn_insert_key = Insira a súa clave de seguridade
|
||||
webauthn_press_button = Prema o botón da súa clave de seguridade…
|
||||
webauthn_insert_key = Insira a súa chave de seguridade
|
||||
webauthn_press_button = Prema o botón da súa chave de seguridade…
|
||||
webauthn_use_twofa = Use o Código de Dous Factores do seu Teléfono
|
||||
webauthn_error = Non se puido ler a súa clave de seguridade.
|
||||
webauthn_unsupported_browser = O seu navegador non soporta WebAuthn actualmente.
|
||||
|
@ -102,7 +102,7 @@ copy_content = Copiar contido
|
|||
language = Linguaxe
|
||||
copy_hash = Copiar hash
|
||||
twofa_scratch = Código Scratch de Dous Factores
|
||||
webauthn_sign_in = Prema o botón da súa clave de seguridade. Se a súa clave de seguridade non ten ningún botón, insíraa de novo.
|
||||
webauthn_sign_in = Prema o botón da súa chave de seguridade. Se a súa chave de seguridade non ten ningún botón, volva inserila.
|
||||
issues = Incidencias
|
||||
disabled = Desactivado
|
||||
error404 = A páxina á que estás tentando acceder <strong>non existe</strong> ou <strong>non tes autorización</strong> para vela.
|
||||
|
@ -162,6 +162,7 @@ more = Máis
|
|||
number_of_contributions_in_the_last_12_months = %s de contribucións nos últimos 12 meses
|
||||
contributions_few = contribucións
|
||||
contributions_one = contribución
|
||||
contributions_format = {contributions} no {day} de {month} do {year}
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Engadir Título
|
||||
|
@ -174,6 +175,18 @@ buttons.list.unordered.tooltip = Engadir unha lista de marcadores
|
|||
buttons.enable_monospace_font = Activa o tipo de letra monoespazo
|
||||
buttons.disable_monospace_font = Desactivar o tipo de letra monoespazo
|
||||
buttons.ref.tooltip = Referencia un problema ou pull request
|
||||
buttons.indent.tooltip = Aniña os elementos nun nivel
|
||||
buttons.unindent.tooltip = Desaniñar os elementos nun nivel
|
||||
table_modal.placeholder.content = Contido
|
||||
table_modal.label.rows = Filas
|
||||
table_modal.label.columns = Columnas
|
||||
buttons.list.ordered.tooltip = Engade unha lista numerada
|
||||
buttons.list.task.tooltip = Engade unha lista de tarefas
|
||||
buttons.mention.tooltip = Menciona a un usuario ou equipo
|
||||
buttons.switch_to_legacy.tooltip = Utilizar o editor herdado
|
||||
buttons.new_table.tooltip = Engadir táboa
|
||||
table_modal.header = Engadir táboa
|
||||
table_modal.placeholder.header = Cabeceira
|
||||
|
||||
|
||||
[search]
|
||||
|
@ -195,6 +208,13 @@ union_tooltip = Incluír resultados correspondentes a calquera dal palabras clav
|
|||
exact = Exacta
|
||||
exact_tooltip = Incluír só resultados correspondentes ao termo exacto da procura
|
||||
issue_kind = Procurar incidencias...
|
||||
project_kind = Buscar proxectos...
|
||||
branch_kind = Buscar ramas...
|
||||
no_results = Non se atoparon resultados coincidentes.
|
||||
keyword_search_unavailable = A busca por palabra clave non está dispoñible actualmente. Póñase en contacto co administrador do sitio.
|
||||
commit_kind = Buscar achegas...
|
||||
runner_kind = Buscar executores...
|
||||
pull_kind = Buscar pulls...
|
||||
|
||||
[startpage]
|
||||
platform = Multiplataforma
|
||||
|
|
|
@ -135,6 +135,10 @@ webauthn_sign_in = יש ללחוץ על הכפתור שעל מפתח האבטח
|
|||
webauthn_error_duplicated = מפתח האבטחה לא יכול לשמש לבקשה זו. נא לוודא שהמפתח לא רשום.
|
||||
dashboard = מבט על
|
||||
remove_label_str = הסרת "%s"
|
||||
explore = קטלוגים
|
||||
view = עוד מידע
|
||||
artifacts = ארטיפקטים
|
||||
confirm_delete_artifact = למחוק את הארטיפקט "%s"?
|
||||
|
||||
[search]
|
||||
search = חיפוש...
|
||||
|
@ -161,6 +165,7 @@ code_search_by_git_grep = תוצאות החיפוש יוצרו על ידי "git
|
|||
runner_kind = חיפוש מריצים...
|
||||
keyword_search_unavailable = חיפוש מילות מפתח לא זמין. נא לדווח למנהלי המערכת.
|
||||
code_search_unavailable = חיפוש קוד לא זמין. נא לדווח למנהלי המערכת.
|
||||
pull_kind = חיפוש בקשות מיזוג...
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = % תרומות ב־12 החודשים האחרונים
|
||||
|
@ -228,6 +233,7 @@ app_name = שם שרת זה
|
|||
navbar = סרגל הניווט
|
||||
footer.software = על תוכנה זו
|
||||
footer.links = קישורים
|
||||
footer = סיומת עמוד
|
||||
|
||||
[mail]
|
||||
repo.transfer.subject_to_you = %s רוצה להעביר את הקרפיף "%s" אליך
|
||||
|
@ -240,4 +246,7 @@ repo.transfer.subject_to = %s רוצה להעביר את הקרפיף "%s" ל־%
|
|||
RepoName = שם קרפיף
|
||||
repository_force_private = פרטיות כפויה מופעלת: קרפיפים פרטיים לא יכולים להעשות ציבוריים.
|
||||
repo_name_been_taken = כבר יש קרפיף בשם זה.
|
||||
repository_files_already_exist = כבר יש קבצים בקרפיף זה. יש לדבר עם מנהל המערכת כדי לתקן את הבעיה.
|
||||
repository_files_already_exist = כבר יש קבצים בקרפיף זה. יש לדבר עם מנהל המערכת כדי לתקן את הבעיה.
|
||||
|
||||
[projects]
|
||||
deleted.display_name = פרויקט נמחק
|
|
@ -1270,6 +1270,8 @@ topic.done=Kész
|
|||
|
||||
|
||||
|
||||
milestones.filter_sort.name = Név
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -1684,6 +1686,9 @@ config.cache_item_ttl = Gyorsítótárelem TTL értéke
|
|||
config.app_data_path = Alkalmazásadatok elérési útja
|
||||
|
||||
|
||||
config_summary = Összefoglaló
|
||||
config_settings = Beállítások
|
||||
|
||||
[action]
|
||||
create_repo=létrehozott tárolót: <a href="%s"> %s</a>
|
||||
rename_repo=átnevezte a(z) <code>%[1]s</code> tárolót <a href="%[2]s">%[3]s</a>-ra/re
|
||||
|
|
|
@ -84,15 +84,93 @@ concept_code_repository=Repositori
|
|||
|
||||
name=Nama
|
||||
|
||||
re_type = Konfirmasi Kata Sandi
|
||||
webauthn_insert_key = Masukkan kunci keamanan anda
|
||||
webauthn_sign_in = Tekan tombol pada kunci keamanan Anda. Jika kunci keamanan Anda tidak memiliki tombol, masukkan kembali.
|
||||
webauthn_press_button = Silakan tekan tombol pada kunci keamanan Anda…
|
||||
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.
|
||||
webauthn_error_timeout = Waktu habis sebelum kunci Anda dapat dibaca. Mohon muat ulang halaman ini dan coba lagi.
|
||||
new_project = Proyek Baru
|
||||
new_project_column = Kolom Baru
|
||||
ok = Oke
|
||||
retry = Coba lagi
|
||||
rerun = Jalankan ulang
|
||||
rerun_all = Jalankan ulang semua job
|
||||
remove_label_str = `Hapus item "%s"`
|
||||
view = Tampilan
|
||||
test = Pengujian
|
||||
locked = Terkunci
|
||||
copy = Salin
|
||||
copy_url = Salin URL
|
||||
copy_hash = Salin hash
|
||||
copy_content = Salin konten
|
||||
copy_branch = Salin nama branch
|
||||
copy_success = Tersalin!
|
||||
copy_error = Gagal menyalin
|
||||
copy_type_unsupported = Tipe berkas ini tidak dapat disalin
|
||||
error = Gangguan
|
||||
error404 = Halaman yang akan kamu akses <strong>tidak dapat ditemukan</strong> atau <strong>kamu tidak memiliki akses </strong> untuk melihatnya.
|
||||
go_back = Kembali
|
||||
invalid_data = Data invalid: %v
|
||||
never = Tidak Pernah
|
||||
unknown = Tidak diketahui
|
||||
rss_feed = Umpan Berita
|
||||
pin = Sematkan
|
||||
unpin = Lepas sematan
|
||||
artifacts = Artefak
|
||||
archived = Diarsipkan
|
||||
concept_system_global = Global
|
||||
concept_user_individual = Perorangan
|
||||
show_full_screen = Tampilkan layar penuh
|
||||
download_logs = Unduh Logs
|
||||
confirm_delete_selected = Konfirmasi untuk menghapus semua item yang dipilih?
|
||||
value = Nilai
|
||||
filter = Saring
|
||||
filter.is_archived = Diarsipkan
|
||||
filter.not_archived = Tidak Diarsipkan
|
||||
filter.public = Publik
|
||||
filter.private = Pribadi
|
||||
|
||||
[aria]
|
||||
navbar = Bar Navigasi
|
||||
footer = Footer
|
||||
footer.links = Tautan
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = %s Kontribusi pada 12 bulan terakhir
|
||||
less = Lebih sedikit
|
||||
more = Lebih banyak
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Tambahkan heading
|
||||
buttons.bold.tooltip = Tambahkan teks Tebal
|
||||
buttons.italic.tooltip = Tambahkan teks Miring
|
||||
buttons.quote.tooltip = Kutip teks
|
||||
buttons.code.tooltip = Tambah Kode
|
||||
buttons.link.tooltip = Tambahkan tautan
|
||||
buttons.list.unordered.tooltip = Tambah daftar titik
|
||||
buttons.list.ordered.tooltip = Tambah daftar angka
|
||||
buttons.list.task.tooltip = Tambahkan daftar tugas
|
||||
buttons.mention.tooltip = Tandai pengguna atau tim
|
||||
buttons.ref.tooltip = Merujuk pada isu atau permintaan tarik
|
||||
buttons.switch_to_legacy.tooltip = Gunakan editor versi lama
|
||||
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
|
||||
not_found = Target tidak dapat ditemukan.
|
||||
|
||||
[startpage]
|
||||
app_desc=Sebuah layanan hosting Git sendiri yang tanpa kesulitan
|
||||
|
@ -124,6 +202,9 @@ require_sign_in_view=Harus Login Untuk Melihat Halaman
|
|||
admin_password=Kata Sandi
|
||||
admin_email=Alamat Email
|
||||
|
||||
email_title = Pengaturan email
|
||||
smtp_from = Kirim Email Sebagai
|
||||
|
||||
[home]
|
||||
uname_holder=Nama Pengguna atau Alamat Surel
|
||||
password_holder=Kata Sandi
|
||||
|
@ -141,6 +222,8 @@ show_private=Pribadi
|
|||
|
||||
issues.in_your_repos=Dalam repositori anda
|
||||
|
||||
show_archived = Diarsipkan
|
||||
|
||||
[explore]
|
||||
repos=Repositori
|
||||
users=Pengguna
|
||||
|
@ -492,6 +575,8 @@ email_notifications.submit=Pasang Pengaturan Email
|
|||
|
||||
visibility.private=Pribadi
|
||||
|
||||
visibility.public = Publik
|
||||
|
||||
[repo]
|
||||
owner=Pemilik
|
||||
repo_name=Nama Repositori
|
||||
|
@ -955,6 +1040,12 @@ branch.deleted_by=Dihapus oleh %s
|
|||
|
||||
|
||||
|
||||
desc.public = Publik
|
||||
desc.archived = Diarsipkan
|
||||
commitstatus.error = Gangguan
|
||||
projects.new = Proyek Baru
|
||||
milestones.filter_sort.name = Nama
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -1009,6 +1100,8 @@ teams.delete_team_success=Tim sudah di hapus.
|
|||
teams.repositories=Tim repositori
|
||||
teams.search_repo_placeholder=Cari repositori…
|
||||
|
||||
settings.visibility.public = Publik
|
||||
|
||||
[admin]
|
||||
dashboard=Dasbor
|
||||
organizations=Organisasi
|
||||
|
@ -1267,6 +1360,9 @@ notices.op=Op.
|
|||
notices.delete_success=Laporan sistem telah dihapus.
|
||||
|
||||
|
||||
config_settings = Pengaturan
|
||||
users.list_status_filter.menu_text = Saring
|
||||
|
||||
[action]
|
||||
create_repo=repositori dibuat <a href="%s">%s</a>
|
||||
rename_repo=ganti nama gudang penyimpanan dari <code>%[1]s</code> ke <a href="%[2]s">%[3]s</a>
|
||||
|
@ -1342,6 +1438,56 @@ runs.commit=Memperbuat
|
|||
|
||||
|
||||
|
||||
runs.no_matching_online_runner_helper = Tidak ada runner online yang cocok dengan label: %s
|
||||
runs.actor = Aktor
|
||||
runs.status = Status
|
||||
runs.actors_no_select = Semua aktor
|
||||
runs.status_no_select = Semua status
|
||||
runs.no_results = Tidak ada hasil yang cocok.
|
||||
runs.no_workflows = Belum ada alur kerja.
|
||||
runs.no_runs = Alur kerja belum berjalan.
|
||||
runs.empty_commit_message = (pesan commit kosong)
|
||||
workflow.disable = Nonaktifkan Alur Kerja
|
||||
workflow.enable = Aktifkan Alur Kerja
|
||||
workflow.disabled = Alur kerja dinonaktifkan.
|
||||
need_approval_desc = Butuh persetujuan untuk menjalankan alur kerja untuk pull request fork.
|
||||
variables = Variabel
|
||||
variables.creation = Tambah Variabel
|
||||
variables.none = Belum ada variabel.
|
||||
variables.deletion = Hapus variabel
|
||||
variables.deletion.description = Menghapus variabel bersifat permanen dan tidak dapat dibatalkan. Lanjutkan?
|
||||
variables.description = Variabel akan diteruskan ke beberapa tindakan dan tidak dapat dibaca sebaliknya.
|
||||
variables.id_not_exist = Variabel dengan ID %d tidak ada.
|
||||
variables.edit = Edit Variabel
|
||||
variables.deletion.failed = Gagal menghapus variabel.
|
||||
variables.deletion.success = Variabel telah dihapus.
|
||||
variables.creation.failed = Gagal menambahkan variabel.
|
||||
variables.creation.success = Variabel "%s" telah ditambahkan.
|
||||
variables.update.failed = Gagal mengedit variabel.
|
||||
variables.update.success = Variabel telah diedit.
|
||||
|
||||
[projects]
|
||||
type-1.display_name = Proyek Individu
|
||||
type-2.display_name = Proyek Repositori
|
||||
type-3.display_name = Proyek Organisasi
|
||||
|
||||
[git.filemode]
|
||||
changed_filemode = %[1]s → %[2]s
|
||||
directory = Directory
|
||||
normal_file = Normal file
|
||||
executable_file = Executable file
|
||||
symbolic_link = Symbolic link
|
||||
submodule = Submodule
|
||||
|
||||
[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...
|
||||
|
|
|
@ -114,6 +114,10 @@ value=Gildi
|
|||
sign_in_with_provider = Skrá inn með %s
|
||||
enable_javascript = Þessi síða krefst JavaScript.
|
||||
|
||||
filter = Sía
|
||||
filter.is_archived = Safnvistað
|
||||
filter.public = Opinbert
|
||||
|
||||
[aria]
|
||||
|
||||
[heatmap]
|
||||
|
@ -1118,6 +1122,8 @@ topic.done=Í lagi
|
|||
|
||||
|
||||
|
||||
milestones.filter_sort.name = Heiti
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -1287,6 +1293,9 @@ notices.type_2=Verkefni
|
|||
notices.desc=Lýsing
|
||||
|
||||
|
||||
config_summary = Yfirlit
|
||||
config_settings = Stillingar
|
||||
|
||||
[action]
|
||||
create_issue=`opnaði vandamál <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
reopen_issue=`enduropnaði vandamál <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
|
@ -1371,3 +1380,5 @@ runs.commit=Framlag
|
|||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
|
||||
[search]
|
||||
|
|
|
@ -1504,7 +1504,7 @@ issues.close_comment_issue=Commenta e chiudi
|
|||
issues.reopen_issue=Riapri
|
||||
issues.reopen_comment_issue=Commenta e riapri
|
||||
issues.create_comment=Commento
|
||||
issues.closed_at=`chiuso questo probleam <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.closed_at=`ha chiuso questa segnalazione <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.reopened_at=`ha riaperto questa segnalazione <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.commit_ref_at=`ha fatto riferimento a questa segnalazione dal commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_issue_from=`<a href="%[3]s">ha fatto riferimento a questa segnalazione %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
|
|
|
@ -167,6 +167,8 @@ new_org.link = 新しい組織
|
|||
test = テスト
|
||||
error413 = 割り当て量を使い切りしました。
|
||||
|
||||
copy_path = パスをコピー
|
||||
|
||||
[aria]
|
||||
navbar=ナビゲーションバー
|
||||
footer=フッター
|
||||
|
@ -3515,6 +3517,8 @@ config.app_slogan = インスタンスのスローガン
|
|||
config.cache_test = テストキャッシュ
|
||||
|
||||
|
||||
config.cache_test_failed = キャッシュの調査に失敗しました: %v.
|
||||
|
||||
[action]
|
||||
create_repo=がリポジトリ <a href="%s">%s</a> を作成しました
|
||||
rename_repo=がリポジトリ名を <code>%[1]s</code> から <a href="%[2]s">%[3]s</a> へ変更しました
|
||||
|
@ -3758,6 +3762,8 @@ rpm.repository.multiple_groups = このパッケージは複数のグループ
|
|||
owner.settings.cargo.rebuild.no_index = 再構築できません、インデックスが初期化されていません。
|
||||
npm.dependencies.bundle = バンドルされた依存関係
|
||||
|
||||
search_in_external_registry = %s で検索
|
||||
|
||||
[secrets]
|
||||
secrets=シークレット
|
||||
description=シークレットは特定のActionsに渡されます。 それ以外で読み出されることはありません。
|
||||
|
@ -3875,11 +3881,15 @@ workflow.dispatch.invalid_input_type = 入力タイプ「%s」が無効です。
|
|||
workflow.dispatch.warn_input_limit = 最初の %d 個の入力のみを表示します。
|
||||
runs.no_job = ワークフローには少なくとも1つのジョブが含まれている必要があります
|
||||
|
||||
runs.expire_log_message = ログは古すぎるため消去されています。
|
||||
|
||||
[projects]
|
||||
type-1.display_name=個人プロジェクト
|
||||
type-2.display_name=リポジトリ プロジェクト
|
||||
type-3.display_name=組織プロジェクト
|
||||
|
||||
deleted.display_name = 削除されたプロジェクト
|
||||
|
||||
[git.filemode]
|
||||
changed_filemode=%[1]s → %[2]s
|
||||
directory=ディレクトリ
|
||||
|
|
|
@ -376,7 +376,7 @@ allow_password_change=사용자에게 비밀번호 변경을 요청 (권장됨)
|
|||
reset_password_mail_sent_prompt=확인 메일이 <b>%s</b>로 전송되었습니다. 받은 편지함으로 도착한 메일을 %s 안에 확인해서 비밀번호 찾기 절차를 완료하십시오.
|
||||
active_your_account=계정 활성화
|
||||
account_activated=계정이 활성화 되었습니다
|
||||
prohibit_login =
|
||||
prohibit_login =
|
||||
resent_limit_prompt=활성화를 위한 이메일을 이미 전송했습니다. 3분 내로 이메일을 받지 못한 경우 재시도해주세요.
|
||||
has_unconfirmed_mail=안녕하세요 %s, 이메일 주소(<b>%s</b>)가 확인되지 않았습니다. 확인 메일을 받으시지 못하겼거나 새로운 확인 메일이 필요하다면, 아래 버튼을 클릭해 재발송하실 수 있습니다.
|
||||
resend_mail=여기를 눌러 확인 메일 재전송
|
||||
|
@ -1425,6 +1425,8 @@ archive.title_date = 이 저장소는 %s에 보관처리되었습니다. 파일
|
|||
|
||||
|
||||
|
||||
milestones.filter_sort.name = 이름
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -1797,6 +1799,9 @@ emails.filter_sort.name_reverse = 사용자명 (예약됨)
|
|||
config.allow_dots_in_usernames = 사용자들이 마침표를 사용자명에 사용할 수 있도록 허가합니다. 이미 존재하는 계정에는 영향을 주지 않습니다.
|
||||
|
||||
|
||||
config_summary = 요약
|
||||
config_settings = 설정
|
||||
|
||||
[action]
|
||||
create_repo=저장소를 만들었습니다. <a href="%s">%s</a>
|
||||
rename_repo=저장소 이름을 <code>%[1]s에서</code>에서 <a href="%[2]s"> %[3]s</a>으로 변경함
|
||||
|
|
|
@ -38,7 +38,7 @@ twofa_scratch=Divpakāpju vienreiz izmantojamais kods
|
|||
passcode=Kods
|
||||
|
||||
webauthn_insert_key=Jāievieto sava drošības atslēga
|
||||
webauthn_sign_in=Jānospiež poga uz drošības. Ja drošības atslēgai nav pogas, tā ir atkārtoti jāievieto.
|
||||
webauthn_sign_in=Jānospiež poga uz drošības atslēgas. Ja tai nav pogas, drošības atslēga ir atkārtoti jāievieto.
|
||||
webauthn_press_button=Lūgums nospiest pogu uz savas drošības atslēgas…
|
||||
webauthn_use_twofa=Izmantot divpakāpju kodu no sava tālruņa
|
||||
webauthn_error=Nevar nolasīt drošības atslēgu.
|
||||
|
@ -2870,6 +2870,9 @@ summary_card_alt = Glabātavas %s apkopojuma kartīte
|
|||
release.summary_card_alt = Laidiena "%s" apkopojuma kartīte glabātavā %s
|
||||
archive.pull.noreview = Šī glabātava ir arhivēta. Nevar izskatīt izmaiņu pieprasījumus.
|
||||
editor.commit_email = Iesūtījuma e-pasta adrese
|
||||
commits.view_single_diff = Apskatīt šajā datnē veiktās izmaiņas šajā iesūtījumā
|
||||
pulls.editable = Labojams
|
||||
pulls.editable_explanation = Šis izmaiņu pieprasījums pieļauj labojumus no uzturētājiem. Tu vari tieši līdzdarboties tajā.
|
||||
|
||||
[graphs]
|
||||
component_loading=Ielādē %s...
|
||||
|
@ -3005,8 +3008,8 @@ teams.invite.by=Uzaicināja %s
|
|||
teams.invite.description=Lūgums nospiest zemāk esošo pogu, lai pievienotos komandai.
|
||||
open_dashboard = Atvērt pārskata paneli
|
||||
follow_blocked_user = Tu nevari sekot šai apvienībai, jo tā ir liegusi Tevi.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d diena. Šajā laikā ir iespējams to atkal sākt izmantot.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d dienas. Šajā laikā ir iespējams to atkal sākt izmantot.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Vecais apvienības nosaukums būs pieejams visiem pēc noilguma, kas ir %[1]d diena. Šajā laikā ir iespējams to atkal sākt izmantot.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Vecais apvienības nosaukums būs pieejams visiem pēc noilguma, kas ir %[1]d dienas. Šajā laikā ir iespējams to atkal sākt izmantot.
|
||||
|
||||
[admin]
|
||||
dashboard=Pārskata panelis
|
||||
|
@ -3952,6 +3955,7 @@ runs.no_job = Darbplūsmā ir jābūt vismaz vienam darbam
|
|||
runs.no_workflows.help_write_access = Nav skaidrs, kā sākt izmantot Forgejo Actions? Jāieskatās <a target="_blank" rel="noopener noreferrer" href="%s">ātrajā ievadā lietotāja dokumentācijā</a>, lai uzrakstītu savu pirmo darbplūsmu, tad <a target="_blank" rel="noopener noreferrer" href="%s">jāiestata Forgejo izpildītājs</a>, lai izpildītu savus darbus.
|
||||
workflow.dispatch.warn_input_limit = Attēlo tikai pirmos %d ievades mainīgos.
|
||||
workflow.dispatch.trigger_found = Šai darbplūsmai ir <c>workflow_dispatch</c> notikuma izraisītājs.
|
||||
variables.not_found = Neizdevās atrast mainīgo.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Atsevišķs projekts
|
||||
|
|
|
@ -357,8 +357,8 @@ account_security_caution.text_1 = Wenn du dat weerst, kannst du deese E-Mail sek
|
|||
account_security_caution.text_2 = Wenn du dat nich weerst, hett well in dien Konto inbroken. Bidde kuntakteer de Sied-Chefs.
|
||||
register_success = Registreren kumpleet
|
||||
issue_assigned.pull = @%[1]s hett di to Haalvörslag %[2]s in Repositorium %[3]s towiesen.
|
||||
issue.action.reopen = <b>@%[1]s</b> hett #%[2]s weer opmaakt.
|
||||
issue.action.merge = <b>@%[1]s</b> hett #%[2]s in %[3]s tosamenföhrt.
|
||||
issue.action.reopen = <b>@%[1]s</b> hett #%[2]d weer opmaakt.
|
||||
issue.action.merge = <b>@%[1]s</b> hett #%[2]d in %[3]s tosamenföhrt.
|
||||
issue.action.reject = <b>@%[1]s</b> hett um Änners för deesen Haalvörslag beden.
|
||||
issue.action.ready_for_review = <b>@%[1]s</b> hett deesen Haalvörslag as klaar tum Nakieken markeert.
|
||||
issue.action.new = <b>@%[1]s</b> hett #%[2]d opmaakt.
|
||||
|
@ -375,8 +375,8 @@ activate_email.text = Bidde klick up deesen Verwies, um diene E-Mail-Adress binn
|
|||
reset_password.text = Wenn du dat weerst, klick bidde up deesen Verwies, um dien Konto binnen <b>%s</b> torüggtohalen:
|
||||
password_change.subject = Dien Passwoord is ännert worden
|
||||
issue_assigned.issue = @%[1]s hett di to Gefall %[2]s in Repositorium %[3]s towiesen.
|
||||
issue.action.push_1 = <b>@%[1]s</b> hett %[3]Kommitteren to %[2]s schuven
|
||||
issue.action.push_n = <b>@%[1]s</b> hett %[3]Kommitterens to %[2]s schuven
|
||||
issue.action.push_1 = <b>@%[1]s</b> hett %[3]d Kommitteren to %[2]s schuven
|
||||
issue.action.push_n = <b>@%[1]s</b> hett %[3]d Kommitterens to %[2]s schuven
|
||||
activate_account.text_1 = Moin <b>%[1]s</b>, wees bedankt, dat du di up %[2]s registreert hest!
|
||||
issue.action.review_dismissed = <b>@%[1]s</b> hett dat leste Nakieken vun %[2]s för deesen Haalvörslag ofseggt.
|
||||
issue.in_tree_path = In %s:
|
||||
|
@ -404,7 +404,7 @@ issue.x_mentioned_you = <b>@%s</b> hett di nöömt:
|
|||
issue.action.approve = <b>@%[1]s</b> hett deesem Haalvörslag tostimmt.
|
||||
repo.transfer.subject_to_you = %s will Repositorium »%s« to di överdragen
|
||||
team_invite.text_3 = Wahrschau: Deese Inladen weer för %[1]s dacht. Wenn du deese Inladen nich verwacht hest, kannst du deese E-Mail minnachten.
|
||||
issue.action.close = <b>@%[1]s</b> hett #%[2]s dichtmaakt.
|
||||
issue.action.close = <b>@%[1]s</b> hett #%[2]d dichtmaakt.
|
||||
repo.transfer.body = Um dat antonehmen of oftolehnen, besöök %s, of ignoreer dat eenfach.
|
||||
release.download.zip = Quelltext (ZIP)
|
||||
team_invite.subject = %[1]s hett di inladen, in de Vereenigung %[2]s intotreden
|
||||
|
@ -1941,7 +1941,7 @@ milestones.filter_sort.earliest_due_data = Nahst Anstahns-Datum
|
|||
milestones.filter_sort.least_issues = Minnst Gefallens
|
||||
wiki.wiki_page_revisions = Sied-Versioonen
|
||||
activity.period.yearly = 1 Jahr
|
||||
activity.title.issues_1 = %s Gefall
|
||||
activity.title.issues_1 = %d Gefall
|
||||
activity.git_stats_files_changed_1 = ännert worden
|
||||
activity.git_stats_deletion_n = %d lösket Riegen geven
|
||||
contributors.contribution_type.deletions = Lösket Riegen
|
||||
|
@ -1977,7 +1977,7 @@ activity.merged_prs_count_n = Tosamenföhrt Haalvörslagen
|
|||
activity.title.user_1 = %d Bruker
|
||||
activity.title.prs_1 = %d Haalvörslag
|
||||
activity.active_issues_count_n = <strong>%d</strong> aktiiv Gefallens
|
||||
activity.title.issues_n = %s Gefallens
|
||||
activity.title.issues_n = %d Gefallens
|
||||
activity.title.unresolved_conv_n = %d nich lööst Snacks
|
||||
activity.title.releases_1 = %d Publizeren
|
||||
activity.git_stats_file_1 = is %d Datei
|
||||
|
@ -2572,6 +2572,8 @@ release.summary_card_alt = Tosamenfatens-Kaart vun eenem Publizeren mit de Naam
|
|||
editor.commit_email = Kommitterens-E-Mail
|
||||
archive.pull.noreview = Deeses Repositorium is archiveert. Du kannst keene Haalvörslagens nakieken.
|
||||
commits.view_single_diff = Ännerns an deeser Datei in deesem Kommitteren wiesen
|
||||
pulls.editable = Bewarkbaar
|
||||
pulls.editable_explanation = Deeser Haalvörslag verlöövt Bewarkens vun Liddmaten. Du kannst stracks daarto bidragen.
|
||||
|
||||
[repo.permissions]
|
||||
code.read = <b>Lesen:</b> De Quelltext vun deesem Repositorium ankieken un klonen.
|
||||
|
@ -2715,8 +2717,8 @@ teams.read_permission_desc = Deese Klottje gifft <strong>Lesens</strong>-Togriep
|
|||
teams.repos.none = Deese Klottje kann up keene Repositoriums togriepen.
|
||||
teams.specific_repositories_helper = Liddmaten hebben blots Togriep up Repositoriums, wat besünners to de Klottje hentoföögt worden sünd. Wenn du dat utköörst, worden Repositoriums, wat du al mit <i>All Repositoriums</i> hentoföögt hest, <strong>nich automatisk wegdaan</strong>.
|
||||
teams.all_repositories = All Repositoriums
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = De olle Brukernaam word na eener Ofköhl-Düür vun %[1]d Dag för all Lüü verföögbaar wesen. In de Ofköhl-Düür kannst du de ollen Naam noch torügghalen.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = De olle Brukernaam word na eener Ofköhl-Düür vun %[1]d Dagen för all Lüü verföögbaar wesen. In de Ofköhl-Düür kannst du de ollen Naam noch torügghalen.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = De olle Vereenigungs-Naam word na eener Ofköhl-Düür vun %[1]d Dag för all Lüü verföögbaar wesen. In de Ofköhl-Düür kannst du de ollen Naam noch torügghalen.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = De olle Vereenigungs-Naam word na eener Ofköhl-Düür vun %[1]d Dagen för all Lüü verföögbaar wesen. In de Ofköhl-Düür kannst du de ollen Naam noch torügghalen.
|
||||
|
||||
[admin]
|
||||
dashboard = Kontor
|
||||
|
@ -3748,6 +3750,7 @@ runs.no_workflows.quick_start = Weetst du nich, wo man mit Forgejo-Aktioonen beg
|
|||
runs.no_workflows.documentation = För mehr Informatioonen över Forgejo-Aktioonen, kiek <a target="_blank" rel="noopener noreferrer" href="%s">de Dokumenteren</a> an.
|
||||
runs.no_workflows.help_write_access = Weetst du nich, wo man mit Forgejo-Aktioonen begünnen sall? Kiek de <a target="_blank" rel="noopener noreferrer" href="%s">Fixanwies in de Bruker-Dokumenteren</a> an, um diene eerste Warkwies to schrieven, un <a target="_blank" rel="noopener noreferrer" href="%s">richt dann dienen eersten Forgejo-Loper in</a>, um diene Upgavens uttoföhren.
|
||||
runs.no_workflows.help_no_write_access = Um mehr över Forgejo-Aktioonen to lehren, kiek <a target="_blank" rel="noopener noreferrer" href="%s">de Dokumenteren</a> an.
|
||||
variables.not_found = Kunn de Variaabel nich finnen.
|
||||
|
||||
[projects]
|
||||
deleted.display_name = Lösket Projekt
|
||||
|
|
|
@ -2869,6 +2869,9 @@ issues.reaction.alt_remove = Verwijder %[1]s reactie van bericht.
|
|||
issues.reaction.alt_many = %[1]s en %[2]d meer gereageerd %[3]s.
|
||||
editor.commit_email = Commit e-mail
|
||||
archive.pull.noreview = Deze repository is gearchiveerd. U kunt geen pull requests beoordelen.
|
||||
commits.view_single_diff = Bekijk de veranderingen aan dit bestand die in deze commit zijn geïntroduceerd
|
||||
pulls.editable_explanation = Deze pull request staat bewerkingen toe van beheerders. Je kunt er direct aan bijdragen.
|
||||
pulls.editable = Bewerkbaar
|
||||
|
||||
|
||||
|
||||
|
@ -3007,8 +3010,8 @@ settings.visibility.limited = Beperkt (alleen zichtbaar voor ingelogde gebruiker
|
|||
teams.add_nonexistent_repo = De repository die u probeert toe te voegen bestaat niet, maak deze eerst aan alstublieft.
|
||||
teams.all_repositories_write_permission_desc = Dit team verleent <strong>Schrijf</strong> permissies tot <strong>alle repositories</strong>: leden kunnen lezen en pushen naar repositories.
|
||||
open_dashboard = Open dashboard
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dag. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dagen. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = De oude organisatienaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dag. U kunt de oude naam nog steeds opeisen tijdens de afkoelperiode.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = De oude organisatienaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dagen. U kunt de oude naam nog steeds opeisen tijdens de afkoelperiode.
|
||||
|
||||
[admin]
|
||||
dashboard=Overzicht
|
||||
|
@ -3950,6 +3953,7 @@ workflow.dispatch.input_required = Waarde vereist voor invoer “%s”.
|
|||
runs.expire_log_message = Logs zijn verwijderd omdat ze te oud waren.
|
||||
runs.no_workflows.help_no_write_access = Om meer te weten te komen over Forgejo Acties, zie <a target="_blank" rel="noopener noreferrer" href="%s">de documentatie</a>.
|
||||
runs.no_workflows.help_write_access = Weet je niet hoe je moet beginnen met Forgejo Actions? Bekijk de <a target="_blank" rel="noopener noreferrer" href="%s">snelstart in de gebruikersdocumentatie</a> om je eerste workflow te schrijven en <a target="_blank" rel="noopener noreferrer" href="%s">stel vervolgens een Forgejo runner in</a> om je jobs uit te voeren.
|
||||
variables.not_found = De variabele kon niet gevonden worden.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@ password=Hasło
|
|||
access_token=Token dostępu
|
||||
re_type=Potwierdź hasło
|
||||
captcha=CAPTCHA
|
||||
twofa=Autoryzacja dwuskładnikowa
|
||||
twofa_scratch=Kod jednorazowy weryfikacji dwuetapowej
|
||||
twofa=Uwierzytelnianie dwuskładnikowe
|
||||
twofa_scratch=Kod jednorazowy uwierzytelniania dwuskładnikowego
|
||||
passcode=Kod dostępu
|
||||
|
||||
webauthn_insert_key=Podłącz swój klucz bezpieczeństwa
|
||||
|
@ -171,17 +171,17 @@ copy_path = Skopiuj ścieżkę
|
|||
[aria]
|
||||
navbar = Pasek nawigacji
|
||||
footer = Stopka
|
||||
footer.software = O oprogramowaniu
|
||||
footer.software = O tym oprogramowaniu
|
||||
footer.links = Linki
|
||||
|
||||
[heatmap]
|
||||
contributions_format = {contributions} w dniu {month} {day}, {year}
|
||||
contributions_format = {contributions} w dniu {day} {month} {year}
|
||||
less = Mniej
|
||||
more = Więcej
|
||||
number_of_contributions_in_the_last_12_months = %s kontrybucji w ciągu ostatnich 12 miesięcy
|
||||
contributions_zero = Brak kontrybucji
|
||||
contributions_one = Wkład
|
||||
contributions_few = Wkłady
|
||||
contributions_one = kontrybucja
|
||||
contributions_few = kontrybucji
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Dodaj nagłówek
|
||||
|
@ -196,8 +196,8 @@ buttons.list.task.tooltip = Dodaj listę zadań
|
|||
buttons.ref.tooltip = Dodaj odniesienie do zgłoszenia lub pull requestu
|
||||
buttons.mention.tooltip = Dodaj wzmiankę o użytkowniku lub zespole
|
||||
buttons.switch_to_legacy.tooltip = Zamiast tego użyj starego edytora
|
||||
buttons.disable_monospace_font = Wyłącz czcionkę monospace
|
||||
buttons.enable_monospace_font = Włącz czcionkę monospace
|
||||
buttons.disable_monospace_font = Wyłącz czcionkę o stałej szerokości
|
||||
buttons.enable_monospace_font = Włącz czcionkę o stałej szerokości
|
||||
buttons.indent.tooltip = Zagnieźdź elementy o jeden poziom
|
||||
buttons.new_table.tooltip = Dodaj tabelę
|
||||
table_modal.header = Dodaj tabelę
|
||||
|
@ -256,7 +256,7 @@ 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 zarezerwowany
|
||||
err_admin_name_is_reserved=Nazwa użytkownika administratora jest nieprawidłowa, nazwa użytkownika jest zarezerwowana
|
||||
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
|
||||
|
||||
|
@ -329,12 +329,12 @@ default_keep_email_private.description=Domyślnie włącz ukrywanie adresu e-mai
|
|||
default_allow_create_organization=Domyślne zezwolenie na tworzenie organizacji
|
||||
default_allow_create_organization.description=Domyślnie zezwalaj nowym użytkownikom na tworzenie organizacji. Gdy ta opcja jest wyłączona, administrator będzie musiał przyznać uprawnienia do tworzenia organizacji nowym użytkownikom.
|
||||
default_enable_timetracking=Domyślnie włącz śledzenie czasu
|
||||
default_enable_timetracking.description=Domyślne zezwól na korzystanie z funkcji śledzenia czasu dla nowych repozytoriów.
|
||||
no_reply_address=Ukryta domena e-mail
|
||||
default_enable_timetracking.description=Domyślnie zezwól na korzystanie z funkcji śledzenia czasu dla nowych repozytoriów.
|
||||
no_reply_address=Domena ukrytych e-maili
|
||||
no_reply_address_helper=Nazwa domeny dla użytkowników z ukrytym adresem e-mail. Przykładowo, użytkownik "jan" będzie zalogowany na Git'cie jako "jan@noreply.example.org", jeśli domena ukrytego adresu e-mail jest ustawiona na "noreply.example.org".
|
||||
password_algorithm=Algorytm hashowania haseł
|
||||
invalid_db_table = Tabela bazy danych "%s" jest nieprawidłowa: %v
|
||||
allow_dots_in_usernames = Zezwolenie użytkownikom na używanie kropek w nazwach użytkowników. Nie ma to wpływu na istniejące konta.
|
||||
allow_dots_in_usernames = Zezwól użytkownikom na używanie kropek w nazwach użytkowników. Nie ma to wpływu na istniejące konta.
|
||||
invalid_password_algorithm = Nieprawidłowy algorytm hashowania haseł
|
||||
smtp_from_invalid = Adres "Wyślij e-mail jako" jest nieprawidłowy
|
||||
env_config_keys_prompt = Następujące zmienne środowiskowe zostaną również zastosowane do pliku konfiguracyjnego:
|
||||
|
@ -350,7 +350,7 @@ app_slogan = Slogan instancji
|
|||
app_slogan_helper = Wprowadź tutaj slogan swojej instancji. Pozostaw puste, aby wyłączyć.
|
||||
|
||||
[home]
|
||||
uname_holder=Nazwa użytkownika lub adres email
|
||||
uname_holder=Nazwa użytkownika lub adres e-mail
|
||||
password_holder=Hasło
|
||||
switch_dashboard_context=Przełącz kontekst pulpitu
|
||||
my_repos=Repozytoria
|
||||
|
@ -407,10 +407,10 @@ remember_me=Zapamiętaj to urządzenie
|
|||
forgot_password_title=Zapomniałem hasła
|
||||
forgot_password=Zapomniałeś hasła?
|
||||
sign_up_now=Potrzebujesz konta? Zarejestruj się teraz.
|
||||
confirmation_mail_sent_prompt=Nowa wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>. Aby zakończyć proces rejestracji, sprawdź swoją skrzynkę odbiorczą i kliknij podany link w ciągu najbliższych %s. Jeśli wiadomość email jest nieważna, możesz się zalogować i poprosić o wysłanie kolejnej wiadomości email z potwierdzeniem na inny adres.
|
||||
confirmation_mail_sent_prompt=Nowa wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>. Aby zakończyć proces rejestracji, sprawdź swoją skrzynkę odbiorczą i kliknij podany link w ciągu najbliższych %s. Jeśli wiadomość e-mail jest nieważna, możesz się zalogować i poprosić o wysłanie kolejnej wiadomości e-mail z potwierdzeniem na inny adres.
|
||||
must_change_password=Zaktualizuj swoje hasło
|
||||
allow_password_change=Użytkownik musi zmienić hasło (zalecane)
|
||||
reset_password_mail_sent_prompt=Wiadomość email z potwierdzeniem została wysłana do <b>%s</b>. Aby zakończyć proces odzyskiwania konta, sprawdź swoją skrzynkę odbiorczą i kliknij podany link w ciągu najbliższych %s.
|
||||
reset_password_mail_sent_prompt=Wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>. Aby zakończyć proces odzyskiwania konta, sprawdź swoją skrzynkę odbiorczą i kliknij podany link w ciągu najbliższych %s.
|
||||
active_your_account=Aktywuj swoje konto
|
||||
account_activated=Konto zostało aktywowane
|
||||
prohibit_login=Konto jest zawieszone
|
||||
|
@ -418,7 +418,7 @@ resent_limit_prompt=Zażądano już wiadomości aktywacyjnej. Zaczekaj 3 minuty
|
|||
has_unconfirmed_mail=Witaj, %s, masz niepotwierdzony adres e-mail (<b>%s</b>). 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
|
||||
email_not_associate=Adres e-mail nie jest powiązany z żadnym kontem.
|
||||
send_reset_mail=Wyślij email odzyskiwania
|
||||
send_reset_mail=Wyślij e-mail odzyskiwania
|
||||
reset_password=Odzyskiwanie konta
|
||||
invalid_code=Twój kod potwierdzający jest nieprawidłowy lub wygasł.
|
||||
reset_password_helper=Odzyskaj konto
|
||||
|
@ -466,7 +466,7 @@ password_pwned = Wybrane hasło znajduje się na <a target="_blank" rel="noopene
|
|||
last_admin = Nie można usunąć ostatniego administratora. Musi istnieć co najmniej jeden administrator.
|
||||
tab_signin = Zaloguj
|
||||
oauth.signin.error = Wystąpił błąd podczas przetwarzania żądania autoryzacji. Jeśli ten błąd nadal występuje, skontaktuj się z administratorem witryny.
|
||||
change_unconfirmed_email_error = Nie udało się zmienić adresu email: %v
|
||||
change_unconfirmed_email_error = Nie udało się zmienić adresu e-mail: %v
|
||||
invalid_code_forgot_password = Twój kod potwierdzający jest niepoprawny lub wygasł. Naciśnij <a href="%s">tutaj</a>, aby rozpocząć nową sesję.
|
||||
invalid_password = Twoje hasło nie zgadza się z hasłem, które zostało użyte do stworzenia konta.
|
||||
reset_password_wrong_user = Jesteś zalogowany(-a) jako %s, ale link odzyskujący jest dla %s
|
||||
|
@ -545,7 +545,7 @@ issue.action.reject = <b>@%[1]s</b> poprosił o zmiany w tym pull requeście.
|
|||
issue.action.review_dismissed = <b>@%[1]s</b> odrzucił ostatnią analizę od %[2]s dla tego pull requesta.
|
||||
team_invite.subject = %[1]s zaprosił cię do dołączenia do organizacji %[2]s
|
||||
primary_mail_change.subject = Twój główny mail został zmieniony
|
||||
primary_mail_change.text_1 = Główny mail twojego konta został właśnie zmieniony na %[1]s. To oznacza ze ten adres email nie będzie już otrzymywał powiadomień dla twojego konta.
|
||||
primary_mail_change.text_1 = Główny mail twojego konta został właśnie zmieniony na %[1]s. To oznacza ze ten adres e-mail nie będzie już otrzymywał powiadomień dla twojego konta.
|
||||
totp_disabled.subject = TOTP został wyłączony
|
||||
password_change.subject = Twoje hasło zostało zmienione
|
||||
password_change.text_1 = Hasło do twojego konta zostało właśnie zmienione.
|
||||
|
@ -555,7 +555,7 @@ account_security_caution.text_2 = Jeśli to nie byłeś(-aś) Ty, Twoje konto pa
|
|||
account_security_caution.text_1 = Jeśli to byłeś(-aś) ty, możesz bezpiecznie zignorować tę wiadomość.
|
||||
totp_enrolled.subject = Aktywowałeś(-aś) TOTP jako metodę 2FA
|
||||
totp_enrolled.text_1.no_webauthn = Właśnie włączyłeś(-aś) TOTP dla swojego konta. Oznacza to, że dla wszystkich przyszłych logowań do konta musisz używać TOTP jako metody 2FA.
|
||||
team_invite.text_3 = Uwaga: To zaproszenie było przeznaczone dla %[1]s. Jeśli nie spodziewałeś(-aś) się tego zaproszenia, możesz zignorować ten email.
|
||||
team_invite.text_3 = Uwaga: To zaproszenie było przeznaczone dla %[1]s. Jeśli nie spodziewałeś(-aś) się tego zaproszenia, możesz zignorować ten e-mail.
|
||||
totp_disabled.text_1 = Jednorazowe hasło czasowe (TOTP) zostało właśnie wyłączone na twoim koncie.
|
||||
totp_disabled.no_2fa = Nie ma już skonfigurowanych innych metod 2FA, co oznacza, że nie jest już konieczne logowanie się do konta za pomocą 2FA.
|
||||
removed_security_key.subject = Klucz bezpieczeństwa został usunięty
|
||||
|
@ -674,7 +674,8 @@ unsupported_login_type = Ta forma logowania nie wspiera możliwości usunięcia
|
|||
include_error = ` musi zawierać podciąg znaków "%s".`
|
||||
still_own_packages = Twoje konto jest właścicielem jednego lub więcej pakietów, musisz je najpierw usunąć.
|
||||
username_claiming_cooldown = Nazwa użytkownika nie może być uzyskana, ponieważ okres ochrony jeszcze nie minął. Może zostać uzyskana dopiero w %[1]s.
|
||||
email_domain_is_not_allowed = Domena adresu email użytkownika <b>%s</b> konfliktuje z EMAIL_DOMAIN_ALLOWLIST lub EMAIL_DOMAIN_BLOCKLIST. Upewnij się, że ustawiony adres email jest poprawny.
|
||||
email_domain_is_not_allowed = Domena adresu e-mail użytkownika <b>%s</b> konfliktuje z EMAIL_DOMAIN_ALLOWLIST lub EMAIL_DOMAIN_BLOCKLIST. Upewnij się, że ustawiony adres e-mail jest poprawny.
|
||||
invalid_ssh_principal = Nieprawidłowy podmiot: %s
|
||||
|
||||
|
||||
[user]
|
||||
|
@ -781,10 +782,10 @@ primary=Podstawowy
|
|||
activated=Aktywowany
|
||||
requires_activation=Wymaga aktywacji
|
||||
primary_email=Ustaw jako podstawowy
|
||||
activate_email=Wyślij email aktywacyjny
|
||||
activate_email=Wyślij e-mail aktywacyjny
|
||||
activations_pending=Oczekujące aktywacje
|
||||
delete_email=Usuń
|
||||
email_deletion=Usuń adres email
|
||||
email_deletion=Usuń adres e-mail
|
||||
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.
|
||||
|
@ -970,12 +971,12 @@ comment_type_group_pull_request_push = Dodane commity
|
|||
keep_activity_private = Ukryj aktywność ze strony profilu
|
||||
oauth2_application_locked = Forgejo rejestruje zawczasu kilka aplikacji OAuth2 podczas rozruchu jeżeli włączono taką opcję w konfiguracji. By zapobiec nieoczekiwanym zachowaniom, nie mogą one zostać ani edytowane, ani usunięte. Proszę odnieś się do dokumentacji OAuth2 po więcej informacji.
|
||||
oauth2_client_secret_hint = Sekret nie będzie pokazany ponownie po opuszczeniu lub odświeżeniu tej strony. Proszę upewnij się, że został zapisany.
|
||||
email_desc = Twój główny adres email będzie użyty dla powiadomień, odzyskiwania hasła i, chyba że jest ukryty, operacji Git w przeglądarce.
|
||||
email_desc = Twój główny adres e-mail będzie użyty dla powiadomień, odzyskiwania hasła i, chyba że jest ukryty, operacji Git w przeglądarce.
|
||||
key_content_ssh_placeholder = Rozpoczyna się z "ssh-ed25519", "ssh-rsa", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "sk-ecdsa-sha2-nistp256@openssh.com", lub "sk-ssh-ed25519@openssh.com"
|
||||
repo_and_org_access = Dostęp do Repozytoriów i Organizacji
|
||||
revoke_oauth2_grant_success = Dostęp cofnięty pomyślnie.
|
||||
update_language = Zmień język
|
||||
keep_email_private_popup = Twój adres email nie będzie pokazywany na twoim profilu i nie będzie używany jako domyślny dla commitów utworzonych przez interfejs przeglądarki, takich jak wgrywanie plików, edycje, commity scalające. Zamiast tego, specjalny adres %s może zostać użyty do powiązania commitów z twoim kontem. Ta opcja nie wpływa na commity już istniejące.
|
||||
keep_email_private_popup = Twój adres e-mail nie będzie pokazywany na twoim profilu i nie będzie używany jako domyślny dla commitów utworzonych przez interfejs przeglądarki, takich jak wgrywanie plików, edycje, commity scalające. Zamiast tego, specjalny adres %s może zostać użyty do powiązania commitów z twoim kontem. Ta opcja nie wpływa na commity już istniejące.
|
||||
repos_none = Nie posiadasz żadnych repozytoriów.
|
||||
verify_gpg_key_success = Klucz GPG "%s" został zweryfikowany.
|
||||
email_notifications.andyourown = Dodaj swoje własne powiadomienia
|
||||
|
@ -988,7 +989,7 @@ additional_repo_units_hint = Proponuj włączenie dodatkowych jednostek repozyto
|
|||
webauthn_desc = Klucze bezpieczeństwa to urządzenia zawierające klucze kryptograficzne. Mogą zostać użyte do uwierzytelniania dwuskładnikowego. Klucze bezpieczeństwa muszą wspierać standard <a rel="noreferrer" target="_blank" href="%s">WebAuthn Authenticator</a>.
|
||||
uploaded_avatar_is_too_big = Rozmiar wgranego pliku (%d KiB) przekraczana rozmiar maksymalny (%d KiB).
|
||||
retype_new_password = Potwierdź nowe hasło
|
||||
can_not_add_email_activations_pending = Aktywacja w toku, spróbuj ponownie w ciągu kolejnych kilku minut jeżeli chcesz dodać nowy email.
|
||||
can_not_add_email_activations_pending = Aktywacja w toku, spróbuj ponownie w ciągu kolejnych kilku minut jeżeli chcesz dodać nowy e-mail.
|
||||
location_placeholder = Podziel się swoim położeniem z innymi
|
||||
select_permissions = Wybierz uprawnienia
|
||||
permissions_access_all = Wszystkie (publiczne, prywatne i ograniczone)
|
||||
|
@ -1030,7 +1031,7 @@ pronouns = Zaimki
|
|||
pronouns_custom = Własne
|
||||
saved_successfully = Twoje ustawienia zostały zapisane pomyślnie.
|
||||
keep_activity_private.description = Twoja <a href="%s">aktywność publiczna</a> będzie widoczna tylko dla ciebie i administratorów tej instancji.
|
||||
add_email_confirmation_sent = Email z potwierdzeniem został wysłany do "%s". By potwierdzić swój adres email, proszę sprawdź swoją skrzynkę odbiorczą i odwiedź dostarczony link w ciągu %s.
|
||||
add_email_confirmation_sent = E-mail z potwierdzeniem został wysłany do "%s". By potwierdzić swój adres e-mail, proszę sprawdź swoją skrzynkę odbiorczą i odwiedź dostarczony link w ciągu %s.
|
||||
verify_ssh_key_success = Klucz SSH "%s" został zweryfikowany.
|
||||
twofa_recovery_tip = Jeżeli zgubisz swoje urządzenie, będziesz mógł użyć jednorazowego klucza odzyskiwania by odzyskać dostęp do swojego konta.
|
||||
webauthn_key_loss_warning = Jeżeli zgubisz swoje klucze bezpieczeństwa, utracisz dostęp do swojego konta.
|
||||
|
@ -1046,6 +1047,11 @@ change_username_redirect_prompt.with_cooldown.one = Stara nazwa użytkownika bę
|
|||
change_username_redirect_prompt.with_cooldown.few = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochronnym wynoszącym %[1]d dni, nadal możesz uzyskać z powrotem starą nazwę użytkownika podczas okresu ochronnego.
|
||||
language.description = Ten język zostanie zapisany na twoim koncie i będzie używany jako domyślny po zalogowaniu.
|
||||
hidden_comment_types_description = Rodzaje komentarzy zaznaczone tutaj nie będą wyświetlały się na stronach zgłoszeń. Zaznaczenie "Etykieta" na przykład usunie wszystkie komentarze "<użytkownik> dodał/usunął <etykieta>".
|
||||
principal_desc = Te podmioty certyfikatu SSH będą powiązane z twoim kontem i pozwolą na pełen dostęp do twoich repozytoriów.
|
||||
add_new_principal = Dodaj podmiot
|
||||
manage_ssh_principals = Zarządzaj podmiotami certyfikatu SSH
|
||||
principal_state_desc = Ten podmiot nie był używany w ciągu ostatnich 7 dni
|
||||
add_principal_success = Podmiot certyfikatu SSH "%s" został dodany.
|
||||
|
||||
[repo]
|
||||
owner=Właściciel
|
||||
|
@ -2348,7 +2354,7 @@ release.message = Opisz to wydanie
|
|||
release.download_count_few = %s pobrania
|
||||
tag.create_tag_operation = Utwórz tag
|
||||
tag.create_success = Tag "%s" został utworzony.
|
||||
editor.commit_email = Email commitu
|
||||
editor.commit_email = E-mail commitu
|
||||
projects.edit_success = Projekt "%s" został zaktualizowany.
|
||||
issues.choose.invalid_config = Konfiguracja zgłoszeń zawiera błędy:
|
||||
issues.add_ref_at = `dodał(a) odniesienie <b>%s</b> %s`
|
||||
|
@ -2836,6 +2842,12 @@ settings.protected_branch_duplicate_rule_name = Już istnieje reguła dla tego z
|
|||
release.summary_card_alt = Karta podsumowania wydania zatytułowanego "%s" w repozytorium %s
|
||||
settings.archive.text = Zarchiwizowanie tego repo sprawi, że będzie ono w całości tylko do odczytu. Będzie ukryte z pulpitu. Nikt (nawet ty!) nie będzie mógł utworzyć nowych commitów, lub otworzyć jakichkolwiek zgłoszeń lub pull requestów.
|
||||
settings.unarchive.button = Odarchiwizuj repo
|
||||
commits.view_single_diff = Zobacz zmiany tego pliku wprowadzone w tym commicie
|
||||
tag.ahead.target = do %s od tego tagu
|
||||
settings.matrix.room_id_helper = ID Pokoju może być pozyskane z klienta przeglądarkowego Element > Ustawienia pokoju > Zaawansowane > Wewnętrzne ID pokoju. Przykład: %s.
|
||||
settings.matrix.access_token_helper = Zalecane jest skonfigurowanie dedykowany konta Matrix. Token dostępu może zostać pozyskany z przeglądarkowego klienta Element (w zakładce incognito/prywatnej) > Menu użytkownika (lewy górny róg) > Wszystkie ustawienia > Pomoc i O aplikacji > Zaawansowane > Token dostępu (zaraz pod URL Serwera domowego). Zamknij zakładkę incognito/prywatną (wylogowanie się unieważniłoby ten token).
|
||||
pulls.editable = Edytowalne
|
||||
pulls.editable_explanation = Ten pull request zezwala na edycje przez opiekunów. Możesz uczestniczyć w nim bezpośrednio.
|
||||
|
||||
[graphs]
|
||||
component_loading = Wczytywanie %s...
|
||||
|
@ -2958,15 +2970,15 @@ form.name_reserved = Nazwa organizacji "%s" jest zarezerwowana.
|
|||
follow_blocked_user = Nie możesz obserwować tej organizacji ponieważ ta organizacja ciebie zablokowała.
|
||||
settings.change_orgname_prompt = Uwaga: Zmiana nazwy organizacji zmieni również URL twojej organizacji i udostępni starą nazwę.
|
||||
form.name_pattern_not_allowed = Wzór "%s" nie jest dozwolony w nazwie organizacji.
|
||||
settings.email = Email kontaktowy
|
||||
settings.email = E-mail kontaktowy
|
||||
teams.general_access_helper = Uprawnienia członków będą określane na podstawie poniższej tabeli uprawnień.
|
||||
members.remove.detail = Usunąć %[1]s z %[2]s?
|
||||
teams.none_access_helper = Opcja "brak dostępu" dotyczy tylko repozytoriów prywatnych.
|
||||
teams.general_access = Niestandardowy dostęp
|
||||
teams.add_nonexistent_repo = Repozytorium które próbujesz dodać nie istnieje, proszę je najpierw utworzyć.
|
||||
teams.invite_team_member.list = Oczekujące zaproszenia
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochrony wynoszącym %[1]d dni, możesz nadal odzyskać swoją starą nazwę użytkownika podczas okresu ochrony.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Stara nazwa użytkownika będzie dostępna dla każdego po okresie ochrony wynoszącym %[1]d dzień, możesz nadal odzyskać swoją starą nazwę użytkownika podczas okresu ochrony.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = Stara nazwa organizacji będzie dostępna dla każdego po okresie ochrony wynoszącym %[1]d dni, możesz nadal odzyskać starą nazwę podczas okresu ochrony.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = Stara nazwa organizacji będzie dostępna dla każdego po okresie ochrony wynoszącym %[1]d dzień, możesz nadal odzyskać starą nazwę podczas okresu ochrony.
|
||||
teams.invite_team_member = Zaproś do %s
|
||||
settings.visibility.limited = Ograniczona (widoczne tylko dla zalogowanych użytkowników)
|
||||
teams.none_access = Brak dostępu
|
||||
|
@ -2981,7 +2993,7 @@ organizations=Organizacje
|
|||
repositories=Repozytoria
|
||||
hooks=Weebhook'i
|
||||
authentication=Źródła uwierzytelniania
|
||||
emails=Emaile użytkowników
|
||||
emails=E-maile użytkowników
|
||||
config=Konfiguracja
|
||||
notices=Powiadomienia systemu
|
||||
monitor=Monitorowanie
|
||||
|
@ -3020,7 +3032,7 @@ 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 Forgejo.
|
||||
dashboard.resync_all_sshprincipals=Zaktualizuj plik '.ssh/authorized_keys' z kluczami SSH Forgejo.
|
||||
dashboard.resync_all_sshprincipals=Zaktualizuj plik ".ssh/authorized_principals" z podmiotami SSH Forgejo.
|
||||
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
|
||||
|
@ -3097,7 +3109,7 @@ users.list_status_filter.is_active=Aktywne
|
|||
users.list_status_filter.is_admin=Administrator
|
||||
users.list_status_filter.is_restricted=Ograniczone
|
||||
|
||||
emails.email_manage_panel=Zarządzanie adresami email
|
||||
emails.email_manage_panel=Zarządzanie adresami e-mail
|
||||
emails.primary=Podstawowy
|
||||
emails.activated=Aktywowany
|
||||
emails.filter_sort.email=E-mail
|
||||
|
@ -3162,7 +3174,7 @@ auths.attribute_username=Atrybut nazwy użytkownika
|
|||
auths.attribute_username_placeholder=Pozostaw puste, aby użyć nazwy użytkownika wprowadzonej w Forgejo.
|
||||
auths.attribute_name=Atrybut imienia
|
||||
auths.attribute_surname=Atrybut nazwiska
|
||||
auths.attribute_mail=Atrybut adresu email
|
||||
auths.attribute_mail=Atrybut adresu e-mail
|
||||
auths.attribute_ssh_public_key=Atrybut publicznego klucza SSH
|
||||
auths.attributes_in_bind=Pobierz atrybuty w kontekście Bind DN
|
||||
auths.allow_deactivate_all=Zezwól na pusty wynik wyszukiwania, aby zdezaktywować wszystkich użytkowników
|
||||
|
@ -3181,7 +3193,7 @@ auths.allowed_domains_helper=Pozostaw puste, aby zezwolić na wszystkie domeny.
|
|||
auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
|
||||
auths.disable_helo=Wyłącz HELO
|
||||
auths.pam_service_name=Nazwa usługi PAM
|
||||
auths.pam_email_domain=Domena email PAM (opcjonalna)
|
||||
auths.pam_email_domain=Domena e-mail PAM (opcjonalna)
|
||||
auths.oauth2_provider=Dostawca OAuth2
|
||||
auths.oauth2_icon_url=Adres URL Ikony
|
||||
auths.oauth2_clientID=ID klienta (klucz)
|
||||
|
@ -3281,16 +3293,16 @@ config.enable_openid_signup=Włącz samodzielną rejestrację za pomocą OpenID
|
|||
config.enable_openid_signin=Włącz logowanie za pomocą OpenID
|
||||
config.show_registration_button=Pokazuj przycisk rejestracji
|
||||
config.require_sign_in_view=Wymagaj zalogowania w celu wyświetlania stron
|
||||
config.mail_notify=Włącz powiadomienia email
|
||||
config.mail_notify=Włącz powiadomienia e-mail
|
||||
config.enable_captcha=Włącz CAPTCHA
|
||||
config.active_code_lives=Ważność kodów aktywacyjnych
|
||||
config.reset_password_code_lives=Czas wygaśnięcia kodu przywracania konta
|
||||
config.default_keep_email_private=Domyślne ukrywanie adresów email
|
||||
config.default_keep_email_private=Domyślne ukrywanie adresów e-mail
|
||||
config.default_allow_create_organization=Domyślnie zezwalaj na tworzenie organizacji
|
||||
config.enable_timetracking=Włącz śledzenie czasu
|
||||
config.default_enable_timetracking=Domyślnie włącz śledzenie czasu
|
||||
config.default_allow_only_contributors_to_track_time=Zezwalaj wyłącznie współpracownikom na śledzenie czasu
|
||||
config.no_reply_address=Ukryta domena email
|
||||
config.no_reply_address=Domena ukrytych e-maili
|
||||
config.default_visibility_organization=Domyślna widoczność dla nowych organizacji
|
||||
config.default_enable_dependencies=Domyślne włączanie zależności zgłoszeń
|
||||
|
||||
|
@ -3414,8 +3426,8 @@ assets = Zasoby kodu
|
|||
dashboard.cleanup_packages = Wyczyść przedawnione pakiety
|
||||
dashboard.delete_old_system_notices = Usuń wszystkie stare powiadomienia systemowe z bazy danych
|
||||
users.details = Szczegóły użytkownika
|
||||
emails.deletion_success = Adres email został usunięty.
|
||||
emails.delete_primary_email_error = Nie możesz usunąć głównego adresu email.
|
||||
emails.deletion_success = Adres e-mail został usunięty.
|
||||
emails.delete_primary_email_error = Nie możesz usunąć głównego adresu e-mail.
|
||||
users.purge_help = Wymusza usunięcie użytkownika razem z jakimikolwiek repozytoriami, organizacjami, oraz pakietami których ten użytkownik jest właścicielem. Wszystkie komentarze i zgłoszenia przez tego użytkownika również zostaną usunięte.
|
||||
dashboard.sync_branch.started = Synchronizacja gałęzi rozpoczęta
|
||||
dashboard.cancel_abandoned_jobs = Anuluj porzucone prace akcji
|
||||
|
@ -3440,7 +3452,7 @@ dashboard.cleanup_actions = Wyczyść przedawnione logi i artefakty z akcji
|
|||
dashboard.rebuild_issue_indexer = Przebuduj indekser zgłoszeń
|
||||
users.new_success = Konto użytkownika "%s" zostało utworzone.
|
||||
users.purge = Pozbądź się użytkownika
|
||||
users.activated.description = Zakończenie weryfikacji email. Właściciel nieaktywowanego konta nie będzie mógł się zalogować dopóki weryfikacja email nie została zakończona.
|
||||
users.activated.description = Zakończenie weryfikacji e-mail. Właściciel nieaktywowanego konta nie będzie mógł się zalogować dopóki weryfikacja e-mail nie została zakończona.
|
||||
users.block.description = Zablokuj użytkownikowi możliwości interakcji z tym serwisem przez jego konto i zabroń logowania się.
|
||||
users.admin.description = Nadaj temu użytkownikowi pełen dostęp do wszystkich funkcji administracyjnych dostępnych przez interfejs przeglądarkowy lub API.
|
||||
users.restricted.description = Zezwól tylko na interakcje z repozytoriami i organizacjami do których ten użytkownik został dodany jako współpracownik. To uniemożliwia dostęp do publicznych repozytoriów na tej instancji.
|
||||
|
@ -3449,16 +3461,88 @@ users.organization_creation.description = Zezwól na tworzenie nowych organizacj
|
|||
users.still_own_packages = Ten użytkownik nadal jest właścicielem jednego lub więcej pakietów, usuń najpierw te pakiety.
|
||||
users.list_status_filter.not_admin = Nie administrator
|
||||
users.list_status_filter.not_2fa_enabled = 2FA wyłączone
|
||||
emails.change_email_text = Czy jesteś pewien(-na), że chcesz zaktualizować ten adres email?
|
||||
emails.delete = Usuń Email
|
||||
emails.delete_desc = Czy jesteś pewien(-na), że chcesz usunąć ten adres email?
|
||||
emails.change_email_text = Czy jesteś pewien(-na), że chcesz zaktualizować ten adres e-mail?
|
||||
emails.delete = Usuń E-mail
|
||||
emails.delete_desc = Czy jesteś pewien(-na), że chcesz usunąć ten adres e-mail?
|
||||
packages.total_size = Wielkość całkowita: %s
|
||||
packages.unreferenced_size = Nieodniesiona wielkość: %s
|
||||
packages.cleanup = Wyczyść przedawnione dane
|
||||
defaulthooks.desc = Webhooki automatycznie wykonują żądania HTTP POST do serwera kiedy pewne wydarzenia Forgejo zostają wywołane. Webhooki zdefiniowane tutaj są domyślne i będą kopiowane do wszystkich nowych repozytoriów. Przeczytaj więcej w <a target="_blank" rel="noopener" href="%s">przewoniku webhooków</a>.
|
||||
defaulthooks.desc = Webhooki automatycznie wykonują żądania HTTP POST do serwera kiedy pewne wydarzenia Forgejo zostają wywołane. Webhooki zdefiniowane tutaj są domyślne i będą kopiowane do wszystkich nowych repozytoriów. Przeczytaj więcej w <a target="_blank" rel="noopener" href="%s">przewodniku webhooków</a>.
|
||||
dashboard.new_version_hint = Forgejo %s jest już dostępne, w tej chwili korzystasz z %s. Sprawdź szczegóły na <a target="_blank" rel="noreferrer" href="%s">blogu</a>.
|
||||
identity_access = Tożsamość i dostęp
|
||||
dashboard.cron.cancelled = Cron: %[1]s anulowany: %[3]s
|
||||
config.domain = Domena serwera
|
||||
monitor.queue.activeworkers = Aktywne procesy pracujące
|
||||
monitor.queue.settings.remove_all_items = Usuń wszystkie
|
||||
monitor.queue.settings.desc = Pule rosną dynamicznie w odpowiedzi na blokadę kolejki procesów pracujących.
|
||||
config.mailer_config = Konfiguracja Mailer
|
||||
auths.tip.gitea = Zarejestruj nową aplikację OAuth2. Przewodnik można znaleźć na %s
|
||||
auths.unable_to_initialize_openid = Nie można zainicjalizować Dostawcy Uwierzytelniania OpenID Connect: %s
|
||||
auths.force_smtps = Wymuś SMTPS
|
||||
auths.helo_hostname = Nazwa hosta HELO
|
||||
self_check = Autoweryfikacja
|
||||
config.mailer_enable_helo = Włącz HELO
|
||||
monitor.queue.settings.remove_all_items_done = Wszystkie elementy w kolejce zostały usunięte.
|
||||
auths.tips.gmail_settings = Ustawienia Gmail:
|
||||
auths.map_group_to_team_removal = Usuń użytkowników z synchronizowanych zespołów jeżeli użytkownik nie należy do odpowiadającej grupy LDAP
|
||||
auths.enable_ldap_groups = Włącz grupy LDAP
|
||||
auths.map_group_to_team = Odwzorowywuj grupy LDAP na zespoły Organizacji (pozostaw pole puste by pominąć)
|
||||
config.test_mail_sent = Testowy e-mail został wysłany do "%s".
|
||||
config.cache_test_slow = Test pamięci podręcznej zakończony powodzeniem, jednak odpowiedź była wolna: %s.
|
||||
auths.verify_group_membership = Weryfikuj przynależność do grupy w LDAP (pozostaw filtr pusty by pominąć)
|
||||
monitor.stacktrace = Stacktrace
|
||||
monitor.download_diagnosis_report = Pobierz raport diagnostyczny
|
||||
auths.skip_local_two_fa_helper = Pozostawienie tej opcji jako odznaczonej oznacza, że użytkownicy lokalni z aktywowanym 2FA nadal będą musieli przejść 2FA by móc się zalogować
|
||||
config.app_slogan = Slogan instancji
|
||||
config.test_mail_failed = Nie udało się wysłać testowego e-maila do "%s": %v
|
||||
config.mailer_use_dummy = Testowa
|
||||
config.cache_test_failed = Nie udało się zbadać pamięci podręcznej: %v.
|
||||
config.cache_test = Przetestuj Pamięć Podręczną
|
||||
monitor.processes_count = %d Procesów
|
||||
monitor.queue.numberinqueue = Liczba w kolejce
|
||||
monitor.queue.review_add = Sprawdź / dodaj procesy pracujące
|
||||
self_check.no_problem_found = Nie znaleziono jeszcze żadnych problemów.
|
||||
config.cache_test_succeeded = Test pamięci podręcznej zakończony powodzeniem, otrzymano odpowiedź w ciągu %s.
|
||||
auths.login_source_exist = Źródło uwierzytelniania "%s" już istnieje.
|
||||
auths.new_success = Uwierzytelnianie "%s" została dodana.
|
||||
config.app_data_path = Ścieżka danych aplikacji
|
||||
systemhooks.desc = Webhooki automatycznie tworzą zapytania HTTP POST do serwera, kiedy następują pewne zdarzenia w Forgejo. Zdefiniowane tutaj webhooki będą oddziaływać na wszystkie repozytoria tego systemu, zatem proszę rozważ ich możliwy wpływ na wydajność. Przeczytaj o tym więcej w <a target="_blank" rel="noopener" href="%s">przewodniku o webhookach</a>.
|
||||
auths.force_smtps_helper = SMTPS jest zawsze używane na porcie 465. Zaznacz tę opcję by wymusić SMTPS na innych portach. (W przeciwnym wypadku dla innych portów zostanie użyte STARTTLS gdy jest wspierane przez hosta.)
|
||||
auths.default_domain_name = Domyślna nazwa domeny używana do adresu e-mail
|
||||
config.allow_dots_in_usernames = Zezwól użytkownikom na użycie kropek w ich nazwach użytkowników. Nie wpływa na już istniejące konta.
|
||||
config.open_with_editor_app_help = Edytory dostępne w menu klonowania "Otwórz przy pomocy". Jeżeli pozostawione puste, ustawienie domyślne będzie użyte. Rozwiń by zobaczyć ustawienie domyślne.
|
||||
monitor.duration = Okres (s)
|
||||
config.ssh_domain = Domena serwera SSH
|
||||
config.mailer_smtp_addr = Host SMTP
|
||||
auths.tip.gitlab_new = Zarejestruj nową aplikację na %s
|
||||
auths.oauth2_scopes = Dodatkowe zakresy
|
||||
auths.tips.oauth2.general.tip = Podczas rejestrowania nowego uwierzytelniania OAuth2, callback/przekierowanie URL powinno być:
|
||||
auths.oauth2_group_claim_name = Nazwa oświadczenia określającego nazwy grup dla tego źródła. (Opcjonalne)
|
||||
dashboard.update_migration_poster_id = Aktualizuj ID autora migracji
|
||||
config.access_log_template = Szablon dziennika dostępu
|
||||
dashboard.start_schedule_tasks = Uruchomienie zaplanowanych zadań akcji
|
||||
config.logger_name_fmt = Dziennik: %s
|
||||
self_check.database_collation_case_insensitive = Baza danych korzysta z układu sortowania %s, dla którego nie ma znaczenia wielkość liter. Mimo, że Forgejo mógłoby działać z tym ustawieniem poprawnie, mogą wydarzyć się rzadkie przypadki, które nie będą działać zgodnie z oczekiwaniami.
|
||||
auths.helo_hostname_helper = Nazwa hosta wysyłana z HELO. Aby wysłać bieżącą nazwę hosta, pozostaw puste.
|
||||
dashboard.update_checker = Sprawdzanie aktualizacji
|
||||
auths.oauth2_required_claim_name_helper = Ustaw tę nazwę by ograniczyć logowanie z tego źródła dla użytkowników z oświadczeniem o tej nazwie
|
||||
auths.group_attribute_list_users = Atrybut grupy zawierający listę użytkowników
|
||||
auths.attribute_avatar = Atrybut awatara
|
||||
config.set_setting_failed = Ustawienie %s nie powiodło się
|
||||
auths.oauth2_tenant = Dzierżawa
|
||||
auths.oauth2_map_group_to_team_removal = Usuń użytkowników z synchronizowanych zespołów jeżeli użytkownik nie należy do odpowiadającej grupy.
|
||||
auths.oauth2_required_claim_value_helper = Ustaw tę nazwę by ograniczyć logowanie z tego źródła dla użytkowników z oświadczeniem o tej nazwie i wartości
|
||||
auths.oauth2_restricted_group = Wartość oświadczenia grupy dla użytkowników ograniczonych. (Opcjonalne - wymaga nazwy oświadczenia powyżej)
|
||||
auths.oauth2_map_group_to_team = Odwzorowywuj grupy oświadczenia na zespoły organizacji (Opcjonalne - wymaga nazwy oświadczenia powyżej)
|
||||
auths.invalid_openIdConnectAutoDiscoveryURL = Niepoprawny URL Auto Discovery (musi to być poprawny URL rozpoczynający się od http:// lub https://)
|
||||
self_check.database_fix_mysql = Dla użytkowników MySQL/MariaDB, możesz użyć polecenia "forgejo doctor convert" by naprawić problemy układu sortowania. Możesz też naprawić problem przez ręczne użycie kwerend SQL "ALTER ... COLLATE ...".
|
||||
auths.oauth2_required_claim_name = Nazwa wymaganego oświadczenia
|
||||
auths.oauth2_required_claim_value = Wymagana wartość oświadczenia
|
||||
auths.oauth2_admin_group = Wartość oświadczenia grupy dla administratorów. (Opcjonalne - wymaga nazwy oświadczenia powyżej)
|
||||
auths.group_search_base = Podstawowy DN do wyszukiwania grup
|
||||
auths.user_attribute_in_group = Atrybut użytkownika w grupie
|
||||
self_check.database_collation_mismatch = Wymagaj by baza danych korzystała z układu sortowania: %s
|
||||
self_check.database_inconsistent_collation_columns = Baza danych korzysta z układu sortowania %s, ale te kolumny korzystają z niedopasowanych układów sortowania. Może to spowodować nieoczekiwane problemy.
|
||||
|
||||
|
||||
[action]
|
||||
|
@ -3472,6 +3556,27 @@ compare_commits=Porównaj %d commitów
|
|||
compare_commits_general=Porównaj commity
|
||||
mirror_sync_delete=synchronizuje i usuwa odwołanie <code>%[2]s</code> w <a href="%[1]s">%[3]s</a> z kopii lustrzanej
|
||||
review_dismissed_reason=Powód:
|
||||
auto_merge_pull_request = `automatycznie scalił(a) pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
starred_repo = dał(a) gwiazdkę <a href="%[1]s">%[2]s</a>
|
||||
create_pull_request = `utworzył(a) pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
comment_issue = `skomentował(a) zgłoszenie <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
mirror_sync_create = zsynchronizował(a) nowe odniesienie <a href="%[2]s">%[3]s</a> do <a href="%[1]s">%[4]s</a> z kopii lustrzanej
|
||||
reject_pull_request = `zasugerował(a) zmiany dla <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
publish_release = `wydał <a href="%[2]s">%[4]s</a> na <a href="%[1]s">%[3]s</a>`
|
||||
comment_pull = `skomentował(a) pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
review_dismissed = `odrzucił(a) recenzję od <b>%[4]s</b> dla <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
close_pull_request = `zamknął(-ęła) pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
reopen_pull_request = `otworzył(a) ponownie pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
merge_pull_request = `scalił(a) pull request <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
approve_pull_request = `zatwierdził(a) <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
create_branch = utworzył(a) gałąź <a href="%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a>
|
||||
watched_repo = zaczął(-ęła) obserwować <a href="%[1]s">%[2]s</a>
|
||||
push_tag = wypchnął tag <a href="%[2]s">%[3]s</a> do <a href="%[1]s">%[4]s</a>
|
||||
mirror_sync_push = zsynchronizował commity do <a href="%[2]s">%[3]s</a> na <a href="%[1]s">%[4]s</a> z kopii lustrzanej
|
||||
create_issue = `otworzył(a) zgłoszenie <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
close_issue = `zamknął(-ęła) zgłoszenie <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
reopen_issue = `otworzył(a) ponownie zgłoszenie <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
commit_repo = wypchnął(-ęła) do <a href="%[2]s">%[3]s</a> na <a href="%[1]s">%[4]s</a>
|
||||
|
||||
[tool]
|
||||
now=teraz
|
||||
|
@ -3510,6 +3615,8 @@ mark_as_read=Oznacz jako przeczytane
|
|||
mark_as_unread=Oznacz jak nieprzeczytane
|
||||
mark_all_as_read=Oznacz wszystkie jako przeczytane
|
||||
subscriptions = Subskrybcje
|
||||
no_subscriptions = Brak subskrypcji
|
||||
watching = Obserwowane
|
||||
|
||||
[gpg]
|
||||
default_key=Podpisano domyślnym kluczem
|
||||
|
@ -3560,6 +3667,151 @@ container.labels.value = Wartość
|
|||
npm.dependencies = Zależności
|
||||
rpm.repository.architectures = Architektury
|
||||
owner.settings.chef.keypair.description = Para kluczy jest konieczna do uwierzytelnienia do rejestru Chef. Jeżeli wygenerowałeś(-aś) parę kluczy wcześniej, generowanie nowej pary kluczy porzuci starą parę kluczy.
|
||||
maven.install2 = Uruchom z wiersza poleceń:
|
||||
settings.delete = Usuń pakiet
|
||||
assets = Zasoby
|
||||
helm.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
helm.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
alt.install = Zainstaluj pakiet
|
||||
alt.repository.multiple_groups = Ten pakiet jest dostępny w wielu grupach.
|
||||
settings.delete.description = Usunięcie pakietu jest operacją permanentną i nie może zostać cofnięte.
|
||||
nuget.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
conda.registry = Skonfiguruj ten rejestr jako repozytorium Conda w twoim pliku <code>.condarc</code>:
|
||||
search_in_external_registry = Szukaj w %s
|
||||
settings.delete.notice = Za moment usuniesz %s (%s). Ta operacja jest nieodwracalna, jesteś pewien(-na)?
|
||||
settings.delete.success = Pakiet został usunięty.
|
||||
settings.delete.error = Nie udało się usunąć pakietu.
|
||||
debian.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
debian.repository = Informacje o repozytorium
|
||||
generic.download = Pobierz pakiet z wiersza poleceń:
|
||||
go.install = Zainstaluj pakiet z wiersza poleceń:
|
||||
maven.registry = Skonfiguruj ten rejestr w twoim pliku projektu <code>pom.xml</code>:
|
||||
npm.install = By zainstalować ten pakiet przy użyciu npm, wykonaj następujące polecenie:
|
||||
npm.dependencies.optional = Zależności opcjonalne
|
||||
alt.setup = Dodaj repozytorium do listy połączonych repozytoriów (wybierz wymaganą architekturę zamiast '_arch_'):
|
||||
alt.repository.architectures = Architektury
|
||||
alpine.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
conan.install = By zainstalować ten pakiet przy użyciu Conan, wykonaj następujące polecenie:
|
||||
composer.install = By zainstalować ten pakiet przy użyciu Composer, wykonaj następujące polecenie:
|
||||
npm.dependencies.peer = Zależności rówieśnicze
|
||||
owner.settings.chef.keypair = Wygeneruj parę kluczy
|
||||
owner.settings.cleanuprules.success.update = Reguła czyszczenia została zaktualizowana.
|
||||
chef.registry = Skonfiguruj ten rejestr w twoim pliku <code>~/.chef/config.rb</code>:
|
||||
rubygems.install2 = lub dodaj to do Gemfile:
|
||||
about = O tym pakiecie
|
||||
published_by_in = Opublikowano %[1]s przez <a href="%[2]s">%[3]s</a> w <a href="%[4]s"><strong>%[5]s</strong></a>
|
||||
published_by = Opublikowano %[1]s przez <a href="%[2]s">%[3]s</a>
|
||||
npm.registry = Skonfiguruj ten rejestr w pliku projektu <code>.npmrc</code>:
|
||||
rpm.repository.multiple_groups = Ten pakiet jest dostępny w wielu grupach.
|
||||
rpm.repository = Informacje o repozytorium
|
||||
alpine.registry = Skonfiguruj ten rejestr dodając url do twojego pliku <code>/etc/apk/repositories</code>:
|
||||
cargo.registry = Skonfiguruj ten rejestr w pliku konfiguracyjnym Cargo (na przykład <code>~/.cargo/config.toml</code>):
|
||||
nuget.install = By zainstalować ten pakiet przy użyciu NuGet, wykonaj następujące polecenie:
|
||||
rpm.distros.suse = na dystrybucjach opartych o SUSE
|
||||
npm.dependencies.bundle = Dołączone zależności
|
||||
rubygems.required.ruby = Wymaga wersji Ruby
|
||||
rubygems.required.rubygems = Wymaga wersji RubyGem
|
||||
arch.version.groups = Grupa
|
||||
arch.version.depends = Zależności
|
||||
arch.version.optdepends = Opcjonalne zależności
|
||||
composer.registry = Skonfiguruj ten rejestr w twoim pliku <code>~/.composer/config.json</code>:
|
||||
conda.install = By zainstalować ten pakiet przy użyciu Conda, wykonaj następujące polecenie:
|
||||
container.details.type = Rodzaj obrazu
|
||||
rpm.distros.redhat = na dystrybucjach opartych o RedHat
|
||||
filter.no_result = Twój filtr nie dał żadnych wyników.
|
||||
registry.documentation = Więcej informacji o rejestrze %s znajdziesz w <a target="_blank" rel="noopener noreferrer" href="%s">dokumentacji</a>.
|
||||
empty.repo = Czy wgrałeś pakiet, ale nie jest tutaj wyświetlany? Odwiedź <a href="%[1]s">ustawienia pakietów</a> i powiąż go z tym repozytorium.
|
||||
empty.documentation = Więcej informacji o rejestrze przekietów znajdziesz w <a target="_blank" rel="noopener noreferrer" href="%s">dokumentacji</a>.
|
||||
alpine.repository = Informacje o repozytorium
|
||||
arch.pacman.helper.gpg = Dodaj certyfikat zaufania do pacmana:
|
||||
alpine.registry.key = Pobierz klucz publiczny RSA rejestru do folderu <code>/etc/apk/keys/</code> by zweryfikować podpis indeksu:
|
||||
arch.pacman.sync = Synchronizuj pakiet przy użyciu pacman:
|
||||
arch.version.checkdepends = Zależności weryfikacji
|
||||
arch.version.conflicts = Konflikty
|
||||
cargo.install = By zainstalować ten pakiet przy użyciu Cargo, wykonaj następujące polecenie:
|
||||
chef.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
debian.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
maven.download = By pobrać zależność, wykonaj w wierszu poleceń:
|
||||
npm.install2 = lub dodaj to do pliku package.json:
|
||||
pub.install = By zainstalować ten pakiet przy użyciu Dart, wykonaj następujące polecenie:
|
||||
maven.install = By użyć tego pakietu dołącz następującą treść w bloku <code>dependencies</code> w pliku <code>pom.xml</code>:
|
||||
pypi.install = By zainstalować ten pakiet przy użyciu pip, wykonaj następujące polecenie:
|
||||
rpm.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
rpm.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
rubygems.install = By zainstalować ten pakiet przy użyciu gem, wykonaj następujące polecenie:
|
||||
settings.link.description = Jeżeli połączych pakiet z repozytorium, pakiet ten będzie widoczny na liście pakietów danego repozytorium.
|
||||
settings.link.success = Połączone repozytorium zostało zaktualizowane pomyślnie.
|
||||
owner.settings.cleanuprules.keep.count = Pozostaw ostatnie
|
||||
owner.settings.cleanuprules.keep.count.1 = 1 wersji na pakiet
|
||||
owner.settings.chef.title = Rejestr Chef
|
||||
conan.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
container.multi_arch = OS / Architektura
|
||||
container.images.title = Obrazy
|
||||
owner.settings.cleanuprules.keep.pattern = Pozostaw pasujące wersje
|
||||
desc = Zarządzaj pakietami repozytoriów.
|
||||
settings.link.button = Zaktualizuj Połączone Repozytorium
|
||||
settings.link = Połącz ten pakiet z repozytorium
|
||||
swift.install2 = i wykonaj następujące polecenie:
|
||||
arch.version.properties = Własności wersji
|
||||
arch.pacman.repo.multi.item = Konfiguracja dla %s
|
||||
arch.pacman.repo.multi = %s ma tę samą wersję co w innych dystrybucjach.
|
||||
arch.pacman.conf = Dodaj serwer z powiązaną dystrybucją i architekturą do <code>/etc/pacman.conf</code> :
|
||||
versions.view_all = Pokaż wszystkie
|
||||
details.documentation_site = Strona dokumentacji
|
||||
details.repository_site = Strona repozytorium
|
||||
arch.version.description = Opis
|
||||
arch.version.provides = Zapewnia
|
||||
arch.version.makedepends = Zależności budowy
|
||||
container.pull = Pobierz obraz z wiersza poleceń:
|
||||
container.layers = Warstwy obrazu
|
||||
pypi.requires = Wymagany Python
|
||||
rubygems.dependencies.runtime = Zależności czasu wykonywania
|
||||
swift.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
alt.registry = Skonfiguruj ten rejestr z wiersza poleceń:
|
||||
alt.registry.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
owner.settings.cleanuprules.preview.overview = %d pakietów jest zaplanowanych do usunięcia.
|
||||
owner.settings.cleanuprules.keep.count.n = %d wersji na pakiet
|
||||
owner.settings.cleanuprules.remove.title = Wersje które nie pasują do tych reguł zostaną usunięte, chyba, że reguła wcześniej każe jest pozostawić.
|
||||
owner.settings.cleanuprules.remove.days = Usuń wersje starsze niż
|
||||
alt.repository = Informacje o repozytorium
|
||||
owner.settings.cleanuprules.remove.pattern = Usuń wersje pasujące
|
||||
owner.settings.cleanuprules.success.delete = Reguła czyszczenia została usunięta.
|
||||
arch.version.replaces = Zamienia
|
||||
arch.version.backup = Kopia zapasowa
|
||||
details.project_site = Strona projektu
|
||||
settings.link.error = Nie udało się zaktualizować połączonego repozytorium.
|
||||
swift.install = Dodaj ten packiet do twojego pliku <code>Package.swift</code>:
|
||||
settings.link.select = Wybierz Repozytorium
|
||||
empty = Nie ma jeszcze żadnych pakietów.
|
||||
cran.registry = Skonfiguruj ten rejestr w twoim pliku <code>Rprofile.site</code>:
|
||||
cran.install = By zainstalować ten pakiet, wykonaj następujące polecenie:
|
||||
owner.settings.cargo.rebuild.no_index = Nie można odbudować, żaden indeks nie jest zainicjowany.
|
||||
owner.settings.cargo.title = Indeks rejestru Cargo
|
||||
owner.settings.cargo.rebuild.error = Nie udało się odbudować indeksu Cargo: %v
|
||||
owner.settings.cargo.rebuild.success = Indeks Cargo został odbudowany pomyślnie.
|
||||
owner.settings.cleanuprules.none = Nie ma jeszcze żadnych reguł czyszczenia.
|
||||
nuget.dependency.framework = Framework Docelowy
|
||||
owner.settings.cleanuprules.preview = Podgląd reguły czyszczenia
|
||||
owner.settings.cleanuprules.keep.pattern.container = Wersja <code>latest</code> jest zawsze pozostawiana dla pakietów kontenerów.
|
||||
owner.settings.cargo.initialize.success = Indeks Cargo został utworzony pomyślnie.
|
||||
owner.settings.cargo.rebuild = Odbuduj indeks
|
||||
owner.settings.cargo.initialize.error = Nie udało się zainicjować indeksu Cargo: %v
|
||||
composer.dependencies.development = Zależności programistyczne
|
||||
owner.settings.cargo.initialize = Zainicjuj indeks
|
||||
alpine.registry.info = Wybierz $branch i $repository z listy poniżej.
|
||||
owner.settings.cleanuprules.pattern_full_match = Zastosuj wzór do pełnej nazwy pakietu
|
||||
owner.settings.cleanuprules.keep.title = Wersje które pasują do tych reguł są pozostawiane, nawet jeżeli pasują do reguły usunięcia niżej.
|
||||
vagrant.install = By dodać box Vagrant, wykonaj następujące polecenie:
|
||||
npm.dependencies.development = Zależności programistyczne
|
||||
rubygems.dependencies.development = Zależności programistyczne
|
||||
owner.settings.cargo.rebuild.description = Odbudowanie może być przydatne gdy indeks nie jest synchronizowany z zapisanymi pakietami Cargo.
|
||||
owner.settings.cleanuprules.title = Reguły czyszczenia
|
||||
owner.settings.cleanuprules.add = Dodaj regułę czyszczenia
|
||||
owner.settings.cleanuprules.edit = Edytuj regułę czyszczenia
|
||||
owner.settings.cleanuprules.preview.none = Reguła czyszczenia nie pasuje do żadnego pakietu.
|
||||
owner.settings.cargo.initialize.description = Specjalny indeks repozytorium Git jest potrzebny by użyć rejestru Cargo. Wybranie tej opcji utworzy/odtworzy repozytorium i skonfiguruje jest automatycznie.
|
||||
container.digest = Digest
|
||||
debian.registry.info = Wybierz $distribution i $component z listy poniżej.
|
||||
|
||||
[secrets]
|
||||
secrets = Sekrety
|
||||
|
@ -3646,6 +3898,33 @@ variables.description = Zmienne będą przekazane pewnym akcjom, nie mogą być
|
|||
runners.runner_manage_panel = Zarządzaj runnerami
|
||||
runners.new = Utwórz nowy runner
|
||||
runs.no_matching_online_runner_helper = Brak pasujących runnerów online z etykietą: %s
|
||||
workflow.disable = Wyłącz proces pracy
|
||||
unit.desc = Zarządzaj zintegrowanymi procesami CI/CD z Forgejo Actions.
|
||||
runs.all_workflows = Wszystkie procesy prac
|
||||
variables.not_found = Nie udało się znaleźć zmiennej.
|
||||
runs.invalid_workflow_helper = Plik konfiguracyjny procesu pracy jest nieprawidłowy. Proszę sprawdź swój plik konfiguracyjny: %s
|
||||
runs.no_workflows = Nie ma jeszcze żadnych procesów pracy.
|
||||
runs.no_runs = Ten proces pracy nie ma jeszcze uruchomień.
|
||||
workflow.dispatch.use_from = Wykorzystaj proces pracy z
|
||||
workflow.disabled = Proces pracy jest wyłączony.
|
||||
workflow.enable_success = Proces pracy "%s" włączony pomyślnie.
|
||||
workflow.enable = Włącz proces pracy
|
||||
workflow.disable_success = Proces pracy "%s" wyłączony pomyślnie.
|
||||
workflow.dispatch.run = Uruchom proces pracy
|
||||
runs.no_job = Proces pracy musi posiadać chociaż jedno zadanie
|
||||
runs.no_job_without_needs = Proces pracy musi zawierać chociaż jedno zadanie bez zależności.
|
||||
status.running = Uruchomione
|
||||
runs.workflow = Proces pracy
|
||||
runners.task_list.done_at = Ukończone W
|
||||
need_approval_desc = Potrzebne zatwierdzenie by móc uruchamiać procesy pracy dla pull requestów forków.
|
||||
runs.pushed_by = wypchnięty przez
|
||||
runs.status_no_select = Wszystkie stany
|
||||
runs.actors_no_select = Wszyscy aktorzy
|
||||
workflow.dispatch.success = Proces pracy został pomyślnie zażądany.
|
||||
workflow.dispatch.invalid_input_type = Nieprawidłowy typ danych wejścia "%s".
|
||||
workflow.dispatch.input_required = Wymagaj wartości dla danych wejścia "%s".
|
||||
workflow.dispatch.warn_input_limit = Wyświetlane jest tylko pierwszych %d danych wejścia.
|
||||
workflow.dispatch.trigger_found = Ten proces pracy zawiera wywołanie przy wydarzeniu <c>workflow_dispatch</c>.
|
||||
|
||||
|
||||
|
||||
|
@ -3669,9 +3948,9 @@ normal_file = Zwykły plik
|
|||
[search]
|
||||
search = Wyszukaj...
|
||||
type_tooltip = Typ wyszukiwania
|
||||
fuzzy = Fuzzy
|
||||
package_kind = Wyszukaj paczki...
|
||||
fuzzy_tooltip = Uwzględnij wyniki, które również pasują do wyszukiwanego hasła
|
||||
fuzzy = Przybliżone
|
||||
package_kind = Wyszukaj pakiety...
|
||||
fuzzy_tooltip = Uwzględnij wyniki, które są bliskie wyszukiwanemu hasłu
|
||||
match = Dopasuj
|
||||
match_tooltip = Uwzględniaj tylko wyniki pasujące do wyszukiwanego hasła
|
||||
repo_kind = Wyszukaj repozytoria...
|
||||
|
@ -3689,7 +3968,7 @@ runner_kind = Wyszukaj runnery...
|
|||
keyword_search_unavailable = Wyszukiwanie według słów kluczowych jest obecnie niedostępne. Skontaktuj się z administratorem strony.
|
||||
milestone_kind = Wyszukaj kamienie milowe...
|
||||
union_tooltip = Uwzględnij wyniki pasujące do dowolnego słowa kluczowego oddzielonego spacjami
|
||||
exact = Dokładnie
|
||||
exact = Dokładne
|
||||
exact_tooltip = Uwzględniaj tylko wyniki pasujące do wyszukiwanego hasła
|
||||
issue_kind = Wyszukaj zgłoszenia...
|
||||
pull_kind = Wyszukaj pull requesty...
|
||||
|
@ -3704,7 +3983,7 @@ filepreview.truncated = Podgląd został przycięty
|
|||
filepreview.line = Linia %[1]d w %[2]s
|
||||
|
||||
[translation_meta]
|
||||
test = Litwo, Ojczyzno moja! ty jesteś jak zdrowie; ile cię trzeba cenić, ten tylko się dowie, kto cię stracił. Dziś piękność twą w całej ozdobie widzę i opisuję, bo tęsknię po tobie.
|
||||
test = Litwo, Ojczyzno moja! ty jesteś jak zdrowie; ile cię trzeba cenić, ten tylko się dowie, kto cię stracił. Dziś piękność twą w całej ozdobie widzę i opisuję, bo tęsknię po tobie :)
|
||||
|
||||
[repo.permissions]
|
||||
code.read = <b>Odczyt:</b> Dostęp i klonowanie kodu repozytorium.
|
||||
|
@ -3724,4 +4003,13 @@ pulls.write = <b>Zapis:</b> Zamykanie pull requestów i zarządzanie metadanymi
|
|||
ext_issues = Dostęp do linku kierującego do zewnętrznego dziennika zgłoszeń. Uprawnienia są zarządzane zewnętrznie.
|
||||
ext_wiki = Dostęp do linku kierującego do zewnętrznej wiki. Uprawnienia są zarządzane zewnętrznie.
|
||||
actions.write = <b>Zapis:</b> Ręczne wywołanie, restart, anulowanie lub zatwierdzenie oczekujących procesów CI/CD.
|
||||
actions.read = <b>Odczyt:</b> Podgląd zintegrowanych procesów CI/CD i ich logów.
|
||||
actions.read = <b>Odczyt:</b> Podgląd zintegrowanych procesów CI/CD i ich logów.
|
||||
|
||||
[munits.data]
|
||||
eib = EiB
|
||||
pib = PiB
|
||||
tib = TiB
|
||||
gib = GiB
|
||||
b = B
|
||||
kib = KiB
|
||||
mib = MiB
|
|
@ -2870,6 +2870,9 @@ summary_card_alt = Cartão de resumo do repositório %s
|
|||
release.summary_card_alt = Cartão de resumo de um release intitulado "%s" no repositório %s
|
||||
archive.pull.noreview = Este repositório está arquivado. Não é possível revisar pull requests.
|
||||
editor.commit_email = Email de commit
|
||||
commits.view_single_diff = Ver modificações neste arquivo introduzidas neste commit
|
||||
pulls.editable = Editável
|
||||
pulls.editable_explanation = Este pull request permite edições de mantenedores. Voçê pode contribuir diretamenta para ele.
|
||||
|
||||
[graphs]
|
||||
component_loading = Carregando %s...
|
||||
|
@ -3006,8 +3009,8 @@ open_dashboard = Abrir painel
|
|||
settings.change_orgname_prompt = Obs.: Alterar o nome de uma organização resultará na alteração do URL dela e disponibilizará o nome antigo para uso.
|
||||
follow_blocked_user = Não foi possível seguir esta organização porque ela bloqueou-o(a).
|
||||
form.name_pattern_not_allowed = O padrão "%s" não é permitido no nome de uma organização.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dia, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dias, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome de organização antigo ficará disponível para qualquer pessoa após um período de proteção de %[1]d dia, você ainda pode recuperar o nome antigo durante este período de proteção.
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome de organização antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dia, você ainda pode recuperar o nome antigo durante este período de espera.
|
||||
|
||||
[admin]
|
||||
dashboard=Painel
|
||||
|
@ -3954,6 +3957,7 @@ variables.deletion.description = Apagar uma variável é permanente e não pode
|
|||
runs.expire_log_message = Os logs foram apagados pois eram antigos demais.
|
||||
runs.no_workflows.help_no_write_access = Para aprender sobre as Actions do Forgejo, veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
|
||||
runs.no_workflows.help_write_access = Não sabe como começar a usar as Actions do Forgejo? Veja o <a target="_blank" rel="noopener noreferrer" href="%s">guia de como começar na documentação do usuário</a> para escrever seu primeiro workflow, depois <a target="_blank" rel="noopener noreferrer" href="%s">configure um runner do Forgejo</a> para executar trabalhos.
|
||||
variables.not_found = Não foi possível encontrar a variável.
|
||||
|
||||
|
||||
[projects]
|
||||
|
|
249
options/locale/locale_ro.ini
Normal file
249
options/locale/locale_ro.ini
Normal file
|
@ -0,0 +1,249 @@
|
|||
|
||||
|
||||
|
||||
[common]
|
||||
return_to_forgejo = Înapoi la Forgejo
|
||||
explore = Explorează
|
||||
page = Pagină
|
||||
licenses = Licențe
|
||||
copy_type_unsupported = Acest tip de fișier nu poate fi copiat
|
||||
sign_in = Autentificare
|
||||
sign_out = Deconectare
|
||||
sign_in_with_provider = Autentificare cu %s
|
||||
sign_in_or = sau
|
||||
toc = Cuprins
|
||||
admin_panel = Administrare site
|
||||
artifacts = Artefacte
|
||||
concept_user_organization = Organizație
|
||||
logo = Logo
|
||||
help = Ajutor
|
||||
sign_up = Înregistrare
|
||||
link_account = Conectare cont
|
||||
register = Înregistrare
|
||||
template = Șablon
|
||||
language = Limbă
|
||||
notifications = Notificări
|
||||
create_new = Creează…
|
||||
user_profile_and_more = Profil și setări…
|
||||
username = Nume de utilizator
|
||||
email = Adresă de email
|
||||
password = Parolă
|
||||
access_token = Token de acces
|
||||
captcha = CAPTCHA
|
||||
twofa = Autentificare prin doi factori
|
||||
webauthn_insert_key = Inserează cheia de securitate
|
||||
webauthn_press_button = Apasă butonul de pe cheia de securitate…
|
||||
webauthn_use_twofa = Folosește un cod de verificare de pe telefon
|
||||
webauthn_error = Cheia de securitate nu a putut fi citită.
|
||||
webauthn_unsupported_browser = Browserul tău nu are abilități WebAuthn pe moment.
|
||||
webauthn_error_unable_to_process = Serverul nu a putut procesa cererea.
|
||||
webauthn_error_duplicated = Cheia de securitate nu este permisă pentru această cerere. Asigură-te că cheia nu este înregistrată deja.
|
||||
webauthn_error_empty = Trebuie să setezi un nume pentru această cheie.
|
||||
organization = Organizație
|
||||
mirror = Oglindă
|
||||
settings = Setări
|
||||
your_profile = Profil
|
||||
your_starred = Favorite
|
||||
your_settings = Setări
|
||||
new_migrate.title = Migrare nouă
|
||||
new_org.title = Organizație nouă
|
||||
new_migrate.link = Migrare nouă
|
||||
new_org.link = Organizație nouă
|
||||
sources = Surse
|
||||
mirrors = Oglinzi
|
||||
ok = OK
|
||||
cancel = Anulare
|
||||
retry = Reîncearcă
|
||||
add = Adaugă
|
||||
edit = Editează
|
||||
view = Vezi
|
||||
test = Test
|
||||
enabled = Activat
|
||||
disabled = Dezactivat
|
||||
locked = Blocat
|
||||
copy = Copiază
|
||||
copy_generic = Copiază în clipboard
|
||||
copy_url = Copiază URL
|
||||
copy_hash = Copiază hash
|
||||
copy_content = Copiază conținut
|
||||
copy_success = Copiat!
|
||||
preview = Previzualizează
|
||||
loading = Se încarcă…
|
||||
error = Eroare
|
||||
go_back = Înapoi
|
||||
never = Niciodată
|
||||
rss_feed = Flux RSS
|
||||
confirm_delete_artifact = Ești sigur că vrei să ștergi artefactul "%s"?
|
||||
archived = Arhivat
|
||||
concept_system_global = Global
|
||||
show_log_seconds = Arată secunde
|
||||
name = Nume
|
||||
filter = Filtru
|
||||
filter.clear = Șterge filtre
|
||||
filter.is_archived = Arhivat
|
||||
enable_javascript = Acest site are nevoie de JavaScript.
|
||||
webauthn_error_unknown = O eroare necunoscută a apărut. Te rog reîncearcă.
|
||||
re_type = Confirmă parola
|
||||
webauthn_sign_in = Apasă butonul de pe cheia de securitate. Dacă cheia de securitate nu are un buton, reintrodu-o.
|
||||
new_mirror = Oglindă nouă
|
||||
new_project = Proiect nou
|
||||
remove_label_str = Șterge elementul "%s"
|
||||
save = Salvează
|
||||
remove = Șterge
|
||||
copy_path = Copiază cale
|
||||
error404 = Pagina pe care încerci să o vizitezi fie <strong>nu există</strong> sau <strong>nu ești autorizat</strong> să o vezi.
|
||||
filter.not_archived = Nearhivat
|
||||
activities = Activități
|
||||
confirm_delete_selected = Ștergi toate elementele selectate?
|
||||
webauthn_error_insecure = WebAuthn funcționează doar prin conexiuni securizate. Pentru a testa folosind HTTP, poți folosi "localhost" sau "127.0.0.1" ca origine
|
||||
webauthn_error_timeout = Limita de timp a fost depășită înainte ca cheia ta să poată fi citită. Reîncarcă pagina și reîncearcă.
|
||||
copy_error = Copiere eșuată
|
||||
concept_user_individual = Individual
|
||||
unknown = Necunoscut
|
||||
home = Acasă
|
||||
dashboard = Panou de Control
|
||||
version = Versiune
|
||||
powered_by = Susținut de %s
|
||||
active_stopwatch = Monitorizor de timp activ
|
||||
more_items = Mai multe elemente
|
||||
|
||||
[editor]
|
||||
table_modal.header = Adaugă tabel
|
||||
table_modal.placeholder.content = Conținut
|
||||
table_modal.label.rows = Rânduri
|
||||
table_modal.label.columns = Coloane
|
||||
buttons.list.ordered.tooltip = Adaugă o listă numerotată
|
||||
table_modal.placeholder.header = Antet
|
||||
buttons.italic.tooltip = Adaugă text cursiv
|
||||
buttons.mention.tooltip = Menționează un utilizator sau o echipă
|
||||
buttons.new_table.tooltip = Adaugă tabel
|
||||
buttons.bold.tooltip = Adaugă text aldin
|
||||
buttons.code.tooltip = Adaugă cod
|
||||
buttons.quote.tooltip = Citează text
|
||||
buttons.link.tooltip = Adaugă un link
|
||||
|
||||
[filter]
|
||||
string.asc = A - Z
|
||||
string.desc = Z - A
|
||||
|
||||
[error]
|
||||
server_internal = Eroare internă a serverului
|
||||
network_error = Eroare de rețea
|
||||
|
||||
[startpage]
|
||||
install = Ușor de instalat
|
||||
license = Sursă deschisă
|
||||
|
||||
[install]
|
||||
require_db_desc = Forgejo are nevoie de MySQL, PostgreSQL, SQLite3 sau TiDB (protocol MySQL).
|
||||
db_title = Setări bază de date
|
||||
db_type = Tipul bazei de date
|
||||
user = Nume de utilizator
|
||||
ssl_mode = SSL
|
||||
path = Cale
|
||||
sqlite_helper = Calea fișierului pentru baza de date SQLite3.<br>Introdu o cale absolută dacă rulezi Forgejo ca serviciu.
|
||||
reinstall_error = Încerci să instalezi într-o bază de date Forgejo care există deja
|
||||
err_empty_db_path = Calea către baza de date SQLite3 nu poate fi goală.
|
||||
no_admin_and_disable_registration = Nu poți dezactiva propria înregistrare a utilizatorilor fără un cont de administrator.
|
||||
err_empty_admin_password = Parola administratorului nu poate fi goală.
|
||||
err_empty_admin_email = Emailul administratorului nu poate fi gol.
|
||||
err_admin_name_is_invalid = Numele de utilizator al administratorului este invalid
|
||||
general_title = Setări generale
|
||||
ssh_port = Port pentru serverul SSH
|
||||
ssh_port_helper = Numărul de port care va fi folosit de serverul SSH. Lasă gol pentru a dezactiva serverul SSH.
|
||||
http_port = Port de ascultare HTTP
|
||||
http_port_helper = Număr de port care va fi folosit de serverul web Forgejo.
|
||||
app_url = URL de bază
|
||||
app_url_helper = Adresa de bază pentru URL-uri de clonare HTTP(S) și notificări prin email.
|
||||
log_root_path = Cale pentru loguri
|
||||
log_root_path_helper = Fișiere cu loguri vor fi scrise în acest dosar.
|
||||
optional_title = Setări opționale
|
||||
email_title = Setări pentru email
|
||||
smtp_addr = Host SMTP
|
||||
smtp_port = Port SMTP
|
||||
mailer_user = Nume de utilizator SMTP
|
||||
mailer_password = Parolă SMTP
|
||||
mail_notify = Pornește notificări prin email
|
||||
server_service_title = Setări pentru server și servicii terțe
|
||||
offline_mode.description = Dezactivează rețele de livrare a conținutului (CDN) terțe și oferă toate resursele în mod local.
|
||||
disable_gravatar = Dezactivează Gravatar
|
||||
openid_signin = Pornește conectare folosind OpenID
|
||||
openid_signin.description = Permite utilizatorilor conectarea prin OpenID.
|
||||
openid_signup = Pornește înregistrarea proprie folosind OpenID
|
||||
enable_captcha = Pornește CAPTCHA pentru înregistrare
|
||||
enable_captcha.description = Solicită utilizatorilor să treacă de CAPTCHA pentru a crea conturi.
|
||||
default_keep_email_private = Ascunde adresa de email în mod implicit
|
||||
default_allow_create_organization = Permite crearea de organizații în mod implicit
|
||||
default_allow_create_organization.description = Permite utilizatorilor noi să creeze organizații în mod implicit. Când această opțiune este dezactivată, un administrator va trebui să ofere permisiune pentru crearea de organizații noilor utilizatori.
|
||||
admin_title = Setări pentru contul de administrator
|
||||
admin_name = Numele de utilizator al administratorului
|
||||
admin_password = Parola administratorului
|
||||
install_btn_confirm = Instalează Forgejo
|
||||
internal_token_failed = Eroare la generarea tokenului intern: %v
|
||||
secret_key_failed = Eroare la generarea cheii secrete: %v
|
||||
save_config_failed = Eroare la salvarea configurației: %v
|
||||
invalid_admin_setting = Setările pentru contul de administrator sunt invalide: %v
|
||||
allow_dots_in_usernames = Permite utilizatorilor să folosească puncte în numele de utilizator. Conturile existente nu vor fi afectate.
|
||||
password_algorithm = Algoritm de hash pentru parole
|
||||
invalid_password_algorithm = Algoritm de hash pentru parole invalid
|
||||
title = Configurare inițială
|
||||
smtp_from = Trimite email ca
|
||||
openid_signup.description = Permite utilizatorilor să creeze conturi folosind OpenID dacă înregistrarea proprie este pornită.
|
||||
test_git_failed = Eroare la testarea comenzii „git”: %v
|
||||
sqlite3_not_available = Această versiune de Forgejo nu este compatibilă cu SQLite3. Te rog descarcă versiunea binară oficială de la %s (nu versiunea „gobuild”).
|
||||
password = Parolă
|
||||
reinstall_confirm_message = Reinstalarea cu o bază de date Forgejo care există deja poate cauza probleme multiple. În cele mai multe cazuri, ar trebui să îți folosești „app.ini” existent pentru a rula Forgejo. Dacă știi ce faci, confirmă următoarele:
|
||||
reinstall_confirm_check_3 = Confirmi că ești absolut sigur că acest Forgejo rulează cu locația app.ini corectă și că ești sigur că trebuie să reinstalezi. Confirmi că ai luat la cunoștință riscurile de mai sus.
|
||||
admin_email = Adresa de email
|
||||
docker_helper = Dacă rulezi Forgejo în Docker, mai întâi citește <a target="_blank" rel="noopener noreferrer" href="%s">documentația</a> înainte de a schimba setări.
|
||||
lfs_path = Cale rădăcină pentru Git LFS
|
||||
domain_helper = Domeniul sau adresa host pentru acest server.
|
||||
install = Instalare
|
||||
db_name = Numele bazei de date
|
||||
allow_only_external_registration.description = Utilizatorii își vor putea crea conturi noi doar folosind servicii externe configurate.
|
||||
admin_setting.description = Crearea unui cont de administrator este opțională. Primul utilizator înregistrat va deveni administrator în mod automat.
|
||||
confirm_password = Confirmă parola
|
||||
enable_update_checker = Pornește verificarea pentru actualizări
|
||||
db_schema_helper = Lasă gol pentru baza de date implicită („public”).
|
||||
smtp_from_invalid = Adresa "Trimite email ca" este invalidă
|
||||
smtp_from_helper = Adresa de email pe care Forgejo o va utiliza. Introdu o adresă de email simplă sau folosește formatul „"Nume" <email@example.com>”.
|
||||
disable_registration = Dezactivează înregistrarea proprie
|
||||
allow_only_external_registration = Permite înregistrare doar prin servicii externe
|
||||
default_keep_email_private.description = Pornește ascunderea adresei de email pentru utilizatori noi în mod implicit astfel încât această informație să nu fie scursă imediat după înregistrare.
|
||||
invalid_app_data_path = Calea pentru datele aplicației este invalidă: %v
|
||||
no_reply_address_helper = Domeniu pentru utilizatorii cu adresă de email ascunsă. De exemplu, utilizatorul „joe” va fi conectat la Git ca „joe@noreply.example.org” dacă domeniul pentru adrese de email ascunse este „noreply.example.org”.
|
||||
reinstall_confirm_check_1 = Datele criptate folosind SECRET_KEY din app.ini ar putea fi pierdute: s-ar putea ca utilizatorii să nu se mai poată conecta folosing 2FA/OTP și oglinzile ar putea să nu mai funcționeze corect. Bifând această opțiune confirmă că fișierul app.ini curent conține valoarea corectă pentru SECRET_KEY.
|
||||
config_location_hint = Aceste opțiuni de configurare vor fi salvate în:
|
||||
err_admin_name_is_reserved = Numele de utilizator al administratorului este invalid, numele de utilizator este rezervat
|
||||
invalid_db_table = Tabelul „%s” al bazei de date este invalid: %v
|
||||
err_admin_name_pattern_not_allowed = Numele de utilizator al administratorului este invalid, numele de utilizator se potrivește cu un model rezervat
|
||||
domain = Domeniul serverului
|
||||
require_sign_in_view.description = Limitează accesul la conținut către utilizatori conectați. Oaspeții vor putea să viziteze doar paginile de autentificare.
|
||||
invalid_db_setting = Setările pentru bază de date sunt invalide: %v
|
||||
no_reply_address = Domeniu pentru adrese de email ascunse
|
||||
|
||||
[search]
|
||||
user_kind = Caută utilizatori...
|
||||
team_kind = Caută echipe...
|
||||
code_kind = Caută cod...
|
||||
project_kind = Caută proiecte...
|
||||
package_kind = Caută pachete...
|
||||
org_kind = Caută organizații...
|
||||
code_search_unavailable = Căutarea de cod nu este disponibilă momentan. Te rog contactează administratorul site-ului.
|
||||
keyword_search_unavailable = Căutarea după cuvânt cheie nu este disponibilă momentan. Te rog contactează administratorul site-ului.
|
||||
no_results = Nu a fost găsit niciun rezultat corespunzător.
|
||||
|
||||
[aria]
|
||||
navbar = Bară de navigare
|
||||
footer = Subsol
|
||||
footer.software = Despre acest software
|
||||
footer.links = Link-uri
|
||||
|
||||
[heatmap]
|
||||
contributions_zero = Nicio contribuție
|
||||
contributions_format = {contributions} pe {day} {month} {year}
|
||||
contributions_few = contribuții
|
||||
less = Mai puțin
|
||||
number_of_contributions_in_the_last_12_months = %s contribuții în ultimele 12 luni
|
||||
more = Mai mult
|
||||
contributions_one = contribuție
|
|
@ -2873,6 +2873,7 @@ issues.context.menu = Меню комментария
|
|||
release.summary_card_alt = Карточка со сводкой о выпуске «%s» в репозитории %s
|
||||
archive.pull.noreview = Этот репозиторий архивирован. Рецензирование запросов слияний невозможно.
|
||||
editor.commit_email = Эл. почта автора
|
||||
commits.view_single_diff = Посмотреть изменения в этом файле из этого коммита
|
||||
|
||||
[graphs]
|
||||
component_loading_failed = Не удалось загрузить %s
|
||||
|
@ -3967,6 +3968,7 @@ workflow.dispatch.warn_input_limit = Отображаются только пе
|
|||
runs.expire_log_message = Журнал был удалён из-за старости.
|
||||
runs.no_workflows.help_write_access = Не знаете, как начать использовать Действия Forgejo? Ознакомьтесь с <a target="_blank" rel="noopener noreferrer" href="%s">руководством по быстрому старту в документации</a> и создайте первый рабочий поток, затем <a target="_blank" rel="noopener noreferrer" href="%s">настройте исполнитель Forgejo</a>, который будет выполнять задачи.
|
||||
runs.no_workflows.help_no_write_access = Ознакомьтесь с <a target="_blank" rel="noopener noreferrer" href="%s">документацией</a>, чтобы узнать про Действия Forgejo.
|
||||
variables.not_found = Не удалось найти переменную.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Индивидуальный проект
|
||||
|
|
|
@ -101,6 +101,11 @@ concept_user_organization=සංවිධානය
|
|||
|
||||
name=නම
|
||||
|
||||
filter = පෙරහන
|
||||
filter.is_archived = සංරක්ෂිත
|
||||
filter.public = ප්රසිද්ධ
|
||||
filter.private = පෞද්ගලික
|
||||
|
||||
[aria]
|
||||
|
||||
[heatmap]
|
||||
|
@ -1913,6 +1918,8 @@ error.csv.too_large=එය ඉතා විශාල නිසා මෙම ග
|
|||
error.csv.unexpected=%d පේළියේ සහ %dතීරුවේ අනපේක්ෂිත චරිතයක් අඩංගු බැවින් මෙම ගොනුව විදැහුම්කරණය කළ නොහැක.
|
||||
error.csv.invalid_field_count=මෙම ගොනුව රේඛාවේ වැරදි ක්ෂේත්ර සංඛ්යාවක් ඇති බැවින් එය විදැහුම්කරණය කළ නොහැක %d.
|
||||
|
||||
milestones.filter_sort.name = නම
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -2462,6 +2469,9 @@ notices.op=ඔප්.
|
|||
notices.delete_success=පද්ධති දැන්වීම් මකා දමා ඇත.
|
||||
|
||||
|
||||
config_summary = සාරාංශය
|
||||
config_settings = සැකසුම්
|
||||
|
||||
[action]
|
||||
create_repo=නිර්මිත ගබඩාව <a href="%s">%s</a>
|
||||
rename_repo=<code>%[1]s</code> සිට <a href="%[2]s">%[3]s</a>දක්වා නම් කරන ලද ගබඩාව
|
||||
|
@ -2554,3 +2564,5 @@ runs.commit=කැප
|
|||
|
||||
[git.filemode]
|
||||
symbolic_link=සංකේතාත්මක සබැඳිය
|
||||
|
||||
[search]
|
||||
|
|
|
@ -142,6 +142,9 @@ name=Meno
|
|||
value=Hodnota
|
||||
issues = Problémy
|
||||
|
||||
filter.is_archived = Archivované
|
||||
filter.private = Súkromný
|
||||
|
||||
[aria]
|
||||
navbar=Navigačná lišta
|
||||
footer=Päta
|
||||
|
@ -1370,4 +1373,6 @@ runners.labels=Štítky
|
|||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
symbolic_link=Symbolický odkaz
|
||||
symbolic_link=Symbolický odkaz
|
||||
|
||||
[search]
|
|
@ -342,6 +342,8 @@ app_slogan_helper = Oluşum sloganınızı giriniz. Devre dışı bırakmak içi
|
|||
enable_update_checker_helper_forgejo = release.forgejo.org adresindeki TXT DNS kayıdı kullanılarak yeni Forgejo sürümleri düzenli olarak kontrol edilecektir.
|
||||
allow_dots_in_usernames = Kullanıcı isimlerinde noktaya izin ver. Var olan kullanıcıları etkilemez.
|
||||
|
||||
smtp_from_invalid = `"E-posta Olarak Gönder" adresi geçersiz`
|
||||
|
||||
[home]
|
||||
uname_holder=Kullanıcı adı veya e-posta adresi
|
||||
password_holder=Parola
|
||||
|
@ -663,6 +665,9 @@ admin_cannot_delete_self = Yöneticiyken kullanıcınızı silemezsiniz. Lütfen
|
|||
username_error_no_dots = ` sadece alfanumerik karakterler ("0-9","a-z","A-Z"), tire ("-") ve alt tire ("-") içerebilir. Alfanumerik olmayan karakterlerle başlayamaz ve bitemez, ayrıca ardışık alfanumerik olmayan karakterler de kullanılamaz.`
|
||||
|
||||
|
||||
unset_password = Oturum açma kullanıcısı parola belirlemedi.
|
||||
unsupported_login_type = Oturum açma türü hesap silmeyi desteklemiyor.
|
||||
|
||||
[user]
|
||||
change_avatar=Profil resmini değiştir…
|
||||
joined_on=%s tarihinde katıldı
|
||||
|
@ -2692,7 +2697,37 @@ activity.navbar.contributors = Katılımcılar
|
|||
contributors.contribution_type.deletions = Çıkarmalar
|
||||
settings.new_owner_blocked_doer = Yeni sahip sizi engelledi.
|
||||
|
||||
open_with_editor = %s ile aç
|
||||
object_format = Nesne Biçimi
|
||||
mirror_sync = eşitlendi
|
||||
stars = Yıldızlar
|
||||
desc.sha256 = SHA256
|
||||
vendored = Sağlanmış
|
||||
generated = Üretilmiş
|
||||
editor.push_out_of_date = İtme eskimiş.
|
||||
commits.search_branch = Bu Dal
|
||||
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
|
||||
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.nothing_to_compare_have_tag = Seçili dal/etiket aynı.
|
||||
pulls.fast_forward_only_merge_pull_request = Sadece ileri sarma
|
||||
comments.edit.already_changed = Yoruma 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
|
||||
milestones.filter_sort.name = Ad
|
||||
activity.navbar.pulse = Eğilim
|
||||
activity.navbar.code_frequency = Kod Frekansı
|
||||
activity.navbar.recent_commits = Son İşlemeler
|
||||
settings.mirror_settings.pushed_repository = İtilmiş depo
|
||||
settings.ignore_stale_approvals = Eskimiş onayları yoksay
|
||||
settings.ignore_stale_approvals_desc = Daha eski işlemelere (eski incelemelere) yapılmış olan onayları, Dİ'nin kaç onayı olduğunu belirlerken sayma. Eskimiş incelemeler atıldıysa bu ilgisizdir.
|
||||
error.broken_git_hook = Bu deponun Git İstemcileri bozuk gibi gözüküyor. Onarmak için lütfen <a target="_blank" rel="noreferrer" href="%s">belgelere</a> 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.
|
||||
code_frequency.what = kod frekansı
|
||||
contributors.what = katkılar
|
||||
recent_commits.what = son işlemeler
|
||||
|
||||
[org]
|
||||
org_name_holder=Organizasyon Adı
|
||||
|
@ -3346,6 +3381,23 @@ notices.op=İşlem
|
|||
notices.delete_success=Sistem bildirimleri silindi.
|
||||
|
||||
|
||||
self_check = Öz Denetim
|
||||
config_summary = Özet
|
||||
config_settings = Ayarlar
|
||||
dashboard.sync_repo_tags = Etiketleri git verisinden veritabanına eşitle
|
||||
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.
|
||||
config.cache_test = Önbelleği Sına
|
||||
config.cache_test_failed = Önbelleğin incelenmesi başarısız oldu: %v.
|
||||
config.cache_test_slow = Önbellek sınaması başarılı, ancak yanıt yavaş: %s.
|
||||
config.cache_test_succeeded = Önbellek sınaması başarılı, %s sürede bir yanıt alındı.
|
||||
config.open_with_editor_app_help = Klon menüsü için "Birlikte aç" düzenleyicileri. Boş bırakılırsa, varsayılan kullanılacaktır. Varsayılanı görmek için genişletin.
|
||||
self_check.no_problem_found = Henüz bir sorun bulunmadı.
|
||||
self_check.database_collation_mismatch = Veritabanının şu harmanlamayı kullanmasını bekle: %s
|
||||
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.
|
||||
|
||||
[action]
|
||||
create_repo=depo <a href="%s">%s</a> oluşturuldu
|
||||
rename_repo=<code>%[1]s</code> olan depo adını <a href="%[2]s">%[3]s</a> buna çevirdi
|
||||
|
@ -3586,6 +3638,9 @@ owner.settings.chef.title=Chef Kütüğü
|
|||
owner.settings.chef.keypair=Anahtar çifti üret
|
||||
owner.settings.chef.keypair.description=Chef kütüğünde kimlik doğrulaması için bir anahtar çifti gereklidir. Eğer daha önce bir anahtar çifti ürettiyseniz, yeni bir anahtar çifti üretmek eski anahtar çiftini ıskartaya çıkartacaktır.
|
||||
|
||||
npm.dependencies.bundle = Paketlenmiş Bağımlılıklar
|
||||
rpm.repository.multiple_groups = Bu paket birçok grupta mevcut.
|
||||
|
||||
[secrets]
|
||||
secrets=Gizlilikler
|
||||
description=Gizlilikler belirli işlemlere aktarılacaktır, bunun dışında okunamaz.
|
||||
|
@ -3693,6 +3748,10 @@ runs.no_workflows.documentation = Gitea İşlem'i hakkında daha fazla bilgi iç
|
|||
variables.id_not_exist = %d kimlikli değişken mevcut değil.
|
||||
runs.no_workflows.quick_start = Gitea İşlem'i nasıl başlatacağınızı bilmiyor musunuz? <a target="_blank" rel="noopener noreferrer" href="%s">Hızlı başlangıç rehberine</a> bakabilirsiniz.
|
||||
|
||||
runs.no_job_without_needs = İş akışı en azından bağımlılığı olmayan bir görev içermelidir.
|
||||
runs.no_job = İş akışı en azından bir görev içermelidir
|
||||
runs.expire_log_message = Günlükler, çok eski oldukları için temizlendiler.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Kişisel Proje
|
||||
type-2.display_name=Depo Projesi
|
||||
|
@ -3732,3 +3791,5 @@ keyword_search_unavailable = Anahtar kelime ile arama şu anda kullanıma açık
|
|||
fuzzy_tooltip = Arama terimine yakın olan eşleşmeleri dahil et
|
||||
union_tooltip = Boşlukla ayrılmış anahtar kelime eşleşmelerini dahil et
|
||||
exact_tooltip = Sadece arama terimiyle tam uyuşan sonuçları dahit et.
|
||||
fuzzy = Bulanık
|
||||
exact = Tam
|
||||
|
|
|
@ -2504,6 +2504,8 @@ activity.navbar.code_frequency = Частота кодування
|
|||
activity.navbar.pulse = Пульс
|
||||
open_with_editor = Відкрити в %s
|
||||
commits.view_single_diff = Переглянути зміни до цього файлу, внесені у цьому коміті
|
||||
pulls.editable = Редаговане
|
||||
pulls.editable_explanation = Цей запит на злиття дозволяє редагування від розробників. Ви можете зробити свій внесок безпосередньо до нього.
|
||||
|
||||
[graphs]
|
||||
contributors.what = внески
|
||||
|
@ -3373,6 +3375,7 @@ status.running = Працює
|
|||
status.success = Успіх
|
||||
status.skipped = Пропущено
|
||||
need_approval_desc = Потрібне схвалення для запуску робочих потоків для запиту на злиття.
|
||||
variables.not_found = Не вдалося знайти змінну.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -369,7 +369,7 @@ show_both_archived_unarchived=显示已存档和未存档的
|
|||
show_only_archived=只显示已存档的
|
||||
show_only_unarchived=只显示未存档的
|
||||
|
||||
show_private=私有库
|
||||
show_private=私有
|
||||
show_both_private_public=同时显示公开的和私有的
|
||||
show_only_private=只显示私有的
|
||||
show_only_public=只显示公开的
|
||||
|
@ -1028,7 +1028,7 @@ delete_account_desc=确实要永久删除此用户帐户吗?
|
|||
email_notifications.enable=启用邮件通知
|
||||
email_notifications.onmention=只在被提到时邮件通知
|
||||
email_notifications.disable=停用邮件通知
|
||||
email_notifications.submit=邮件通知设置
|
||||
email_notifications.submit=设置邮件偏好
|
||||
email_notifications.andyourown=和您自己的通知
|
||||
|
||||
visibility=用户可见性
|
||||
|
@ -1168,7 +1168,7 @@ transfer.reject_desc=`取消转移到 "%s"`
|
|||
transfer.no_permission_to_accept=您没有权限接受此转让。
|
||||
transfer.no_permission_to_reject=您没有权限拒绝此转让。
|
||||
|
||||
desc.private=私有库
|
||||
desc.private=私有
|
||||
desc.public=公开
|
||||
desc.template=模板
|
||||
desc.internal=内部
|
||||
|
@ -2350,7 +2350,7 @@ 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=合并请求被打开、被关闭、被重新打开或被编辑。
|
||||
|
@ -2367,7 +2367,7 @@ 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_review_request_desc=合并请求评审被请求或被取消。
|
||||
settings.event_pull_request_approvals=合并请求批准
|
||||
settings.event_pull_request_merge=合并请求合并
|
||||
settings.event_package=软件包
|
||||
|
@ -2465,7 +2465,7 @@ settings.dismiss_stale_approvals_desc=当新的提交更改合并请求内容被
|
|||
settings.ignore_stale_approvals = 忽略过时的批准
|
||||
settings.ignore_stale_approvals_desc = 不将旧的提交(陈旧的评审)计入已批准的合并请求数量。注:如过期的评审已被取消,则无需设置。
|
||||
settings.require_signed_commits=需要签名提交
|
||||
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
|
||||
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到此分支。
|
||||
settings.protect_branch_name_pattern=受保护的分支名称正则
|
||||
settings.protect_branch_name_pattern_desc=受保护的分支名称正则。语法请参阅<a href="%s">文档</a> 。如:main, release/**
|
||||
settings.protect_patterns=规则
|
||||
|
@ -2490,7 +2490,7 @@ settings.default_branch_desc=请选择一个默认的分支用于合并请求和
|
|||
settings.merge_style_desc=合并方式
|
||||
settings.default_merge_style_desc=默认合并方式
|
||||
settings.choose_branch=选择一个分支…
|
||||
settings.no_protected_branch=没有受保护的分支
|
||||
settings.no_protected_branch=没有分支受到保护。
|
||||
settings.edit_protected_branch=编辑
|
||||
settings.protected_branch_required_rule_name=必须填写规则名称
|
||||
settings.protected_branch_duplicate_rule_name=这些分支已设有规则
|
||||
|
@ -2503,7 +2503,7 @@ settings.tags.protection.allowed.users=允许的账号
|
|||
settings.tags.protection.allowed.teams=允许的团队
|
||||
settings.tags.protection.allowed.noone=无
|
||||
settings.tags.protection.create=添加规则
|
||||
settings.tags.protection.none=没有受保护的Git标签
|
||||
settings.tags.protection.none=没有Git标签受到保护。
|
||||
settings.tags.protection.pattern.description=你可以使用单个名称或 glob 模式匹配或正则表达式来匹配多个标签。了解详情请访问 <a target="_blank" rel="noopener" href="%s">受保护Git标签指南</a>。
|
||||
settings.bot_token=机器人令牌
|
||||
settings.chat_id=聊天 ID
|
||||
|
@ -2651,11 +2651,11 @@ release.deletion=删除发布
|
|||
release.deletion_desc=删除版本发布只会从 Forgejo 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
|
||||
release.deletion_success=Release已被删除。
|
||||
release.deletion_tag_desc=将从仓库中删除此 Git标签。仓库内容和历史记录保持不变。继续吗?
|
||||
release.deletion_tag_success=该 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.tag_already_exist=此 Git 标签已存在。
|
||||
release.downloads=下载附件
|
||||
release.download_count=下载:%s
|
||||
release.add_tag_msg=使用发布的标题和内容作为标签消息。
|
||||
|
@ -2704,7 +2704,7 @@ tag.create_tag_operation=创建标签
|
|||
tag.confirm_create_tag=创建标签
|
||||
tag.create_tag_from=基于"%s"创建新标签
|
||||
|
||||
tag.create_success=标签"%s"已存在
|
||||
tag.create_success=已创建标签“%s”。
|
||||
|
||||
topic.manage_topics=管理主题
|
||||
topic.done=保存
|
||||
|
@ -2786,7 +2786,7 @@ release.download_count_one = %s 下载
|
|||
release.download_count_few = %s 下载
|
||||
release.system_generated = 此附件是自动生成的。
|
||||
pulls.ready_for_review = 准备好接受评审了吗?
|
||||
settings.web_hook_name_sourcehut_builds = SourceHut 构建
|
||||
settings.web_hook_name_sourcehut_builds = SourceHut Builds
|
||||
settings.graphql_url = GraphQL URL 链接
|
||||
settings.sourcehut_builds.access_token_helper = 已授予 JOBS:RW 权限的访问令牌。可在 meta.sr.ht 上生成标准的 <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht 令牌</a>或<a target="_blank" rel="noopener noreferrer" href="%s">带有密匙访问权限的 builds.sr.ht 令牌</a> 。
|
||||
settings.matrix.access_token_helper = 推荐为此设立专门的 Matrix 账户。访问令牌可从 Element Web 客户端(在隐私/无痕模式选项卡中打开)> 用户菜单(左上角)> 所有设置 > 帮助及关于 > 高级 > 访问令牌(在主服务器 URL 下方)检索。获取完成后,请直接关闭隐私/无痕选项卡(注销会使令牌失效)。
|
||||
|
@ -2872,6 +2872,9 @@ release.summary_card_alt = 仓库 %[2]s 中标题为 %[1]s 的版本发布的摘
|
|||
summary_card_alt = 仓库 %s 的摘要卡片
|
||||
editor.commit_email = 提交电子邮件
|
||||
archive.pull.noreview = 此仓库已存档,您无法评审合并请求。
|
||||
commits.view_single_diff = 查看该提交对本文件的更改
|
||||
pulls.editable = 可编辑
|
||||
pulls.editable_explanation = 此合并请求允许维护者进行编辑。你可以直接向其贡献。
|
||||
|
||||
[graphs]
|
||||
component_loading=正在加载 %s…
|
||||
|
@ -2907,7 +2910,7 @@ team_unit_disabled=(已禁用)
|
|||
|
||||
form.name_reserved=组织名称 '%s' 是被保留的。
|
||||
form.name_pattern_not_allowed=仓库名称中不允许使用 "%s"。
|
||||
form.create_org_not_allowed=此账号禁止创建组织
|
||||
form.create_org_not_allowed=您不能创建组织。
|
||||
|
||||
settings=组织设置
|
||||
settings.options=组织
|
||||
|
@ -3007,8 +3010,8 @@ teams.invite.by=邀请人 %s
|
|||
teams.invite.description=请点击下面的按钮加入团队。
|
||||
follow_blocked_user = 你无法关注此组织,因为此组织已屏蔽你。
|
||||
open_dashboard = 打开仪表盘
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = 旧的用户名将在%[1]d天的保护期后对所有人可用,您仍可以在此期间重新认领旧的用户名。
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = 旧的用户名将在%[1]d天的保护期后对所有人可用,您仍可以在此期间重新认领旧的用户名。
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = 旧的组织名将在%[1]d天的保护期后对所有人可用,您仍可以在此期间重新认领旧的名字。
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = 旧的组织名将在%[1]d天的保护期后对所有人可用,您仍可以在此期间重新认领旧名字。
|
||||
|
||||
[admin]
|
||||
dashboard=管理面板
|
||||
|
@ -3198,7 +3201,7 @@ repos.unadopted=未收录仓库
|
|||
repos.unadopted.no_more=找不到更多未被收录的仓库。
|
||||
repos.owner=所有者
|
||||
repos.name=名称
|
||||
repos.private=私有库
|
||||
repos.private=私有
|
||||
repos.watches=关注数
|
||||
repos.stars=点赞数
|
||||
repos.forks=派生数
|
||||
|
@ -3679,7 +3682,7 @@ keywords=关键词
|
|||
details=详情
|
||||
details.author=作者
|
||||
details.project_site=项目站点
|
||||
details.repository_site=仓库站点
|
||||
details.repository_site=仓库网站
|
||||
details.documentation_site=文档站点
|
||||
details.license=许可协议
|
||||
assets=文件
|
||||
|
@ -3799,7 +3802,7 @@ owner.settings.cleanuprules.keep.count=保留最新的
|
|||
owner.settings.cleanuprules.keep.count.1=每个软件包1个版本
|
||||
owner.settings.cleanuprules.keep.count.n=每个软件包 %d 个版本
|
||||
owner.settings.cleanuprules.keep.pattern=保持版本匹配
|
||||
owner.settings.cleanuprules.keep.pattern.container=容器包的 <code>最新版本</code> 总是会保留。
|
||||
owner.settings.cleanuprules.keep.pattern.container=容器的<code>latest</code>版本总是会被保留。
|
||||
owner.settings.cleanuprules.remove.title=与这些规则相匹配的版本将被删除,除非其中存在某个保留它们的规则。
|
||||
owner.settings.cleanuprules.remove.days=移除旧于天数的版本
|
||||
owner.settings.cleanuprules.remove.pattern=删除匹配的版本
|
||||
|
@ -3955,6 +3958,7 @@ workflow.dispatch.input_required = 需要输入“%s”的值。
|
|||
runs.expire_log_message = 已清除日志,因为它们太旧了。
|
||||
runs.no_workflows.help_write_access = 不知道如何上手 Forgejo Actions?查看<a target="_blank" rel="noopener noreferrer" href="%s">用户文档的快速上手部分</a>来编写你的第一个工作流,然后<a target="_blank" rel="noopener noreferrer" href="%s">配置一个Forgejo运行器</a>来运行你的任务。
|
||||
runs.no_workflows.help_no_write_access = 欲了解关于Forgejo Actions的更多信息,请参见<a target="_blank" rel="noopener noreferrer" href="%s">文档</a>。
|
||||
variables.not_found = 找不到变量。
|
||||
|
||||
[projects]
|
||||
type-1.display_name=个人项目
|
||||
|
|
|
@ -119,6 +119,22 @@ concept_user_individual = 個人
|
|||
new_project = 新增專案
|
||||
new_project_column = 新增欄位
|
||||
filter.public = 公開
|
||||
remove_all = 移除全部
|
||||
admin_panel = 網站管理
|
||||
add_all = 新增全部
|
||||
remove_label_str = 移除項目「%s」
|
||||
test = 測試
|
||||
new_repo.title = 新儲存庫
|
||||
new_migrate.title = 新遷移
|
||||
new_org.title = 新組織
|
||||
new_repo.link = 新儲存庫
|
||||
new_migrate.link = 新遷移
|
||||
new_org.link = 新組織
|
||||
copy_generic = 複製到剪貼簿
|
||||
copy_url = 複製網址
|
||||
copy_hash = 複製雜湊值
|
||||
|
||||
filter.private = 私有庫
|
||||
|
||||
[aria]
|
||||
footer = 頁尾
|
||||
|
@ -777,6 +793,8 @@ settings.branches.update_default_branch = 更新預設分支
|
|||
|
||||
|
||||
|
||||
milestones.filter_sort.name = 組織名稱
|
||||
|
||||
[graphs]
|
||||
|
||||
[org]
|
||||
|
@ -1062,6 +1080,8 @@ users = 使用者帳戶
|
|||
defaulthooks = 預設 Webhook
|
||||
|
||||
|
||||
config_settings = 組織設定
|
||||
|
||||
[action]
|
||||
create_repo=建立了儲存庫 <a href="%s">%s</a>
|
||||
rename_repo=重新命名儲存庫 <code>%[1]s</code> 為 <a href="%[2]s">%[3]s</a>
|
||||
|
@ -1132,4 +1152,6 @@ runners.labels = 標籤
|
|||
|
||||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
[git.filemode]
|
||||
|
||||
[search]
|
|
@ -217,7 +217,7 @@ missing_csrf=錯誤的請求:未提供 CSRF 符記
|
|||
invalid_csrf=錯誤的請求:無效的 CSRF 符記
|
||||
not_found=找不到目標。
|
||||
network_error=網路錯誤
|
||||
report_message = 如果您相信這是一個 Forgejo 的錯誤,請在 <a href="%s" target="_blank">Codeberg</a> 上搜尋相關問題,或在必要時提出一個問題。
|
||||
report_message = 如果您相信這是一個 Forgejo 的錯誤,請在 <a href="%s" target="_blank">Codeberg</a> 上搜尋相關問題,或在必要時提出一個新問題。
|
||||
server_internal = 伺服器內部錯誤
|
||||
|
||||
[startpage]
|
||||
|
@ -681,6 +681,7 @@ admin_cannot_delete_self = 當您是管理員時,您不能刪除自己。請
|
|||
username_error_no_dots = ` 只能包含英數字符("0-9","a-z","A-Z"),破折號("-")和底線("_")。只能以英數字元開頭或結尾,連續的非英數字元也不被允許。`
|
||||
required_prefix = 輸入文字必須以「%s」開頭
|
||||
username_claiming_cooldown =使用者名稱無法被認領,因為其冷卻期尚未結束。可以在 %[1]s 後被認領。
|
||||
email_domain_is_not_allowed = 使用者電子郵件地址 <b>%s</b> 的網域與 EMAIL_DOMAIN_ALLOWLIST 或 EMAIL_DOMAIN_BLOCKLIST 衝突。確保你已正確設定電子郵件地址。
|
||||
|
||||
|
||||
[user]
|
||||
|
@ -1058,6 +1059,8 @@ language.description = 這個語言會被儲存至您的帳號,並被用作您
|
|||
user_block_yourself = 你不能封鎖自己。
|
||||
pronouns_custom_label = 自訂代名詞
|
||||
change_username_redirect_prompt.with_cooldown.one = 舊的使用者名稱將在 %[1]d 天的冷卻期後對所有人開放,你仍然可以在冷卻期內重新獲得舊的使用者名稱。
|
||||
change_username_redirect_prompt.with_cooldown.few = 舊的使用者名稱將在 %[1]d 天的冷卻期後對所有人開放,你仍然可以在冷卻期內重新獲得舊的使用者名稱。
|
||||
keep_activity_private.description = 你的<a href="%s">公開活動</a>只有你和站點管理員可見。
|
||||
|
||||
[repo]
|
||||
owner=所有者
|
||||
|
@ -2269,7 +2272,7 @@ settings.deploy_key_content=內容
|
|||
settings.key_been_used=具有相同內容的部署金鑰已在使用中。
|
||||
settings.key_name_used=已有相同名稱的部署金鑰。
|
||||
settings.add_key_success=已新增部署金鑰「%s」。
|
||||
settings.deploy_key_deletion=刪除部署金鑰
|
||||
settings.deploy_key_deletion=移除部署金鑰
|
||||
settings.deploy_key_deletion_desc=移除部署金鑰將拒絕它存取此儲存庫。是否繼續?
|
||||
settings.deploy_key_deletion_success=部署金鑰已移除。
|
||||
settings.branches=分支
|
||||
|
@ -2279,7 +2282,7 @@ 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=<b>%s</b> 的分支保護
|
||||
settings.branch_protection=分支「<b>%s</b>」的保護規則
|
||||
settings.protect_this_branch=啟用分支保護
|
||||
settings.protect_this_branch_desc=防止刪除分支,並限制 Git 推送與合併到分支。
|
||||
settings.protect_disable_push=停用推送
|
||||
|
@ -2365,7 +2368,7 @@ settings.lfs_findcommits=尋找提交
|
|||
settings.lfs_lfs_file_no_commits=找不到和此 LFS 檔案關聯的提交
|
||||
settings.lfs_noattribute=此路徑在預設分支中沒有可鎖定的屬性
|
||||
settings.lfs_delete=刪除 OID 為 %s 的 LFS 檔案
|
||||
settings.lfs_delete_warning=刪除 LFS 檔案可能會造成 Checkout 時發生「物件不存在」的錯誤,您確定嗎?
|
||||
settings.lfs_delete_warning=刪除 LFS 檔案可能會導致簽出時發生「物件不存在」的錯誤。你確定嗎?
|
||||
settings.lfs_findpointerfiles=尋找指標檔案
|
||||
settings.lfs_locks=鎖定
|
||||
settings.lfs_invalid_locking_path=無效的路徑: %s
|
||||
|
@ -2377,7 +2380,7 @@ 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 哈希值
|
||||
settings.lfs_pointers.sha=Blob 雜湊值
|
||||
settings.lfs_pointers.oid=OID
|
||||
settings.lfs_pointers.inRepo=在儲存庫中
|
||||
settings.lfs_pointers.exists=存在於存放區
|
||||
|
@ -2424,7 +2427,7 @@ diff.load=載入差異
|
|||
diff.generated=自動產生的
|
||||
diff.vendored=vendored
|
||||
diff.comment.placeholder=留言
|
||||
diff.comment.markdown_info=支援 markdown 格式。
|
||||
diff.comment.markdown_info=支援 Markdown 格式。
|
||||
diff.comment.add_single_comment=加入單獨的留言
|
||||
diff.comment.add_review_comment=新增留言
|
||||
diff.comment.start_review=開始審核
|
||||
|
@ -2439,7 +2442,7 @@ diff.review.reject=請求變更
|
|||
diff.review.self_approve=合併請求的作者不能核可自己的合併請求
|
||||
diff.committed_by=提交者
|
||||
diff.protected=受保護
|
||||
diff.image.side_by_side=並列
|
||||
diff.image.side_by_side=並排
|
||||
diff.image.swipe=滑動
|
||||
diff.image.overlay=重疊
|
||||
diff.has_escaped=這一行有隱藏的 Unicode 字元
|
||||
|
@ -2763,12 +2766,101 @@ release.title = 發行標題
|
|||
settings.protect_patterns = 式樣
|
||||
mirror_use_ssh.helper = 當你選擇此選項時,Forgejo 將透過 Git SSH 鏡像儲存庫並為你建立金鑰對。你必須確保已產生的公鑰已有授權才能推送至目標儲存庫。選擇此選項時,你不能使用基於密碼的授權。
|
||||
settings.event_pull_request_review_request = 審核請求
|
||||
settings.protect_new_rule = 建立新的分支保護規則
|
||||
settings.remove_protected_branch_success = 分支保護規則「%s」已被移除。
|
||||
release.hide_archive_links_helper = 隱藏此發行自動產生的原始碼封存。例如,如果你正在自行上載。
|
||||
settings.enforce_on_admins_desc = 儲存庫管理員不能繞過此規則。
|
||||
release.message = 描述此發行
|
||||
release.deletion_desc = 刪除發行只會將其從 Forgejo 中移除。它不會影響 Git 標籤、儲存庫的內容或其歷史記錄。繼續?
|
||||
settings.unarchive.error = 嘗試取消封存儲存庫時發生錯誤。請參閱日誌以了解更多詳細資訊。
|
||||
release.invalid_external_url = 無效的外部網址:%s
|
||||
release.add_external_asset = 新增外部資產
|
||||
release.asset_name = 資產名稱
|
||||
release.type_external_asset = 外部資產
|
||||
branch.tag_collision = 無法建立分支「%s」,因為儲存庫中已存在同名標籤。
|
||||
settings.protect_status_check_patterns = 狀態檢查式樣
|
||||
branch.delete_desc = 刪除分支是永久性的。雖然被刪除的分支在實際被移除之前可能會繼續存在一小段時間,但是大多數情況下它是無法撤銷的。繼續?
|
||||
release.system_generated = 此附件是自動產生的。
|
||||
topic.format_prompt = 主題必須以字母或數字開頭,可以包含半形破折號(-)和點(.),最長 35 個字元。字母必須是小寫。
|
||||
settings.remove_protected_branch_failed = 移除分支保護規則「%s」失敗。
|
||||
branch.warning_rename_default_branch = 你正在重新命名預設分支。
|
||||
settings.rename_branch_failed_protected = 無法重新命名分支 %s,因為它是受保護的分支。
|
||||
settings.unarchive.success = 此儲存庫已成功取消封存。
|
||||
settings.unarchive.text = 取消封存儲存庫將恢復其接收提交和推送,以及新問題和合併請求的能力。
|
||||
release.hide_archive_links = 隱藏自動產生的封存
|
||||
settings.protect_no_valid_status_check_patterns = 沒有有效的狀態檢查式樣。
|
||||
settings.enforce_on_admins = 為儲存庫管理員強制執行此規則
|
||||
settings.wiki_rename_branch_main_notices_2 = 這將永久重新命名儲存庫 %s 的 Wiki 的內部分支。現有的簽出將需要更新。
|
||||
settings.discord_icon_url.exceeds_max_length = 圖示網址長度必須小於或等於 2048 個字符
|
||||
settings.wiki_branch_rename_success = 儲存庫 Wiki 的分支名稱已成功規範化。
|
||||
commits.view_single_diff = 查看此提交中對此提交的變更
|
||||
issues.new.assign_to_me = 指派給我
|
||||
mirror_denied_combination = 不能組合使用公鑰和基於密碼的驗證。
|
||||
settings.update_settings_no_unit = 儲存庫至少應該允許某種形式的交互。
|
||||
pulls.edit.already_changed = 無法儲存對合併請求的變更。看起來內容已被另一個使用者變更。請重新整理頁面並嘗試再次編輯以避免覆蓋其變更
|
||||
settings.add_collaborator_blocked_our = 無法新增協作者,因為儲存庫擁有者已封鎖他們。
|
||||
issues.edit.already_changed = 無法儲存對問題的變更。看起來內容已被另一個使用者變更。請重新整理頁面並嘗試再次編輯以避免覆蓋其變更
|
||||
settings.federation_following_repos = 關注儲存庫的網址。以半形分號「;」分隔,沒有空格。
|
||||
settings.federation_not_enabled = 你的站點上未啟用聯邦。
|
||||
settings.federation_apapiurl = 此儲存庫的聯邦網址。將其複製並貼上至另一個儲存庫的聯邦設定中作為關注儲存庫的網址。
|
||||
settings.enter_repo_name = 準確輸入擁有者和儲存庫名稱,如下所示:
|
||||
settings.wiki_rename_branch_main = 規範化 Wiki 分支名稱
|
||||
settings.wiki_branch_rename_failure = 無法規範化儲存庫 Wiki 的分支名稱。
|
||||
settings.confirm_wiki_branch_rename = 重新命名 Wiki 分支
|
||||
settings.transfer_quota_exceeded = 新擁有者(%s)已超出配額。儲存庫尚未轉移。
|
||||
settings.wiki_rename_branch_main_notices_1 = 此操作<strong>無法</strong>撤銷。
|
||||
settings.push_mirror_sync_in_progress = 目前正在將變更推送至遠端 %s。
|
||||
settings.confirmation_string = 確認字串
|
||||
issues.review.pending.tooltip = 其他使用者目前看不到此留言。要提交你的待處理留言,請選擇頁面頂部的「%s」->「%s/%s/%s」。
|
||||
pulls.delete_after_merge.head_branch.is_default = 你要刪除的頭分支是預設分支,無法刪除。
|
||||
pulls.delete_after_merge.head_branch.is_protected = 你要刪除的頭分支是受保護的分支,無法刪除。
|
||||
pulls.delete_after_merge.head_branch.insufficient_branch = 你沒有權限刪除頭分支。
|
||||
settings.pull_mirror_sync_in_progress = 目前正在從遠端 %s 拉取變更。
|
||||
settings.pull_mirror_sync_quota_exceeded = 配額已超出,不拉取變更。
|
||||
settings.wiki_globally_editable = 允許任何人編輯 Wiki
|
||||
settings.transfer_abort_success = 轉移儲存庫至 %s 已成功取消。
|
||||
settings.add_collaborator_blocked_them = 無法新增協作者,因為他們已封鎖儲存庫擁有者。
|
||||
settings.add_webhook.invalid_path = 路徑不能包含「.」、「..」或空字串。它不能以斜線開頭或結尾。
|
||||
settings.webhook.test_delivery_desc_disabled = 要使用虛假事件測試此 Webhook,請啟動它。
|
||||
settings.webhook.replay.description_disabled = 要重播此 Webhook,請啟動它。
|
||||
settings.wiki_rename_branch_main_desc = 將 Wiki 內部使用的分支重新命名為「%s」。此變更是永久性的,無法撤消。
|
||||
settings.mirror_settings.push_mirror.copy_public_key = 複製公鑰
|
||||
settings.default_update_style_desc = 用於更新落後於基礎分支的合併請求的預設更新模式。
|
||||
summary_card_alt = 儲存庫 %s 的摘要卡
|
||||
pulls.recently_pushed_new_branches = 你已於 %[2]s 推送分支 <a href="%[3]s"><strong>%[1]s</strong></a>
|
||||
pulls.sign_in_require = <a href="%s">登入</a>以建立新的合併請求。
|
||||
issues.num_reviews_one = %d 則審閱
|
||||
issues.num_reviews_few = %d 則審閱
|
||||
new_from_template_description = 你可以選擇此站點上現有的儲存庫範本並套用其設定。
|
||||
auto_init_description = 使用 README 開始 Git 歷史記錄並可選擇新增 License 和 .gitignore 檔案。
|
||||
issues.reaction.add = 新增反應
|
||||
issues.reaction.alt_few = %[1]s 對 %[2]s 做出了反應。
|
||||
issues.reaction.alt_many = %[1]s 和另外 %[2]d 人對 %[3]s 做出了反應。
|
||||
issues.context.menu = 留言選單
|
||||
issues.summary_card_alt = 儲存庫 %[2]s 中標題為「%[1]s」的問題摘要卡
|
||||
release.summary_card_alt = 儲存庫 %[2]s 中名為「%[1]s」的發行摘要卡
|
||||
error.broken_git_hook = 此儲存庫的 Git 鉤子似乎已損壞。請按照<a target="_blank" rel="noreferrer" href="%s">文件</a>修復它們,然後推送一些提交以重新整理狀態。
|
||||
issues.reaction.alt_remove = 從留言中移除 %[1]s 的反應。
|
||||
|
||||
vendored = 已供應
|
||||
settings.mirror_settings.docs.doc_link_pull_section = 文件中的「從遠端儲存庫拉取」部分。
|
||||
settings.event_pull_request_review_request_desc = 合併請求審核請求或審核請求已移除。
|
||||
settings.protect_status_check_patterns_desc = 輸入模式以指定其他分支在合併到受此規則保護的分支前必須通過的狀態檢查。每行指定一個模式,模式不得為空白。
|
||||
settings.protect_invalid_status_check_pattern = 狀態檢查模式無效: 「%s」。
|
||||
settings.ignore_stale_approvals_desc = 不計算在較舊提交上進行的核可(過時的審核)作為合併請求的核可數量。如果過時的審核已經被捨棄,則無關緊要。
|
||||
settings.tags.protection.pattern.description = 您可以使用單一名稱或 glob 模式或正則表達式來匹配多個標籤。詳情請參閱 <a target="_blank" rel="noopener" href="%s">受保護標籤指南</a>。
|
||||
settings.thread_id = 線程 ID
|
||||
settings.archive.text = 封存儲存庫將使其完全變為唯讀。它將從儀表板中隱藏。沒有人(甚至包括您!)將能夠進行新的提交,或打開任何問題或合併請求。
|
||||
diff.comment.add_line_comment = 新增行評論
|
||||
|
||||
[graphs]
|
||||
component_loading = 載入中 %s…
|
||||
code_frequency.what = 寫程式頻率
|
||||
recent_commits.what = 最近的提交
|
||||
contributors.what = 貢獻
|
||||
component_loading_info = 這可能需要一點時間…
|
||||
component_loading_failed = 無法載入 %s
|
||||
component_failed_to_load = 發生了意外錯誤。
|
||||
|
||||
[org]
|
||||
org_name_holder=組織名稱
|
||||
|
@ -2835,17 +2927,17 @@ members.member=普通成員
|
|||
members.remove=移除
|
||||
members.remove.detail=確定要從 %[2]s 中刪除 %[1]s 嗎?
|
||||
members.leave=離開
|
||||
members.leave.detail=確定要離開 %s 嗎?
|
||||
members.leave.detail=你確定你要離開組織「%s」嗎?
|
||||
members.invite_desc=邀請新的用戶加入 %s:
|
||||
members.invite_now=立即邀請
|
||||
|
||||
teams.join=加入
|
||||
teams.leave=離開
|
||||
teams.leave.detail=確定要離開 %s 嗎?
|
||||
teams.leave.detail=你確定你要離開團隊「%s」嗎?
|
||||
teams.can_create_org_repo=建立儲存庫
|
||||
teams.can_create_org_repo_helper=成員可以在組織中新增儲存庫。建立者將自動取得新儲存庫的管理員權限。
|
||||
teams.none_access=沒有權限
|
||||
teams.none_access_helper=成員無法檢視此單元或對其執行其他動作,這對公開儲存庫沒有影響。
|
||||
teams.none_access=無權存取
|
||||
teams.none_access_helper=「無權存取」選項僅對私人儲存庫有效。
|
||||
teams.general_access=自訂存取
|
||||
teams.general_access_helper=成員權限將由下列權限表決定。
|
||||
teams.read_access=讀取
|
||||
|
@ -2893,6 +2985,10 @@ open_dashboard = 開啟儀錶板
|
|||
settings.email = 聯絡電子郵件
|
||||
form.name_pattern_not_allowed = 組織名稱中不允許使用式樣「%s」。
|
||||
follow_blocked_user = 你無法關注此組織,因為此組織已封鎖你。
|
||||
teams.invite.title = 你已被邀請加入組織 <strong>%[2]s</strong> 中的團隊 <strong>%[1]s</strong>。
|
||||
settings.change_orgname_prompt = 注意:變更組織名稱也會變更你組織的網址並釋放舊名稱。
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.few = 舊的組織名稱將在 %[1]d 天的冷卻期後對所有人可用,你仍然可以在冷卻期內重新使用舊名稱。
|
||||
settings.change_orgname_redirect_prompt.with_cooldown.one = 舊的組織名稱將在 %[1]d 天的冷卻期後對所有人可用,您仍然可以在冷卻期內重新使用舊名稱。
|
||||
|
||||
[admin]
|
||||
dashboard=資訊主頁
|
||||
|
@ -2982,9 +3078,9 @@ 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=取消已放棄的作業
|
||||
dashboard.stop_zombie_tasks=停止殭屍 Actions 任務
|
||||
dashboard.stop_endless_tasks=停止永不停止的 Actions 任務
|
||||
dashboard.cancel_abandoned_jobs=取消已放棄的 Actions 作業
|
||||
|
||||
users.user_manage_panel=使用者帳號管理
|
||||
users.new_account=建立使用者帳號
|
||||
|
@ -3121,7 +3217,7 @@ auths.search_page_size=頁面大小
|
|||
auths.filter=使用者篩選器
|
||||
auths.admin_filter=管理者篩選器
|
||||
auths.restricted_filter=受限制的篩選器
|
||||
auths.restricted_filter_helper=留白則不限制任何使用者。使用米字「*」將所有不符合管理員篩選條件的使用者設定為受限。
|
||||
auths.restricted_filter_helper=留白以不限制任何使用者。使用半形星號「*」以將所有不符合管理員篩選條件的使用者設定為受限。
|
||||
auths.verify_group_membership=驗證 LDAP 群組成員資格 (篩選器留空以跳過)
|
||||
auths.group_search_base=群組搜尋的 Base DN
|
||||
auths.group_attribute_list_users=包含使用者清單的群組屬性
|
||||
|
@ -3134,15 +3230,15 @@ auths.smtp_auth=SMTP 驗證類型
|
|||
auths.smtphost=SMTP 主機地址
|
||||
auths.smtpport=SMTP 連接埠
|
||||
auths.allowed_domains=允許的域名
|
||||
auths.allowed_domains_helper=留白以允許所有域名。以半形逗號「,」分隔多個域名。
|
||||
auths.skip_tls_verify=忽略 TLS 驗證
|
||||
auths.allowed_domains_helper=留白以允許所有域名。以半形逗號(,)分隔多個域名。
|
||||
auths.skip_tls_verify=略過 TLS 驗證
|
||||
auths.force_smtps=強制 SMTPS
|
||||
auths.force_smtps_helper=SMTPS 總是使用 465 埠。設定此選項以強制 SMTPS 使用其他埠。(除此之外若主機支援的話 STARTTLS 也會使用該埠。)
|
||||
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 (金鑰)
|
||||
|
@ -3188,11 +3284,11 @@ auths.tip.github=註冊新的 OAuth 應用程式。網址:%s
|
|||
auths.tip.gitlab=註冊新的應用程式。網址:https://gitlab.com/profile/applications
|
||||
auths.tip.google_plus=從 Google API 控制台取得 OAuth2 使用者端憑證。網址:%s
|
||||
auths.tip.openid_connect=使用 OpenID 連接探索 URL (<server>/.well-known/openid-configuration) 來指定節點
|
||||
auths.tip.twitter=建立應用程式並確保有啟用「Allow this application to be used to Sign in with Twitter」。網址:%s
|
||||
auths.tip.discord=註冊新的應用程式。網址:%s
|
||||
auths.tip.twitter=前往 %s,建立應用程式並確保啟用了「允許此應用程式用於使用 Twitter 登入」選項
|
||||
auths.tip.discord=在 %s 上註冊新應用程式
|
||||
auths.tip.yandex=在 %s 建立新的應用程式。請在「Yandex.Passport API」區塊選擇選擇下列權限:「Access to email address」、「Access to user avatar」和「Access to username, first name and surname, gender」
|
||||
auths.tip.mastodon=輸入您想用來認證的 Mastodon 站點的自訂網址(或使用預設值)
|
||||
auths.edit=修改認證來源
|
||||
auths.edit=編輯認證來源
|
||||
auths.activated=該認證來源已啟用
|
||||
auths.new_success=已新增認證「%s」。
|
||||
auths.update_success=已更新認證來源。
|
||||
|
@ -3212,10 +3308,10 @@ config.app_name=站點標題
|
|||
config.app_ver=Forgejo 版本
|
||||
config.app_url=Forgejo 基底 URL
|
||||
config.custom_conf=設定檔路徑
|
||||
config.custom_file_root_path=自訂檔案根目錄
|
||||
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 版本
|
||||
|
@ -3223,7 +3319,7 @@ config.repo_root_path=儲存庫根路徑
|
|||
config.lfs_root_path=LFS 根路徑
|
||||
config.log_file_root_path=日誌路徑
|
||||
config.script_type=腳本類型
|
||||
config.reverse_auth_user=反向代理認證
|
||||
config.reverse_auth_user=反向代理認證使用者
|
||||
|
||||
config.ssh_config=SSH 設定
|
||||
config.ssh_enabled=已啟用
|
||||
|
@ -3233,7 +3329,7 @@ config.ssh_port=連接埠
|
|||
config.ssh_listen_port=監聽埠
|
||||
config.ssh_root_path=根路徑
|
||||
config.ssh_key_test_path=金鑰測試路徑
|
||||
config.ssh_keygen_path=金鑰產生 (' ssh-keygen ') 路徑
|
||||
config.ssh_keygen_path=金鑰產生(ssh-keygen)路徑
|
||||
config.ssh_minimum_key_size_check=金鑰最小大小檢查
|
||||
config.ssh_minimum_key_sizes=金鑰最小大小
|
||||
|
||||
|
@ -3259,13 +3355,13 @@ config.allow_only_external_registration=只允許從外部服務註冊
|
|||
config.enable_openid_signup=啟用 OpenID 自助註冊
|
||||
config.enable_openid_signin=啟用 OpenID 登入
|
||||
config.show_registration_button=顯示註冊按鈕
|
||||
config.require_sign_in_view=需要登入才能瀏覽頁面
|
||||
config.require_sign_in_view=需要登入才能瀏覽內容
|
||||
config.mail_notify=啟用電子郵件通知
|
||||
config.enable_captcha=啟用驗證碼
|
||||
config.active_code_lives=啟用使用者連結有效期
|
||||
config.active_code_lives=啟動碼過期時間
|
||||
config.reset_password_code_lives=帳號復原碼有效時間
|
||||
config.default_keep_email_private=預設隱藏電子信箱
|
||||
config.default_allow_create_organization=預設允許新增組織
|
||||
config.default_allow_create_organization=預設允許建立組織
|
||||
config.enable_timetracking=啟用時間追蹤
|
||||
config.default_enable_timetracking=預設啟用時間追蹤
|
||||
config.default_allow_only_contributors_to_track_time=只讓貢獻者追蹤時間
|
||||
|
@ -3372,7 +3468,7 @@ monitor.queue.settings.submit=更新設定
|
|||
monitor.queue.settings.changed=已更新設定
|
||||
|
||||
notices.system_notice_list=系統提示
|
||||
notices.view_detail_header=查看提示細節
|
||||
notices.view_detail_header=提示詳情
|
||||
notices.operations=操作
|
||||
notices.select_all=全部選取
|
||||
notices.deselect_all=取消所有選取
|
||||
|
@ -3400,7 +3496,7 @@ self_check.no_problem_found = 未發現任何問題。
|
|||
config.send_test_mail_submit = 寄送
|
||||
users.details = 使用者詳細資訊
|
||||
assets = 程式碼資料
|
||||
dashboard.sync_branch.started = 已開始同步分支
|
||||
dashboard.sync_branch.started = 分支同步已開始
|
||||
dashboard.rebuild_issue_indexer = 重建問題索引
|
||||
repos.lfs_size = LFS 大小
|
||||
packages.cleanup = 清除過期的資料
|
||||
|
@ -3429,8 +3525,31 @@ config.logger_name_fmt = 日誌:%s
|
|||
monitor.queue.review_add = 審閱/增加 Worker
|
||||
self_check.database_fix_mysql = 對於 MySQL/MariaDB 的使用者,你可以使用命令「forgejo doctor convert」來修復排序規則問題,或者你也可以手動透過「ALTER ... COLLATE ...」SQL 修復問題。
|
||||
monitor.duration = 持續時間(秒)
|
||||
systemhooks.desc = 當某些 Forgejo 事件觸發時,Webhook 會自動向伺服器發出 HTTP POST 請求。此處定義的 Webhook 將作用於系統上的所有儲存庫,因此請考慮這可能產生的任何效能影響。更多資訊請參考<a target="_blank" rel="noopener" href="%s">Webhook 指南</a>。
|
||||
self_check.database_inconsistent_collation_columns = 資料庫正在使用排序規則 %s,但是這些欄使用的排序規則不相符。這可能會引起一些意想不到的問題。
|
||||
users.block.description = 阻止此使用者透過其帳號與此服務互動並禁止登入。
|
||||
auths.tip.gitlab_new = 在 %s 上註冊新應用程式
|
||||
config.cache_test_succeeded = 快取測試成功,在 %s 內收到回應。
|
||||
config.cache_test_failed = 無法探測快取:%v。
|
||||
self_check.database_collation_case_insensitive = 資料庫正在使用排序規則 %s,這是一種不敏感的排序規則。雖然 Forgejo 可以與其配合使用,但是在一些罕見情況下可能會出現無法如預期運作的情況。
|
||||
config.open_with_editor_app_help = 拓製選單中的「開啟方式」編輯器。如果留空則將使用預設值。展開以查看預設值。
|
||||
dashboard.sync_repo_tags = 將標籤從 Git 資料同步至資料庫
|
||||
self_check.database_collation_mismatch = 期望資料庫使用的排序規則:%s
|
||||
config.allow_dots_in_usernames = 允許使用者在使用者名稱中使用點。不會影響現有帳號。
|
||||
dashboard.sync_repo_branches = 將缺少的分支從 Git 資料同步至資料庫
|
||||
defaulthooks.desc = 當某些 Forgejo 事件觸發時,Webhook 會自動向伺服器發出 HTTP POST 請求。此處定義的 Webhook 是預設的,將複製至所有新的儲存庫中。更多資訊請參考<a target="_blank" rel="noopener" href="%s">Webhook 指南</a>。
|
||||
users.local_import.description = 允許從伺服器的本機檔案系統匯入儲存庫。這可能是個安全問題。
|
||||
config.cache_test_slow = 快取測試成功,但是回應很慢:%s。
|
||||
users.activated.description = 完成電子郵件驗證。未啟動帳號的擁有者將無法登入,直至電子郵件驗證完成。
|
||||
auths.tips.oauth2.general.tip = 當註冊新的 OAuth2 驗證時,回呼/重新導向網址應該是:
|
||||
users.restricted.description = 僅允許與將此使用者新增為合作者的儲存庫和組織進行互動。這會阻止存取此站點上的公共儲存庫。
|
||||
users.admin.description = 授予此使用者透過網頁介面和 API 提供的所有管理功能的完全存取權。
|
||||
auths.tip.gitea = 註冊一個新的 OAuth2 應用程式。指南可在 %s 找到
|
||||
|
||||
|
||||
monitor.queue.activeworkers = 活躍工作者
|
||||
monitor.queue.settings.desc = 集區會根據工作者佇列的阻塞情況動態增長。
|
||||
|
||||
[action]
|
||||
create_repo=建立了儲存庫 <a href="%s">%s</a>
|
||||
rename_repo=重新命名儲存庫 <code>%[1]s</code> 為 <a href="%[2]s">%[3]s</a>
|
||||
|
@ -3454,7 +3573,7 @@ compare_commits=比較 %d 個提交
|
|||
compare_commits_general=比較提交
|
||||
mirror_sync_push=從鏡像同步了提交到 <a href="%[1]s">%[4]s</a> 的 <a href="%[2]s">%[3]s</a>
|
||||
mirror_sync_create=從鏡像同步了新參考 <a href="%[2]s">%[3]s</a> 到 <a href="%[1]s">%[4]s</a>
|
||||
mirror_sync_delete=從鏡像同步並從 <a href="%[1]s">%[3]s</a> 刪除了參考 <code>%[2]s</code>
|
||||
mirror_sync_delete=已從鏡像同步並從 <a href="%[1]s">%[3]s</a> 刪除了參考 <code>%[2]s</code>
|
||||
approve_pull_request=`核可了 <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
reject_pull_request=`提出了修改建議 <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||
publish_release=`發布了 <a href="%[1]s">%[3]s</a> 的 <a href="%[2]s"> "%[4]s" </a>`
|
||||
|
@ -3524,7 +3643,7 @@ error.unit_not_allowed=您未被允許存取此儲存庫區域。
|
|||
title=軟體包
|
||||
desc=管理儲存庫軟體包。
|
||||
empty=目前還沒有軟體包。
|
||||
empty.documentation=關於軟體包註冊中心的詳情請參閱<a target="_blank" rel="noopener noreferrer" href="%s">說明文件</a>。
|
||||
empty.documentation=關於軟體包註冊中心的詳情請參閱<a target="_blank" rel="noopener noreferrer" href="%s">文件</a>。
|
||||
empty.repo=已經上傳了一個軟體包,但是它不在這裡嗎?造訪<a href="%[1]s">軟體包設定</a>並將其連結到這個儲存庫。
|
||||
filter.type=類型
|
||||
filter.type.all=所有
|
||||
|
@ -3599,7 +3718,7 @@ npm.install=執行下列命令以使用 npm 安裝此軟體包:
|
|||
npm.install2=或將它加到 package.json 檔:
|
||||
npm.dependencies=相依性
|
||||
npm.dependencies.development=開發相依性
|
||||
npm.dependencies.peer=Peer 相依性
|
||||
npm.dependencies.peer=同行相依性
|
||||
npm.dependencies.optional=選用相依性
|
||||
npm.details.tag=標籤
|
||||
pub.install=執行下列命令以使用 Dart 安裝此軟體包:
|
||||
|
@ -3665,7 +3784,7 @@ arch.version.description = 描述
|
|||
arch.version.properties = 版本屬性
|
||||
arch.version.backup = 備份
|
||||
arch.version.conflicts = 衝突
|
||||
npm.dependencies.bundle = 已捆綁的依賴項
|
||||
npm.dependencies.bundle = 已捆綁相依性
|
||||
arch.version.provides = 提供
|
||||
arch.pacman.repo.multi.item = %s 的組態
|
||||
arch.version.replaces = 取代
|
||||
|
@ -3786,7 +3905,7 @@ variables.creation = 新增變數
|
|||
variables.none = 目前沒有變數。
|
||||
variables.deletion = 刪除變數
|
||||
variables.deletion.description = 刪除變數是永久且不可取消的。要繼續嗎?
|
||||
variables.creation.success = 變數 「%s」已成功被新增。
|
||||
variables.creation.success = 已新增變數 「%s」。
|
||||
variables.update.failed = 編輯變數失敗。
|
||||
runs.no_results = 沒有相符的結果。
|
||||
runs.no_workflows = 目前沒有任何工作流程。
|
||||
|
@ -3808,13 +3927,14 @@ workflow.dispatch.warn_input_limit = 僅顯示前 %d 個輸入。
|
|||
runs.no_job = 工作流程必須包含至少一項作業
|
||||
runs.expire_log_message = 日誌已被清除,因為它們太舊了。
|
||||
runs.no_job_without_needs = 工作流程必須包含至少一項沒有依賴性的作業。
|
||||
runs.no_matching_online_runner_helper = 沒有在線執行器匹配標籤:%s
|
||||
runs.no_matching_online_runner_helper = 沒有在線的執行器且匹配標籤:%s
|
||||
workflow.dispatch.success = 已成功請求工作流程運行。
|
||||
runs.no_workflows.documentation = 有關 Forgejo Actions 的更多資訊,請參閱<a target="_blank" rel="noopener noreferrer" href="%s">文件</a>。
|
||||
runners.reset_registration_token = 重置註冊符記
|
||||
workflow.dispatch.use_from = 使用工作流程自
|
||||
runs.no_workflows.help_no_write_access = 要了解 Forgejo Actions,請參閱<a target="_blank" rel="noopener noreferrer" href="%s">文件</a>。
|
||||
runs.no_workflows.help_write_access = 不知道如何開始使用 Forgejo Actions?查看<a target="_blank" rel="noopener noreferrer" href="%s">使用者文件中的快速入門</a>來編寫你的第一個工作流程,然後<a target="_blank" rel="noopener noreferrer" href="%s">設定 Forgejo Runner</a>來執行你的工作。
|
||||
variables.not_found = 找不到變數。
|
||||
|
||||
|
||||
[projects]
|
||||
|
@ -3861,6 +3981,8 @@ exact_tooltip = 只包含與搜尋詞完全相符的結合
|
|||
pull_kind = 搜尋拉取…
|
||||
regexp = 正規表示式
|
||||
regexp_tooltip = 將搜尋詞解釋為正規表示式
|
||||
union = 關鍵字
|
||||
union_tooltip = 包含與任何空格分隔的關鍵字相符的結果
|
||||
|
||||
[munits.data]
|
||||
eib = EiB
|
||||
|
@ -3878,3 +4000,8 @@ filepreview.line = %[2]s 中的第 %[1]d 行
|
|||
|
||||
[translation_meta]
|
||||
test = 好的
|
||||
|
||||
|
||||
[repo.permissions]
|
||||
ext_issues = 存取外部問題追蹤器的連結。權限由外部管理。
|
||||
ext_wiki = 存取外部 Wiki 的連結。權限由外部管理。
|
1307
package-lock.json
generated
1307
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
@ -23,7 +23,7 @@
|
|||
"dayjs": "1.11.12",
|
||||
"dropzone": "6.0.0-beta.2",
|
||||
"easymde": "2.18.0",
|
||||
"esbuild-loader": "4.2.2",
|
||||
"esbuild-loader": "4.3.0",
|
||||
"escape-goat": "4.0.0",
|
||||
"fast-glob": "3.3.3",
|
||||
"htmx.org": "1.9.12",
|
||||
|
@ -36,7 +36,7 @@
|
|||
"monaco-editor": "0.52.2",
|
||||
"monaco-editor-webpack-plugin": "7.1.0",
|
||||
"pdfobject": "2.3.0",
|
||||
"postcss": "8.5.1",
|
||||
"postcss": "8.5.2",
|
||||
"postcss-loader": "8.1.1",
|
||||
"postcss-nesting": "13.0.1",
|
||||
"pretty-ms": "9.0.0",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"vue-chartjs": "5.3.1",
|
||||
"vue-loader": "17.4.2",
|
||||
"vue3-calendar-heatmap": "2.0.5",
|
||||
"webpack": "5.97.1",
|
||||
"webpack": "5.98.0",
|
||||
"webpack-cli": "6.0.1",
|
||||
"wrap-ansi": "9.0.0"
|
||||
},
|
||||
|
@ -84,8 +84,8 @@
|
|||
"eslint-plugin-vue": "9.32.0",
|
||||
"eslint-plugin-vue-scoped-css": "2.9.0",
|
||||
"eslint-plugin-wc": "2.2.0",
|
||||
"globals": "15.14.0",
|
||||
"happy-dom": "16.8.1",
|
||||
"globals": "15.15.0",
|
||||
"happy-dom": "17.1.0",
|
||||
"license-checker-rseidelsohn": "4.4.2",
|
||||
"markdownlint-cli": "0.44.0",
|
||||
"postcss-html": "1.8.0",
|
||||
|
|
10
poetry.lock
generated
10
poetry.lock
generated
|
@ -44,12 +44,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "cssbeautifier"
|
||||
version = "1.15.1"
|
||||
version = "1.15.3"
|
||||
description = "CSS unobfuscator and beautifier."
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "cssbeautifier-1.15.1.tar.gz", hash = "sha256:9f7064362aedd559c55eeecf6b6bed65e05f33488dcbe39044f0403c26e1c006"},
|
||||
{file = "cssbeautifier-1.15.3-py3-none-any.whl", hash = "sha256:0dcaf5ce197743a79b3a160b84ea58fcbd9e3e767c96df1171e428125b16d410"},
|
||||
{file = "cssbeautifier-1.15.3.tar.gz", hash = "sha256:406b04d09e7d62c0be084fbfa2cba5126fe37359ea0d8d9f7b963a6354fc8303"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -114,12 +115,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "jsbeautifier"
|
||||
version = "1.15.1"
|
||||
version = "1.15.3"
|
||||
description = "JavaScript unobfuscator and beautifier."
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "jsbeautifier-1.15.1.tar.gz", hash = "sha256:ebd733b560704c602d744eafc839db60a1ee9326e30a2a80c4adb8718adc1b24"},
|
||||
{file = "jsbeautifier-1.15.3-py3-none-any.whl", hash = "sha256:b207a15ab7529eee4a35ae7790e9ec4e32a2b5026d51e2d0386c3a65e6ecfc91"},
|
||||
{file = "jsbeautifier-1.15.3.tar.gz", hash = "sha256:5f1baf3d4ca6a615bb5417ee861b34b77609eeb12875555f8bbfabd9bf2f3457"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
|
@ -70,8 +70,8 @@ func RepositoryInbox(ctx *context.APIContext) {
|
|||
|
||||
repository := ctx.Repo.Repository
|
||||
log.Info("RepositoryInbox: repo: %v", repository)
|
||||
|
||||
form := web.GetForm(ctx)
|
||||
// TODO: Decide between like/undo{like} activity
|
||||
httpStatus, title, err := federation.ProcessLikeActivity(ctx, form, repository.ID)
|
||||
if err != nil {
|
||||
ctx.Error(httpStatus, title, err)
|
||||
|
|
|
@ -62,6 +62,10 @@ func ListIssueComments(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/CommentList"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "422":
|
||||
// "$ref": "#/responses/validationError"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
before, since, err := context.GetQueryBeforeSince(ctx.Base)
|
||||
if err != nil {
|
||||
|
@ -70,6 +74,10 @@ func ListIssueComments(ctx *context.APIContext) {
|
|||
}
|
||||
issue, err := issues_model.GetIssueByIndex(ctx, ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
|
||||
if err != nil {
|
||||
if issues_model.IsErrIssueNotExist(err) {
|
||||
ctx.NotFound("IsErrIssueNotExist", err)
|
||||
return
|
||||
}
|
||||
ctx.Error(http.StatusInternalServerError, "GetRawIssueByIndex", err)
|
||||
return
|
||||
}
|
||||
|
@ -166,6 +174,10 @@ func ListIssueCommentsAndTimeline(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/TimelineList"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "422":
|
||||
// "$ref": "#/responses/validationError"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
before, since, err := context.GetQueryBeforeSince(ctx.Base)
|
||||
if err != nil {
|
||||
|
@ -174,6 +186,10 @@ func ListIssueCommentsAndTimeline(ctx *context.APIContext) {
|
|||
}
|
||||
issue, err := issues_model.GetIssueByIndex(ctx, ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
|
||||
if err != nil {
|
||||
if issues_model.IsErrIssueNotExist(err) {
|
||||
ctx.NotFound("IsErrIssueNotExist", err)
|
||||
return
|
||||
}
|
||||
ctx.Error(http.StatusInternalServerError, "GetRawIssueByIndex", err)
|
||||
return
|
||||
}
|
||||
|
@ -271,6 +287,10 @@ func ListRepoIssueComments(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/CommentList"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "422":
|
||||
// "$ref": "#/responses/validationError"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
before, since, err := context.GetQueryBeforeSince(ctx.Base)
|
||||
if err != nil {
|
||||
|
@ -378,9 +398,16 @@ func CreateIssueComment(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/notFound"
|
||||
// "423":
|
||||
// "$ref": "#/responses/repoArchivedError"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
form := web.GetForm(ctx).(*api.CreateIssueCommentOption)
|
||||
issue, err := issues_model.GetIssueByIndex(ctx, ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
|
||||
if err != nil {
|
||||
if issues_model.IsErrIssueNotExist(err) {
|
||||
ctx.NotFound("IsErrIssueNotExist", err)
|
||||
return
|
||||
}
|
||||
ctx.Error(http.StatusInternalServerError, "GetIssueByIndex", err)
|
||||
return
|
||||
}
|
||||
|
@ -449,6 +476,8 @@ func GetIssueComment(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/forbidden"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
comment := ctx.Comment
|
||||
|
||||
|
@ -511,6 +540,9 @@ func EditIssueComment(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/notFound"
|
||||
// "423":
|
||||
// "$ref": "#/responses/repoArchivedError"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
form := web.GetForm(ctx).(*api.EditIssueCommentOption)
|
||||
editIssueComment(ctx, *form)
|
||||
}
|
||||
|
@ -560,6 +592,8 @@ func EditIssueCommentDeprecated(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/forbidden"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
form := web.GetForm(ctx).(*api.EditIssueCommentOption)
|
||||
editIssueComment(ctx, *form)
|
||||
|
@ -626,8 +660,8 @@ func DeleteIssueComment(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/empty"
|
||||
// "403":
|
||||
// "$ref": "#/responses/forbidden"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
deleteIssueComment(ctx, issues_model.CommentTypeComment)
|
||||
}
|
||||
|
@ -665,8 +699,8 @@ func DeleteIssueCommentDeprecated(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/empty"
|
||||
// "403":
|
||||
// "$ref": "#/responses/forbidden"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "500":
|
||||
// "$ref": "#/responses/internalServerError"
|
||||
|
||||
deleteIssueComment(ctx, issues_model.CommentTypeComment)
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ func UpdateUserSettings(ctx *context.APIContext) {
|
|||
Theme: optional.FromPtr(form.Theme),
|
||||
DiffViewStyle: optional.FromPtr(form.DiffViewStyle),
|
||||
KeepEmailPrivate: optional.FromPtr(form.HideEmail),
|
||||
KeepPronounsPrivate: optional.FromPtr(form.HidePronouns),
|
||||
KeepActivityPrivate: optional.FromPtr(form.HideActivity),
|
||||
EnableRepoUnitHints: optional.FromPtr(form.EnableRepoUnitHints),
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ func AuthShared(ctx *context.Base, sessionStore auth_service.SessionStore, authM
|
|||
ctx.Data["SignedUserID"] = ar.Doer.ID
|
||||
ctx.Data["IsAdmin"] = ar.Doer.IsAdmin
|
||||
} else {
|
||||
ctx.Data["IsSigned"] = false
|
||||
ctx.Data["SignedUserID"] = int64(0)
|
||||
}
|
||||
return ar, nil
|
||||
|
|
|
@ -95,10 +95,9 @@ func stripSlashesMiddleware(next http.Handler) http.Handler {
|
|||
prevWasSlash = chr == '/'
|
||||
}
|
||||
|
||||
if rctx == nil {
|
||||
req.URL.Path = sanitizedPath.String()
|
||||
} else {
|
||||
rctx.RoutePath = sanitizedPath.String()
|
||||
req.URL.Path = sanitizedPath.String()
|
||||
if rctx != nil {
|
||||
rctx.RoutePath = req.URL.Path
|
||||
}
|
||||
next.ServeHTTP(resp, req)
|
||||
})
|
||||
|
|
|
@ -7,6 +7,9 @@ import (
|
|||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/modules/web"
|
||||
|
||||
chi "github.com/go-chi/chi/v5"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -43,6 +46,11 @@ func TestStripSlashesMiddleware(t *testing.T) {
|
|||
inputPath: "/user2//repo1/",
|
||||
expectedPath: "/user2/repo1",
|
||||
},
|
||||
{
|
||||
name: "path with slashes in the beginning",
|
||||
inputPath: "https://codeberg.org//user2/repo1/",
|
||||
expectedPath: "/user2/repo1",
|
||||
},
|
||||
{
|
||||
name: "path with slashes and query params",
|
||||
inputPath: "/repo//migrate?service_type=3",
|
||||
|
@ -56,15 +64,22 @@ func TestStripSlashesMiddleware(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
testMiddleware := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
r := web.NewRoute()
|
||||
r.Use(stripSlashesMiddleware)
|
||||
|
||||
called := false
|
||||
r.Get("*", func(w http.ResponseWriter, r *http.Request) {
|
||||
assert.Equal(t, tt.expectedPath, r.URL.Path)
|
||||
|
||||
rctx := chi.RouteContext(r.Context())
|
||||
assert.Equal(t, tt.expectedPath, rctx.RoutePath)
|
||||
|
||||
called = true
|
||||
})
|
||||
|
||||
// pass the test middleware to validate the changes
|
||||
handlerToTest := stripSlashesMiddleware(testMiddleware)
|
||||
// create a mock request to use
|
||||
req := httptest.NewRequest("GET", tt.inputPath, nil)
|
||||
// call the handler using a mock response recorder
|
||||
handlerToTest.ServeHTTP(httptest.NewRecorder(), req)
|
||||
r.ServeHTTP(httptest.NewRecorder(), req)
|
||||
assert.True(t, called)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ func autoSignIn(ctx *context.Context) (bool, error) {
|
|||
return false, nil
|
||||
}
|
||||
|
||||
u, err := user_model.VerifyUserAuthorizationToken(ctx, authCookie, auth.LongTermAuthorization, false)
|
||||
u, _, err := user_model.VerifyUserAuthorizationToken(ctx, authCookie, auth.LongTermAuthorization)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("VerifyUserAuthorizationToken: %w", err)
|
||||
}
|
||||
|
@ -171,6 +171,8 @@ func SignIn(ctx *context.Context) {
|
|||
context.SetCaptchaData(ctx)
|
||||
}
|
||||
|
||||
ctx.Data["DisablePassword"] = !setting.Service.EnableInternalSignIn
|
||||
|
||||
ctx.HTML(http.StatusOK, tplSignIn)
|
||||
}
|
||||
|
||||
|
@ -190,6 +192,7 @@ func SignInPost(ctx *context.Context) {
|
|||
ctx.Data["PageIsLogin"] = true
|
||||
ctx.Data["EnableSSPI"] = auth.IsSSPIEnabled(ctx)
|
||||
ctx.Data["EnableInternalSignIn"] = setting.Service.EnableInternalSignIn
|
||||
ctx.Data["DisablePassword"] = !setting.Service.EnableInternalSignIn
|
||||
|
||||
// Permission denied if EnableInternalSignIn is false
|
||||
if !setting.Service.EnableInternalSignIn {
|
||||
|
@ -669,7 +672,7 @@ func Activate(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
user, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.UserActivation, false)
|
||||
user, deleteToken, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.UserActivation)
|
||||
if err != nil {
|
||||
ctx.ServerError("VerifyUserAuthorizationToken", err)
|
||||
return
|
||||
|
@ -690,6 +693,11 @@ func Activate(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := deleteToken(); err != nil {
|
||||
ctx.ServerError("deleteToken", err)
|
||||
return
|
||||
}
|
||||
|
||||
handleAccountActivation(ctx, user)
|
||||
}
|
||||
|
||||
|
@ -738,7 +746,7 @@ func ActivatePost(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
user, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.UserActivation, true)
|
||||
user, deleteToken, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.UserActivation)
|
||||
if err != nil {
|
||||
ctx.ServerError("VerifyUserAuthorizationToken", err)
|
||||
return
|
||||
|
@ -767,6 +775,11 @@ func ActivatePost(ctx *context.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
if err := deleteToken(); err != nil {
|
||||
ctx.ServerError("deleteToken", err)
|
||||
return
|
||||
}
|
||||
|
||||
handleAccountActivation(ctx, user)
|
||||
}
|
||||
|
||||
|
@ -827,7 +840,7 @@ func ActivateEmail(ctx *context.Context) {
|
|||
code := ctx.FormString("code")
|
||||
emailStr := ctx.FormString("email")
|
||||
|
||||
u, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.EmailActivation(emailStr), true)
|
||||
u, deleteToken, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.EmailActivation(emailStr))
|
||||
if err != nil {
|
||||
ctx.ServerError("VerifyUserAuthorizationToken", err)
|
||||
return
|
||||
|
@ -837,6 +850,11 @@ func ActivateEmail(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := deleteToken(); err != nil {
|
||||
ctx.ServerError("deleteToken", err)
|
||||
return
|
||||
}
|
||||
|
||||
email, err := user_model.GetEmailAddressOfUser(ctx, emailStr, u.ID)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetEmailAddressOfUser", err)
|
||||
|
|
|
@ -44,6 +44,7 @@ func LinkAccount(ctx *context.Context) {
|
|||
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
||||
ctx.Data["AllowOnlyInternalRegistration"] = setting.Service.AllowOnlyInternalRegistration
|
||||
ctx.Data["ShowRegistrationButton"] = false
|
||||
ctx.Data["EnableInternalSignIn"] = true
|
||||
|
||||
// use this to set the right link into the signIn and signUp templates in the link_account template
|
||||
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
|
||||
|
@ -122,6 +123,7 @@ func LinkAccountPostSignIn(ctx *context.Context) {
|
|||
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
||||
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
||||
ctx.Data["ShowRegistrationButton"] = false
|
||||
ctx.Data["EnableInternalSignIn"] = true
|
||||
|
||||
// use this to set the right link into the signIn and signUp templates in the link_account template
|
||||
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
|
||||
|
|
|
@ -116,7 +116,7 @@ func commonResetPassword(ctx *context.Context, shouldDeleteToken bool) (*user_mo
|
|||
}
|
||||
|
||||
// Fail early, don't frustrate the user
|
||||
u, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.PasswordReset, shouldDeleteToken)
|
||||
u, deleteToken, err := user_model.VerifyUserAuthorizationToken(ctx, code, auth.PasswordReset)
|
||||
if err != nil {
|
||||
ctx.ServerError("VerifyUserAuthorizationToken", err)
|
||||
return nil, nil
|
||||
|
@ -127,6 +127,13 @@ func commonResetPassword(ctx *context.Context, shouldDeleteToken bool) (*user_mo
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
if shouldDeleteToken {
|
||||
if err := deleteToken(); err != nil {
|
||||
ctx.ServerError("deleteToken", err)
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
twofa, err := auth.GetTwoFactorByUID(ctx, u.ID)
|
||||
if err != nil {
|
||||
if !auth.IsErrTwoFactorNotEnrolled(err) {
|
||||
|
|
|
@ -21,7 +21,6 @@ import (
|
|||
"code.gitea.io/gitea/modules/base"
|
||||
"code.gitea.io/gitea/modules/charset"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/gitgraph"
|
||||
"code.gitea.io/gitea/modules/gitrepo"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/markup"
|
||||
|
@ -32,6 +31,7 @@ import (
|
|||
"code.gitea.io/gitea/services/forms"
|
||||
"code.gitea.io/gitea/services/gitdiff"
|
||||
git_service "code.gitea.io/gitea/services/repository"
|
||||
"code.gitea.io/gitea/services/repository/gitgraph"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -106,6 +106,7 @@ func ProfilePost(ctx *context.Context) {
|
|||
Location: optional.Some(form.Location),
|
||||
Visibility: optional.Some(form.Visibility),
|
||||
KeepActivityPrivate: optional.Some(form.KeepActivityPrivate),
|
||||
KeepPronounsPrivate: optional.Some(form.KeepPronounsPrivate),
|
||||
}
|
||||
if err := user_service.UpdateUser(ctx, ctx.Doer, opts); err != nil {
|
||||
ctx.ServerError("UpdateUser", err)
|
||||
|
|
|
@ -157,6 +157,17 @@ type swaggerAPIRepoArchivedError struct {
|
|||
Body APIRepoArchivedError `json:"body"`
|
||||
}
|
||||
|
||||
type APIInternalServerError struct {
|
||||
APIError
|
||||
}
|
||||
|
||||
// APIInternalServerError is an error that is raised when an internal server error occurs
|
||||
// swagger:response internalServerError
|
||||
type swaggerAPIInternalServerError struct {
|
||||
// in:body
|
||||
Body APIInternalServerError `json:"body"`
|
||||
}
|
||||
|
||||
// ServerError responds with error message, status is 500
|
||||
func (ctx *APIContext) ServerError(title string, err error) {
|
||||
ctx.Error(http.StatusInternalServerError, title, err)
|
||||
|
|
|
@ -1058,7 +1058,7 @@ func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context
|
|||
|
||||
if refType == RepoRefLegacy {
|
||||
// redirect from old URL scheme to new URL scheme
|
||||
prefix := strings.TrimPrefix(setting.AppSubURL+strings.ToLower(strings.TrimSuffix(ctx.Req.URL.Path, ctx.Params("*"))), strings.ToLower(ctx.Repo.RepoLink))
|
||||
prefix := strings.TrimPrefix(setting.AppSubURL+strings.ToLower(strings.TrimSuffix(ctx.Req.URL.Path, ctx.PathParamRaw("*"))), strings.ToLower(ctx.Repo.RepoLink))
|
||||
|
||||
ctx.Redirect(path.Join(
|
||||
ctx.Repo.RepoLink,
|
||||
|
|
|
@ -57,7 +57,7 @@ func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *ap
|
|||
Created: user.CreatedUnix.AsTime(),
|
||||
Restricted: user.IsRestricted,
|
||||
Location: user.Location,
|
||||
Pronouns: user.Pronouns,
|
||||
Pronouns: user.GetPronouns(signed),
|
||||
Website: user.Website,
|
||||
Description: user.Description,
|
||||
// counter's
|
||||
|
@ -97,6 +97,7 @@ func User2UserSettings(user *user_model.User) api.UserSettings {
|
|||
Description: user.Description,
|
||||
Theme: user.Theme,
|
||||
HideEmail: user.KeepEmailPrivate,
|
||||
HidePronouns: user.KeepPronounsPrivate,
|
||||
HideActivity: user.KeepActivityPrivate,
|
||||
DiffViewStyle: user.DiffViewStyle,
|
||||
EnableRepoUnitHints: user.EnableRepoUnitHints,
|
||||
|
|
|
@ -224,6 +224,7 @@ type UpdateProfileForm struct {
|
|||
Biography string `binding:"MaxSize(255)"`
|
||||
Visibility structs.VisibleType
|
||||
KeepActivityPrivate bool
|
||||
KeepPronounsPrivate bool
|
||||
}
|
||||
|
||||
// Validate validates the fields
|
||||
|
|
|
@ -40,6 +40,7 @@ type UpdateOptions struct {
|
|||
SetLastLogin bool
|
||||
RepoAdminChangeTeamAccess optional.Option[bool]
|
||||
EnableRepoUnitHints optional.Option[bool]
|
||||
KeepPronounsPrivate optional.Option[bool]
|
||||
}
|
||||
|
||||
func UpdateUser(ctx context.Context, u *user_model.User, opts *UpdateOptions) error {
|
||||
|
@ -97,6 +98,12 @@ func UpdateUser(ctx context.Context, u *user_model.User, opts *UpdateOptions) er
|
|||
cols = append(cols, "enable_repo_unit_hints")
|
||||
}
|
||||
|
||||
if opts.KeepPronounsPrivate.Has() {
|
||||
u.KeepPronounsPrivate = opts.KeepPronounsPrivate.Value()
|
||||
|
||||
cols = append(cols, "keep_pronouns_private")
|
||||
}
|
||||
|
||||
if opts.AllowGitHook.Has() {
|
||||
u.AllowGitHook = opts.AllowGitHook.Value()
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
<td>{{DateUtils.AbsoluteShort .CreatedUnix}}</td>
|
||||
<td><a href="{{AppSubUrl}}/admin/auths/{{.ID}}">{{svg "octicon-pencil"}}</a></td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="7">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -66,6 +66,8 @@
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="6">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
<td nowrap>{{DateUtils.AbsoluteShort .CreatedUnix}}</td>
|
||||
<td class="view-detail"><a href="#">{{svg "octicon-note" 16}}</a></td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="6">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
{{if .Notices}}
|
||||
|
|
|
@ -66,6 +66,8 @@
|
|||
<td>{{DateUtils.AbsoluteShort .CreatedUnix}}</td>
|
||||
<td><a href="{{.OrganisationLink}}/settings" data-tooltip-content="{{ctx.Locale.Tr "edit"}}">{{svg "octicon-pencil"}}</a></td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="7">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -74,6 +74,8 @@
|
|||
<td>{{DateUtils.AbsoluteShort .Version.CreatedUnix}}</td>
|
||||
<td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Paginater.Current}}&sort={{$.SortType}}" data-id="{{.Version.ID}}" data-name="{{.Package.Name}}" data-data-version="{{.Version.Version}}">{{svg "octicon-trash"}}</a></td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="10">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -86,6 +86,8 @@
|
|||
<td>{{DateUtils.AbsoluteShort .CreatedUnix}}</td>
|
||||
<td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Paginater.Current}}&sort={{$.SortType}}" data-id="{{.ID}}" data-name="{{.Name}}">{{svg "octicon-trash"}}</a></td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td class="tw-text-center" colspan="12">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -109,6 +109,8 @@
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr class="no-results-row"><td class="tw-text-center" colspan="9">{{ctx.Locale.Tr "no_results_found"}}</td></tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -95,6 +95,11 @@
|
|||
</span>
|
||||
</a>
|
||||
{{end}}
|
||||
{{if and .Issue.PullRequest.AllowMaintainerEdit .CanWriteCode}}
|
||||
<span id="editable-label" data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.editable_explanation"}}" class="ui small label">
|
||||
{{ctx.Locale.Tr "repo.pulls.editable"}}
|
||||
</span>
|
||||
{{end}}
|
||||
<span id="pull-desc-editor" class="tw-hidden flex-text-block" data-target-update-url="{{$.RepoLink}}/pull/{{.Issue.Index}}/target_branch">
|
||||
<div class="ui floating filter dropdown">
|
||||
<div class="ui basic small button tw-mr-0">
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<ul class="list">
|
||||
{{if $hasArchiveLinks}}
|
||||
<li>
|
||||
<a class="archive-link tw-flex-1 flex-text-inline tw-font-bold" href="{{$.RepoLink}}/archive/{{$release.TagName | PathEscapeSegments}}.zip" rel="nofollow">
|
||||
<a class="archive-link tw-flex-1 flex-text-inline tw-font-bold" href="{{$.RepoLink}}/archive/{{$release.TagName | PathEscapeSegments}}.zip" rel="nofollow" type="application/zip">
|
||||
{{svg "octicon-file-zip" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.source_code"}} (ZIP)
|
||||
</a>
|
||||
<div class="tw-mr-1">
|
||||
|
@ -83,7 +83,7 @@
|
|||
</span>
|
||||
</li>
|
||||
<li class="{{if $hasReleaseAttachment}}start-gap{{end}}">
|
||||
<a class="archive-link tw-flex-1 flex-text-inline tw-font-bold" href="{{$.RepoLink}}/archive/{{$release.TagName | PathEscapeSegments}}.tar.gz" rel="nofollow">
|
||||
<a class="archive-link tw-flex-1 flex-text-inline tw-font-bold" href="{{$.RepoLink}}/archive/{{$release.TagName | PathEscapeSegments}}.tar.gz" rel="nofollow" type="application/gzip">
|
||||
{{svg "octicon-file-zip" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.source_code"}} (TAR.GZ)
|
||||
</a>
|
||||
<div class="tw-mr-1">
|
||||
|
|
|
@ -1 +1 @@
|
|||
<a class="author text black tw-font-semibold muted"{{if gt .ID 0}} href="{{.HomeLink}}"{{end}}>{{.GetDisplayName}}</a>{{if .IsBot}}<span class="ui basic label tw-p-1">bot</span>{{end}}
|
||||
<a class="author text black tw-font-semibold muted"{{if gt .ID 0}} href="{{.HomeLink}}"{{end}}>{{.GetDisplayName}}</a>{{if .IsBot}}<span class="ui basic label tw-p-1 tw-align-baseline">bot</span>{{end}}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
</div>
|
||||
<div class="content tw-break-anywhere profile-avatar-name">
|
||||
{{if .ContextUser.FullName}}<span class="header text center">{{.ContextUser.FullName}}</span>{{end}}
|
||||
<span class="username text center">{{.ContextUser.Name}}{{if .ContextUser.Pronouns}} · {{.ContextUser.Pronouns}}{{end}} {{if .IsAdmin}}
|
||||
<span class="username text center">{{.ContextUser.Name}} {{if .ContextUser.GetPronouns .IsSigned}} · {{.ContextUser.GetPronouns .IsSigned}}{{end}} {{if .IsAdmin}}
|
||||
<a class="muted" href="{{AppSubUrl}}/admin/users/{{.ContextUser.ID}}" data-tooltip-content="{{ctx.Locale.Tr "admin.users.details"}}">
|
||||
{{svg "octicon-gear" 18}}
|
||||
</a>
|
||||
|
|
66
templates/swagger/v1_json.tmpl
generated
66
templates/swagger/v1_json.tmpl
generated
|
@ -8667,6 +8667,12 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"422": {
|
||||
"$ref": "#/responses/validationError"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8720,6 +8726,9 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -8760,8 +8769,8 @@
|
|||
"403": {
|
||||
"$ref": "#/responses/forbidden"
|
||||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -8823,6 +8832,9 @@
|
|||
},
|
||||
"423": {
|
||||
"$ref": "#/responses/repoArchivedError"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9959,6 +9971,12 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"422": {
|
||||
"$ref": "#/responses/validationError"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -10017,6 +10035,9 @@
|
|||
},
|
||||
"423": {
|
||||
"$ref": "#/responses/repoArchivedError"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10067,8 +10088,8 @@
|
|||
"403": {
|
||||
"$ref": "#/responses/forbidden"
|
||||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -10135,6 +10156,9 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11386,6 +11410,12 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"422": {
|
||||
"$ref": "#/responses/validationError"
|
||||
},
|
||||
"500": {
|
||||
"$ref": "#/responses/internalServerError"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20453,6 +20483,20 @@
|
|||
},
|
||||
"x-go-package": "code.gitea.io/gitea/services/context"
|
||||
},
|
||||
"APIInternalServerError": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": "string",
|
||||
"x-go-name": "Message"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"x-go-name": "URL"
|
||||
}
|
||||
},
|
||||
"x-go-package": "code.gitea.io/gitea/services/context"
|
||||
},
|
||||
"APIInvalidTopicsError": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -27910,6 +27954,10 @@
|
|||
"type": "boolean",
|
||||
"x-go-name": "HideEmail"
|
||||
},
|
||||
"hide_pronouns": {
|
||||
"type": "boolean",
|
||||
"x-go-name": "HidePronouns"
|
||||
},
|
||||
"language": {
|
||||
"type": "string",
|
||||
"x-go-name": "Language"
|
||||
|
@ -27962,6 +28010,10 @@
|
|||
"type": "boolean",
|
||||
"x-go-name": "HideEmail"
|
||||
},
|
||||
"hide_pronouns": {
|
||||
"type": "boolean",
|
||||
"x-go-name": "HidePronouns"
|
||||
},
|
||||
"language": {
|
||||
"type": "string",
|
||||
"x-go-name": "Language"
|
||||
|
@ -29165,6 +29217,12 @@
|
|||
"$ref": "#/definitions/APIForbiddenError"
|
||||
}
|
||||
},
|
||||
"internalServerError": {
|
||||
"description": "APIInternalServerError is an error that is raised when an internal server error occurs",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/APIInternalServerError"
|
||||
}
|
||||
},
|
||||
"invalidTopicsError": {
|
||||
"description": "APIInvalidTopicsError is error format response to invalid topics",
|
||||
"schema": {
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{if not .DisablePassword}}
|
||||
<div class="ui container fluid">
|
||||
{{template "user/auth/webauthn_error" .}}
|
||||
|
||||
|
@ -65,3 +66,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
|
|
|
@ -120,6 +120,12 @@
|
|||
{{ctx.Locale.Tr "settings.keep_activity_private"}}
|
||||
<span class="help">{{ctx.Locale.Tr "settings.keep_activity_private.description" (printf "/%s?tab=activity" .SignedUser.Name)}}</span>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<input name="keep_pronouns_private" type="checkbox" {{if .SignedUser.KeepPronounsPrivate}}checked{{end}}>
|
||||
{{ctx.Locale.Tr "settings.keep_pronouns_private"}}
|
||||
<span class="help">{{ctx.Locale.Tr "settings.keep_pronouns_private.description"}}</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<button class="ui primary button">{{ctx.Locale.Tr "settings.update_profile"}}</button>
|
||||
|
|
25
tests/e2e/pr-title.test.e2e.ts
Normal file
25
tests/e2e/pr-title.test.e2e.ts
Normal file
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// @watch start
|
||||
// templates/repo/issue/view_title.tmpl
|
||||
// web_src/js/features/repo-issue.js
|
||||
// @watch end
|
||||
|
||||
import {expect} from '@playwright/test';
|
||||
import {save_visual, test} from './utils_e2e.ts';
|
||||
|
||||
test.use({user: 'user2'});
|
||||
|
||||
test('PR: title edit', async ({page}) => {
|
||||
const response = await page.goto('/user2/repo1/pulls/5');
|
||||
expect(response?.status()).toBe(200);
|
||||
|
||||
await expect(page.locator('#editable-label')).toBeVisible();
|
||||
await save_visual(page);
|
||||
|
||||
// Labels AGit and Editable are hidden when title is in edit mode
|
||||
await page.locator('#issue-title-edit-show').click();
|
||||
await expect(page.locator('#editable-label')).toBeHidden();
|
||||
await save_visual(page);
|
||||
});
|
|
@ -43,10 +43,17 @@ test('External Release Attachments', async ({page, isMobile}) => {
|
|||
// Validate release page and click edit
|
||||
await expect(page).toHaveURL('/user2/repo2/releases');
|
||||
await expect(page.locator('.download[open] li')).toHaveCount(3);
|
||||
|
||||
await expect(page.locator('.download[open] li:nth-of-type(1)')).toContainText('Source code (ZIP)');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(1) span[data-tooltip-content]')).toHaveAttribute('data-tooltip-content', 'This attachment is automatically generated.');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(1) a')).toHaveAttribute('href', '/user2/repo2/archive/2.0.zip');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(1) a')).toHaveAttribute('type', 'application/zip');
|
||||
|
||||
await expect(page.locator('.download[open] li:nth-of-type(2)')).toContainText('Source code (TAR.GZ)');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(2) span[data-tooltip-content]')).toHaveAttribute('data-tooltip-content', 'This attachment is automatically generated.');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(2) a')).toHaveAttribute('href', '/user2/repo2/archive/2.0.tar.gz');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(2) a')).toHaveAttribute('type', 'application/gzip');
|
||||
|
||||
await expect(page.locator('.download[open] li:nth-of-type(3)')).toContainText('Test');
|
||||
await expect(page.locator('.download[open] li:nth-of-type(3) a')).toHaveAttribute('href', 'https://forgejo.org/');
|
||||
await save_visual(page);
|
||||
|
|
|
@ -25,6 +25,8 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
const IssueIDNotExist = 10000
|
||||
|
||||
func TestAPIListRepoComments(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
|
@ -89,6 +91,10 @@ func TestAPIListIssueComments(t *testing.T) {
|
|||
expectedCount := unittest.GetCount(t, &issues_model.Comment{IssueID: issue.ID},
|
||||
unittest.Cond("type = ?", issues_model.CommentTypeComment))
|
||||
assert.Len(t, comments, expectedCount)
|
||||
|
||||
req = NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues/%d/comments", repoOwner.Name, repo.Name, IssueIDNotExist).
|
||||
AddTokenAuth(token)
|
||||
MakeRequest(t, req, http.StatusNotFound)
|
||||
}
|
||||
|
||||
func TestAPICreateComment(t *testing.T) {
|
||||
|
@ -111,6 +117,13 @@ func TestAPICreateComment(t *testing.T) {
|
|||
DecodeJSON(t, resp, &updatedComment)
|
||||
assert.EqualValues(t, commentBody, updatedComment.Body)
|
||||
unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: updatedComment.ID, IssueID: issue.ID, Content: commentBody})
|
||||
|
||||
urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/comments",
|
||||
repoOwner.Name, repo.Name, IssueIDNotExist)
|
||||
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
||||
"body": commentBody,
|
||||
}).AddTokenAuth(token)
|
||||
MakeRequest(t, req, http.StatusNotFound)
|
||||
}
|
||||
|
||||
func TestAPICreateCommentAutoDate(t *testing.T) {
|
||||
|
@ -464,4 +477,7 @@ func TestAPIListIssueTimeline(t *testing.T) {
|
|||
DecodeJSON(t, resp, &comments)
|
||||
expectedCount := unittest.GetCount(t, &issues_model.Comment{IssueID: issue.ID})
|
||||
assert.Len(t, comments, expectedCount)
|
||||
|
||||
req = NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues/%d/timeline", repoOwner.Name, repo.Name, IssueIDNotExist)
|
||||
MakeRequest(t, req, http.StatusNotFound)
|
||||
}
|
||||
|
|
|
@ -283,7 +283,7 @@ func TestLDAPUserSyncWithEmptyUsernameAttribute(t *testing.T) {
|
|||
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
|
||||
tr := htmlDoc.doc.Find("table.table tbody tr")
|
||||
tr := htmlDoc.doc.Find("table.table tbody tr:not(.no-results-row)")
|
||||
assert.Equal(t, 0, tr.Length())
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue