Compare commits

...

38 Commits

Author SHA1 Message Date
Lunny Xiao
34182c87ec release notes for v1.1.4 2017-09-04 15:34:29 +02:00
Lunny Xiao
c401788383
bug fixed 2017-09-04 14:27:53 +08:00
Ethan Koenig
8335b556d1 Fix rendering of external links (#2292) (#2315) 2017-08-17 15:03:41 +08:00
Lunny Xiao
09fff9e1c1 fix 500 error when view an issue which's milestone deleted (#2297) (#2299) 2017-08-14 10:45:06 +08:00
Lunny Xiao
622552b709 Fix deleted milestone bug (#1942) (#2300)
* Fix deleted milestone bug

* Use locale for ghost milestone name

* Fix pointer bug
2017-08-13 19:18:57 -03:00
Lunny Xiao
1709297701 Fix SHA1 hash linking (#2143) (#2293)
This changes the regex to look for a hash from 7 to 40 characters,
to match the use of abbreviated hash lookups in both git and github.
The restriction of not being a pure number is also removed because
1234567 is now considered a valid abbreviated hash, as is deadbeef.

A note has been added to the top of the code to state that the
literal regex match is fine, but no extra validation is currently
performed so some false positives are expected.

A future change could ensure that the hash exists in the repository
before rendering it as a link, although this might incur a slight
performance penalty.

Reverts part of commit 4a46613 and fixes #2053.
2017-08-12 09:32:56 +08:00
Bo-Yi Wu
5fe8fee933 back port from #1709 (#2291)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2017-08-11 10:32:26 +08:00
Bo-Yi Wu
5bb20be8b2 update sig file (#2269)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2017-08-06 21:56:17 +03:00
Lunny Xiao
06a554c22a ignore coverage for release (#2263) 2017-08-05 12:14:59 +03:00
Lunny Xiao
00bd47ae5c add changelog of release v1.1.3 (#2251) 2017-08-03 16:50:21 +08:00
Lunny Xiao
b20f1ab47f
fix some bug 2017-07-28 14:36:18 +08:00
Ethan Koenig
9a7f59ef35 Fix fast-forward PR bug (#2137)
* Fix fast-forward PR bug

* Don't ignore error in getMergeCommit (#1843)
2017-07-11 09:51:39 -05:00
Ethan Koenig
6a6f0616f2 Fix diff of renamed and modified file (#2136) 2017-07-11 02:19:10 -05:00
Ethan Koenig
6caf04c129 Don't ignore gravatar error (#2138) 2017-07-11 01:00:43 -05:00
Antoine GIRARD
406f5de18c Fix missing less sources for oauth (backport #1288) (#2135) 2017-07-11 09:25:30 +08:00
Andrey Nering
39cb1ac517 Merge pull request #2043 from lunny/lunny/fix_markdown_render_list
Fix markdown rendering (#1530)
2017-06-23 10:17:45 -03:00
Morlinest
58dcbaf20b
Fix markdown rendering (#1530) 2017-06-23 17:19:38 +08:00
Kim "BKC" Carlbäcker
5f212ff4e9 Fix PR template error (#2008) 2017-06-19 09:18:53 +02:00
Ethan Koenig
45fa822ac4 Fix PR template error 2017-06-18 22:01:20 -04:00
Kim "BKC" Carlbäcker
1ac8646845 Merge pull request #1944 from appleboy/release/v1.1
[ci skip] add 1.1.2 change log.
2017-06-12 15:26:43 +02:00
Bo-Yi Wu
13e284c7cf
[ci skip] add 1.1.2 change log.
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2017-06-12 17:04:29 +08:00
Lunny Xiao
bbe6aa349f fix bug not to trim space of login username (#1806) 2017-05-29 06:10:11 -05:00
agrn
4fd55d8796 Backport bugfixes #1220 and #1393 to v1.1 (#1758)
* Fix "Error: No issue number specified"  when pushing

* fix wrong log when push to a new branch (#1220)

* Removing empty file modules/github/issues.go
2017-05-20 12:43:43 +08:00
Jonas Östanbäck
daaabaa1d9 Enforce netgo build tag while cross-compilation (Backport of #1690) (#1731) 2017-05-18 09:04:12 +08:00
Lunny Xiao
fa059debca fix delete user failed on sqlite (#1321) 2017-05-17 12:43:22 +02:00
Kim "BKC" Carlbäcker
2854c8aa47 Merge pull request #1724 from lunny/lunny/fix_avatar_update
fix update avatar
2017-05-15 17:16:31 +02:00
Lunny Xiao
506c98df5b
fix update avatar 2017-05-14 13:39:53 +08:00
Kim "BKC" Carlbäcker
f9859a2991 Update changelog with v1.1.1 2017-05-04 18:29:26 +02:00
Kim "BKC" Carlbäcker
473df53533 [backport] fix sanitation (#1646)
* Santiation fix from Gogs

- Add code-injection checks

* Fix SSH-breakage
2017-04-30 17:55:16 +08:00
Philippe Kueck
2482c67e2b backport of PR #1257 for release/v1.1: rewrite pre-commit, post-commit and options hooks (#1376)
* issue #1250, replace {pre,post}-receive and update hooks with a single shell script that does not require custom hooks to be a sh-script

* issue #1250, make script posix compilant

* v23, add migration script to update {pre,post}-receive and update hooks

* migration: use a more common name and rename v23 to v26 to avoid conflicts

* gofmt'ed and added copyright header

* fix SyncRepositoryHooks to also sync wiki repos

* no migration for you.
2017-03-28 15:47:59 +08:00
Lunny Xiao
d9bdf7a65d fix migration failed when authorized_keys is not exist (#1375)
* fix wiki bugs (#1294)

* fix migration failed when authorized_keys is not exist
2017-03-23 23:07:30 +08:00
Lunny Xiao
11ad296347 fix wiki bugs (#1294) (#1338) 2017-03-20 22:54:33 +08:00
Lunny Xiao
5fad54248f fix forget migration for wiki hooks (#1227) (#1237) 2017-03-17 13:01:33 +08:00
Philippe Kueck
2b5e4b4d96 fix #1189, commit messages containing a pipe (#1218)
(d680164f11)
2017-03-16 19:41:19 +08:00
Lunny Xiao
65eea82c3e fix repo settings external tracker failed and check external urls (#1215) (#1236) 2017-03-13 16:23:00 +08:00
Lunny Xiao
fac75b8086 Fix upgrade failed after ever rollback (#1194) (#1197)
* fix upgrade failed after rollback

* fix upgrade failed after rollback

* fix possible upgrade twice fail after rollback
2017-03-11 17:01:22 +08:00
Lunny Xiao
e4706127f9 bug fixed for delete repo failed (#1193) (#1195) 2017-03-10 22:28:00 +08:00
Lunny Xiao
c9baf9d14b fix ini format incomiptable with crowdin (#1177) (#1192) 2017-03-10 20:59:51 +08:00
51 changed files with 803 additions and 488 deletions

View File

@ -57,11 +57,11 @@ pipeline:
when:
event: [ push, tag, pull_request ]
coverage:
image: plugins/coverage
server: https://coverage.gitea.io
when:
event: [ push, tag, pull_request ]
# coverage:
# image: plugins/coverage
# server: https://coverage.gitea.io
# when:
# event: [ push, tag, pull_request ]
docker:
image: plugins/docker

View File

@ -1 +1 @@
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgY292ZXJhZ2U6CiAgICBpbWFnZTogcGx1Z2lucy9jb3ZlcmFnZQogICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfVEFHIyN2fScgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnbGF0ZXN0JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX1RBRyMjdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX0JSQU5DSCMjcmVsZWFzZS92fQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyByZWxlYXNlLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvbWFzdGVyCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIGdpdGh1YjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdGh1Yi1yZWxlYXNlCiAgICBmaWxlczoKICAgICAgLSBkaXN0L3JlbGVhc2UvKgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZ2l0dGVyOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0dGVyCgpzZXJ2aWNlczoKICBteXNxbDoKICAgIGltYWdlOiBteXNxbDo1LjcKICAgIGVudmlyb25tZW50OgogICAgICAtIE1ZU1FMX0RBVEFCQVNFPXRlc3QKICAgICAgLSBNWVNRTF9BTExPV19FTVBUWV9QQVNTV09SRD15ZXMKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgcGdzcWw6CiAgICBpbWFnZTogcG9zdGdyZXM6OS41CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19EQj10ZXN0CiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCg.hp6IsxbFIQOaxJdmGv32Vf34-Nra3KqVIWzH52W687I
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgIyBjb3ZlcmFnZToKICAjICAgaW1hZ2U6IHBsdWdpbnMvY292ZXJhZ2UKICAjICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgIyAgIHdoZW46CiAgIyAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBkb2NrZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb2NrZXIKICAgIHJlcG86IGdpdGVhL2dpdGVhCiAgICB0YWdzOiBbICcke0RST05FX1RBRyMjdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfQlJBTkNIIyNyZWxlYXNlL3Z9JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIHJlbGVhc2UvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJ2xhdGVzdCcgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9UQUcjI3Z9CiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgcmVsZWFzZToKICAgIGltYWdlOiBwbHVnaW5zL3MzCiAgICBwYXRoX3N0eWxlOiB0cnVlCiAgICBzdHJpcF9wcmVmaXg6IGRpc3QvcmVsZWFzZS8KICAgIHNvdXJjZTogZGlzdC9yZWxlYXNlLyoKICAgIHRhcmdldDogL2dpdGVhL21hc3RlcgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICBnaXRodWI6CiAgICBpbWFnZTogcGx1Z2lucy9naXRodWItcmVsZWFzZQogICAgZmlsZXM6CiAgICAgIC0gZGlzdC9yZWxlYXNlLyoKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGdpdHRlcjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdHRlcgoKc2VydmljZXM6CiAgbXlzcWw6CiAgICBpbWFnZTogbXlzcWw6NS43CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNWVNRTF9EQVRBQkFTRT10ZXN0CiAgICAgIC0gTVlTUUxfQUxMT1dfRU1QVFlfUEFTU1dPUkQ9eWVzCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHBnc3FsOgogICAgaW1hZ2U6IHBvc3RncmVzOjkuNQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfREI9dGVzdAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQo.uf02h57dWfCrxG3rcNcYlZPQP2XsFhKvcF2geGTpG50

View File

@ -1,5 +1,48 @@
# Changelog
## [1.1.4](https://github.com/go-gitea/gitea/releases/tag/v1.1.4) - 2017-09-04
* BUGFIXES
* Fix rendering of external links (#2292) (#2315)
* Fix deleted milestone bug (#1942) (#2300)
* fix 500 error when view an issue which's milestone deleted (#2297) (#2299)
* Fix SHA1 hash linking (#2143) (#2293)
* back port from #1709 (#2291)
## [1.1.3](https://github.com/go-gitea/gitea/releases/tag/v1.1.3) - 2017-08-03
* BUGFIXES
* Fix PR template error (#2008)
* Fix markdown rendering (fix #1530) (#2043)
* Fix missing less sources for oauth (backport #1288) (#2135)
* Don't ignore gravatar error (#2138)
* Fix diff of renamed and modified file (#2136)
* Fix fast-forward PR bug (#2137)
* Fix some security bugs
## [1.1.2](https://github.com/go-gitea/gitea/releases/tag/v1.1.2) - 2017-06-13
* BUGFIXES
* Enforce netgo build tag while cross-compilation (Backport of #1690) (#1731)
* fix update avatar
* fix delete user failed on sqlite (#1321)
* fix bug not to trim space of login username (#1806)
* Backport bugfixes #1220 and #1393 to v1.1 (#1758)
## [1.1.1](https://github.com/go-gitea/gitea/releases/tag/v1.1.1) - 2017-05-04
* BUGFIXES
* Markdown Sanitation Fix [#1646](https://github.com/go-gitea/gitea/pull/1646)
* Fix broken hooks [#1376](https://github.com/go-gitea/gitea/pull/1376)
* Fix migration issue [#1375](https://github.com/go-gitea/gitea/pull/1375)
* Fix Wiki Issues [#1338](https://github.com/go-gitea/gitea/pull/1338)
* Forgotten migration for wiki githooks [#1237](https://github.com/go-gitea/gitea/pull/1237)
* Commit messages can contain pipes [#1218](https://github.com/go-gitea/gitea/pull/1218)
* Verify external tracker URLs [#1236](https://github.com/go-gitea/gitea/pull/1236)
* Allow upgrade after downgrade [#1197](https://github.com/go-gitea/gitea/pull/1197)
* 500 on delete repo with issue [#1195](https://github.com/go-gitea/gitea/pull/1195)
* INI compat with CrowdIn [#1192](https://github.com/go-gitea/gitea/pull/1192)
## [1.1.0](https://github.com/go-gitea/gitea/releases/tag/v1.1.0) - 2017-03-09
* BREAKING

View File

@ -112,7 +112,7 @@ release-windows:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
go get -u github.com/karalabe/xgo; \
fi
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
ifeq ($(CI),drone)
mv /build/* $(DIST)/binaries
endif
@ -122,7 +122,7 @@ release-linux:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
go get -u github.com/karalabe/xgo; \
fi
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) .
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) .
ifeq ($(CI),drone)
mv /build/* $(DIST)/binaries
endif
@ -132,7 +132,7 @@ release-darwin:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
go get -u github.com/karalabe/xgo; \
fi
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out gitea-$(VERSION) .
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out gitea-$(VERSION) .
ifeq ($(CI),drone)
mv /build/* $(DIST)/binaries
endif

View File

@ -360,7 +360,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
issue, err := GetIssueByRef(ref)
if err != nil {
if IsErrIssueNotExist(err) {
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
continue
}
return err
@ -398,7 +398,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
issue, err := GetIssueByRef(ref)
if err != nil {
if IsErrIssueNotExist(err) {
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
continue
}
return err
@ -438,7 +438,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
issue, err := GetIssueByRef(ref)
if err != nil {
if IsErrIssueNotExist(err) {
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
continue
}
return err

View File

@ -9,8 +9,8 @@ import "github.com/markbates/goth"
// ExternalLoginUser makes the connecting between some existing user and additional external login sources
type ExternalLoginUser struct {
ExternalID string `xorm:"NOT NULL"`
UserID int64 `xorm:"NOT NULL"`
LoginSourceID int64 `xorm:"NOT NULL"`
UserID int64 `xorm:"NOT NULL"`
LoginSourceID int64 `xorm:"NOT NULL"`
}
// GetExternalLogin checks if a externalID in loginSourceID scope already exists
@ -67,8 +67,8 @@ func RemoveAccountLink(user *User, loginSourceID int64) (int64, error) {
return deleted, err
}
// RemoveAllAccountLinks will remove all external login sources for the given user
func RemoveAllAccountLinks(user *User) error {
_, err := x.Delete(&ExternalLoginUser{UserID: user.ID})
// removeAllAccountLinks will remove all external login sources for the given user
func removeAllAccountLinks(e Engine, user *User) error {
_, err := e.Delete(&ExternalLoginUser{UserID: user.ID})
return err
}

View File

@ -366,10 +366,12 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
}
curFile = &DiffFile{
Name: a,
Index: len(diff.Files) + 1,
Type: DiffFileChange,
Sections: make([]*DiffSection, 0, 10),
Name: b,
OldName: a,
Index: len(diff.Files) + 1,
Type: DiffFileChange,
Sections: make([]*DiffSection, 0, 10),
IsRenamed: a != b,
}
diff.Files = append(diff.Files, curFile)
if len(diff.Files) >= maxFiles {
@ -402,9 +404,6 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
curFile.Type = DiffFileChange
case strings.HasPrefix(line, "similarity index 100%"):
curFile.Type = DiffFileRename
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
}
if curFile.Type > 0 {
if strings.HasSuffix(line, " 160000\n") {

View File

@ -78,8 +78,8 @@ func graphItemFromString(s string, r *git.Repository) (GraphItem, error) {
return GraphItem{}, fmt.Errorf("Failed parsing grap line:%s. Expect 1 or two fields", s)
}
rows := strings.Split(data, "|")
if len(rows) != 8 {
rows := strings.SplitN(data, "|", 8)
if len(rows) < 8 {
return GraphItem{}, fmt.Errorf("Failed parsing grap line:%s - Should containt 8 datafields", s)
}

View File

@ -146,7 +146,7 @@ func (issue *Issue) loadAttributes(e Engine) (err error) {
if issue.Milestone == nil && issue.MilestoneID > 0 {
issue.Milestone, err = getMilestoneByRepoID(e, issue.RepoID, issue.MilestoneID)
if err != nil {
if err != nil && !IsErrMilestoneNotExist(err) {
return fmt.Errorf("getMilestoneByRepoID [repo_id: %d, milestone_id: %d]: %v", issue.RepoID, issue.MilestoneID, err)
}
}

View File

@ -231,12 +231,9 @@ func (c *Comment) LoadMilestone() error {
has, err := x.ID(c.OldMilestoneID).Get(&oldMilestone)
if err != nil {
return err
} else if !has {
return ErrMilestoneNotExist{
ID: c.OldMilestoneID,
}
} else if has {
c.OldMilestone = &oldMilestone
}
c.OldMilestone = &oldMilestone
}
if c.MilestoneID > 0 {
@ -244,12 +241,9 @@ func (c *Comment) LoadMilestone() error {
has, err := x.ID(c.MilestoneID).Get(&milestone)
if err != nil {
return err
} else if !has {
return ErrMilestoneNotExist{
ID: c.MilestoneID,
}
} else if has {
c.Milestone = &milestone
}
c.Milestone = &milestone
}
return nil
}

View File

@ -635,7 +635,12 @@ func UserSignIn(username, password string) (*User, error) {
}
}
} else {
user = &User{LowerName: strings.ToLower(strings.TrimSpace(username))}
trimmedUsername := strings.TrimSpace(username)
if len(trimmedUsername) == 0 {
return nil, ErrUserNotExist{0, username, 0}
}
user = &User{LowerName: strings.ToLower(trimmedUsername)}
}
hasUser, err := x.Get(user)

View File

@ -92,6 +92,8 @@ var migrations = []Migration{
NewMigration("use new avatar path name for security reason", useNewNameAvatars),
// v21 -> v22
NewMigration("rewrite authorized_keys file via new format", useNewPublickeyFormat),
// v21 -> v22
NewMigration("generate and migrate wiki Git hooks", generateAndMigrateWikiGitHooks),
}
// Migrate database to current version

View File

@ -59,6 +59,12 @@ func addUnitsToTables(x *xorm.Engine) error {
}
var repoUnit RepoUnit
if exist, err := sess.IsTableExist(&repoUnit); err != nil {
return fmt.Errorf("IsExist RepoUnit: %v", err)
} else if exist {
return nil
}
if err := sess.CreateTable(&repoUnit); err != nil {
return fmt.Errorf("CreateTable RepoUnit: %v", err)
}

View File

@ -60,8 +60,14 @@ func generateAndMigrateGitHooks(x *xorm.Engine) (err error) {
oldHookPath := filepath.Join(hookDir, hookName)
newHookPath := filepath.Join(hookDir, hookName+".d", "gitea")
if err = os.MkdirAll(filepath.Join(hookDir, hookName+".d"), os.ModePerm); err != nil {
return fmt.Errorf("create hooks dir '%s': %v", filepath.Join(hookDir, hookName+".d"), err)
customHooksDir := filepath.Join(hookDir, hookName+".d")
// if it's exist, that means you have upgraded ever
if com.IsExist(customHooksDir) {
continue
}
if err = os.MkdirAll(customHooksDir, os.ModePerm); err != nil {
return fmt.Errorf("create hooks dir '%s': %v", customHooksDir, err)
}
// WARNING: Old server-side hooks will be moved to sub directory with the same name

View File

@ -13,6 +13,7 @@ import (
"path/filepath"
"strconv"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"github.com/go-xorm/xorm"
@ -33,6 +34,7 @@ func useNewNameAvatars(x *xorm.Engine) error {
}
type User struct {
ID int64 `xorm:"pk autoincr"`
Avatar string
UseCustomAvatar bool
}
@ -40,7 +42,8 @@ func useNewNameAvatars(x *xorm.Engine) error {
for _, name := range names {
userID, err := strconv.ParseInt(name, 10, 64)
if err != nil {
return err
log.Warn("ignore avatar %s rename: %v", name, err)
continue
}
var user User

View File

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
)
@ -21,6 +22,10 @@ const (
func useNewPublickeyFormat(x *xorm.Engine) error {
fpath := filepath.Join(setting.SSH.RootPath, "authorized_keys")
if !com.IsExist(fpath) {
return nil
}
tmpPath := fpath + ".tmp"
f, err := os.OpenFile(tmpPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {

94
models/migrations/v22.go Normal file
View File

@ -0,0 +1,94 @@
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
)
func generateAndMigrateWikiGitHooks(x *xorm.Engine) (err error) {
type Repository struct {
ID int64
OwnerID int64
Name string
}
type User struct {
ID int64
Name string
}
var (
hookNames = []string{"pre-receive", "update", "post-receive"}
hookTpls = []string{
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/pre-receive.d\"`; do\n sh \"$SHELL_FOLDER/pre-receive.d/$i\"\ndone", setting.ScriptType),
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/update.d\"`; do\n sh \"$SHELL_FOLDER/update.d/$i\" $1 $2 $3\ndone", setting.ScriptType),
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/post-receive.d\"`; do\n sh \"$SHELL_FOLDER/post-receive.d/$i\"\ndone", setting.ScriptType),
}
giteaHookTpls = []string{
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' pre-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf),
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' update $1 $2 $3\n", setting.ScriptType, setting.AppPath, setting.CustomConf),
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' post-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf),
}
)
return x.Where("id > 0").Iterate(new(Repository),
func(idx int, bean interface{}) error {
repo := bean.(*Repository)
user := new(User)
has, err := x.Where("id = ?", repo.OwnerID).Get(user)
if err != nil {
return fmt.Errorf("query owner of repository [repo_id: %d, owner_id: %d]: %v", repo.ID, repo.OwnerID, err)
} else if !has {
return nil
}
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(user.Name), strings.ToLower(repo.Name)) + ".wiki.git"
if !com.IsExist(repoPath) {
return nil
}
hookDir := filepath.Join(repoPath, "hooks")
for i, hookName := range hookNames {
oldHookPath := filepath.Join(hookDir, hookName)
newHookPath := filepath.Join(hookDir, hookName+".d", "gitea")
customHooksDir := filepath.Join(hookDir, hookName+".d")
// if it's exist, that means you have upgraded ever
if com.IsExist(customHooksDir) {
continue
}
if err = os.MkdirAll(customHooksDir, os.ModePerm); err != nil {
return fmt.Errorf("create hooks dir '%s': %v", customHooksDir, err)
}
// WARNING: Old server-side hooks will be moved to sub directory with the same name
if hookName != "update" && com.IsExist(oldHookPath) {
newPlace := filepath.Join(hookDir, hookName+".d", hookName)
if err = os.Rename(oldHookPath, newPlace); err != nil {
return fmt.Errorf("Remove old hook file '%s' to '%s': %v", oldHookPath, newPlace, err)
}
}
if err = ioutil.WriteFile(oldHookPath, []byte(hookTpls[i]), 0777); err != nil {
return fmt.Errorf("write old hook file '%s': %v", oldHookPath, err)
}
if err = ioutil.WriteFile(newHookPath, []byte(giteaHookTpls[i]), 0777); err != nil {
return fmt.Errorf("write new hook file '%s': %v", oldHookPath, err)
}
}
return nil
})
}

View File

@ -499,9 +499,15 @@ func (pr *PullRequest) getMergeCommit() (*git.Commit, error) {
return nil, fmt.Errorf("git merge-base --is-ancestor: %v %v", stderr, err)
}
// We can ignore this error since we only get here when there's a valid commit in headFile
commitID, _ := ioutil.ReadFile(pr.BaseRepo.RepoPath() + "/" + headFile)
cmd := string(commitID)[:40] + ".." + pr.BaseBranch
commitIDBytes, err := ioutil.ReadFile(pr.BaseRepo.RepoPath() + "/" + headFile)
if err != nil {
return nil, fmt.Errorf("ReadFile(%s): %v", headFile, err)
}
commitID := string(commitIDBytes)
if len(commitID) < 40 {
return nil, fmt.Errorf(`ReadFile(%s): invalid commit-ID "%s"`, headFile, commitID)
}
cmd := commitID[:40] + ".." + pr.BaseBranch
// Get the commit from BaseBranch where the pull request got merged
mergeCommit, stderr, err := process.GetManager().ExecDirEnv(-1, "", fmt.Sprintf("isMerged (git rev-list --ancestry-path --merges --reverse): %d", pr.BaseRepo.ID),
@ -510,6 +516,9 @@ func (pr *PullRequest) getMergeCommit() (*git.Commit, error) {
if err != nil {
return nil, fmt.Errorf("git rev-list --ancestry-path --merges --reverse: %v %v", stderr, err)
} else if len(mergeCommit) < 40 {
// PR was fast-forwarded, so just use last commit of PR
mergeCommit = commitID[:40]
}
gitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())

View File

@ -582,7 +582,7 @@ func (repo *Repository) DescriptionHTML() template.HTML {
sanitize := func(s string) string {
return fmt.Sprintf(`<a href="%[1]s" target="_blank" rel="noopener">%[1]s</a>`, s)
}
return template.HTML(descPattern.ReplaceAllStringFunc(markdown.Sanitizer.Sanitize(repo.Description), sanitize))
return template.HTML(descPattern.ReplaceAllStringFunc(markdown.Sanitize(repo.Description), sanitize))
}
// LocalCopyPath returns the local repository copy path
@ -844,12 +844,8 @@ func cleanUpMigrateGitConfig(configPath string) error {
// createDelegateHooks creates all the hooks scripts for the repo
func createDelegateHooks(repoPath string) (err error) {
var (
hookNames = []string{"pre-receive", "update", "post-receive"}
hookTpls = []string{
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/pre-receive.d\"`; do\n sh \"$SHELL_FOLDER/pre-receive.d/$i\"\ndone", setting.ScriptType),
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/update.d\"`; do\n sh \"$SHELL_FOLDER/update.d/$i\" $1 $2 $3\ndone", setting.ScriptType),
fmt.Sprintf("#!/usr/bin/env %s\nORI_DIR=`pwd`\nSHELL_FOLDER=$(cd \"$(dirname \"$0\")\";pwd)\ncd \"$ORI_DIR\"\nfor i in `ls \"$SHELL_FOLDER/post-receive.d\"`; do\n sh \"$SHELL_FOLDER/post-receive.d/$i\"\ndone", setting.ScriptType),
}
hookNames = []string{"pre-receive", "update", "post-receive"}
hookTpl = fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType)
giteaHookTpls = []string{
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' pre-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf),
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' update $1 $2 $3\n", setting.ScriptType, setting.AppPath, setting.CustomConf),
@ -868,7 +864,7 @@ func createDelegateHooks(repoPath string) (err error) {
}
// WARNING: This will override all old server-side hooks
if err = ioutil.WriteFile(oldHookPath, []byte(hookTpls[i]), 0777); err != nil {
if err = ioutil.WriteFile(oldHookPath, []byte(hookTpl), 0777); err != nil {
return fmt.Errorf("write old hook file '%s': %v", oldHookPath, err)
}
@ -1585,7 +1581,7 @@ func DeleteRepository(uid, repoID int64) error {
attachments := make([]*Attachment, 0, 5)
if err = sess.
In("issue_id=?", issueIDs).
In("issue_id", issueIDs).
Find(&attachments); err != nil {
return err
}
@ -1909,6 +1905,11 @@ func SyncRepositoryHooks() error {
if err := createDelegateHooks(bean.(*Repository).RepoPath()); err != nil {
return fmt.Errorf("SyncRepositoryHook: %v", err)
}
if bean.(*Repository).HasWiki() {
if err := createDelegateHooks(bean.(*Repository).WikiPath()); err != nil {
return fmt.Errorf("SyncRepositoryHook: %v", err)
}
}
return nil
})
}

View File

@ -163,7 +163,7 @@ func (u *User) UpdateDiffViewStyle(style string) error {
func (u *User) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "full_name":
u.FullName = markdown.Sanitizer.Sanitize(u.FullName)
u.FullName = markdown.Sanitize(u.FullName)
case "created_unix":
u.Created = time.Unix(u.CreatedUnix, 0).Local()
case "updated_unix":
@ -328,15 +328,14 @@ func (u *User) generateRandomAvatar(e Engine) error {
// which includes app sub-url as prefix. However, it is possible
// to return full URL if user enables Gravatar-like service.
func (u *User) RelAvatarLink() string {
defaultImgURL := setting.AppSubURL + "/img/avatar_default.png"
if u.ID == -1 {
return defaultImgURL
return base.DefaultAvatarLink()
}
switch {
case u.UseCustomAvatar:
if !com.IsFile(u.CustomAvatarPath()) {
return defaultImgURL
return base.DefaultAvatarLink()
}
return setting.AppSubURL + "/avatars/" + u.Avatar
case setting.DisableGravatar, setting.OfflineMode:
@ -867,7 +866,7 @@ func updateUser(e Engine, u *User) error {
u.Website = base.TruncateString(u.Website, 255)
u.Description = base.TruncateString(u.Description, 255)
u.FullName = markdown.Sanitizer.Sanitize(u.FullName)
u.FullName = markdown.Sanitize(u.FullName)
_, err := e.Id(u.ID).AllCols().Update(u)
return err
}
@ -989,7 +988,7 @@ func deleteUser(e *xorm.Session, u *User) error {
}
// ***** START: ExternalLoginUser *****
if err = RemoveAllAccountLinks(u); err != nil {
if err = removeAllAccountLinks(e, u); err != nil {
return fmt.Errorf("ExternalLoginUser: %v", err)
}
// ***** END: ExternalLoginUser *****

View File

@ -84,7 +84,11 @@ func (repo *Repository) LocalWikiPath() string {
func (repo *Repository) UpdateLocalWiki() error {
// Don't pass branch name here because it fails to clone and
// checkout to a specific branch when wiki is an empty repository.
return UpdateLocalCopyBranch(repo.WikiPath(), repo.LocalWikiPath(), "")
var branch = ""
if com.IsExist(repo.LocalWikiPath()) {
branch = "master"
}
return UpdateLocalCopyBranch(repo.WikiPath(), repo.LocalWikiPath(), branch)
}
func discardLocalWikiChanges(localPath string) error {

View File

@ -192,13 +192,21 @@ func HashEmail(email string) string {
return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
}
// DefaultAvatarLink the default avatar link
func DefaultAvatarLink() string {
return setting.AppSubURL + "/img/avatar_default.png"
}
// AvatarLink returns relative avatar link to the site domain by given email,
// which includes app sub-url as prefix. However, it is possible
// to return full URL if user enables Gravatar-like service.
func AvatarLink(email string) string {
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
// TODO: This doesn't check any error. AvatarLink should return (string, error)
url, _ := setting.LibravatarService.FromEmail(email)
url, err := setting.LibravatarService.FromEmail(email)
if err != nil {
log.Error(4, "LibravatarService.FromEmail(email=%s): error %v", email, err)
return DefaultAvatarLink()
}
return url
}
@ -206,7 +214,7 @@ func AvatarLink(email string) string {
return setting.GravatarSource + HashEmail(email)
}
return setting.AppSubURL + "/img/avatar_default.png"
return DefaultAvatarLink()
}
// Seconds-based time units

View File

@ -334,13 +334,11 @@ func RepoAssignment(args ...bool) macaron.Handler {
if ctx.Repo.IsWriter() || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) {
// Pull request is allowed if this is a fork repository
// and base repository accepts pull requests.
if repo.BaseRepo != nil {
if repo.BaseRepo.AllowsPulls() {
ctx.Data["BaseRepo"] = repo.BaseRepo
ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo
ctx.Repo.PullRequest.Allowed = true
ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
}
if repo.BaseRepo != nil && repo.BaseRepo.AllowsPulls() {
ctx.Data["BaseRepo"] = repo.BaseRepo
ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo
ctx.Repo.PullRequest.Allowed = true
ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
} else {
// Or, this is repository accepts pull requests between branches.
if repo.AllowsPulls() {

View File

@ -15,7 +15,6 @@ import (
"strings"
"github.com/Unknwon/com"
"github.com/microcosm-cc/bluemonday"
"github.com/russross/blackfriday"
"golang.org/x/net/html"
@ -29,24 +28,6 @@ const (
IssueNameStyleAlphanumeric = "alphanumeric"
)
// Sanitizer markdown sanitizer
var Sanitizer = bluemonday.UGCPolicy()
// BuildSanitizer initializes sanitizer with allowed attributes based on settings.
// This function should only be called once during entire application lifecycle.
func BuildSanitizer() {
// Normal markdown-stuff
Sanitizer.AllowAttrs("class").Matching(regexp.MustCompile(`[\p{L}\p{N}\s\-_',:\[\]!\./\\\(\)&]*`)).OnElements("code", "div", "ul", "ol", "dl")
// Checkboxes
Sanitizer.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
Sanitizer.AllowAttrs("checked", "disabled").OnElements("input")
Sanitizer.AllowNoAttrs().OnElements("label")
// Custom URL-Schemes
Sanitizer.AllowURLSchemes(setting.Markdown.CustomURLSchemes...)
}
// IsMarkdownFile reports whether name looks like a Markdown file
// based on its extension.
func IsMarkdownFile(name string) bool {
@ -72,6 +53,10 @@ func IsReadmeFile(name string) bool {
}
var (
// NOTE: All below regex matching do not perform any extra validation.
// Thus a link is produced even if the user does not exist, the issue does not exist, the commit does not exist, etc.
// While fast, this is also incorrect and lead to false positives.
// MentionPattern matches string that mentions someone, e.g. @Unknwon
MentionPattern = regexp.MustCompile(`(\s|^|\W)@[0-9a-zA-Z-_\.]+`)
@ -84,9 +69,9 @@ var (
CrossReferenceIssueNumericPattern = regexp.MustCompile(`( |^)[0-9a-zA-Z]+/[0-9a-zA-Z]+#[0-9]+\b`)
// Sha1CurrentPattern matches string that represents a commit SHA, e.g. d8a994ef243349f321568f9e36d5c3f444b99cae
// FIXME: this pattern matches pure numbers as well, right now we do a hack to check in renderSha1CurrentPattern
// by converting string to a number.
Sha1CurrentPattern = regexp.MustCompile(`(?:^|\s|\()[0-9a-f]{40}\b`)
// Although SHA1 hashes are 40 chars long, the regex matches the hash from 7 to 40 chars in length
// so that abbreviated hash links can be used as well. This matches git and github useability.
Sha1CurrentPattern = regexp.MustCompile(`(?:^|\s|\()([0-9a-f]{7,40})\b`)
// ShortLinkPattern matches short but difficult to parse [[name|link|arg=test]] syntax
ShortLinkPattern = regexp.MustCompile(`(\[\[.*\]\]\w*)`)
@ -94,12 +79,29 @@ var (
// AnySHA1Pattern allows to split url containing SHA into parts
AnySHA1Pattern = regexp.MustCompile(`(http\S*)://(\S+)/(\S+)/(\S+)/(\S+)/([0-9a-f]{40})(?:/?([^#\s]+)?(?:#(\S+))?)?`)
// IssueFullPattern allows to split issue (and pull) URLs into parts
IssueFullPattern = regexp.MustCompile(`(?:^|\s|\()(http\S*)://((?:[^\s/]+/)+)((?:\w{1,10}-)?[1-9][0-9]*)([\?|#]\S+.(\S+)?)?\b`)
validLinksPattern = regexp.MustCompile(`^[a-z][\w-]+://`)
)
// regexp for full links to issues/pulls
var issueFullPattern *regexp.Regexp
// InitMarkdown initialize regexps for markdown parsing
func InitMarkdown() {
getIssueFullPattern()
}
func getIssueFullPattern() *regexp.Regexp {
if issueFullPattern == nil {
appURL := setting.AppURL
if len(appURL) > 0 && appURL[len(appURL)-1] != '/' {
appURL += "/"
}
issueFullPattern = regexp.MustCompile(appURL +
`\w+/\w+/(?:issues|pulls)/((?:\w{1,10}-)?[1-9][0-9]*)([\?|#]\S+.(\S+)?)?\b`)
}
return issueFullPattern
}
// isLink reports whether link fits valid format.
func isLink(link []byte) bool {
return validLinksPattern.Match(link)
@ -174,12 +176,15 @@ func (r *Renderer) ListItem(out *bytes.Buffer, text []byte, flags int) {
}
switch {
case bytes.HasPrefix(text, []byte(prefix+"[ ] ")):
text = append([]byte(`<div class="ui fitted disabled checkbox"><input type="checkbox" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
text = append([]byte(`<span class="ui fitted disabled checkbox"><input type="checkbox" disabled="disabled" /><label /></span>`), text[3+len(prefix):]...)
if prefix != "" {
text = bytes.Replace(text, []byte(prefix), []byte{}, 1)
}
case bytes.HasPrefix(text, []byte(prefix+"[x] ")):
text = append([]byte(`<div class="ui checked fitted disabled checkbox"><input type="checkbox" checked="" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
}
if prefix != "" {
text = bytes.Replace(text, []byte("</p>"), []byte{}, 1)
text = append([]byte(`<span class="ui checked fitted disabled checkbox"><input type="checkbox" checked="" disabled="disabled" /><label /></span>`), text[3+len(prefix):]...)
if prefix != "" {
text = bytes.Replace(text, []byte(prefix), []byte{}, 1)
}
}
r.Renderer.ListItem(out, text, flags)
}
@ -364,32 +369,17 @@ func renderFullSha1Pattern(rawBytes []byte, urlPrefix string) []byte {
return rawBytes
}
// renderFullIssuePattern renders issues-like URLs
func renderFullIssuePattern(rawBytes []byte, urlPrefix string) []byte {
ms := IssueFullPattern.FindAllSubmatch(rawBytes, -1)
// RenderFullIssuePattern renders issues-like URLs
func RenderFullIssuePattern(rawBytes []byte) []byte {
ms := getIssueFullPattern().FindAllSubmatch(rawBytes, -1)
for _, m := range ms {
all := m[0]
protocol := string(m[1])
paths := bytes.Split(m[2], []byte("/"))
paths = paths[:len(paths)-1]
if bytes.HasPrefix(paths[0], []byte("gist.")) {
continue
}
path := protocol + "://" + string(m[2])
id := string(m[3])
path = URLJoin(path, id)
var comment []byte
if len(m) > 3 {
comment = m[4]
}
urlSuffix := ""
id := string(m[1])
text := "#" + id
if comment != nil {
urlSuffix += string(comment)
text += " <i class='comment icon'></i>"
}
// TODO if m[2] is not nil, then link is to a comment,
// and we should indicate that in the text somehow
rawBytes = bytes.Replace(rawBytes, all, []byte(fmt.Sprintf(
`<a href="%s%s">%s</a>`, path, urlSuffix, text)), -1)
`<a href="%s">%s</a>`, string(all), text)), -1)
}
return rawBytes
}
@ -569,12 +559,15 @@ func RenderCrossReferenceIssueIndexPattern(rawBytes []byte, urlPrefix string, me
func renderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte {
ms := Sha1CurrentPattern.FindAllSubmatch(rawBytes, -1)
for _, m := range ms {
all := m[0]
if com.StrTo(all).MustInt() > 0 {
continue
}
rawBytes = bytes.Replace(rawBytes, all, []byte(fmt.Sprintf(
`<a href="%s">%s</a>`, URLJoin(urlPrefix, "commit", string(all)), base.ShortSha(string(all)))), -1)
hash := m[1]
// The regex does not lie, it matches the hash pattern.
// However, a regex cannot know if a hash actually exists or not.
// We could assume that a SHA1 hash should probably contain alphas AND numerics
// but that is not always the case.
// Although unlikely, deadbeef and 1234567 are valid short forms of SHA1 hash
// as used by git and github for linking and thus we have to do similar.
rawBytes = bytes.Replace(rawBytes, hash, []byte(fmt.Sprintf(
`<a href="%s">%s</a>`, URLJoin(urlPrefix, "commit", string(hash)), base.ShortSha(string(hash)))), -1)
}
return rawBytes
}
@ -588,12 +581,12 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string, metas map[string]strin
[]byte(fmt.Sprintf(`<a href="%s">%s</a>`, URLJoin(setting.AppURL, string(m[1:])), m)), -1)
}
rawBytes = RenderFullIssuePattern(rawBytes)
rawBytes = RenderShortLinks(rawBytes, urlPrefix, false, isWikiMarkdown)
rawBytes = RenderIssueIndexPattern(rawBytes, urlPrefix, metas)
rawBytes = RenderCrossReferenceIssueIndexPattern(rawBytes, urlPrefix, metas)
rawBytes = renderFullSha1Pattern(rawBytes, urlPrefix)
rawBytes = renderSha1CurrentPattern(rawBytes, urlPrefix)
rawBytes = renderFullIssuePattern(rawBytes, urlPrefix)
return rawBytes
}
@ -657,10 +650,8 @@ OUTER_LOOP:
// Copy the token to the output verbatim
buf.Write(RenderShortLinks([]byte(token.String()), urlPrefix, true, isWikiMarkdown))
if token.Type == html.StartTagToken {
if !com.IsSliceContainsStr(noEndTags, token.Data) {
stackNum++
}
if token.Type == html.StartTagToken && !com.IsSliceContainsStr(noEndTags, token.Data) {
stackNum++
}
// If this is the close tag to the outer-most, we are done
@ -675,8 +666,8 @@ OUTER_LOOP:
continue OUTER_LOOP
}
if !com.IsSliceContainsStr(noEndTags, token.Data) {
startTags = append(startTags, token.Data)
if !com.IsSliceContainsStr(noEndTags, tagName) {
startTags = append(startTags, tagName)
}
case html.EndTagToken:
@ -708,7 +699,7 @@ func render(rawBytes []byte, urlPrefix string, metas map[string]string, isWikiMa
urlPrefix = strings.Replace(urlPrefix, " ", "+", -1)
result := RenderRaw(rawBytes, urlPrefix, isWikiMarkdown)
result = PostProcess(result, urlPrefix, metas, isWikiMarkdown)
result = Sanitizer.SanitizeBytes(result)
result = SanitizeBytes(result)
return result
}

View File

@ -180,13 +180,15 @@ func TestRender_AutoLink(t *testing.T) {
numericIssueLink(URLJoin(setting.AppSubURL, "issues"), 3333))
// render external issue URLs
tmp := "http://1111/2222/ssss-issues/3333?param=blah&blahh=333"
test(tmp, "<a href=\""+tmp+"\">#3333 <i class='comment icon'></i></a>")
test("http://test.com/issues/33333", numericIssueLink("http://test.com/issues", 33333))
test("https://issues/333", numericIssueLink("https://issues", 333))
for _, externalURL := range []string{
"http://1111/2222/ssss-issues/3333?param=blah&blahh=333",
"http://test.com/issues/33333",
"https://issues/333"} {
test(externalURL, externalURL)
}
// render valid commit URLs
tmp = URLJoin(AppSubURL, "commit", "d8a994ef243349f321568f9e36d5c3f444b99cae")
tmp := URLJoin(AppSubURL, "commit", "d8a994ef243349f321568f9e36d5c3f444b99cae")
test(tmp, "<a href=\""+tmp+"\">d8a994ef24</a>")
tmp += "#diff-2"
test(tmp, "<a href=\""+tmp+"\">d8a994ef24 (diff-2)</a>")
@ -290,6 +292,8 @@ func TestRender_Commits(t *testing.T) {
var src = strings.Replace(subtree, "/commit/", "/src/", -1)
test(sha, `<p><a href="`+commit+`" rel="nofollow">b6dd6210ea</a></p>`)
test(sha[:7], `<p><a href="`+commit[:len(commit)-(40-7)]+`" rel="nofollow">b6dd621</a></p>`)
test(sha[:39], `<p><a href="`+commit[:len(commit)-(40-39)]+`" rel="nofollow">b6dd6210ea</a></p>`)
test(commit, `<p><a href="`+commit+`" rel="nofollow">b6dd6210ea</a></p>`)
test(tree, `<p><a href="`+src+`" rel="nofollow">b6dd6210ea/src</a></p>`)
}
@ -330,6 +334,22 @@ func TestRender_CrossReferences(t *testing.T) {
`<p><a href="`+URLJoin(AppURL, "gogits", "gogs", "issues", "12345")+`" rel="nofollow">gogits/gogs#12345</a></p>`)
}
func TestRender_FullIssueURLs(t *testing.T) {
setting.AppURL = AppURL
setting.AppSubURL = AppSubURL
test := func(input, expected string) {
result := RenderFullIssuePattern([]byte(input))
assert.Equal(t, expected, string(result))
}
test("Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6",
"Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6")
test("Look here http://localhost:3000/person/repo/issues/4",
`Look here <a href="http://localhost:3000/person/repo/issues/4">#4</a>`)
test("http://localhost:3000/person/repo/issues/4#issuecomment-1234",
`<a href="http://localhost:3000/person/repo/issues/4#issuecomment-1234">#4</a>`)
}
func TestRegExp_MentionPattern(t *testing.T) {
trueTestCases := []string{
"@Unknwon",
@ -520,50 +540,6 @@ func TestRegExp_AnySHA1Pattern(t *testing.T) {
}
}
func TestRegExp_IssueFullPattern(t *testing.T) {
testCases := map[string][]string{
"https://github.com/gogits/gogs/pull/3244": {
"https",
"github.com/gogits/gogs/pull/",
"3244",
"",
"",
},
"https://github.com/gogits/gogs/issues/3247#issuecomment-231517079": {
"https",
"github.com/gogits/gogs/issues/",
"3247",
"#issuecomment-231517079",
"",
},
"https://try.gogs.io/gogs/gogs/issues/4#issue-685": {
"https",
"try.gogs.io/gogs/gogs/issues/",
"4",
"#issue-685",
"",
},
"https://youtrack.jetbrains.com/issue/JT-36485": {
"https",
"youtrack.jetbrains.com/issue/",
"JT-36485",
"",
"",
},
"https://youtrack.jetbrains.com/issue/JT-36485#comment=27-1508676": {
"https",
"youtrack.jetbrains.com/issue/",
"JT-36485",
"#comment=27-1508676",
"",
},
}
for k, v := range testCases {
assert.Equal(t, IssueFullPattern.FindStringSubmatch(k)[1:], v)
}
}
func TestMisc_IsMarkdownFile(t *testing.T) {
setting.Markdown.FileExtensions = []string{".md", ".markdown", ".mdown", ".mkd"}
trueTestCases := []string{
@ -632,7 +608,7 @@ var sameCases = []string{
Ideas and codes
- Bezier widget (by @r-lyeh) https://github.com/ocornut/imgui/issues/786
- Bezier widget (by @r-lyeh) ` + AppURL + `ocornut/imgui/issues/786
- Node graph editors https://github.com/ocornut/imgui/issues/306
- [[Memory Editor|memory_editor_example]]
- [[Plot var helper|plot_var_example]]`,
@ -668,8 +644,8 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
<p>Ideas and codes</p>
<ul>
<li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>)<a href="https://github.com/ocornut/imgui/issues/786" rel="nofollow">#786</a></li>
<li>Node graph editors<a href="https://github.com/ocornut/imgui/issues/306" rel="nofollow">#306</a></li>
<li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>) <a href="http://localhost:3000/ocornut/imgui/issues/786" rel="nofollow">#786</a></li>
<li>Node graph editors https://github.com/ocornut/imgui/issues/306</li>
<li><a href="` + baseURLContent + `memory_editor_example" rel="nofollow">Memory Editor</a></li>
<li><a href="` + baseURLContent + `plot_var_example" rel="nofollow">Plot var helper</a></li>
</ul>

View File

@ -0,0 +1,63 @@
// Copyright 2017 The Gitea Authors. All rights reserved.
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package markdown
import (
"regexp"
"sync"
"code.gitea.io/gitea/modules/setting"
"github.com/microcosm-cc/bluemonday"
)
// Sanitizer is a protection wrapper of *bluemonday.Policy which does not allow
// any modification to the underlying policies once it's been created.
type Sanitizer struct {
policy *bluemonday.Policy
init sync.Once
}
var sanitizer = &Sanitizer{}
// NewSanitizer initializes sanitizer with allowed attributes based on settings.
// Multiple calls to this function will only create one instance of Sanitizer during
// entire application lifecycle.
func NewSanitizer() {
sanitizer.init.Do(func() {
sanitizer.policy = bluemonday.UGCPolicy()
// We only want to allow HighlightJS specific classes for code blocks
sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^language-\w+$`)).OnElements("code")
// Checkboxes
sanitizer.policy.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
sanitizer.policy.AllowAttrs("checked", "disabled").OnElements("input")
// Custom URL-Schemes
sanitizer.policy.AllowURLSchemes(setting.Markdown.CustomURLSchemes...)
})
}
// Sanitize takes a string that contains a HTML fragment or document and applies policy whitelist.
func Sanitize(s string) string {
if sanitizer.policy == nil {
NewSanitizer()
}
return sanitizer.policy.Sanitize(s)
}
// SanitizeBytes takes a []byte slice that contains a HTML fragment or document and applies policy whitelist.
func SanitizeBytes(b []byte) []byte {
if len(b) == 0 {
// nothing to sanitize
return b
}
if sanitizer.policy == nil {
NewSanitizer()
}
return sanitizer.policy.SanitizeBytes(b)
}

View File

@ -0,0 +1,44 @@
// Copyright 2017 The Gitea Authors. All rights reserved.
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package markdown
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test_Sanitizer(t *testing.T) {
NewSanitizer()
testCases := []string{
// Regular
`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`, `<a href="http://www.google.com" rel="nofollow">Google</a>`,
// Code highlighting class
`<code class="random string"></code>`, `<code></code>`,
`<code class="language-random ui tab active menu attached animating sidebar following bar center"></code>`, `<code></code>`,
`<code class="language-go"></code>`, `<code class="language-go"></code>`,
// Input checkbox
`<input type="hidden">`, ``,
`<input type="checkbox">`, `<input type="checkbox">`,
`<input checked disabled autofocus>`, `<input checked="" disabled="">`,
// Code highlight injection
`<code class="language-random&#32;ui&#32;tab&#32;active&#32;menu&#32;attached&#32;animating&#32;sidebar&#32;following&#32;bar&#32;center"></code>`, `<code></code>`,
`<code class="language-lol&#32;ui&#32;tab&#32;active&#32;menu&#32;attached&#32;animating&#32;sidebar&#32;following&#32;bar&#32;center">
<code class="language-lol&#32;ui&#32;container&#32;input&#32;huge&#32;basic&#32;segment&#32;center">&nbsp;</code>
<img src="https://try.gogs.io/img/favicon.png" width="200" height="200">
<code class="language-lol&#32;ui&#32;container&#32;input&#32;massive&#32;basic&#32;segment">Hello there! Something has gone wrong, we are working on it.</code>
<code class="language-lol&#32;ui&#32;container&#32;input&#32;huge&#32;basic&#32;segment">In the meantime, play a game with us at&nbsp;<a href="http://example.com/">example.com</a>.</code>
</code>`, "<code>\n<code>\u00a0</code>\n<img src=\"https://try.gogs.io/img/favicon.png\" width=\"200\" height=\"200\">\n<code>Hello there! Something has gone wrong, we are working on it.</code>\n<code>In the meantime, play a game with us at\u00a0<a href=\"http://example.com/\" rel=\"nofollow\">example.com</a>.</code>\n</code>",
}
for i := 0; i < len(testCases); i += 2 {
assert.Equal(t, testCases[i+1], Sanitize(testCases[i]))
assert.Equal(t, testCases[i+1], string(SanitizeBytes([]byte(testCases[i]))))
}
}

View File

@ -152,7 +152,7 @@ func Safe(raw string) template.HTML {
// Str2html render Markdown text to HTML
func Str2html(raw string) template.HTML {
return template.HTML(markdown.Sanitizer.Sanitize(raw))
return template.HTML(markdown.Sanitize(raw))
}
// List traversings the list

View File

@ -86,7 +86,7 @@ optional_title=Dodatečná nastavení
email_title=Nastavení e-mailové služby
smtp_host=Server SMTP
smtp_from=Od
smtp_from_helper=E-mailová adresa podle RFC 5322. Může být zadána pouze e-mailová adresa nebo adresa ve formátu `"Name" <email@priklad.cz>"`.
smtp_from_helper=E-mailová adresa podle RFC 5322. Může být zadána pouze e-mailová adresa nebo adresa ve formátu "Name" <email@priklad.cz>.
mailer_user=E-mailová adresa odesílatele
mailer_password=Heslo
register_confirm=Povolit potvrzení registrace

View File

@ -52,7 +52,7 @@ cancel=Abbrechen
[install]
install=Installation
title=Installationsschritte für den ersten Start
docker_helper="Wenn Gitea innerhalb von Docker läuft, lies bitte den <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Leitfaden</a> genau durch, bevor du irgendwas auf dieser Seite änderst!"
docker_helper=Wenn Gitea innerhalb von Docker läuft, lies bitte den <a target="_blank" rel="noopener" href="%s">Leitfaden</a> genau durch, bevor du irgendwas auf dieser Seite änderst!
requite_db_desc=Gitea benötigt MySQL, PostgreSQL, SQLite3 oder TiDB.
db_title=Datenbankeinstellungen
db_type=Datenbanktyp
@ -111,7 +111,7 @@ enable_captcha=Captcha aktivieren
enable_captcha_popup=Captcha-Eingabe bei der Registrierung erforderlich.
require_sign_in_view=Seiten nur für angemeldete Benutzer zugänglich.
require_sign_in_view_popup=Nur angemeldete Benutzer können auf alle Seiten zugreifen. Gäste sehen nur die Seiten Anmelden/Registrieren.
admin_setting_desc="Du musst jetzt kein Administrator-Konto anlegen. Der erste Benutzer (\"Id=1\") erhält automatisch Administrator-Rechte."
admin_setting_desc=`Du musst jetzt kein Administrator-Konto anlegen. Der erste Benutzer (Id=1) erhält automatisch Administrator-Rechte.`
admin_title=Administrator Einstellungen
admin_name=Benutzername
admin_password=Passwort
@ -328,7 +328,7 @@ keep_email_private_popup=Deine E-Mail-Adresse wird vor anderen Benutzern verstec
manage_ssh_keys=SSH-Schlüssel verwalten
add_key=Schlüssel hinzufügen
ssh_desc=Dies ist eine Liste aller SSH-Schlüssel, die deinem Konto zugeordnet sind. Bitte entferne alle Schlüssel, die dir unbekannt sind.
ssh_helper="<strong>Brauchst du Hilfe?</strong> Hier ist eine Anleitung zum <a href=\"%s\">Erzeugen von SSH-Schlüsseln</a> oder <a href=\"%s\">Lösen einfacher SSH-Probleme</a>."
ssh_helper=<strong>Brauchst du Hilfe?</strong> Hier ist eine Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder <a href="%s">Lösen einfacher SSH-Probleme</a>.
add_new_key=SSH-Schlüssel hinzufügen
ssh_key_been_used=Inhalt des öffentlichen Schlüssels wurde verwendet.
ssh_key_name_used=Ein öffentlicher Schlüssel mit diesem Namen existiert bereits.
@ -390,10 +390,10 @@ owner=Besitzer
repo_name=Repository-Name
repo_name_helper=Ein guter Repository-Name besteht gewöhnlich aus kurzen, leicht zu merkenden und eindeutigen Schlüsselworten.
visibility=Sichtbarkeit
visiblity_helper="Dieses Repository ist <span class=\"ui red text\">privat</span>"
visiblity_helper_forced="Der Administrator hat festgelegt, dass alle neuen Repositories <span class=\"ui red text\">privat</span> sein müssen"
visiblity_helper=Dieses Repository ist <span class="ui red text">privat</span>
visiblity_helper_forced=Der Administrator hat festgelegt, dass alle neuen Repositories <span class="ui red text">privat</span> sein müssen
visiblity_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus)
clone_helper="Brauchst du Hilfe beim Klonen? Öffne die <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Hilfe</a>!"
clone_helper=Brauchst du Hilfe beim Klonen? Öffne die <a target="_blank" rel="noopener" href="%s">Hilfe</a>!
fork_repo=Repository forken
fork_from=Fork von
fork_visiblity_helper=Die Sichtbarkeit von geforkten Repositories ist nicht veränderbar.
@ -423,7 +423,7 @@ form.name_pattern_not_allowed=Repository-Namen der Form '%s' sind nicht erlaubt.
need_auth=Authorisierung benötigt
migrate_type=Migrationstyp
migrate_type_helper="Dieses Repository wird ein <span class=\"text blue\">Mirror</span> sein"
migrate_type_helper=Dieses Repository wird ein <span class="text blue">Mirror</span> sein
migrate_repo=Repository migrieren
migrate.clone_address=Adresse kopieren
migrate.clone_address_desc=Dies kann eine HTTP/HTTPS/GIT URL oder ein lokaler Serverpfad sein.
@ -493,7 +493,7 @@ editor.add='%s' hinzufügen
editor.update='%s' ändern
editor.delete='%s' löschen
editor.commit_message_desc=Eine ausführlichere Beschreibung kann hinzugefügt werden...
editor.commit_directly_to_this_branch="Direkt in den <strong class=\"branch-name\">%s</strong> Branch einchecken."
editor.commit_directly_to_this_branch=Direkt in den <strong class="branch-name">%s</strong> Branch einchecken.
editor.create_new_branch=Einen <strong>neuen Branch</strong> für diesen Commit erstellen und einen Pull Request starten.
editor.new_branch_name_desc=Neuer Branch Name...
editor.cancel=Abbrechen
@ -503,7 +503,7 @@ editor.directory_is_a_file='%s' im übergeordneten Verzeichnis ist eine Datei un
editor.file_is_a_symlink=Die Datei '%s' ist ein Symlink der nicht über den Web Editor bearbeitet werden kann.
editor.filename_is_a_directory=Die Datei '%s' existiert bereits als Verzeichnis in diesem Repository.
editor.file_editing_no_longer_exists=Die Datei '%s', welche du bearbeitest existiert in dieser Repository nicht mehr.
editor.file_changed_while_editing="Seit dem Start der Bearbeitung hat sich die Datei geändert. <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Hier klicken</a> um die Änderungen zu sehen, oder nochmals <strong>Commit drücken</strong> um die Änderungen zu überschreiben."
editor.file_changed_while_editing=Seit dem Start der Bearbeitung hat sich die Datei geändert. <a target="_blank" rel="noopener" href="%s">Hier klicken</a> um die Änderungen zu sehen, oder nochmals <strong>Commit drücken</strong> um die Änderungen zu überschreiben.
editor.file_already_exists=Eine Datei mit dem Namen '%s' existiert bereits in diesem Repository.
editor.no_changes_to_show=Keine Änderungen vorhanden.
editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei '%s'. Fehler: %v
@ -542,8 +542,8 @@ issues.label_templates.info=Es sind noch keine Label vorhanden. Du kannst vordef
issues.label_templates.helper=Wähle ein Label
issues.label_templates.use=Dieses Label Set benutzen
issues.label_templates.fail_to_load_file=Fehler beim Laden der Label Template Datei '%s': %v
issues.add_label_at="`fügte hinzu <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.remove_label_at="`entfernte <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.add_label_at=`fügte hinzu <div class="ui label" style="color: %s ; background-color: %s">%s</div> label %s`
issues.remove_label_at=`entfernte <div class="ui label" style="color: %s ; background-color: %s">%s</div> label %s`
issues.add_milestone_at=`fügte das Issue zum <b>%s</b> Meilenstein hinzu %s`
issues.change_milestone_at=`änderte den Meilenstein von <b>%s</b> zu <b>%s</b> %s`
issues.remove_milestone_at=`entfernte das Issue vom <b>%s</b> Meilenstein %s`
@ -572,14 +572,14 @@ issues.filter_sort.recentupdate=Kürzlich aktualisiert
issues.filter_sort.leastupdate=Am längsten nicht aktualisiert
issues.filter_sort.mostcomment=Am meisten kommentiert
issues.filter_sort.leastcomment=Am wenigsten kommentiert
issues.opened_by="%[1]s geöffnet von <a href=\"%[2]s\">%[3]s</a>"
issues.opened_by=%[1]s geöffnet von <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=geöffnet %[1]s von %[2]s
issues.previous=Vorherige
issues.next=Nächste
issues.open_title=Offen
issues.closed_title=Geschlossen
issues.num_comments=%d Kommentare
issues.commented_at="`kommentierte <a href=\"#%s\">%s</a>`"
issues.commented_at=`kommentierte <a href="#%s">%s</a>`
issues.delete_comment_confirm=Bist du sicher dass du das Kommentar löschen möchtest?
issues.no_content=Hier gibt es bis jetzt noch keinen Inhalt.
issues.close_issue=Schließen
@ -587,13 +587,13 @@ issues.close_comment_issue=Kommentieren und schließen
issues.reopen_issue=Wieder öffnen
issues.reopen_comment_issue=Kommentieren und wieder öffnen
issues.create_comment=Kommentieren
issues.closed_at="`hat <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> geschlossen`"
issues.reopened_at="`hat <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> wieder geöffnet`"
issues.commit_ref_at="`hat dieses Issue <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> aus einem Commit referenziert`"
issues.closed_at=`hat <a id="%[1]s" href="#%[1]s">%[2]s</a> geschlossen`
issues.reopened_at=`hat <a id="%[1]s" href="#%[1]s">%[2]s</a> wieder geöffnet`
issues.commit_ref_at=`hat dieses Issue <a id="%[1]s" href="#%[1]s">%[2]s</a> aus einem Commit referenziert`
issues.poster=Ersteller
issues.collaborator=Mitarbeiter
issues.owner=Besitzer
issues.sign_in_require_desc="<a href=\"%s\">Anmelden</a>, um an der Diskussion teilzunehmen."
issues.sign_in_require_desc=<a href="%s">Anmelden</a>, um an der Diskussion teilzunehmen.
issues.edit=Bearbeiten
issues.cancel=Abbrechen
issues.save=Speichern
@ -621,7 +621,7 @@ pulls.compare_compare=vergleichen
pulls.filter_branch=Branch filtern
pulls.no_results=Keine Ergebnisse verfügbar.
pulls.nothing_to_compare=Es gibt nichts zu vergleichen, da Base- und Head-Branch gleich sind.
pulls.has_pull_request="`Es existiert bereits ein Pull-Request zwischen diesen beiden Zielen: <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`Es existiert bereits ein Pull-Request zwischen diesen beiden Zielen: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Pull-Request erstellen
pulls.title_desc=möchte %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> zusammenführen
pulls.merged_title_desc=hat %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
@ -637,7 +637,7 @@ pulls.can_auto_merge_desc=Dieser Pull-Request kann automatisch zusammengeführt
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da es Konflikte gibt.
pulls.cannot_auto_merge_helper=Bitte manuell zusammenführen, um die Konflikte zu lösen.
pulls.merge_pull_request=Pull-Request zusammenführen
pulls.open_unmerged_pull_exists="`Sie können diesen Pull-Request nicht wieder öffnen, da bereits ein offener Pull-Request (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Zusammenführen wartet.`"
pulls.open_unmerged_pull_exists=`Sie können diesen Pull-Request nicht wieder öffnen, da bereits ein offener Pull-Request (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Zusammenführen wartet.`
milestones.new=Neuer Meilenstein
milestones.open_tab=%d offen
@ -756,7 +756,7 @@ settings.search_user_placeholder=Benutzer suchen...
settings.org_not_allowed_to_be_collaborator=Eine Organisation kann nicht als Mitarbeiter hinzugefügt werden.
settings.user_is_org_member=Benutzer ist ein Organisationsmitglied und kann nicht als Mitarbeiter hinzugefügt werden.
settings.add_webhook=Webhook hinzufügen
settings.hooks_desc="Webhooks erlauben es dir, externe Dienste zu informieren, wenn etwas Bestimmtes in deinem Repository passiert. Gitea sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr im Gitea <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks Guide</a>."
settings.hooks_desc=Webhooks erlauben es dir, externe Dienste zu informieren, wenn etwas Bestimmtes in deinem Repository passiert. Gitea sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr im Gitea <a target="_blank" rel="noopener" href="%s">Webhooks Guide</a>.
settings.webhook_deletion=Webhook entfernen
settings.webhook_deletion_desc=Das Löschen dieses Webhooks wird alle zugehörigen Informationen und den Übertragungsverlauf entfernen. Wirklich fortfahren?
settings.webhook_deletion_success=Webhook wurde erfolgreich entfernt!
@ -773,7 +773,7 @@ settings.githook_edit_desc=Wenn ein Hook inaktiv ist, wird der Standardinhalt be
settings.githook_name=Hook-Name
settings.githook_content=Hook-Inhalt
settings.update_githook=Hook aktualisieren
settings.add_webhook_desc="Gitea sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Du kannst auch angeben, welches Datenformat du empfangen möchtest (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen findest du im <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks Guide</a>."
settings.add_webhook_desc=Gitea sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Du kannst auch angeben, welches Datenformat du empfangen möchtest (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen findest du im <a target="_blank" rel="noopener" href="%s">Webhooks Guide</a>.
settings.payload_url=Payload-URL
settings.content_type=Inhaltstyp
settings.secret=Secret
@ -798,7 +798,7 @@ settings.update_hook_success=Webhook wurde aktualisiert.
settings.delete_webhook=Webhook löschen
settings.recent_deliveries=Letzte Zustellungen
settings.hook_type=Hook Typ
settings.add_slack_hook_desc="Füge <a href=\"%s\">Slack</a>-Integration zu deinem Repository hinzu."
settings.add_slack_hook_desc=Füge <a href="%s">Slack</a>-Integration zu deinem Repository hinzu.
settings.slack_token=Token
settings.slack_domain=Domain
settings.slack_channel=Kanal
@ -1239,19 +1239,19 @@ notices.op=Aktion
notices.delete_success=Systemmitteilungen wurden erfolgreich gelöscht.
[action]
create_repo="hat das Repository <a href=\"%s\">%s</a> erstellt"
rename_repo="hat das Repository von <code>%[1]s</code> zu <a href=\"%[2]s\">%[3]s</a> umbenannt"
commit_repo="hat auf <a href=\"%[1]s/src/%[2]s\">%[3]s</a> in <a href=\"%[1]s\">%[4]s</a> gepusht"
create_issue="`hat Issue <a href=\"%s/issues/%s\">%s#%[2]s</a> geöffnet`"
close_issue="`hat Issue <a href=\"%s/issues/%s\">%s#%[2]s</a> geschlossen`"
reopen_issue="`hat Issue <a href=\"%s/issues/%s\">%s#%[2]s</a> wieder geöffnet`"
create_pull_request="`hat Pull-Request <a href=\"%s/pulls/%s\">%s#%[2]s</a> erstellt`"
close_pull_request="`hat Pull-Request <a href=\"%s/pulls/%s\">%s#%[2]s</a> geschlossen`"
reopen_pull_request="`hat den Pull-Request <a href=\"%s/pulls/%s\">%s#%[2]s</a> wieder geöffnet`"
comment_issue="`hat Issue <a href=\"%s/issues/%s\">%s#%[2]s</a> kommentiert`"
merge_pull_request="`hat Pull-Request <a href=\"%s/pulls/%s\">%s#%[2]s</a> zuammengeführt`"
transfer_repo="hat Repository <code>%s</code> transferiert an <a href=\"%s\">%s</a>"
push_tag="hat Tag <a href=\"%s/src/%s\">%[2]s</a> auf <a href=\"%[1]s\">%[3]s</a> gepusht"
create_repo=hat das Repository <a href="%s">%s</a> erstellt
rename_repo=hat das Repository von <code>%[1]s</code> zu <a href="%[2]s">%[3]s</a> umbenannt
commit_repo=hat auf <a href="%[1]s/src/%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a> gepusht
create_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> geöffnet`
close_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> geschlossen`
reopen_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> wieder geöffnet`
create_pull_request=`hat Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> erstellt`
close_pull_request=`hat Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> geschlossen`
reopen_pull_request=`hat den Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> wieder geöffnet`
comment_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
merge_pull_request=`hat Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> zuammengeführt`
transfer_repo=hat Repository <code>%s</code> transferiert an <a href="%s">%s</a>
push_tag=hat Tag <a href="%s/src/%s">%[2]s</a> auf <a href="%[1]s">%[3]s</a> gepusht
compare_commits=Zeige Vergleich für diese %d Commits
[tool]

View File

@ -558,6 +558,7 @@ issues.remove_label_at = `removed the <div class="ui label" style="color: %s; ba
issues.add_milestone_at = `added this to the <b>%s</b> milestone %s`
issues.change_milestone_at = `modified the milestone from <b>%s</b> to <b>%s</b> %s`
issues.remove_milestone_at = `removed this from the <b>%s</b> milestone %s`
issues.deleted_milestone = `(deleted)`
issues.self_assign_at = `self-assigned this %s`
issues.add_assignee_at = `was assigned by <b>%s</b> %s`
issues.remove_assignee_at = `removed their assignment %s`
@ -718,11 +719,13 @@ settings.wiki_desc = Enable wiki system
settings.use_internal_wiki = Use builtin wiki
settings.use_external_wiki = Use external wiki
settings.external_wiki_url = External Wiki URL
settings.external_wiki_url_error = External Wiki URL is invalid
settings.external_wiki_url_desc = Visitors will be redirected to the specified URL when they click on the tab.
settings.issues_desc = Enable issue tracker
settings.use_internal_issue_tracker = Use builtin issue tracker
settings.use_external_issue_tracker = Use external issue tracker
settings.external_tracker_url = External Issue Tracker URL
settings.external_tracker_url_error = External Issue Tracker URL is invalid
settings.external_tracker_url_desc = Visitors will be redirected to the specified URL when they click on the tab.
settings.tracker_url_format = External Issue Tracker URL Format
settings.tracker_issue_style = External Issue Tracker Naming Style:

View File

@ -51,7 +51,7 @@ cancel=Peruuta
[install]
install=Asennus
title=Asennusvaiheet ottaessa ensi kertaa käyttöön
docker_helper="Jos käytät Giteaia Dockerin sisällä, ole hyvä ja lue <a target=\"_blank\" rel=\"noopener\" href=\"%s\">ohjeet</a> huolellisesti ennen kuin muutat mitään tältä sivulta!"
docker_helper=Jos käytät Giteaia Dockerin sisällä, ole hyvä ja lue <a target="_blank" rel="noopener" href="%s">ohjeet</a> huolellisesti ennen kuin muutat mitään tältä sivulta!
requite_db_desc=Gitea tarvitsee MySQL, PostgreSQL, SQLite3 tai TiDB.
db_title=Tietokanta asetukset
db_type=Tietokanta tyyppi
@ -302,7 +302,7 @@ add_email_success=Uusi sähköpostiosoitteesi on lisätty onnistuneesti.
manage_ssh_keys=Hallitse SSH avaimia
add_key=Lisää avain
ssh_desc=Tämä on luettelo tiliisi liitetyistä SSH avaimista. Koska nämä avaimet sallivat kenen tahansa niitä käyttävän pääsevän repoihisi, on erittäin tärkeää että tunnistat ne.
ssh_helper="<strong>Etkö tiedä miten?</strong>Tarkista Githubin opas <a href=\"%s\">luo oma SSH avain</a> tai ratkaise <a href=\"%s\">yleisiä ongelmia</a> joita voit kohdata SSHta käyttäessä."
ssh_helper=<strong>Etkö tiedä miten?</strong>Tarkista Githubin opas <a href="%s">luo oma SSH avain</a> tai ratkaise <a href="%s">yleisiä ongelmia</a> joita voit kohdata SSHta käyttäessä.
add_new_key=Lisää SSH avain
ssh_key_been_used=Julkisen avaimen sisältö on käytetty.
ssh_key_name_used=Samanniminen julkinen avain on jo olemassa.
@ -352,10 +352,10 @@ owner=Omistaja
repo_name=Repon nimi
repo_name_helper=Hyvä repon nimi yleensä koostuu lyhyistä, mieleenpainuvista ja ainutlaatuisista avainsanoista.
visibility=Näkyvyys
visiblity_helper="Tämä repo on <span class=\"ui red text\">yksityinen</span>"
visiblity_helper_forced="Sivuston ylläpito on pakottanut kaikkien uusien repojen olevan <span class=\"ui red text\">yksityisiä</span>"
visiblity_helper=Tämä repo on <span class="ui red text">yksityinen</span>
visiblity_helper_forced=Sivuston ylläpito on pakottanut kaikkien uusien repojen olevan <span class="ui red text">yksityisiä</span>
visiblity_fork_helper=(Arvon vaihtaminen vaikuttaa kaikkiin forkkeihin)
clone_helper="Tarvitsetko apua kloonauksessa? Vieraile osoitteessa <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Apua</a>!"
clone_helper=Tarvitsetko apua kloonauksessa? Vieraile osoitteessa <a target="_blank" rel="noopener" href="%s">Apua</a>!
fork_repo=Forkkaa repo
fork_from=Forkkaa lähteestä
fork_visiblity_helper=Et voi muuttaa forkatun repon näkyvyyttä.
@ -382,7 +382,7 @@ form.name_pattern_not_allowed=Repon nimi mallia '%s' ei ole sallittu.
need_auth=Tarvitaan lupa
migrate_type=Siirtotyyppi
migrate_type_helper="Tämä repo tulee olemaan <span class=\"text blue\">peili</span>"
migrate_type_helper=Tämä repo tulee olemaan <span class="text blue">peili</span>
migrate_repo=Siirrä repo
migrate.clone_address=Kloonaa osoite
migrate.clone_address_desc=Tämä voi olla HTTP/HTTPS/GIT URL tai paikallisen palvelimen polku.
@ -494,7 +494,7 @@ issues.filter_sort.recentupdate=Äskettäin päivitetty
issues.filter_sort.leastupdate=Kauiten aikaa sitten päivitetty
issues.filter_sort.mostcomment=Eniten kommentoidut
issues.filter_sort.leastcomment=Vähiten kommentoidut
issues.opened_by="%[1]s avasi <a href=\"%[2]s\">%[3]s</a>"
issues.opened_by=%[1]s avasi <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=%[1]s avasi %[2]s
issues.previous=Edellinen
issues.next=Seuraava
@ -507,9 +507,9 @@ issues.close_comment_issue=Kommentoi ja sulje
issues.reopen_issue=Avaa uudelleen
issues.reopen_comment_issue=Kommentoi ja avaa uudelleen
issues.create_comment=Kommentoi
issues.closed_at="`suljettu <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.reopened_at="`avattu uudelleen <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.commit_ref_at="`viittasi tähän ongelmaan commitissa <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.closed_at=`suljettu <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`avattu uudelleen <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`viittasi tähän ongelmaan commitissa <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Tekijä
issues.collaborator=Yhteistyökumppani
issues.owner=Omistaja
@ -537,7 +537,7 @@ pulls.compare_compare=vertaa
pulls.filter_branch=Suodata branch
pulls.no_results=Tuloksia ei löytynyt.
pulls.nothing_to_compare=Ei ole mitään verrattavaa koska base ja head branchit ovat tasoissa.
pulls.has_pull_request="`On olemassa jo pull pyyntö näiden kohteiden välillä: <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`On olemassa jo pull pyyntö näiden kohteiden välillä: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Luo Pull-pyyntö
pulls.title_desc=haluaa yhdistää %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code>%[3]s</code>
pulls.merged_title_desc=yhdistetty %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code>%[3]s</code> %[4]s
@ -553,7 +553,7 @@ pulls.can_auto_merge_desc=Tämä pull-pyyntö voidaan yhdistää automaattisesti
pulls.cannot_auto_merge_desc=Tätä pull-pyyntöä ei voi yhdistää automaattisesti koska on konflikteja.
pulls.cannot_auto_merge_helper=Ole hyvä ja yhdistä manuaalisesti konfliktien ratkaisemiseksi.
pulls.merge_pull_request=Yhdistä Pull-pyyntö
pulls.open_unmerged_pull_exists="`Et voi suorittaa uudelleenavaus toimintoa koska on jo olemassa pull-pyyntö (#%d) samasta reposta samoilla yhdistämistiedoilla ja odottaa yhdistämistä.`"
pulls.open_unmerged_pull_exists=`Et voi suorittaa uudelleenavaus toimintoa koska on jo olemassa pull-pyyntö (#%d) samasta reposta samoilla yhdistämistiedoilla ja odottaa yhdistämistä.`
milestones.new=Uusi merkkipaalu
milestones.open_tab=%d avoinna
@ -661,7 +661,7 @@ settings.search_user_placeholder=Etsi käyttäjä...
settings.org_not_allowed_to_be_collaborator=Yhteistyökumppaniksi ei voi lisätä organisaatiota.
settings.user_is_org_member=Käyttäjä on organisaation jäsen, jota ei voi lisätä yhteistyökumppaniksi.
settings.add_webhook=Lisää webkoukku
settings.hooks_desc="Webkoukut muistuttavat paljon perus HTTP POST tapahtuma laukaisimia. Aina kun jotain tapahtuu Giteaissa, käsittelemme ilmoituksen määrittäämääsi kohteeseen. Lisätietoja <a target=\"_blank\" rel=\"noopener\" href=\"%s\">webkoukku oppaassa</a>."
settings.hooks_desc=Webkoukut muistuttavat paljon perus HTTP POST tapahtuma laukaisimia. Aina kun jotain tapahtuu Giteaissa, käsittelemme ilmoituksen määrittäämääsi kohteeseen. Lisätietoja <a target="_blank" rel="noopener" href="%s">webkoukku oppaassa</a>.
settings.webhook_deletion=Poista webkoukku
settings.webhook_deletion_desc=Tämän webkoukun poistaminen poistaa sen tiedot ja kaiken toimitushistorian. Haluatko jatkaa?
settings.webhook_deletion_success=Webkoukku on poistettu onnistuneesti!
@ -677,7 +677,7 @@ settings.githook_edit_desc=Jos koukku ei ole käytössä, esitellään esimerkki
settings.githook_name=Koukun nimi
settings.githook_content=Koukun sisältö
settings.update_githook=Päivitys koukku
settings.add_webhook_desc="Gitea lähettää <code>POST</code> requestin määrittämääsi URLiin, mukaanlukien tapahtuneen eventin. Voit myös määrittää millaisen tiedostomuodon haluat saada koukun lauettua (JSON, x-www-form-urlencoded, XML, jne). Lisätietoa löytyy meidän <a target=\"_blank\" rel=\"noopener\" href=\"%s\">koukut oppaasta</a>."
settings.add_webhook_desc=Gitea lähettää <code>POST</code> requestin määrittämääsi URLiin, mukaanlukien tapahtuneen eventin. Voit myös määrittää millaisen tiedostomuodon haluat saada koukun lauettua (JSON, x-www-form-urlencoded, XML, jne). Lisätietoa löytyy meidän <a target="_blank" rel="noopener" href="%s">koukut oppaasta</a>.
settings.content_type=Sisältötyyppi
settings.secret=Salaus
settings.slack_username=Käyttäjätunnus
@ -698,7 +698,7 @@ settings.update_hook_success=Webkoukku on päivitetty.
settings.delete_webhook=Poista webkoukku
settings.recent_deliveries=Viimeisimmät toimitukset
settings.hook_type=Koukkutyyppi
settings.add_slack_hook_desc="Lisää <a href=\"%s\">Slack</a> integraatio repoosi."
settings.add_slack_hook_desc=Lisää <a href="%s">Slack</a> integraatio repoosi.
settings.slack_token=Pääsymerkki
settings.slack_domain=Verkkotunnus
settings.slack_channel=Kanava
@ -1114,19 +1114,19 @@ notices.op=Toiminta
notices.delete_success=Järjestelmän ilmoitukset on poistettu onnistuneesti.
[action]
create_repo="luotu repo <a href=\"%s\">%s</a>"
rename_repo="uudelleennimetty repo <code>%[1]s</code> nimelle <a href=\"%[2]s\">%[3]s</a>"
commit_repo="pushattu kohteeseen <a href=\"%[1]s/src/%[2]s\">%[3]s</a> paikassa <a href=\"%[1]s\">%[4]s</a>"
create_issue="`avasi ongelman <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
close_issue="`sulki ongelman <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
reopen_issue="`avasi uudelleen ongelman <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`luotu pull-pyyntö <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
close_pull_request="`sulki pull-pyynnön <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
reopen_pull_request="`avasi uudelleen pull-pyynnön <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`kommentoi ongelmaa <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
merge_pull_request="`yhdistetty pull-pyyntö <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
transfer_repo="siirretty repo <code>%s</code> kohteeseen <a href=\"%s\">%s</a>"
push_tag="pushattu tagi <a href=\"%s/src/%s\">%[2]s</a> kohteeseen <a href=\"%[1]s\">%[3]s</a>"
create_repo=luotu repo <a href="%s">%s</a>
rename_repo=uudelleennimetty repo <code>%[1]s</code> nimelle <a href="%[2]s">%[3]s</a>
commit_repo=pushattu kohteeseen <a href="%[1]s/src/%[2]s">%[3]s</a> paikassa <a href="%[1]s">%[4]s</a>
create_issue=`avasi ongelman <a href="%s/issues/%s">%s#%[2]s</a>`
close_issue=`sulki ongelman <a href="%s/issues/%s">%s#%[2]s</a>`
reopen_issue=`avasi uudelleen ongelman <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`luotu pull-pyyntö <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`sulki pull-pyynnön <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`avasi uudelleen pull-pyynnön <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`kommentoi ongelmaa <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`yhdistetty pull-pyyntö <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=siirretty repo <code>%s</code> kohteeseen <a href="%s">%s</a>
push_tag=pushattu tagi <a href="%s/src/%s">%[2]s</a> kohteeseen <a href="%[1]s">%[3]s</a>
compare_commits=Näytä vertailu näille %d commiteille
[tool]

View File

@ -52,7 +52,7 @@ cancel=Annuler
[install]
install=Installation
title=Instructions pour la première exécution
docker_helper="Si vous exécutez Gitea grâce à Docker, merci de lire la <a target=\"_blank\" rel=\"noopener\" href=\"%s\">procédure</a> attentivement avant de modifier quoi que ce soit sur cette page !"
docker_helper=Si vous exécutez Gitea grâce à Docker, merci de lire la <a target="_blank" rel="noopener" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit sur cette page !
requite_db_desc=Gitea requiert MySQL, PostgreSQL, SQLite3 ou TiDB.
db_title=Paramètres de la base de données
db_type=Type de base de données
@ -325,7 +325,7 @@ keep_email_private_popup=Votre adresse email sera masquée aux autres utilisateu
manage_ssh_keys=Gérer les clés SSH
add_key=Ajouter une Clé
ssh_desc=Ceci est une liste des clés SSH associées à votre compte. Supprimez celles que vous ne reconnaissez pas.
ssh_helper="<strong>Besoin d'aide?</strong> Consultez notre guide pour <a href=\"%s\"> générer des clés SSH</a> ou résoudre les <a href=\"%s\"> problèmes courants de SSH</a>."
ssh_helper=<strong>Besoin d'aide?</strong> Consultez notre guide pour <a href="%s"> générer des clés SSH</a> ou résoudre les <a href="%s"> problèmes courants de SSH</a>.
add_new_key=Ajouter une Clé SSH
ssh_key_been_used=Le contenu de la clé publique a été utilisée.
ssh_key_name_used=Un clé publique avec le même nom existe déjà.
@ -387,10 +387,10 @@ owner=Propriétaire
repo_name=Nom du dépôt
repo_name_helper=Idéalement, le nom d'un dépot devrait être court, mémorable et <strong>unique</strong>.
visibility=Visibilité
visiblity_helper="Ce dépôt est <span class=\"ui red text\"> privé</span>"
visiblity_helper_forced="L'administrateur du site a forcé tous les nouveaux dépôts à être <span class=\"ui red text\">privés</span>"
visiblity_helper=Ce dépôt est <span class="ui red text"> privé</span>
visiblity_helper_forced=L'administrateur du site a forcé tous les nouveaux dépôts à être <span class="ui red text">privés</span>
visiblity_fork_helper=(Les changement de cette valeur affecteront tous les forks)
clone_helper="Besoin d'aide pour dupliquer ? Visitez <a target=\"_blank\" rel=\"noopener\" href=\"%s\">l'aide</a> !"
clone_helper=Besoin d'aide pour dupliquer ? Visitez <a target="_blank" rel="noopener" href="%s">l'aide</a> !
fork_repo=Créer un fork du dépôt
fork_from=Fork de
fork_visiblity_helper=La visibilité d'un fork ne peut pas être modifiée.
@ -419,7 +419,7 @@ form.name_pattern_not_allowed=Motif '%s' interdit pour les noms de dépôt.
need_auth=Nécessite une Autorisation
migrate_type=Type de migration
migrate_type_helper="Ce dépôt sera un <span class=\"text blue\"> miroir</span>"
migrate_type_helper=Ce dépôt sera un <span class="text blue"> miroir</span>
migrate_repo=Migrer le dépôt
migrate.clone_address=Adresse du clone
migrate.clone_address_desc=Cela peut être une URL HTTP/HTTPS/GIT ou un chemin d'accès local.
@ -489,7 +489,7 @@ editor.add=Ajouter '%s'
editor.update=Mettre à jour '%s'
editor.delete=Supprimer '%s'
editor.commit_message_desc=Ajouter une optionnelle description détaillée...
editor.commit_directly_to_this_branch="Soumettre directement à la branche <strong class=\"branch-name\">%s</strong>."
editor.commit_directly_to_this_branch=Soumettre directement à la branche <strong class="branch-name">%s</strong>.
editor.create_new_branch=Créer une <strong>nouvelle branche</strong> pour cette validation et envoyer une nouvelle demande d'ajout.
editor.new_branch_name_desc=Nouveau nom de la branche...
editor.cancel=Annuler
@ -499,7 +499,7 @@ editor.directory_is_a_file=L'entrée '%s' dans le chemin daccès parent est u
editor.file_is_a_symlink=Le fichier '%s' est un lien symbolique qui ne peut pas être modifié par l'éditeur web
editor.filename_is_a_directory=Le nom de fichier '%s' existe déjà dans ce dépot.
editor.file_editing_no_longer_exists=Le fichier '%s' que vous modifiez n'existe plus dans le dépôt.
editor.file_changed_while_editing="Le contenu du fichier à changé depuis que vous avez commencé à l'éditer. <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Cliquez ici</a> pour voir ce qui à été modifié ou <strong>appuyez sur commit encore une fois</strong> pour remplacer ces changements."
editor.file_changed_while_editing=Le contenu du fichier à changé depuis que vous avez commencé à l'éditer. <a target="_blank" rel="noopener" href="%s">Cliquez ici</a> pour voir ce qui à été modifié ou <strong>appuyez sur commit encore une fois</strong> pour remplacer ces changements.
editor.file_already_exists=La branche '%s' existe déjà dans ce dépôt.
editor.no_changes_to_show=Il ny a aucun changement à afficher.
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec lerreur : %v
@ -538,8 +538,8 @@ issues.label_templates.info=Il n'y a pas encore d'étiquettes. Vous pouvez cliqu
issues.label_templates.helper=Sélectionnez un ensemble d'étiquettes
issues.label_templates.use=Utilisez ce jeu d'étiquettes
issues.label_templates.fail_to_load_file=Impossible de charger le fichier de modèle étiquette '%s' : %v
issues.add_label_at="`ajouté le <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.remove_label_at="`supprimé le <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.add_label_at=`ajouté le <div class="ui label" style="color: %s; background-color: %s">%s</div> label %s`
issues.remove_label_at=`supprimé le <div class="ui label" style="color: %s; background-color: %s">%s</div> label %s`
issues.add_milestone_at=`a ajouté cela au jalon <b>%s</b> %s`
issues.change_milestone_at=`a modifié le jalon de <b>%s</b> à <b>%s</b> %s`
issues.remove_milestone_at=`a supprimé cela du jalon <b>%s</b> %s`
@ -568,14 +568,14 @@ issues.filter_sort.recentupdate=Mis à jour récemment
issues.filter_sort.leastupdate=Moins récemment mis à jour
issues.filter_sort.mostcomment=Les plus commentés
issues.filter_sort.leastcomment=Les moins commentés
issues.opened_by="Créé %[1]s par <a href=\"%[2]s\">%[3]s</a>"
issues.opened_by=Créé %[1]s par <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=ouvert %[1]s par %[2]s
issues.previous=Page Précédente
issues.next=Page Suivante
issues.open_title=Ouvert
issues.closed_title=Fermé
issues.num_comments=%d commentaires
issues.commented_at="`a commenté <a href=\"#%s\"> %s</a>`"
issues.commented_at=`a commenté <a href="#%s"> %s</a>`
issues.delete_comment_confirm=Êtes-vous certain de vouloir supprimer ce commentaire?
issues.no_content=Il n'existe pas encore de contenu.
issues.close_issue=Fermer
@ -583,13 +583,13 @@ issues.close_comment_issue=Commenter et fermer
issues.reopen_issue=Réouvrir
issues.reopen_comment_issue=Commenter et réouvrir
issues.create_comment=Créer un commentaire
issues.closed_at="`fermé à <a id=\"%[1]s\"href=\"#%[1]s\"> %[2]s</a>`"
issues.reopened_at="`réouvert à <a id=\"%[1]s\" href=\"#%[1]s\"> %[2]s</a>`"
issues.commit_ref_at="`a référencé ce problème depuis une révision <a id=\"%[1]s\" href=\"#%[1]s\"> %[2]s</a>`"
issues.closed_at=`fermé à <a id="%[1]s"href="#%[1]s"> %[2]s</a>`
issues.reopened_at=`réouvert à <a id="%[1]s" href="#%[1]s"> %[2]s</a>`
issues.commit_ref_at=`a référencé ce problème depuis une révision <a id="%[1]s" href="#%[1]s"> %[2]s</a>`
issues.poster=Publier
issues.collaborator=Collaborateur
issues.owner=Propriétaire
issues.sign_in_require_desc="<a href=\"%s\">Connectez-vous</a> pour rejoindre cette conversation."
issues.sign_in_require_desc=<a href="%s">Connectez-vous</a> pour rejoindre cette conversation.
issues.edit=Modifier
issues.cancel=Annuler
issues.save=Enregistrer
@ -617,7 +617,7 @@ pulls.compare_compare=Comparer
pulls.filter_branch=Filtre de branche
pulls.no_results=Aucun résultat trouvé.
pulls.nothing_to_compare=Il n'y a rien de comparable parce que les deux branches sont égales.
pulls.has_pull_request="`Il y a déjà une demande d'ajout entre ces deux cibles : <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`Il y a déjà une demande d'ajout entre ces deux cibles : <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Creer une demande d'ajout
pulls.title_desc=veut fusionner %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code>
pulls.merged_title_desc=a fusionné %[1]d révision(s) à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
@ -633,7 +633,7 @@ pulls.can_auto_merge_desc=Cette demande d'ajout peut être fusionnée automatiqu
pulls.cannot_auto_merge_desc=Cette demande d'ajout ne peut pas être fusionnée automatiquement à cause de conflits.
pulls.cannot_auto_merge_helper=Fusionner manuellement afin de résoudre les conflits.
pulls.merge_pull_request=Fusionner la demande d'ajout
pulls.open_unmerged_pull_exists="`Vous ne pouvez effectuer une réouverture car il y a déjà une pull-request ouverte (#%d) depuis le même dépôt avec les mêmes informations de fusion et est en attente de fusion.`"
pulls.open_unmerged_pull_exists=`Vous ne pouvez effectuer une réouverture car il y a déjà une pull-request ouverte (#%d) depuis le même dépôt avec les mêmes informations de fusion et est en attente de fusion.`
milestones.new=Nouveau Jalon
milestones.open_tab=%d Ouvert
@ -752,7 +752,7 @@ settings.search_user_placeholder=Rechercher un utilisateur...
settings.org_not_allowed_to_be_collaborator=Une organisation n'est pas autorisée à être ajoutée en tant que collaborateur.
settings.user_is_org_member=Cet utilisateur ne peut pas être ajouté en tant que collaborateur car il fait partie d'une organisation.
settings.add_webhook=Ajouter un Webhook
settings.hooks_desc="Les Webhooks sont des déclencheurs de POST HTTP . Lorsque qu'un événement se produit dans Gitea, une notification sera envoyée vers l'hôte cible préalablement spécifié. Apprenez-en davantage dans le <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guide des Webhooks</a>."
settings.hooks_desc=Les Webhooks sont des déclencheurs de POST HTTP . Lorsque qu'un événement se produit dans Gitea, une notification sera envoyée vers l'hôte cible préalablement spécifié. Apprenez-en davantage dans le <a target="_blank" rel="noopener" href="%s">Guide des Webhooks</a>.
settings.webhook_deletion=Supprimer le Webhook
settings.webhook_deletion_desc=Supprimer ce webhook va supprimer ses informations et l'historique de livraison. Voulez-vous continuer ?
settings.webhook_deletion_success=Le webhook a été supprimé avec succès !
@ -769,7 +769,7 @@ settings.githook_edit_desc=Si un Hook est inactif, un exemple de contenu vous se
settings.githook_name=Nom du Hook
settings.githook_content=Contenu du Hook
settings.update_githook=Mettre le Hook à jour
settings.add_webhook_desc="Une requête <code>POST</code> sera transmise vers l'URL spécifiée selon l'événement produit. Vous pouvez également choisir le format souhaité pour la réception des données (JSON, x-www-form-urlencoded, XML etc). Pour plus d'infos, lisez le <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guide des WebHooks</a>."
settings.add_webhook_desc=Une requête <code>POST</code> sera transmise vers l'URL spécifiée selon l'événement produit. Vous pouvez également choisir le format souhaité pour la réception des données (JSON, x-www-form-urlencoded, XML etc). Pour plus d'infos, lisez le <a target="_blank" rel="noopener" href="%s">Guide des WebHooks</a>.
settings.payload_url=URL des Données Utiles
settings.content_type=Type de contenu
settings.secret=Confidentiel
@ -794,7 +794,7 @@ settings.update_hook_success=Webhook mis à jour.
settings.delete_webhook=Supprimer le Webhook
settings.recent_deliveries=Livraisons récentes
settings.hook_type=Type de Hook
settings.add_slack_hook_desc="Intégrer <a href=\"%s\"> Slack</a> à votre dépôt."
settings.add_slack_hook_desc=Intégrer <a href="%s"> Slack</a> à votre dépôt.
settings.slack_token=Jeton
settings.slack_domain=Domaine
settings.slack_channel=Canal
@ -1233,19 +1233,19 @@ notices.op=Opération
notices.delete_success=Notifications système supprimées avec succès.
[action]
create_repo="a créé le dépôt <a href=\"%s\">%s</a>"
rename_repo="a rebaptisé le dépôt de <code>%[1]s</code> vers <a href=\"%[2]s\">%[3]s</a>"
commit_repo="a poussé dans <a href=\"%[1]s/src/%[2]s\">%[3]s</a> sur <a href=\"%[1]s\">%[4]s</a>"
create_issue="`a ouvert un problème <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
close_issue="`tickets clos <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
reopen_issue="`tickets ré-ouverts <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`pull request créée le <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
close_pull_request="`pull request fermé <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
reopen_pull_request="`pull request ré-ouverte <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`a commenté le problème <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
merge_pull_request="`demande d'ajout fusionnée le <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
transfer_repo="a transféré le dépôt <code>%s</code> à <a href=\"%s\">%s</a>"
push_tag="a soumis le tag <a href=\"%s/src/%s\">%[2]s</a> sur <a href=\"%[1]s\">%[3]s</a>"
create_repo=a créé le dépôt <a href="%s">%s</a>
rename_repo=a rebaptisé le dépôt de <code>%[1]s</code> vers <a href="%[2]s">%[3]s</a>
commit_repo=a poussé dans <a href="%[1]s/src/%[2]s">%[3]s</a> sur <a href="%[1]s">%[4]s</a>
create_issue=`a ouvert un problème <a href="%s/issues/%s">%s#%[2]s</a>`
close_issue=`tickets clos <a href="%s/issues/%s">%s#%[2]s</a>`
reopen_issue=`tickets ré-ouverts <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`pull request créée le <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`pull request fermé <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`pull request ré-ouverte <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`a commenté le problème <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`demande d'ajout fusionnée le <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=a transféré le dépôt <code>%s</code> à <a href="%s">%s</a>
push_tag=a soumis le tag <a href="%s/src/%s">%[2]s</a> sur <a href="%[1]s">%[3]s</a>
compare_commits=Comparer ces %d révisions
[tool]

View File

@ -51,7 +51,7 @@ cancel=Annulla
[install]
install=Installazione
title=Passi d'installazione per il primo avvio
docker_helper="Se stai utilizzando Gitea su Docker, per favore leggi le <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!"
docker_helper=Se stai utilizzando Gitea su Docker, per favore leggi le <a target="_blank" rel="noopener" href="%s">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!
requite_db_desc=Gitea necessita MySQL, PostgreSQL, SQLite3 o TiDB.
db_title=Impostazioni Database
db_type=Tipo di database
@ -309,7 +309,7 @@ keep_email_private_popup=Il tuo indirizzo email sarà nascosto agli altri utenti
manage_ssh_keys=Gestisci chiavi SSH
add_key=Aggiungi Chiave
ssh_desc=Questa è una lista di chiavi SSH associate al tuo account. Poiché queste chiavi consentono a chiunque di ottenere accesso alle tue repository, è molto importante che tu le riconosca.
ssh_helper="<strong>Non sai come?</strong> Controlla la guida di GitHub sul <a href=\"%s\">creare le tue chiavi SSH</a> o sul risolvere <a href=\"%s\">problemi frequenti</a> che potresti incontrare usando SSH."
ssh_helper=<strong>Non sai come?</strong> Controlla la guida di GitHub sul <a href="%s">creare le tue chiavi SSH</a> o sul risolvere <a href="%s">problemi frequenti</a> che potresti incontrare usando SSH.
add_new_key=Aggiungi Chiave SSH
ssh_key_been_used=È stato utilizzato il contenuto della chiave pubblica.
ssh_key_name_used=Chiave pubblica con lo stesso nome esiste già.
@ -359,10 +359,10 @@ owner=Proprietario
repo_name=Nome Repository
repo_name_helper=I migliori nomi dei repository sono brevi, facili da memorizzare e <strong>univoci</strong>.
visibility=Visibilità
visiblity_helper="Questo repository è <span class=\"ui red text\"> privato</span>"
visiblity_helper_forced="L'amministratore del sito ha deciso che tutti i nuovi repository devono essere <span class=\"ui red text\">privati</span>"
visiblity_helper=Questo repository è <span class="ui red text"> privato</span>
visiblity_helper_forced=L'amministratore del sito ha deciso che tutti i nuovi repository devono essere <span class="ui red text">privati</span>
visiblity_fork_helper=(La modifica di questo valore avrà effetto su tutti i fork)
clone_helper="Hai bisogno di aiuto per la clonazione? Visita <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Aiuto</a>!"
clone_helper=Hai bisogno di aiuto per la clonazione? Visita <a target="_blank" rel="noopener" href="%s">Aiuto</a>!
fork_repo=Forka Repository
fork_from=Forka da
fork_visiblity_helper=Non puoi cambiare la visibilità di un repository forkato.
@ -389,7 +389,7 @@ form.name_pattern_not_allowed=La struttura del nome del repository %s non è con
need_auth=Richiesta di autorizzazione
migrate_type=Tipo di migrazione
migrate_type_helper="Questo repository sarà un <span class=\"text blue\">mirror</span>"
migrate_type_helper=Questo repository sarà un <span class="text blue">mirror</span>
migrate_repo=Migra Repository
migrate.clone_address=Duplica Indirizzo
migrate.clone_address_desc=Può essere un URL HTTP/HTTPS/GIT o il percorso del server locale.
@ -484,7 +484,7 @@ issues.filter_sort.recentupdate=Aggiornati di recente
issues.filter_sort.leastupdate=Aggiornati tempo fa
issues.filter_sort.mostcomment=I più commentati
issues.filter_sort.leastcomment=I meno commentati
issues.opened_by="aperto %[1]s da <a href=\"/%[2]s\">%[3]s</a>"
issues.opened_by=aperto %[1]s da <a href="/%[2]s">%[3]s</a>
issues.opened_by_fake=aperto %[1]s da %[2]s
issues.previous=Pagina precedente
issues.next=Pagina successiva
@ -497,8 +497,8 @@ 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 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.reopened_at="`riaperto <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.closed_at=`chiuso <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`riaperto <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Autore
issues.collaborator=Collaboratori
issues.owner=Proprietario
@ -524,7 +524,7 @@ pulls.compare_compare=confronta
pulls.filter_branch=Filtra branch
pulls.no_results=Nessun risultato trovato.
pulls.nothing_to_compare=Non c'è niente da confrontare perchè i branch base e head uguali.
pulls.has_pull_request="`E' già presente una pull request tra questi due trargets: <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`E' già presente una pull request tra questi due trargets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Crea Pull Request
pulls.title_desc=vorrebbe unire %[1]d commit da <code>%[2]s</code> a <code>%[3]s</code>
pulls.merged_title_desc=ha unito %[1]d commit da <code>%[2]s</code> a <code>%[3]s</code> %[4]s
@ -629,7 +629,7 @@ settings.search_user_placeholder=Cerca utente...
settings.org_not_allowed_to_be_collaborator=Un'organizzazione non può essere aggiunta come collaboratore.
settings.user_is_org_member=L'utente è un membro dell'organizzazione che non può essere aggiunto come collaboratore.
settings.add_webhook=Aggiungi Webhook
settings.hooks_desc="I Webhooks sono molto simili a un basilare evento trigger HTTP POST. Ogni volta che qualcosa si verifica in Gitea, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guida ai Webhooks</a>."
settings.hooks_desc=I Webhooks sono molto simili a un basilare evento trigger HTTP POST. Ogni volta che qualcosa si verifica in Gitea, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target="_blank" rel="noopener" href="%s">Guida ai Webhooks</a>.
settings.webhook_deletion=Elimina Webhook
settings.webhook_deletion_success=Il Webhook è stato eliminato con successo!
settings.webhook.test_delivery=Test di consegna
@ -640,7 +640,7 @@ settings.githook_edit_desc=Se l'hook è inattivo, sarà presentato un contenuto
settings.githook_name=Nome hook
settings.githook_content=Contenuto hook
settings.update_githook=Aggiorna Hook
settings.add_webhook_desc="Gitea manderà una richiesta <code>POST</code> all'URL specificata, insieme alle informazioni sull'evento avvenuto. Puoi anche specificare quale tipo di formato dati vorresti ottenere all'innesco dell'hook (JSON, x-www-form-urlencoded, XML, ecc). Puoi trovare più informazioni nella nostra <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guida ai Webhook</a>."
settings.add_webhook_desc=Gitea manderà una richiesta <code>POST</code> all'URL specificata, insieme alle informazioni sull'evento avvenuto. Puoi anche specificare quale tipo di formato dati vorresti ottenere all'innesco dell'hook (JSON, x-www-form-urlencoded, XML, ecc). Puoi trovare più informazioni nella nostra <a target="_blank" rel="noopener" href="%s">Guida ai Webhook</a>.
settings.slack_username=Nome utente
settings.slack_icon_url=URL icona
settings.slack_color=Colore
@ -659,7 +659,7 @@ settings.update_hook_success=Il webhook è stato aggiornato.
settings.delete_webhook=Eliminare Webhook
settings.recent_deliveries=Recenti Deliveries
settings.hook_type=Tipo di Hook
settings.add_slack_hook_desc="Aggiungi <a href=\"%s\"> Slack</a> integrazione al tuo repository."
settings.add_slack_hook_desc=Aggiungi <a href="%s"> Slack</a> integrazione al tuo repository.
settings.slack_domain=Dominio
settings.slack_channel=Canale
settings.deploy_keys=Dispiega Chiavi
@ -1034,14 +1034,14 @@ notices.desc=Descrizione
notices.delete_success=Gli avvisi di sistema sono stati successivamente eliminati.
[action]
create_repo="ha creato il repository <a href=\"%s\">%s</a>"
rename_repo="repository rinominato da <code>%[1]s</code> a <a href=\"%[2]s\">[3]s</a>"
commit_repo="ha pushato nel <a href=\"%[1]s/src/%[2]s\">%[3]s</a> in <a href=\"%[1]s\">%[4]s</a>"
create_issue="`ha aperto il problema <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`creata pull request <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`ha commentato il problema <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
transfer_repo="ha trasferito il repository <code>%s</code> a <a href=\"%s\">%s</a>"
push_tag="ha pushato il tag <a href=\"%s/src/%s\">%[2]s</a> a <a href=\"%[1]s\">%[3]s</a>"
create_repo=ha creato il repository <a href="%s">%s</a>
rename_repo=repository rinominato da <code>%[1]s</code> a <a href="%[2]s">[3]s</a>
commit_repo=ha pushato nel <a href="%[1]s/src/%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a>
create_issue=`ha aperto il problema <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`creata pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`ha commentato il problema <a href="%s/issues/%s">%s#%[2]s</a>`
transfer_repo=ha trasferito il repository <code>%s</code> a <a href="%s">%s</a>
push_tag=ha pushato il tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
compare_commits=Visualizza comparazione tra questi %d commit
[tool]

View File

@ -48,7 +48,7 @@ cancel=Annuleren
[install]
install=Installatie
title=Installatiestappen voor de eerste keer opstarten
docker_helper="Als u gebruik maakt Gitea binnen Docker, lees dan de <a target=\"_blank\" rel=\"noopener\" href=\"%s\">richtlijnen</a> voordat u iets veranderen op deze pagina!"
docker_helper=Als u gebruik maakt Gitea binnen Docker, lees dan de <a target="_blank" rel="noopener" href="%s">richtlijnen</a> voordat u iets veranderen op deze pagina!
requite_db_desc=Gitea vereist MySQL, PostgreSQL, SQite3 of TiDB.
db_title=Database-instellingen
db_type=Database-type
@ -301,7 +301,7 @@ add_email_success=Het e-mailadres was toegevoegd.
manage_ssh_keys=Beheer SSH sleutels
add_key=Sleutel toevoegen
ssh_desc=Dit is een lijst van alle SSH sleutels die gekoppeld zijn aan uw account. Verwijder alle sleutels die u niet herkent.
ssh_helper="<strong>Weet u niet hoe?</strong> Lees dan onze handleiding voor het <a href=\"%s\"> genereren van SSH sleutels</a> of voor <a href=\"%s\"> algemene SSH</a> problemen."
ssh_helper=<strong>Weet u niet hoe?</strong> Lees dan onze handleiding voor het <a href="%s"> genereren van SSH sleutels</a> of voor <a href="%s"> algemene SSH</a> problemen.
add_new_key=SSH sleutel toevoegen
ssh_key_been_used=Publieke sleutel werd gebruikt.
ssh_key_name_used=Een publieke sleutel met dezelfde naam bestaat al.
@ -347,10 +347,10 @@ owner=Eigenaar
repo_name=Naam van repository
repo_name_helper=Een goede repository-naam is kort, makkelijk te onthouden en <strong>uniek</strong>.
visibility=Zichtbaarheid
visiblity_helper="Deze repository is <span class=\"ui red text\">privé</span>"
visiblity_helper_forced="Sitebeheerder heeft alle nieuwe repositories gedwongen <span class=\"ui red text\">privé</span> te zijn"
visiblity_helper=Deze repository is <span class="ui red text">privé</span>
visiblity_helper_forced=Sitebeheerder heeft alle nieuwe repositories gedwongen <span class="ui red text">privé</span> te zijn
visiblity_fork_helper=(Verandering van deze waarde zal van invloed zijn op alle forks)
clone_helper="Hulp nodig bij het klonen? Bekijk dan onze <a target=\"_blank\" rel=\"noopener\" href=\"%s\"> handleiding</a>!"
clone_helper=Hulp nodig bij het klonen? Bekijk dan onze <a target="_blank" rel="noopener" href="%s"> handleiding</a>!
fork_repo=Repository forken
fork_from=Afsplitsing van
fork_visiblity_helper=U kunt de zichtbaarheid van een geforkte repository niet aanpassen.
@ -376,7 +376,7 @@ form.name_pattern_not_allowed=Repository naampatroon '%s' is niet toegestaan.
need_auth=Autorisatie vereist
migrate_type=Migratie type
migrate_type_helper="Deze repository zal een <span class=\"text blue\">kopie</span> zijn"
migrate_type_helper=Deze repository zal een <span class="text blue">kopie</span> zijn
migrate_repo=Migreer repository
migrate.clone_address=Kloon adres
migrate.clone_address_desc=Dit kan een HTTP/HTTPS/GIT URL zijn
@ -469,7 +469,7 @@ issues.filter_sort.recentupdate=Recent bijgewerkt
issues.filter_sort.leastupdate=Minst recent bijgewerkt
issues.filter_sort.mostcomment=Meest besproken
issues.filter_sort.leastcomment=Minst besproken
issues.opened_by="%[1]s werd geopend door <a href=\"/%[2]s\">%[3]s</a>"
issues.opened_by=%[1]s werd geopend door <a href="/%[2]s">%[3]s</a>
issues.opened_by_fake=%[1]s werd geopend door %[2]s
issues.previous=Vorige
issues.next=Volgende
@ -481,9 +481,9 @@ issues.close_comment_issue=Sluit en geef commentaar
issues.reopen_issue=Heropen
issues.reopen_comment_issue=Heropen en geef commentaar
issues.create_comment=Reageer
issues.closed_at="`gesloten om <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.reopened_at="`heropend om <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.commit_ref_at="`verwees naar dit probleem vanuit commit <a id=\"%[1]s\" href=\"#%[1]s\"> %[2]s'</a>`"
issues.closed_at=`gesloten om <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`heropend om <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`verwees naar dit probleem vanuit commit <a id="%[1]s" href="#%[1]s"> %[2]s'</a>`
issues.collaborator=Medewerker
issues.owner=Eigenaar
issues.edit=Bewerken
@ -506,7 +506,7 @@ pulls.compare_changes_desc=Vergelijk twee branches en maak een pull verzoek voor
pulls.compare_compare=vergelijk
pulls.no_results=Geen resultaten gevonden.
pulls.nothing_to_compare=Er is niets te vergelijken omdat base en head branches dezelfde zijn.
pulls.has_pull_request="' Er is al een pull-aanvraag tussen deze twee targets: <a href=\"%[1]s/pulls/%[3]d\"> %[2]s #% [3]d</a>'"
pulls.has_pull_request=` Er is al een pull-aanvraag tussen deze twee targets: <a href="%[1]s/pulls/%[3]d"> %[2]s #% [3]d</a`
pulls.create=Pull verzoek aanmaken
pulls.title_desc=wil %[1]d commits van <code>%[2]s</code> samenvoegen met <code>%[3]s</code>
pulls.merged_title_desc=heeft %[1]d commits samengevoegd van <code>%[2]s</code> naar <code>%[3]s</code> %[4]s
@ -521,7 +521,7 @@ pulls.can_auto_merge_desc=Dit pull-request kan automatisch samengevoegd worden.
pulls.cannot_auto_merge_desc=Dit pull-request kan niet worden gemerged omdat er conflicten zijn.
pulls.cannot_auto_merge_helper=Gelieve beide versies manueel samen te voegen om de conflicten op te lossen.
pulls.merge_pull_request=Samenvoegen van pull verzoek
pulls.open_unmerged_pull_exists="U kan de bewerking 'heropenen' niet uitvoeren omdat er al een pull-aanvraag (#%d) is van dezelfde repository met dezelfde informatie. Voeg deze eerst samen."
pulls.open_unmerged_pull_exists=`U kan de bewerking 'heropenen' niet uitvoeren omdat er al een pull-aanvraag (#%d) is van dezelfde repository met dezelfde informatie. Voeg deze eerst samen.`
milestones.new=Nieuwe mijlpaal
milestones.open_tab=%d geopend
@ -617,7 +617,7 @@ settings.search_user_placeholder=Zoek gebruiker...
settings.org_not_allowed_to_be_collaborator=De organisatie kan niet toegevoegd worden als medewerker.
settings.user_is_org_member=Gebruiker is lid van de organisatie die als een medewerker kan niet worden toegevoegd.
settings.add_webhook=Webhook toevoegen
settings.hooks_desc="Webhooks dat de externe diensten om kennisgevingen te ontvangen wanneer bepaalde gebeurtenissen op Gitea plaatsvinden. Wanneer de opgegeven gebeurtenissen plaatsvinden, sturen we een POST-aanvraag naar elk van de URL's die u opgeeft. Meer informatie vindt u in onze <a target=\"_blank\" rel=\"noopener\" href=\"%s\"> Webhooks gids</a>."
settings.hooks_desc=Webhooks dat de externe diensten om kennisgevingen te ontvangen wanneer bepaalde gebeurtenissen op Gitea plaatsvinden. Wanneer de opgegeven gebeurtenissen plaatsvinden, sturen we een POST-aanvraag naar elk van de URL's die u opgeeft. Meer informatie vindt u in onze <a target="_blank" rel="noopener" href="%s"> Webhooks gids</a>.
settings.webhook_deletion=Webhook verwijderen
settings.webhook_deletion_desc=Verwijderen van deze webhook zal de informatie en alle geschiedenis verwijderen. Wilt u doorgaan?
settings.webhook_deletion_success=Webhook is succesvol verwijderd!
@ -633,7 +633,7 @@ settings.githook_edit_desc=Als haak niet actief is, zal monster inhoud worden ge
settings.githook_name=Haak naam
settings.githook_content=Haak inhoud
settings.update_githook=Haak bijwerken
settings.add_webhook_desc="We sturen een <code>POST</code>-aanvraag naar de onderstaande URL met details voor alle geplaatste gebeurtenissen. U kunt ook opgeven welke gegevensindeling u wenst te ontvangen (JSON, <code>x-1-800-www-Dell-vorm-urlencoded</code>, <em>enz</em>.). Meer informatie kan gevonden worden in <a target=\"_blank\" rel=\"noopener\" href=\"%s\"> Webhooks gids</a>."
settings.add_webhook_desc=We sturen een <code>POST</code>-aanvraag naar de onderstaande URL met details voor alle geplaatste gebeurtenissen. U kunt ook opgeven welke gegevensindeling u wenst te ontvangen (JSON, <code>x-1-800-www-Dell-vorm-urlencoded</code>, <em>enz</em>.). Meer informatie kan gevonden worden in <a target="_blank" rel="noopener" href="%s"> Webhooks gids</a>.
settings.payload_url=Nettolading URL
settings.content_type=Content type
settings.secret=Geheim
@ -655,7 +655,7 @@ settings.update_hook_success=Webhook is bijgewerkt.
settings.delete_webhook=Webhook verwijderen
settings.recent_deliveries=Recente bezorgingen
settings.hook_type=Type hook
settings.add_slack_hook_desc="<a href=\"%s\"> toegestane vertraging</a> integratie toevoegen aan uw repository."
settings.add_slack_hook_desc=<a href="%s"> toegestane vertraging</a> integratie toevoegen aan uw repository.
settings.slack_token=Slack token
settings.slack_domain=Slack domein
settings.slack_channel=Slack kanaal
@ -1039,12 +1039,12 @@ notices.type_1=Opslagplaats
notices.desc=Beschrijving
[action]
create_repo="repository aangemaakt in <a href=\"%s\">%s</a>"
commit_repo="push update naar <a href=\"%[1]s/src/%[2]s\">%[3]s</a> in <a href=\"%[1]s\">%[4]s</a>"
create_issue="`opende issue in <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
comment_issue="`reactie op issue <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
transfer_repo="repository verplaatst naar <code>%s</code> naar <a href=\"%s\">%s</a>"
push_tag="geduwd label <a href=\"%s/src/%s\"> %[2]s</a> naar <a href=\"%[1]s\"> %[3]s</a>"
create_repo=repository aangemaakt in <a href="%s">%s</a>
commit_repo=push update naar <a href="%[1]s/src/%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a>
create_issue=`opende issue in <a href="%s/issues/%s">%s#%[2]s</a>`
comment_issue=`reactie op issue <a href="%s/issues/%s">%s#%[2]s</a>`"
transfer_repo=repository verplaatst naar <code>%s</code> naar <a href="%s">%s</a>
push_tag=geduwd label <a href="%s/src/%s"> %[2]s</a> naar <a href="%[1]s"> %[3]s</a>
compare_commits=Toon vergelijking voor deze %d commits
[tool]

View File

@ -52,7 +52,7 @@ cancel=Cancelar
[install]
install=Instalação
title=Etapas de instalação para primeira execução
docker_helper="Se você está rodando o Gitea dentro do Docker, por favor leia os <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!"
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia os <a target="_blank" rel="noopener" href="%s">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!
requite_db_desc=Gitea requer MySQL, PostgreSQL, SQLite3 ou TiDB.
db_title=Configurações de banco de dados
db_type=Tipo de banco de dados
@ -328,7 +328,7 @@ keep_email_private_popup=Seu endereço de e-mail será ocultado de outros usuár
manage_ssh_keys=Gerenciar Chaves SSH
add_key=Adicionar chave
ssh_desc=Esta é uma lista de chaves SSH associadas com a sua conta. Como essas chaves permitem que qualquer um que as usem tenham acesso aos seus repositórios, é altamente importante que você reconheça elas.
ssh_helper="<strong>Precisa de ajuda?</strong> Confira nosso guia para <a href=\"%s\">gerar chaves SSH</a> ou solucionar <a href=\"%s\">problemas comuns com SSH</a>."
ssh_helper=<strong>Precisa de ajuda?</strong> Confira nosso guia para <a href="%s">gerar chaves SSH</a> ou solucionar <a href="%s">problemas comuns com SSH</a>.
add_new_key=Adicionar Chave SSH
ssh_key_been_used=Uma chave pública com esse mesmo conteúdo já está em uso.
ssh_key_name_used=Uma outra chave pública já existe com esse mesmo nome.
@ -390,10 +390,10 @@ owner=Dono
repo_name=Nome do repositório
repo_name_helper=Nomes de repositórios bons são pequenos, memorizáveis e únicos.
visibility=Visibilidade
visiblity_helper="Este é um repositório <span class=\"ui red text\"> privado</span>"
visiblity_helper_forced="O adminstrador forçou todos os novos repositórios para serem <span class=\"ui red text\">privados</span>"
visiblity_helper=Este é um repositório <span class="ui red text"> privado</span>
visiblity_helper_forced=O adminstrador forçou todos os novos repositórios para serem <span class="ui red text">privados</span>
visiblity_fork_helper=(A alteração desse valor irá afetar todos os forks)
clone_helper="Precisa de ajuda com o clone? Visite a <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Ajuda</a>!"
clone_helper=Precisa de ajuda com o clone? Visite a <a target="_blank" rel="noopener" href="%s">Ajuda</a>!
fork_repo=Fork do repositório
fork_from=Fork de
fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório fork.
@ -423,7 +423,7 @@ form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome
need_auth=Precisa de autorização
migrate_type=Tipo de migração
migrate_type_helper="Este repositório será um <span class=\"text blue\">mirror</span>"
migrate_type_helper=Este repositório será um <span class="text blue">mirror</span>
migrate_repo=Migrar repositório
migrate.clone_address=Endereço de clone
migrate.clone_address_desc=Isto pode ser uma URL de HTTP/HTTPS/GIT
@ -493,7 +493,7 @@ editor.add=Adicionar '%s'
editor.update=Atualizar '%s'
editor.delete=Excluir '%s'
editor.commit_message_desc=Adicione uma descrição estendida opcional...
editor.commit_directly_to_this_branch="Efetive diretamente no branch <strong class=\"branch-name\">%s</strong>."
editor.commit_directly_to_this_branch=Efetive diretamente no branch <strong class="branch-name">%s</strong>.
editor.create_new_branch=Crie um <strong>novo branch</strong> para este commit e crie um pull request.
editor.new_branch_name_desc=Novo nome do ramo...
editor.cancel=Cancelar
@ -503,7 +503,7 @@ editor.directory_is_a_file=Entrada '%s' no caminho pai é um arquivo e não uma
editor.file_is_a_symlink=O arquivo '%s' é um link simbólico que não pode ser modificado a partir do editor da web
editor.filename_is_a_directory=O arquivo '%s' é uma pasta existente neste repositório.
editor.file_editing_no_longer_exists=O arquivo '%s' que você está editando não existe mais neste repositório.
editor.file_changed_while_editing="O conteúdo do arquivo mudou desde que você começou a editar. <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Clique aqui</a> para ver o que mudou ou <strong>pressione efetivar novamente</strong> para sobrescrever esses mudanças."
editor.file_changed_while_editing=O conteúdo do arquivo mudou desde que você começou a editar. <a target="_blank" rel="noopener" href="%s">Clique aqui</a> para ver o que mudou ou <strong>pressione efetivar novamente</strong> para sobrescrever esses mudanças.
editor.file_already_exists=Um arquivo com nome '%s' já existe neste repositório.
editor.no_changes_to_show=Nenhuma alteração a mostrar.
editor.fail_to_update_file=Houve erro ao criar ou atualizar arquivo '%s': %v
@ -542,8 +542,8 @@ issues.label_templates.info=Não existem etiquetas ainda. Você pode clicar em "
issues.label_templates.helper=Selecione um conjunto de etiquetas
issues.label_templates.use=Usar este conjunto de etiquetas
issues.label_templates.fail_to_load_file=Houve erro ao carregar arquivo de template '%s': %v
issues.add_label_at="`adicionou a etiqueta <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.remove_label_at="`removeu a etiqueta <div class=\"ui label\" style=\"color: %s" ; background-color: %s">%s</div> label %s`
issues.add_label_at=`adicionou a etiqueta <div class="ui label" style="color: %s; background-color: %s">%s</div> label %s`
issues.remove_label_at=`removeu a etiqueta <div class="ui label" style="color: %s; background-color: %s">%s</div> label %s`
issues.add_milestone_at=`adicionou esta issue para a milestone <b>%s</b> %s`
issues.change_milestone_at=`modificou a milestone de <b>%s</b> para <b>%s</b> %s`
issues.remove_milestone_at=`removeu esta issue da milestone <b>%s</b> %s`
@ -572,7 +572,7 @@ issues.filter_sort.recentupdate=Mais recentemente atualizados
issues.filter_sort.leastupdate=Menos recentemente atualizados
issues.filter_sort.mostcomment=Mais comentados
issues.filter_sort.leastcomment=Menos comentados
issues.opened_by="aberto por <a href=\"%[2]s\">%[3]s</a> %[1]s"
issues.opened_by=aberto por <a href="%[2]s">%[3]s</a> %[1]s
issues.opened_by_fake=aberto por %[2]s %[1]s
issues.previous=Anterior
issues.next=Próximo
@ -593,7 +593,7 @@ issues.commit_ref_at=`citou este problema em um commit %[2]s`
issues.poster=Autor
issues.collaborator=Colaborador
issues.owner=Proprietário
issues.sign_in_require_desc="<a href=\"%s\">Faça login</a> para participar desta conversação."
issues.sign_in_require_desc=<a href="%s">Faça login</a> para participar desta conversação.
issues.edit=Editar
issues.cancel=Cancelar
issues.save=Salvar
@ -621,7 +621,7 @@ pulls.compare_compare=comparar
pulls.filter_branch=Filtrar branch
pulls.no_results=Nada encontrado.
pulls.nothing_to_compare=Não há nada para comparar porque o branch base e o head estão iguais.
pulls.has_pull_request="`Já existem pull requests entre esses dois alvos: <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`Já existem pull requests entre esses dois alvos: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Criar pull request
pulls.title_desc=quer mesclar %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code>
pulls.merged_title_desc=mesclou %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code> %[4]s
@ -637,7 +637,7 @@ pulls.can_auto_merge_desc=O merge deste Pull Pequest pode ser aplicado automatic
pulls.cannot_auto_merge_desc=O merge deste pull request não pode ser aplicado automaticamente pois há conflitos.
pulls.cannot_auto_merge_helper=Por favor, aplique o merge manualmente para resolver os conflitos.
pulls.merge_pull_request=Solicitação de merge de pull request
pulls.open_unmerged_pull_exists="`Você não pode executar a operação de reabrir porque já existe um Pull request aberto (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.`"
pulls.open_unmerged_pull_exists=`Você não pode executar a operação de reabrir porque já existe um Pull request aberto (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.`
milestones.new=Novo milestone
milestones.open_tab=%d abertos
@ -756,7 +756,7 @@ settings.search_user_placeholder=Pesquisar usuário...
settings.org_not_allowed_to_be_collaborator=Organização não tem permissão para ser adicionada como um colaborador.
settings.user_is_org_member=O usuário é um membro da organização que não pode ser adicionado como um colaborador.
settings.add_webhook=Adicionar webhook
settings.hooks_desc="Hooks da web ou webhooks permitem serviços externos serem notificados quando certos eventos acontecem no Gitea. Quando acontecem os eventos especificados, enviaremos uma solicitação POST para cada uma das URLs que você fornecer. Saiba mais no nosso <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Guia de webhooks</a>."
settings.hooks_desc=Hooks da web ou webhooks permitem serviços externos serem notificados quando certos eventos acontecem no Gitea. Quando acontecem os eventos especificados, enviaremos uma solicitação POST para cada uma das URLs que você fornecer. Saiba mais no nosso <a target="_blank" rel="noopener" href="%s">Guia de webhooks</a>.
settings.webhook_deletion=Excluir webhook
settings.webhook_deletion_desc=Excluir este webhook vai remover sua informação e todo o histórico de entrega. Deseja continuar?
settings.webhook_deletion_success=Webhook excluído com sucesso!
@ -773,7 +773,7 @@ settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo
settings.githook_name=Nome do Hook
settings.githook_content=Conteúdo do Hook
settings.update_githook=Atualizar Hook
settings.add_webhook_desc="Enviaremos uma solicitação <code>POST</code> para o URL abaixo com detalhes de quaisquer eventos inscritos. Você pode também especificar qual formato de dados você gostaria de receber (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mais informação pode ser encontrada em <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks Guide</a>."
settings.add_webhook_desc=Enviaremos uma solicitação <code>POST</code> para o URL abaixo com detalhes de quaisquer eventos inscritos. Você pode também especificar qual formato de dados você gostaria de receber (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mais informação pode ser encontrada em <a target="_blank" rel="noopener" href="%s">Webhooks Guide</a>.
settings.payload_url=URL de payload
settings.content_type=Tipo de conteúdo
settings.secret=Senha
@ -798,7 +798,7 @@ settings.update_hook_success=Webhook atualizado.
settings.delete_webhook=Excluir webhook
settings.recent_deliveries=Entregas Recentes
settings.hook_type=Tipo de Hook
settings.add_slack_hook_desc="Adicionar <a href=\"%s\">Slack</a> de integração para o seu repositório."
settings.add_slack_hook_desc=Adicionar <a href="%s">Slack</a> de integração para o seu repositório.
settings.slack_token=Token
settings.slack_domain=Domínio
settings.slack_channel=Canal
@ -1239,19 +1239,19 @@ notices.op=Op.
notices.delete_success=Avisos do sistema foram excluídos com sucesso.
[action]
create_repo="criou o repositório <a href=\"%s\"> %s</a>"
rename_repo="renomeou o o repositório <code>%[1]s</code> para <a href=\"%[2]s\">%[3]s</a>"
commit_repo="fez push para <a href=\"%[1]s/src/%[2]s\">%[3]s</a> em <a href=\"%[1]s\">%[4]s</a>"
create_issue="`abriu issue <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
close_issue="`fechou issue <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
reopen_issue="`reabriu issue <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`criou o pull request <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
close_pull_request="`fechou o pull request <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
reopen_pull_request="`reabriu o pull request <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`comentou sobre a issue <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
merge_pull_request="`mesclou o pull request <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
transfer_repo="transferiu repositório de <code>%s</code> para <a href=\"%s\">%s</a>"
push_tag="fez push da tag <a href=\"%s/src/%s\">%[2]s</a> para <a href=\"%[1]s\">%[3]s</a>"
create_repo=criou o repositório <a href="%s"> %s</a>
rename_repo=renomeou o o repositório <code>%[1]s</code> para <a href="%[2]s">%[3]s</a>
commit_repo=fez push para <a href="%[1]s/src/%[2]s">%[3]s</a> em <a href="%[1]s">%[4]s</a>
create_issue=`abriu issue <a href="%s/issues/%s">%s#%[2]s</a>`
close_issue=`fechou issue <a href="%s/issues/%s">%s#%[2]s</a>`
reopen_issue=`reabriu issue <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`criou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`fechou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`reabriu o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`comentou sobre a issue <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`mesclou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=transferiu repositório de <code>%s</code> para <a href="%s">%s</a>
push_tag=fez push da tag <a href="%s/src/%s">%[2]s</a> para <a href="%[1]s">%[3]s</a>
compare_commits=Ver comparação entre esses %d commits
[tool]

View File

@ -50,7 +50,7 @@ cancel=Avbryt
[install]
install=Installation
title=Steg för att installera för första gången
docker_helper="Om du kör Gitea inuti Docker, vänligen läs <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Riktninjerna</a> nogrant innan du ändrar någonting på denna sida!"
docker_helper=Om du kör Gitea inuti Docker, vänligen läs <a target="_blank" rel="noopener" href="%s">Riktninjerna</a> nogrant innan du ändrar någonting på denna sida!
requite_db_desc=Gitea kräver MySQL, PostgreSQL, SQLite3 eller TiDB.
db_title=Databasinställningar
db_type=Databastyp
@ -325,7 +325,7 @@ keep_email_private_popup=Om denna inställningar är påslagen kommer din eposta
manage_ssh_keys=Hantera SSH-nycklar
add_key=Lägg till nyckel
ssh_desc=Detta är en lista över SSH-nycklar som hör till ditt konto. Ta bort alla nycklar som du inte känner igen.
ssh_helper="<strong>Vet du inte hur?</strong> Kolla in Github's guide för att <a href=\"%s\">skapa din egen SSH-nycklar</a> eller lösa <a href=\"%s\">vanliga problem</a> som kan uppstå med SSH."
ssh_helper=<strong>Vet du inte hur?</strong> Kolla in Github's guide för att <a href="%s">skapa din egen SSH-nycklar</a> eller lösa <a href="%s">vanliga problem</a> som kan uppstå med SSH.
add_new_key=Lägg till SSH-nyckel
ssh_key_been_used=Innehåll i publik nyckel har använts.
ssh_key_name_used=Offentlig nyckel med samma namn har redan existerat.
@ -387,10 +387,10 @@ owner=Ägare
repo_name=Utvecklingskatalogens namn
repo_name_helper=Ett bra utvecklingskatalogsnamn består vanligtvis av korta, minnesvärda och unika nyckelord.
visibility=Synligt för
visiblity_helper="Denna utvecklingskatalog är <span class=\"ui red text\">Privat</span>"
visiblity_helper_forced="Administratören har tvingat alla nya utvecklingskataloger att vara <span class=\"ui red text\">Privata</span>"
visiblity_helper=Denna utvecklingskatalog är <span class="ui red text">Privat</span>
visiblity_helper_forced=Administratören har tvingat alla nya utvecklingskataloger att vara <span class="ui red text">Privata</span>
visiblity_fork_helper=(Ändring av detta värde kommer att påverka alla forks)
clone_helper="Behöver du hjälp med kloning? Gå till <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Hjälp</a>!"
clone_helper=Behöver du hjälp med kloning? Gå till <a target="_blank" rel="noopener" href="%s">Hjälp</a>!
fork_repo=Forka Repo
fork_from=Forka Från
fork_visiblity_helper=Du kan inte ändra offentligheten på ett forkat repo.
@ -419,7 +419,7 @@ form.name_pattern_not_allowed=Reponamnet '%s' är inte tillåtet.
need_auth=Tillstånd Krävs
migrate_type=Migreringstyp
migrate_type_helper="Detta repo kommer att vara en <span class=\"text blue\">spegling</span>"
migrate_type_helper=Detta repo kommer att vara en <span class="text blue">spegling</span>
migrate_repo=Migrera Repot
migrate.clone_address=Kloningsaddress
migrate.clone_address_desc=Detta kan vara en HTTP/HTTPS/GIT-URL eller en lokal sökväg på servern.
@ -488,7 +488,7 @@ editor.add=Lägg till '%s'
editor.update=Uppdatera '%s'
editor.delete=Tag bort '%s'
editor.commit_message_desc=Lägg till en valfri utökad beskrivning...
editor.commit_directly_to_this_branch="Checka in direkt till grenen <strong class=\"branch-name\">%s</strong>."
editor.commit_directly_to_this_branch=Checka in direkt till grenen <strong class="branch-name">%s</strong>.
editor.create_new_branch=Skapa en <strong>ny gren</strong> för denna incheckning och påbörja en hämtningsbegäran.
editor.new_branch_name_desc=Nytt grennamn...
editor.cancel=Avbryt
@ -498,7 +498,7 @@ editor.directory_is_a_file=Komponenten '%s' i föräldrasökvägen är en fil, i
editor.file_is_a_symlink=Filen '%s' är en symbolisk länk som inte kan editeras i webbläsaren
editor.filename_is_a_directory=Filnmanet '%s' är en existerande katalog i detta förråd.
editor.file_editing_no_longer_exists=Filen '%s' som du redigerar finns inte lägre i förrådet.
editor.file_changed_while_editing="Filinnhållet har ändrats sedan du började redigera. <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Klicka här</a> för att se vad som ändrats eller <strong>tryck checka in igen</strong> för att skriva över dessa ändringar."
editor.file_changed_while_editing=Filinnhållet har ändrats sedan du började redigera. <a target="_blank" rel="noopener" href="%s">Klicka här</a> för att se vad som ändrats eller <strong>tryck checka in igen</strong> för att skriva över dessa ändringar.
editor.file_already_exists=En fil med namnet '%s' finns redan i förrådet.
editor.no_changes_to_show=Det finns inga ändringar att visa.
editor.fail_to_update_file=Uppdateringen/skapandet av filen '%s' misslyckades med felet: %v
@ -557,14 +557,14 @@ issues.filter_sort.recentupdate=Nyligen uppdaterade
issues.filter_sort.leastupdate=Äldst uppdaterad
issues.filter_sort.mostcomment=Mest kommenterade
issues.filter_sort.leastcomment=Minst kommenterade
issues.opened_by="öppnade %[1]s av <a href=\"%[2]s\">%[3]s</a>"
issues.opened_by=öppnade %[1]s av <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=öppnade %[1]s av %[2]s
issues.previous=Föregående
issues.next=Nästa
issues.open_title=Öppen
issues.closed_title=Stängd
issues.num_comments=%d kommentarer
issues.commented_at="`kommenterad <a href=\"#%s\">%s</a>`"
issues.commented_at=`kommenterad <a href="#%s">%s</a>`
issues.delete_comment_confirm=Är du säker på att du vill ta bort den här kommentaren?
issues.no_content=Det finns inget innehåll än.
issues.close_issue=Stäng
@ -572,13 +572,13 @@ issues.close_comment_issue=Kommentera och stäng
issues.reopen_issue=Återöppna
issues.reopen_comment_issue=Kommentera och återöppna
issues.create_comment=Kommentera
issues.closed_at="`stängde <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.reopened_at="`återöppnade <a if=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.commit_ref_at="`refererade till detta ärende från en incheckning <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a>`"
issues.closed_at=`stängde <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`återöppnade <a if="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`refererade till detta ärende från en incheckning <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Skapare
issues.collaborator=Deltagare
issues.owner=Ägare
issues.sign_in_require_desc="<a href=\"%s\">Logga in</a> för att delta i denna konversation."
issues.sign_in_require_desc=<a href="%s">Logga in</a> för att delta i denna konversation.
issues.edit=Redigera
issues.cancel=Avbryt
issues.save=Spara
@ -606,7 +606,7 @@ pulls.compare_compare=jämför
pulls.filter_branch=Filtrera gren
pulls.no_results=Inga resultat hittades.
pulls.nothing_to_compare=Det finns inget att jämföra eftersom bas och huvudgrenar är lika.
pulls.has_pull_request="`Det finns redan en pullförfrågan mellan detta två mål: <a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]s</a>^"
pulls.has_pull_request=`Det finns redan en pullförfrågan mellan detta två mål: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]s</a>`
pulls.create=Skapa Pullförfrågan
pulls.title_desc=vill sammanfoga %[1]d incheckningar från <code>s[2]s</code> in i <code>%[3]s</code>
pulls.merged_title_desc=sammanfogade %[1]d incheckningar från <code>%[2]s</code> in i <code>%[3]s</code> %[4]s
@ -739,7 +739,7 @@ settings.search_user_placeholder=Sök användare...
settings.org_not_allowed_to_be_collaborator=Organisationen kan inte läggas till som en deltagare.
settings.user_is_org_member=Änvändaren är en organisationsmedlem som inte kan bli tillagd som deltagare.
settings.add_webhook=Lägg Till Webbhook
settings.hooks_desc="Webbhookar påminner mycket om vanliga HTTP POST-händelseutlösare. När något inträffar i Gitea, kommer vi att meddela måldatorn som du anger. Läs mera i <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webbhook Guide</a>."
settings.hooks_desc=Webbhookar påminner mycket om vanliga HTTP POST-händelseutlösare. När något inträffar i Gitea, kommer vi att meddela måldatorn som du anger. Läs mera i <a target="_blank" rel="noopener" href="%s">Webbhook Guide</a>.
settings.webhook_deletion=Ta Bort Webbhook
settings.webhook_deletion_desc=Borttagning av denna webbhook kommer att ta bort all dess information och all leveranshistorik. Är du säker på att du vill fortsätta?
settings.webhook_deletion_success=Webbhook har tagits bort!
@ -756,7 +756,7 @@ settings.githook_edit_desc=Om kroken är inaktiv visas exempelinnehåll. Inaktiv
settings.githook_name=Kroknamn
settings.githook_content=Krokinnehåll
settings.update_githook=Uppdatera krok
settings.add_webhook_desc="Gitea kommer skicka <code>POST</code>-anrop till webbadressen du anger, tillsammans med information om händelsen som inträffade. Du kan också ange vilken sorts dataformat du vill få när kroken triggas (JSON, x-www-form-urlencoded, XML et.c.). Mer information finns i vår <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks Guide</a>."
settings.add_webhook_desc=Gitea kommer skicka <code>POST</code>-anrop till webbadressen du anger, tillsammans med information om händelsen som inträffade. Du kan också ange vilken sorts dataformat du vill få när kroken triggas (JSON, x-www-form-urlencoded, XML et.c.). Mer information finns i vår <a target="_blank" rel="noopener" href="%s">Webhooks Guide</a>.
settings.payload_url=Adress till innehåll
settings.content_type=Typ av innehåll
settings.secret=Hemlighet
@ -781,7 +781,7 @@ settings.update_hook_success=Webbkrok har uppdaterats.
settings.delete_webhook=Tag bort webbkrok
settings.recent_deliveries=Färska leveranser
settings.hook_type=Kroktyp
settings.add_slack_hook_desc="Lägg till <a href=\"%s\">Slack</a>-integration till ditt förråd."
settings.add_slack_hook_desc=Lägg till <a href="%s">Slack</a>-integration till ditt förråd.
settings.slack_token=Pollett
settings.slack_domain=Domän
settings.slack_channel=Kanal
@ -1190,9 +1190,9 @@ notices.desc=Beskrivning
notices.delete_success=Systemnotiser har tagits bort.
[action]
create_repo="skapade utvecklingskatalog <a href=\"%s\"> %s</a>"
rename_repo="döpte om utvecklingskalatogen från <code>%[1]s</code> till <a href=\"%[2]s\">%[3]s</a>"
transfer_repo="överförde utvecklingskalatogen <code>%s</code> till <a href=\"%s\">%s</a>"
create_repo=skapade utvecklingskatalog <a href="%s"> %s</a>
rename_repo=döpte om utvecklingskalatogen från <code>%[1]s</code> till <a href="%[2]s">%[3]s</a>
transfer_repo=överförde utvecklingskalatogen <code>%s</code> till <a href="%s">%s</a>
compare_commits=Jämför dessa %d incheckningar
[tool]

View File

@ -52,7 +52,7 @@ cancel=取消
[install]
install=安装页面
title=首次运行安装程序
docker_helper="如果您正在使用 Docker 容器运行 Gitea请务必先仔细阅读 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">官方文档</a> 后再对本页面进行填写。"
docker_helper=如果您正在使用 Docker 容器运行 Gitea请务必先仔细阅读 <a target="_blank" rel="noopener" href="%s">官方文档</a> 后再对本页面进行填写。
requite_db_desc=Gitea 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=数据库设置
db_type=数据库类型
@ -111,7 +111,7 @@ enable_captcha=启用验证码服务
enable_captcha_popup=要求在用户注册时输入预验证码
require_sign_in_view=启用登录访问限制
require_sign_in_view_popup=只有已登录的用户才能够访问页面,否则将只能看到登录或注册页面。
admin_setting_desc="创建管理员帐号并不是必须的,因为 ID=1 的用户将自动获得管理员权限。"
admin_setting_desc=创建管理员帐号并不是必须的,因为 ID=1 的用户将自动获得管理员权限。
admin_title=管理员帐号设置
admin_name=管理员用户名
admin_password=管理员密码
@ -130,7 +130,7 @@ invalid_log_root_path=无效的日志路径:%v
default_keep_email_private=隐藏邮箱地址的默认值
default_keep_email_private_popup=这是用户邮箱地址可见性的默认值当它设置为true所有的新用户的邮箱地址将被隐藏除非用户修改他的配置。
no_reply_address=不可回邮地址
no_reply_address_helper=用来隐藏用户在git日志里的邮箱地址的域名。例如用户张三和域名noreply.example.org'会变成‘zhangsan@noreply.example.org'。
no_reply_address_helper=用来隐藏用户在git日志里的邮箱地址的域名。例如用户 '张三' 和域名 'noreply.example.org' 会变成 'zhangsan@noreply.example.org'。
[home]
uname_holder=用户名或邮箱
@ -328,7 +328,7 @@ keep_email_private_popup=设置该选项会使得其他用户看不到你的邮
manage_ssh_keys=管理 SSH 密钥
add_key=增加密钥
ssh_desc=以下是与您帐户所关联的 SSH 密钥,如果您发现有陌生的密钥,请立即删除它!
ssh_helper="<strong>需要帮助?</strong> 请查看有关 <a href=\"%s\">如何生成 SSH 密钥</a> 或 <a href=\"%s\">常见 SSH 问题</a> 寻找答案。"
ssh_helper=<strong>需要帮助?</strong> 请查看有关 <a href="%s">如何生成 SSH 密钥</a> 或 <a href="%s">常见 SSH 问题</a> 寻找答案。
add_new_key=增加 SSH 密钥
ssh_key_been_used=公开密钥已经被使用!
ssh_key_name_used=使用相同名称的公开密钥已经存在!
@ -390,10 +390,10 @@ owner=拥有者
repo_name=仓库名称
repo_name_helper=伟大的仓库名称一般都较短、令人深刻并且 <strong>独一无二</strong> 的。
visibility=可见性
visiblity_helper="该仓库为 <span class=\"ui red text\">私有的</span>"
visiblity_helper_forced="网站管理员已强制要求所有新建仓库必须为 <span class=\"ui red text\">私有的</span>"
visiblity_helper=该仓库为 <span class="ui red text">私有的</span>
visiblity_helper_forced=网站管理员已强制要求所有新建仓库必须为 <span class="ui red text">私有的</span>
visiblity_fork_helper=(修改该值将会影响到所有派生仓库)
clone_helper="不知道如何操作?访问 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">此处</a> 查看帮助!"
clone_helper=不知道如何操作?访问 <a target="_blank" rel="noopener" href="%s">此处</a> 查看帮助!
fork_repo=派生仓库
fork_from=派生自
fork_visiblity_helper=派生仓库无法修改可见性
@ -423,7 +423,7 @@ form.name_pattern_not_allowed=仓库名称不允许 '%s' 的格式。
need_auth=需要授权验证
migrate_type=迁移类型
migrate_type_helper="该仓库将是一个 <span class=\"text blue\">镜像</span>"
migrate_type_helper=该仓库将是一个 <span class="text blue">镜像</span>
migrate_repo=迁移仓库
migrate.clone_address=克隆地址
migrate.clone_address_desc=该地址可以是 HTTP/HTTPS/GIT URL 或本地服务器路径。
@ -493,7 +493,7 @@ editor.add=添加 '%s'
editor.update=更新 '%s'
editor.delete=删除 '%s'
editor.commit_message_desc=添加一个可选的扩展描述...
editor.commit_directly_to_this_branch="直接提交至 <strong class=\"branch-name\">%s</strong> 分支。"
editor.commit_directly_to_this_branch=直接提交至 <strong class="branch-name">%s</strong> 分支。
editor.create_new_branch=为此提交创建一个 <strong>新的分支</strong> 并发起合并请求。
editor.new_branch_name_desc=新的分支名称...
editor.cancel=取消
@ -503,7 +503,7 @@ editor.directory_is_a_file=路径 '%s' 的父路径中包含此仓库已存在
editor.file_is_a_symlink='%s'数据是网页编辑器不能改变的符号链接。
editor.filename_is_a_directory=文件名 '%s' 是此仓库中已存在的目录名。
editor.file_editing_no_longer_exists=您编辑的文件 '%s' 已经不存在于此仓库中。
editor.file_changed_while_editing="文件内容在您进行编辑时已经发生变动。<a target=\"_blank\" rel=\"noopener\" href=\"%s\">单击此处</a> 查看变动的具体内容,或者 <strong>再次提交</strong> 覆盖已发生的变动。"
editor.file_changed_while_editing=文件内容在您进行编辑时已经发生变动。<a target="_blank" rel="noopener" href="%s">单击此处</a> 查看变动的具体内容,或者 <strong>再次提交</strong> 覆盖已发生的变动。
editor.file_already_exists=此仓库已经存在名为 '%s' 的文件。
editor.no_changes_to_show=没有可以显示的变更。
editor.fail_to_update_file=更新/创建文件 '%s' 时发生错误:%v
@ -542,8 +542,8 @@ issues.label_templates.info=此仓库还未创建任何标签,您可以通过
issues.label_templates.helper=选择标签模板
issues.label_templates.use=加载标签模板
issues.label_templates.fail_to_load_file=加载标签模板文件 '%s' 时发生错误:%v
issues.add_label_at="` %[4]s 添加了标签 <div class=\"ui label\" style=\"color: %[1]s" ; background-color: %s">%s</div> label %s`
issues.remove_label_at="` %[4]s 删除了标签 <div class=\"ui label\" style=\"color: %[1]s" ; background-color: %s">%s</div> label %s`
issues.add_label_at=` %[4]s 添加了标签 <div class="ui label" style="color: %[1]s ; background-color: %s">%s</div> label %s`
issues.remove_label_at=` %[4]s 删除了标签 <div class="ui label" style="color: %[1]s ; background-color: %s">%s</div> label %s`
issues.add_milestone_at=` %[2]s 添加了里程碑 <b>%[1]s</b>`
issues.change_milestone_at=`%[3]s 修改了里程碑从 <b>%[1]s</b> 到 <b>%[2]s</b>`
issues.remove_milestone_at=`%[2]s 删除了里程碑 <b>%[1]s</b>`
@ -572,14 +572,14 @@ issues.filter_sort.recentupdate=最近更新
issues.filter_sort.leastupdate=最少更新
issues.filter_sort.mostcomment=最多评论
issues.filter_sort.leastcomment=最少评论
issues.opened_by="由 <a href=\"%[2]s\">%[3]s</a> 于 %[1]s创建"
issues.opened_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s创建
issues.opened_by_fake=由 %[2]s 于 %[1]s创建
issues.previous=上一页
issues.next=下一页
issues.open_title=开启中
issues.closed_title=已关闭
issues.num_comments=%d 条评论
issues.commented_at="`评论于 <a href=\"#%s\">%s</a>`"
issues.commented_at=`评论于 <a href="#%s">%s</a>`
issues.delete_comment_confirm=您确定要删除该条评论吗?
issues.no_content=这个人很懒,什么都没留下。
issues.close_issue=关闭
@ -587,13 +587,13 @@ issues.close_comment_issue=评论并关闭
issues.reopen_issue=重新开启
issues.reopen_comment_issue=评论并重新开启
issues.create_comment=评论
issues.closed_at="`于 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 关闭`"
issues.reopened_at="`于 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 重新开启`"
issues.commit_ref_at="`在代码提交 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 中引用了该工单`"
issues.closed_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 关闭`
issues.reopened_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 重新开启`
issues.commit_ref_at=`在代码提交 <a id="%[1]s" href="#%[1]s">%[2]s</a> 中引用了该工单`
issues.poster=发布者
issues.collaborator=协作者
issues.owner=所有者
issues.sign_in_require_desc="<a href=\"%s\">登陆</a> 并参与到对话中。"
issues.sign_in_require_desc=<a href="%s">登陆</a> 并参与到对话中。
issues.edit=编辑
issues.cancel=取消
issues.save=保存
@ -621,7 +621,7 @@ pulls.compare_compare=对比分支
pulls.filter_branch=过滤分支
pulls.no_results=未找到结果
pulls.nothing_to_compare=基准和对比分支代码已经同步,无需进行对比。
pulls.has_pull_request="`已经存在目标分支的合并请求:<a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`已经存在目标分支的合并请求:<a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=创建合并请求
pulls.title_desc=请求将 %[1]d 次代码提交从 <code>%[2]s</code> 合并至 <code>%[3]s</code>
pulls.merged_title_desc=于 %[4]s 将 %[1]d 次代码提交从 <code>%[2]s</code>合并至 <code>%[3]s</code>
@ -637,7 +637,7 @@ pulls.can_auto_merge_desc=该合并请求可以进行自动合并操作。
pulls.cannot_auto_merge_desc=该合并请求存在冲突,无法进行自动合并操作。
pulls.cannot_auto_merge_helper=请手动拉取代码变更以解决冲突。
pulls.merge_pull_request=合并请求
pulls.open_unmerged_pull_exists="`由于已经存在来自相同仓库和合并信息的未合并请求(#%d您无法执行重新开启操作。`"
pulls.open_unmerged_pull_exists=`由于已经存在来自相同仓库和合并信息的未合并请求(#%d您无法执行重新开启操作。`
milestones.new=新的里程碑
milestones.open_tab=%d 开启中
@ -756,7 +756,7 @@ settings.search_user_placeholder=搜索用户...
settings.org_not_allowed_to_be_collaborator=组织不允许被添加为仓库协作者!
settings.user_is_org_member=被操作的用户是组织成员,因此无法添加为协作者!
settings.add_webhook=添加 Web 钩子
settings.hooks_desc="Web 钩子允许您设定在 Gitea 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks 文档</a> 获取更多信息。"
settings.hooks_desc=Web 钩子允许您设定在 Gitea 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target="_blank" rel="noopener" href="%s">Webhooks 文档</a> 获取更多信息。
settings.webhook_deletion=删除 Web 钩子
settings.webhook_deletion_desc=删除该 Web 钩子将会删除与其有关的信息和推送历史。是否继续?
settings.webhook_deletion_success=Web 钩子删除成功!
@ -773,7 +773,7 @@ settings.githook_edit_desc=如果钩子未启动,则会显示样例文件中
settings.githook_name=钩子名称
settings.githook_content=钩子文本
settings.update_githook=更新钩子设置
settings.add_webhook_desc="我们会通过 <code>POST</code> 请求将订阅事件信息发送至向指定 URL 地址。您可以设置不同的数据接收方式JSON 或 <code>x-www-form-urlencoded</code>)。 请查阅 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks 文档</a> 获取更多信息。"
settings.add_webhook_desc=我们会通过 <code>POST</code> 请求将订阅事件信息发送至向指定 URL 地址。您可以设置不同的数据接收方式JSON 或 <code>x-www-form-urlencoded</code>)。 请查阅 <a target="_blank" rel="noopener" href="%s">Webhooks 文档</a> 获取更多信息。
settings.payload_url=推送地址
settings.content_type=数据格式
settings.secret=密钥文本
@ -798,7 +798,7 @@ settings.update_hook_success=Web 钩子更新成功!
settings.delete_webhook=删除 Web 钩子
settings.recent_deliveries=最近推送记录
settings.hook_type=钩子类型
settings.add_slack_hook_desc="为您的仓库增加 <a href=\"%s\">Slack</a> 集成。"
settings.add_slack_hook_desc=为您的仓库增加 <a href="%s">Slack</a> 集成。
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=频道
@ -1239,19 +1239,19 @@ notices.op=操作
notices.delete_success=系统提示删除成功!
[action]
create_repo="创建了仓库 <a href=\"%s\">%s</a>"
rename_repo="重命名仓库 <code>%[1]s</code> 为 <a href=\"%[2]s\">%[3]s</a>"
commit_repo="推送了 <a href=\"%[1]s/src/%[2]s\">%[3]s</a> 分支的代码到 <a href=\"%[1]s\">%[4]s</a>"
create_issue="`创建了工单 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
close_issue="`关闭了工单 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
reopen_issue="`重新开启了工单 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`创建了合并请求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
close_pull_request="`关闭了合并请求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
reopen_pull_request="`重新开启了合并请求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`评论了工单 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
merge_pull_request="`合并了合并请求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
transfer_repo="将仓库 <code>%s</code> 转移至 <a href=\"%s\">%s</a>"
push_tag="推送了标签 <a href=\"%s/src/%s\">%[2]s</a> 到 <a href=\"%[1]s\">%[3]s</a>"
create_repo=`创建了仓库 <a href="%s">%s</a>`
rename_repo=`重命名仓库 <code>%[1]s</code> 为 <a href="%[2]s">%[3]s</a>`
commit_repo=`推送了 <a href="%[1]s/src/%[2]s">%[3]s</a> 分支的代码到 <a href="%[1]s">%[4]s</a>`
create_issue=`创建了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
close_issue=`关闭了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
reopen_issue=`重新开启了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`创建了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`关闭了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`重新开启了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`评论了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`合并了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=将仓库 <code>%s</code> 转移至 <a href="%s">%s</a>
push_tag=推送了标签 <a href="%s/src/%s">%[2]s</a> 到 <a href="%[1]s">%[3]s</a>
compare_commits=对比 %d 次代码提交
[tool]

View File

@ -449,7 +449,7 @@ editor.filename_help=輸入名稱後按下 / 鍵即可新增資料夾,或將
editor.or=
editor.cancel_lower=取消
editor.commit_changes=提交更改嗎?
editor.add_tmpl=新增 %s/<filename>'
editor.add_tmpl=新增 '%s/<filename>'
editor.add=新增 '%s'
editor.update=更新 '%s'
editor.delete=刪除 '%s'

View File

@ -52,7 +52,7 @@ cancel=取消
[install]
install=安裝頁面
title=首次安裝步驟
docker_helper="如果您正在使用 Docker 容器運行 Gitea請務必先仔細閱讀 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">官方文檔</a> 後再對本頁面進行填寫。"
docker_helper=如果您正在使用 Docker 容器運行 Gitea請務必先仔細閱讀 <a target="_blank" rel="noopener" href="%s">官方文檔</a> 後再對本頁面進行填寫。
requite_db_desc=Gitea 要求安裝 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=資料庫設定
db_type=資料庫類型
@ -110,7 +110,7 @@ enable_captcha=啟用驗證碼服務
enable_captcha_popup=要求在用戶註冊時輸入驗證碼
require_sign_in_view=啓用登錄訪問限制
require_sign_in_view_popup=只有已登錄的用戶才能夠訪問頁面,否則將只能看到登錄或註冊頁面。
admin_setting_desc="建立管理員帳號並不是必須的,因為 ID=1 的用戶將自動獲得管理員權限。"
admin_setting_desc=建立管理員帳號並不是必須的,因為 ID=1 的用戶將自動獲得管理員權限。
admin_title=管理員帳號設定
admin_name=管理員用戶名
admin_password=管理員密碼
@ -325,7 +325,7 @@ keep_email_private_popup=設定此選項會使得其他用戶看不到您的電
manage_ssh_keys=管理 SSH 金鑰
add_key=增加金鑰
ssh_desc=以下是與您帳戶所關聯的 SSH 金鑰,如果您發現有陌生的金鑰,請立即刪除它!
ssh_helper="<strong>需要幫助嗎?</strong> 請查看有關 <a href=\"%s\"> 如何生成 SSH 金鑰</a> 的指南或 <a href=\"%s\"> SSH 的常見問題</a> 的疑難排解。"
ssh_helper=<strong>需要幫助嗎?</strong> 請查看有關 <a href="%s"> 如何生成 SSH 金鑰</a> 的指南或 <a href="%s"> SSH 的常見問題</a> 的疑難排解。
add_new_key=增加 SSH 金鑰
ssh_key_been_used=公共金鑰已經被使用
ssh_key_name_used=使用相同名稱的公共金鑰已經存在!
@ -387,10 +387,10 @@ owner=擁有者
repo_name=儲存庫名稱
repo_name_helper=偉大的儲存庫名稱一般都較短、令人深刻並且 <strong>獨一無二</strong> 的。
visibility=可見度
visiblity_helper="該儲存庫為 <span class=\"ui red text\">私有的</span>"
visiblity_helper_forced="網站管理員已強制要求所有新建儲存庫必須為 <span class=\"ui red text\">私有的</span>"
visiblity_helper=該儲存庫為 <span class="ui red text">私有的</span>
visiblity_helper_forced=網站管理員已強制要求所有新建儲存庫必須為 <span class="ui red text">私有的</span>
visiblity_fork_helper=(修改該值將會影響到所有複製儲存庫)
clone_helper="不知道如何操作?訪問 <a target=\"_blank\" rel=\"noopener\"href=\"%s\"> 帮助説明</a> "
clone_helper=不知道如何操作?訪問 <a target="_blank" rel="noopener" href="%s"> 帮助説明</a>
fork_repo=複製儲存庫
fork_from=複製自
fork_visiblity_helper=複製儲存庫無法修改可見性。
@ -420,7 +420,7 @@ form.name_pattern_not_allowed=儲存庫名稱不允許 '%s' 的格式。
need_auth=需要授權驗證
migrate_type=遷移類型
migrate_type_helper="該儲存庫將是一個 <span class=\"text blue\">鏡像</span>"
migrate_type_helper=該儲存庫將是一個 <span class="text blue">鏡像</span>
migrate_repo=遷移儲存庫
migrate.clone_address=複製地址
migrate.clone_address_desc=該地址可以是 HTTP/HTTPS/GIT URL 或本地伺服器路徑。
@ -485,12 +485,12 @@ editor.filename_help=輸入名稱後按下 / 鍵即可新增資料夾,或將
editor.or=
editor.cancel_lower=取消
editor.commit_changes=提交更改嗎?
editor.add_tmpl=新增 %s/<filename>'
editor.add_tmpl=新增 '%s/<filename>'
editor.add=新增 '%s'
editor.update=更新 '%s'
editor.delete=刪除 '%s'
editor.commit_message_desc=新增一個可選的擴充描述...
editor.commit_directly_to_this_branch="直接提交到 <strong class=\"branch-name\">%s</strong> 分支。"
editor.commit_directly_to_this_branch=直接提交到 <strong class="branch-name">%s</strong> 分支。
editor.create_new_branch=建立 <strong>新的分支</strong> 為此提交和開始合併請求。
editor.new_branch_name_desc=新的分支名稱...
editor.cancel=取消
@ -499,7 +499,7 @@ editor.branch_already_exists='%s' 已存在於此存儲庫。
editor.directory_is_a_file='%s' 在此儲存庫中的路徑是檔案而不是目錄。
editor.filename_is_a_directory=檔案名 '%s' 是此資料庫中的現有目錄。
editor.file_editing_no_longer_exists=檔 '%s' 您正在編輯不再存在於資料庫。
editor.file_changed_while_editing="從您開始編輯已更改檔的內容。<a target=\"_blank\"href=\"%s\"> 按一下此處</a> 以查看什麼發生了更改或 <strong>按提交再</strong> 覆蓋這些更改。"
editor.file_changed_while_editing=從您開始編輯已更改檔的內容。<a target="_blank" href="%s"> 按一下此處</a> 以查看什麼發生了更改或 <strong>按提交再</strong> 覆蓋這些更改。
editor.file_already_exists=帶有名稱 '%s' 的檔已經存在在這個資料庫中。
editor.no_changes_to_show=沒有可以顯示的變更。
editor.fail_to_update_file=上傳/建立檔案 '%s' 失敗, 錯誤訊息: %v
@ -562,14 +562,14 @@ issues.filter_sort.recentupdate=最近更新
issues.filter_sort.leastupdate=最少更新
issues.filter_sort.mostcomment=最多評論
issues.filter_sort.leastcomment=最少評論
issues.opened_by="由 <a href=\"%[2]s\">%[3]s</a> 於 %[1]s建立"
issues.opened_by=由 <a href="%[2]s">%[3]s</a> 於 %[1]s建立
issues.opened_by_fake=由 %[2]s 於 %[1]s建立
issues.previous=上一頁
issues.next=下一頁
issues.open_title=開啟中
issues.closed_title=已關閉
issues.num_comments=%d 條評論
issues.commented_at="` 評論 <a href=\"#%s\"> %s</a>`"
issues.commented_at=` 評論 <a href="#%s"> %s</a>`
issues.delete_comment_confirm=您確定要刪除該條評論嗎?
issues.no_content=尚未有任何內容
issues.close_issue=關閉
@ -577,13 +577,13 @@ issues.close_comment_issue=關閉及評論
issues.reopen_issue=重新開啟
issues.reopen_comment_issue=重新開啟及評論
issues.create_comment=評論
issues.closed_at="`於 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 關閉`"
issues.reopened_at="`於 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 重新開啟`"
issues.commit_ref_at="`在代碼提交 <a id=\"%[1]s\" href=\"#%[1]s\">%[2]s</a> 中引用了該問題`"
issues.closed_at=`於 <a id="%[1]s" href="#%[1]s">%[2]s</a> 關閉`
issues.reopened_at=`於 <a id="%[1]s" href="#%[1]s">%[2]s</a> 重新開啟`
issues.commit_ref_at=`在代碼提交 <a id="%[1]s" href="#%[1]s">%[2]s</a> 中引用了該問題`
issues.poster=發佈者
issues.collaborator=協同者
issues.owner=所有者
issues.sign_in_require_desc="<a href=\"%s\"> 登入</a> 才能加入這對話。"
issues.sign_in_require_desc=<a href="%s"> 登入</a> 才能加入這對話。
issues.edit=編輯
issues.cancel=取消
issues.save=儲存
@ -611,7 +611,7 @@ pulls.compare_compare=對比文件變化
pulls.filter_branch=過濾分支
pulls.no_results=未找到結果
pulls.nothing_to_compare=基準和對比分支程式碼已經同步,無需進行對比。
pulls.has_pull_request="`已經存在目標分支的合併請求:<a href=\"%[1]s/pulls/%[3]d\">%[2]s#%[3]d</a>`"
pulls.has_pull_request=`已經存在目標分支的合併請求:<a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=建立合併請求
pulls.title_desc=請求將 %[1]d 次程式碼提交從 <code>%[2]s</code> 合併至 <code>%[3]s</code>
pulls.merged_title_desc=於 %[4]s 將 %[1]d 次代碼提交從 <code>%[2]s</code>合併至 <code>%[3]s</code>
@ -627,7 +627,7 @@ pulls.can_auto_merge_desc=這個拉請求可以自動合併。
pulls.cannot_auto_merge_desc=由於存在衝突,不能自動合併這推送請求。
pulls.cannot_auto_merge_helper=請手動合併來解決衝突。
pulls.merge_pull_request=合併請求
pulls.open_unmerged_pull_exists="`由於已經存在來自相同儲存庫和合併訊息的未合併請求(#%d您無法執行重新開啟操作。`"
pulls.open_unmerged_pull_exists=`由於已經存在來自相同儲存庫和合併訊息的未合併請求(#%d您無法執行重新開啟操作。`
milestones.new=新的里程碑
milestones.open_tab=%d 開啟中
@ -745,7 +745,7 @@ settings.search_user_placeholder=搜尋用戶...
settings.org_not_allowed_to_be_collaborator=組織不允許被加為協同者。
settings.user_is_org_member=被操作的用戶是組織成員,因此無法新增為協作者!
settings.add_webhook=建立 Webhook
settings.hooks_desc="Webhook 允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks 文檔</a> 獲取更多訊息。"
settings.hooks_desc=Webhook 允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" rel="noopener" href="%s">Webhooks 文檔</a> 獲取更多訊息。
settings.webhook_deletion=刪除 Webhook
settings.webhook_deletion_desc=刪除該 Webhook 將會刪除與其有關的訊息和推送歷史。是否繼續?
settings.webhook_deletion_success=Webhook 刪除成功!
@ -762,7 +762,7 @@ settings.githook_edit_desc=如果 Hook 未啟動,則會顯示樣例文件中
settings.githook_name=Hook 名稱
settings.githook_content=Hook 內容
settings.update_githook=更新 Hook 設定
settings.add_webhook_desc="我們會通過 <code>POST</code> 請求將訂閱事件訊息發送至向指定 URL 地址。您可以設定不同的資料接收方式JSON 或 <code>x-www-form-urlencoded</code>)。 請查閱 <a target=\"_blank\" rel=\"noopener\" href=\"%s\">Webhooks 指南</a>."
settings.add_webhook_desc=我們會通過 <code>POST</code> 請求將訂閱事件訊息發送至向指定 URL 地址。您可以設定不同的資料接收方式JSON 或 <code>x-www-form-urlencoded</code>)。 請查閱 <a target="_blank" rel="noopener" href="%s">Webhooks 指南</a>.
settings.payload_url=推送地址
settings.content_type=資料格式
settings.secret=金鑰文本
@ -787,7 +787,7 @@ settings.update_hook_success=Webhook 更新成功!
settings.delete_webhook=刪除 Webhook
settings.recent_deliveries=最近推送記錄
settings.hook_type=Hook 類型
settings.add_slack_hook_desc="為您的儲存庫增加 <a href=\"%s\">Slack</a> 集成。"
settings.add_slack_hook_desc=為您的儲存庫增加 <a href="%s">Slack</a> 集成。
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=頻道
@ -1228,19 +1228,19 @@ notices.op=操作
notices.delete_success=系統提示刪除成功!
[action]
create_repo="建立了儲存庫 <a href=\"%s\">%s</a>"
rename_repo="重新命名儲存庫 <code>%[1]s</code> 為 <a href=\"%[2]s\">%[3]s</a>"
commit_repo="推送了 <a href=\"%[1]s/src/%[2]s\">%[3]s</a> 分支的代碼到 <a href=\"%[1]s\">%[4]s</a>"
create_issue="`建立了問題 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
close_issue="`已關閉問題 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
reopen_issue="`已重新開啟問題 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
create_pull_request="`建立了合併請求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
close_pull_request="`已關閉合併請求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
reopen_pull_request="`已重新開啟合併請求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
comment_issue="`評論了問題 <a href=\"%s/issues/%s\">%s#%[2]s</a>`"
merge_pull_request="`合併了合併請求 <a href=\"%s/pulls/%s\">%s#%[2]s</a>`"
transfer_repo="將儲存庫 <code>%s</code> 轉移至 <a href=\"%s\">%s</a>"
push_tag="推送了標籤 <a href=\"%s/src/%s\">%[2]s</a> 到 <a href=\"%[1]s\">%[3]s</a>"
create_repo=建立了儲存庫 <a href="%s">%s</a>
rename_repo=重新命名儲存庫 <code>%[1]s</code> 為 <a href="%[2]s">%[3]s</a>
commit_repo=推送了 <a href="%[1]s/src/%[2]s">%[3]s</a> 分支的代碼到 <a href="%[1]s">%[4]s</a>
create_issue=`建立了問題 <a href="%s/issues/%s">%s#%[2]s</a>`
close_issue=`已關閉問題 <a href="%s/issues/%s">%s#%[2]s</a>`
reopen_issue=`已重新開啟問題 <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`建立了合併請求 <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`已關閉合併請求 <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`已重新開啟合併請求 <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`評論了問題 <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`合併了合併請求 <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=將儲存庫 <code>%s</code> 轉移至 <a href="%s">%s</a>
push_tag=推送了標籤 <a href="%s/src/%s">%[2]s</a> 到 <a href="%[1]s">%[3]s</a>
compare_commits=查看 %d 次提交的內容比對
[tool]

View File

@ -949,6 +949,23 @@ footer .ui.language .menu {
#create-page-form form textarea {
width: 50%!important;
}
.signin .oauth2 div {
display: inline-block;
}
.signin .oauth2 div p {
margin: 10px 5px 0 0;
float: left;
}
.signin .oauth2 a {
margin-right: 5px;
}
.signin .oauth2 a:last-child {
margin-right: 0px;
}
.signin .oauth2 img {
width: 32px;
height: 32px;
}
.user.activate form,
.user.forgot.password form,
.user.reset.password form,
@ -2742,6 +2759,10 @@ footer .ui.language .menu {
.user.notification .octicon.blue {
color: #2185d0;
}
.user.link-account:not(.icon) {
padding-top: 15px;
padding-bottom: 5px;
}
.dashboard {
padding-top: 15px;
padding-bottom: 80px;
@ -2983,24 +3004,3 @@ footer .ui.language .menu {
.ui.user.list .item .description a:hover {
text-decoration: underline;
}
.user.link-account:not(.icon) {
padding-top: 15px;
padding-bottom: 5px;
}
.signin .oauth2 div {
display: inline-block;
}
.signin .oauth2 div p {
margin: 10px 5px 0 0;
float: left;
}
.signin .oauth2 a {
margin-right: 5px;
}
.signin .oauth2 a:last-child {
margin-right: 0px;
}
.signin .oauth2 img {
width: 32px;
height: 32px;
}

View File

@ -5,11 +5,13 @@ jQuery.fn.autolink = function() {
.each(function() {
$(this).each(function() {
if (re.test($(this).text()))
$(this).replaceWith(
$("<span />").html(
this.nodeValue.replace(re, "<a href='$1'>$1</a>")
)
);
if($(this).parents().filter('code').length === 0) {
$(this).replaceWith(
$("<span />").html(
this.nodeValue.replace(re, "<a href='$1'>$1</a>")
)
);
};
});
});
};

View File

@ -46,6 +46,27 @@
}
}
.signin {
.oauth2{
div {
display: inline-block;
p {
margin: 10px 5px 0 0;
float: left;
}
}
a {
margin-right: 5px;
&:last-child {
margin-right: 0px;
}
}
img {
width: 32px;
height: 32px;
}
}
}
.user.activate,
.user.forgot.password,
.user.reset.password,
@ -85,7 +106,7 @@
.header {
padding-left: 0 !important;
text-align: center;
}
}
}
}

View File

@ -114,4 +114,8 @@
}
}
}
&.link-account:not(.icon) {
padding-top: 15px;
padding-bottom: 5px;
}
}

View File

@ -341,7 +341,7 @@ func RegisterRoutes(m *macaron.Macaron) {
Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey)
m.Combo("/:id").Get(repo.GetDeployKey).
Delete(repo.DeleteDeploykey)
})
}, reqRepoWriter())
m.Group("/issues", func() {
m.Combo("").Get(repo.ListIssues).Post(bind(api.CreateIssueOption{}), repo.CreateIssue)
m.Group("/comments", func() {

View File

@ -75,7 +75,7 @@ func TestAPI_RenderGFM(t *testing.T) {
<ul>
<li><a href="` + AppSubURL + `wiki/Links" rel="nofollow">Links, Language bindings, Engine bindings</a></li>
<li><a href="` + AppSubURL + `wiki/Tips" rel="nofollow">Tips</a></li>
<li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>)<a href="https://github.com/ocornut/imgui/issues/786" rel="nofollow">#786</a></li>
<li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>) https://github.com/ocornut/imgui/issues/786</li>
</ul>
`,
// wine-staging wiki home extract: special wiki syntax, images

View File

@ -49,7 +49,8 @@ func GlobalInit() {
if setting.InstallLock {
highlight.NewContext()
markdown.BuildSanitizer()
markdown.InitMarkdown()
markdown.NewSanitizer()
if err := models.NewEngine(); err != nil {
log.Fatal(4, "Failed to initialize ORM engine: %v", err)
}

View File

@ -596,6 +596,16 @@ func ViewIssue(ctx *context.Context) {
ctx.Handle(500, "LoadMilestone", err)
return
}
ghostMilestone := &models.Milestone{
ID: -1,
Name: ctx.Tr("repo.issues.deleted_milestone"),
}
if comment.OldMilestoneID > 0 && comment.OldMilestone == nil {
comment.OldMilestone = ghostMilestone
}
if comment.MilestoneID > 0 && comment.Milestone == nil {
comment.Milestone = ghostMilestone
}
} else if comment.Type == models.CommentTypeAssignees {
if err = comment.LoadAssignees(); err != nil {
ctx.Handle(500, "LoadAssignees", err)

View File

@ -72,6 +72,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
err := models.NewRepoRedirect(ctx.Repo.Owner.ID, repo.ID, repo.Name, newRepoName)
if err != nil {
ctx.Handle(500, "NewRepoRedirect", err)
return
}
log.Trace("Repository name changed: %s/%s -> %s", ctx.Repo.Owner.Name, repo.Name, newRepoName)
@ -151,6 +152,12 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
if form.EnableWiki {
if form.EnableExternalWiki {
if !strings.HasPrefix(form.ExternalWikiURL, "http://") && !strings.HasPrefix(form.ExternalWikiURL, "https://") {
ctx.Flash.Error(ctx.Tr("repo.settings.external_wiki_url_error"))
ctx.Redirect(repo.Link() + "/settings")
return
}
units = append(units, models.RepoUnit{
RepoID: repo.ID,
Type: models.UnitTypeExternalWiki,
@ -171,10 +178,15 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
if form.EnableIssues {
if form.EnableExternalTracker {
if !strings.HasPrefix(form.ExternalTrackerURL, "http://") && !strings.HasPrefix(form.ExternalTrackerURL, "https://") {
ctx.Flash.Error(ctx.Tr("repo.settings.external_tracker_url_error"))
ctx.Redirect(repo.Link() + "/settings")
return
}
units = append(units, models.RepoUnit{
RepoID: repo.ID,
Type: models.UnitTypeExternalWiki,
Index: int(models.UnitTypeExternalWiki),
Type: models.UnitTypeExternalTracker,
Index: int(models.UnitTypeExternalTracker),
Config: &models.ExternalTrackerConfig{
ExternalTrackerURL: form.ExternalTrackerURL,
ExternalTrackerFormat: form.TrackerURLFormat,

View File

@ -177,6 +177,10 @@ func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, err
// ctx.Handle(500, "OpenRepository", err)
return nil, nil, err
}
if !wikiRepo.IsBranchExist("master") {
return wikiRepo, nil, nil
}
commit, err := wikiRepo.GetBranchCommit("master")
if err != nil {
ctx.Handle(500, "GetBranchCommit", err)
@ -190,6 +194,9 @@ func renderWikiPage(ctx *context.Context, isViewPage bool) (*git.Repository, *gi
if err != nil {
return nil, nil
}
if commit == nil {
return wikiRepo, nil
}
// Get page list.
if isViewPage {
@ -210,7 +217,7 @@ func renderWikiPage(ctx *context.Context, isViewPage bool) (*git.Repository, *gi
}
pages = append(pages, PageMeta{
Name: models.ToWikiPageName(name),
URL: models.ToWikiPageURL(name),
URL: name,
})
}
}
@ -308,6 +315,11 @@ func Wiki(ctx *context.Context) {
if ctx.Written() {
return
}
if entry == nil {
ctx.Data["Title"] = ctx.Tr("repo.wiki")
ctx.HTML(200, tplWikiStart)
return
}
ename := entry.Name()
if !markdown.IsMarkdownFile(ename) {
@ -362,7 +374,7 @@ func WikiPages(ctx *context.Context) {
}
pages = append(pages, PageMeta{
Name: models.ToWikiPageName(name),
URL: models.ToWikiPageURL(name),
URL: name,
Updated: c.Author.When,
})
}
@ -480,7 +492,7 @@ func EditWikiPost(ctx *context.Context, form auth.NewWikiForm) {
return
}
oldWikiPath := ctx.Params(":page")
oldWikiPath := models.ToWikiPageURL(ctx.Params(":page"))
newWikiPath := models.ToWikiPageURL(form.Title)
if err := ctx.Repo.Repository.EditWikiPage(ctx.User, oldWikiPath, newWikiPath, form.Content, form.Message); err != nil {
@ -493,7 +505,7 @@ func EditWikiPost(ctx *context.Context, form auth.NewWikiForm) {
// DeleteWikiPagePost delete wiki page
func DeleteWikiPagePost(ctx *context.Context) {
pageURL := ctx.Params(":page")
pageURL := models.ToWikiPageURL(ctx.Params(":page"))
if len(pageURL) == 0 {
pageURL = "Home"
}

View File

@ -78,7 +78,7 @@
{{end}}
</h4>
<div class="ui attached table segment">
{{if not $file.IsRenamed}}
{{if ne $file.Type 4}}
{{$isImage := (call $.IsImageFile $file.Name)}}
{{if and $isImage}}
<div class="center">