Compare commits
38 Commits
main
...
release/v1
Author | SHA1 | Date |
---|---|---|
Lunny Xiao | 34182c87ec | |
Lunny Xiao | c401788383 | |
Ethan Koenig | 8335b556d1 | |
Lunny Xiao | 09fff9e1c1 | |
Lunny Xiao | 622552b709 | |
Lunny Xiao | 1709297701 | |
Bo-Yi Wu | 5fe8fee933 | |
Bo-Yi Wu | 5bb20be8b2 | |
Lunny Xiao | 06a554c22a | |
Lunny Xiao | 00bd47ae5c | |
Lunny Xiao | b20f1ab47f | |
Ethan Koenig | 9a7f59ef35 | |
Ethan Koenig | 6a6f0616f2 | |
Ethan Koenig | 6caf04c129 | |
Antoine GIRARD | 406f5de18c | |
Andrey Nering | 39cb1ac517 | |
Morlinest | 58dcbaf20b | |
Kim "BKC" Carlbäcker | 5f212ff4e9 | |
Ethan Koenig | 45fa822ac4 | |
Kim "BKC" Carlbäcker | 1ac8646845 | |
Bo-Yi Wu | 13e284c7cf | |
Lunny Xiao | bbe6aa349f | |
agrn | 4fd55d8796 | |
Jonas Östanbäck | daaabaa1d9 | |
Lunny Xiao | fa059debca | |
Kim "BKC" Carlbäcker | 2854c8aa47 | |
Lunny Xiao | 506c98df5b | |
Kim "BKC" Carlbäcker | f9859a2991 | |
Kim "BKC" Carlbäcker | 473df53533 | |
Philippe Kueck | 2482c67e2b | |
Lunny Xiao | d9bdf7a65d | |
Lunny Xiao | 11ad296347 | |
Lunny Xiao | 5fad54248f | |
Philippe Kueck | 2b5e4b4d96 | |
Lunny Xiao | 65eea82c3e | |
Lunny Xiao | fac75b8086 | |
Lunny Xiao | e4706127f9 | |
Lunny Xiao | c9baf9d14b |
10
.drone.yml
10
.drone.yml
|
@ -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
|
||||
|
|
|
@ -1 +1 @@
|
|||
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgY292ZXJhZ2U6CiAgICBpbWFnZTogcGx1Z2lucy9jb3ZlcmFnZQogICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfVEFHIyN2fScgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnbGF0ZXN0JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX1RBRyMjdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX0JSQU5DSCMjcmVsZWFzZS92fQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyByZWxlYXNlLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvbWFzdGVyCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIGdpdGh1YjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdGh1Yi1yZWxlYXNlCiAgICBmaWxlczoKICAgICAgLSBkaXN0L3JlbGVhc2UvKgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZ2l0dGVyOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0dGVyCgpzZXJ2aWNlczoKICBteXNxbDoKICAgIGltYWdlOiBteXNxbDo1LjcKICAgIGVudmlyb25tZW50OgogICAgICAtIE1ZU1FMX0RBVEFCQVNFPXRlc3QKICAgICAgLSBNWVNRTF9BTExPV19FTVBUWV9QQVNTV09SRD15ZXMKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgcGdzcWw6CiAgICBpbWFnZTogcG9zdGdyZXM6OS41CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19EQj10ZXN0CiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCg.hp6IsxbFIQOaxJdmGv32Vf34-Nra3KqVIWzH52W687I
|
||||
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgIyBjb3ZlcmFnZToKICAjICAgaW1hZ2U6IHBsdWdpbnMvY292ZXJhZ2UKICAjICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgIyAgIHdoZW46CiAgIyAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBkb2NrZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb2NrZXIKICAgIHJlcG86IGdpdGVhL2dpdGVhCiAgICB0YWdzOiBbICcke0RST05FX1RBRyMjdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfQlJBTkNIIyNyZWxlYXNlL3Z9JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIHJlbGVhc2UvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJ2xhdGVzdCcgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9UQUcjI3Z9CiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgcmVsZWFzZToKICAgIGltYWdlOiBwbHVnaW5zL3MzCiAgICBwYXRoX3N0eWxlOiB0cnVlCiAgICBzdHJpcF9wcmVmaXg6IGRpc3QvcmVsZWFzZS8KICAgIHNvdXJjZTogZGlzdC9yZWxlYXNlLyoKICAgIHRhcmdldDogL2dpdGVhL21hc3RlcgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICBnaXRodWI6CiAgICBpbWFnZTogcGx1Z2lucy9naXRodWItcmVsZWFzZQogICAgZmlsZXM6CiAgICAgIC0gZGlzdC9yZWxlYXNlLyoKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGdpdHRlcjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdHRlcgoKc2VydmljZXM6CiAgbXlzcWw6CiAgICBpbWFnZTogbXlzcWw6NS43CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNWVNRTF9EQVRBQkFTRT10ZXN0CiAgICAgIC0gTVlTUUxfQUxMT1dfRU1QVFlfUEFTU1dPUkQ9eWVzCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHBnc3FsOgogICAgaW1hZ2U6IHBvc3RncmVzOjkuNQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfREI9dGVzdAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQo.uf02h57dWfCrxG3rcNcYlZPQP2XsFhKvcF2geGTpG50
|
43
CHANGELOG.md
43
CHANGELOG.md
|
@ -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
|
||||
|
|
6
Makefile
6
Makefile
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -366,10 +366,12 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
|
|||
}
|
||||
|
||||
curFile = &DiffFile{
|
||||
Name: a,
|
||||
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") {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -231,26 +231,20 @@ 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
|
||||
}
|
||||
}
|
||||
|
||||
if c.MilestoneID > 0 {
|
||||
var milestone Milestone
|
||||
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
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
})
|
||||
}
|
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
|
@ -845,11 +845,7 @@ func cleanUpMigrateGitConfig(configPath string) error {
|
|||
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),
|
||||
}
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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 *****
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
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() {
|
||||
|
|
|
@ -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):]...)
|
||||
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):]...)
|
||||
}
|
||||
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("</p>"), []byte{}, 1)
|
||||
text = bytes.Replace(text, []byte(prefix), []byte{}, 1)
|
||||
}
|
||||
case bytes.HasPrefix(text, []byte(prefix+"[x] ")):
|
||||
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,11 +650,9 @@ 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) {
|
||||
if token.Type == html.StartTagToken && !com.IsSliceContainsStr(noEndTags, token.Data) {
|
||||
stackNum++
|
||||
}
|
||||
}
|
||||
|
||||
// If this is the close tag to the outer-most, we are done
|
||||
if token.Type == html.EndTagToken {
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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 ui tab active menu attached animating sidebar following bar center"></code>`, `<code></code>`,
|
||||
`<code class="language-lol ui tab active menu attached animating sidebar following bar center">
|
||||
<code class="language-lol ui container input huge basic segment center"> </code>
|
||||
<img src="https://try.gogs.io/img/favicon.png" width="200" height="200">
|
||||
<code class="language-lol ui container input massive basic segment">Hello there! Something has gone wrong, we are working on it.</code>
|
||||
<code class="language-lol ui container input huge basic segment">In the meantime, play a game with us at <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]))))
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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 d’accè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 n’y a aucun changement à afficher.
|
||||
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec l’erreur : %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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -5,11 +5,13 @@ jQuery.fn.autolink = function() {
|
|||
.each(function() {
|
||||
$(this).each(function() {
|
||||
if (re.test($(this).text()))
|
||||
if($(this).parents().filter('code').length === 0) {
|
||||
$(this).replaceWith(
|
||||
$("<span />").html(
|
||||
this.nodeValue.replace(re, "<a href='$1'>$1</a>")
|
||||
)
|
||||
);
|
||||
};
|
||||
});
|
||||
});
|
||||
};
|
|
@ -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,
|
||||
|
|
|
@ -114,4 +114,8 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
&.link-account:not(.icon) {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue