浏览代码

Latest develop updates is merged with my RaspberryPi Dockerfile version.
Merge branch 'develop' of https://github.com/gogits/gogs into develop

Emrah URHAN 9 年之前
父节点
当前提交
737da1a374
共有 100 个文件被更改,包括 14352 次插入24546 次删除
  1. 2 2
      .bra.toml
  2. 1 0
      .gitignore
  3. 32 31
      .gopmfile
  4. 3 1
      .travis.yml
  5. 1 1
      Dockerfile
  6. 35 0
      Makefile
  7. 21 18
      README.md
  8. 6 4
      README_ZH.md
  9. 6 6
      cmd/cert.go
  10. 42 0
      cmd/cmd.go
  11. 2 2
      cmd/dump.go
  12. 58 38
      cmd/serve.go
  13. 2 4
      cmd/update.go
  14. 35 18
      cmd/web.go
  15. 14 0
      conf/app.ini
  16. 27 18
      conf/locale/TRANSLATORS
  17. 1009 992
      conf/locale/locale_bg-BG.ini
  18. 1009 992
      conf/locale/locale_de-DE.ini
  19. 32 14
      conf/locale/locale_en-US.ini
  20. 1009 992
      conf/locale/locale_es-ES.ini
  21. 1009 992
      conf/locale/locale_fr-FR.ini
  22. 1009 992
      conf/locale/locale_it-IT.ini
  23. 1009 992
      conf/locale/locale_ja-JP.ini
  24. 1009 992
      conf/locale/locale_lv-LV.ini
  25. 1009 992
      conf/locale/locale_nl-NL.ini
  26. 1009 992
      conf/locale/locale_pl-PL.ini
  27. 1009 992
      conf/locale/locale_pt-BR.ini
  28. 1009 992
      conf/locale/locale_ru-RU.ini
  29. 1009 992
      conf/locale/locale_zh-CN.ini
  30. 1009 992
      conf/locale/locale_zh-HK.ini
  31. 1 1
      config.codekit
  32. 0 12
      docker-compose.yml
  33. 2 0
      docker/build.sh
  34. 1 0
      docker/s6/gogs/setup
  35. 2 1
      docker/s6/openssh/setup
  36. 7 0
      docker/s6/syslogd/run
  37. 46 30
      docker/start.sh
  38. 2 2
      gogs.go
  39. 32 16
      models/access.go
  40. 75 10
      models/action.go
  41. 98 14
      models/error.go
  42. 28 14
      models/git_diff.go
  43. 9 13
      models/issue.go
  44. 3 4
      models/login.go
  45. 51 2
      models/migrations/migrations.go
  46. 1 1
      models/models.go
  47. 75 66
      models/publickey.go
  48. 50 16
      models/pull.go
  49. 61 22
      models/release.go
  50. 139 58
      models/repo.go
  51. 20 20
      models/update.go
  52. 41 15
      models/user.go
  53. 2 2
      models/webhook.go
  54. 11 10
      modules/auth/admin.go
  55. 1 1
      modules/auth/ldap/ldap.go
  56. 2 2
      modules/auth/org.go
  57. 41 7
      modules/auth/repo_form.go
  58. 5 3
      modules/avatar/avatar.go
  59. 19 0
      modules/base/base.go
  60. 72 5
      modules/base/markdown.go
  61. 18 0
      modules/base/tool.go
  62. 0 0
      modules/bindata/bindata.go
  63. 1 1
      modules/cron/parser_test.go
  64. 0 615
      modules/crypto/ssh/agent/client.go
  65. 0 287
      modules/crypto/ssh/agent/client_test.go
  66. 0 103
      modules/crypto/ssh/agent/forward.go
  67. 0 184
      modules/crypto/ssh/agent/keyring.go
  68. 0 209
      modules/crypto/ssh/agent/server.go
  69. 0 77
      modules/crypto/ssh/agent/server_test.go
  70. 0 64
      modules/crypto/ssh/agent/testdata_test.go
  71. 0 122
      modules/crypto/ssh/benchmark_test.go
  72. 0 98
      modules/crypto/ssh/buffer.go
  73. 0 87
      modules/crypto/ssh/buffer_test.go
  74. 0 501
      modules/crypto/ssh/certs.go
  75. 0 216
      modules/crypto/ssh/certs_test.go
  76. 0 631
      modules/crypto/ssh/channel.go
  77. 0 549
      modules/crypto/ssh/cipher.go
  78. 0 127
      modules/crypto/ssh/cipher_test.go
  79. 0 213
      modules/crypto/ssh/client.go
  80. 0 441
      modules/crypto/ssh/client_auth.go
  81. 0 393
      modules/crypto/ssh/client_auth_test.go
  82. 0 39
      modules/crypto/ssh/client_test.go
  83. 0 354
      modules/crypto/ssh/common.go
  84. 0 144
      modules/crypto/ssh/connection.go
  85. 0 18
      modules/crypto/ssh/doc.go
  86. 0 211
      modules/crypto/ssh/example_test.go
  87. 0 412
      modules/crypto/ssh/handshake.go
  88. 0 415
      modules/crypto/ssh/handshake_test.go
  89. 0 526
      modules/crypto/ssh/kex.go
  90. 0 50
      modules/crypto/ssh/kex_test.go
  91. 0 628
      modules/crypto/ssh/keys.go
  92. 0 306
      modules/crypto/ssh/keys_test.go
  93. 0 57
      modules/crypto/ssh/mac.go
  94. 0 110
      modules/crypto/ssh/mempipe_test.go
  95. 0 725
      modules/crypto/ssh/messages.go
  96. 0 254
      modules/crypto/ssh/messages_test.go
  97. 0 356
      modules/crypto/ssh/mux.go
  98. 0 525
      modules/crypto/ssh/mux_test.go
  99. 0 493
      modules/crypto/ssh/server.go
  100. 0 605
      modules/crypto/ssh/session.go

+ 2 - 2
.bra.toml

@@ -13,7 +13,7 @@ watch_dirs = [
 watch_exts = [".go"]
 build_delay = 1500
 cmds = [
-	["go", "install", "-tags", "sqlite"],# redis memcache cert pam tidb
-	["go", "build", "-tags", "sqlite"],
+	["go", "install", "-race"], # sqlite redis memcache cert pam tidb
+	["go", "build", "-race"],
 	["./gogs", "web"]
 ]

+ 1 - 0
.gitignore

@@ -36,3 +36,4 @@ docker/docker/init_gogs.sh
 gogs.sublime-project
 gogs.sublime-workspace
 .tags*
+release

+ 32 - 31
.gopmfile

@@ -3,42 +3,43 @@ path = github.com/gogits/gogs
 
 [deps]
 github.com/bradfitz/gomemcache = commit:72a68649ba
-github.com/Unknwon/cae = commit:2e70a1351b
-github.com/Unknwon/com = commit:47d7d2b81a
-github.com/Unknwon/i18n = commit:7457d88830
-github.com/Unknwon/paginater = commit:cab2d086fa
-github.com/codegangsta/cli = commit:142e6cd241
-github.com/go-sql-driver/mysql = commit:527bcd55aa
+github.com/codegangsta/cli = commit:0302d39
+github.com/go-macaron/binding = commit:864a5ce
+github.com/go-macaron/cache = commit:5617353
+github.com/go-macaron/captcha = commit:875ff77
+github.com/go-macaron/csrf = commit:3372b25
+github.com/go-macaron/gzip = commit:4938e9b
+github.com/go-macaron/i18n = commit:5e728b6
+github.com/go-macaron/inject = commit:c5ab7bf
+github.com/go-macaron/session = commit:66031fc
+github.com/go-macaron/toolbox = commit:ab30a81
+github.com/go-sql-driver/mysql = commit:d512f20
 github.com/go-xorm/core = commit:3e10003353
-github.com/go-xorm/xorm = commit:803f6db50c
+github.com/go-xorm/xorm = commit:c643188
 github.com/gogits/chardet = commit:2404f77725
-github.com/gogits/go-gogs-client = commit:519eee0af0
-github.com/issue9/identicon = 
-github.com/lib/pq = commit:b269bd035a
-github.com/go-macaron/binding = 
-github.com/go-macaron/cache = 
-github.com/go-macaron/captcha = 
-github.com/go-macaron/csrf = 
-github.com/go-macaron/gzip = 
-github.com/go-macaron/i18n = 
-github.com/go-macaron/session = 
-github.com/go-macaron/toolbox = 
-github.com/klauspost/compress = 
-github.com/klauspost/crc32 = 
-github.com/klauspost/cpuid = 
-github.com/mattn/go-sqlite3 = commit:b808f01f66
-github.com/mcuadros/go-version = commit:d52711f8d6
-github.com/microcosm-cc/bluemonday = commit:85ba47ef2c
-github.com/mssola/user_agent = commit:a163d6a569
+github.com/gogits/go-gogs-client = commit:7c02c95
+github.com/issue9/identicon = commit:5a61672
+github.com/klauspost/compress = commit:bbfa9dc
+github.com/klauspost/cpuid = commit:8d9fe96
+github.com/klauspost/crc32 = commit:3e5c38b
+github.com/lib/pq = commit:83c4f41
+github.com/mattn/go-sqlite3 = commit:5651a9d
+github.com/mcuadros/go-version = commit:d52711f
+github.com/microcosm-cc/bluemonday = commit:4ac6f27
 github.com/msteinert/pam = commit:6534f23b39
 github.com/nfnt/resize = commit:dc93e1b98c
-github.com/russross/blackfriday = commit:8cec3a854e
-github.com/shurcooL/sanitized_anchor_name = commit:244f5ac324
+github.com/russross/blackfriday = commit:300106c
+github.com/shurcooL/sanitized_anchor_name = commit:10ef21a
+github.com/Unknwon/cae = commit:7f5e046
+github.com/Unknwon/com = commit:28b053d
+github.com/Unknwon/i18n = commit:7457d88830
+github.com/Unknwon/paginater = commit:7748a72
 golang.org/x/net = 
-golang.org/x/text = 
-gopkg.in/gomail.v2 = commit:b1e55520bf
-gopkg.in/macaron.v1 = 
-gopkg.in/ini.v1 = commit:e8c222fea7
+golang.org/x/text =
+golang.org/x/crypto =
+gopkg.in/gomail.v2 = commit:df6fc79
+gopkg.in/ini.v1 = commit:2e44421
+gopkg.in/macaron.v1 = commit:1c6dd87
 gopkg.in/redis.v2 = commit:e617904962
 
 [res]

+ 3 - 1
.travis.yml

@@ -4,13 +4,15 @@ go:
   - 1.3
   - 1.4
   - 1.5
-  - tip
 
 before_install:
   - sudo apt-get update -qq
   - sudo apt-get install -y libpam-dev
   - go get github.com/msteinert/pam 
 
+install:
+  - go get -t -v ./...
+
 script: go build -v -tags "pam"
 
 notifications:

+ 1 - 1
Dockerfile

@@ -19,4 +19,4 @@ RUN ./docker/build.sh
 VOLUME ["/data"]
 EXPOSE 22 3000
 ENTRYPOINT ["docker/start.sh"]
-CMD ["/usr/bin/s6-svscan", "/app/gogs/docker/s6/"]
+CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"]

+ 35 - 0
Makefile

@@ -0,0 +1,35 @@
+LDFLAGS += -X "github.com/gogits/gogs/modules/setting.BuildTime=$(shell date -u '+%Y-%m-%d %I:%M:%S %Z')"
+LDFLAGS += -X "github.com/gogits/gogs/modules/setting.BuildGitHash=$(shell git rev-parse HEAD)"
+
+TAGS = ""
+
+RELEASE_ROOT = "release"
+RELEASE_GOGS = "release/gogs"
+NOW = $(shell date -u '+%Y%m%d%I%M%S')
+
+.PHONY: build pack release bindata clean 
+
+build:
+	go install -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
+	go build -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
+
+govet:
+	go tool vet -composites=false -methods=false -structtags=false .
+
+pack:
+	rm -rf $(RELEASE_GOGS)
+	mkdir -p $(RELEASE_GOGS)
+	cp -r gogs LICENSE README.md README_ZH.md templates public scripts $(RELEASE_GOGS)
+	rm -rf $(RELEASE_GOGS)/public/config.codekit $(RELEASE_GOGS)/public/less
+	cd $(RELEASE_ROOT) && zip -r gogs.$(NOW).zip "gogs"
+
+release: build pack
+
+bindata: 
+	go-bindata -o=modules/bindata/bindata.go -ignore="\\.DS_Store|README.md" -pkg=bindata conf/...
+
+clean:
+	go clean -i ./...
+
+clean-mac: clean
+	find . -name ".DS_Store" -print0 | xargs -0 rm

+ 21 - 18
README.md

@@ -5,23 +5,23 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
 
 ![](public/img/gogs-large-resize.png)
 
-##### Current version: 0.6.18 Beta
+##### Current version: 0.7.20 Beta
 
 <table>
     <tr>
-        <td width="33%"><img src="http://gogs.io/img/screenshots/1.png"></td>
-        <td width="33%"><img src="http://gogs.io/img/screenshots/2.png"></td>
-        <td width="33%"><img src="http://gogs.io/img/screenshots/3.png"></td>
+        <td width="33%"><img src="https://gogs.io/img/screenshots/1.png"></td>
+        <td width="33%"><img src="https://gogs.io/img/screenshots/2.png"></td>
+        <td width="33%"><img src="https://gogs.io/img/screenshots/3.png"></td>
     </tr>
     <tr>
-        <td><img src="http://gogs.io/img/screenshots/4.png"></td>
-        <td><img src="http://gogs.io/img/screenshots/5.png"></td>
-        <td><img src="http://gogs.io/img/screenshots/6.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/4.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/5.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/6.png"></td>
     </tr>
     <tr>
-        <td><img src="http://gogs.io/img/screenshots/7.png"></td>
-        <td><img src="http://gogs.io/img/screenshots/8.png"></td>
-        <td><img src="http://gogs.io/img/screenshots/9.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/7.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/8.png"></td>
+        <td><img src="https://gogs.io/img/screenshots/9.png"></td>
     </tr>
 </table>
 
@@ -29,20 +29,21 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
 
 - Due to testing purpose, data of [try.gogs.io](https://try.gogs.io) has been reset in **Jan 28, 2015** and will reset multiple times after. Please do **NOT** put your important data on the site.
 - The demo site [try.gogs.io](https://try.gogs.io) is running under `develop` branch.
-- :exclamation::exclamation::exclamation:<span style="color: red">You **MUST** read [CONTRIBUTING.md](CONTRIBUTING.md) before you start filing an issue or making a Pull Request, and **MUST** discuss with us on [Gitter](https://gitter.im/gogits/gogs) for UI changes and feature Pull Requests, otherwise it's high possibilities that we are not going to merge it.</span>:exclamation::exclamation::exclamation:
+- :bangbang:<span style="color: red">You **MUST** read [CONTRIBUTING.md](CONTRIBUTING.md) before you start filing an issue or making a Pull Request, and **MUST** discuss with us on [Gitter](https://gitter.im/gogits/gogs) for UI changes, otherwise it's high possibilities that we are not going to merge it.</span>:bangbang:
+- Please [start discussion](http://forum.gogs.io/category/2/general-discussion) or [ask a question](http://forum.gogs.io/category/4/getting-help) on [the forum](http://forum.gogs.io/). GitHub issue tracker only keeps **bugs** and **feature requests**, all other topics will be closed without reason.
 - If you think there are vulnerabilities in the project, please talk privately to **u@gogs.io**. Thanks!
+- If you're interested in using APIs, we have experimental support with [documentation](https://github.com/gogits/go-gogs-client/wiki).
+- If your team/company is using Gogs and would like to put your logo on [our website](http://gogs.io), contact us by any means.
 
-#### Other language version
-
-- [简体中文](README_ZH.md)
+[简体中文](README_ZH.md)
 
 ## Purpose
 
-The goal of this project is to make the easiest, fastest, and most painless way of setting up a self-hosted Git service. With Go, this can be done with an independent binary distribution across **ALL platforms** that Go supports, including Linux, Mac OS X, and Windows.
+The goal of this project is to make the easiest, fastest, and most painless way of setting up a self-hosted Git service. With Go, this can be done with an independent binary distribution across **ALL platforms** that Go supports, including Linux, Mac OS X, Windows and ARM.
 
 ## Overview
 
-- Please see the [Documentation](http://gogs.io/docs/intro) for project design, known issues, and change log.
+- Please see the [Documentation](http://gogs.io/docs/intro) for common usages and change log.
 - See the [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
 - Want to try it before doing anything else? Do it [online](https://try.gogs.io/gogs/gogs) or go down to the **Installation -> Install from binary** section!
 - Having trouble? Get help with [Troubleshooting](http://gogs.io/docs/intro/troubleshooting.html).
@@ -63,13 +64,13 @@ The goal of this project is to make the easiest, fastest, and most painless way
 - Mail service
 - Administration panel
 - CI integration: [Drone](https://github.com/drone/drone)
-- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb)
+- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) (experimental)
 - Multi-language support ([14 languages](https://crowdin.com/project/gogs))
 
 ## System Requirements
 
 - A cheap Raspberry Pi is powerful enough for basic functionality.
-- At least 2 CPU cores and 1GB RAM would be the baseline for teamwork.
+- 2 CPU cores and 1GB RAM would be the baseline for teamwork.
 
 ## Browser Support
 
@@ -92,6 +93,7 @@ There are 5 ways to install Gogs:
 
 - [How To Set Up Gogs on Ubuntu 14.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-gogs-on-ubuntu-14-04)
 - [Run your own GitHub-like service with the help of Docker](http://blog.hypriot.com/post/run-your-own-github-like-service-with-docker/)
+- [使用 Gogs 搭建自己的 Git 服务器](https://mynook.info/blog/post/host-your-own-git-server-using-gogs) (Chinese)
 - [阿里云上 Ubuntu 14.04 64 位安装 Gogs](http://my.oschina.net/luyao/blog/375654) (Chinese)
 - [Installing Gogs on FreeBSD](https://www.codejam.info/2015/03/installing-gogs-on-freebsd.html)
 - [Gogs on Raspberry Pi](http://blog.meinside.pe.kr/Gogs-on-Raspberry-Pi/)
@@ -120,6 +122,7 @@ There are 5 ways to install Gogs:
 - System Monitor Status is inspired by [GoBlog](https://github.com/fuxiaohei/goblog).
 - Thanks [lavachen](http://www.lavachen.cn/) and [Rocker](http://weibo.com/rocker1989) for designing Logo.
 - Thanks [Crowdin](https://crowdin.com/project/gogs) for providing open source translation plan.
+- Thanks [DigitalOcean](https://www.digitalocean.com) for hosting home and demo sites.
 
 ## Contributors
 

+ 6 - 4
README_ZH.md

@@ -1,15 +1,15 @@
 Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs)
 =====================
 
-Gogs (Go Git Service) 是一款可轻易搭建的自助 Git 服务。
+Gogs (Go Git Service) 是一款易搭建的自助 Git 服务。
 
 ## 开发目的
 
-Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 **所有平台**,包括 Linux、Mac OS X 以及 Windows
+Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 **所有平台**,包括 Linux、Mac OS X、Windows 以及 ARM 平台
 
 ## 项目概览
 
-- 有关项目设计、已知问题和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。
+- 有关基本用法和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。
 - 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。
 - 想要先睹为快?通过 [在线体验](https://try.gogs.io/gogs/gogs) 或查看 **安装部署 -> 二进制安装** 小节。
 - 使用过程中遇到问题?尝试从 [故障排查](http://gogs.io/docs/intro/troubleshooting.html) 页面获取帮助。
@@ -30,7 +30,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
 - 支持邮件服务
 - 支持后台管理面板
 - 支持 CI 集成:[Drone](https://github.com/drone/drone)
-- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb) 数据库
+- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb)(实验性支持) 数据库
 - 支持多语言本地化([14 种语言]([more](https://crowdin.com/project/gogs)))
 
 ## 系统要求
@@ -57,6 +57,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
 
 ### 使用教程
 
+- [使用 Gogs 搭建自己的 Git 服务器](https://mynook.info/blog/post/host-your-own-git-server-using-gogs)
 - [阿里云上 Ubuntu 14.04 64 位安装 Gogs](http://my.oschina.net/luyao/blog/375654)
 
 ### 云端部署
@@ -79,6 +80,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
 - 基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改的系统监视状态。
 - 感谢 [lavachen](http://www.lavachen.cn/) 和 [Rocker](http://weibo.com/rocker1989) 设计的 Logo。
 - 感谢 [Crowdin](https://crowdin.com/project/gogs) 提供免费的开源项目本地化支持。
+- 感谢 [DigitalOcean](https://www.digitalocean.com) 提供主站和体验站点的服务器赞助。
 
 ## 贡献成员
 

+ 6 - 6
cmd/cert.go

@@ -32,12 +32,12 @@ var CmdCert = cli.Command{
 Outputs to 'cert.pem' and 'key.pem' and will overwrite existing files.`,
 	Action: runCert,
 	Flags: []cli.Flag{
-		cli.StringFlag{"host", "", "Comma-separated hostnames and IPs to generate a certificate for", ""},
-		cli.StringFlag{"ecdsa-curve", "", "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521", ""},
-		cli.IntFlag{"rsa-bits", 2048, "Size of RSA key to generate. Ignored if --ecdsa-curve is set", ""},
-		cli.StringFlag{"start-date", "", "Creation date formatted as Jan 1 15:04:05 2011", ""},
-		cli.DurationFlag{"duration", 365 * 24 * time.Hour, "Duration that certificate is valid for", ""},
-		cli.BoolFlag{"ca", "whether this cert should be its own Certificate Authority", ""},
+		stringFlag("host", "", "Comma-separated hostnames and IPs to generate a certificate for"),
+		stringFlag("ecdsa-curve", "", "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521"),
+		intFlag("rsa-bits", 2048, "Size of RSA key to generate. Ignored if --ecdsa-curve is set"),
+		stringFlag("start-date", "", "Creation date formatted as Jan 1 15:04:05 2011"),
+		durationFlag("duration", 365*24*time.Hour, "Duration that certificate is valid for"),
+		boolFlag("ca", "whether this cert should be its own Certificate Authority"),
 	},
 }
 

+ 42 - 0
cmd/cmd.go

@@ -0,0 +1,42 @@
+// Copyright 2015 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 cmd
+
+import (
+	"time"
+
+	"github.com/codegangsta/cli"
+)
+
+func stringFlag(name, value, usage string) cli.StringFlag {
+	return cli.StringFlag{
+		Name:  name,
+		Value: value,
+		Usage: usage,
+	}
+}
+
+func boolFlag(name, usage string) cli.BoolFlag {
+	return cli.BoolFlag{
+		Name:  name,
+		Usage: usage,
+	}
+}
+
+func intFlag(name string, value int, usage string) cli.IntFlag {
+	return cli.IntFlag{
+		Name:  name,
+		Value: value,
+		Usage: usage,
+	}
+}
+
+func durationFlag(name string, value time.Duration, usage string) cli.DurationFlag {
+	return cli.DurationFlag{
+		Name:  name,
+		Value: value,
+		Usage: usage,
+	}
+}

+ 2 - 2
cmd/dump.go

@@ -25,8 +25,8 @@ var CmdDump = cli.Command{
 It can be used for backup and capture Gogs server image to send to maintainer`,
 	Action: runDump,
 	Flags: []cli.Flag{
-		cli.StringFlag{"config, c", "custom/conf/app.ini", "Custom configuration file path", ""},
-		cli.BoolFlag{"verbose, v", "show process details", ""},
+		stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+		boolFlag("verbose, v", "show process details"),
 	},
 }
 

+ 58 - 38
cmd/serve.go

@@ -33,7 +33,7 @@ var CmdServ = cli.Command{
 	Description: `Serv provide access auth for repositories`,
 	Action:      runServ,
 	Flags: []cli.Flag{
-		cli.StringFlag{"config, c", "custom/conf/app.ini", "Custom configuration file path", ""},
+		stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
 	},
 }
 
@@ -74,7 +74,51 @@ var (
 
 func fail(userMessage, logMessage string, args ...interface{}) {
 	fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
-	log.GitLogger.Fatal(3, logMessage, args...)
+
+	if len(logMessage) > 0 {
+		log.GitLogger.Fatal(3, logMessage, args...)
+		return
+	}
+
+	log.GitLogger.Close()
+	os.Exit(1)
+}
+
+func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName string) {
+	task, err := models.GetUpdateTaskByUUID(uuid)
+	if err != nil {
+		if models.IsErrUpdateTaskNotExist(err) {
+			log.GitLogger.Trace("No update task is presented: %s", uuid)
+			return
+		}
+		log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err)
+	}
+
+	if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID,
+		user.Name, repoUserName, repoName, user.Id); err != nil {
+		log.GitLogger.Error(2, "Update: %v", err)
+	}
+
+	if err = models.DeleteUpdateTaskByUUID(uuid); err != nil {
+		log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err)
+	}
+
+	// Ask for running deliver hook and test pull request tasks.
+	reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" +
+		strings.TrimPrefix(task.RefName, "refs/heads/")
+	log.GitLogger.Trace("Trigger task: %s", reqURL)
+
+	resp, err := httplib.Head(reqURL).SetTLSClientConfig(&tls.Config{
+		InsecureSkipVerify: true,
+	}).Response()
+	if err == nil {
+		resp.Body.Close()
+		if resp.StatusCode/100 != 2 {
+			log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code")
+		}
+	} else {
+		log.GitLogger.Error(2, "Fail to trigger task: %v", err)
+	}
 }
 
 func runServ(c *cli.Context) {
@@ -95,13 +139,13 @@ func runServ(c *cli.Context) {
 	}
 
 	verb, args := parseCmd(cmd)
-	repoPath := strings.Trim(args, "'")
+	repoPath := strings.ToLower(strings.Trim(args, "'"))
 	rr := strings.SplitN(repoPath, "/", 2)
 	if len(rr) != 2 {
 		fail("Invalid repository path", "Invalid repository path: %v", args)
 	}
-	repoUserName := rr[0]
-	repoName := strings.TrimSuffix(rr[1], ".git")
+	repoUserName := strings.ToLower(rr[0])
+	repoName := strings.ToLower(strings.TrimSuffix(rr[1], ".git"))
 
 	repoUser, err := models.GetUserByName(repoUserName)
 	if err != nil {
@@ -124,6 +168,11 @@ func runServ(c *cli.Context) {
 		fail("Unknown git command", "Unknown git command %s", verb)
 	}
 
+	// Prohibit push to mirror repositories.
+	if requestedMode > models.ACCESS_MODE_READ && repo.IsMirror {
+		fail("mirror repository is read-only", "")
+	}
+
 	// Allow anonymous clone for public repositories.
 	var (
 		keyID int64
@@ -132,12 +181,12 @@ func runServ(c *cli.Context) {
 	if requestedMode == models.ACCESS_MODE_WRITE || repo.IsPrivate {
 		keys := strings.Split(c.Args()[0], "-")
 		if len(keys) != 2 {
-			fail("Key ID format error", "Invalid key ID: %s", c.Args()[0])
+			fail("Key ID format error", "Invalid key argument: %s", c.Args()[0])
 		}
 
 		key, err := models.GetPublicKeyByID(com.StrTo(keys[1]).MustInt64())
 		if err != nil {
-			fail("Key ID format error", "Invalid key ID[%s]: %v", c.Args()[0], err)
+			fail("Invalid key ID", "Invalid key ID[%s]: %v", c.Args()[0], err)
 		}
 		keyID = key.ID
 
@@ -162,7 +211,7 @@ func runServ(c *cli.Context) {
 				fail("Internal error", "UpdateDeployKey: %v", err)
 			}
 		} else {
-			user, err = models.GetUserByKeyId(key.ID)
+			user, err = models.GetUserByKeyID(key.ID)
 			if err != nil {
 				fail("internal error", "Failed to get user by key ID(%d): %v", keyID, err)
 			}
@@ -201,36 +250,7 @@ func runServ(c *cli.Context) {
 	}
 
 	if requestedMode == models.ACCESS_MODE_WRITE {
-		task, err := models.GetUpdateTaskByUUID(uuid)
-		if err != nil {
-			log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err)
-		}
-
-		if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID,
-			user.Name, repoUserName, repoName, user.Id); err != nil {
-			log.GitLogger.Error(2, "Update: %v", err)
-		}
-
-		if err = models.DeleteUpdateTaskByUUID(uuid); err != nil {
-			log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err)
-		}
-
-		// Ask for running deliver hook and test pull request tasks.
-		reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" +
-			strings.TrimPrefix(task.RefName, "refs/heads/")
-		log.GitLogger.Trace("Trigger task: %s", reqURL)
-
-		resp, err := httplib.Head(reqURL).SetTLSClientConfig(&tls.Config{
-			InsecureSkipVerify: true,
-		}).Response()
-		if err == nil {
-			resp.Body.Close()
-			if resp.StatusCode/100 != 2 {
-				log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code")
-			}
-		} else {
-			log.GitLogger.Error(2, "Fail to trigger task: %v", err)
-		}
+		handleUpdateTask(uuid, user, repoUserName, repoName)
 	}
 
 	// Update user key activity.

+ 2 - 4
cmd/update.go

@@ -20,7 +20,7 @@ var CmdUpdate = cli.Command{
 	Description: `Update get pushed info and insert into database`,
 	Action:      runUpdate,
 	Flags: []cli.Flag{
-		cli.StringFlag{"config, c", "custom/conf/app.ini", "Custom configuration file path", ""},
+		stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
 	},
 }
 
@@ -42,10 +42,8 @@ func runUpdate(c *cli.Context) {
 		log.GitLogger.Fatal(2, "refName is empty, shouldn't use")
 	}
 
-	uuid := os.Getenv("uuid")
-
 	task := models.UpdateTask{
-		UUID:        uuid,
+		UUID:        os.Getenv("uuid"),
 		RefName:     args[0],
 		OldCommitID: args[1],
 		NewCommitID: args[2],

+ 35 - 18
cmd/web.go

@@ -7,7 +7,7 @@ package cmd
 import (
 	"crypto/tls"
 	"fmt"
-	"html/template"
+	gotmpl "html/template"
 	"io/ioutil"
 	"net/http"
 	"net/http/fcgi"
@@ -35,11 +35,11 @@ import (
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/auth/apiv1"
 	"github.com/gogits/gogs/modules/avatar"
-	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/bindata"
 	"github.com/gogits/gogs/modules/log"
 	"github.com/gogits/gogs/modules/middleware"
 	"github.com/gogits/gogs/modules/setting"
+	"github.com/gogits/gogs/modules/template"
 	"github.com/gogits/gogs/routers"
 	"github.com/gogits/gogs/routers/admin"
 	"github.com/gogits/gogs/routers/api/v1"
@@ -56,8 +56,8 @@ var CmdWeb = cli.Command{
 and it takes care of all the other things for you`,
 	Action: runWeb,
 	Flags: []cli.Flag{
-		cli.StringFlag{"port, p", "3000", "Temporary port number to prevent conflict", ""},
-		cli.StringFlag{"config, c", "custom/conf/app.ini", "Custom configuration file path", ""},
+		stringFlag("port, p", "3000", "Temporary port number to prevent conflict"),
+		stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
 	},
 }
 
@@ -80,13 +80,14 @@ func checkVersion() {
 
 	// Check dependency version.
 	checkers := []VerChecker{
-		{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.4.3.0806"},
+		{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.4.4.1029"},
 		{"github.com/Unknwon/macaron", macaron.Version, "0.5.4"},
-		{"github.com/macaron-contrib/binding", binding.Version, "0.1.0"},
-		{"github.com/macaron-contrib/cache", cache.Version, "0.1.2"},
-		{"github.com/macaron-contrib/csrf", csrf.Version, "0.0.3"},
-		{"github.com/macaron-contrib/i18n", i18n.Version, "0.0.7"},
-		{"github.com/macaron-contrib/session", session.Version, "0.1.6"},
+		{"github.com/go-macaron/binding", binding.Version, "0.1.0"},
+		{"github.com/go-macaron/cache", cache.Version, "0.1.2"},
+		{"github.com/go-macaron/csrf", csrf.Version, "0.0.3"},
+		{"github.com/go-macaron/i18n", i18n.Version, "0.0.7"},
+		{"github.com/go-macaron/session", session.Version, "0.1.6"},
+		{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
 		{"gopkg.in/ini.v1", ini.Version, "1.3.4"},
 	}
 	for _, c := range checkers {
@@ -124,7 +125,7 @@ func newMacaron() *macaron.Macaron {
 	))
 	m.Use(macaron.Renderer(macaron.RenderOptions{
 		Directory:  path.Join(setting.StaticRootPath, "templates"),
-		Funcs:      []template.FuncMap{base.TemplateFuncs},
+		Funcs:      []gotmpl.FuncMap{template.Funcs},
 		IndentJSON: macaron.Env != macaron.PROD,
 	}))
 
@@ -237,6 +238,13 @@ func runWeb(ctx *cli.Context) {
 					m.Patch("/hooks/:id:int", bind(api.EditHookOption{}), v1.EditRepoHook)
 					m.Get("/raw/*", middleware.RepoRef(), v1.GetRepoRawFile)
 					m.Get("/archive/*", v1.GetRepoArchive)
+
+					m.Group("/keys", func() {
+						m.Combo("").Get(v1.ListRepoDeployKeys).
+							Post(bind(api.CreateDeployKeyOption{}), v1.CreateRepoDeployKey)
+						m.Combo("/:id").Get(v1.GetRepoDeployKey).
+							Delete(v1.DeleteRepoDeploykey)
+					})
 				}, middleware.ApiRepoAssignment())
 			}, middleware.ApiReqToken())
 
@@ -385,8 +393,8 @@ func runWeb(ctx *cli.Context) {
 			m.Get("/teams", org.Teams)
 			m.Get("/teams/:team", org.TeamMembers)
 			m.Get("/teams/:team/repositories", org.TeamRepositories)
-			m.Get("/teams/:team/action/:action", org.TeamsAction)
-			m.Get("/teams/:team/action/repo/:action", org.TeamsRepoAction)
+			m.Route("/teams/:team/action/:action", "GET,POST", org.TeamsAction)
+			m.Route("/teams/:team/action/repo/:action", "GET,POST", org.TeamsRepoAction)
 		}, middleware.OrgAssignment(true, true))
 
 		m.Group("/:org", func() {
@@ -462,8 +470,10 @@ func runWeb(ctx *cli.Context) {
 				m.Post("/delete", repo.DeleteDeployKey)
 			})
 
+		}, func(ctx *middleware.Context) {
+			ctx.Data["PageIsSettings"] = true
 		})
-	}, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin)
+	}, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin, middleware.RepoRef())
 
 	m.Group("/:username/:reponame", func() {
 		m.Get("/action/:action", repo.Action)
@@ -504,6 +514,7 @@ func runWeb(ctx *cli.Context) {
 			m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
 			m.Get("/edit/:tagname", repo.EditRelease)
 			m.Post("/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
+			m.Post("/delete", repo.DeleteRelease)
 		}, reqRepoAdmin, middleware.RepoRef())
 
 		m.Combo("/compare/*").Get(repo.CompareAndPullRequest).
@@ -511,11 +522,17 @@ func runWeb(ctx *cli.Context) {
 	}, reqSignIn, middleware.RepoAssignment(true))
 
 	m.Group("/:username/:reponame", func() {
-		m.Get("/releases", middleware.RepoRef(), repo.Releases)
-		m.Get("/^:type(issues|pulls)$", repo.RetrieveLabels, repo.Issues)
+		m.Group("", func() {
+			m.Get("/releases", repo.Releases)
+			m.Get("/^:type(issues|pulls)$", repo.RetrieveLabels, repo.Issues)
+			m.Get("/labels/", repo.RetrieveLabels, repo.Labels)
+			m.Get("/milestones", repo.Milestones)
+		}, middleware.RepoRef(),
+			func(ctx *middleware.Context) {
+				ctx.Data["PageIsList"] = true
+			})
 		m.Get("/^:type(issues|pulls)$/:index", repo.ViewIssue)
-		m.Get("/labels/", repo.RetrieveLabels, repo.Labels)
-		m.Get("/milestones", repo.Milestones)
+
 		m.Get("/branches", repo.Branches)
 		m.Get("/archive/*", repo.Download)
 

+ 14 - 0
conf/app.ini

@@ -48,6 +48,8 @@ HTTP_ADDR =
 HTTP_PORT = 3000
 ; Disable SSH feature when not available
 DISABLE_SSH = false
+; Whether use builtin SSH server or not.
+START_SSH_SERVER = false
 SSH_PORT = 22
 ; Disable CDN even in "prod" mode
 OFFLINE_MODE = false
@@ -116,6 +118,16 @@ DISABLE_MINIMUM_KEY_SIZE_CHECK = false
 ; Enable captcha validation for registration
 ENABLE_CAPTCHA = true
 
+; used to filter keys which are too short
+[service.minimum_key_sizes]
+ED25519 = 256
+ECDSA   = 256
+NTRU    = 1087
+MCE     = 1702
+McE     = 1702
+RSA     = 1024
+DSA     = 1024
+
 [webhook]
 ; Hook task queue length
 QUEUE_LENGTH = 1000
@@ -322,3 +334,5 @@ it-IT = it
 
 [other]
 SHOW_FOOTER_BRANDING = false
+; Show version information about gogs and go in the footer
+SHOW_FOOTER_VERSION = true

+ 27 - 18
conf/locale/TRANSLATORS

@@ -1,20 +1,29 @@
 # This file lists all PUBLIC individuals having contributed content to the translation.
-# Order of name is meaningless.
+# Entries are in alphabetical order.
 
-Akihiro YAGASAKI <yaggytter@momiage.com>
-Alexander Steinhöfer <kontakt@lx-s.de>
-Alexandre Magno <alexandre.mbm@gmail.com>
-Barış Arda Yılmaz <ardayilmazgamer@gmail.com>
-Christoph Kisfeld <christoph.kisfeld@gmail.com>
-Daniel Speichert <daniel@speichert.pl>
-Gregor Santner <gdev@live.de>
-Huimin Wang <wanghm2009@hotmail.co.jp>
-ilko <email>
-Thomas Fanninger <gogs.thomas@fanninger.at>
-Łukasz Jan Niemier <lukasz@niemier.pl>
-Lafriks <lafriks@gmail.com>
-Luc Stepniewski <luc@stepniewski.fr>
-Miguel de la Cruz <miguel@mcrx.me>
-Marc Schiller <marc@schiller.im>
-Morten Sørensen <klim8d@gmail.com>
-Natan Albuquerque <natanalbuquerque5@gmail.com>
+Akihiro YAGASAKI <yaggytter AT momiage DOT com>
+Alexander Steinhöfer <kontakt AT lx-s DOT de>
+Alexandre Magno <alexandre DOT mbm AT gmail DOT com>
+Andrey Nering <andrey AT nering DOT com DOT br>
+Arthur Aslanyan <arthur DOT e DOT aslanyan AT gmail DOT com>
+Barış Arda Yılmaz <ardayilmazgamer AT gmail DOT com>
+Christoph Kisfeld <christoph DOT kisfeld AT gmail DOT com>
+Daniel Speichert <daniel AT speichert DOT pl>
+Dmitriy Nogay <me AT catwhocode DOT ga>
+Gregor Santner <gdev AT live DOT de>
+Hamid Feizabadi <hamidfzm AT gmail DOT com>
+Huimin Wang <wanghm2009 AT hotmail DOT co DOT jp>
+ilko
+Lafriks <lafriks AT gmail DOT com>
+Lauri Ojansivu <x AT xet7 DOT org>
+Luc Stepniewski <luc AT stepniewski DOT fr>
+Marc Schiller <marc AT schiller DOT im>
+Miguel de la Cruz <miguel AT mcrx DOT me>
+Morten Sørensen <klim8d AT gmail DOT com>
+Natan Albuquerque <natanalbuquerque5 AT gmail DOT com>
+Odilon Junior <odilon DOT junior93 AT gmail DOT com>
+Thomas Fanninger <gogs DOT thomas AT fanninger DOT at>
+Tilmann Bach <tilmann AT outlook DOT com>
+Vladimir Vissoultchev <wqweto AT gmail DOT com>
+YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
+Łukasz Jan Niemier <lukasz AT niemier DOT pl>

+ 1009 - 992
conf/locale/locale_bg-BG.ini

@@ -1,992 +1,1009 @@
-app_desc=Безпроблемен собствен Git сървър
-
-home=Начало
-dashboard=Табло
-explore=Разгледай
-help=Помощ
-sign_in=Влизане
-sign_out=Излизане
-sign_up=Регистрирайте се
-register=Регистриране
-website=Уебсайт
-version=Версия
-page=Страница
-template=Шаблон
-language=Език
-create_new=Създаване...
-user_profile_and_more=Потребителски профил и пр.
-signed_in_as=Вписан като
-
-username=Потребител
-email=Ел. поща
-password=Парола
-re_type=Въведете повторно
-captcha=Captcha
-
-repository=Хранилище
-organization=Организация
-mirror=Огледало
-new_repo=Ново хранилище
-new_migrate=Нова миграция
-new_fork=Ново разклонено хранилище
-new_org=Нова организация
-manage_org=Управление на организации
-admin_panel=Административен панел
-account_settings=Настройки на профила
-settings=Настройки
-your_profile=Вашият профил
-your_settings=Вашите настройки
-
-news_feed=Поток новини
-pull_requests=Заявки за сливане
-issues=Проблеми
-
-cancel=Отказ
-
-[search]
-search=Търсене...
-repository=Хранилище
-user=Потребител
-issue=Проблем
-code=Код
-
-[install]
-install=Инсталация
-title=Стъпки за инсталиране при първоначално стартиране
-docker_helper=Ако Gogs е стартиран в Docker контейнер, моля прочетете <a target="_blank" href="%s">нашите указания</a> внимателно, преди да правите промени по настройките на тази страница!
-requite_db_desc=Gogs изисква MySQL, PostgreSQL, SQLite3 или TiDB.
-db_title=Настройки на базата данни
-db_type=Тип на база данни
-host=Сървър
-user=Потребител
-password=Парола
-db_name=Име на база данни
-db_helper=Моля, използвайте INNODB engine с utf8_general_ci кодиране на знаци за MySQL.
-ssl_mode=Режим SSL
-path=Път
-sqlite_helper=Файл на SQLite3 или TiDB база данни.
-err_empty_db_path=Пътят до SQLite3 или TiDB база данни не може да е празен.
-err_invalid_tidb_name=TiDB не позволява "." и "-" в името на базата данни.
-no_admin_and_disable_registration=Невъзможно изключване на регистрациите без предварително да е създаден поне един административен профил.
-err_empty_admin_password=Паролата на администратор не може да е празна.
-
-general_title=Общи настройки на приложението
-app_name=Име на приложението
-app_name_helper=Постави името на твоята организация тук - голямо е крещящо!
-repo_path=Основен път към хранилищата
-repo_path_helper=Всички отдалечени хранилища на Git ще бъдат съхранени в тази директория.
-run_user=Потребителски контекст
-run_user_helper=Този потребител трябва да има достъп до основния път към хранилищата и права да стартира Gogs.
-domain=Домейн
-domain_helper=Тази настройка влияе на URL адреса за клониране чрез SSH.
-ssh_port=SSH порт
-ssh_port_helper=Номер на порт на SSH сървъра. Оставете празно за да изключите достъп през SSH.
-http_port=HTTP порт
-http_port_helper=Порт, на който приложението ще слуша.
-app_url=URL адрес на приложението
-app_url_helper=Този настройка променя HTTP/HTTPS адреса за клониране, а понякога и адреса на ел. поща.
-
-optional_title=Опционални настройки
-email_title=Настройки на пощенска услуга
-smtp_host=SMTP сървър
-smtp_from=Подател
-smtp_from_helper=Адрес на подател на поща по RFC 5322. Може да бъде обикновен адрес на ел. поща или във формат "Име" <email@example.com>.
-mailer_user=Ел. поща за изпращане
-mailer_password=Парола за изпращане
-register_confirm=Включи потвърждението на регистрациите
-mail_notify=Включи уведомления по пощата
-server_service_title=Настройки на сървъра и други услуги
-offline_mode=Включи офлайн режима
-offline_mode_popup=Изключи CDN дори в продукционен режим, всички ресурсни файлове ще бъдат доставяни локално.
-disable_gravatar=Изключи връзка с Gravatar
-disable_gravatar_popup=Изключва Gravatar и външни източници, така че всички аватари трябва да са или качени от потребителите или да се ползват аватари по подразбиране.
-disable_registration=Изключи саморегистрацията
-disable_registration_popup=Изключи потребителската саморегистрация, само администратор може да създава профили.
-enable_captcha=Включи Captcha
-enable_captcha_popup=Изисква валидиране с captcha при саморегистрация на потребители.
-require_sign_in_view=Включи задължително вписване за преглед на страници
-require_sign_in_view_popup=Само вписани потребители могат да виждат страниците, анонимните посетители виждат само страниците за регистрация и вход.
-admin_setting_desc=Няма нужда от създаване на администраторски профил в момента, защото потребителят с първо ID в базата автоматично получава администраторски достъп.
-admin_title=Настройки на профил на администратора
-admin_name=Потребителско име
-admin_password=Парола
-confirm_password=Потвърждение на паролата
-admin_email=Ел. поща
-install_gogs=Инсталирай Gogs
-test_git_failed=Неуспешно тестването на "git" команда: %v
-sqlite3_not_available=Вашата версия не поддържа SQLite3, моля, изтеглете официалната двоична версия от %s, а не gobuild версията.
-invalid_db_setting=Настройките на базата данни са некоректни: %v
-invalid_repo_path=Основният път към хранилищата е невалиден: %v
-run_user_not_match=Потребителският контекст на приложението не е на текущия потребител: %s -> %s
-save_config_failed=Неуспешно запазване на конфигурация: %v
-invalid_admin_setting=Настройките на профил на администратора са невалидни: %v
-install_success=Добре дошли! Радваме се, че избрахте Gogs, и Ви пожелаваме приятна работа и сърдечни поздрави!
-
-[home]
-uname_holder=Потребителско име или ел. поща
-password_holder=Парола
-switch_dashboard_context=Превключи контекст на таблото
-my_repos=Моите хранилища
-collaborative_repos=Съвместни хранилища
-my_orgs=Моите организации
-my_mirrors=Моите огледала
-view_home=Преглед на %s
-
-issues.in_your_repos=Във Вашите хранилища
-
-[explore]
-repos=Хранилища
-
-[auth]
-create_new_account=Създай нов профил
-register_hepler_msg=Вече имате профил? Впишете се сега!
-social_register_hepler_msg=Вече имате профил? Свържете се сега!
-disable_register_prompt=За съжаление създаването на нови регистрации е изключено. Обърнете се към администратора на сайта.
-disable_register_mail=За съжаление потвърждението на регистрации е изключено.
-remember_me=Запомни ме
-forgot_password=Забравена парола
-forget_password=Забравена парола?
-sign_up_now=Нуждаете се от профил? Регистрирайте се сега.
-confirmation_mail_sent_prompt=Ново писмо за потвърждение е изпратено до <b>%s</b>. Моля проверете пощенската си кутия в рамките на следващите %d часа, за да завършите процеса на регистрация.
-sign_in_to_account=Влезте с Вашия профил
-active_your_account=Активиране на профил
-resent_limit_prompt=За съжаление Вие съвсем наскоро изпратихте писмо за активация. Моля изчакайте 3 минути, след което опитайте отново.
-has_unconfirmed_mail=Здравейте %s, имате непотвърден адрес на ел. поща (<b>%s</b>). Ако не сте получили писмо за потвърждение или имате нужда да се изпрати ново писмо, моля щракнете бутона по-долу.
-resend_mail=Щракнете тук, за да се изпрати ново писмо за потвърждение
-email_not_associate=Този адрес на ел. поща не е свързан с никой профил.
-send_reset_mail=Щракнете тук, за да получите (отново) писмо за нулиране на паролата
-reset_password=Нулиране на паролата
-invalid_code=За съжаление Вашия код за потвърждение е изтекъл или е невалиден.
-reset_password_helper=Щракнете тук, за да нулирате паролата си
-password_too_short=Размерът на паролата не може да бъде по-малък от 6 знака.
-
-[mail]
-activate_account=Моля активирайте Вашия профил
-activate_email=Провери адрес на ел. поща
-reset_password=Нулиране на паролата
-register_success=Успешна регистрация и добре дошли
-
-[modal]
-yes=Да
-no=Не
-modify=Промени
-
-[form]
-UserName=Потребителско име
-RepoName=Име на хранилището
-Email=Адрес на ел. поща
-Password=Парола
-Retype=Повторно паролата
-SSHTitle=Име на SSH ключ
-HttpsUrl=HTTPS URL адрес
-PayloadUrl=URL адрес на изпращане
-TeamName=Име на екипа
-AuthName=Име на удостоверението
-AdminEmail=Ел. поща на администратора
-
-require_error=` не може да бъде празен.`
-alpha_dash_error=` трябва да e валидна буква, число или тире(-_).`
-alpha_dash_dot_error=` трябва да e валидна буква, число, тире(-_) или точка.`
-size_error=` трябва да е с размер %s.`
-min_size_error=` трябва да съдържа поне %s знака.`
-max_size_error=` трябва да съдържа най-много %s знака.`
-email_error=` не е валиден адрес на ел. поща.`
-url_error=` не е валиден URL адрес.`
-unknown_error=Неизвестна грешка:
-captcha_incorrect=Captcha не е потвърдена.
-password_not_match=Паролата и потвърждението ѝ не съвпадат.
-
-username_been_taken=Потребителското име вече се ползва.
-repo_name_been_taken=Името на хранилището вече се ползва.
-org_name_been_taken=Името на организацията вече се ползва.
-team_name_been_taken=Името на екипа вече се ползва.
-email_been_used=Този адрес на ел. поща вече се ползва.
-illegal_team_name=Името на екипа съдържа недопустими знаци.
-username_password_incorrect=Потребителското име или паролата не са верни.
-enterred_invalid_repo_name=Моля уверете се, че въведеното име на хранилище е вярно.
-enterred_invalid_owner_name=Моля уверете се, че въведеното име на притежател е вярно.
-enterred_invalid_password=Моля уверете се, че въведената парола е вярна.
-user_not_exist=Даденият потребител не съществува.
-last_org_owner=Премахване на последния потребител от екип притежатели не е позволено, тъй като винаги трябва да има поне един притежател в дадена организация.
-
-invalid_ssh_key=За съжаление, ние не сме в състояние да проверим Вашия SSH ключ: %s
-unable_verify_ssh_key=Gogs не може да провери Вашия SSH ключ, но предполагаме, че е валиден. Моля, проверете го.
-auth_failed=Неуспешно удостоверяване: %v
-
-still_own_repo=Вашият профил притежава поне едно хранилище. Първо трябва да ги изтриете или да ги прехвърлите на друг потребител.
-still_has_org=Вашият профил все още е член на поне една организация. Първо трябва да напуснете или изтриете Вашите членства.
-org_still_own_repo=Тази организация все още притежава хранилище. Първо трябва да го изтриете или да го прехвърлите на друга организация.
-
-still_own_user=Това удостоверяване се използва от поне един потребител. Моля премахнете потребителите към него и опитайте отново.
-
-target_branch_not_exist=Целевият клон не съществува.
-
-[user]
-change_avatar=Сменете Вашия аватар на gravatar.com
-change_custom_avatar=Сменете Вашия аватар в настройките
-join_on=Регистриран на
-repositories=Хранилища
-activity=Публична дейност
-followers=Последователи
-starred=Харесано
-following=Следване
-
-form.name_reserved=Потребителското име '%s' е запазено.
-form.name_pattern_not_allowed=Потребителското име '%s' не е допустимо.
-
-[settings]
-profile=Профил
-password=Парола
-ssh_keys=SSH ключове
-social=Социални профили
-applications=Приложения
-orgs=Организации
-delete=Изтрий профил
-uid=UID
-
-public_profile=Публичен профил
-profile_desc=Вашият адрес на ел. поща е публичен и ще бъде използван за всички свързани с профила Ви уведомления и всички уеб базирани операции, направени чрез сайта.
-full_name=Пълно име
-website=Уебсайт
-location=Локация
-update_profile=Обнови профила
-update_profile_success=Вашият профил е запазен успешно.
-change_username=Потребителското име е променено
-change_username_prompt=Този промяна ще засегне всички връзки сочещи към профила Ви.
-continue=Продължи
-cancel=Отказ
-
-enable_custom_avatar=Разреши потребителски аватар
-enable_custom_avatar_helper=Включете тази опция, за да забраните зареждане от Gravatar
-choose_new_avatar=Избери нов аватар
-update_avatar=Обнови настройките на аватара
-uploaded_avatar_not_a_image=Каченият файл не е изображение.
-no_custom_avatar_available=Невъзможно използване на външен аватар, защото не е активирано.
-update_avatar_success=Настройките на аватара са запазени успешно.
-
-change_password=Промени парола
-old_password=Текуща парола
-new_password=Нова парола
-retype_new_password=Повторно новата парола
-password_incorrect=Въведената парола не е вярна.
-change_password_success=Вашата парола е променена успешно. Вече може да влизате, използвайки тази нова парола.
-
-emails=Адреси на ел. поща
-manage_emails=Управление на адреси на ел. поща
-email_desc=Вашият основен адрес на ел. поща ще се използва за изпращане на уведомления и други операции.
-primary=Основен
-primary_email=Задай като основен
-delete_email=Изтрий
-email_deletion=Изтрий ел. поща
-email_deletion_desc=При изтриване на тази ел. поща ще се премахне свързаната информация от Вашия профил. Желаете ли да продължите?
-email_deletion_success=Ел. пощата беше изтрита успешно!
-add_new_email=Добавяне на нов адрес на ел. поща
-add_email=Добави ел. поща
-add_email_confirmation_sent=Ново писмо за потвърждение е изпратено до '%s'. Моля проверете пощенската си кутия в рамките на следващите %d часа, за да завършите процеса на регистрация.
-add_email_success=Ваш нов адрес на ел. поща е добавен успешно.
-
-manage_ssh_keys=Управление на SSH ключове
-add_key=Добави ключ
-ssh_desc=Това е списък на SSH ключове, свързани с Вашия акаунт. Тъй като тези ключове позволяват на всеки, който ги използва да получи достъп до хранилищата Ви, много е важно да се уверите, че ги разпознавате.
-ssh_helper=<strong>Не знам как?</strong> Проверете на GitHub упътването как да <a href="%s">създадете свои собствени SSH ключове</a> или решаване на <a href="%s">Общи проблеми</a>, които може да възникнат при използване на SSH.
-add_new_key=Добавяне на SSH ключ
-ssh_key_been_used=Съдържанието на публичния ключ е използвано.
-ssh_key_name_used=Вече съществува публичен ключ с това име.
-key_name=Име на ключа
-key_content=Съдържание
-add_key_success=Новият SSH ключ '%s' е добавен успешно!
-delete_key=Изтрий
-ssh_key_deletion=Изтрий SSH ключ
-ssh_key_deletion_desc=При изтриване на този SSH ключ ще се премахнат свързаните права за достъп за Вашия профил. Желаете ли да продължите?
-ssh_key_deletion_success=SSH ключа беше изтрит успешно!
-add_on=Добавен на
-last_used=Последно използван на
-no_activity=Няма скорошна активност
-key_state_desc=Този ключ е използван през последните 7 дни
-token_state_desc=Този токен е използван през последните 7 дни
-
-manage_social=Управление на свързани профили в социалните мрежи
-social_desc=Това е списък на свързани профили в социалните мрежи. Премахнете всички, които не разпознавате.
-unbind=Освобождаване
-unbind_success=Социалния профил е освободен.
-
-manage_access_token=Управление на индивидуални токени за достъп
-generate_new_token=Генериране на нов токен
-tokens_desc=Генерирани токени, които могат да се използват за достъп до API-то на Gogs.
-new_token_desc=Всеки токен ще има пълен достъп до Вашия профил.
-token_name=Име на токена
-generate_token=Генериране на токен
-generate_token_succees=Успешно е генериран токен за достъп. Уверете се, че сте го копирали, тъй като няма да можете да го видите отново!
-delete_token=Изтрий
-access_token_deletion=Изтрий индивидуален токен за достъп
-access_token_deletion_desc=При изтриване на този индивидуален токен за достъп ще се премахнат всички свързани права на приложението. Желаете ли да продължите?
-delete_token_success=Индивидуалния токен за достъп е изтрит успешно! Не забравяйте да преконфигурирате приложението също.
-
-delete_account=Изтрий собствен профил
-delete_prompt=Тази операция ще изтрие Вашия профил завинаги и тя <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
-confirm_delete_account=Потвърди изтриването
-delete_account_title=Изтрий профил
-delete_account_desc=Този профил ще бъде окончателно изтрит. Желаете ли да продължите?
-
-[repo]
-owner=Притежател
-repo_name=Име на хранилището
-repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи.
-visibility=Видимост
-visiblity_helper=Това хранилище е <span class="ui red text">Частно</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Промяна на тази стойност ще се отрази на всички разклонения)
-fork_repo=Разклони хранилището
-fork_from=Разклонение от
-fork_visiblity_helper=Не може да променяте видимостта на разклонено хранилище.
-repo_desc=Описание
-repo_lang=Език
-repo_lang_helper=Изберете .gitignore файлове
-license=Лиценз
-license_helper=Изберете лицензионен файл
-readme=Readme
-readme_helper=Изберете шаблон на readme
-auto_init=Инициализиране на това хранилище с избраните файлове и шаблон
-create_repo=Създай хранилище
-default_branch=Клон по подразбиране
-mirror_interval=Интервал на отразяване (часове)
-
-form.name_reserved=Името на хранилището '%s' е запазено.
-form.name_pattern_not_allowed=Име на хранилището от вида '%s' не е позволено.
-
-need_auth=Изисква удостоверяване
-migrate_type=Тип мигриране
-migrate_type_helper=Това хранилище ще бъде <span class="text blue">огледало</span>
-migrate_repo=Мигрирай хранилище
-migrate.clone_address=Адрес за клонирай
-migrate.clone_address_desc=Това може да е HTTP/HTTPS/GIT адрес или локален път на сървъра.
-migrate.invalid_local_path=Невалиден път - не съществува или не е директория.
-
-forked_from=разклонено от
-fork_from_self=Не можете да разклоните хранилище което си е Ваше!
-copy_link=Копирай
-copy_link_success=Копирано!
-copy_link_error=Натиснете ⌘-C или Ctrl-C за да копирате
-click_to_copy=Копиране в клипборда
-copied=Успешно копиране
-clone_helper=Нуждаете се от помощ при клониране? Посетете <a target="_blank" href="%s">Помощ</a>!
-unwatch=Не следи
-watch=Следи
-unstar=Не харесвам
-star=Харесвам
-fork=Разклонение
-
-no_desc=Няма описание
-quick_guide=Бърз справочник
-clone_this_repo=Клонирай хранилището
-create_new_repo_command=Създай ново хранилище чрез командния ред
-push_exist_repo=Предай съществуващо хранилище през командния ред
-repo_is_empty=Това хранилище е празно. Моля проверете по-късно пак!
-
-
-branch=Клон
-tree=Дърво
-branch_and_tags=Клонове и маркери
-branches=Клонове
-tags=Маркери
-issues=Проблеми
-pulls=Заявки за сливане
-labels=Етикети
-milestones=Етапи
-commits=Ревизии
-releases=Издания
-file_raw=Суров
-file_history=История
-file_view_raw=Виж суров
-file_permalink=Постоянна връзка
-
-commits.commits=Ревизии
-commits.search=Търсене в ревизии
-commits.find=Намери
-commits.author=Автор
-commits.message=Съобщение
-commits.date=Дата
-commits.older=По-стари
-commits.newer=По-нови
-
-issues.new=Нов проблем
-issues.new.labels=Етикети
-issues.new.no_label=Няма етикет
-issues.new.clear_labels=Изчисти етикети
-issues.new.milestone=Етап
-issues.new.no_milestone=Няма етап
-issues.new.clear_milestone=Изчисти етап
-issues.new.open_milestone=Отворени етапи
-issues.new.closed_milestone=Затворени етапи
-issues.new.assignee=Изпълнител
-issues.new.clear_assignee=Изчисти изпълнител
-issues.new.no_assignee=Няма изпълнител
-issues.create=Докладвай проблем
-issues.new_label=Нов етикет
-issues.new_label_placeholder=Име на етикета...
-issues.create_label=Създай етикет
-issues.open_tab=%d отворени
-issues.close_tab=%d затворени
-issues.filter_label=Етикет
-issues.filter_label_no_select=Не е избран етикет
-issues.filter_milestone=Етап
-issues.filter_milestone_no_select=Липсва избран етап
-issues.filter_assignee=Изпълнител
-issues.filter_assginee_no_select=Няма избран изпълнител
-issues.filter_type=Тип
-issues.filter_type.all_issues=Всички проблеми
-issues.filter_type.assigned_to_you=Възложени на Вас
-issues.filter_type.created_by_you=Създадени от Вас
-issues.filter_type.mentioning_you=Споменават лично
-issues.filter_sort=Подредба
-issues.filter_sort.latest=Най-нови
-issues.filter_sort.oldest=Най-стари
-issues.filter_sort.recentupdate=Последно променени
-issues.filter_sort.leastupdate=Отдавна променени
-issues.filter_sort.mostcomment=Най-много коментирани
-issues.filter_sort.leastcomment=Най-малко коментирани
-issues.opened_by=отворен %[1]s от <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=отворен %[1]s от %[2]s
-issues.previous=Предишна
-issues.next=Следваща
-issues.open_title=Отворени
-issues.closed_title=Затворени
-issues.num_comments=%d коментара
-issues.commented_at=`коментира <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Все още няма съдържание.
-issues.close_issue=Затвори
-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.poster=Участник
-issues.admin=Администратор
-issues.owner=Притежател
-issues.sign_up_for_free=Регистрирай се безплатно
-issues.sign_in_require_desc=за да се включите в този разговор. Вече имате профил? <a href="%s">Влезте, за да коментирате</a>
-issues.edit=Редакция
-issues.cancel=Отказ
-issues.save=Запис
-issues.label_title=Име на етикета
-issues.label_color=Цвят на етикет
-issues.label_count=%d етикети
-issues.label_open_issues=%d отворени проблема
-issues.label_edit=Редакция
-issues.label_delete=Изтрий
-issues.label_modify=Промяна на етикет
-issues.label_deletion=Изтрий етикет
-issues.label_deletion_desc=При изтриване на този етикет ще се премахне информацията за него във всички свързани проблеми. Желаете ли да продължите?
-issues.label_deletion_success=Етикетът е изтрит успешно!
-
-pulls.compare_changes=Сравни промените
-pulls.compare_changes_desc=Сравнява двата клона и създава заявка за сливане за разликите помежду им.
-pulls.compare_base=родителска версия
-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.create=Създай заявка за сливане
-pulls.title_desc=заяви обединяване на %[1]d ревизии от <code>%[2]s</code> във <code>%[3]s</code>
-pulls.merged_title_desc=обедини %[1]d ревизии от <code>%[2]s</code> във <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Разговор
-pulls.tab_commits=Ревизии
-pulls.tab_files=Променени файлове
-pulls.reopen_to_merge=Моля повторно отворете тази заявка за сливане за да се извърши обединяване.
-pulls.merged=Обединени
-pulls.has_merged=Тази заявка за сливане е обединена успешно!
-pulls.data_broken=Данните от тази заявка за сливане са невалидни поради изтрита информация за някое разклонение.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-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) от същото хранилище със същата информация за обединяване, която чака да бъде извършена`
-
-milestones.new=Нов етап
-milestones.open_tab=%d отворени
-milestones.close_tab=%d затворени
-milestones.closed=Затворен %s
-milestones.no_due_date=Няма краен срок
-milestones.open=Отвори
-milestones.close=Затвори
-milestones.new_subheader=Създайте етапи за да организирате проблемите.
-milestones.create=Създай етап
-milestones.title=Заглавие
-milestones.desc=Описание
-milestones.due_date=Краен срок (опционален)
-milestones.clear=Изчисти
-milestones.invalid_due_date_format=Невалиден формат на крайния срок, трябва да е 'гггг-мм-дд'.
-milestones.create_success=Етап '%s' е създаден успешно!
-milestones.edit=Редактирай етап
-milestones.edit_subheader=Въведете точни описания на етапите, за да не се объркват участниците.
-milestones.cancel=Отказ
-milestones.modify=Промяна на етап
-milestones.edit_success=Промените в етап '%s' са запазени успешно!
-milestones.deletion=Изтрий етап
-milestones.deletion_desc=При изтриване на етап ще се премахне информацията за него от всички свързани проблеми. Желаете ли да продължите?
-milestones.deletion_success=Етапът е изтрит успешно!
-
-settings=Настройки
-settings.options=Опции
-settings.collaboration=Сътрудничество
-settings.hooks=Уеб-куки
-settings.githooks=Git куки
-settings.basic_settings=Основни настройки
-settings.danger_zone=Опасната зона
-settings.site=Официален сайт
-settings.update_settings=Обнови настройките
-settings.change_reponame_prompt=Тази промяна ще засегне връзките, които се отнасят до това хранилището.
-settings.transfer=Прехвърли притежание
-settings.transfer_desc=Прехвърля това хранилище на друг потребител или към организация, в която имате права на администратор.
-settings.new_owner_has_same_repo=Новият притежател вече има хранилище със същото име. Изберете друго име.
-settings.delete=Изтриване на това хранилище
-settings.delete_desc=След като изтриете хранилището, няма връщане назад. Моля, бъдете сигурни.
-settings.transfer_notices_1=- Вие ще загубите достъп, ако новият притежател е индивидуален потребител.
-settings.transfer_notices_2=- Вие ще запазите достъпа си, ако новият притежател е организация и ако вие сте един от притежателите ѝ.
-settings.transfer_form_title=Моля въведете следната информация за да потвърдите операцията:
-settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
-settings.delete_notices_2=- Тази операция ще изтрие всичко от това хранилище, включително Git данни, проблеми, коментари и достъпа на сътрудници.
-settings.delete_notices_fork_1=- Ако това хранилище е публично, всички негови разклонения ще останат независими след изтриването му.
-settings.delete_notices_fork_2=- Ако това хранилище е частно, всички негови разклонения ще бъдат премахнати по време на изтриването.
-settings.delete_notices_fork_3=- Ако желаете да запазите всички разклонения след изтриването му, първо направете хранилището публично.
-settings.update_settings_success=Настройките на хранилището са запазени успешно.
-settings.transfer_owner=Нов притежател
-settings.make_transfer=Прехвърли
-settings.transfer_succeed=Притежанието на хранилището е прехвърлено успешно.
-settings.confirm_delete=Потвърди изтриването
-settings.add_collaborator=Добави нов сътрудник
-settings.add_collaborator_success=Добавен е нов сътрудник.
-settings.remove_collaborator_success=Сътрудникът е премахнат.
-settings.user_is_org_member=Потребителят е член на организацията и не може да бъде добавен като сътрудник.
-settings.add_webhook=Добави уеб-кука
-settings.hooks_desc=Уеб-куките много приличат на обикновен HTTP POST тригер. Когато нещо се случи в Gogs, ние ще изпратим уведомление до сървъра, който посочите. Научете повече в <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
-settings.webhook_deletion=Изтрий уеб-кука
-settings.webhook_deletion_desc=При изтриване на тази уеб-кука ще се премахне информацията за нея и цялата хронология на нейното изпращане. Желаете ли да продължите?
-settings.webhook_deletion_success=Уеб-куката е изтрита успешно!
-settings.webhook.request=Заявка
-settings.webhook.response=Отговор
-settings.webhook.headers=Заглавки
-settings.webhook.payload=Съдържание
-settings.webhook.body=Тяло
-settings.githooks_desc=Git куките се изпълняват от Git. Вие може да промените файловете с поддържаните куки в списъка по-долу, за да изпълните външни операции.
-settings.githook_edit_desc=Ако куката е неактивна, ще бъде представено примерно съдържание. Ако оставите съдържанието празно, то тази кука ще бъде изключена.
-settings.githook_name=Име на куката
-settings.githook_content=Съдържание на куката
-settings.update_githook=Обнови куката
-settings.add_webhook_desc=Gogs ще изпрати <code>POST</code> заявка към указания URL адрес заедно с информация за събитието, което е настъпило. Също можете да укажете в какъв формат желаете да получите данните при задействане на куката (JSON, x-www-form-urlencoded, XML) и др. Допълнително описание можете да намерите в нашето <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
-settings.payload_url=URL адрес на изпращане
-settings.content_type=Тип на съдържанието
-settings.secret=Тайна
-settings.slack_username=Потребителско име
-settings.slack_icon_url=URL адрес на икона
-settings.slack_color=Цвят
-settings.event_desc=При какви събития да се задейства тази уеб-кука?
-settings.event_push_only=Само при събитие от тип <code>предаване</code>.
-settings.event_send_everything=При <strong>всички</strong> събития.
-settings.event_choose=Нека избера от какво имам нужда.
-settings.event_create=Създаване
-settings.event_create_desc=Създаване на клон или маркер
-settings.event_push=Предаване
-settings.event_push_desc=Git предаване към хранилището
-settings.active=Активна
-settings.active_helper=Подробности относно събитието, което е задействало куката, също ще бъдат изпратени.
-settings.add_hook_success=Новата уеб-кука е добавена успешно.
-settings.update_webhook=Обнови уеб-куката
-settings.update_hook_success=Уеб-куката е запазена успешно.
-settings.delete_webhook=Изтрий уеб-куката
-settings.recent_deliveries=Последни изпращания
-settings.hook_type=Тип на куката
-settings.add_slack_hook_desc=Добавяне на интеграция със <a href="%s">Slack</a> във Вашето хранилище.
-settings.slack_token=Токен
-settings.slack_domain=Домейн
-settings.slack_channel=Канал
-settings.deploy_keys=Ключове за внедряване
-settings.add_deploy_key=Добави ключ за внедряване
-settings.no_deploy_keys=Все още няма настроен никакъв ключ за внедряване.
-settings.title=Заглавие
-settings.deploy_key_content=Съдържание
-settings.key_been_used=Съдържанието на ключа за внедряване е използвано.
-settings.key_name_used=Ключ за внедряване с такова име вече съществува.
-settings.add_key_success=Новият ключ за внедряване '%s' е добавен успешно!
-settings.deploy_key_deletion=Изтрий ключ за внедряване
-settings.deploy_key_deletion_desc=При изтриването на този ключ за внедряване ще се премахнат свързаните права за достъп до това хранилище. Желаете ли да продължите?
-settings.deploy_key_deletion_success=Ключът за внедряване е изтрит успешно!
-
-diff.browse_source=Преглед на кода
-diff.parent=родител
-diff.commit=ревизия
-diff.data_not_available=Няма данни за разлики.
-diff.show_diff_stats=Покажи статистика за разликите
-diff.stats_desc=променени са <strong>%d файла</strong>, в които са <strong>добавени %d</strong> реда и са <strong>изтрити %d</strong> реда
-diff.bin=BIN
-diff.view_file=Преглед на файла
-
-release.releases=Издания
-release.new_release=Ново издание
-release.draft=Чернови
-release.prerelease=Предварителни
-release.stable=Стабилни
-release.edit=редактиране
-release.ahead=<strong>%d</strong> ревизии на %s след това издание
-release.source_code=Изходен код
-release.tag_name=Име на маркера
-release.target=Цел
-release.tag_helper=Изберете съществуващ маркер или създайте нов маркер по време на публикуване.
-release.release_title=Заглавие на изданието
-release.content_with_md=Съдържание с <a href="%s">Markdown</a>
-release.write=Писане
-release.preview=Преглед
-release.content_placeholder=Напишете някакво съдържание
-release.loading=Зареждане...
-release.prerelease_desc=Това е предварително издание
-release.prerelease_helper=Ние ще отбележим, че това издание не е завършено за употреба.
-release.publish=Публикувай издание
-release.save_draft=Запис на чернова
-release.edit_release=Редактирай издание
-release.tag_name_already_exist=Издание с това име на маркер вече съществува.
-
-[org]
-org_name_holder=Име на организацията
-org_name_helper=Добрите имена на организация са кратки и запомнящи се.
-create_org=Създай организация
-repo_updated=Обновено
-people=Хора
-invite_someone=Поканете някого
-teams=Екипи
-lower_members=членове
-lower_repositories=хранилища
-create_new_team=Създай нов екип
-org_desc=Описание
-team_name=Име на екипа
-team_desc=Описание
-team_name_helper=Ще използвате това име при споменаване на този екип в разговори.
-team_desc_helper=Каква е целта на този екип?
-team_permission_desc=Какво ниво на достъп трябва да има този екип?
-
-form.name_reserved=Името на организацията '%s' е запазено.
-form.name_pattern_not_allowed=Име на организацията от вида '%s' не е разрешено.
-
-settings=Настройки
-settings.options=Опции
-settings.full_name=Пълно име
-settings.website=Уебсайт
-settings.location=Локация
-settings.update_settings=Обнови настройките
-settings.update_setting_success=Настройките на организацията са запазени успешно.
-settings.change_orgname_prompt=Този промяна ще засегне всички връзки сочещи към организацията.
-settings.update_avatar_success=Настройките на аватара на организацията са запазени успешно.
-settings.delete=Изтрий организацията
-settings.delete_account=Изтриване на тази организация
-settings.delete_prompt=Организацията ще бъде изтрита и операцията <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
-settings.confirm_delete_account=Потвърди изтриването
-settings.delete_org_title=Изтрий организацията
-settings.delete_org_desc=Тази организация ще бъде окончателно изтрита. Желаете ли да продължите?
-settings.hooks_desc=Добави уеб-куки, които ще бъдат използвани от <strong>всички хранилища</strong> в тази организация.
-
-members.public=Публични
-members.public_helper=направи частен
-members.private=Частни
-members.private_helper=направи публичен
-members.owner=Притежател
-members.member=Участник
-members.conceal=Прикриване
-members.remove=Премахни
-members.leave=Напусни
-members.invite_desc=Започнете да пишете потребителското име, за да поканите член в %s:
-members.invite_now=Покани
-
-teams.join=Присъедини се
-teams.leave=Напусни
-teams.read_access=Достъп за четене
-teams.read_access_helper=Този екип ще може да вижда и клонира своите хранилища.
-teams.write_access=Достъп за запис
-teams.write_access_helper=Този екип ще може да чете своите хранилища и ще може да предава към тях.
-teams.admin_access=Администраторски достъп
-teams.admin_access_helper=Този екип ще може да добавя код, данни и нови сътрудници в своите хранилища.
-teams.no_desc=Този екип няма описание
-teams.settings=Настройки
-teams.owners_permission_desc=Притежателите имат пълен достъп до <strong>всички хранилища</strong> и имат <strong>права на администратори</strong> на организацията.
-teams.members=Членовете на екипа
-teams.update_settings=Обнови настройките
-teams.delete_team=Изтриване на този екип
-teams.add_team_member=Добави член на екипа
-teams.delete_team_title=Изтрий екипа
-teams.delete_team_desc=Тъй като този екип ще бъдат изтрит, членовете му може да загубят достъп до някои хранилища. Желаете ли да продължите?
-teams.delete_team_success=Този екип е бил изтрит успешно.
-teams.read_permission_desc=Този екип предоставя достъп за <strong>четене</strong>: членове могат да разглеждат и клонират хранилищата на екипа.
-teams.write_permission_desc=Този екип предоставя достъп за <strong>писане</strong>: членовете могат да четат от и предават към хранилищата на екипа.
-teams.admin_permission_desc=Този екип предоставя <strong>администраторски</strong> достъп: членовете могат да четат от, да предават към и да добавя нови сътрудници към хранилищата на екипа.
-teams.repositories=Хранилища на екипа
-teams.add_team_repository=Добави хранилище на екипа
-teams.remove_repo=Премахни
-teams.add_nonexistent_repo=Хранилището, което се опитвате да добавите не съществува. Моля първо го създайте!
-
-[admin]
-dashboard=Табло
-users=Потребители
-organizations=Организации
-repositories=Хранилища
-authentication=Удостоверявания
-config=Конфигурация
-notices=Системни известия
-monitor=Наблюдение
-first_page=Първа
-last_page=Последна
-total=Общо: %d
-
-dashboard.statistic=Статистика
-dashboard.operations=Операции
-dashboard.system_status=Наблюдение на системния статус
-dashboard.statistic_info=Gogs базата данни има <b>%d</b> потребители, <b>%d</b> организации, <b>%d</b> публични ключове, <b>%d</b> хранилища, <b>%d</b> наблюдавания, <b>%d</b> харесвания, <b>%d</b> действия, <b>%d</b> достъпи, <b>%d</b> проблеми, <b>%d</b> коментари, <b>%d</b> социални регистрации, <b>%d</b> последователи, <b>%d</b> огледала, <b>%d</b> издания, <b>%d</b> източници за вписване, <b>%d</b> уеб-куки, <b>%d</b> етапи, <b>%d</b> етикети, <b>%d</b> задачи на куки, <b>%d</b> екипи, <b>%d</b> задачи при актуализация, <b>%d</b> прикачени файлове.
-dashboard.operation_name=Име на операцията
-dashboard.operation_switch=Превключи
-dashboard.operation_run=Изпълни
-dashboard.clean_unbind_oauth=Почисти несвързани OAuthes
-dashboard.clean_unbind_oauth_success=Всички несвързани OAuthes са изтрити успешно.
-dashboard.delete_inactivate_accounts=Изтрий всички неактивни профили
-dashboard.delete_inactivate_accounts_success=Всички неактивни профили са изтрити успешно.
-dashboard.delete_repo_archives=Изтрий всички архиви на хранилища
-dashboard.delete_repo_archives_success=Всички архиви на хранилищата са изтрити успешно.
-dashboard.git_gc_repos=Почисти изтрити данни в хранилищата
-dashboard.git_gc_repos_success=Всички хранилища са почистени от изтрити данни успешно.
-dashboard.resync_all_sshkeys=Презапис на ".ssh/authorized_keys" файл (внимание: не-Gogs ключове ще бъдат загубени)
-dashboard.resync_all_sshkeys_success=Всички публични ключове са презаписани успешно.
-dashboard.resync_all_update_hooks=Презапис на всички куки, закачени на актуализация на хранилищата (необходимо, когато се ползва собствен път за конфигурацията)
-dashboard.resync_all_update_hooks_success=Всички куки, закачени на актуализация на хранилищата, са презаписани успешно.
-
-dashboard.server_uptime=Операционно време
-dashboard.current_goroutine=Текущи Goroutines
-dashboard.current_memory_usage=Текущо използвана памет
-dashboard.total_memory_allocated=Общо заделена памет
-dashboard.memory_obtained=Получена памет
-dashboard.pointer_lookup_times=Брой обхождания на указатели
-dashboard.memory_allocate_times=Брой заделяния на памет
-dashboard.memory_free_times=Брой освобождавания на памет
-dashboard.current_heap_usage=Текущо използвана осн. памет
-dashboard.heap_memory_obtained=Получена осн. памет
-dashboard.heap_memory_idle=Празна осн. памет
-dashboard.heap_memory_in_use=Използвана осн. памет
-dashboard.heap_memory_released=Освободена осн. памет
-dashboard.heap_objects=Обекти в осн. памет
-dashboard.bootstrap_stack_usage=Използван стек за bootstrap
-dashboard.stack_memory_obtained=Заделена памет в стека
-dashboard.mspan_structures_usage=Използвани MSpan обекти
-dashboard.mspan_structures_obtained=Получени MSpan обекти
-dashboard.mcache_structures_usage=Използвани MCache обекти
-dashboard.mcache_structures_obtained=Получени MCache обекти
-dashboard.profiling_bucket_hash_table_obtained=Получени Profiling Bucket Hash Table
-dashboard.gc_metadata_obtained=Получени GC метаданни
-dashboard.other_system_allocation_obtained=Получена друга системна памет
-dashboard.next_gc_recycle=Следващо рециклиране на GC
-dashboard.last_gc_time=Време от последен GC
-dashboard.total_gc_time=Общо време за GC
-dashboard.total_gc_pause=Общо пауза за GC
-dashboard.last_gc_pause=Последна пауза за GC
-dashboard.gc_times=Брой GC
-
-users.user_manage_panel=Управление на потребителя
-users.new_account=Създай нов профил
-users.name=Име
-users.activated=Активиран
-users.admin=Администратор
-users.repos=Хранилища
-users.created=Създаване
-users.send_register_notify=Прати уведомление на потребителя при регистрация
-users.new_success=Новият профил '%s' е добавен успешно.
-users.edit=Редакция
-users.auth_source=Източник за удостоверяване
-users.local=Локално
-users.auth_login_name=Потребителско име за удостоверяване
-users.password_helper=Оставете празна ако не се променя.
-users.update_profile_success=Профилът е запазен успешно.
-users.edit_account=Редактирай профил
-users.is_activated=Този профил е активиран
-users.is_admin=Този профил има административни права
-users.allow_git_hook=Този профил има разрешение да създава Git куки
-users.update_profile=Обнови профила
-users.delete_account=Изтрий този профил
-users.still_own_repo=Този профил притежава поне едно хранилище. Първо трябва да изтриете хранилището или да го прехвърлите на друг потребител.
-users.still_has_org=Този профил е член на поне една организация. Първо трябва да напуснете или изтриете тези организации.
-users.deletion_success=Профилът е изтрит успешно!
-
-orgs.org_manage_panel=Управление на организацията
-orgs.name=Име
-orgs.teams=Екипи
-orgs.members=Членове
-
-repos.repo_manage_panel=Управление на хранилището
-repos.owner=Притежател
-repos.name=Име
-repos.private=Лично
-repos.watches=Наблюдавания
-repos.stars=Харесвания
-repos.issues=Проблеми
-
-auths.auth_manage_panel=Управление на удостоверявания
-auths.new=Добави нов източник за удостоверяване
-auths.name=Име
-auths.type=Тип
-auths.enabled=Активен
-auths.updated=Обновен
-auths.auth_type=Тип на удостоверяване
-auths.auth_name=Име на удостоверяване
-auths.domain=Домейн
-auths.host=Сървър
-auths.port=Порт
-auths.bind_dn=Име (DN) за свръзка
-auths.bind_password=Парола за свръзка
-auths.bind_password_helper=Внимание: Тази парола се запазва некриптирана. Моля използвайте потребител, който няма административен достъп.
-auths.user_base=База с потребители
-auths.user_dn=Име (DN) на потребител
-auths.attribute_name=Атрибут за име
-auths.attribute_surname=Атрибут за фамилия
-auths.attribute_mail=Атрибут за ел. поща
-auths.filter=Филтър за потребители
-auths.admin_filter=Филтър за администратори
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP удостоверяване
-auths.smtphost=SMTP сървър
-auths.smtpport=SMTP порт
-auths.allowed_domains=Разрешени домейни
-auths.allowed_domains_helper=Оставете празно за да не се ограничават домейните. За множество домейни използвайте запетая за разделител.
-auths.enable_tls=Включи TLS криптиране
-auths.skip_tls_verify=Пропусни проверка на TLS
-auths.pam_service_name=Име на PAM услуга
-auths.enable_auto_register=Включи автоматична регистрация
-auths.tips=Съвети
-auths.edit=Редактирай настройки за удостоверяване
-auths.activated=Това удостоверяване е активно
-auths.new_success=Новото удостоверяване '%s' е добавено успешно.
-auths.update_success=Настройките за удостоверяване са запазени успешно.
-auths.update=Обнови настройки за удостоверяване
-auths.delete=Изтриване на това удостоверяване
-auths.delete_auth_title=Изтрий удостоверяването
-auths.delete_auth_desc=Това удостоверяване ще бъде изтрито. Желаете ли да продължите?
-auths.deletion_success=Удостоверяването е изтрито успешно!
-
-config.server_config=Сървърни настройки
-config.app_name=Име на приложението
-config.app_ver=Версия на приложението
-config.app_url=URL адрес на приложението
-config.domain=Домейн
-config.offline_mode=Офлайн режим
-config.disable_router_log=Изключи журнал на маршрутизатора
-config.run_user=Потребителски контекст
-config.run_mode=Режим на изпълнение
-config.repo_root_path=Основен път към хранилища
-config.static_file_root_path=Път към статични файлове
-config.log_file_root_path=Път към журнал
-config.script_type=Тип на скрипта
-config.reverse_auth_user=Потребителско име при обратно удостоверяване
-config.db_config=Настройки на базата данни
-config.db_type=Тип
-config.db_host=Сървър
-config.db_name=Име
-config.db_user=Потребител
-config.db_ssl_mode=SSL режим
-config.db_ssl_mode_helper=(само за postgres)
-config.db_path=Път
-config.db_path_helper=(за "sqlite3" и "tidb")
-config.service_config=Настройка на услугата
-config.register_email_confirm=Изисквай потвърждение на адреси на ел. поща
-config.disable_register=Изключи нови регистрации
-config.show_registration_button=Покажи бутон за регистрация
-config.require_sign_in_view=Изисквай вписване за преглед
-config.enable_cache_avatar=Включи кеширане на аватари
-config.mail_notify=Уведомяване по ел. поща
-config.disable_key_size_check=Изключи проверка минимален размер на ключ
-config.enable_captcha=Включи Captcha
-config.active_code_lives=Кодове за активиране
-config.reset_password_code_lives=Кодове за изчистване на парола
-config.webhook_config=Конфигурация на уеб-куки
-config.queue_length=Дължина на опашка
-config.deliver_timeout=Време за отказ при изпращане
-config.skip_tls_verify=Пропусни проверка на TLS
-config.mailer_config=Конфигурация на мейлър
-config.mailer_enabled=Активен
-config.mailer_disable_helo=Изключи HELO
-config.mailer_name=Име
-config.mailer_host=Сървър
-config.mailer_user=Потребител
-config.oauth_config=OAuth конфигурация
-config.oauth_enabled=Активна
-config.cache_config=Конфигурация на кеша
-config.cache_adapter=Кеш адаптер
-config.cache_interval=Кеш интервал
-config.cache_conn=Кеш на връзката
-config.session_config=Конфигурация на сесии
-config.session_provider=Доставчик на сесии
-config.provider_config=Конфигурация на доставчик
-config.cookie_name=Име на бисквитката
-config.enable_set_cookie=Включи използване на бисквитки
-config.gc_interval_time=GC през интервал
-config.session_life_time=Период на валидност на сесиите
-config.https_only=HTTPS само
-config.cookie_life_time=Период на валидност на бисквитките
-config.picture_config=Конфигурация на изображения
-config.picture_service=Услуги за снимки
-config.disable_gravatar=Изключи Gravatar
-config.log_config=Конфигурация на журнал
-config.log_mode=Режим на журнал
-
-monitor.cron=Cron задачи
-monitor.name=Име
-monitor.schedule=График
-monitor.next=Следващ път
-monitor.previous=Предишен път
-monitor.execute_times=Брой изпълнения
-monitor.process=Изпълнявани процеси
-monitor.desc=Описание
-monitor.start=Начален час
-monitor.execute_time=Време за изпълнение
-
-notices.system_notice_list=Системни известия
-notices.type=Тип
-notices.type_1=Хранилище
-notices.desc=Описание
-notices.op=Oп.
-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="%s/src/%s">%[2]s</a> в <a href="%[1]s">%[3]s</a>
-create_issue=`отвори проблем <a href="%s/issues/%s">%s#%[2]s"</a>`
-create_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_2_commits=Сравнение между тези 2 ревизии
-
-[tool]
-ago=преди
-from_now=след
-now=сега
-1s=%s 1 секунда
-1m=%s 1 минута
-1h=%s 1 час
-1d=%s 1 ден
-1w=%s 1 седмица
-1mon=%s 1 месец
-1y=%s 1 година
-seconds=%s %d секунди
-minutes=%s %d минути
-hours=%s %d часа
-days=%s %d дни
-weeks=%s %d седмици
-months=%s %d месеца
-years=%s %d години
-raw_seconds=секунди
-raw_minutes=минути
-
-[dropzone]
-default_message=Пуснете файлове тук или щракнете за качване.
-invalid_input_type=Невъзможно качване на файловете от този тип.
-file_too_big=Размер на файла ({{filesize}} MB) надвишава максималния размер ({{maxFilesize}} MB).
-remove_file=Премахни файл
-
+app_desc=Безпроблемен собствен Git сървър
+
+home=Начало
+dashboard=Табло
+explore=Разгледай
+help=Помощ
+sign_in=Влизане
+sign_out=Излизане
+sign_up=Регистрирайте се
+register=Регистриране
+website=Уебсайт
+version=Версия
+page=Страница
+template=Шаблон
+language=Език
+create_new=Създаване...
+user_profile_and_more=Потребителски профил и пр.
+signed_in_as=Вписан като
+
+username=Потребител
+email=Ел. поща
+password=Парола
+re_type=Въведете повторно
+captcha=Captcha
+
+repository=Хранилище
+organization=Организация
+mirror=Огледало
+new_repo=Ново хранилище
+new_migrate=Нова миграция
+new_fork=Ново разклонено хранилище
+new_org=Нова организация
+manage_org=Управление на организации
+admin_panel=Административен панел
+account_settings=Настройки на профила
+settings=Настройки
+your_profile=Вашият профил
+your_settings=Вашите настройки
+
+news_feed=Поток новини
+pull_requests=Заявки за сливане
+issues=Проблеми
+
+cancel=Отказ
+
+[search]
+search=Търсене...
+repository=Хранилище
+user=Потребител
+issue=Проблем
+code=Код
+
+[install]
+install=Инсталация
+title=Стъпки за инсталиране при първоначално стартиране
+docker_helper=Ако Gogs е стартиран в Docker контейнер, моля прочетете <a target="_blank" href="%s">нашите указания</a> внимателно, преди да правите промени по настройките на тази страница!
+requite_db_desc=Gogs изисква MySQL, PostgreSQL, SQLite3 или TiDB.
+db_title=Настройки на базата данни
+db_type=Тип на база данни
+host=Сървър
+user=Потребител
+password=Парола
+db_name=Име на база данни
+db_helper=Моля, използвайте INNODB engine с utf8_general_ci кодиране на знаци за MySQL.
+ssl_mode=Режим SSL
+path=Път
+sqlite_helper=Файл на SQLite3 или TiDB база данни.
+err_empty_db_path=Пътят до SQLite3 или TiDB база данни не може да е празен.
+err_invalid_tidb_name=TiDB не позволява "." и "-" в името на базата данни.
+no_admin_and_disable_registration=Невъзможно изключване на регистрациите без предварително да е създаден поне един административен профил.
+err_empty_admin_password=Паролата на администратор не може да е празна.
+
+general_title=Общи настройки на приложението
+app_name=Име на приложението
+app_name_helper=Постави името на твоята организация тук - голямо е крещящо!
+repo_path=Основен път към хранилищата
+repo_path_helper=Всички отдалечени хранилища на Git ще бъдат съхранени в тази директория.
+run_user=Потребителски контекст
+run_user_helper=Този потребител трябва да има достъп до основния път към хранилищата и права да стартира Gogs.
+domain=Домейн
+domain_helper=Тази настройка влияе на URL адреса за клониране чрез SSH.
+ssh_port=SSH порт
+ssh_port_helper=Номер на порт на SSH сървъра. Оставете празно за да изключите достъп през SSH.
+http_port=HTTP порт
+http_port_helper=Порт, на който приложението ще слуша.
+app_url=URL адрес на приложението
+app_url_helper=Този настройка променя HTTP/HTTPS адреса за клониране, а понякога и адреса на ел. поща.
+
+optional_title=Опционални настройки
+email_title=Настройки на пощенска услуга
+smtp_host=SMTP сървър
+smtp_from=Подател
+smtp_from_helper=Адрес на подател на поща по RFC 5322. Може да бъде обикновен адрес на ел. поща или във формат "Име" <email@example.com>.
+mailer_user=Ел. поща за изпращане
+mailer_password=Парола за изпращане
+register_confirm=Включи потвърждението на регистрациите
+mail_notify=Включи уведомления по пощата
+server_service_title=Настройки на сървъра и други услуги
+offline_mode=Включи офлайн режима
+offline_mode_popup=Изключи CDN дори в продукционен режим, всички ресурсни файлове ще бъдат доставяни локално.
+disable_gravatar=Изключи връзка с Gravatar
+disable_gravatar_popup=Изключва Gravatar и външни източници, така че всички аватари трябва да са или качени от потребителите или да се ползват аватари по подразбиране.
+disable_registration=Изключи саморегистрацията
+disable_registration_popup=Изключи потребителската саморегистрация, само администратор може да създава профили.
+enable_captcha=Включи Captcha
+enable_captcha_popup=Изисква валидиране с captcha при саморегистрация на потребители.
+require_sign_in_view=Включи задължително вписване за преглед на страници
+require_sign_in_view_popup=Само вписани потребители могат да виждат страниците, анонимните посетители виждат само страниците за регистрация и вход.
+admin_setting_desc=Няма нужда от създаване на администраторски профил в момента, защото потребителят с първо ID в базата автоматично получава администраторски достъп.
+admin_title=Настройки на профил на администратора
+admin_name=Потребителско име
+admin_password=Парола
+confirm_password=Потвърждение на паролата
+admin_email=Ел. поща
+install_gogs=Инсталирай Gogs
+test_git_failed=Неуспешно тестването на "git" команда: %v
+sqlite3_not_available=Вашата версия не поддържа SQLite3, моля, изтеглете официалната двоична версия от %s, а не gobuild версията.
+invalid_db_setting=Настройките на базата данни са некоректни: %v
+invalid_repo_path=Основният път към хранилищата е невалиден: %v
+run_user_not_match=Потребителският контекст на приложението не е на текущия потребител: %s -> %s
+save_config_failed=Неуспешно запазване на конфигурация: %v
+invalid_admin_setting=Настройките на профил на администратора са невалидни: %v
+install_success=Добре дошли! Радваме се, че избрахте Gogs, и Ви пожелаваме приятна работа и сърдечни поздрави!
+
+[home]
+uname_holder=Потребителско име или ел. поща
+password_holder=Парола
+switch_dashboard_context=Превключи контекст на таблото
+my_repos=Моите хранилища
+collaborative_repos=Съвместни хранилища
+my_orgs=Моите организации
+my_mirrors=Моите огледала
+view_home=Преглед на %s
+
+issues.in_your_repos=Във Вашите хранилища
+
+[explore]
+repos=Хранилища
+
+[auth]
+create_new_account=Създай нов профил
+register_hepler_msg=Вече имате профил? Впишете се сега!
+social_register_hepler_msg=Вече имате профил? Свържете се сега!
+disable_register_prompt=За съжаление създаването на нови регистрации е изключено. Обърнете се към администратора на сайта.
+disable_register_mail=За съжаление потвърждението на регистрации е изключено.
+remember_me=Запомни ме
+forgot_password=Забравена парола
+forget_password=Забравена парола?
+sign_up_now=Нуждаете се от профил? Регистрирайте се сега.
+confirmation_mail_sent_prompt=Ново писмо за потвърждение е изпратено до <b>%s</b>. Моля проверете пощенската си кутия в рамките на следващите %d часа, за да завършите процеса на регистрация.
+active_your_account=Активиране на профил
+resent_limit_prompt=За съжаление Вие съвсем наскоро изпратихте писмо за активация. Моля изчакайте 3 минути, след което опитайте отново.
+has_unconfirmed_mail=Здравейте %s, имате непотвърден адрес на ел. поща (<b>%s</b>). Ако не сте получили писмо за потвърждение или имате нужда да се изпрати ново писмо, моля щракнете бутона по-долу.
+resend_mail=Щракнете тук, за да се изпрати ново писмо за потвърждение
+email_not_associate=Този адрес на ел. поща не е свързан с никой профил.
+send_reset_mail=Щракнете тук, за да получите (отново) писмо за нулиране на паролата
+reset_password=Нулиране на паролата
+invalid_code=За съжаление Вашия код за потвърждение е изтекъл или е невалиден.
+reset_password_helper=Щракнете тук, за да нулирате паролата си
+password_too_short=Размерът на паролата не може да бъде по-малък от 6 знака.
+
+[mail]
+activate_account=Моля активирайте Вашия профил
+activate_email=Провери адрес на ел. поща
+reset_password=Нулиране на паролата
+register_success=Успешна регистрация и добре дошли
+register_notify=Welcome on board
+
+[modal]
+yes=Да
+no=Не
+modify=Промени
+
+[form]
+UserName=Потребителско име
+RepoName=Име на хранилището
+Email=Адрес на ел. поща
+Password=Парола
+Retype=Повторно паролата
+SSHTitle=Име на SSH ключ
+HttpsUrl=HTTPS URL адрес
+PayloadUrl=URL адрес на изпращане
+TeamName=Име на екипа
+AuthName=Име на удостоверението
+AdminEmail=Ел. поща на администратора
+
+require_error=` не може да бъде празен.`
+alpha_dash_error=` трябва да e валидна буква, число или тире(-_).`
+alpha_dash_dot_error=` трябва да e валидна буква, число, тире(-_) или точка.`
+size_error=` трябва да е с размер %s.`
+min_size_error=` трябва да съдържа поне %s знака.`
+max_size_error=` трябва да съдържа най-много %s знака.`
+email_error=` не е валиден адрес на ел. поща.`
+url_error=` не е валиден URL адрес.`
+include_error=` трябва да съдържа текст '%s'.`
+unknown_error=Неизвестна грешка:
+captcha_incorrect=Captcha не е потвърдена.
+password_not_match=Паролата и потвърждението ѝ не съвпадат.
+
+username_been_taken=Потребителското име вече се ползва.
+repo_name_been_taken=Името на хранилището вече се ползва.
+org_name_been_taken=Името на организацията вече се ползва.
+team_name_been_taken=Името на екипа вече се ползва.
+email_been_used=Този адрес на ел. поща вече се ползва.
+illegal_team_name=Името на екипа съдържа недопустими знаци.
+username_password_incorrect=Потребителското име или паролата не са верни.
+enterred_invalid_repo_name=Моля уверете се, че въведеното име на хранилище е вярно.
+enterred_invalid_owner_name=Моля уверете се, че въведеното име на притежател е вярно.
+enterred_invalid_password=Моля уверете се, че въведената парола е вярна.
+user_not_exist=Даденият потребител не съществува.
+last_org_owner=Премахване на последния потребител от екип притежатели не е позволено, тъй като винаги трябва да има поне един притежател в дадена организация.
+
+invalid_ssh_key=За съжаление, ние не сме в състояние да проверим Вашия SSH ключ: %s
+unable_verify_ssh_key=Gogs не може да провери Вашия SSH ключ, но предполагаме, че е валиден. Моля, проверете го.
+auth_failed=Неуспешно удостоверяване: %v
+
+still_own_repo=Вашият профил притежава поне едно хранилище. Първо трябва да ги изтриете или да ги прехвърлите на друг потребител.
+still_has_org=Вашият профил все още е член на поне една организация. Първо трябва да напуснете или изтриете Вашите членства.
+org_still_own_repo=Тази организация все още притежава хранилище. Първо трябва да го изтриете или да го прехвърлите на друга организация.
+
+still_own_user=Това удостоверяване се използва от поне един потребител. Моля премахнете потребителите към него и опитайте отново.
+
+target_branch_not_exist=Целевият клон не съществува.
+
+[user]
+change_avatar=Сменете Вашия аватар на gravatar.com
+change_custom_avatar=Сменете Вашия аватар в настройките
+join_on=Регистриран на
+repositories=Хранилища
+activity=Публична дейност
+followers=Последователи
+starred=Харесано
+following=Следване
+
+form.name_reserved=Потребителското име '%s' е запазено.
+form.name_pattern_not_allowed=Потребителското име '%s' не е допустимо.
+
+[settings]
+profile=Профил
+password=Парола
+ssh_keys=SSH ключове
+social=Социални профили
+applications=Приложения
+orgs=Организации
+delete=Изтрий профил
+uid=UID
+
+public_profile=Публичен профил
+profile_desc=Вашият адрес на ел. поща е публичен и ще бъде използван за всички свързани с профила Ви уведомления и всички уеб базирани операции, направени чрез сайта.
+full_name=Пълно име
+website=Уебсайт
+location=Локация
+update_profile=Обнови профила
+update_profile_success=Вашият профил е запазен успешно.
+change_username=Потребителското име е променено
+change_username_prompt=Този промяна ще засегне всички връзки сочещи към профила Ви.
+continue=Продължи
+cancel=Отказ
+
+enable_custom_avatar=Разреши потребителски аватар
+enable_custom_avatar_helper=Включете тази опция, за да забраните зареждане от Gravatar
+choose_new_avatar=Избери нов аватар
+update_avatar=Обнови настройките на аватара
+uploaded_avatar_not_a_image=Каченият файл не е изображение.
+no_custom_avatar_available=Невъзможно използване на външен аватар, защото не е активирано.
+update_avatar_success=Настройките на аватара са запазени успешно.
+
+change_password=Промени парола
+old_password=Текуща парола
+new_password=Нова парола
+retype_new_password=Повторно новата парола
+password_incorrect=Въведената парола не е вярна.
+change_password_success=Вашата парола е променена успешно. Вече може да влизате, използвайки тази нова парола.
+
+emails=Адреси на ел. поща
+manage_emails=Управление на адреси на ел. поща
+email_desc=Вашият основен адрес на ел. поща ще се използва за изпращане на уведомления и други операции.
+primary=Основен
+primary_email=Задай като основен
+delete_email=Изтрий
+email_deletion=Изтрий ел. поща
+email_deletion_desc=При изтриване на тази ел. поща ще се премахне свързаната информация от Вашия профил. Желаете ли да продължите?
+email_deletion_success=Ел. пощата беше изтрита успешно!
+add_new_email=Добавяне на нов адрес на ел. поща
+add_email=Добави ел. поща
+add_email_confirmation_sent=Ново писмо за потвърждение е изпратено до '%s'. Моля проверете пощенската си кутия в рамките на следващите %d часа, за да завършите процеса на регистрация.
+add_email_success=Ваш нов адрес на ел. поща е добавен успешно.
+
+manage_ssh_keys=Управление на SSH ключове
+add_key=Добави ключ
+ssh_desc=Това е списък на SSH ключове, свързани с Вашия акаунт. Тъй като тези ключове позволяват на всеки, който ги използва да получи достъп до хранилищата Ви, много е важно да се уверите, че ги разпознавате.
+ssh_helper=<strong>Не знам как?</strong> Проверете на GitHub упътването как да <a href="%s">създадете свои собствени SSH ключове</a> или решаване на <a href="%s">Общи проблеми</a>, които може да възникнат при използване на SSH.
+add_new_key=Добавяне на SSH ключ
+ssh_key_been_used=Съдържанието на публичния ключ е използвано.
+ssh_key_name_used=Вече съществува публичен ключ с това име.
+key_name=Име на ключа
+key_content=Съдържание
+add_key_success=Новият SSH ключ '%s' е добавен успешно!
+delete_key=Изтрий
+ssh_key_deletion=Изтрий SSH ключ
+ssh_key_deletion_desc=При изтриване на този SSH ключ ще се премахнат свързаните права за достъп за Вашия профил. Желаете ли да продължите?
+ssh_key_deletion_success=SSH ключа беше изтрит успешно!
+add_on=Добавен на
+last_used=Последно използван на
+no_activity=Няма скорошна активност
+key_state_desc=Този ключ е използван през последните 7 дни
+token_state_desc=Този токен е използван през последните 7 дни
+
+manage_social=Управление на свързани профили в социалните мрежи
+social_desc=Това е списък на свързани профили в социалните мрежи. Премахнете всички, които не разпознавате.
+unbind=Освобождаване
+unbind_success=Социалния профил е освободен.
+
+manage_access_token=Управление на индивидуални токени за достъп
+generate_new_token=Генериране на нов токен
+tokens_desc=Генерирани токени, които могат да се използват за достъп до API-то на Gogs.
+new_token_desc=Всеки токен ще има пълен достъп до Вашия профил.
+token_name=Име на токена
+generate_token=Генериране на токен
+generate_token_succees=Успешно е генериран токен за достъп. Уверете се, че сте го копирали, тъй като няма да можете да го видите отново!
+delete_token=Изтрий
+access_token_deletion=Изтрий индивидуален токен за достъп
+access_token_deletion_desc=При изтриване на този индивидуален токен за достъп ще се премахнат всички свързани права на приложението. Желаете ли да продължите?
+delete_token_success=Индивидуалния токен за достъп е изтрит успешно! Не забравяйте да преконфигурирате приложението също.
+
+delete_account=Изтрий собствен профил
+delete_prompt=Тази операция ще изтрие Вашия профил завинаги и тя <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
+confirm_delete_account=Потвърди изтриването
+delete_account_title=Изтрий профил
+delete_account_desc=Този профил ще бъде окончателно изтрит. Желаете ли да продължите?
+
+[repo]
+owner=Притежател
+repo_name=Име на хранилището
+repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи.
+visibility=Видимост
+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" href="%s">Помощ</a>!
+fork_repo=Разклони хранилището
+fork_from=Разклонение от
+fork_visiblity_helper=Не може да променяте видимостта на разклонено хранилище.
+repo_desc=Описание
+repo_lang=Език
+repo_lang_helper=Изберете .gitignore файлове
+license=Лиценз
+license_helper=Изберете лицензионен файл
+readme=Readme
+readme_helper=Изберете шаблон на readme
+auto_init=Инициализиране на това хранилище с избраните файлове и шаблон
+create_repo=Създай хранилище
+default_branch=Клон по подразбиране
+mirror_interval=Интервал на отразяване (часове)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Името на хранилището '%s' е запазено.
+form.name_pattern_not_allowed=Име на хранилището от вида '%s' не е позволено.
+
+need_auth=Изисква удостоверяване
+migrate_type=Тип мигриране
+migrate_type_helper=Това хранилище ще бъде <span class="text blue">огледало</span>
+migrate_repo=Мигрирай хранилище
+migrate.clone_address=Адрес за клонирай
+migrate.clone_address_desc=Това може да е HTTP/HTTPS/GIT адрес или локален път на сървъра.
+migrate.permission_denied=Недостатъчни права за импорт на локални хранилища.
+migrate.invalid_local_path=Невалиден път - не съществува или не е директория.
+migrate.failed=Migration failed: %v
+
+forked_from=разклонено от
+fork_from_self=Не можете да разклоните хранилище което си е Ваше!
+copy_link=Копирай
+copy_link_success=Копирано!
+copy_link_error=Натиснете ⌘-C или Ctrl-C за да копирате
+copied=Успешно копиране
+unwatch=Не следи
+watch=Следи
+unstar=Не харесвам
+star=Харесвам
+fork=Разклонение
+
+no_desc=Няма описание
+quick_guide=Бърз справочник
+clone_this_repo=Клонирай хранилището
+create_new_repo_command=Създай ново хранилище чрез командния ред
+push_exist_repo=Предай съществуващо хранилище през командния ред
+repo_is_empty=Това хранилище е празно. Моля проверете по-късно пак!
+
+branch=Клон
+tree=Дърво
+filter_branch_and_tag=Filter branch or tag
+branches=Клонове
+tags=Маркери
+issues=Проблеми
+pulls=Заявки за сливане
+labels=Етикети
+milestones=Етапи
+commits=Ревизии
+releases=Издания
+file_raw=Суров
+file_history=История
+file_view_raw=Виж суров
+file_permalink=Постоянна връзка
+
+commits.commits=Ревизии
+commits.search=Търсене в ревизии
+commits.find=Намери
+commits.author=Автор
+commits.message=Съобщение
+commits.date=Дата
+commits.older=По-стари
+commits.newer=По-нови
+
+issues.new=Нов проблем
+issues.new.labels=Етикети
+issues.new.no_label=Няма етикет
+issues.new.clear_labels=Изчисти етикети
+issues.new.milestone=Етап
+issues.new.no_milestone=Няма етап
+issues.new.clear_milestone=Изчисти етап
+issues.new.open_milestone=Отворени етапи
+issues.new.closed_milestone=Затворени етапи
+issues.new.assignee=Изпълнител
+issues.new.clear_assignee=Изчисти изпълнител
+issues.new.no_assignee=Няма изпълнител
+issues.create=Докладвай проблем
+issues.new_label=Нов етикет
+issues.new_label_placeholder=Име на етикета...
+issues.create_label=Създай етикет
+issues.open_tab=%d отворени
+issues.close_tab=%d затворени
+issues.filter_label=Етикет
+issues.filter_label_no_select=Не е избран етикет
+issues.filter_milestone=Етап
+issues.filter_milestone_no_select=Липсва избран етап
+issues.filter_assignee=Изпълнител
+issues.filter_assginee_no_select=Няма избран изпълнител
+issues.filter_type=Тип
+issues.filter_type.all_issues=Всички проблеми
+issues.filter_type.assigned_to_you=Възложени на Вас
+issues.filter_type.created_by_you=Създадени от Вас
+issues.filter_type.mentioning_you=Споменават лично
+issues.filter_sort=Подредба
+issues.filter_sort.latest=Най-нови
+issues.filter_sort.oldest=Най-стари
+issues.filter_sort.recentupdate=Последно променени
+issues.filter_sort.leastupdate=Отдавна променени
+issues.filter_sort.mostcomment=Най-много коментирани
+issues.filter_sort.leastcomment=Най-малко коментирани
+issues.opened_by=отворен %[1]s от <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=отворен %[1]s от %[2]s
+issues.previous=Предишна
+issues.next=Следваща
+issues.open_title=Отворени
+issues.closed_title=Затворени
+issues.num_comments=%d коментара
+issues.commented_at=`коментира <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Все още няма съдържание.
+issues.close_issue=Затвори
+issues.close_comment_issue=Kоментирай и затвори
+issues.reopen_issue=Отвори повторно
+issues.reopen_comment_issue=Kоментирай и oтвори отново
+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.poster=Участник
+issues.admin=Администратор
+issues.owner=Притежател
+issues.sign_up_for_free=Регистрирай се безплатно
+issues.sign_in_require_desc=за да се включите в този разговор. Вече имате профил? <a href="%s">Влезте, за да коментирате</a>
+issues.edit=Редакция
+issues.cancel=Отказ
+issues.save=Запис
+issues.label_title=Име на етикета
+issues.label_color=Цвят на етикет
+issues.label_count=%d етикети
+issues.label_open_issues=%d отворени проблема
+issues.label_edit=Редакция
+issues.label_delete=Изтрий
+issues.label_modify=Промяна на етикет
+issues.label_deletion=Изтрий етикет
+issues.label_deletion_desc=При изтриване на този етикет ще се премахне информацията за него във всички свързани проблеми. Желаете ли да продължите?
+issues.label_deletion_success=Етикетът е изтрит успешно!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Сравни промените
+pulls.compare_changes_desc=Сравнява двата клона и създава заявка за сливане за разликите помежду им.
+pulls.compare_base=родителска версия
+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.create=Създай заявка за сливане
+pulls.title_desc=заяви обединяване на %[1]d ревизии от <code>%[2]s</code> във <code>%[3]s</code>
+pulls.merged_title_desc=обедини %[1]d ревизии от <code>%[2]s</code> във <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Разговор
+pulls.tab_commits=Ревизии
+pulls.tab_files=Променени файлове
+pulls.reopen_to_merge=Моля повторно отворете тази заявка за сливане за да се извърши обединяване.
+pulls.merged=Обединени
+pulls.has_merged=Тази заявка за сливане е обединена успешно!
+pulls.data_broken=Данните от тази заявка за сливане са невалидни поради изтрита информация за някое разклонение.
+pulls.is_checking=Проверката за конфликт все още е в ход. Моля обновете страницата след малко.
+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) от същото хранилище със същата информация за обединяване, която чака да бъде извършена`
+
+milestones.new=Нов етап
+milestones.open_tab=%d отворени
+milestones.close_tab=%d затворени
+milestones.closed=Затворен %s
+milestones.no_due_date=Няма краен срок
+milestones.open=Отвори
+milestones.close=Затвори
+milestones.new_subheader=Създайте етапи за да организирате проблемите.
+milestones.create=Създай етап
+milestones.title=Заглавие
+milestones.desc=Описание
+milestones.due_date=Краен срок (опционален)
+milestones.clear=Изчисти
+milestones.invalid_due_date_format=Невалиден формат на крайния срок, трябва да е 'гггг-мм-дд'.
+milestones.create_success=Етап '%s' е създаден успешно!
+milestones.edit=Редактирай етап
+milestones.edit_subheader=Въведете точни описания на етапите, за да не се объркват участниците.
+milestones.cancel=Отказ
+milestones.modify=Промяна на етап
+milestones.edit_success=Промените в етап '%s' са запазени успешно!
+milestones.deletion=Изтрий етап
+milestones.deletion_desc=При изтриване на етап ще се премахне информацията за него от всички свързани проблеми. Желаете ли да продължите?
+milestones.deletion_success=Етапът е изтрит успешно!
+
+settings=Настройки
+settings.options=Опции
+settings.collaboration=Сътрудничество
+settings.hooks=Уеб-куки
+settings.githooks=Git куки
+settings.basic_settings=Основни настройки
+settings.danger_zone=Опасната зона
+settings.site=Официален сайт
+settings.update_settings=Обнови настройките
+settings.change_reponame_prompt=Тази промяна ще засегне връзките, които се отнасят до това хранилището.
+settings.transfer=Прехвърли притежание
+settings.transfer_desc=Прехвърля това хранилище на друг потребител или към организация, в която имате права на администратор.
+settings.new_owner_has_same_repo=Новият притежател вече има хранилище със същото име. Изберете друго име.
+settings.delete=Изтриване на това хранилище
+settings.delete_desc=След като изтриете хранилището, няма връщане назад. Моля, бъдете сигурни.
+settings.transfer_notices_1=- Вие ще загубите достъп, ако новият притежател е индивидуален потребител.
+settings.transfer_notices_2=- Вие ще запазите достъпа си, ако новият притежател е организация и ако вие сте един от притежателите ѝ.
+settings.transfer_form_title=Моля въведете следната информация за да потвърдите операцията:
+settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
+settings.delete_notices_2=- Тази операция ще изтрие всичко от това хранилище, включително Git данни, проблеми, коментари и достъпа на сътрудници.
+settings.delete_notices_fork_1=- Ако това хранилище е публично, всички негови разклонения ще останат независими след изтриването му.
+settings.delete_notices_fork_2=- Ако това хранилище е частно, всички негови разклонения ще бъдат премахнати по време на изтриването.
+settings.delete_notices_fork_3=- Ако желаете да запазите всички разклонения след изтриването му, първо направете хранилището публично.
+settings.update_settings_success=Настройките на хранилището са запазени успешно.
+settings.transfer_owner=Нов притежател
+settings.make_transfer=Прехвърли
+settings.transfer_succeed=Притежанието на хранилището е прехвърлено успешно.
+settings.confirm_delete=Потвърди изтриването
+settings.add_collaborator=Добави нов сътрудник
+settings.add_collaborator_success=Добавен е нов сътрудник.
+settings.remove_collaborator_success=Сътрудникът е премахнат.
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=Потребителят е член на организацията и не може да бъде добавен като сътрудник.
+settings.add_webhook=Добави уеб-кука
+settings.hooks_desc=Уеб-куките много приличат на обикновен HTTP POST тригер. Когато нещо се случи в Gogs, ние ще изпратим уведомление до сървъра, който посочите. Научете повече в <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
+settings.webhook_deletion=Изтрий уеб-кука
+settings.webhook_deletion_desc=При изтриване на тази уеб-кука ще се премахне информацията за нея и цялата хронология на нейното изпращане. Желаете ли да продължите?
+settings.webhook_deletion_success=Уеб-куката е изтрита успешно!
+settings.webhook.request=Заявка
+settings.webhook.response=Отговор
+settings.webhook.headers=Заглавки
+settings.webhook.payload=Съдържание
+settings.webhook.body=Тяло
+settings.githooks_desc=Git куките се изпълняват от Git. Вие може да промените файловете с поддържаните куки в списъка по-долу, за да изпълните външни операции.
+settings.githook_edit_desc=Ако куката е неактивна, ще бъде представено примерно съдържание. Ако оставите съдържанието празно, то тази кука ще бъде изключена.
+settings.githook_name=Име на куката
+settings.githook_content=Съдържание на куката
+settings.update_githook=Обнови куката
+settings.add_webhook_desc=Gogs ще изпрати <code>POST</code> заявка към указания URL адрес заедно с информация за събитието, което е настъпило. Също можете да укажете в какъв формат желаете да получите данните при задействане на куката (JSON, x-www-form-urlencoded, XML) и др. Допълнително описание можете да намерите в нашето <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
+settings.payload_url=URL адрес на изпращане
+settings.content_type=Тип на съдържанието
+settings.secret=Тайна
+settings.slack_username=Потребителско име
+settings.slack_icon_url=URL адрес на икона
+settings.slack_color=Цвят
+settings.event_desc=При какви събития да се задейства тази уеб-кука?
+settings.event_push_only=Само при събитие от тип <code>предаване</code>.
+settings.event_send_everything=При <strong>всички</strong> събития.
+settings.event_choose=Нека избера от какво имам нужда.
+settings.event_create=Създаване
+settings.event_create_desc=Създаване на клон или маркер
+settings.event_push=Предаване
+settings.event_push_desc=Git предаване към хранилището
+settings.active=Активна
+settings.active_helper=Подробности относно събитието, което е задействало куката, също ще бъдат изпратени.
+settings.add_hook_success=Новата уеб-кука е добавена успешно.
+settings.update_webhook=Обнови уеб-куката
+settings.update_hook_success=Уеб-куката е запазена успешно.
+settings.delete_webhook=Изтрий уеб-куката
+settings.recent_deliveries=Последни изпращания
+settings.hook_type=Тип на куката
+settings.add_slack_hook_desc=Добавяне на интеграция със <a href="%s">Slack</a> във Вашето хранилище.
+settings.slack_token=Токен
+settings.slack_domain=Домейн
+settings.slack_channel=Канал
+settings.deploy_keys=Ключове за внедряване
+settings.add_deploy_key=Добави ключ за внедряване
+settings.no_deploy_keys=Все още няма настроен никакъв ключ за внедряване.
+settings.title=Заглавие
+settings.deploy_key_content=Съдържание
+settings.key_been_used=Съдържанието на ключа за внедряване е използвано.
+settings.key_name_used=Ключ за внедряване с такова име вече съществува.
+settings.add_key_success=Новият ключ за внедряване '%s' е добавен успешно!
+settings.deploy_key_deletion=Изтрий ключ за внедряване
+settings.deploy_key_deletion_desc=При изтриването на този ключ за внедряване ще се премахнат свързаните права за достъп до това хранилище. Желаете ли да продължите?
+settings.deploy_key_deletion_success=Ключът за внедряване е изтрит успешно!
+
+diff.browse_source=Преглед на кода
+diff.parent=родител
+diff.commit=ревизия
+diff.data_not_available=Няма данни за разлики.
+diff.show_diff_stats=Покажи статистика за разликите
+diff.stats_desc=променени са <strong>%d файла</strong>, в които са <strong>добавени %d</strong> реда и са <strong>изтрити %d</strong> реда
+diff.bin=BIN
+diff.view_file=Преглед на файла
+
+release.releases=Издания
+release.new_release=Ново издание
+release.draft=Чернови
+release.prerelease=Предварителни
+release.stable=Стабилни
+release.edit=редактиране
+release.ahead=<strong>%d</strong> ревизии на %s след това издание
+release.source_code=Изходен код
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Име на маркера
+release.target=Цел
+release.tag_helper=Изберете съществуващ маркер или създайте нов маркер по време на публикуване.
+release.title=Title
+release.content=Content
+release.write=Писане
+release.preview=Преглед
+release.loading=Зареждане...
+release.prerelease_desc=Това е предварително издание
+release.prerelease_helper=Ние ще отбележим, че това издание не е завършено за употреба.
+release.cancel=Cancel
+release.publish=Публикувай издание
+release.save_draft=Запис на чернова
+release.edit_release=Редактирай издание
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Издание с това име на маркер вече съществува.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Име на организацията
+org_full_name_holder=Пълно име на организацията
+org_name_helper=Добрите имена на организация са кратки и запомнящи се.
+create_org=Създай организация
+repo_updated=Обновено
+people=Хора
+invite_someone=Поканете някого
+teams=Екипи
+lower_members=членове
+lower_repositories=хранилища
+create_new_team=Създай нов екип
+org_desc=Описание
+team_name=Име на екипа
+team_desc=Описание
+team_name_helper=Ще използвате това име при споменаване на този екип в разговори.
+team_desc_helper=Каква е целта на този екип?
+team_permission_desc=Какво ниво на достъп трябва да има този екип?
+
+form.name_reserved=Името на организацията '%s' е запазено.
+form.name_pattern_not_allowed=Име на организацията от вида '%s' не е разрешено.
+
+settings=Настройки
+settings.options=Опции
+settings.full_name=Пълно име
+settings.website=Уебсайт
+settings.location=Локация
+settings.update_settings=Обнови настройките
+settings.update_setting_success=Настройките на организацията са запазени успешно.
+settings.change_orgname_prompt=Този промяна ще засегне всички връзки сочещи към организацията.
+settings.update_avatar_success=Настройките на аватара на организацията са запазени успешно.
+settings.delete=Изтрий организацията
+settings.delete_account=Изтриване на тази организация
+settings.delete_prompt=Организацията ще бъде изтрита и операцията <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
+settings.confirm_delete_account=Потвърди изтриването
+settings.delete_org_title=Изтрий организацията
+settings.delete_org_desc=Тази организация ще бъде окончателно изтрита. Желаете ли да продължите?
+settings.hooks_desc=Добави уеб-куки, които ще бъдат използвани от <strong>всички хранилища</strong> в тази организация.
+
+members.public=Публични
+members.public_helper=направи частен
+members.private=Частни
+members.private_helper=направи публичен
+members.owner=Притежател
+members.member=Участник
+members.conceal=Прикриване
+members.remove=Премахни
+members.leave=Напусни
+members.invite_desc=Започнете да пишете потребителското име, за да поканите член в %s:
+members.invite_now=Покани
+
+teams.join=Присъедини се
+teams.leave=Напусни
+teams.read_access=Достъп за четене
+teams.read_access_helper=Този екип ще може да вижда и клонира своите хранилища.
+teams.write_access=Достъп за запис
+teams.write_access_helper=Този екип ще може да чете своите хранилища и ще може да предава към тях.
+teams.admin_access=Администраторски достъп
+teams.admin_access_helper=Този екип ще може да добавя код, данни и нови сътрудници в своите хранилища.
+teams.no_desc=Този екип няма описание
+teams.settings=Настройки
+teams.owners_permission_desc=Притежателите имат пълен достъп до <strong>всички хранилища</strong> и имат <strong>права на администратори</strong> на организацията.
+teams.members=Членовете на екипа
+teams.update_settings=Обнови настройките
+teams.delete_team=Изтриване на този екип
+teams.add_team_member=Добави член на екипа
+teams.delete_team_title=Изтрий екипа
+teams.delete_team_desc=Тъй като този екип ще бъдат изтрит, членовете му може да загубят достъп до някои хранилища. Желаете ли да продължите?
+teams.delete_team_success=Този екип е бил изтрит успешно.
+teams.read_permission_desc=Този екип предоставя достъп за <strong>четене</strong>: членове могат да разглеждат и клонират хранилищата на екипа.
+teams.write_permission_desc=Този екип предоставя достъп за <strong>писане</strong>: членовете могат да четат от и предават към хранилищата на екипа.
+teams.admin_permission_desc=Този екип предоставя <strong>администраторски</strong> достъп: членовете могат да четат от, да предават към и да добавя нови сътрудници към хранилищата на екипа.
+teams.repositories=Хранилища на екипа
+teams.add_team_repository=Добави хранилище на екипа
+teams.remove_repo=Премахни
+teams.add_nonexistent_repo=Хранилището, което се опитвате да добавите не съществува. Моля първо го създайте!
+
+[admin]
+dashboard=Табло
+users=Потребители
+organizations=Организации
+repositories=Хранилища
+authentication=Удостоверявания
+config=Конфигурация
+notices=Системни известия
+monitor=Наблюдение
+first_page=Първа
+last_page=Последна
+total=Общо: %d
+
+dashboard.statistic=Статистика
+dashboard.operations=Операции
+dashboard.system_status=Наблюдение на системния статус
+dashboard.statistic_info=Gogs базата данни има <b>%d</b> потребители, <b>%d</b> организации, <b>%d</b> публични ключове, <b>%d</b> хранилища, <b>%d</b> наблюдавания, <b>%d</b> харесвания, <b>%d</b> действия, <b>%d</b> достъпи, <b>%d</b> проблеми, <b>%d</b> коментари, <b>%d</b> социални регистрации, <b>%d</b> последователи, <b>%d</b> огледала, <b>%d</b> издания, <b>%d</b> източници за вписване, <b>%d</b> уеб-куки, <b>%d</b> етапи, <b>%d</b> етикети, <b>%d</b> задачи на куки, <b>%d</b> екипи, <b>%d</b> задачи при актуализация, <b>%d</b> прикачени файлове.
+dashboard.operation_name=Име на операцията
+dashboard.operation_switch=Превключи
+dashboard.operation_run=Изпълни
+dashboard.clean_unbind_oauth=Почисти несвързани OAuthes
+dashboard.clean_unbind_oauth_success=Всички несвързани OAuthes са изтрити успешно.
+dashboard.delete_inactivate_accounts=Изтрий всички неактивни профили
+dashboard.delete_inactivate_accounts_success=Всички неактивни профили са изтрити успешно.
+dashboard.delete_repo_archives=Изтрий всички архиви на хранилища
+dashboard.delete_repo_archives_success=Всички архиви на хранилищата са изтрити успешно.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Почисти изтрити данни в хранилищата
+dashboard.git_gc_repos_success=Всички хранилища са почистени от изтрити данни успешно.
+dashboard.resync_all_sshkeys=Презапис на ".ssh/authorized_keys" файл (внимание: не-Gogs ключове ще бъдат загубени)
+dashboard.resync_all_sshkeys_success=Всички публични ключове са презаписани успешно.
+dashboard.resync_all_update_hooks=Презапис на всички куки, закачени на актуализация на хранилищата (необходимо, когато се ползва собствен път за конфигурацията)
+dashboard.resync_all_update_hooks_success=Всички куки, закачени на актуализация на хранилищата, са презаписани успешно.
+
+dashboard.server_uptime=Операционно време
+dashboard.current_goroutine=Текущи Goroutines
+dashboard.current_memory_usage=Текущо използвана памет
+dashboard.total_memory_allocated=Общо заделена памет
+dashboard.memory_obtained=Получена памет
+dashboard.pointer_lookup_times=Брой обхождания на указатели
+dashboard.memory_allocate_times=Брой заделяния на памет
+dashboard.memory_free_times=Брой освобождавания на памет
+dashboard.current_heap_usage=Текущо използвана осн. памет
+dashboard.heap_memory_obtained=Получена осн. памет
+dashboard.heap_memory_idle=Празна осн. памет
+dashboard.heap_memory_in_use=Използвана осн. памет
+dashboard.heap_memory_released=Освободена осн. памет
+dashboard.heap_objects=Обекти в осн. памет
+dashboard.bootstrap_stack_usage=Използван стек за bootstrap
+dashboard.stack_memory_obtained=Заделена памет в стека
+dashboard.mspan_structures_usage=Използвани MSpan обекти
+dashboard.mspan_structures_obtained=Получени MSpan обекти
+dashboard.mcache_structures_usage=Използвани MCache обекти
+dashboard.mcache_structures_obtained=Получени MCache обекти
+dashboard.profiling_bucket_hash_table_obtained=Получени Profiling Bucket Hash Table
+dashboard.gc_metadata_obtained=Получени GC метаданни
+dashboard.other_system_allocation_obtained=Получена друга системна памет
+dashboard.next_gc_recycle=Следващо рециклиране на GC
+dashboard.last_gc_time=Време от последен GC
+dashboard.total_gc_time=Общо време за GC
+dashboard.total_gc_pause=Общо пауза за GC
+dashboard.last_gc_pause=Последна пауза за GC
+dashboard.gc_times=Брой GC
+
+users.user_manage_panel=Управление на потребителя
+users.new_account=Създай нов профил
+users.name=Име
+users.activated=Активиран
+users.admin=Администратор
+users.repos=Хранилища
+users.created=Създаване
+users.send_register_notify=Прати уведомление на потребителя при регистрация
+users.new_success=Новият профил '%s' е добавен успешно.
+users.edit=Редакция
+users.auth_source=Източник за удостоверяване
+users.local=Локално
+users.auth_login_name=Потребителско име за удостоверяване
+users.password_helper=Оставете празна ако не се променя.
+users.update_profile_success=Профилът е запазен успешно.
+users.edit_account=Редактирай профил
+users.is_activated=Този профил е активиран
+users.is_admin=Този профил има административни права
+users.allow_git_hook=Този профил има разрешение да създава Git куки
+users.allow_import_local=Този профил има права за импорт на локални хранилища
+users.update_profile=Обнови профила
+users.delete_account=Изтрий този профил
+users.still_own_repo=Този профил притежава поне едно хранилище. Първо трябва да изтриете хранилището или да го прехвърлите на друг потребител.
+users.still_has_org=Този профил е член на поне една организация. Първо трябва да напуснете или изтриете тези организации.
+users.deletion_success=Профилът е изтрит успешно!
+
+orgs.org_manage_panel=Управление на организацията
+orgs.name=Име
+orgs.teams=Екипи
+orgs.members=Членове
+
+repos.repo_manage_panel=Управление на хранилището
+repos.owner=Притежател
+repos.name=Име
+repos.private=Лично
+repos.watches=Наблюдавания
+repos.stars=Харесвания
+repos.issues=Проблеми
+
+auths.auth_manage_panel=Управление на удостоверявания
+auths.new=Добави нов източник за удостоверяване
+auths.name=Име
+auths.type=Тип
+auths.enabled=Активен
+auths.updated=Обновен
+auths.auth_type=Тип на удостоверяване
+auths.auth_name=Име на удостоверяване
+auths.domain=Домейн
+auths.host=Сървър
+auths.port=Порт
+auths.bind_dn=Име (DN) за свръзка
+auths.bind_password=Парола за свръзка
+auths.bind_password_helper=Внимание: Тази парола се запазва некриптирана. Моля използвайте потребител, който няма административен достъп.
+auths.user_base=База с потребители
+auths.user_dn=Име (DN) на потребител
+auths.attribute_name=Атрибут за име
+auths.attribute_surname=Атрибут за фамилия
+auths.attribute_mail=Атрибут за ел. поща
+auths.filter=Филтър за потребители
+auths.admin_filter=Филтър за администратори
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP удостоверяване
+auths.smtphost=SMTP сървър
+auths.smtpport=SMTP порт
+auths.allowed_domains=Разрешени домейни
+auths.allowed_domains_helper=Оставете празно за да не се ограничават домейните. За множество домейни използвайте запетая за разделител.
+auths.enable_tls=Включи TLS криптиране
+auths.skip_tls_verify=Пропусни проверка на TLS
+auths.pam_service_name=Име на PAM услуга
+auths.enable_auto_register=Включи автоматична регистрация
+auths.tips=Съвети
+auths.edit=Редактирай настройки за удостоверяване
+auths.activated=Това удостоверяване е активно
+auths.new_success=Новото удостоверяване '%s' е добавено успешно.
+auths.update_success=Настройките за удостоверяване са запазени успешно.
+auths.update=Обнови настройки за удостоверяване
+auths.delete=Изтриване на това удостоверяване
+auths.delete_auth_title=Изтрий удостоверяването
+auths.delete_auth_desc=Това удостоверяване ще бъде изтрито. Желаете ли да продължите?
+auths.deletion_success=Удостоверяването е изтрито успешно!
+
+config.server_config=Сървърни настройки
+config.app_name=Име на приложението
+config.app_ver=Версия на приложението
+config.app_url=URL адрес на приложението
+config.domain=Домейн
+config.offline_mode=Офлайн режим
+config.disable_router_log=Изключи журнал на маршрутизатора
+config.run_user=Потребителски контекст
+config.run_mode=Режим на изпълнение
+config.repo_root_path=Основен път към хранилища
+config.static_file_root_path=Път към статични файлове
+config.log_file_root_path=Път към журнал
+config.script_type=Тип на скрипта
+config.reverse_auth_user=Потребителско име при обратно удостоверяване
+config.db_config=Настройки на базата данни
+config.db_type=Тип
+config.db_host=Сървър
+config.db_name=Име
+config.db_user=Потребител
+config.db_ssl_mode=SSL режим
+config.db_ssl_mode_helper=(само за postgres)
+config.db_path=Път
+config.db_path_helper=(за "sqlite3" и "tidb")
+config.service_config=Настройка на услугата
+config.register_email_confirm=Изисквай потвърждение на адреси на ел. поща
+config.disable_register=Изключи нови регистрации
+config.show_registration_button=Покажи бутон за регистрация
+config.require_sign_in_view=Изисквай вписване за преглед
+config.enable_cache_avatar=Включи кеширане на аватари
+config.mail_notify=Уведомяване по ел. поща
+config.disable_key_size_check=Изключи проверка минимален размер на ключ
+config.enable_captcha=Включи Captcha
+config.active_code_lives=Кодове за активиране
+config.reset_password_code_lives=Кодове за изчистване на парола
+config.webhook_config=Конфигурация на уеб-куки
+config.queue_length=Дължина на опашка
+config.deliver_timeout=Време за отказ при изпращане
+config.skip_tls_verify=Пропусни проверка на TLS
+config.mailer_config=Конфигурация на мейлър
+config.mailer_enabled=Активен
+config.mailer_disable_helo=Изключи HELO
+config.mailer_name=Име
+config.mailer_host=Сървър
+config.mailer_user=Потребител
+config.oauth_config=OAuth конфигурация
+config.oauth_enabled=Активна
+config.cache_config=Конфигурация на кеша
+config.cache_adapter=Кеш адаптер
+config.cache_interval=Кеш интервал
+config.cache_conn=Кеш на връзката
+config.session_config=Конфигурация на сесии
+config.session_provider=Доставчик на сесии
+config.provider_config=Конфигурация на доставчик
+config.cookie_name=Име на бисквитката
+config.enable_set_cookie=Включи използване на бисквитки
+config.gc_interval_time=GC през интервал
+config.session_life_time=Период на валидност на сесиите
+config.https_only=HTTPS само
+config.cookie_life_time=Период на валидност на бисквитките
+config.picture_config=Конфигурация на изображения
+config.picture_service=Услуги за снимки
+config.disable_gravatar=Изключи Gravatar
+config.log_config=Конфигурация на журнал
+config.log_mode=Режим на журнал
+
+monitor.cron=Cron задачи
+monitor.name=Име
+monitor.schedule=График
+monitor.next=Следващ път
+monitor.previous=Предишен път
+monitor.execute_times=Брой изпълнения
+monitor.process=Изпълнявани процеси
+monitor.desc=Описание
+monitor.start=Начален час
+monitor.execute_time=Време за изпълнение
+
+notices.system_notice_list=Системни известия
+notices.type=Тип
+notices.type_1=Хранилище
+notices.desc=Описание
+notices.op=Oп.
+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>`
+create_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_2_commits=Сравнение между тези 2 ревизии
+
+[tool]
+ago=преди
+from_now=след
+now=сега
+1s=%s 1 секунда
+1m=%s 1 минута
+1h=%s 1 час
+1d=%s 1 ден
+1w=%s 1 седмица
+1mon=%s 1 месец
+1y=%s 1 година
+seconds=%[2]s %[1]d секунди
+minutes=%[2]s %[1]d минути
+hours=%[2]s %[1]d часа
+days=%[2]s %[1]d дни
+weeks=%[2]s %[1]d седмици
+months=%[2]s %[1]d месеца
+years=%[2]s %[1]d години
+raw_seconds=секунди
+raw_minutes=минути
+
+[dropzone]
+default_message=Пуснете файлове тук или щракнете за качване.
+invalid_input_type=Невъзможно качване на файловете от този тип.
+file_too_big=Размер на файла ({{filesize}} MB) надвишава максималния размер ({{maxFilesize}} MB).
+remove_file=Премахни файл
+

+ 1009 - 992
conf/locale/locale_de-DE.ini

@@ -1,992 +1,1009 @@
-app_desc=Ein einfacher, selbst gehosteter Git-Service, geschrieben in Go
-
-home=Home
-dashboard=Übersicht
-explore=Erkunden
-help=Hilfe
-sign_in=Anmelden
-sign_out=Abmelden
-sign_up=Registrieren
-register=Registrieren
-website=Webseite
-version=Version
-page=Seite
-template=Vorlage
-language=Sprache
-create_new=Erstellen...
-user_profile_and_more=Benutzerprofil und mehr
-signed_in_as=Eingeloggt als
-
-username=Benutzername
-email=E-Mail
-password=Passwort
-re_type=Passwort bestätigen
-captcha=Captcha
-
-repository=Repository
-organization=Organisation
-mirror=Spiegel
-new_repo=Neues Repository
-new_migrate=Neue Migration
-new_fork=Neues abgespaltetes Repository
-new_org=Neue Organisation
-manage_org=Organisationen verwalten
-admin_panel=Admin-Panel
-account_settings=Kontoeinstellungen
-settings=Einstellungen
-your_profile=Dein Profil
-your_settings=Deine Einstellungen
-
-news_feed=Neuigkeiten
-pull_requests=Pull Requests
-issues=Issues
-
-cancel=Abbrechen
-
-[search]
-search=Suchen...
-repository=Repository
-user=Benutzer
-issue=Problem
-code=Code
-
-[install]
-install=Installation
-title=Installation für erstmaligen Start
-docker_helper=Wenn Gogs innerhalb Docker läuft, lies dir bitte die <a target="_blank" href="%s">Guidelines</a> genau durch, bevor du irgendwas auf dieser Seite änderst!
-requite_db_desc=Gogs benötigt MySQL, PostgreSQL, SQLite3 oder TiDB.
-db_title=Datenbankeinstellungen
-db_type=Datenbanktyp
-host=Host
-user=Benutzer
-password=Passwort
-db_name=Datenbankname
-db_helper=Bitte verwenden sie die InnoDB-Engine mit utf8_general_ci Zeichensatz für MySQL.
-ssl_mode=SSL-Modus
-path=Pfad
-sqlite_helper=Der Dateipfad zur SQLite3 oder TiDB Datenbank.
-err_empty_db_path=SQLite3 oder TiDB Datenbankpfad darf nicht leer sein.
-err_invalid_tidb_name=Der TiDB Datenbankname darf kein "." und kein "-" enthalten.
-no_admin_and_disable_registration=Du kannst die Registrierung nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
-err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein.
-
-general_title=Allgemeine Einstellungen
-app_name=Anwendungsname
-app_name_helper=Hier den Organisationsnamen einfügen.
-repo_path=Repository Root-Verzeichnispfad
-repo_path_helper=Alle Git-Repositorys werden in diesem Verzeichnis gespeichert.
-run_user=Ausführender Benutzer
-run_user_helper=Der Benutzer muss die Zugriffsberechtigung für das Repository Root-Verzeichnis haben und der ausführende Benutzer von Gogs sein.
-domain=Domain
-domain_helper=Dies hat Auswirkung auf die SSH clone URLs.
-ssh_port=SSH Port
-ssh_port_helper=Die Portnummer deines SSH-Servers, lass dieses Feld leer, wenn du SSH deaktivieren möchtest.
-http_port=HTTP Port
-http_port_helper=Auf dieser Port Nummer wird Gogs erreichbar sein.
-app_url=Anwendungs-URL
-app_url_helper=Dies hat Auswirkung auf die HTTP/HTTPS clone URLs und für die E-Mails.
-
-optional_title=Optionale Einstellungen
-email_title=E-Mail-Service Einstellungen
-smtp_host=SMTP Host
-smtp_from=Von
-smtp_from_helper=Absender-Adresse nach RFC 5322. Entweder nur eine E-Mail Adresse oder im folgenden Format: "Name" <email@example.com>.
-mailer_user=Sender E-mail
-mailer_password=Sender Passwort
-register_confirm=Registrierungsbestätigung aktivieren
-mail_notify=E-Mail-Benachrichtigungen aktivieren
-server_service_title=Server- und sonstige Diensteinstellungen
-offline_mode=Offline-Modus aktivieren
-offline_mode_popup=Deaktiviere das CDN auch im Produktionsmodus, alle Dateien werden von diesem Server ausgeliefert.
-disable_gravatar=Gravatar-Dienst deaktivieren
-disable_gravatar_popup=Gravatar und benutzerdefinierte Quellen deaktivieren, alle Avatare werden standardmäßig vom Nutzer hochgeladen oder sind Standardavatare.
-disable_registration=Benutzerregistrierung deaktivieren
-disable_registration_popup=Deaktiviere die Benutzerregistrierung, nur Administratoren können Benutzerkonten anlegen.
-enable_captcha=Captcha aktivieren
-enable_captcha_popup=Benötigt Captcha-Überprüfung für Registrierung durch Benutzer.
-require_sign_in_view=Erfordere Anmeldung, um Inhalte anzusehen
-require_sign_in_view_popup=Lediglich angemeldete Benutzer können Inhalte betrachten, Gäste sehen nur die Anmelden/Registrieren Seite.
-admin_setting_desc=Sie müssen jetzt noch keinen Administrator-Account anlegen. Der erste Benutzer ("ID=1") erhält automatisch Administrationsrechte.
-admin_title=Konto-Einstellungen für den Administrator
-admin_name=Benutzername
-admin_password=Passwort
-confirm_password=Passwort bestätigen
-admin_email=E-Mail
-install_gogs=Gogs installieren
-test_git_failed=Fehler beim Test des 'git' Kommandos: %v
-sqlite3_not_available=Ihre Gogs-Version unterstützt kein SQLite3, bitte lade dir die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
-invalid_db_setting=Datenbank-Einstellungen sind nicht korrekt: %v
-invalid_repo_path=Repository Root-Verzeichnis ist ungültig: %v
-run_user_not_match=Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
-save_config_failed=Fehler beim Speichern der Konfiguration: %v
-invalid_admin_setting=Admin-Konto Einstellungen sind ungültig: %v
-install_success=Herzlich Willkommen! Wir sind froh, dass du dich für Gogs entschieden hast. Wir wünschen viel Vergnügen damit.
-
-[home]
-uname_holder=Benutzername oder E-Mail
-password_holder=Passwort
-switch_dashboard_context=Dashboard Kontext wechseln
-my_repos=Meine Repositories
-collaborative_repos=Gemeinschaftliche Repositories
-my_orgs=Meine Organisationen
-my_mirrors=Meine Spiegel
-view_home=%s betrachten
-
-issues.in_your_repos=In deinen Repositories
-
-[explore]
-repos=Repositories
-
-[auth]
-create_new_account=Neues Konto erstellen
-register_hepler_msg=Du hast bereits ein Konto? Jetzt anmelden!
-social_register_hepler_msg=Du hast bereits ein soziales Konto? Jetzt verknüpfen!
-disable_register_prompt=Es tut uns leid, die Registrierung wurde deaktiviert. Bitte wende dich an den Administrator.
-disable_register_mail=Es tut uns leid, die Bestätigung der Registrierungs-E-Mail wurde deaktiviert.
-remember_me=Angemeldet bleiben
-forgot_password=Passwort vergessen
-forget_password=Passwort vergessen?
-sign_up_now=Du willst ein Konto? Jetzt registrieren!
-confirmation_mail_sent_prompt=Eine neue Bestätigungs-E-Mail wurde an <b>%s</b> gesendet. Kontrolliere dein Postfach innerhalb der nächsten %d Stunden, um die Registrierung abzuschließen.
-sign_in_to_account=Mit deinem Konto anmelden
-active_your_account=Aktiviere dein Konto
-resent_limit_prompt=Es tut uns leid, du sendest zu häufig Aktivierungs-E-Mails. Bitte warte 3 Minuten.
-has_unconfirmed_mail=Hallo %s, du hast eine unbestätigte E-Mail-Adresse (<b>%s</b>). Wenn du keine Bestätigungs-E-Mail erhalten hast oder eine neue benötigst, klicke bitte auf den folgenden Button.
-resend_mail=Hier klicken, um deine Aktivierungs-E-Mail erneut zu versenden
-email_not_associate=Diese E-Mail-Adresse ist mit keinem Konto verknüpft.
-send_reset_mail=Hier klicken, um die E-Mail zum Passwort-zurücksetzen erneut zu versenden
-reset_password=Passwort zurücksetzen
-invalid_code=Es tut uns leid, der Bestätigungscode ist abgelaufen oder ungültig.
-reset_password_helper=Hier klicken, um das Passwort zurückzusetzen
-password_too_short=Das Passwort muss mindenstens 6 Zeichen lang sein
-
-[mail]
-activate_account=Bitte aktiviere dein Konto
-activate_email=Verifiziere deine E-Mail-Adresse
-reset_password=Setze dein Passwort zurück
-register_success=Registrierung erfolgreich, Willkommen
-
-[modal]
-yes=Ja
-no=Nein
-modify=Ändern
-
-[form]
-UserName=Benutzername
-RepoName=Repository-Name
-Email=E-Mail-Adresse
-Password=Passwort
-Retype=Passwort bestätigen
-SSHTitle=SSH-Schlüsselname
-HttpsUrl=HTTPS-URL
-PayloadUrl=Payload-URL
-TeamName=Teamname
-AuthName=Authentifizierungsname
-AdminEmail=Admin E-mail
-
-require_error=` darf nicht leer sein.`
-alpha_dash_error=` muss ausschließlich alphanumerische Zeichen und "-_" enthalten.`
-alpha_dash_dot_error=` muss ausschließlich alphanumerische Zeichen und ".-_" enthalten.`
-size_error=` muss die Größe %s haben.`
-min_size_error=` muss mindestens %s Zeichen enthalten.`
-max_size_error=` darf höchstens %s Zeichen enthalten.`
-email_error=` ist keine gültige E-Mail-Adresse.`
-url_error=` ist keine gültige URL.`
-unknown_error=Unbekannter Fehler:
-captcha_incorrect=Captcha stimmt nicht überein.
-password_not_match=Die Passwörter stimmen nicht überein.
-
-username_been_taken=Benutzername ist bereits vergeben.
-repo_name_been_taken=Repository-Name ist bereits vergeben.
-org_name_been_taken=Organisationsname ist bereits vergeben.
-team_name_been_taken=Teamname ist bereits vergeben.
-email_been_used=E-Mail-Adresse wird bereits verwendet.
-illegal_team_name=Teamname enthält ungültige Zeichen.
-username_password_incorrect=Benutzername oder Passwort ist nicht korrekt.
-enterred_invalid_repo_name=Bitte stelle sicher, dass der eingegebene Repository-Name richtig ist.
-enterred_invalid_owner_name=Bitte stelle sicher, dass der eingegebene Besitzername richtig ist.
-enterred_invalid_password=Bitte stelle sicher, dass das eingegebene Passwort richtig ist.
-user_not_exist=Angegebener Benutzer existiert nicht.
-last_org_owner=Der zu entfernende Benutzer ist der letzte Besitzer einer Organisation. Diese müssen zuerst gelöscht oder übertragen werden.
-
-invalid_ssh_key=Leider sind wir nicht in der Lage, deinen SSH-Schlüssel zu überprüfen: %s
-unable_verify_ssh_key=Gogs kann deinen SSH-Schlüssel nicht verifizieren, nimmt aber an, dass er gültig ist. Bitte stelle dies selbst sicher.
-auth_failed=Authentifizierung fehlgeschlagen: %v
-
-still_own_repo=Dein Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
-still_has_org=Du bist noch Mitglied einer Organisation, bitte lösche zunächst diese Mitgliedschaft.
-org_still_own_repo=Diese Organisation besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
-
-still_own_user=Diese Authentifizierung wird noch von einigen Benutzern genutzt. Entferne diese zuvor und lösche erneut.
-
-target_branch_not_exist=Ziel-Branch existiert nicht
-
-[user]
-change_avatar=Ändere dein Profilbild auf gravatar.com
-change_custom_avatar=Ändere deinen Avatar in den Einstellungen
-join_on=Registriert
-repositories=Repositories
-activity=Öffentliche Aktivität
-followers=Followers
-starred=Markiert
-following=Folgt
-
-form.name_reserved=Der Benutzername '%s' ist reserviert.
-form.name_pattern_not_allowed=Benutzernamens-Muster "%s" ist nicht zulässig.
-
-[settings]
-profile=Profil
-password=Passwort
-ssh_keys=SSH-Schlüssel
-social=Soziale Konten
-applications=Anwendungen
-orgs=Organisationen
-delete=Konto löschen
-uid=Uid
-
-public_profile=Öffentliches Profil
-profile_desc=Deine E-Mail-Adresse ist öffentlich einsehbar und wird für accountspezifische Benachrichtigungen verwendet, sowie für alle web-basierten Funktionen, die über die Seite gemacht werden.
-full_name=Vollständiger Name
-website=Webseite
-location=Standort
-update_profile=Profil aktualisieren
-update_profile_success=Ihr Profil wurde erfolgreich aktualisiert.
-change_username=Benutzername geändert
-change_username_prompt=Diese Änderung wird sich auf die Linkbezüge zu deinem Account auswirken.
-continue=Weiter
-cancel=Abbrechen
-
-enable_custom_avatar=Aktiviere benutzerdefinierten Avatar
-enable_custom_avatar_helper=Aktiviere dies, um deinen Avatar nicht von Gravatar zu laden
-choose_new_avatar=Neuen Avatar auswählen
-update_avatar=Avatar-Einstellung aktualisieren
-uploaded_avatar_not_a_image=Die hochgeladene Datei ist kein Bild.
-no_custom_avatar_available=Kein benutzerdefinierter Avatar verfügbar, Aktivierung ist nicht möglich.
-update_avatar_success=Deine Avatar-Einstellung wurde aktualisiert.
-
-change_password=Passwort ändern
-old_password=Aktuelles Passwort
-new_password=Neues Passwort
-retype_new_password=Neues Passwort erneut eingeben
-password_incorrect=Aktuelles Passwort ist nicht korrekt.
-change_password_success=Passwort geändert. Du kannst dich jetzt mit deinem neuen Passwort anmelden.
-
-emails=E-Mail-Adressen
-manage_emails=E-Mail-Adressen verwalten
-email_desc=Deine primäre E-Mail-Adresse wird für Benachrichtigungen und andere Funktionen verwendet.
-primary=Primär
-primary_email=Als primäre Adresse verwenden
-delete_email=Löschen
-email_deletion=E-Mail löschen
-email_deletion_desc=Das Löschen dieser E-Mail Adresse wird alle Informationen entfernen, die mit dieser E-Mail Adresse verknüpft sind. Willst du fortfahren?
-email_deletion_success=E-Mail-Adresse wurde erfolgreich gelöscht!
-add_new_email=Neue E-Mail-Adresse hinzufügen
-add_email=E-Mail-Adresse hinzufügen
-add_email_confirmation_sent=Eine neue Bestätigungsmail wurde an '%s' gesendet, bitte überprüfen Sie Ihren Posteingang innerhalb von %d Stunden um die Bestätigung abzuschließen.
-add_email_success=Deine neue E-Mail-Adresse wurde erfolgreich hinzugefügt.
-
-manage_ssh_keys=SSH-Schlüssel verwalten
-add_key=SSH-Schlüssel hinzufügen
-ssh_desc=Dies ist eine Liste aller SSH-Schlüssel, die mit deinem Konto verknüpft sind. Bitte entferne alle Schlüssel, die dir nicht bekannt sind.
-ssh_helper=<strong>Du brauchst Hilfe?</strong> Hier ist eine Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder <a href="%s">Problemlö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 dem selben Namen existiert bereits.
-key_name=Schlüsselname
-key_content=Inhalt
-add_key_success=Neuer SSH-Schlüssel '%s' wurde erfolgreich hinzugefügt!
-delete_key=SSH-Schlüssel löschen
-ssh_key_deletion=SSH-Schlüssel entfernen
-ssh_key_deletion_desc=Das Löschen dieses SSH-Schlüssels wird alle zugehörigen Zugriffsberechtigungen auf deinen Account entfernen. Möchtest du fortfahren?
-ssh_key_deletion_success=SSH-Schlüssel wurde erfolgreich gelöscht!
-add_on=Hinzugefügt am
-last_used=Zuletzt verwendet am
-no_activity=Keine neuen Aktivitäten
-key_state_desc=Dieser Schlüssel wurde in den letzten 7 Tagen verwendet
-token_state_desc=Dieses Token wurde in den letzten 7 Tagen benutzt
-
-manage_social=Verknüpfte soziale Konten verwalten
-social_desc=Dies ist eine Liste verknüpfter sozialer Konten. Bitte entferne alle Verknüpfungen, die dir nicht bekannt sind.
-unbind=Verknüpfung entfernen
-unbind_success=Die Verknüpfung zum sozialen Konto wurde entfernt.
-
-manage_access_token=Verwaltung persönlicher Zugangs-Tokens
-generate_new_token=Neuen Token erzeugen
-tokens_desc=Von dir generierte Token können benutzt werden, um auf die Gogs APIs zuzugreifen.
-new_token_desc=Momentan erlaubt jeder Token vollen Zugriff auf dein Konto.
-token_name=Token-Name
-generate_token=Token generieren
-generate_token_succees=Neuer Zugangs-Token wurde erstellt! Stelle sicher, dass du den Token kopiert hast, da du ihn später nicht mehr ansehen kannst!
-delete_token=Löschen
-access_token_deletion=Entfernung von persönlichen Token
-access_token_deletion_desc=Das Löschen dieses persönlichen Tokens wird alle zugehörigen Zugriffe der Anwendung entfernen. Möchtest du fortfahren?
-delete_token_success=Persönlicher Zugriffs-Token wurde erfolgreich entfernt! Vergiss nicht deine Anwendung zu aktualisieren.
-
-delete_account=Konto löschen
-delete_prompt=Diese Aktion wird dein Konto dauerhaft löschen und kann <strong>NICHT</strong> rückgängig gemacht werden!
-confirm_delete_account=Löschen
-delete_account_title=Account löschen
-delete_account_desc=Du bist dabei dieses Konto dauerhaft zu löschen, möchtest du wirklich fortfahren?
-
-[repo]
-owner=Besitzer
-repo_name=Repository-Name
-repo_name_helper=Gute Repository-Namen sind kurz, einprägsam und <strong>einzigartig</strong>.
-visibility=Sichtbarkeit
-visiblity_helper=Diese 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)
-fork_repo=Repository abspalten
-fork_from=Forken von
-fork_visiblity_helper=Die Sichtbarkeit von geforkten Repositories ist nicht veränderbar.
-repo_desc=Beschreibung
-repo_lang=Sprache
-repo_lang_helper=.gitignore Dateien auswählen
-license=Lizenz
-license_helper=Wähle eine Lizenz aus
-readme=Readme
-readme_helper=Readme Vorlage auswählen
-auto_init=Repository mit ausgewählten Dateien und Vorlagen initialisieren
-create_repo=Repository erstellen
-default_branch=Standard-Branch
-mirror_interval=Spiegel-Intervall (in Stunden)
-
-form.name_reserved=Repository-Name '%s' ist bereits vergeben.
-form.name_pattern_not_allowed=Repository-Namesmuster '%s' ist nicht zulässig.
-
-need_auth=Autorisierung benötigt
-migrate_type=Migrationstyp
-migrate_type_helper=Diese Repository wird ein <span class="text blue">Spiegel</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.
-migrate.invalid_local_path=Lokaler Pfad ist ungültig, er existiert nicht oder ist kein Ordner.
-
-forked_from=Geforkt von
-fork_from_self=Sie können keine Repository forken, welche ihnen gehört!
-copy_link=Kopieren
-copy_link_success=Kopiert!
-copy_link_error=Drücke ⌘-C oder Strg-C zum Kopieren
-click_to_copy=In Zwischenablage kopieren
-copied=Kopiert OK
-clone_helper=Du brauchst Hilfe beim Klonen? Hier gibt es <a target="_blank" href="%s">Hilfe</a>!
-unwatch=Nicht mehr beobachten
-watch=Beobachten
-unstar=Markierung aufheben
-star=Markieren
-fork=Fork
-
-no_desc=Keine Beschreibung
-quick_guide=Kurzanleitung
-clone_this_repo=Diese Repository klonen
-create_new_repo_command=Erstelle eine neue Repository mittels Kommandozeile
-push_exist_repo=Übertrage eine existierende Repository von der Kommandozeile
-repo_is_empty=Das Repository ist leer, bitte komm später wieder!
-
-
-branch=Branch
-tree=Struktur
-branch_and_tags=Branches & Tags
-branches=Branches
-tags=Tags
-issues=Issues
-pulls=Pull-Anforderung
-labels=Label
-milestones=Meilensteine
-commits=Commits
-releases=Veröffentlichungen
-file_raw=Roh
-file_history=Verlauf
-file_view_raw=Ansicht Roh
-file_permalink=Permalink
-
-commits.commits=Commits
-commits.search=Durchsuche Commits
-commits.find=Finden
-commits.author=Author
-commits.message=Nachricht
-commits.date=Datum
-commits.older=Älter
-commits.newer=Neuer
-
-issues.new=Neuer Issue
-issues.new.labels=Labels
-issues.new.no_label=Kein Label
-issues.new.clear_labels=Labels entfernen
-issues.new.milestone=Meilenstein
-issues.new.no_milestone=Kein Meilenstein
-issues.new.clear_milestone=Meilenstein entfernen
-issues.new.open_milestone=Offene Meilensteine
-issues.new.closed_milestone=Geschlossene Meilensteine
-issues.new.assignee=Zuständiger
-issues.new.clear_assignee=Zuständigen entfernen
-issues.new.no_assignee=Kein Zuständiger
-issues.create=Issue erstellen
-issues.new_label=Neues Label
-issues.new_label_placeholder=Label-Name...
-issues.create_label=Label erstellen
-issues.open_tab=%d offen
-issues.close_tab=%d geschlossen
-issues.filter_label=Label
-issues.filter_label_no_select=Kein Label gewählt
-issues.filter_milestone=Meilenstein
-issues.filter_milestone_no_select=Kein ausgewählter Meilenstein
-issues.filter_assignee=Zuständiger
-issues.filter_assginee_no_select=Kein ausgewählter Zuständiger
-issues.filter_type=Typ
-issues.filter_type.all_issues=Alle Probleme
-issues.filter_type.assigned_to_you=Dir zugewiesen
-issues.filter_type.created_by_you=Erstellt von dir
-issues.filter_type.mentioning_you=Erwähnen dich
-issues.filter_sort=Sortieren
-issues.filter_sort.latest=Neueste
-issues.filter_sort.oldest=Älteste
-issues.filter_sort.recentupdate=Zuletzt 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_fake=eröffnet %[1]s von %[2]s
-issues.previous=Vorherige Seite
-issues.next=Nächste Seite
-issues.open_title=Offen
-issues.closed_title=Geschlossen
-issues.num_comments=%d Kommentare
-issues.commented_at=`kommentiert in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Hier gibt es bis jetzt noch keinen Inhalt.
-issues.close_issue=Schließen
-issues.close_comment_issue=Schließen und kommentieren
-issues.reopen_issue=Wiedereröffnen
-issues.reopen_comment_issue=Wiedereröffnen und kommentieren
-issues.create_comment=Kommentieren
-issues.closed_at=`geschlossen in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`wiedereröffnet in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenziert dieses Issue aus einem Commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Ersteller
-issues.admin=Admin
-issues.owner=Besitzer
-issues.sign_up_for_free=Kostenlos anmelden
-issues.sign_in_require_desc=um dieser Konverstion beizutreten. Hast du bereits einen Account? <a href="%s">Anmelden zum kommentieren</a>
-issues.edit=Bearbeiten
-issues.cancel=Abbrechen
-issues.save=Speichern
-issues.label_title=Label Name
-issues.label_color=Label Farbe
-issues.label_count=%d Labels
-issues.label_open_issues=%d offene Issues
-issues.label_edit=Bearbeiten
-issues.label_delete=Löschen
-issues.label_modify=Label Änderung
-issues.label_deletion=Label Löschung
-issues.label_deletion_desc=Das Löschen eines Labels entfernt es von allen verknüpften Issues. Möchtest du fortfahren?
-issues.label_deletion_success=Label wurde erfolgreich gelöscht!
-
-pulls.compare_changes=Änderungen vergleichen
-pulls.compare_changes_desc=Vergleiche zwei Branches und erstelle einen Pull Request für die Änderungen.
-pulls.compare_base=Base
-pulls.compare_compare=vergleichen
-pulls.filter_branch=Filter Branch
-pulls.no_results=Keine Ergebnisse verfügbar.
-pulls.nothing_to_compare=Es ist nichts zu vergleichen, da Base- und Head-Branch gleich sind.
-pulls.has_pull_request=`Es existiert bereits eine Pull-Anforderung 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=%[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
-pulls.tab_conversation=Konversation
-pulls.tab_commits=Commits
-pulls.tab_files=Dateien geändert
-pulls.reopen_to_merge=Bitte diese Pull-Anforderung wiedereröffnen, um die Merge-Operation auszuführen.
-pulls.merged=Zusammengeführt
-pulls.has_merged=Dieser Pull-Request wurde erfolgreich zusammengeführt!
-pulls.data_broken=Die Daten dieser Pull-Anforderung sind defekt aufgrund des Löschens von Fork-Informationen.
-pulls.is_checking=Die Konfliktprüfung ist in Arbeit. Bitte aktualisiere die Seite in wenigen Momenten.
-pulls.can_auto_merge_desc=Du kannst eine Auto-Merge Operation auf diese Pull-Anforderung durchführen.
-pulls.cannot_auto_merge_desc=Es kann keine Auto-Merge Operation durchgeführt werden, da es Konflikte zwischen den Commits gibt.
-pulls.cannot_auto_merge_helper=Bitte benutze ein Kommandozeilentool, um den Konflikt zu lösen.
-pulls.merge_pull_request=Pull-Request zusammenführen
-pulls.open_unmerged_pull_exists=`Du kannst die Pull-Anforderung nicht wiedereröffnen, da bereits eine offene Pull-Anforderung (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Merging wartet.`
-
-milestones.new=Neuer Meilenstein
-milestones.open_tab=%d offen
-milestones.close_tab=%d geschlossen
-milestones.closed=Geschlossen %s
-milestones.no_due_date=Kein Fälligkeitsdatum
-milestones.open=Offen
-milestones.close=Geschlossen
-milestones.new_subheader=Erstelle Meilenstein zum Organisieren der Issues.
-milestones.create=Meilenstein erstellen
-milestones.title=Titel
-milestones.desc=Beschreibung
-milestones.due_date=Fälligkeitsdatum (optional)
-milestones.clear=Bereinigen
-milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'Jahr-mm-dd' haben.
-milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
-milestones.edit=Meilenstein bearbeiten
-milestones.edit_subheader=Benutze eine bessere Beschreibung für die Meilensteine, um die Menschen nicht zu verwirren.
-milestones.cancel=Abbrechen
-milestones.modify=Meilenstein ändern
-milestones.edit_success=Änderungen des Meilensteins '%s' wurden erfolgreich gespeichert!
-milestones.deletion=Meilenstein löschen
-milestones.deletion_desc=Das Löschen dieses Meilensteins wird alle zugehörigen Informationen in allen Issues entfernen. Wirklich fortfahren?
-milestones.deletion_success=Meilenstein erfolgreich gelöscht!
-
-settings=Einstellungen
-settings.options=Optionen
-settings.collaboration=Zusammenarbeit
-settings.hooks=Webhooks
-settings.githooks=Git-Hooks
-settings.basic_settings=Grundeinstellungen
-settings.danger_zone=Gefahrenzone
-settings.site=Offizielle Webseite
-settings.update_settings=Einstellungen speichern
-settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf Repositories beziehen.
-settings.transfer=Besitz übertragen
-settings.transfer_desc=Übertrage diese Repository auf einen anderen Benutzer oder eine Organisation in der du Admin-Rechte hast.
-settings.new_owner_has_same_repo=Der neue Eigentümer hat bereits ein Repository mit dem gleichen Namen.
-settings.delete=Repository löschen
-settings.delete_desc=Wenn diese Repository gelöscht ist, gibt es keinen Weg zurück. Bitte sei behutsam.
-settings.transfer_notices_1=- Du wirst den Zugang verlieren, wenn der neue Besitzer ein individueller Benutzer ist.
-settings.transfer_notices_2=- Du wirst den Zugang behalten, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
-settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen:
-settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
-settings.delete_notices_2=- Die Operation wird alles, was mit dieser Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Benutzern.
-settings.delete_notices_fork_1=- Wenn dies eine öffentliche Repository ist, werden nach der Löschung alle Forks unabhängig.
-settings.delete_notices_fork_2=- Wenn dies eine private Repository ist, dann werden gleichzeitig alle Forks entfernt.
-settings.delete_notices_fork_3=Wenn alle Forks erhalten bleiben sollen, dann muss zuerst die Sichtbarkeit der Repository auf öffentlich gesetzt werden.
-settings.update_settings_success=Repository-Optionen aktualisiert.
-settings.transfer_owner=Neuer Besitzer
-settings.make_transfer=übertragen
-settings.transfer_succeed=Die Repository wurde erfolgreich übertragen.
-settings.confirm_delete=Löschen
-settings.add_collaborator=Mitarbeiter hinzufügen
-settings.add_collaborator_success=Mitarbeiter hinzugefügt
-settings.remove_collaborator_success=Mitarbeiter entfernt
-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 deiner Repository passiert. Gogs sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr in unserer <a target="_blank" 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!
-settings.webhook.request=Anfrage
-settings.webhook.response=Rückmeldung
-settings.webhook.headers=Kopfzeilen
-settings.webhook.payload=Nutzdaten
-settings.webhook.body=Inhalt
-settings.githooks_desc=Git-Hooks werden von Git selbst bereitgestellt. Du kannst die Dateien der unterstützten Hooks in der Liste unten bearbeiten, um eigene Operationen einzubinden.
-settings.githook_edit_desc=Wenn ein Hook inaktiv ist, wird der Standardinhalt benutzt. Lasse den Inhalt leer, um den Hook zu deaktivieren.
-settings.githook_name=Hook-Name
-settings.githook_content=Hook-Inhalt
-settings.update_githook=Aktualisiere Hook
-settings.add_webhook_desc=Gogs sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Du kannst auch angeben, welches Datenformat du erhalten willst (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen findest du im <a target="_blank" href="%s">Webhooks Guide</a>.
-settings.payload_url=Payload-URL
-settings.content_type=Inhaltstyp
-settings.secret=Secret
-settings.slack_username=Benutzername
-settings.slack_icon_url=Icon URL
-settings.slack_color=Farbe
-settings.event_desc=Welche Ereignisse sollen diesen Webhook auslösen?
-settings.event_push_only=Nur das <code>push</code>-Ereignis.
-settings.event_send_everything=Ich brauche <strong>alles</strong>.
-settings.event_choose=Lass mich auswählen, was ich brauche.
-settings.event_create=Erstellen
-settings.event_create_desc=Branch/Tag erstellt
-settings.event_push=Push
-settings.event_push_desc=Git push auf eine Repository
-settings.active=Aktiv
-settings.active_helper=Ereignisdetails werden ausgeliefert, wenn dieser Webhook ausgelöst wird.
-settings.add_hook_success=Webhook hinzugefügt
-settings.update_webhook=Webhook aktualisieren
-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 deiner Repository hinzu.
-settings.slack_token=Token
-settings.slack_domain=Domain
-settings.slack_channel=Kanal
-settings.deploy_keys=Deploy-Keys
-settings.add_deploy_key=Deploy-Key hinzufügen
-settings.no_deploy_keys=Du hast noch keine Deploy-Schlüssel hinzugefügt.
-settings.title=Titel
-settings.deploy_key_content=Inhalt
-settings.key_been_used=Deploy-Schlüssel wurde verwendet.
-settings.key_name_used=Ein Deploy-Schlüssel mit diesem Namen existiert bereits.
-settings.add_key_success=Der Deploy-Schlüssel '%s' wurde erfolgreich hinzugefügt!
-settings.deploy_key_deletion=Deploy-Key löschen
-settings.deploy_key_deletion_desc=Nach der Löschung dieses Deploy-Keys werden zugehörige Zugriffe auf diese Repository nicht mehr möglich sein. Möchtest du wirklich fortfahren?
-settings.deploy_key_deletion_success=Deploy-Key wurde erfolgreich gelöscht!
-
-diff.browse_source=Quellcode durchsuchen
-diff.parent=Ursprung
-diff.commit=Commit
-diff.data_not_available=Keine Diff-Daten verfügbar.
-diff.show_diff_stats=Diff-Statistik anzeigen
-diff.stats_desc=<strong> %d geänderte Dateien</strong> mit <strong>%d neuen Zeilen</strong> und <strong>%d gelöschten Zeilen</strong>
-diff.bin=BIN
-diff.view_file=Datei anzeigen
-
-release.releases=Releases
-release.new_release=Neues Release
-release.draft=Entwurf
-release.prerelease=Pre-Release
-release.stable=Endversion
-release.edit=bearbeiten
-release.ahead=<strong>%d</strong> Commits zu %s seit diesem Release
-release.source_code=Quelltext
-release.tag_name=Tag-Name
-release.target=Ziel
-release.tag_helper=Wähle ein neues Tag oder erstelle ein Tag beim Veröffentlichen.
-release.release_title=Release-Titel
-release.content_with_md=Inhalt mit <a href="%s">Markdown</a>
-release.write=Schreiben
-release.preview=Vorschau
-release.content_placeholder=Schreibe hier etwas
-release.loading=Laden…
-release.prerelease_desc=Dies ist eine Pre-Release-Version
-release.prerelease_helper=Wir möchten darauf hinweisen, dass dieses Release nicht für den produktiven Einsatz gedacht ist.
-release.publish=Release veröffentlichen
-release.save_draft=Entwurf speichern
-release.edit_release=Release bearbeiten
-release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
-
-[org]
-org_name_holder=Name der Organisation
-org_name_helper=Gute Namen von Organisationen sind kurz und einprägsam.
-create_org=Organisation erstellen
-repo_updated=Aktualisiert
-people=Personen
-invite_someone=Benutzer einladen
-teams=Teams
-lower_members=Mitglieder
-lower_repositories=Repositories
-create_new_team=Neues Team erstellen
-org_desc=Beschreibung
-team_name=Teamname
-team_desc=Beschreibung
-team_name_helper=Verwende diesen Namen, um dich auf dieses Team zu beziehen.
-team_desc_helper=Was hat es mit diesem Team auf sich?
-team_permission_desc=Welche Berechtigungsstufe soll das Team haben?
-
-form.name_reserved=Organisationsname '%s' ist bereits vergeben.
-form.name_pattern_not_allowed=Organisations-Namensmuster '%s' ist nicht zulässig.
-
-settings=Einstellungen
-settings.options=Optionen
-settings.full_name=Vollständiger Name
-settings.website=Webseite
-settings.location=Standort
-settings.update_settings=Einstellungen speichern
-settings.update_setting_success=Organisationseinstellungen aktualisiert
-settings.change_orgname_prompt=Diese Änderung wird sich auf die Linkbezüge zur Organisation auswirken.
-settings.update_avatar_success=Avatareinstellung für die Organisation wurde erfolgreich aktualisiert.
-settings.delete=Organisation löschen
-settings.delete_account=Diese Organisation löschen
-settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
-settings.confirm_delete_account=Löschen
-settings.delete_org_title=Organisation löschen
-settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht, möchtest du fortfahren?
-settings.hooks_desc=Füge Webhooks hinzu, die für <strong>alle</strong> Repositorys dieser Organisation ausgelöst werden.
-
-members.public=Öffentlich
-members.public_helper=Privat machen
-members.private=Privat
-members.private_helper=Öffentlich machen
-members.owner=Besitzer
-members.member=Mitglied
-members.conceal=Verbergen
-members.remove=Entfernen
-members.leave=Verlassen
-members.invite_desc=Benutzernamen eingeben, um ihn als neues Mitglied in %s einzuladen:
-members.invite_now=Jetzt einladen
-
-teams.join=Beitreten
-teams.leave=Verlassen
-teams.read_access=Lesezugriff
-teams.read_access_helper=Dieses Team wird Repositorys einsehen und klonen können.
-teams.write_access=Schreibzugriff
-teams.write_access_helper=Dieses Team wird die Repositories einsehen und Push Operationen ausführen können.
-teams.admin_access=Adminzugriff
-teams.admin_access_helper=Dieses Team wird pull- und push-Rechte für die Repositorys haben und Mitarbeiter einladen können.
-teams.no_desc=Dieses Team hat keine Beschreibung
-teams.settings=Einstellungen
-teams.owners_permission_desc=Besitzer haben vollen Zugriff auf <strong>alle Repositorys</strong> und <strong>Admin Rechte</strong> für diese Organisation.
-teams.members=Teammitglieder
-teams.update_settings=Einstellungen aktualisieren
-teams.delete_team=Dieses Team löschen
-teams.add_team_member=Teammitglied hinzufügen
-teams.delete_team_title=Team löschen
-teams.delete_team_desc=Dieses Team wird gelöscht, möchtest du fortfahren? Mitglieder dieses Teams verlieren möglicherweise ihren Zugang zu einigen Repositories.
-teams.delete_team_success=Team gelöscht
-teams.read_permission_desc=Dieses Team erlaubt <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
-teams.write_permission_desc=Dieses Team erlaubt <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und Push Operationen ausführen.
-teams.admin_permission_desc=Diese Team erlaubt <strong>Adminzugriff</strong>: Mitglieder dieses Teams können pullen, pushen und dem Team Mitarbeiter hinzufügen.
-teams.repositories=Team-Repositorys
-teams.add_team_repository=Team-Repository hinzufügen
-teams.remove_repo=Entfernen
-teams.add_nonexistent_repo=Die Repository, welche du hinzufügen möchtest, existiert nicht. Bitte erstelle diese zuerst.
-
-[admin]
-dashboard=Dashboard
-users=Benutzer
-organizations=Organisationen
-repositories=Repositorys
-authentication=Authentifizierung
-config=Konfiguration
-notices=System-Mitteilungen
-monitor=Monitoring
-first_page=Erste
-last_page=Letzte
-total=Total: %d
-
-dashboard.statistic=Statistik
-dashboard.operations=Operationen
-dashboard.system_status=System-Monitor-Status
-dashboard.statistic_info=GoGS Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositorys, <b>%d</b> Beobachtungen, <b>%d</b> Markierungen, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> soziale Konten, <b>%d</b> Folgende, <b>%d</b> Spiegel, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Milestones, <b>%d</b> Labels, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
-dashboard.operation_name=Name der Operation
-dashboard.operation_switch=Switch
-dashboard.operation_run=Ausführen
-dashboard.clean_unbind_oauth=ungebundene OAuths bereinigen
-dashboard.clean_unbind_oauth_success=Alle ungebundenen OAuth-Tokens wurden gelöscht.
-dashboard.delete_inactivate_accounts=inaktive Konten löschen
-dashboard.delete_inactivate_accounts_success=Alle inaktiven Konten wurden erfolgreich gelöscht.
-dashboard.delete_repo_archives=Alle Repository-Archive löschen
-dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
-dashboard.git_gc_repos=Führe Garbage Collection auf Repositories aus
-dashboard.git_gc_repos_success=Garbage Collection wurde auf allen Repositories erfolgreich ausgeführt.
-dashboard.resync_all_sshkeys=Überschreibe '.ssh/authorized_keys' Datei (Warnung: Keys, die nicht zu Gogs gehören gehen verloren)
-dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
-dashboard.resync_all_update_hooks=Überschreibe alle Hooks der Repositories (benötigt, wenn sich der Pfad in der Konfiguration ändert)
-dashboard.resync_all_update_hooks_success=Die Hooks aller Repositories sind erfolgreich neu geschrieben worden.
-
-dashboard.server_uptime=Server-Uptime
-dashboard.current_goroutine=Aktuelle Goroutines
-dashboard.current_memory_usage=Aktuelle Speichernutzung
-dashboard.total_memory_allocated=Zugeteilter Gesamtspeicher
-dashboard.memory_obtained=Erhaltener Speicher
-dashboard.pointer_lookup_times=Pointer Lookup Times
-dashboard.memory_allocate_times=Memory Allocate Times
-dashboard.memory_free_times=Memory Free Times
-dashboard.current_heap_usage=Aktuelle Heap-Auslastung
-dashboard.heap_memory_obtained=erhaltener Heap-Memory
-dashboard.heap_memory_idle=unbenutzter Heap-Memory
-dashboard.heap_memory_in_use=benutzter Heap-Memory
-dashboard.heap_memory_released=freigegebener Heap-Memory
-dashboard.heap_objects=Heap-Objekte
-dashboard.bootstrap_stack_usage=Bootstrap-Stack-Auslastung
-dashboard.stack_memory_obtained=erhaltener Stack-Memory
-dashboard.mspan_structures_usage=MSpan-Structures-Auslastung
-dashboard.mspan_structures_obtained=erhaltene MSpan-Structures
-dashboard.mcache_structures_usage=MCache-Structures-Auslastung
-dashboard.mcache_structures_obtained=erhaltene MCache-Structures
-dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
-dashboard.gc_metadata_obtained=erhaltene GC-Metadata
-dashboard.other_system_allocation_obtained=andere erhaltene System-Allokatoren
-dashboard.next_gc_recycle=nächster GC-Zyklus
-dashboard.last_gc_time=seit letztem GC-Zyklus
-dashboard.total_gc_time=gesamte GC-Zeit
-dashboard.total_gc_pause=gesamte GC-Pause
-dashboard.last_gc_pause=letzte GC-Pause
-dashboard.gc_times=GC-Takt
-
-users.user_manage_panel=Benutzer
-users.new_account=Neues Konto erstellen
-users.name=Name
-users.activated=Aktiviert
-users.admin=Admin
-users.repos=Repositorys
-users.created=Erzeugt
-users.send_register_notify=Sende Registrierungsbenachrichtigung an Benutzer
-users.new_success=Der neue Account '%s' wurde erfolgreich erstellt.
-users.edit=Bearbeiten
-users.auth_source=Authentifizierungsquelle
-users.local=Lokal
-users.auth_login_name=Authentifizierung-Loginnname
-users.password_helper=Leer lassen um es unverändert zu lassen.
-users.update_profile_success=Kontoprofil wurde erfolgreich aktualisiert.
-users.edit_account=Konto bearbeiten
-users.is_activated=Dieses Konto ist aktiviert
-users.is_admin=Dieses Konto hat Administratorrechte
-users.allow_git_hook=Dieses Konto ist berechtigt, Git-Hooks zu erstellen
-users.update_profile=Kontoprofil aktualisieren
-users.delete_account=Dieses Konto löschen
-users.still_own_repo=Dieses Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
-users.still_has_org=Dieses Konto ist noch Mitglied einer Organisation, bitte entferne diese Mitgliedschaft zuerst.
-users.deletion_success=Das Konto wurde erfolgreich gelöscht!
-
-orgs.org_manage_panel=Organisationenverwaltung
-orgs.name=Name
-orgs.teams=Teams
-orgs.members=Mitglieder
-
-repos.repo_manage_panel=Repositorys
-repos.owner=Besitzer
-repos.name=Name
-repos.private=Privat
-repos.watches=Beobachtungen
-repos.stars=Markierungen
-repos.issues=Issues
-
-auths.auth_manage_panel=Verwaltungspanel für die Authentifizierung
-auths.new=Neue Quelle hinzufügen
-auths.name=Name
-auths.type=Typ
-auths.enabled=aktiviert
-auths.updated=aktualisiert
-auths.auth_type=Authentifizierungstyp
-auths.auth_name=Authentifizierungsname
-auths.domain=Domain
-auths.host=Host
-auths.port=Port
-auths.bind_dn=DN binden
-auths.bind_password=Passwort binden
-auths.bind_password_helper=Warnung: Das Passwort wird im Klartext gespeichert. Benutze keinen Account mit hohen Zugriffsrechten.
-auths.user_base=Benutzer-Such-Basis
-auths.user_dn=Benutzer DN
-auths.attribute_name=Vorname Attribut
-auths.attribute_surname=Nachname Attribut
-auths.attribute_mail=E-Mail Attribut
-auths.filter=Benutzernamen Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentifizierungstyp
-auths.smtphost=SMTP-Host
-auths.smtpport=SMTP-Port
-auths.allowed_domains=Erlaubte Domains
-auths.allowed_domains_helper=Leer lassen für keine Einschränkungen. Mehrere Domains können durch Komma "," getrennt werden.
-auths.enable_tls=TLS-Verschlüsselung aktivieren
-auths.skip_tls_verify=TLS-Prüfung überspringen
-auths.pam_service_name=PAM Dienstname
-auths.enable_auto_register=Automatische Registrierung aktivieren
-auths.tips=Tipps
-auths.edit=Authentifizierungseinstellungen bearbeiten
-auths.activated=Diese Authentifizierung ist aktiviert
-auths.new_success=Neue Authentifizierung '%s' wurde erfolgreich hinzugefügt.
-auths.update_success=Die Authentifizierungseinstellungen wurden erfolgreich aktualisiert.
-auths.update=Authentifizierungseinstellungen aktualisieren
-auths.delete=Diese Authentifizierung löschen
-auths.delete_auth_title=Löschen der Authentifizierung
-auths.delete_auth_desc=Diese Authentifizierung wird gelöscht, möchtest du fortfahren?
-auths.deletion_success=Authentifizierung wurde erfolgreich entfernt!
-
-config.server_config=Server-Konfiguration
-config.app_name=Anwendungsname
-config.app_ver=Anwendungsversion
-config.app_url=Anwendungs-URL
-config.domain=Domain
-config.offline_mode=Offline-Modus
-config.disable_router_log=Router-Log deaktivieren
-config.run_user=Laufzeit-Benutzer
-config.run_mode=Laufzeit-Modus
-config.repo_root_path=Repository-Verzeichnis
-config.static_file_root_path=Verzeichnis für statische Dateien
-config.log_file_root_path=Log-Verzeichnis
-config.script_type=Skript-Typ
-config.reverse_auth_user=Nutzer bei Reverse-Authentifizierung
-config.db_config=Datenbankkonfiguration
-config.db_type=Typ
-config.db_host=Host
-config.db_name=Name
-config.db_user=Benutzer
-config.db_ssl_mode=SSL-Modus
-config.db_ssl_mode_helper=(nur für "postgres")
-config.db_path=Verzeichnis
-config.db_path_helper=(für "sqlite3" und "tidb")
-config.service_config=Service-Einstellungen
-config.register_email_confirm=E-Mail-Bestätigung bei Registrierung
-config.disable_register=Registrierung deaktivieren
-config.show_registration_button=Zeige die Schaltfläche Registrieren
-config.require_sign_in_view=Ansehen erfordert Registrierung
-config.enable_cache_avatar=Avatar-Cache aktivieren
-config.mail_notify=E-Mail-Benachrichtigung
-config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren
-config.enable_captcha=Captcha aktivieren
-config.active_code_lives=Aktivierungscode Lebensdauer
-config.reset_password_code_lives=Passwortcode Lebensdauer
-config.webhook_config=Webhook-Einstellungen
-config.queue_length=Warteschlangenlänge
-config.deliver_timeout=Zeitlimit für Zustellung
-config.skip_tls_verify=TLS verifikation überspringen
-config.mailer_config=Mailer-Einstellungen
-config.mailer_enabled=Aktiviert
-config.mailer_disable_helo=HELO Deaktivieren
-config.mailer_name=Name
-config.mailer_host=Host
-config.mailer_user=Benutzer
-config.oauth_config=OAuth-Einstellungen
-config.oauth_enabled=Aktiviert
-config.cache_config=Cache-Einstellungen
-config.cache_adapter=Cache-Adapter
-config.cache_interval=Cache-Intervall
-config.cache_conn=Cache-Anbindung
-config.session_config=Session-Einstellungen
-config.session_provider=Session-Provider
-config.provider_config=Provider-Einstellungen
-config.cookie_name=Cookie-Name
-config.enable_set_cookie=Cookies einschalten
-config.gc_interval_time=GC-Intervallzeit
-config.session_life_time=Session-Lebensdauer
-config.https_only=nur HTTPS
-config.cookie_life_time=Cookie-Lebensdauer
-config.picture_config=Bildeinstellungen
-config.picture_service=Bildservice
-config.disable_gravatar=Gravatar deaktivieren
-config.log_config=Log-Einstellungen
-config.log_mode=Log-Modus
-
-monitor.cron=Cron-Tasks
-monitor.name=Name
-monitor.schedule=Zeitplan
-monitor.next=nächste Ausführung
-monitor.previous=letzte Ausführung
-monitor.execute_times=Anzahl Ausführungen
-monitor.process=Laufende Prozesse
-monitor.desc=Beschreibung
-monitor.start=Startzeit
-monitor.execute_time=Ausführungszeit
-
-notices.system_notice_list=System-Mitteilungen
-notices.type=Typ
-notices.type_1=Repository
-notices.desc=Beschreibung
-notices.op=Op.
-notices.delete_success=System-Mitteilung erfolgreich gelöscht.
-
-[action]
-create_repo=hat Repository <a href="%s">%s</a> erstellt
-rename_repo=das Repository wurde umbenannt von <code>%[1]s</code> zu <a href="%[2]s">%[3]s</a>
-commit_repo=hat nach <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a> gepusht
-create_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> eröffnet`
-create_pull_request=`Pull-Anforderung erstellt <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
-merge_pull_request=`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 nach <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a> gepusht
-compare_2_commits=Zeige Vergleich dieser 2 Commits
-
-[tool]
-ago=vor
-from_now=ab sofort
-now=Jetzt
-1s=%s 1 Sekunde
-1m=%s 1 Minute
-1h=%s 1 Stunde
-1d=%s 1 Tag
-1w=%s 1 Woche
-1mon=%s 1 Monat
-1y=%s 1 Jahr
-seconds=%[2]s %[1]d Sekunden
-minutes=%[2]s %[1]d Minuten
-hours=%[2]s %[1]d Stunden
-days=%[2]s %[1]d Tagen
-weeks=%[2]s %[1]d Wochen
-months=%[2]s %[1]d Monaten
-years=%[2]s %[1]d Jahren
-raw_seconds=Sekunden
-raw_minutes=Minuten
-
-[dropzone]
-default_message=Für den Upload klicken oder die Datei hier ablegen.
-invalid_input_type=Dateien dieses Dateityps können nicht hochgeladen werden.
-file_too_big=Dateigröße ({{filesize}} MB) überschreitet die Maximalgröße ({{maxFilesize}} MB).
-remove_file=Datei entfernen
-
+app_desc=Ein einfacher, selbst gehosteter Git-Service, geschrieben in Go
+
+home=Home
+dashboard=Übersicht
+explore=Erkunden
+help=Hilfe
+sign_in=Anmelden
+sign_out=Abmelden
+sign_up=Registrieren
+register=Registrieren
+website=Webseite
+version=Version
+page=Seite
+template=Vorlage
+language=Sprache
+create_new=Erstellen...
+user_profile_and_more=Benutzerprofil und mehr
+signed_in_as=Eingeloggt als
+
+username=Benutzername
+email=E-Mail
+password=Passwort
+re_type=Passwort bestätigen
+captcha=Captcha
+
+repository=Repository
+organization=Organisation
+mirror=Spiegel
+new_repo=Neues Repository
+new_migrate=Neue Migration
+new_fork=Neues abgespaltetes Repository
+new_org=Neue Organisation
+manage_org=Organisationen verwalten
+admin_panel=Admin-Panel
+account_settings=Kontoeinstellungen
+settings=Einstellungen
+your_profile=Dein Profil
+your_settings=Deine Einstellungen
+
+news_feed=Neuigkeiten
+pull_requests=Pull Requests
+issues=Issues
+
+cancel=Abbrechen
+
+[search]
+search=Suchen...
+repository=Repository
+user=Benutzer
+issue=Problem
+code=Code
+
+[install]
+install=Installation
+title=Installation für erstmaligen Start
+docker_helper=Wenn Gogs innerhalb Docker läuft, lies dir bitte die <a target="_blank" href="%s">Guidelines</a> genau durch, bevor du irgendwas auf dieser Seite änderst!
+requite_db_desc=Gogs benötigt MySQL, PostgreSQL, SQLite3 oder TiDB.
+db_title=Datenbankeinstellungen
+db_type=Datenbanktyp
+host=Host
+user=Benutzer
+password=Passwort
+db_name=Datenbankname
+db_helper=Bitte verwenden sie die InnoDB-Engine mit utf8_general_ci Zeichensatz für MySQL.
+ssl_mode=SSL-Modus
+path=Pfad
+sqlite_helper=Der Dateipfad zur SQLite3 oder TiDB Datenbank.
+err_empty_db_path=SQLite3 oder TiDB Datenbankpfad darf nicht leer sein.
+err_invalid_tidb_name=Der TiDB Datenbankname darf kein "." und kein "-" enthalten.
+no_admin_and_disable_registration=Du kannst die Registrierung nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
+err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein.
+
+general_title=Allgemeine Einstellungen
+app_name=Anwendungsname
+app_name_helper=Hier den Organisationsnamen einfügen.
+repo_path=Repository Root-Verzeichnispfad
+repo_path_helper=Alle Git-Repositorys werden in diesem Verzeichnis gespeichert.
+run_user=Ausführender Benutzer
+run_user_helper=Der Benutzer muss die Zugriffsberechtigung für das Repository Root-Verzeichnis haben und der ausführende Benutzer von Gogs sein.
+domain=Domain
+domain_helper=Dies hat Auswirkung auf die SSH clone URLs.
+ssh_port=SSH Port
+ssh_port_helper=Die Portnummer deines SSH-Servers, lass dieses Feld leer, wenn du SSH deaktivieren möchtest.
+http_port=HTTP Port
+http_port_helper=Auf dieser Port Nummer wird Gogs erreichbar sein.
+app_url=Anwendungs-URL
+app_url_helper=Dies hat Auswirkung auf die HTTP/HTTPS clone URLs und für die E-Mails.
+
+optional_title=Optionale Einstellungen
+email_title=E-Mail-Service Einstellungen
+smtp_host=SMTP Host
+smtp_from=Von
+smtp_from_helper=Absender-Adresse nach RFC 5322. Entweder nur eine E-Mail Adresse oder im folgenden Format: "Name" <email@example.com>.
+mailer_user=Sender E-mail
+mailer_password=Sender Passwort
+register_confirm=Registrierungsbestätigung aktivieren
+mail_notify=E-Mail-Benachrichtigungen aktivieren
+server_service_title=Server- und sonstige Diensteinstellungen
+offline_mode=Offline-Modus aktivieren
+offline_mode_popup=Deaktiviere das CDN auch im Produktionsmodus, alle Dateien werden von diesem Server ausgeliefert.
+disable_gravatar=Gravatar-Dienst deaktivieren
+disable_gravatar_popup=Gravatar und benutzerdefinierte Quellen deaktivieren, alle Avatare werden standardmäßig vom Nutzer hochgeladen oder sind Standardavatare.
+disable_registration=Benutzerregistrierung deaktivieren
+disable_registration_popup=Deaktiviere die Benutzerregistrierung, nur Administratoren können Benutzerkonten anlegen.
+enable_captcha=Captcha aktivieren
+enable_captcha_popup=Benötigt Captcha-Überprüfung für Registrierung durch Benutzer.
+require_sign_in_view=Erfordere Anmeldung, um Inhalte anzusehen
+require_sign_in_view_popup=Lediglich angemeldete Benutzer können Inhalte betrachten, Gäste sehen nur die Anmelden/Registrieren Seite.
+admin_setting_desc=Sie müssen jetzt noch keinen Administrator-Account anlegen. Der erste Benutzer ("ID=1") erhält automatisch Administrationsrechte.
+admin_title=Konto-Einstellungen für den Administrator
+admin_name=Benutzername
+admin_password=Passwort
+confirm_password=Passwort bestätigen
+admin_email=Administrator E-Mail
+install_gogs=Gogs installieren
+test_git_failed=Fehler beim Test des 'git' Kommandos: %v
+sqlite3_not_available=Ihre Gogs-Version unterstützt kein SQLite3, bitte lade dir die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
+invalid_db_setting=Datenbank-Einstellungen sind nicht korrekt: %v
+invalid_repo_path=Repository Root-Verzeichnis ist ungültig: %v
+run_user_not_match=Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
+save_config_failed=Fehler beim Speichern der Konfiguration: %v
+invalid_admin_setting=Admin-Konto Einstellungen sind ungültig: %v
+install_success=Herzlich Willkommen! Wir sind froh, dass du dich für Gogs entschieden hast. Wir wünschen viel Vergnügen damit.
+
+[home]
+uname_holder=Benutzername oder E-Mail
+password_holder=Passwort
+switch_dashboard_context=Dashboard Kontext wechseln
+my_repos=Meine Repositories
+collaborative_repos=Gemeinschaftliche Repositories
+my_orgs=Meine Organisationen
+my_mirrors=Meine Spiegel
+view_home=%s betrachten
+
+issues.in_your_repos=In deinen Repositories
+
+[explore]
+repos=Repositories
+
+[auth]
+create_new_account=Neues Konto erstellen
+register_hepler_msg=Du hast bereits ein Konto? Jetzt anmelden!
+social_register_hepler_msg=Du hast bereits ein soziales Konto? Jetzt verknüpfen!
+disable_register_prompt=Es tut uns leid, die Registrierung wurde deaktiviert. Bitte wende dich an den Administrator.
+disable_register_mail=Es tut uns leid, die Bestätigung der Registrierungs-E-Mail wurde deaktiviert.
+remember_me=Angemeldet bleiben
+forgot_password=Passwort vergessen
+forget_password=Passwort vergessen?
+sign_up_now=Du willst ein Konto? Jetzt registrieren!
+confirmation_mail_sent_prompt=Eine neue Bestätigungs-E-Mail wurde an <b>%s</b> gesendet. Kontrolliere dein Postfach innerhalb der nächsten %d Stunden, um die Registrierung abzuschließen.
+active_your_account=Aktiviere dein Konto
+resent_limit_prompt=Es tut uns leid, du sendest zu häufig Aktivierungs-E-Mails. Bitte warte 3 Minuten.
+has_unconfirmed_mail=Hallo %s, du hast eine unbestätigte E-Mail-Adresse (<b>%s</b>). Wenn du keine Bestätigungs-E-Mail erhalten hast oder eine neue benötigst, klicke bitte auf den folgenden Button.
+resend_mail=Hier klicken, um deine Aktivierungs-E-Mail erneut zu versenden
+email_not_associate=Diese E-Mail-Adresse ist mit keinem Konto verknüpft.
+send_reset_mail=Hier klicken, um die E-Mail zum Passwort-zurücksetzen erneut zu versenden
+reset_password=Passwort zurücksetzen
+invalid_code=Es tut uns leid, der Bestätigungscode ist abgelaufen oder ungültig.
+reset_password_helper=Hier klicken, um das Passwort zurückzusetzen
+password_too_short=Das Passwort muss mindenstens 6 Zeichen lang sein
+
+[mail]
+activate_account=Bitte aktiviere dein Konto
+activate_email=Verifiziere deine E-Mail-Adresse
+reset_password=Setze dein Passwort zurück
+register_success=Registrierung erfolgreich, Willkommen
+register_notify=Willkommen an Bord
+
+[modal]
+yes=Ja
+no=Nein
+modify=Ändern
+
+[form]
+UserName=Benutzername
+RepoName=Repository-Name
+Email=E-Mail-Adresse
+Password=Passwort
+Retype=Passwort bestätigen
+SSHTitle=SSH-Schlüsselname
+HttpsUrl=HTTPS-URL
+PayloadUrl=Payload-URL
+TeamName=Teamname
+AuthName=Authentifizierungsname
+AdminEmail=Admin E-mail
+
+require_error=` darf nicht leer sein.`
+alpha_dash_error=` muss ausschließlich alphanumerische Zeichen und "-_" enthalten.`
+alpha_dash_dot_error=` muss ausschließlich alphanumerische Zeichen und ".-_" enthalten.`
+size_error=` muss die Größe %s haben.`
+min_size_error=` muss mindestens %s Zeichen enthalten.`
+max_size_error=` darf höchstens %s Zeichen enthalten.`
+email_error=` ist keine gültige E-Mail-Adresse.`
+url_error=` ist keine gültige URL.`
+include_error=`muss den Substring ‚%s‘ enthalten.`
+unknown_error=Unbekannter Fehler:
+captcha_incorrect=Captcha stimmt nicht überein.
+password_not_match=Die Passwörter stimmen nicht überein.
+
+username_been_taken=Benutzername ist bereits vergeben.
+repo_name_been_taken=Repository-Name ist bereits vergeben.
+org_name_been_taken=Organisationsname ist bereits vergeben.
+team_name_been_taken=Teamname ist bereits vergeben.
+email_been_used=E-Mail-Adresse wird bereits verwendet.
+illegal_team_name=Teamname enthält ungültige Zeichen.
+username_password_incorrect=Benutzername oder Passwort ist nicht korrekt.
+enterred_invalid_repo_name=Bitte stelle sicher, dass der eingegebene Repository-Name richtig ist.
+enterred_invalid_owner_name=Bitte stelle sicher, dass der eingegebene Besitzername richtig ist.
+enterred_invalid_password=Bitte stelle sicher, dass das eingegebene Passwort richtig ist.
+user_not_exist=Angegebener Benutzer existiert nicht.
+last_org_owner=Der zu entfernende Benutzer ist der letzte Besitzer einer Organisation. Diese müssen zuerst gelöscht oder übertragen werden.
+
+invalid_ssh_key=Leider sind wir nicht in der Lage, deinen SSH-Schlüssel zu überprüfen: %s
+unable_verify_ssh_key=Gogs kann deinen SSH-Schlüssel nicht verifizieren, nimmt aber an, dass er gültig ist. Bitte stelle dies selbst sicher.
+auth_failed=Authentifizierung fehlgeschlagen: %v
+
+still_own_repo=Dein Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
+still_has_org=Du bist noch Mitglied einer Organisation, bitte lösche zunächst diese Mitgliedschaft.
+org_still_own_repo=Diese Organisation besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
+
+still_own_user=Diese Authentifizierung wird noch von einigen Benutzern genutzt. Entferne diese zuvor und lösche erneut.
+
+target_branch_not_exist=Ziel-Branch existiert nicht
+
+[user]
+change_avatar=Ändere dein Profilbild auf gravatar.com
+change_custom_avatar=Ändere deinen Avatar in den Einstellungen
+join_on=Registriert
+repositories=Repositories
+activity=Öffentliche Aktivität
+followers=Followers
+starred=Markiert
+following=Folgt
+
+form.name_reserved=Der Benutzername '%s' ist reserviert.
+form.name_pattern_not_allowed=Benutzernamens-Muster "%s" ist nicht zulässig.
+
+[settings]
+profile=Profil
+password=Passwort
+ssh_keys=SSH-Schlüssel
+social=Soziale Konten
+applications=Anwendungen
+orgs=Organisationen
+delete=Konto löschen
+uid=Uid
+
+public_profile=Öffentliches Profil
+profile_desc=Deine E-Mail-Adresse ist öffentlich einsehbar und wird für accountspezifische Benachrichtigungen verwendet, sowie für alle web-basierten Funktionen, die über die Seite gemacht werden.
+full_name=Vollständiger Name
+website=Webseite
+location=Standort
+update_profile=Profil aktualisieren
+update_profile_success=Ihr Profil wurde erfolgreich aktualisiert.
+change_username=Benutzername geändert
+change_username_prompt=Diese Änderung wird sich auf die Linkbezüge zu deinem Account auswirken.
+continue=Weiter
+cancel=Abbrechen
+
+enable_custom_avatar=Aktiviere benutzerdefinierten Avatar
+enable_custom_avatar_helper=Aktiviere dies, um deinen Avatar nicht von Gravatar zu laden
+choose_new_avatar=Neuen Avatar auswählen
+update_avatar=Avatar-Einstellung aktualisieren
+uploaded_avatar_not_a_image=Die hochgeladene Datei ist kein Bild.
+no_custom_avatar_available=Kein benutzerdefinierter Avatar verfügbar, Aktivierung ist nicht möglich.
+update_avatar_success=Deine Avatar-Einstellung wurde aktualisiert.
+
+change_password=Passwort ändern
+old_password=Aktuelles Passwort
+new_password=Neues Passwort
+retype_new_password=Neues Passwort erneut eingeben
+password_incorrect=Aktuelles Passwort ist nicht korrekt.
+change_password_success=Passwort geändert. Du kannst dich jetzt mit deinem neuen Passwort anmelden.
+
+emails=E-Mail-Adressen
+manage_emails=E-Mail-Adressen verwalten
+email_desc=Deine primäre E-Mail-Adresse wird für Benachrichtigungen und andere Funktionen verwendet.
+primary=Primär
+primary_email=Als primäre Adresse verwenden
+delete_email=Löschen
+email_deletion=E-Mail löschen
+email_deletion_desc=Das Löschen dieser E-Mail Adresse wird alle Informationen entfernen, die mit dieser E-Mail Adresse verknüpft sind. Willst du fortfahren?
+email_deletion_success=E-Mail-Adresse wurde erfolgreich gelöscht!
+add_new_email=Neue E-Mail-Adresse hinzufügen
+add_email=E-Mail-Adresse hinzufügen
+add_email_confirmation_sent=Eine neue Bestätigungsmail wurde an '%s' gesendet, bitte überprüfen Sie Ihren Posteingang innerhalb von %d Stunden um die Bestätigung abzuschließen.
+add_email_success=Deine neue E-Mail-Adresse wurde erfolgreich hinzugefügt.
+
+manage_ssh_keys=SSH-Schlüssel verwalten
+add_key=SSH-Schlüssel hinzufügen
+ssh_desc=Dies ist eine Liste aller SSH-Schlüssel, die mit deinem Konto verknüpft sind. Bitte entferne alle Schlüssel, die dir nicht bekannt sind.
+ssh_helper=<strong>Du brauchst Hilfe?</strong> Hier ist eine Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder <a href="%s">Problemlö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 dem selben Namen existiert bereits.
+key_name=Schlüsselname
+key_content=Inhalt
+add_key_success=Neuer SSH-Schlüssel '%s' wurde erfolgreich hinzugefügt!
+delete_key=SSH-Schlüssel löschen
+ssh_key_deletion=SSH-Schlüssel entfernen
+ssh_key_deletion_desc=Das Löschen dieses SSH-Schlüssels wird alle zugehörigen Zugriffsberechtigungen auf deinen Account entfernen. Möchtest du fortfahren?
+ssh_key_deletion_success=SSH-Schlüssel wurde erfolgreich gelöscht!
+add_on=Hinzugefügt am
+last_used=Zuletzt verwendet am
+no_activity=Keine neuen Aktivitäten
+key_state_desc=Dieser Schlüssel wurde in den letzten 7 Tagen verwendet
+token_state_desc=Dieses Token wurde in den letzten 7 Tagen benutzt
+
+manage_social=Verknüpfte soziale Konten verwalten
+social_desc=Dies ist eine Liste verknüpfter sozialer Konten. Bitte entferne alle Verknüpfungen, die dir nicht bekannt sind.
+unbind=Verknüpfung entfernen
+unbind_success=Die Verknüpfung zum sozialen Konto wurde entfernt.
+
+manage_access_token=Verwaltung persönlicher Zugangs-Tokens
+generate_new_token=Neuen Token erzeugen
+tokens_desc=Von dir generierte Token können benutzt werden, um auf die Gogs APIs zuzugreifen.
+new_token_desc=Momentan erlaubt jeder Token vollen Zugriff auf dein Konto.
+token_name=Token-Name
+generate_token=Token generieren
+generate_token_succees=Neuer Zugangs-Token wurde erstellt! Stelle sicher, dass du den Token kopiert hast, da du ihn später nicht mehr ansehen kannst!
+delete_token=Löschen
+access_token_deletion=Entfernung von persönlichen Token
+access_token_deletion_desc=Das Löschen dieses persönlichen Tokens wird alle zugehörigen Zugriffe der Anwendung entfernen. Möchtest du fortfahren?
+delete_token_success=Persönlicher Zugriffs-Token wurde erfolgreich entfernt! Vergiss nicht deine Anwendung zu aktualisieren.
+
+delete_account=Konto löschen
+delete_prompt=Diese Aktion wird dein Konto dauerhaft löschen und kann <strong>NICHT</strong> rückgängig gemacht werden!
+confirm_delete_account=Löschen
+delete_account_title=Account löschen
+delete_account_desc=Du bist dabei dieses Konto dauerhaft zu löschen, möchtest du wirklich fortfahren?
+
+[repo]
+owner=Besitzer
+repo_name=Repository-Name
+repo_name_helper=Gute Repository-Namen sind kurz, einprägsam und <strong>einzigartig</strong>.
+visibility=Sichtbarkeit
+visiblity_helper=Diese 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=Du brauchst Hilfe beim Klonen? Hier gibt es <a target="_blank" href="%s">Hilfe</a>!
+fork_repo=Repository abspalten
+fork_from=Forken von
+fork_visiblity_helper=Die Sichtbarkeit von geforkten Repositories ist nicht veränderbar.
+repo_desc=Beschreibung
+repo_lang=Sprache
+repo_lang_helper=.gitignore Dateien auswählen
+license=Lizenz
+license_helper=Wähle eine Lizenz aus
+readme=Readme
+readme_helper=Readme Vorlage auswählen
+auto_init=Repository mit ausgewählten Dateien und Vorlagen initialisieren
+create_repo=Repository erstellen
+default_branch=Standard-Branch
+mirror_interval=Spiegel-Intervall (in Stunden)
+watchers=Beobachter
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Repository-Name '%s' ist bereits vergeben.
+form.name_pattern_not_allowed=Repository-Namesmuster '%s' ist nicht zulässig.
+
+need_auth=Autorisierung benötigt
+migrate_type=Migrationstyp
+migrate_type_helper=Diese Repository wird ein <span class="text blue">Spiegel</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.
+migrate.permission_denied=Ihnen fehlen die Rechte zum Importieren lokaler Repositorys.
+migrate.invalid_local_path=Lokaler Pfad ist ungültig, er existiert nicht oder ist kein Ordner.
+migrate.failed=Migration failed: %v
+
+forked_from=Geforkt von
+fork_from_self=Sie können keine Repository forken, welche ihnen gehört!
+copy_link=Kopieren
+copy_link_success=Kopiert!
+copy_link_error=Drücke ⌘-C oder Strg-C zum Kopieren
+copied=Kopiert OK
+unwatch=Nicht mehr beobachten
+watch=Beobachten
+unstar=Markierung aufheben
+star=Markieren
+fork=Fork
+
+no_desc=Keine Beschreibung
+quick_guide=Kurzanleitung
+clone_this_repo=Diese Repository klonen
+create_new_repo_command=Erstelle eine neue Repository mittels Kommandozeile
+push_exist_repo=Übertrage eine existierende Repository von der Kommandozeile
+repo_is_empty=Das Repository ist leer, bitte komm später wieder!
+
+branch=Branch
+tree=Struktur
+filter_branch_and_tag=Nach Zweig oder Tag filtern
+branches=Branches
+tags=Tags
+issues=Issues
+pulls=Pull-Anforderung
+labels=Label
+milestones=Meilensteine
+commits=Commits
+releases=Veröffentlichungen
+file_raw=Roh
+file_history=Verlauf
+file_view_raw=Ansicht Roh
+file_permalink=Permalink
+
+commits.commits=Commits
+commits.search=Durchsuche Commits
+commits.find=Finden
+commits.author=Author
+commits.message=Nachricht
+commits.date=Datum
+commits.older=Älter
+commits.newer=Neuer
+
+issues.new=Neuer Issue
+issues.new.labels=Labels
+issues.new.no_label=Kein Label
+issues.new.clear_labels=Labels entfernen
+issues.new.milestone=Meilenstein
+issues.new.no_milestone=Kein Meilenstein
+issues.new.clear_milestone=Meilenstein entfernen
+issues.new.open_milestone=Offene Meilensteine
+issues.new.closed_milestone=Geschlossene Meilensteine
+issues.new.assignee=Zuständiger
+issues.new.clear_assignee=Zuständigen entfernen
+issues.new.no_assignee=Kein Zuständiger
+issues.create=Issue erstellen
+issues.new_label=Neues Label
+issues.new_label_placeholder=Label-Name...
+issues.create_label=Label erstellen
+issues.open_tab=%d offen
+issues.close_tab=%d geschlossen
+issues.filter_label=Label
+issues.filter_label_no_select=Kein Label gewählt
+issues.filter_milestone=Meilenstein
+issues.filter_milestone_no_select=Kein ausgewählter Meilenstein
+issues.filter_assignee=Zuständiger
+issues.filter_assginee_no_select=Kein ausgewählter Zuständiger
+issues.filter_type=Typ
+issues.filter_type.all_issues=Alle Probleme
+issues.filter_type.assigned_to_you=Dir zugewiesen
+issues.filter_type.created_by_you=Erstellt von dir
+issues.filter_type.mentioning_you=Erwähnen dich
+issues.filter_sort=Sortieren
+issues.filter_sort.latest=Neueste
+issues.filter_sort.oldest=Älteste
+issues.filter_sort.recentupdate=Zuletzt 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_fake=eröffnet %[1]s von %[2]s
+issues.previous=Vorherige Seite
+issues.next=Nächste Seite
+issues.open_title=Offen
+issues.closed_title=Geschlossen
+issues.num_comments=%d Kommentare
+issues.commented_at=`kommentiert in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Hier gibt es bis jetzt noch keinen Inhalt.
+issues.close_issue=Schließen
+issues.close_comment_issue=Kommentieren und schließen
+issues.reopen_issue=Wiedereröffnen
+issues.reopen_comment_issue=Kommentieren und wiedereröffnen
+issues.create_comment=Kommentieren
+issues.closed_at=`geschlossen in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`wiedereröffnet in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`referenziert dieses Issue aus einem Commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Ersteller
+issues.admin=Admin
+issues.owner=Besitzer
+issues.sign_up_for_free=Kostenlos anmelden
+issues.sign_in_require_desc=um dieser Konverstion beizutreten. Hast du bereits einen Account? <a href="%s">Anmelden zum kommentieren</a>
+issues.edit=Bearbeiten
+issues.cancel=Abbrechen
+issues.save=Speichern
+issues.label_title=Label Name
+issues.label_color=Label Farbe
+issues.label_count=%d Labels
+issues.label_open_issues=%d offene Issues
+issues.label_edit=Bearbeiten
+issues.label_delete=Löschen
+issues.label_modify=Label Änderung
+issues.label_deletion=Label Löschung
+issues.label_deletion_desc=Das Löschen eines Labels entfernt es von allen verknüpften Issues. Möchtest du fortfahren?
+issues.label_deletion_success=Label wurde erfolgreich gelöscht!
+
+pulls.new=Neuer Pull-Request
+pulls.compare_changes=Änderungen vergleichen
+pulls.compare_changes_desc=Vergleiche zwei Branches und erstelle einen Pull Request für die Änderungen.
+pulls.compare_base=Base
+pulls.compare_compare=vergleichen
+pulls.filter_branch=Filter Branch
+pulls.no_results=Keine Ergebnisse verfügbar.
+pulls.nothing_to_compare=Es ist nichts zu vergleichen, da Base- und Head-Branch gleich sind.
+pulls.has_pull_request=`Es existiert bereits eine Pull-Anforderung 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=%[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
+pulls.tab_conversation=Konversation
+pulls.tab_commits=Commits
+pulls.tab_files=Dateien geändert
+pulls.reopen_to_merge=Bitte diese Pull-Anforderung wiedereröffnen, um die Merge-Operation auszuführen.
+pulls.merged=Zusammengeführt
+pulls.has_merged=Dieser Pull-Request wurde erfolgreich zusammengeführt!
+pulls.data_broken=Die Daten dieser Pull-Anforderung sind defekt aufgrund des Löschens von Fork-Informationen.
+pulls.is_checking=Die Konfliktprüfung ist in Arbeit. Bitte aktualisiere die Seite in wenigen Momenten.
+pulls.can_auto_merge_desc=Du kannst eine Auto-Merge Operation auf diese Pull-Anforderung durchführen.
+pulls.cannot_auto_merge_desc=Es kann keine Auto-Merge Operation durchgeführt werden, da es Konflikte zwischen den Commits gibt.
+pulls.cannot_auto_merge_helper=Bitte benutze ein Kommandozeilentool, um den Konflikt zu lösen.
+pulls.merge_pull_request=Pull-Request zusammenführen
+pulls.open_unmerged_pull_exists=`Du kannst die Pull-Anforderung nicht wiedereröffnen, da bereits eine offene Pull-Anforderung (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Merging wartet.`
+
+milestones.new=Neuer Meilenstein
+milestones.open_tab=%d offen
+milestones.close_tab=%d geschlossen
+milestones.closed=Geschlossen %s
+milestones.no_due_date=Kein Fälligkeitsdatum
+milestones.open=Offen
+milestones.close=Geschlossen
+milestones.new_subheader=Erstelle Meilenstein zum Organisieren der Issues.
+milestones.create=Meilenstein erstellen
+milestones.title=Titel
+milestones.desc=Beschreibung
+milestones.due_date=Fälligkeitsdatum (optional)
+milestones.clear=Bereinigen
+milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-mm-dd' haben.
+milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
+milestones.edit=Meilenstein bearbeiten
+milestones.edit_subheader=Benutze eine bessere Beschreibung für die Meilensteine, um die Menschen nicht zu verwirren.
+milestones.cancel=Abbrechen
+milestones.modify=Meilenstein ändern
+milestones.edit_success=Änderungen des Meilensteins '%s' wurden erfolgreich gespeichert!
+milestones.deletion=Meilenstein löschen
+milestones.deletion_desc=Das Löschen dieses Meilensteins wird alle zugehörigen Informationen in allen Issues entfernen. Wirklich fortfahren?
+milestones.deletion_success=Meilenstein erfolgreich gelöscht!
+
+settings=Einstellungen
+settings.options=Optionen
+settings.collaboration=Zusammenarbeit
+settings.hooks=Webhooks
+settings.githooks=Git-Hooks
+settings.basic_settings=Grundeinstellungen
+settings.danger_zone=Gefahrenzone
+settings.site=Offizielle Webseite
+settings.update_settings=Einstellungen speichern
+settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf Repositories beziehen.
+settings.transfer=Besitz übertragen
+settings.transfer_desc=Übertrage diese Repository auf einen anderen Benutzer oder eine Organisation in der du Admin-Rechte hast.
+settings.new_owner_has_same_repo=Der neue Eigentümer hat bereits ein Repository mit dem gleichen Namen.
+settings.delete=Repository löschen
+settings.delete_desc=Wenn diese Repository gelöscht ist, gibt es keinen Weg zurück. Bitte sei behutsam.
+settings.transfer_notices_1=- Du wirst den Zugang verlieren, wenn der neue Besitzer ein individueller Benutzer ist.
+settings.transfer_notices_2=- Du wirst den Zugang behalten, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
+settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen:
+settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
+settings.delete_notices_2=- Die Operation wird alles, was mit dieser Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Benutzern.
+settings.delete_notices_fork_1=- Wenn dies eine öffentliche Repository ist, werden nach der Löschung alle Forks unabhängig.
+settings.delete_notices_fork_2=- Wenn dies eine private Repository ist, dann werden gleichzeitig alle Forks entfernt.
+settings.delete_notices_fork_3=Wenn alle Forks erhalten bleiben sollen, dann muss zuerst die Sichtbarkeit der Repository auf öffentlich gesetzt werden.
+settings.update_settings_success=Repository-Optionen aktualisiert.
+settings.transfer_owner=Neuer Besitzer
+settings.make_transfer=übertragen
+settings.transfer_succeed=Die Repository wurde erfolgreich übertragen.
+settings.confirm_delete=Löschen
+settings.add_collaborator=Mitarbeiter hinzufügen
+settings.add_collaborator_success=Mitarbeiter hinzugefügt
+settings.remove_collaborator_success=Mitarbeiter entfernt
+settings.search_user_placeholder=Benutzer suchen...
+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 deiner Repository passiert. Gogs sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr in unserer <a target="_blank" 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!
+settings.webhook.request=Anfrage
+settings.webhook.response=Rückmeldung
+settings.webhook.headers=Kopfzeilen
+settings.webhook.payload=Nutzdaten
+settings.webhook.body=Inhalt
+settings.githooks_desc=Git-Hooks werden von Git selbst bereitgestellt. Du kannst die Dateien der unterstützten Hooks in der Liste unten bearbeiten, um eigene Operationen einzubinden.
+settings.githook_edit_desc=Wenn ein Hook inaktiv ist, wird der Standardinhalt benutzt. Lasse den Inhalt leer, um den Hook zu deaktivieren.
+settings.githook_name=Hook-Name
+settings.githook_content=Hook-Inhalt
+settings.update_githook=Aktualisiere Hook
+settings.add_webhook_desc=Gogs sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Du kannst auch angeben, welches Datenformat du erhalten willst (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen findest du im <a target="_blank" href="%s">Webhooks Guide</a>.
+settings.payload_url=Payload-URL
+settings.content_type=Inhaltstyp
+settings.secret=Secret
+settings.slack_username=Benutzername
+settings.slack_icon_url=Icon URL
+settings.slack_color=Farbe
+settings.event_desc=Welche Ereignisse sollen diesen Webhook auslösen?
+settings.event_push_only=Nur das <code>push</code>-Ereignis.
+settings.event_send_everything=Ich brauche <strong>alles</strong>.
+settings.event_choose=Lass mich auswählen, was ich brauche.
+settings.event_create=Erstellen
+settings.event_create_desc=Branch/Tag erstellt
+settings.event_push=Push
+settings.event_push_desc=Git push auf eine Repository
+settings.active=Aktiv
+settings.active_helper=Ereignisdetails werden ausgeliefert, wenn dieser Webhook ausgelöst wird.
+settings.add_hook_success=Webhook hinzugefügt
+settings.update_webhook=Webhook aktualisieren
+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 deiner Repository hinzu.
+settings.slack_token=Token
+settings.slack_domain=Domain
+settings.slack_channel=Kanal
+settings.deploy_keys=Deploy-Keys
+settings.add_deploy_key=Deploy-Key hinzufügen
+settings.no_deploy_keys=Du hast noch keine Deploy-Schlüssel hinzugefügt.
+settings.title=Titel
+settings.deploy_key_content=Inhalt
+settings.key_been_used=Deploy-Schlüssel wurde verwendet.
+settings.key_name_used=Ein Deploy-Schlüssel mit diesem Namen existiert bereits.
+settings.add_key_success=Der Deploy-Schlüssel '%s' wurde erfolgreich hinzugefügt!
+settings.deploy_key_deletion=Deploy-Key löschen
+settings.deploy_key_deletion_desc=Nach der Löschung dieses Deploy-Keys werden zugehörige Zugriffe auf diese Repository nicht mehr möglich sein. Möchtest du wirklich fortfahren?
+settings.deploy_key_deletion_success=Deploy-Key wurde erfolgreich gelöscht!
+
+diff.browse_source=Quellcode durchsuchen
+diff.parent=Ursprung
+diff.commit=Commit
+diff.data_not_available=Keine Diff-Daten verfügbar.
+diff.show_diff_stats=Diff-Statistik anzeigen
+diff.stats_desc=<strong> %d geänderte Dateien</strong> mit <strong>%d neuen Zeilen</strong> und <strong>%d gelöschten Zeilen</strong>
+diff.bin=BIN
+diff.view_file=Datei anzeigen
+
+release.releases=Releases
+release.new_release=Neues Release
+release.draft=Entwurf
+release.prerelease=Pre-Release
+release.stable=Endversion
+release.edit=bearbeiten
+release.ahead=<strong>%d</strong> Commits zu %s seit diesem Release
+release.source_code=Quelltext
+release.new_subheader=Versionen des Projekts veröffentlichen.
+release.edit_subheader=Detaillierte Änderungsprotokolle können Benutzern helfen zu verstehen, was verbessert wurde.
+release.tag_name=Tag-Name
+release.target=Ziel
+release.tag_helper=Wähle ein neues Tag oder erstelle ein Tag beim Veröffentlichen.
+release.title=Titel
+release.content=Inhalt
+release.write=Schreiben
+release.preview=Vorschau
+release.loading=Laden…
+release.prerelease_desc=Dies ist eine Pre-Release-Version
+release.prerelease_helper=Wir möchten darauf hinweisen, dass dieses Release nicht für den produktiven Einsatz gedacht ist.
+release.cancel=Abbrechen
+release.publish=Release veröffentlichen
+release.save_draft=Entwurf speichern
+release.edit_release=Release bearbeiten
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Name der Organisation
+org_full_name_holder=Vollständiger Name der Organisation
+org_name_helper=Gute Namen von Organisationen sind kurz und einprägsam.
+create_org=Organisation erstellen
+repo_updated=Aktualisiert
+people=Personen
+invite_someone=Benutzer einladen
+teams=Teams
+lower_members=Mitglieder
+lower_repositories=Repositories
+create_new_team=Neues Team erstellen
+org_desc=Beschreibung
+team_name=Teamname
+team_desc=Beschreibung
+team_name_helper=Verwende diesen Namen, um dich auf dieses Team zu beziehen.
+team_desc_helper=Was hat es mit diesem Team auf sich?
+team_permission_desc=Welche Berechtigungsstufe soll das Team haben?
+
+form.name_reserved=Organisationsname '%s' ist bereits vergeben.
+form.name_pattern_not_allowed=Organisations-Namensmuster '%s' ist nicht zulässig.
+
+settings=Einstellungen
+settings.options=Optionen
+settings.full_name=Vollständiger Name
+settings.website=Webseite
+settings.location=Standort
+settings.update_settings=Einstellungen speichern
+settings.update_setting_success=Organisationseinstellungen aktualisiert
+settings.change_orgname_prompt=Diese Änderung wird sich auf die Linkbezüge zur Organisation auswirken.
+settings.update_avatar_success=Avatareinstellung für die Organisation wurde erfolgreich aktualisiert.
+settings.delete=Organisation löschen
+settings.delete_account=Diese Organisation löschen
+settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
+settings.confirm_delete_account=Löschen
+settings.delete_org_title=Organisation löschen
+settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht, möchtest du fortfahren?
+settings.hooks_desc=Füge Webhooks hinzu, die für <strong>alle</strong> Repositories dieser Organisation ausgelöst werden.
+
+members.public=Öffentlich
+members.public_helper=Privat machen
+members.private=Privat
+members.private_helper=Öffentlich machen
+members.owner=Besitzer
+members.member=Mitglied
+members.conceal=Verbergen
+members.remove=Entfernen
+members.leave=Verlassen
+members.invite_desc=Benutzernamen eingeben, um ihn als neues Mitglied in %s einzuladen:
+members.invite_now=Jetzt einladen
+
+teams.join=Beitreten
+teams.leave=Verlassen
+teams.read_access=Lesezugriff
+teams.read_access_helper=Dieses Team wird Repositorys einsehen und klonen können.
+teams.write_access=Schreibzugriff
+teams.write_access_helper=Dieses Team wird die Repositories einsehen und Push Operationen ausführen können.
+teams.admin_access=Adminzugriff
+teams.admin_access_helper=Dieses Team wird pull- und push-Rechte für die Repositorys haben und Mitarbeiter einladen können.
+teams.no_desc=Dieses Team hat keine Beschreibung
+teams.settings=Einstellungen
+teams.owners_permission_desc=Besitzer haben vollen Zugriff auf <strong>alle Repositorys</strong> und <strong>Admin Rechte</strong> für diese Organisation.
+teams.members=Teammitglieder
+teams.update_settings=Einstellungen aktualisieren
+teams.delete_team=Dieses Team löschen
+teams.add_team_member=Teammitglied hinzufügen
+teams.delete_team_title=Team löschen
+teams.delete_team_desc=Dieses Team wird gelöscht, möchtest du fortfahren? Mitglieder dieses Teams verlieren möglicherweise ihren Zugang zu einigen Repositories.
+teams.delete_team_success=Team gelöscht
+teams.read_permission_desc=Dieses Team erlaubt <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
+teams.write_permission_desc=Dieses Team erlaubt <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und Push Operationen ausführen.
+teams.admin_permission_desc=Diese Team erlaubt <strong>Adminzugriff</strong>: Mitglieder dieses Teams können pullen, pushen und dem Team Mitarbeiter hinzufügen.
+teams.repositories=Team-Repositorys
+teams.add_team_repository=Team-Repository hinzufügen
+teams.remove_repo=Entfernen
+teams.add_nonexistent_repo=Die Repository, welche du hinzufügen möchtest, existiert nicht. Bitte erstelle diese zuerst.
+
+[admin]
+dashboard=Dashboard
+users=Benutzer
+organizations=Organisationen
+repositories=Repositorys
+authentication=Authentifizierung
+config=Konfiguration
+notices=System-Mitteilungen
+monitor=Monitoring
+first_page=Erste
+last_page=Letzte
+total=Total: %d
+
+dashboard.statistic=Statistik
+dashboard.operations=Operationen
+dashboard.system_status=System-Monitor-Status
+dashboard.statistic_info=GoGS Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositorys, <b>%d</b> Beobachtungen, <b>%d</b> Markierungen, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> soziale Konten, <b>%d</b> Folgende, <b>%d</b> Spiegel, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Milestones, <b>%d</b> Labels, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
+dashboard.operation_name=Name der Operation
+dashboard.operation_switch=Switch
+dashboard.operation_run=Ausführen
+dashboard.clean_unbind_oauth=ungebundene OAuths bereinigen
+dashboard.clean_unbind_oauth_success=Alle ungebundenen OAuth-Tokens wurden gelöscht.
+dashboard.delete_inactivate_accounts=inaktive Konten löschen
+dashboard.delete_inactivate_accounts_success=Alle inaktiven Konten wurden erfolgreich gelöscht.
+dashboard.delete_repo_archives=Alle Repository-Archive löschen
+dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
+dashboard.delete_missing_repos=Löschen Sie alle Repository-Datensätze, mit verlorenen Git-Dateien
+dashboard.delete_missing_repos_success=Alle Repository-Datensätze, mit verlorenen Git-Dateien wurden erfolgreich gelöscht.
+dashboard.git_gc_repos=Führe Garbage Collection auf Repositories aus
+dashboard.git_gc_repos_success=Garbage Collection wurde auf allen Repositories erfolgreich ausgeführt.
+dashboard.resync_all_sshkeys=Überschreibe '.ssh/authorized_keys' Datei (Warnung: Keys, die nicht zu Gogs gehören gehen verloren)
+dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
+dashboard.resync_all_update_hooks=Überschreibe alle Hooks der Repositories (benötigt, wenn sich der Pfad in der Konfiguration ändert)
+dashboard.resync_all_update_hooks_success=Die Hooks aller Repositories sind erfolgreich neu geschrieben worden.
+
+dashboard.server_uptime=Server-Uptime
+dashboard.current_goroutine=Aktuelle Goroutines
+dashboard.current_memory_usage=Aktuelle Speichernutzung
+dashboard.total_memory_allocated=Zugeteilter Gesamtspeicher
+dashboard.memory_obtained=Erhaltener Speicher
+dashboard.pointer_lookup_times=Pointer Lookup Times
+dashboard.memory_allocate_times=Memory Allocate Times
+dashboard.memory_free_times=Memory Free Times
+dashboard.current_heap_usage=Aktuelle Heap-Auslastung
+dashboard.heap_memory_obtained=erhaltener Heap-Memory
+dashboard.heap_memory_idle=unbenutzter Heap-Memory
+dashboard.heap_memory_in_use=benutzter Heap-Memory
+dashboard.heap_memory_released=freigegebener Heap-Memory
+dashboard.heap_objects=Heap-Objekte
+dashboard.bootstrap_stack_usage=Bootstrap-Stack-Auslastung
+dashboard.stack_memory_obtained=erhaltener Stack-Memory
+dashboard.mspan_structures_usage=MSpan-Structures-Auslastung
+dashboard.mspan_structures_obtained=erhaltene MSpan-Structures
+dashboard.mcache_structures_usage=MCache-Structures-Auslastung
+dashboard.mcache_structures_obtained=erhaltene MCache-Structures
+dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
+dashboard.gc_metadata_obtained=erhaltene GC-Metadata
+dashboard.other_system_allocation_obtained=andere erhaltene System-Allokatoren
+dashboard.next_gc_recycle=nächster GC-Zyklus
+dashboard.last_gc_time=seit letztem GC-Zyklus
+dashboard.total_gc_time=gesamte GC-Zeit
+dashboard.total_gc_pause=gesamte GC-Pause
+dashboard.last_gc_pause=letzte GC-Pause
+dashboard.gc_times=GC-Takt
+
+users.user_manage_panel=Benutzer
+users.new_account=Neues Konto erstellen
+users.name=Name
+users.activated=Aktiviert
+users.admin=Admin
+users.repos=Repositorys
+users.created=Erzeugt
+users.send_register_notify=Sende Registrierungsbenachrichtigung an Benutzer
+users.new_success=Der neue Account '%s' wurde erfolgreich erstellt.
+users.edit=Bearbeiten
+users.auth_source=Authentifizierungsquelle
+users.local=Lokal
+users.auth_login_name=Authentifizierung-Loginnname
+users.password_helper=Leer lassen um es unverändert zu lassen.
+users.update_profile_success=Kontoprofil wurde erfolgreich aktualisiert.
+users.edit_account=Konto bearbeiten
+users.is_activated=Dieses Konto ist aktiviert
+users.is_admin=Dieses Konto hat Administratorrechte
+users.allow_git_hook=Dieses Konto ist berechtigt, Git-Hooks zu erstellen
+users.allow_import_local=Dieses Konto ist berechtigt, lokale Repositorys zu importieren
+users.update_profile=Kontoprofil aktualisieren
+users.delete_account=Dieses Konto löschen
+users.still_own_repo=Dieses Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
+users.still_has_org=Dieses Konto ist noch Mitglied einer Organisation, bitte entferne diese Mitgliedschaft zuerst.
+users.deletion_success=Das Konto wurde erfolgreich gelöscht!
+
+orgs.org_manage_panel=Organisationenverwaltung
+orgs.name=Name
+orgs.teams=Teams
+orgs.members=Mitglieder
+
+repos.repo_manage_panel=Repositorys
+repos.owner=Besitzer
+repos.name=Name
+repos.private=Privat
+repos.watches=Beobachtungen
+repos.stars=Markierungen
+repos.issues=Issues
+
+auths.auth_manage_panel=Verwaltungspanel für die Authentifizierung
+auths.new=Neue Quelle hinzufügen
+auths.name=Name
+auths.type=Typ
+auths.enabled=aktiviert
+auths.updated=aktualisiert
+auths.auth_type=Authentifizierungstyp
+auths.auth_name=Authentifizierungsname
+auths.domain=Domain
+auths.host=Host
+auths.port=Port
+auths.bind_dn=DN binden
+auths.bind_password=Passwort binden
+auths.bind_password_helper=Warnung: Das Passwort wird im Klartext gespeichert. Benutze keinen Account mit hohen Zugriffsrechten.
+auths.user_base=Benutzer-Such-Basis
+auths.user_dn=Benutzer DN
+auths.attribute_name=Vorname Attribut
+auths.attribute_surname=Nachname Attribut
+auths.attribute_mail=E-Mail Attribut
+auths.filter=Benutzernamen Filter
+auths.admin_filter=Admin Filter
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP Authentifizierungstyp
+auths.smtphost=SMTP-Host
+auths.smtpport=SMTP-Port
+auths.allowed_domains=Erlaubte Domains
+auths.allowed_domains_helper=Leer lassen für keine Einschränkungen. Mehrere Domains können durch Komma "," getrennt werden.
+auths.enable_tls=TLS-Verschlüsselung aktivieren
+auths.skip_tls_verify=TLS-Prüfung überspringen
+auths.pam_service_name=PAM Dienstname
+auths.enable_auto_register=Automatische Registrierung aktivieren
+auths.tips=Tipps
+auths.edit=Authentifizierungseinstellungen bearbeiten
+auths.activated=Diese Authentifizierung ist aktiviert
+auths.new_success=Neue Authentifizierung '%s' wurde erfolgreich hinzugefügt.
+auths.update_success=Die Authentifizierungseinstellungen wurden erfolgreich aktualisiert.
+auths.update=Authentifizierungseinstellungen aktualisieren
+auths.delete=Diese Authentifizierung löschen
+auths.delete_auth_title=Löschen der Authentifizierung
+auths.delete_auth_desc=Diese Authentifizierung wird gelöscht, möchtest du fortfahren?
+auths.deletion_success=Authentifizierung wurde erfolgreich entfernt!
+
+config.server_config=Server-Konfiguration
+config.app_name=Anwendungsname
+config.app_ver=Anwendungsversion
+config.app_url=Anwendungs-URL
+config.domain=Domain
+config.offline_mode=Offline-Modus
+config.disable_router_log=Router-Log deaktivieren
+config.run_user=Laufzeit-Benutzer
+config.run_mode=Laufzeit-Modus
+config.repo_root_path=Repository-Verzeichnis
+config.static_file_root_path=Verzeichnis für statische Dateien
+config.log_file_root_path=Log-Verzeichnis
+config.script_type=Skript-Typ
+config.reverse_auth_user=Nutzer bei Reverse-Authentifizierung
+config.db_config=Datenbankkonfiguration
+config.db_type=Typ
+config.db_host=Host
+config.db_name=Name
+config.db_user=Benutzer
+config.db_ssl_mode=SSL-Modus
+config.db_ssl_mode_helper=(nur für "postgres")
+config.db_path=Verzeichnis
+config.db_path_helper=(für "sqlite3" und "tidb")
+config.service_config=Service-Einstellungen
+config.register_email_confirm=E-Mail-Bestätigung bei Registrierung
+config.disable_register=Registrierung deaktivieren
+config.show_registration_button=Zeige die Schaltfläche Registrieren
+config.require_sign_in_view=Ansehen erfordert Registrierung
+config.enable_cache_avatar=Avatar-Cache aktivieren
+config.mail_notify=E-Mail-Benachrichtigung
+config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren
+config.enable_captcha=Captcha aktivieren
+config.active_code_lives=Aktivierungscode Lebensdauer
+config.reset_password_code_lives=Passwortcode Lebensdauer
+config.webhook_config=Webhook-Einstellungen
+config.queue_length=Warteschlangenlänge
+config.deliver_timeout=Zeitlimit für Zustellung
+config.skip_tls_verify=TLS verifikation überspringen
+config.mailer_config=Mailer-Einstellungen
+config.mailer_enabled=Aktiviert
+config.mailer_disable_helo=HELO Deaktivieren
+config.mailer_name=Name
+config.mailer_host=Host
+config.mailer_user=Benutzer
+config.oauth_config=OAuth-Einstellungen
+config.oauth_enabled=Aktiviert
+config.cache_config=Cache-Einstellungen
+config.cache_adapter=Cache-Adapter
+config.cache_interval=Cache-Intervall
+config.cache_conn=Cache-Anbindung
+config.session_config=Session-Einstellungen
+config.session_provider=Session-Provider
+config.provider_config=Provider-Einstellungen
+config.cookie_name=Cookie-Name
+config.enable_set_cookie=Cookies einschalten
+config.gc_interval_time=GC-Intervallzeit
+config.session_life_time=Session-Lebensdauer
+config.https_only=nur HTTPS
+config.cookie_life_time=Cookie-Lebensdauer
+config.picture_config=Bildeinstellungen
+config.picture_service=Bildservice
+config.disable_gravatar=Gravatar deaktivieren
+config.log_config=Log-Einstellungen
+config.log_mode=Log-Modus
+
+monitor.cron=Cron-Tasks
+monitor.name=Name
+monitor.schedule=Zeitplan
+monitor.next=nächste Ausführung
+monitor.previous=letzte Ausführung
+monitor.execute_times=Anzahl Ausführungen
+monitor.process=Laufende Prozesse
+monitor.desc=Beschreibung
+monitor.start=Startzeit
+monitor.execute_time=Ausführungszeit
+
+notices.system_notice_list=System-Mitteilungen
+notices.type=Typ
+notices.type_1=Repository
+notices.desc=Beschreibung
+notices.op=Op.
+notices.delete_success=System-Mitteilung erfolgreich gelöscht.
+
+[action]
+create_repo=hat Repository <a href="%s">%s</a> erstellt
+rename_repo=das Repository wurde umbenannt von <code>%[1]s</code> zu <a href="%[2]s">%[3]s</a>
+commit_repo=hat nach <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> eröffnet`
+create_pull_request=`Pull-Anforderung erstellt <a href="%s/pulls/%s">%s#%[2]s</a>`
+comment_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
+merge_pull_request=`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 nach <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a> gepusht
+compare_2_commits=Zeige Vergleich dieser 2 Commits
+
+[tool]
+ago=vor
+from_now=ab sofort
+now=Jetzt
+1s=%s 1 Sekunde
+1m=%s 1 Minute
+1h=%s 1 Stunde
+1d=%s 1 Tag
+1w=%s 1 Woche
+1mon=%s 1 Monat
+1y=%s 1 Jahr
+seconds=%[2]s %[1]d Sekunden
+minutes=%[2]s %[1]d Minuten
+hours=%[2]s %[1]d Stunden
+days=%[2]s %[1]d Tagen
+weeks=%[2]s %[1]d Wochen
+months=%[2]s %[1]d Monaten
+years=%[2]s %[1]d Jahren
+raw_seconds=Sekunden
+raw_minutes=Minuten
+
+[dropzone]
+default_message=Für den Upload klicken oder die Datei hier ablegen.
+invalid_input_type=Dateien dieses Dateityps können nicht hochgeladen werden.
+file_too_big=Dateigröße ({{filesize}} MB) überschreitet die Maximalgröße ({{maxFilesize}} MB).
+remove_file=Datei entfernen
+

+ 32 - 14
conf/locale/locale_en-US.ini

@@ -148,7 +148,6 @@ forgot_password= Forgot Password
 forget_password = Forgot password?
 sign_up_now = Need an account? Sign up now.
 confirmation_mail_sent_prompt = A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the registration process.
-sign_in_to_account = Sign in to your account
 active_your_account = Activate Your Account
 resent_limit_prompt = Sorry, you already requested an activation email recently. Please wait 3 minutes then try again.
 has_unconfirmed_mail = Hi %s, you have an unconfirmed e-mail address (<b>%s</b>). If you haven't received a confirmation e-mail or need to resend a new one, please click on the button below.
@@ -165,6 +164,7 @@ activate_account = Please activate your account
 activate_email = Verify your e-mail address
 reset_password = Reset your password
 register_success = Register success, Welcome
+register_notify = Welcome on board
 
 [modal]
 yes = Yes
@@ -337,6 +337,7 @@ visibility = Visibility
 visiblity_helper = This repository is <span class="ui red text">Private</span>
 visiblity_helper_forced = Site admin has forced all new repositories to be <span class="ui red text">Private</span>
 visiblity_fork_helper = (Change of this value will affect all forks)
+clone_helper = Need help cloning? Visit <a target="_blank" href="%s">Help</a>!
 fork_repo = Fork Repository
 fork_from = Fork From
 fork_visiblity_helper = You cannot alter the visibility of a forked repository.
@@ -351,6 +352,9 @@ auto_init = Initialize this repository with selected files and template
 create_repo = Create Repository
 default_branch = Default Branch
 mirror_interval = Mirror Interval (hour)
+watchers = Watchers
+stargazers = Stargazers
+forks = Forks
 
 form.name_reserved = Repository name '%s' is reserved.
 form.name_pattern_not_allowed = Repository name pattern '%s' is not allowed.
@@ -361,16 +365,16 @@ migrate_type_helper = This repository will be a <span class="text blue">mirror</
 migrate_repo = Migrate Repository
 migrate.clone_address = Clone Address
 migrate.clone_address_desc = This can be a HTTP/HTTPS/GIT URL or local server path.
+migrate.permission_denied = You are not allowed to import local repositories.
 migrate.invalid_local_path = Invalid local path, it does not exist or not a directory.
+migrate.failed = Migration failed: %v
 
 forked_from = forked from
 fork_from_self = You cannot fork repository you already owned!
 copy_link = Copy
 copy_link_success = Copied!
 copy_link_error = Press ⌘-C or Ctrl-C to copy
-click_to_copy = Copy to clipboard
 copied = Copied OK
-clone_helper = Need help cloning? Visit <a target="_blank" href="%s">Help</a>!
 unwatch = Unwatch
 watch = Watch
 unstar = Unstar
@@ -384,10 +388,9 @@ create_new_repo_command = Create a new repository on the command line
 push_exist_repo = Push an existing repository from the command line
 repo_is_empty = This repository is empty, please come back later!
 
-
 branch = Branch
 tree = Tree
-branch_and_tags = Branches & Tags
+filter_branch_and_tag = Filter branch or tag
 branches = Branches
 tags = Tags
 issues = Issues
@@ -456,9 +459,9 @@ issues.num_comments = %d comments
 issues.commented_at = `commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.no_content = There is no content yet.
 issues.close_issue = Close
-issues.close_comment_issue = Close and comment
+issues.close_comment_issue = Comment and close
 issues.reopen_issue = Reopen
-issues.reopen_comment_issue = Reopen and comment
+issues.reopen_comment_issue = Comment and reopen
 issues.create_comment = Comment
 issues.closed_at = `closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.reopened_at = `reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -482,6 +485,7 @@ issues.label_deletion = Label Deletion
 issues.label_deletion_desc = Delete this label will remove its information in all related issues. Do you want to continue?
 issues.label_deletion_success = Label has been deleted successfully!
 
+pulls.new = New Pull Request
 pulls.compare_changes = Compare Changes
 pulls.compare_changes_desc = Compare two branches and make a pull request for changes.
 pulls.compare_base = base
@@ -520,7 +524,7 @@ milestones.title = Title
 milestones.desc = Description
 milestones.due_date = Due Date (optional)
 milestones.clear = Clear
-milestones.invalid_due_date_format = Due date format is invalid, must be 'year-mm-dd'.
+milestones.invalid_due_date_format = Due date format is invalid, must be 'yyyy-mm-dd'.
 milestones.create_success = Milestone '%s' has been created successfully!
 milestones.edit = Edit Milestone
 milestones.edit_subheader = Use better description for milestones so people won't be confused.
@@ -562,6 +566,7 @@ settings.confirm_delete = Confirm Deletion
 settings.add_collaborator = Add New Collaborator
 settings.add_collaborator_success = New collaborator has been added.
 settings.remove_collaborator_success = Collaborator has been removed.
+settings.search_user_placeholder = Search user...
 settings.user_is_org_member = User is organization member who cannot be added as a collaborator.
 settings.add_webhook = Add Webhook
 settings.hooks_desc = Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
@@ -634,24 +639,32 @@ release.stable = Stable
 release.edit = edit
 release.ahead = <strong>%d</strong> commits to %s since this release
 release.source_code = Source Code
+release.new_subheader = Publish releases to iterate product.
+release.edit_subheader = Detailed change log can help users understand what has been improved.
 release.tag_name = Tag name
 release.target = Target
 release.tag_helper = Choose an existing tag, or create a new tag on publish.
-release.release_title = Release title
-release.content_with_md = Content with <a href="%s">Markdown</a>
+release.title = Title
+release.content = Content
 release.write = Write
 release.preview = Preview
-release.content_placeholder = Write some content
 release.loading = Loading...
 release.prerelease_desc = This is a pre-release
 release.prerelease_helper = We’ll point out that this release is not production-ready.
+release.cancel = Cancel
 release.publish = Publish Release
 release.save_draft = Save Draft
 release.edit_release = Edit Release
+release.delete_release = Delete This Release
+release.deletion = Release Deletion
+release.deletion_desc = Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success = Release has been deleted successfully!
 release.tag_name_already_exist = Release with this tag name has already existed.
+release.downloads = Downloads
 
 [org]
 org_name_holder = Organization Name
+org_full_name_holder = Organization Full Name
 org_name_helper = Great organization names are short and memorable.
 create_org = Create Organization
 repo_updated = Updated
@@ -688,16 +701,17 @@ settings.delete_org_title = Organization Deletion
 settings.delete_org_desc = This organization is going to be deleted permanently, do you want to continue?
 settings.hooks_desc = Add webhooks that will be triggered for <strong>all repositories</strong> under this organization.
 
+members.membership_visibility = Membership Visibility:
 members.public = Public
 members.public_helper = make private
 members.private = Private
 members.private_helper = make public
+members.member_role = Member Role:
 members.owner = Owner
 members.member = Member
-members.conceal = Conceal
 members.remove = Remove
 members.leave = Leave
-members.invite_desc = Start typing a username to invite a new member to %s:
+members.invite_desc = Add a new member to %s:
 members.invite_now = Invite Now
 
 teams.join = Join
@@ -722,6 +736,7 @@ teams.read_permission_desc = This team grants <strong>Read</strong> access: memb
 teams.write_permission_desc = This team grants <strong>Write</strong> access: members can read from and push to the team's repositories.
 teams.admin_permission_desc = This team grants <strong>Admin</strong> access: members can read from, push to, and add collaborators to the team's repositories.
 teams.repositories = Team Repositories
+teams.search_repo_placeholder = Search repository...
 teams.add_team_repository = Add Team Repository
 teams.remove_repo = Remove
 teams.add_nonexistent_repo = The repository you're trying to add does not exist, please create it first.
@@ -752,6 +767,8 @@ dashboard.delete_inactivate_accounts = Delete all inactive accounts
 dashboard.delete_inactivate_accounts_success = All inactivate accounts have been deleted successfully.
 dashboard.delete_repo_archives = Delete all repositories archives
 dashboard.delete_repo_archives_success = All repositories archives have been deleted successfully.
+dashboard.delete_missing_repos = Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success = All repository records that lost Git files have been deleted successfully.
 dashboard.git_gc_repos = Do garbage collection on repositories
 dashboard.git_gc_repos_success = All repositories have done garbage collection successfully.
 dashboard.resync_all_sshkeys = Rewrite '.ssh/authorized_keys' file (caution: non-Gogs keys will be lost)
@@ -808,6 +825,7 @@ users.edit_account = Edit Account
 users.is_activated = This account is activated
 users.is_admin = This account has administrator permissions
 users.allow_git_hook = This account has permissions to create Git hooks
+users.allow_import_local = This account has permissions to import local repositories
 users.update_profile = Update Account Profile
 users.delete_account = Delete This Account
 users.still_own_repo = This account still has ownership over at least one repository, you have to delete or transfer them first.
@@ -955,7 +973,7 @@ notices.delete_success = System notice has been deleted successfully.
 [action]
 create_repo = created repository <a href="%s">%s</a>
 rename_repo = renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo = pushed to <a href="%s/src/%s">%[2]s</a> at <a href="%[1]s">%[3]s</a>
+commit_repo = pushed to <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
 create_issue = `opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
 create_pull_request = `created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`

+ 1009 - 992
conf/locale/locale_es-ES.ini

@@ -1,992 +1,1009 @@
-app_desc=Un servicio de Git auto alojado y sin complicaciones
-
-home=Inicio
-dashboard=Panel de control
-explore=Explorar
-help=Ayuda
-sign_in=Iniciar sesión
-sign_out=Cerrar sesión
-sign_up=Suscripción
-register=Registro
-website=Página Web
-version=Versión
-page=Página
-template=Plantilla
-language=Idioma
-create_new=Crear...
-user_profile_and_more=Perfil de usuario y más
-signed_in_as=Identificado como
-
-username=Nombre de usuario
-email=Correo electrónico
-password=Contraseña
-re_type=Ingrese de nuevo
-captcha=Captcha
-
-repository=Repositorio
-organization=Organización
-mirror=Mirror
-new_repo=Nuevo repositorio
-new_migrate=Nueva Migración
-new_fork=Nuevo Fork del Repositorio
-new_org=Nueva organización
-manage_org=Administrar organizaciones
-admin_panel=Panel de administración
-account_settings=Configuraciones de la cuenta
-settings=Configuraciones
-your_profile=Tu perfil
-your_settings=Tu configuración
-
-news_feed=Feed de noticias
-pull_requests=Pull Requests
-issues=Incidencias
-
-cancel=Cancelar
-
-[search]
-search=Buscar...
-repository=Repositorio
-user=Usuario
-issue=Incidencia
-code=Código
-
-[install]
-install=Instalación
-title=Pasos de la instalación por primera vez
-docker_helper=Si está ejecutando Gogs usando Docker, por favor lea <a target="_blank" href="%s"> estas pautas</a> antes de cambiar nada en esta página!
-requite_db_desc=Gogs requiere una base de datos MySQL, PostgreSQL, SQLite3 o TiDB.
-db_title=Configuración de base de datos
-db_type=Tipo de base de datos
-host=Host
-user=Usuario
-password=Contraseña
-db_name=Nombre de la base de datos
-db_helper=Por favor utilice el motor INNODB con la configuración de caracteres utf8_general_ci para MySQL.
-ssl_mode=Modo SSL
-path=Ruta
-sqlite_helper=Ruta del archivo con la base de datos SQLite3 o TiDB.
-err_empty_db_path=La ruta a la base de datos SQLite3 o TiDB no puede estar vacía.
-err_invalid_tidb_name=El nombre de la base de datos TiDB no puede contener los caracteres "." ni "-".
-no_admin_and_disable_registration=No puede deshabilitar el registro sin crear una cuenta de administrador.
-err_empty_admin_password=La contraseña de administrador no puede estar vacía.
-
-general_title=Configuración General de Gogs
-app_name=Nombre de la Aplicación
-app_name_helper=Pon aquí el nombre de tu organización, ¡alto y claro!
-repo_path=Ruta del repositorio de Raiz (Root)
-repo_path_helper=Todos los repositorios remotos de Git se guardarán en este directorio.
-run_user=Ejecutar como Usuario
-run_user_helper=El usuario necesita tener acceso a la Ruta Raíz del Repositorio y ejecutar Gogs.
-domain=Dominio
-domain_helper=Esto afecta a las URLs para clonar por SSH.
-ssh_port=Puerto SSH
-ssh_port_helper=Número de puerto de su servidor SSH, déjelo en blanco para desactivar SSH.
-http_port=Puerto HTTP
-http_port_helper=Puerto en el que escuchará la aplicación.
-app_url=URL de la aplicación
-app_url_helper=Esto afecta a las URLs para clonar por HTTP/HTTPS y a algunos correos electrónicos.
-
-optional_title=Configuración Opcional
-email_title=Configuración del Servicio de Correo
-smtp_host=SMTP Host
-smtp_from=Desde
-smtp_from_helper=Remitente del email, RFC 5322. Puede ser solamente una dirección de correo electrónico, o estar en el formato "Nombre" <email@example.com>.
-mailer_user=Remitente del Correo Electrónico
-mailer_password=Contraseña del Remitente
-register_confirm=Habilitar la Confirmación en el Registro
-mail_notify=Habilitar las Notificaciones de Correo
-server_service_title=Configuración de Servidor y Otros Servicios
-offline_mode=Activar el modo Sin Conexión
-offline_mode_popup=Desactivar el CDN incluso en el modo de producción, todos los recursos se servirán localmente.
-disable_gravatar=Desactivar el Servicio Gravatar
-disable_gravatar_popup=Desactivar Gravatar y cualquier otra fuente personalizada. Todos los avatares deben ser cargados por los usuarios o en su defecto se mostrará el avatar predeterminado.
-disable_registration=Desactivar Auto-Registro
-disable_registration_popup=Desactivar auto-registro del usuario, solo el administrador podrá crear cuentas nuevas.
-enable_captcha=Activar la Captcha
-enable_captcha_popup=Requiere validar la captcha para el auto-registro de usuario.
-require_sign_in_view=Activar el Inicio de Sesión obligatorio para Ver Páginas
-require_sign_in_view_popup=Solo los usuarios logados pueden ver páginas, los visitantes anónimos solo podrán ver las páginas de login/registro.
-admin_setting_desc=No es necesario crear una cuenta de administrador ahora mismo, el usuario que tenga ID=1 obtendrá privilegios de administrador automáticamente.
-admin_title=Configuración de la Cuenta de Administrador
-admin_name=Nombre de usuario
-admin_password=Contraseña
-confirm_password=Confirmar Contraseña
-admin_email=Correo electrónico
-install_gogs=Instalar Gogs
-test_git_failed=Fallo al probar el comando 'git': %v
-sqlite3_not_available=Tu versión no soporta SQLite3, por favor descarga el binario oficial desde %s, NO la versión de gobuild.
-invalid_db_setting=La configuración de la base de datos no es correcta: %v
-invalid_repo_path=La ruta de la raíz del repositorio es inválida: %v
-run_user_not_match=El usuario que está ejecutando la aplicación no es el usuario actual: %s -> %s
-save_config_failed=Error al guardar la configuración: %v
-invalid_admin_setting=La configuración de la cuenta de administración es inválida: %v
-install_success=Bienvenido! Estamos encantados de que hayas escogido Gogs, diviértete y cuídate.
-
-[home]
-uname_holder=Nombre de usuario o correo electrónico
-password_holder=Contraseña
-switch_dashboard_context=Cambiar el contexto del Dashboard
-my_repos=Mis Repositorios
-collaborative_repos=Repositorios Colaborativos
-my_orgs=Mis Organizaciones
-my_mirrors=Mis Mirrors
-view_home=Ver %s
-
-issues.in_your_repos=En tus repositorios
-
-[explore]
-repos=Repositorios
-
-[auth]
-create_new_account=Crear una Nueva Cuenta
-register_hepler_msg=¿Ya tienes una cuenta? ¡Inicia sesión!
-social_register_hepler_msg=¿Ya tienes una cuenta? ¡Enlázala!
-disable_register_prompt=Lo sentimos, el registro está deshabilitado. Por favor, contacta con el administrador del sitio.
-disable_register_mail=Lo sentimos. Los correos de Confirmación de Registro están deshabilitados.
-remember_me=Recuérdame
-forgot_password=He olvidado mi contraseña
-forget_password=¿Has olvidado tu contraseña?
-sign_up_now=¿Necesitas una cuenta? Regístrate ahora.
-confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a <b>%s</b>. Por favor, comprueba tu bandeja de entrada en las siguientes %d horas para completar el proceso de registro.
-sign_in_to_account=Inicie sesión en su cuenta
-active_your_account=Activa tu cuenta
-resent_limit_prompt=Lo sentimos, estás solicitando el reenvío del mail de activación con demasiada frecuencia. Por favor, espera 3 minutos.
-has_unconfirmed_mail=Hola %s, tu correo electrónico (<b>%s</b>) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón.
-resend_mail=Haz click aquí para reenviar tu correo electrónico de activación
-email_not_associate=Esta dirección de correo electrónico no esta asociada a ninguna cuenta.
-send_reset_mail=Haga clic aquí para (re)enviar el correo para el restablecimiento de la contraseña
-reset_password=Restablecer su contraseña
-invalid_code=Lo sentimos, su código de confirmación ha expirado o no es valido.
-reset_password_helper=Haga Clic aquí para restablecer su contraseña
-password_too_short=La longitud de la contraseña no puede ser menor a 6.
-
-[mail]
-activate_account=Por favor, active su cuenta
-activate_email=Verifique su correo electrónico
-reset_password=Restablezca su contraseña
-register_success=Registro completado, bienvenido
-
-[modal]
-yes=Sí
-no=No
-modify=Editar
-
-[form]
-UserName=Nombre de usuario
-RepoName=Nombre del repositorio
-Email=Dirección de correo electrónico
-Password=Contraseña
-Retype=Vuelva a escribir la contraseña
-SSHTitle=Nombre de la Clave de SSH
-HttpsUrl=HTTPS URL
-PayloadUrl=URL de carga
-TeamName=Nombre del equipo
-AuthName=Nombre de autorización
-AdminEmail=Correo electrónico del administrador
-
-require_error=` no puede estar vacío.`
-alpha_dash_error=` los caracteres deben ser Alfanumericos o dash(-_).`
-alpha_dash_dot_error=` debe ser un caracter alfanumérivo válido, un guión alto o bajo (-_) o un signo de puntuación.`
-size_error=` debe ser de tamaño %s.`
-min_size_error=` debe contener al menos %s caracteres.`
-max_size_error=` debe contener como máximo %s caracteres.`
-email_error=` no es una dirección de correo válida.`
-url_error=` no es una URL válida.`
-unknown_error=Error desconocido:
-captcha_incorrect=El captcha no es válido.
-password_not_match=La contraseña de confirmación no coincide.
-
-username_been_taken=Ya existe un usuario con este nombre.
-repo_name_been_taken=Ya existe un repositorio con este nombre.
-org_name_been_taken=Ya existe una organización con este nombre.
-team_name_been_taken=Ya existe un equipo con este nombre.
-email_been_used=Esta dirección de correo electrónico ya está en uso.
-illegal_team_name=El nombre del equipo contiene caracteres inválidos.
-username_password_incorrect=Nombre de usuario o contraseña incorrectos.
-enterred_invalid_repo_name=Por favor, asegúrate de que has introducido correctamente el nombre del repositorio.
-enterred_invalid_owner_name=Por favor, asegúrate de que has introducido correctamente el nombre del propietario.
-enterred_invalid_password=Por favor, asegúrate de que has introducido correctamente tu contraseña.
-user_not_exist=El usuario indicado no existe.
-last_org_owner=El usuario que se intenta eliminar es el último miembro del equipo de propietarios. Debe existir otro propietario.
-
-invalid_ssh_key=Lo sentimos, no somos capaces de verificar tu clave SSH: %s
-unable_verify_ssh_key=Gogs no puede velificar tu clave SSH, pero asumimos que es válida. Por favor, asegúrate de que es así.
-auth_failed=Error de autenticación: %v
-
-still_own_repo=Tu cuenta es la propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
-still_has_org=Tu cuenta es miembro de una o más organizaciones, tienes que abandonarlas o eliminarlas primero.
-org_still_own_repo=Esta organización es dueña de uno o más repositorios, tienes que eliminarlos o transferirlos primero.
-
-still_own_user=Esta autenticación está en uso por algunos usuarios, debes moverlos y antes de eliminarla.
-
-target_branch_not_exist=La rama de destino no existe
-
-[user]
-change_avatar=Cambia tu avatar en gravatar.com
-change_custom_avatar=Cambia tu avatar en la configuración
-join_on=Registrado en
-repositories=Repositorios
-activity=Actividad pública
-followers=Seguidores
-starred=Destacados
-following=Siguiendo
-
-form.name_reserved=El usuario '%s' está reservado.
-form.name_pattern_not_allowed=El patrón de nombre de usuario '%s' no está permitido.
-
-[settings]
-profile=Perfil
-password=Contraseña
-ssh_keys=Claves SSH
-social=Redes Sociales
-applications=Aplicaciones
-orgs=Organizaciones
-delete=Eliminar Cuenta
-uid=UUID
-
-public_profile=Perfil Público
-profile_desc=Tu correo electrónico es público y será usado para todas las notificaciones relacionadas con cualquier cuenta y cualquier operación hecha a través de la web.
-full_name=Nombre Completo
-website=Página Web
-location=Localización
-update_profile=Actualizar Perfil
-update_profile_success=Tu perfil se ha actualizado correctamente.
-change_username=Nombre de usuario modificado
-change_username_prompt=Este cambio afectará a los enlaces que hacen referencia a su cuenta.
-continue=Continuar
-cancel=Cancelar
-
-enable_custom_avatar=Activar Avatar Personalizado
-enable_custom_avatar_helper=Activa esto para desactivar los avatares de Gravatar
-choose_new_avatar=Selecciona nuevo avatar
-update_avatar=Actualizar Configuración del Avatar
-uploaded_avatar_not_a_image=El archivo enviado no es una imagen.
-no_custom_avatar_available=No hay ningún avatar personalizado disponible, no se puede habilitar.
-update_avatar_success=La configuración de tu avatar se ha actualizado correctamente.
-
-change_password=Cambiar contraseña
-old_password=Contraseña actual
-new_password=Nueva contraseña
-retype_new_password=Confirmar nueva contraseña
-password_incorrect=Contraseña actual incorrecta.
-change_password_success=La contraseña se ha modificado correctamente. Ya puedes iniciar sesión con tu nueva contraseña.
-
-emails=Direcciones de correo electrónico
-manage_emails=Gestionar direcciones de correo electrónico
-email_desc=Tu dirección de correo principal se utilizará para las notificaciones y otras operaciones.
-primary=Principal
-primary_email=Marcar como principal
-delete_email=Eliminar
-email_deletion=Eliminación de Correo Electrónico
-email_deletion_desc=Al eliminar esta dirección de correo electrónico se eliminará toda la información asociada a esta dirección de correo electrónico. ¿Deseas continuar?
-email_deletion_success=¡El correo electrónico ha sido eliminado correctamente!
-add_new_email=Añadir nueva dirección de correo electrónico
-add_email=Añadir correo electrónico
-add_email_confirmation_sent=Un nuevo correo de confirmación ha sido enviado a '%s'. Por favor, comprueba tu bandeja de entrada en las próximas %d horas para completar el proceso.
-add_email_success=Tu nuevo correo electrónico se ha añadido correctamente.
-
-manage_ssh_keys=Gestionar Claves SSH
-add_key=Añadir Clave
-ssh_desc=Esta es la lista de claves SSH asociadas con tu cuenta. Elimina cualquier clave que no reconozcas.
-ssh_helper=<strong>¿Necesitas ayuda?</strong> Consulta la guía de GitHub para <a href="%s">generar claves SSH</a> o solucionar <a href="%s">problemas comunes</a> al usar SSH.
-add_new_key=Añadir clave SSH
-ssh_key_been_used=El contenido de la clave pública se ha utilizado.
-ssh_key_name_used=Ya existe una clave pública con el mismo nombre.
-key_name=Nombre de la Clave
-key_content=Contenido
-add_key_success=¡Nueva clave SSH '%s' añadida correctamente!
-delete_key=Eliminar
-ssh_key_deletion=Borrado de Clave SSH
-ssh_key_deletion_desc=Si elimina esta clave SSH no podrá volver a usarla para acceder a su cuenta. ¿Desea continuar?
-ssh_key_deletion_success=¡La clave SSH ha sido eliminada con éxito!
-add_on=Añadido en
-last_used=Utilizado por última vez en
-no_activity=No hay actividad reciente
-key_state_desc=Esta clave ha sido usada en los últimos 7 días
-token_state_desc=Token usado en los últimos 7 días
-
-manage_social=Gestionar Redes Sociales asociadas
-social_desc=Esta es una lista de las Redes Sociales asociadas. Elimina cualquier vínculo que no reconozcas.
-unbind=Desvincular
-unbind_success=La Red Social ha sido desvinculada.
-
-manage_access_token=Gestionar los Tokens de Acceso personales
-generate_new_token=Generar nuevo Token
-tokens_desc=Tokens usados para acceder al API de Gogs.
-new_token_desc=Desde ahora, todos los tokens tendrán acceso completo a tu cuenta.
-token_name=Nombre del Token
-generate_token=Generar Token
-generate_token_succees=¡Los nuevos tokens de acceso se han generado correctamente! Asegúrate de copiar tu nuevo token de acceso personal. ¡No podrás verlo de nuevo!
-delete_token=Eliminar
-access_token_deletion=Borrado de Token de Acceso Personal
-access_token_deletion_desc=Si elimina este token de acceso personal la aplicación asociada perderá el permiso de acceso. ¿Desea continuar?
-delete_token_success=¡El token de acceso personal ha sido eliminado con éxito! No se olvide de actualizar también las aplicaciones asociadas.
-
-delete_account=Elimina tu cuenta
-delete_prompt=La operación eliminará tu cuenta de forma permanente y ¡<strong>NO</strong> se puede deshacer!
-confirm_delete_account=Confirmar Eliminación
-delete_account_title=Eliminación de Cuenta
-delete_account_desc=Esta cuenta se va a eliminar permanentemente, ¿quieres continuar?
-
-[repo]
-owner=Propietario
-repo_name=Nombre del Repositorio
-repo_name_helper=Los grandes nombres de repositorios son cortos, memorables y <strong>únicos</strong>.
-visibility=Visibilidad
-visiblity_helper=Este repositorio es <span class="ui red text">Privado</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Este cambio afectará a todos los forks)
-fork_repo=Hacer Fork del repositorio
-fork_from=Crear un Fork desde
-fork_visiblity_helper=No es posible cambiar la visibilidad de un Fork
-repo_desc=Descripción
-repo_lang=Idioma
-repo_lang_helper=Seleccione archivo .gitignore
-license=Licencia
-license_helper=Selecciona un fichero de licencia
-readme=Readme
-readme_helper=Seleccione una plantilla de archivo readme
-auto_init=Inicializar los archivos seleccionados y plantillas de este repositorio
-create_repo=Crear Repositorio
-default_branch=Rama por defecto
-mirror_interval=Intervalo de mirror(en horas)
-
-form.name_reserved=El nombre del repositorio '%s' está reservado.
-form.name_pattern_not_allowed=El patrón del nombre del repositorio '%s' no está permitido.
-
-need_auth=Requiere Autorización
-migrate_type=Tipo de Migración
-migrate_type_helper=Este repositorio será un <span class="text blue">mirror</span>
-migrate_repo=Migrar Repositorio
-migrate.clone_address=Clonar Dirección
-migrate.clone_address_desc=Puede ser una URL HTTP/HTTPS/GIT o una ruta local del servidor.
-migrate.invalid_local_path=Rutal local inválida, no existe o no es un directorio.
-
-forked_from=forked de
-fork_from_self=Eres el propietario del repositorio, ¡no puedes hacer fork!
-copy_link=Copiar
-copy_link_success=Copiado!
-copy_link_error=Presione ⌘ + C o Ctrl-C para copiar
-click_to_copy=Copiar al portapapeles
-copied=Copiado correctamente
-clone_helper=¿Necesitas ayuda con el clone? ¡Consulta la <a target="_blank" href="%s">Ayuda</a>!
-unwatch=Dejar de vigilar
-watch=Vigilar
-unstar=Eliminar destacado
-star=Destacar
-fork=Fork
-
-no_desc=Sin Descripción
-quick_guide=Guía Rápida
-clone_this_repo=Clonar este repositorio
-create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
-push_exist_repo=Hacer Push de un repositorio existente desde línea de comandos
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=Rama
-tree=Árbol
-branch_and_tags=Ramas y Etiquetas
-branches=Ramas
-tags=Etiquetas
-issues=Incidencias
-pulls=Pull Requests
-labels=Etiquetas
-milestones=Milestones
-commits=Commits
-releases=Releases
-file_raw=Raw
-file_history=Histórico
-file_view_raw=Ver Raw
-file_permalink=Permalink
-
-commits.commits=Commits
-commits.search=Buscar Commits
-commits.find=Buscar
-commits.author=Autor
-commits.message=Mensaje
-commits.date=Fecha
-commits.older=Anterior
-commits.newer=Posterior
-
-issues.new=Nueva Incidencia
-issues.new.labels=Etiquetas
-issues.new.no_label=Sin etiquetas
-issues.new.clear_labels=Limpiar etiquetas
-issues.new.milestone=Milestone
-issues.new.no_milestone=Sin Milestone
-issues.new.clear_milestone=Limpiar Milestone
-issues.new.open_milestone=Milestones abiertas
-issues.new.closed_milestone=Milestones cerradas
-issues.new.assignee=Asignado a
-issues.new.clear_assignee=Limpiar asignado
-issues.new.no_assignee=Sin asignado
-issues.create=Crear incidencia
-issues.new_label=Nueva Etiqueta
-issues.new_label_placeholder=Nombre etiqueta...
-issues.create_label=Crear etiqueta
-issues.open_tab=%d abiertas
-issues.close_tab=%d cerradas
-issues.filter_label=Etiqueta
-issues.filter_label_no_select=Ninguna etiqueta seleccionada
-issues.filter_milestone=Milestone
-issues.filter_milestone_no_select=Ningún Milestone seleccionado
-issues.filter_assignee=Asignada a
-issues.filter_assginee_no_select=Sin asignar
-issues.filter_type=Tipo
-issues.filter_type.all_issues=Todas las incidencias
-issues.filter_type.assigned_to_you=Asignadas a ti
-issues.filter_type.created_by_you=Creadas por ti
-issues.filter_type.mentioning_you=Citado en
-issues.filter_sort=Ordenar
-issues.filter_sort.latest=Más recientes
-issues.filter_sort.oldest=Más antiguas
-issues.filter_sort.recentupdate=Actualizada recientemente
-issues.filter_sort.leastupdate=Actualizada menos recientemente
-issues.filter_sort.mostcomment=Más comentadas
-issues.filter_sort.leastcomment=Menos comentadas
-issues.opened_by=abierta %[1]s por <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=abierta %[1]s por %[2]s
-issues.previous=Página Anterior
-issues.next=Página Siguiente
-issues.open_title=Abierta
-issues.closed_title=Cerrada
-issues.num_comments=%d comentarios
-issues.commented_at=`comentada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Aun no existe contenido.
-issues.close_issue=Cerrar
-issues.close_comment_issue=Cerrar y Comentar
-issues.reopen_issue=Reabrir
-issues.reopen_comment_issue=Reabrir y Comentar
-issues.create_comment=Comentar
-issues.closed_at=`cerrada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reabierta <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`mencionada esta incidencia en un commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Autor
-issues.admin=Administrador
-issues.owner=Propietario
-issues.sign_up_for_free=Registro gratuito
-issues.sign_in_require_desc=para unirse a esta conversación. ¿Ya dispone de una cuenta? <a href="%s">Inicie sesión para comentar</a>
-issues.edit=Editar
-issues.cancel=Cancelar
-issues.save=Guardar
-issues.label_title=Nombre etiqueta
-issues.label_color=Color etiqueta
-issues.label_count=%d etiquetas
-issues.label_open_issues=%d incidencias abiertas
-issues.label_edit=Editar
-issues.label_delete=Borrar
-issues.label_modify=Edición de Etiqueta
-issues.label_deletion=Borrado de Etiqueta
-issues.label_deletion_desc=Al borrar la etiqueta su información será eliminada de todas las incidencias relacionadas. Desea continuar?
-issues.label_deletion_success=Etiqueta borrada con éxito!
-
-pulls.compare_changes=Comparar Cambios
-pulls.compare_changes_desc=Comparar dos ramas y generar un pull request con las diferencias.
-pulls.compare_base=base
-pulls.compare_compare=comparar con
-pulls.filter_branch=Filtrar rama
-pulls.no_results=Sin resultados.
-pulls.nothing_to_compare=Nada que comparar. Las dos ramas coinciden.
-pulls.has_pull_request=`Ya existe un pull request entre estas dos ramas: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Crear Pull Request
-pulls.title_desc=desea fusionar %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code>
-pulls.merged_title_desc=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversación
-pulls.tab_commits=Commits
-pulls.tab_files=Archivos modificados
-pulls.reopen_to_merge=Por favor reabra este pull request para proceder con la operación de fusionado.
-pulls.merged=Fuisionado
-pulls.has_merged=¡Este pull request se ha completado con éxito!
-pulls.data_broken=Los datos de este pull request ya no están disponibles porque se ha eliminado la información del fork.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=Puede realizar la operación auto-fusionado en este pull request.
-pulls.cannot_auto_merge_desc=No puede realizar la operación de auto-fusionado porque existen conflictos entre los commits.
-pulls.cannot_auto_merge_helper=Por favor use la línea de comandos para resolverlo.
-pulls.merge_pull_request=Fusionar Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=Nuevo Milestone
-milestones.open_tab=%d abiertas
-milestones.close_tab=%d cerradas
-milestones.closed=Cerrada %s
-milestones.no_due_date=Sin fecha límite
-milestones.open=Abrir
-milestones.close=Cerrar
-milestones.new_subheader=Cree milestones para organizar las incidencias.
-milestones.create=Nuevo Milestone
-milestones.title=Título
-milestones.desc=Descripción
-milestones.due_date=Fecha límite (opcional)
-milestones.clear=Eliminar
-milestones.invalid_due_date_format=El formato de la fecha límite no es válido, debe ser 'y-mm-dd'.
-milestones.create_success=¡El milestone '%s' ha sido creado con éxito!
-milestones.edit=Editar Milestone
-milestones.edit_subheader=Use una buena descripción en el milestone para no confundir al resto de usuarios.
-milestones.cancel=Cancelar
-milestones.modify=Modificar Milestone
-milestones.edit_success=¡Los cambios al milestone '%s' se han guardado con éxito!
-milestones.deletion=Borrar milestone
-milestones.deletion_desc=El borrado de este milestone eliminará su información y las incidencias asociadas. ¿Desea continuar?
-milestones.deletion_success=¡El milestone ha sido eliminado con éxito!
-
-settings=Configuración
-settings.options=Opciones
-settings.collaboration=Colaboración
-settings.hooks=Webhooks
-settings.githooks=Git Hooks
-settings.basic_settings=Configuración Básica
-settings.danger_zone=Zona de Peligro
-settings.site=Sitio Oficial
-settings.update_settings=Actualizar Configuración
-settings.change_reponame_prompt=Este cambio afectará a los enlaces al repositorio.
-settings.transfer=Transferir la Propiedad
-settings.transfer_desc=Transferir este repositorio a otro usuario u organización donde tengas permisos de administración.
-settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con el mismo nombre.
-settings.delete=Eliminar este Repositorio
-settings.delete_desc=Una vez has eliminado un repositorio, no hay vuelta atrás. Por favor, asegúrate de que es lo que quieres.
-settings.transfer_notices_1=- Perderá el permiso de acceso si el nuevo propietario es otro usuario.
-settings.transfer_notices_2=- Conservará el privilegio de acceso si el nuevo propietario es una organización y usted es uno de los propietarios de dicha organización.
-settings.transfer_form_title=Por favor introduzca esta información para confirmar la operación:
-settings.delete_notices_1=- Esta operación <strong>NO PUEDE</strong> revertirse.
-settings.delete_notices_2=- Esta operación eliminará de manera permanente todo el contenido de este repositorio, incluyendo los datos de git, las incidencias, los comentarios y los permisos de acceso de los colaboradores.
-settings.delete_notices_fork_1=- Si este repositorio es público, todos los forks se convertirán en repositorios independientes tras el borrado.
-settings.delete_notices_fork_2=- Si este repositorio es privado, todos los forks serán eliminados simultáneamente.
-settings.delete_notices_fork_3=- Si desea mantener los forks tras el borrado, por favor convierta este repositorio en público antes de proceder.
-settings.update_settings_success=Las opciones del repositorio se han actualizado correctamente.
-settings.transfer_owner=Nuevo Propietario
-settings.make_transfer=Transferir
-settings.transfer_succeed=La propiedad del repositorio ha sido transferida exitosamente.
-settings.confirm_delete=Confirmar Eliminación
-settings.add_collaborator=Añadir Nuevo Colaborador
-settings.add_collaborator_success=Se ha añadido el nuevo colaborador.
-settings.remove_collaborator_success=Se ha eliminado el colaborador.
-settings.user_is_org_member=El usuario es miembro de la organización, no puede ser añadido como colaborador.
-settings.add_webhook=Añadir Webhook
-settings.hooks_desc=Los Webhooks permiten a servicios externos recibir notificaciones cuando sucedan ciertos eventos en Gogs. Cuando sucedan los eventos especificados, enviaremos una petición POST a cada una de las URLs indicadas. Para obtener más información, consulta nuestra <a target="_blank" href="%s">Guía de Webhooks</a>.
-settings.webhook_deletion=Eliminar Webhook
-settings.webhook_deletion_desc=Al borrar este webhook se eliminará su información y todo su historial. ¿Desea continuar?
-settings.webhook_deletion_success=¡Webhook eliminado con éxito!
-settings.webhook.request=Petición
-settings.webhook.response=Respuesta
-settings.webhook.headers=Encabezado
-settings.webhook.payload=Payload
-settings.webhook.body=Cuerpo del mensaje
-settings.githooks_desc=Los Git Hooks son una funcionalidad del propio Git, puedes editar los ficheros de los hooks soportados en la siguiente lista para aplicar operaciones personalizadas.
-settings.githook_edit_desc=Si el hook no está activo, se mostrará contenido de ejemplo. Dejar el contenido vacío deshabilitará este hook.
-settings.githook_name=Nombre del Hook
-settings.githook_content=Contenido del Hook
-settings.update_githook=Actualizar Hook
-settings.add_webhook_desc=Enviaremos una petición <code>POST</code> a la siguiente URL con los detalles de cualquier evento suscrito. También puedes especificar qué formato de datos te gustaría recibir (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Puedes encontrar más información en la <a target="_blank" href="%s">Guía de Webhooks</a>.
-settings.payload_url=URL de Payload
-settings.content_type=Tipo de Contenido
-settings.secret=Secreto
-settings.slack_username=Nombre de usuario
-settings.slack_icon_url=URL de icono
-settings.slack_color=Color
-settings.event_desc=¿Qué eventos te gustaría que desencadenasen este webhook?
-settings.event_push_only=Solo el evento <code>push</code>.
-settings.event_send_everything=Necesito <strong>todo</strong>.
-settings.event_choose=Déjeme elegir lo que necesito.
-settings.event_create=Crear
-settings.event_create_desc=Rama o etiqueta creada
-settings.event_push=Push
-settings.event_push_desc=Git push a un repositorio
-settings.active=Activo
-settings.active_helper=Enviaremos detalles del evento cuando este hook se dispare.
-settings.add_hook_success=Se ha añadido un nuevo webhook.
-settings.update_webhook=Actualizar Webhook
-settings.update_hook_success=Se ha actualizado el Webhook.
-settings.delete_webhook=Borrar Webhook
-settings.recent_deliveries=Envíos Recientes
-settings.hook_type=Tipo de Hook
-settings.add_slack_hook_desc=Añade integración con <a href="%s">Slack</a> a tu repositorio.
-settings.slack_token=Token
-settings.slack_domain=Dominio
-settings.slack_channel=Canal
-settings.deploy_keys=Claves de Despliegue
-settings.add_deploy_key=Añadir Clave de Despliegue
-settings.no_deploy_keys=No has añadido ninguna clave de despliegue.
-settings.title=Título
-settings.deploy_key_content=Contenido
-settings.key_been_used=Se ha usado la clave de despliegue.
-settings.key_name_used=Ya existe una clave de despliegue con el mismo nombre.
-settings.add_key_success=¡La nueva clave de desplieque '%s' ha sido creada con éxito!
-settings.deploy_key_deletion=Eliminar Clave de Despliegue
-settings.deploy_key_deletion_desc=Al eliminar esta clave de despliegue se perderán el permiso de acceso a este repositorio con dicha clave. ¿Deseas continuar?
-settings.deploy_key_deletion_success=¡Clave de despliegue eliminada con éxito!
-
-diff.browse_source=Explorar el Código
-diff.parent=padre
-diff.commit=commit
-diff.data_not_available=Los datos del Diff no están disponibles.
-diff.show_diff_stats=Mostrar Estadísticas de Diff
-diff.stats_desc=Se han <strong>modificado %d ficheros</strong> con <strong>%d adiciones</strong> y <strong>%d borrados</strong>
-diff.bin=BIN
-diff.view_file=Ver Fichero
-
-release.releases=Releases
-release.new_release=Nueva Release
-release.draft=Borrador
-release.prerelease=Pre-Release
-release.stable=Estable
-release.edit=editar
-release.ahead=<strong>%d</strong> commits en %s desde esta release
-release.source_code=Código Fuente
-release.tag_name=Nombre de la etiqueta
-release.target=Destino
-release.tag_helper=Escoge una etiqueta o crea una nueva al publicar.
-release.release_title=Título de la Release
-release.content_with_md=Contenido con formato <a href="%s">Markdown</a>
-release.write=Escribir
-release.preview=Vista Previa
-release.content_placeholder=Escribe algo de contenido
-release.loading=Cargando...
-release.prerelease_desc=Esta es una pre-release
-release.prerelease_helper=Esta release está marcada como no apta para producción.
-release.publish=Publicar Release
-release.save_draft=Guardar Borrador
-release.edit_release=Editar Release
-release.tag_name_already_exist=Ya existe una Release con esta etiqueta.
-
-[org]
-org_name_holder=Nombre de la Organización
-org_name_helper=Los grandes nombres de organizaciones son cortos y memorables.
-create_org=Crear Organización
-repo_updated=Actualizado
-people=Personas
-invite_someone=Invitar a alguien
-teams=Equipos
-lower_members=miembros
-lower_repositories=repositorios
-create_new_team=Crear un Nuevo Equipo
-org_desc=Descripción
-team_name=Nombre del Equipo
-team_desc=Descripción
-team_name_helper=Utiliza este nombre para mencionar a este equipo en las conversaciones.
-team_desc_helper=¿En qué consiste este equipo?
-team_permission_desc=¿Qué nivel de permisos debería tener este equipo?
-
-form.name_reserved=El nombre de la organización '%s' está reservado.
-form.name_pattern_not_allowed=El patrón de nombre de la organización '%s' no está permitido.
-
-settings=Configuración
-settings.options=Opciones
-settings.full_name=Nombre Completo
-settings.website=Página Web
-settings.location=Localización
-settings.update_settings=Actualizar Configuración
-settings.update_setting_success=La configuración de la Organización se ha actualizado correctamente.
-settings.change_orgname_prompt=Este cambio afectará a los enlaces que hacen referencia a la organización.
-settings.update_avatar_success=La configuración de avatar de la organización ha sido actualizada con éxito.
-settings.delete=Eliminar Organización
-settings.delete_account=Eliminar esta Organización
-settings.delete_prompt=Esta operación eliminará esta organización de manera permanente, y ¡<strong>NO PUEDE</strong> deshacerse!
-settings.confirm_delete_account=Confirmar Eliminación
-settings.delete_org_title=Eliminación de la Organización
-settings.delete_org_desc=Esta organización se va a eliminar permanentemente, ¿quieres continuar?
-settings.hooks_desc=Añadir webhooks que serán ejecutados para <strong>todos los repositorios</strong> de esta organización.
-
-members.public=Público
-members.public_helper=convertir en privado
-members.private=Privado
-members.private_helper=convertir en público
-members.owner=Propietario
-members.member=Miembro
-members.conceal=Ocultar
-members.remove=Eliminar
-members.leave=Abandonar
-members.invite_desc=Comienza a teclear un nombre de usuario para invitar a un nuevo miembro a %s:
-members.invite_now=Invitar
-
-teams.join=Unirse
-teams.leave=Abandonar
-teams.read_access=Acceso de Lectura
-teams.read_access_helper=Este equipo podrá ver y clonar sus repositorios.
-teams.write_access=Acceso de Escritura
-teams.write_access_helper=Este equipo podrá leer sus repositorios, así como hacer push en ellos.
-teams.admin_access=Acceso de Administrador
-teams.admin_access_helper=Este equipo podrá hacer push/pull en sus repositorios, así como añadir colaboradores a ellos.
-teams.no_desc=Este equipo no tiene descripción
-teams.settings=Configuración
-teams.owners_permission_desc=Los propietarios tienen acceso completo a <strong>todos los repositorios</strong> y tienen <strong>derechos de administración</strong> en la organización.
-teams.members=Miembros del Equipo
-teams.update_settings=Actualizar Configuración
-teams.delete_team=Borrar este Equipo
-teams.add_team_member=Añadir Miembro al Equipo
-teams.delete_team_title=Eliminar Equipo
-teams.delete_team_desc=Este equipo va a ser eliminado, ¿seguro que quieres continuar? Los miembros de este equipo pueden perder acceso a algunos repositorios.
-teams.delete_team_success=El Equipo se ha eliminado correctamente.
-teams.read_permission_desc=Este equipo tiene permisos de <strong>Lectura</strong>: sus miembros pueden ver y clonar los repositorios del equipo.
-teams.write_permission_desc=Este equipo tiene permisos de <strong>Escritura</strong>: sus miembros pueden leer y hacer push a los repositorios del equipo.
-teams.admin_permission_desc=Este equipo tiene permisos de <strong>Administración</strong>: sus miembros pueden leer, hacer push y añadir colaboradores a los repositorios del equipo.
-teams.repositories=Repositorios del Equipo
-teams.add_team_repository=Añadir Repositorio al Equipo
-teams.remove_repo=Eliminar
-teams.add_nonexistent_repo=El repositorio que estás intentando añadir no existe, por favor, créalo primero.
-
-[admin]
-dashboard=Dashboard
-users=Usuarios
-organizations=Organizaciones
-repositories=Repositorios
-authentication=Autenticaciones
-config=Configuración
-notices=Avisos del Sistema
-monitor=Monitorización
-first_page=Primera
-last_page=Última
-total=Total: %d
-
-dashboard.statistic=Estadísticas
-dashboard.operations=Operaciones
-dashboard.system_status=Estado del Monitor del Sistema
-dashboard.statistic_info=La base de datos de Gogs contiene <b>%d</b> usuarios, <b>%d</b> organizaciones, <b>%d</b> claves públicas, <b>%d</b> repositorios, <b>%d</b> vigilados, <b>%d</b> destacados, <b>%d</b> acciones, <b>%d</b> accesos, <b>%d</b> incidencias, <b>%d</b> comentarios, <b>%d</b> cuentas de redes sociales, <b>%d</b> seguidores, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> fuentes de login, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> etiquetas, <b>%d</b> hooks, <b>%d</b> equipos, <b>%d</b> tareas actualizadas, <b>%d</b> adjuntos.
-dashboard.operation_name=Nombre de la Operación
-dashboard.operation_switch=Interruptor
-dashboard.operation_run=Ejecutar
-dashboard.clean_unbind_oauth=Limpiar solicitudes de OAuth sin confirmar
-dashboard.clean_unbind_oauth_success=Las solicitudes de OAuth sin confirmar se han eliminado correctamente.
-dashboard.delete_inactivate_accounts=Eliminar todas las cuentas inactivas
-dashboard.delete_inactivate_accounts_success=Todas las cuentas inactivas se han eliminado correctamente.
-dashboard.delete_repo_archives=Eliminar todos los archivos de repositorios
-dashboard.delete_repo_archives_success=Todos los archivos de repositorios se han eliminado correctamente.
-dashboard.git_gc_repos=Ejecutar la recolección de basura en los repositorios
-dashboard.git_gc_repos_success=Todos los repositorios han ejecutado correctamente el recolector de basuras.
-dashboard.resync_all_sshkeys=Reescribir el fichero '.ssh/authorized_keys'(atención: se perderán las claves que no pertenezcan a Gogs)
-dashboard.resync_all_sshkeys_success=Todas las claves públicas se han reescrito correctamente.
-dashboard.resync_all_update_hooks=Reescribir todos los hooks de actualización de los repositorios (necesario cuando se modifica la ruta de configuración personalizada)
-dashboard.resync_all_update_hooks_success=Todos los hooks de actualización de los repositorios se han reescrito correctamente.
-
-dashboard.server_uptime=Uptime del Servidor
-dashboard.current_goroutine=Gorutinas Actuales
-dashboard.current_memory_usage=Uso de Memoria Actual
-dashboard.total_memory_allocated=Total de Memoria Reservada
-dashboard.memory_obtained=Memoria Obtenida
-dashboard.pointer_lookup_times=Tiempos de Búsqueda de Punteros
-dashboard.memory_allocate_times=Tiempos de Reserva de Memoria
-dashboard.memory_free_times=Tiempos de Liberado de Memoria
-dashboard.current_heap_usage=Uso de Heap Actual
-dashboard.heap_memory_obtained=Memoria de Heap Obtenida
-dashboard.heap_memory_idle=Memoria de Heap Inactiva
-dashboard.heap_memory_in_use=Memoria de Heap en Uso
-dashboard.heap_memory_released=Memoria de Heap Liberada
-dashboard.heap_objects=Objetos en el Heap
-dashboard.bootstrap_stack_usage=Uso de la Pila de Bootstrap
-dashboard.stack_memory_obtained=Memoria de Pila Obtenida
-dashboard.mspan_structures_usage=Uso de Estructuras MSpan
-dashboard.mspan_structures_obtained=Estructuras MSpan Obtenidas
-dashboard.mcache_structures_usage=Uso de estructuras MCache
-dashboard.mcache_structures_obtained=Estructuras MCache Obtenidas
-dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtenido
-dashboard.gc_metadata_obtained=Metadatos del Recolector de Basuras Obtenidos
-dashboard.other_system_allocation_obtained=Otros Recursos del Sistema Asignados
-dashboard.next_gc_recycle=Siguiente Reciclado del Recolector de Basuras
-dashboard.last_gc_time=Tiempo desde el Último GC
-dashboard.total_gc_time=Pausa Total por GC
-dashboard.total_gc_pause=Pausa Total por GC
-dashboard.last_gc_pause=Última Pausa por GC
-dashboard.gc_times=Ejecuciones GC
-
-users.user_manage_panel=Panel de Gestión de Usuarios
-users.new_account=Crear Nueva Cuenta
-users.name=Nombre
-users.activated=Activado
-users.admin=Administrador
-users.repos=Repositorios
-users.created=Creado
-users.send_register_notify=Enviar notificación de registro al usuario
-users.new_success=La cuenta '%s' ha sido creada con éxito.
-users.edit=Editar
-users.auth_source=Fuente de Autenticación
-users.local=Local
-users.auth_login_name=Nombre de Inicio de Sesión de Autenticación
-users.password_helper=Deje el campo vacío si no desea cambiar la contraseña.
-users.update_profile_success=El perfil de la cuenta se ha actualizado correctamente.
-users.edit_account=Editar Cuenta
-users.is_activated=Esta cuenta está activada
-users.is_admin=Esta cuenta tiene permisos de administrador
-users.allow_git_hook=Esta cuenta tiene permisos para crear hooks de Git
-users.update_profile=Actualizar Perfil de la Cuenta
-users.delete_account=Eliminar esta Cuenta
-users.still_own_repo=Esta cuenta es propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
-users.still_has_org=Esta cuenta es miembro de una o más organizaciones, tienes que abandonarlas o eliminarlas primero.
-users.deletion_success=Su cuenta ha sido eliminada correctamente!
-
-orgs.org_manage_panel=Panel de Gestión de Organización
-orgs.name=Nombre
-orgs.teams=Equipos
-orgs.members=Miembros
-
-repos.repo_manage_panel=Panel de Gestión de Repositorios
-repos.owner=Propietario
-repos.name=Nombre
-repos.private=Privado
-repos.watches=Vigilantes
-repos.stars=Estrellas
-repos.issues=Incidencias
-
-auths.auth_manage_panel=Panel de Administración de Autenticación
-auths.new=Añadir Nuevo Origen
-auths.name=Nombre
-auths.type=Tipo
-auths.enabled=Activo
-auths.updated=Actualizado
-auths.auth_type=Tipo de Autenticación
-auths.auth_name=Nombre de Autenticación
-auths.domain=Dominio
-auths.host=Host
-auths.port=Puerto
-auths.bind_dn=Bind DN
-auths.bind_password=Contraseña Bind
-auths.bind_password_helper=Advertencia: La contraseña se almacena como texto plano. No utilice una cuenta con privilegios elevados.
-auths.user_base=Base de Búsqueda de Usuarios
-auths.user_dn=DN de Usuario
-auths.attribute_name=Atributo nombre
-auths.attribute_surname=Atributo apellido
-auths.attribute_mail=Atributo correo electrónico
-auths.filter=Filtro de Usuario
-auths.admin_filter=Filtro de Aministrador
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=Tipo de Autenticación SMTP
-auths.smtphost=SMTP Host
-auths.smtpport=Puerto SMTP
-auths.allowed_domains=Dominios Permitidos
-auths.allowed_domains_helper=Deje el campo vacío si no desea restringir ningún dominio. Para restringir más de uno, separe los dominios con una coma ','.
-auths.enable_tls=Habilitar Cifrado TLS
-auths.skip_tls_verify=Omitir la verificación TLS
-auths.pam_service_name=Nombre del Servicio PAM
-auths.enable_auto_register=Hablilitar Auto-Registro
-auths.tips=Consejos
-auths.edit=Editar la Configuración de Autenticación
-auths.activated=Esta autenticación ha sido activada
-auths.new_success=¡La autenticación '%s' ha sido añadida con éxito!
-auths.update_success=La configuración de autenticación ha sido actualizada con éxito.
-auths.update=Actualizar la Configuración de Autenticación
-auths.delete=Eliminar Autenticación
-auths.delete_auth_title=Borrado de Autenticación
-auths.delete_auth_desc=Esta autenticación será eliminada. ¿Deseas continuar?
-auths.deletion_success=¡La autenticación ha sido eliminada con éxito!
-
-config.server_config=Configuración del Servidor
-config.app_name=Nombre de la Aplicación
-config.app_ver=Versión de la Aplicación
-config.app_url=URL de la Aplicación
-config.domain=Dominio
-config.offline_mode=Modo Sin Conexión
-config.disable_router_log=Deshabilitar Log del Router
-config.run_user=Ejecutada como Usuario
-config.run_mode=Modo de Ejecución
-config.repo_root_path=Ruta del Repositorio
-config.static_file_root_path=Ruta de los Ficheros Estáticos
-config.log_file_root_path=Ruta de los Ficheros de Log
-config.script_type=Tipo de Script
-config.reverse_auth_user=Autenticación Inversa de Usuario
-config.db_config=Configuración de la Base de Datos
-config.db_type=Tipo
-config.db_host=Host
-config.db_name=Nombre
-config.db_user=Usuario
-config.db_ssl_mode=Modo SSL
-config.db_ssl_mode_helper=(solo para "postgres")
-config.db_path=Ruta
-config.db_path_helper=(para "sqlite3" y "tidb")
-config.service_config=Configuración del Servicio
-config.register_email_confirm=Solicitar Confirmación por Correo Electrónico
-config.disable_register=Deshabilitar el Registro
-config.show_registration_button=Mostrar Botón de Registro
-config.require_sign_in_view=Solicitar la Vista de Inicio de Sesión
-config.enable_cache_avatar=Activar la Caché de Avatar
-config.mail_notify=Notificación por Correo Electrónico
-config.disable_key_size_check=Deshabilitar la comprobación de Tamaño Mínimo de Clave
-config.enable_captcha=Activar Captcha
-config.active_code_lives=Habilitar Vida del Código
-config.reset_password_code_lives=Restablecer Contraseña de Vida del Código
-config.webhook_config=Configuración de Webhooks
-config.queue_length=Tamaño de Cola de Envío
-config.deliver_timeout=Timeout de Entrega
-config.skip_tls_verify=Omitir la Verificación TLS
-config.mailer_config=Configuración del Mailer
-config.mailer_enabled=Activado
-config.mailer_disable_helo=Desactivar HELO
-config.mailer_name=Nombre
-config.mailer_host=Host
-config.mailer_user=Usuario
-config.oauth_config=Configuración OAuth
-config.oauth_enabled=Activado
-config.cache_config=Configuración de la Caché
-config.cache_adapter=Adaptador de la Caché
-config.cache_interval=Intervalo de la Caché
-config.cache_conn=Conexión de la Caché
-config.session_config=Configuración de la Sesión
-config.session_provider=Proveedor de la Sesión
-config.provider_config=Configuración del Proveedor
-config.cookie_name=Nombre de la Cookie
-config.enable_set_cookie=Activar Establecimiento de Cookie
-config.gc_interval_time=Intervalo de tiempo del GC
-config.session_life_time=Tiempo de Vida de la Sesión
-config.https_only=Sólo HTTPS
-config.cookie_life_time=Tiempo de Vida de la Cookie
-config.picture_config=Configuración de Imagen
-config.picture_service=Servicio de Imágen
-config.disable_gravatar=Desactivar Gravatar
-config.log_config=Configuración del Log
-config.log_mode=Modo del Log
-
-monitor.cron=Tareas de Cron
-monitor.name=Nombre
-monitor.schedule=Agenda
-monitor.next=Próxima Vez
-monitor.previous=Vez Anterior
-monitor.execute_times=Ejecuciones
-monitor.process=Procesos en Ejecución
-monitor.desc=Descripción
-monitor.start=Hora de Inicio
-monitor.execute_time=Tiempo de ejecución
-
-notices.system_notice_list=Notificaciones del Sistema
-notices.type=Tipo
-notices.type_1=Repositorio
-notices.desc=Descripción
-notices.op=Op.
-notices.delete_success=La notificación del sistema se ha eliminado correctamente.
-
-[action]
-create_repo=repositorio creado <a href="%s">%s</a>
-rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a>
-commit_repo=hizo push a <a href="%s/src/%s">%[2]s</a> en <a href="%[1]s">%[3]s</a>
-create_issue=`incidencia abierta <a href="%s/issues/%s">%s#%[2]s</a>`
-create_pull_request=`creado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`comentó en la incidencia <a href="%s/issues/%s">%s#%[2]s</a>`
-merge_pull_request=`fusionado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-transfer_repo=transfirió el repositorio <code>%s</code> a <a href="%s">%s</a>
-push_tag=hizo push del tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
-compare_2_commits=Ver la comparación de estos 2 commits
-
-[tool]
-ago=hace
-from_now=desde ahora
-now=ahora
-1s=1 segundo %s
-1m=1 minuto %s
-1h=1 hora %s
-1d=1 día %s
-1w=1 semana %s
-1mon=1 mes %s
-1y=1 año %s
-seconds=%d segundos %s
-minutes=%d minutos %s
-hours=%d horas %s
-days=%d días %s
-weeks=%d semanas %s
-months=%d meses %s
-years=%d años %s
-raw_seconds=segundos
-raw_minutes=minutos
-
-[dropzone]
-default_message=Suéltelos aquí o pulse para cargar archivos.
-invalid_input_type=No está permitido cargar archivos de este tipo.
-file_too_big=El tamaño del archivo ({{filesize}} MB) excede el tamaño máximo ({{maxFilesize}} MB).
-remove_file=Eliminar archivo
-
+app_desc=Un servicio de Git auto alojado y sin complicaciones
+
+home=Inicio
+dashboard=Panel de control
+explore=Explorar
+help=Ayuda
+sign_in=Iniciar sesión
+sign_out=Cerrar sesión
+sign_up=Suscripción
+register=Registro
+website=Página Web
+version=Versión
+page=Página
+template=Plantilla
+language=Idioma
+create_new=Crear...
+user_profile_and_more=Perfil de usuario y más
+signed_in_as=Identificado como
+
+username=Nombre de usuario
+email=Correo electrónico
+password=Contraseña
+re_type=Ingrese de nuevo
+captcha=Captcha
+
+repository=Repositorio
+organization=Organización
+mirror=Mirror
+new_repo=Nuevo repositorio
+new_migrate=Nueva Migración
+new_fork=Nuevo Fork del Repositorio
+new_org=Nueva organización
+manage_org=Administrar organizaciones
+admin_panel=Panel de administración
+account_settings=Configuraciones de la cuenta
+settings=Configuraciones
+your_profile=Tu perfil
+your_settings=Tu configuración
+
+news_feed=Feed de noticias
+pull_requests=Pull Requests
+issues=Incidencias
+
+cancel=Cancelar
+
+[search]
+search=Buscar...
+repository=Repositorio
+user=Usuario
+issue=Incidencia
+code=Código
+
+[install]
+install=Instalación
+title=Pasos de la instalación por primera vez
+docker_helper=Si está ejecutando Gogs usando Docker, por favor lea <a target="_blank" href="%s"> estas pautas</a> antes de cambiar nada en esta página!
+requite_db_desc=Gogs requiere una base de datos MySQL, PostgreSQL, SQLite3 o TiDB.
+db_title=Configuración de base de datos
+db_type=Tipo de base de datos
+host=Host
+user=Usuario
+password=Contraseña
+db_name=Nombre de la base de datos
+db_helper=Por favor utilice el motor INNODB con la configuración de caracteres utf8_general_ci para MySQL.
+ssl_mode=Modo SSL
+path=Ruta
+sqlite_helper=Ruta del archivo con la base de datos SQLite3 o TiDB.
+err_empty_db_path=La ruta a la base de datos SQLite3 o TiDB no puede estar vacía.
+err_invalid_tidb_name=El nombre de la base de datos TiDB no puede contener los caracteres "." ni "-".
+no_admin_and_disable_registration=No puede deshabilitar el registro sin crear una cuenta de administrador.
+err_empty_admin_password=La contraseña de administrador no puede estar vacía.
+
+general_title=Configuración General de Gogs
+app_name=Nombre de la Aplicación
+app_name_helper=Pon aquí el nombre de tu organización, ¡alto y claro!
+repo_path=Ruta del repositorio de Raiz (Root)
+repo_path_helper=Todos los repositorios remotos de Git se guardarán en este directorio.
+run_user=Ejecutar como Usuario
+run_user_helper=El usuario necesita tener acceso a la Ruta Raíz del Repositorio y ejecutar Gogs.
+domain=Dominio
+domain_helper=Esto afecta a las URLs para clonar por SSH.
+ssh_port=Puerto SSH
+ssh_port_helper=Número de puerto de su servidor SSH, déjelo en blanco para desactivar SSH.
+http_port=Puerto HTTP
+http_port_helper=Puerto en el que escuchará la aplicación.
+app_url=URL de la aplicación
+app_url_helper=Esto afecta a las URLs para clonar por HTTP/HTTPS y a algunos correos electrónicos.
+
+optional_title=Configuración Opcional
+email_title=Configuración del Servicio de Correo
+smtp_host=SMTP Host
+smtp_from=Desde
+smtp_from_helper=Remitente del email, RFC 5322. Puede ser solamente una dirección de correo electrónico, o estar en el formato "Nombre" <email@example.com>.
+mailer_user=Remitente del Correo Electrónico
+mailer_password=Contraseña del Remitente
+register_confirm=Habilitar la Confirmación en el Registro
+mail_notify=Habilitar las Notificaciones de Correo
+server_service_title=Configuración de Servidor y Otros Servicios
+offline_mode=Activar el modo Sin Conexión
+offline_mode_popup=Desactivar el CDN incluso en el modo de producción, todos los recursos se servirán localmente.
+disable_gravatar=Desactivar el Servicio Gravatar
+disable_gravatar_popup=Desactivar Gravatar y cualquier otra fuente personalizada. Todos los avatares deben ser cargados por los usuarios o en su defecto se mostrará el avatar predeterminado.
+disable_registration=Desactivar Auto-Registro
+disable_registration_popup=Desactivar auto-registro del usuario, solo el administrador podrá crear cuentas nuevas.
+enable_captcha=Activar la Captcha
+enable_captcha_popup=Requiere validar la captcha para el auto-registro de usuario.
+require_sign_in_view=Activar el Inicio de Sesión obligatorio para Ver Páginas
+require_sign_in_view_popup=Solo los usuarios logados pueden ver páginas, los visitantes anónimos solo podrán ver las páginas de login/registro.
+admin_setting_desc=No es necesario crear una cuenta de administrador ahora mismo, el usuario que tenga ID=1 obtendrá privilegios de administrador automáticamente.
+admin_title=Configuración de la Cuenta de Administrador
+admin_name=Nombre de usuario
+admin_password=Contraseña
+confirm_password=Confirmar Contraseña
+admin_email=Correo electrónico del administrador
+install_gogs=Instalar Gogs
+test_git_failed=Fallo al probar el comando 'git': %v
+sqlite3_not_available=Tu versión no soporta SQLite3, por favor descarga el binario oficial desde %s, NO la versión de gobuild.
+invalid_db_setting=La configuración de la base de datos no es correcta: %v
+invalid_repo_path=La ruta de la raíz del repositorio es inválida: %v
+run_user_not_match=El usuario que está ejecutando la aplicación no es el usuario actual: %s -> %s
+save_config_failed=Error al guardar la configuración: %v
+invalid_admin_setting=La configuración de la cuenta de administración es inválida: %v
+install_success=Bienvenido! Estamos encantados de que hayas escogido Gogs, diviértete y cuídate.
+
+[home]
+uname_holder=Nombre de usuario o correo electrónico
+password_holder=Contraseña
+switch_dashboard_context=Cambiar el contexto del Dashboard
+my_repos=Mis Repositorios
+collaborative_repos=Repositorios Colaborativos
+my_orgs=Mis Organizaciones
+my_mirrors=Mis Mirrors
+view_home=Ver %s
+
+issues.in_your_repos=En tus repositorios
+
+[explore]
+repos=Repositorios
+
+[auth]
+create_new_account=Crear una Nueva Cuenta
+register_hepler_msg=¿Ya tienes una cuenta? ¡Inicia sesión!
+social_register_hepler_msg=¿Ya tienes una cuenta? ¡Enlázala!
+disable_register_prompt=Lo sentimos, el registro está deshabilitado. Por favor, contacta con el administrador del sitio.
+disable_register_mail=Lo sentimos. Los correos de Confirmación de Registro están deshabilitados.
+remember_me=Recuérdame
+forgot_password=He olvidado mi contraseña
+forget_password=¿Has olvidado tu contraseña?
+sign_up_now=¿Necesitas una cuenta? Regístrate ahora.
+confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a <b>%s</b>. Por favor, comprueba tu bandeja de entrada en las siguientes %d horas para completar el proceso de registro.
+active_your_account=Activa tu cuenta
+resent_limit_prompt=Lo sentimos, estás solicitando el reenvío del mail de activación con demasiada frecuencia. Por favor, espera 3 minutos.
+has_unconfirmed_mail=Hola %s, tu correo electrónico (<b>%s</b>) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón.
+resend_mail=Haz click aquí para reenviar tu correo electrónico de activación
+email_not_associate=Esta dirección de correo electrónico no esta asociada a ninguna cuenta.
+send_reset_mail=Haga clic aquí para (re)enviar el correo para el restablecimiento de la contraseña
+reset_password=Restablecer su contraseña
+invalid_code=Lo sentimos, su código de confirmación ha expirado o no es valido.
+reset_password_helper=Haga Clic aquí para restablecer su contraseña
+password_too_short=La longitud de la contraseña no puede ser menor a 6.
+
+[mail]
+activate_account=Por favor, active su cuenta
+activate_email=Verifique su correo electrónico
+reset_password=Restablezca su contraseña
+register_success=Registro completado, bienvenido
+register_notify=Bienvenido a bordo
+
+[modal]
+yes=Sí
+no=No
+modify=Editar
+
+[form]
+UserName=Nombre de usuario
+RepoName=Nombre del repositorio
+Email=Dirección de correo electrónico
+Password=Contraseña
+Retype=Vuelva a escribir la contraseña
+SSHTitle=Nombre de la Clave de SSH
+HttpsUrl=HTTPS URL
+PayloadUrl=URL de carga
+TeamName=Nombre del equipo
+AuthName=Nombre de autorización
+AdminEmail=Correo electrónico del administrador
+
+require_error=` no puede estar vacío.`
+alpha_dash_error=` los caracteres deben ser Alfanumericos o dash(-_).`
+alpha_dash_dot_error=` debe ser un caracter alfanumérivo válido, un guión alto o bajo (-_) o un signo de puntuación.`
+size_error=` debe ser de tamaño %s.`
+min_size_error=` debe contener al menos %s caracteres.`
+max_size_error=` debe contener como máximo %s caracteres.`
+email_error=` no es una dirección de correo válida.`
+url_error=` no es una URL válida.`
+include_error='debe contener la subcadena '%s'.'
+unknown_error=Error desconocido:
+captcha_incorrect=El captcha no es válido.
+password_not_match=La contraseña de confirmación no coincide.
+
+username_been_taken=Ya existe un usuario con este nombre.
+repo_name_been_taken=Ya existe un repositorio con este nombre.
+org_name_been_taken=Ya existe una organización con este nombre.
+team_name_been_taken=Ya existe un equipo con este nombre.
+email_been_used=Esta dirección de correo electrónico ya está en uso.
+illegal_team_name=El nombre del equipo contiene caracteres inválidos.
+username_password_incorrect=Nombre de usuario o contraseña incorrectos.
+enterred_invalid_repo_name=Por favor, asegúrate de que has introducido correctamente el nombre del repositorio.
+enterred_invalid_owner_name=Por favor, asegúrate de que has introducido correctamente el nombre del propietario.
+enterred_invalid_password=Por favor, asegúrate de que has introducido correctamente tu contraseña.
+user_not_exist=El usuario indicado no existe.
+last_org_owner=El usuario que se intenta eliminar es el último miembro del equipo de propietarios. Debe existir otro propietario.
+
+invalid_ssh_key=Lo sentimos, no somos capaces de verificar tu clave SSH: %s
+unable_verify_ssh_key=Gogs no puede velificar tu clave SSH, pero asumimos que es válida. Por favor, asegúrate de que es así.
+auth_failed=Error de autenticación: %v
+
+still_own_repo=Tu cuenta es la propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
+still_has_org=Tu cuenta es miembro de una o más organizaciones, tienes que abandonarlas o eliminarlas primero.
+org_still_own_repo=Esta organización es dueña de uno o más repositorios, tienes que eliminarlos o transferirlos primero.
+
+still_own_user=Esta autenticación está en uso por algunos usuarios, debes moverlos y antes de eliminarla.
+
+target_branch_not_exist=La rama de destino no existe
+
+[user]
+change_avatar=Cambia tu avatar en gravatar.com
+change_custom_avatar=Cambia tu avatar en la configuración
+join_on=Registrado en
+repositories=Repositorios
+activity=Actividad pública
+followers=Seguidores
+starred=Destacados
+following=Siguiendo
+
+form.name_reserved=El usuario '%s' está reservado.
+form.name_pattern_not_allowed=El patrón de nombre de usuario '%s' no está permitido.
+
+[settings]
+profile=Perfil
+password=Contraseña
+ssh_keys=Claves SSH
+social=Redes Sociales
+applications=Aplicaciones
+orgs=Organizaciones
+delete=Eliminar Cuenta
+uid=UUID
+
+public_profile=Perfil Público
+profile_desc=Tu correo electrónico es público y será usado para todas las notificaciones relacionadas con cualquier cuenta y cualquier operación hecha a través de la web.
+full_name=Nombre Completo
+website=Página Web
+location=Localización
+update_profile=Actualizar Perfil
+update_profile_success=Tu perfil se ha actualizado correctamente.
+change_username=Nombre de usuario modificado
+change_username_prompt=Este cambio afectará a los enlaces que hacen referencia a su cuenta.
+continue=Continuar
+cancel=Cancelar
+
+enable_custom_avatar=Activar Avatar Personalizado
+enable_custom_avatar_helper=Activa esto para desactivar los avatares de Gravatar
+choose_new_avatar=Selecciona nuevo avatar
+update_avatar=Actualizar Configuración del Avatar
+uploaded_avatar_not_a_image=El archivo enviado no es una imagen.
+no_custom_avatar_available=No hay ningún avatar personalizado disponible, no se puede habilitar.
+update_avatar_success=La configuración de tu avatar se ha actualizado correctamente.
+
+change_password=Cambiar contraseña
+old_password=Contraseña actual
+new_password=Nueva contraseña
+retype_new_password=Confirmar nueva contraseña
+password_incorrect=Contraseña actual incorrecta.
+change_password_success=La contraseña se ha modificado correctamente. Ya puedes iniciar sesión con tu nueva contraseña.
+
+emails=Direcciones de correo electrónico
+manage_emails=Gestionar direcciones de correo electrónico
+email_desc=Tu dirección de correo principal se utilizará para las notificaciones y otras operaciones.
+primary=Principal
+primary_email=Marcar como principal
+delete_email=Eliminar
+email_deletion=Eliminación de Correo Electrónico
+email_deletion_desc=Al eliminar esta dirección de correo electrónico se eliminará toda la información asociada a esta dirección de correo electrónico. ¿Deseas continuar?
+email_deletion_success=¡El correo electrónico ha sido eliminado correctamente!
+add_new_email=Añadir nueva dirección de correo electrónico
+add_email=Añadir correo electrónico
+add_email_confirmation_sent=Un nuevo correo de confirmación ha sido enviado a '%s'. Por favor, comprueba tu bandeja de entrada en las próximas %d horas para completar el proceso.
+add_email_success=Tu nuevo correo electrónico se ha añadido correctamente.
+
+manage_ssh_keys=Gestionar Claves SSH
+add_key=Añadir Clave
+ssh_desc=Esta es la lista de claves SSH asociadas con tu cuenta. Elimina cualquier clave que no reconozcas.
+ssh_helper=<strong>¿Necesitas ayuda?</strong> Consulta la guía de GitHub para <a href="%s">generar claves SSH</a> o solucionar <a href="%s">problemas comunes</a> al usar SSH.
+add_new_key=Añadir clave SSH
+ssh_key_been_used=El contenido de la clave pública se ha utilizado.
+ssh_key_name_used=Ya existe una clave pública con el mismo nombre.
+key_name=Nombre de la Clave
+key_content=Contenido
+add_key_success=¡Nueva clave SSH '%s' añadida correctamente!
+delete_key=Eliminar
+ssh_key_deletion=Borrado de Clave SSH
+ssh_key_deletion_desc=Si elimina esta clave SSH no podrá volver a usarla para acceder a su cuenta. ¿Desea continuar?
+ssh_key_deletion_success=¡La clave SSH ha sido eliminada con éxito!
+add_on=Añadido en
+last_used=Utilizado por última vez en
+no_activity=No hay actividad reciente
+key_state_desc=Esta clave ha sido usada en los últimos 7 días
+token_state_desc=Token usado en los últimos 7 días
+
+manage_social=Gestionar Redes Sociales asociadas
+social_desc=Esta es una lista de las Redes Sociales asociadas. Elimina cualquier vínculo que no reconozcas.
+unbind=Desvincular
+unbind_success=La Red Social ha sido desvinculada.
+
+manage_access_token=Gestionar los Tokens de Acceso personales
+generate_new_token=Generar nuevo Token
+tokens_desc=Tokens usados para acceder al API de Gogs.
+new_token_desc=Desde ahora, todos los tokens tendrán acceso completo a tu cuenta.
+token_name=Nombre del Token
+generate_token=Generar Token
+generate_token_succees=¡Los nuevos tokens de acceso se han generado correctamente! Asegúrate de copiar tu nuevo token de acceso personal. ¡No podrás verlo de nuevo!
+delete_token=Eliminar
+access_token_deletion=Borrado de Token de Acceso Personal
+access_token_deletion_desc=Si elimina este token de acceso personal la aplicación asociada perderá el permiso de acceso. ¿Desea continuar?
+delete_token_success=¡El token de acceso personal ha sido eliminado con éxito! No se olvide de actualizar también las aplicaciones asociadas.
+
+delete_account=Elimina tu cuenta
+delete_prompt=La operación eliminará tu cuenta de forma permanente y ¡<strong>NO</strong> se puede deshacer!
+confirm_delete_account=Confirmar Eliminación
+delete_account_title=Eliminación de Cuenta
+delete_account_desc=Esta cuenta se va a eliminar permanentemente, ¿quieres continuar?
+
+[repo]
+owner=Propietario
+repo_name=Nombre del Repositorio
+repo_name_helper=Los grandes nombres de repositorios son cortos, memorables y <strong>únicos</strong>.
+visibility=Visibilidad
+visiblity_helper=Este repositorio es <span class="ui red text">Privado</span>
+visiblity_helper_forced=El administrador web ha obligado a todos los repositorios nuevos a ser <span class="ui red text"> privados</span>
+visiblity_fork_helper=(Este cambio afectará a todos los forks)
+clone_helper=¿Necesitas ayuda con el clone? ¡Consulta la <a target="_blank" href="%s">Ayuda</a>!
+fork_repo=Hacer Fork del repositorio
+fork_from=Crear un Fork desde
+fork_visiblity_helper=No es posible cambiar la visibilidad de un Fork
+repo_desc=Descripción
+repo_lang=Idioma
+repo_lang_helper=Seleccione archivo .gitignore
+license=Licencia
+license_helper=Selecciona un fichero de licencia
+readme=Readme
+readme_helper=Seleccione una plantilla de archivo readme
+auto_init=Inicializar los archivos seleccionados y plantillas de este repositorio
+create_repo=Crear Repositorio
+default_branch=Rama por defecto
+mirror_interval=Intervalo de mirror(en horas)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=El nombre del repositorio '%s' está reservado.
+form.name_pattern_not_allowed=El patrón del nombre del repositorio '%s' no está permitido.
+
+need_auth=Requiere Autorización
+migrate_type=Tipo de Migración
+migrate_type_helper=Este repositorio será un <span class="text blue">mirror</span>
+migrate_repo=Migrar Repositorio
+migrate.clone_address=Clonar Dirección
+migrate.clone_address_desc=Puede ser una URL HTTP/HTTPS/GIT o una ruta local del servidor.
+migrate.permission_denied=No te está permitido importar repositorios locales.
+migrate.invalid_local_path=Rutal local inválida, no existe o no es un directorio.
+migrate.failed=Migration failed: %v
+
+forked_from=forked de
+fork_from_self=Eres el propietario del repositorio, ¡no puedes hacer fork!
+copy_link=Copiar
+copy_link_success=Copiado!
+copy_link_error=Presione ⌘ + C o Ctrl-C para copiar
+copied=Copiado correctamente
+unwatch=Dejar de vigilar
+watch=Vigilar
+unstar=Eliminar destacado
+star=Destacar
+fork=Fork
+
+no_desc=Sin Descripción
+quick_guide=Guía Rápida
+clone_this_repo=Clonar este repositorio
+create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
+push_exist_repo=Hacer Push de un repositorio existente desde línea de comandos
+repo_is_empty=Este repositorio está vacío, por favor, ¡vuelva más tarde!
+
+branch=Rama
+tree=Árbol
+filter_branch_and_tag=Filtrar por rama o etiqueta
+branches=Ramas
+tags=Etiquetas
+issues=Incidencias
+pulls=Pull Requests
+labels=Etiquetas
+milestones=Milestones
+commits=Commits
+releases=Releases
+file_raw=Raw
+file_history=Histórico
+file_view_raw=Ver Raw
+file_permalink=Permalink
+
+commits.commits=Commits
+commits.search=Buscar Commits
+commits.find=Buscar
+commits.author=Autor
+commits.message=Mensaje
+commits.date=Fecha
+commits.older=Anterior
+commits.newer=Posterior
+
+issues.new=Nueva Incidencia
+issues.new.labels=Etiquetas
+issues.new.no_label=Sin etiquetas
+issues.new.clear_labels=Limpiar etiquetas
+issues.new.milestone=Milestone
+issues.new.no_milestone=Sin Milestone
+issues.new.clear_milestone=Limpiar Milestone
+issues.new.open_milestone=Milestones abiertas
+issues.new.closed_milestone=Milestones cerradas
+issues.new.assignee=Asignado a
+issues.new.clear_assignee=Limpiar asignado
+issues.new.no_assignee=Sin asignado
+issues.create=Crear incidencia
+issues.new_label=Nueva Etiqueta
+issues.new_label_placeholder=Nombre etiqueta...
+issues.create_label=Crear etiqueta
+issues.open_tab=%d abiertas
+issues.close_tab=%d cerradas
+issues.filter_label=Etiqueta
+issues.filter_label_no_select=Ninguna etiqueta seleccionada
+issues.filter_milestone=Milestone
+issues.filter_milestone_no_select=Ningún Milestone seleccionado
+issues.filter_assignee=Asignada a
+issues.filter_assginee_no_select=Sin asignar
+issues.filter_type=Tipo
+issues.filter_type.all_issues=Todas las incidencias
+issues.filter_type.assigned_to_you=Asignadas a ti
+issues.filter_type.created_by_you=Creadas por ti
+issues.filter_type.mentioning_you=Citado en
+issues.filter_sort=Ordenar
+issues.filter_sort.latest=Más recientes
+issues.filter_sort.oldest=Más antiguas
+issues.filter_sort.recentupdate=Actualizada recientemente
+issues.filter_sort.leastupdate=Actualizada menos recientemente
+issues.filter_sort.mostcomment=Más comentadas
+issues.filter_sort.leastcomment=Menos comentadas
+issues.opened_by=abierta %[1]s por <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=abierta %[1]s por %[2]s
+issues.previous=Página Anterior
+issues.next=Página Siguiente
+issues.open_title=Abierta
+issues.closed_title=Cerrada
+issues.num_comments=%d comentarios
+issues.commented_at=`comentada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Aun no existe contenido.
+issues.close_issue=Cerrar
+issues.close_comment_issue=Comentar y cerrar
+issues.reopen_issue=Reabrir
+issues.reopen_comment_issue=Comentar y reabrir
+issues.create_comment=Comentar
+issues.closed_at=`cerrada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`reabierta <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`mencionada esta incidencia en un commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Autor
+issues.admin=Administrador
+issues.owner=Propietario
+issues.sign_up_for_free=Registro gratuito
+issues.sign_in_require_desc=para unirse a esta conversación. ¿Ya dispone de una cuenta? <a href="%s">Inicie sesión para comentar</a>
+issues.edit=Editar
+issues.cancel=Cancelar
+issues.save=Guardar
+issues.label_title=Nombre etiqueta
+issues.label_color=Color etiqueta
+issues.label_count=%d etiquetas
+issues.label_open_issues=%d incidencias abiertas
+issues.label_edit=Editar
+issues.label_delete=Borrar
+issues.label_modify=Edición de Etiqueta
+issues.label_deletion=Borrado de Etiqueta
+issues.label_deletion_desc=Al borrar la etiqueta su información será eliminada de todas las incidencias relacionadas. Desea continuar?
+issues.label_deletion_success=Etiqueta borrada con éxito!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Comparar Cambios
+pulls.compare_changes_desc=Comparar dos ramas y generar un pull request con las diferencias.
+pulls.compare_base=base
+pulls.compare_compare=comparar con
+pulls.filter_branch=Filtrar rama
+pulls.no_results=Sin resultados.
+pulls.nothing_to_compare=Nada que comparar. Las dos ramas coinciden.
+pulls.has_pull_request=`Ya existe un pull request entre estas dos ramas: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Crear Pull Request
+pulls.title_desc=desea fusionar %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code>
+pulls.merged_title_desc=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversación
+pulls.tab_commits=Commits
+pulls.tab_files=Archivos modificados
+pulls.reopen_to_merge=Por favor reabra este pull request para proceder con la operación de fusionado.
+pulls.merged=Fuisionado
+pulls.has_merged=¡Este pull request se ha completado con éxito!
+pulls.data_broken=Los datos de este pull request ya no están disponibles porque se ha eliminado la información del fork.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=Puede realizar la operación auto-fusionado en este pull request.
+pulls.cannot_auto_merge_desc=No puede realizar la operación de auto-fusionado porque existen conflictos entre los commits.
+pulls.cannot_auto_merge_helper=Por favor use la línea de comandos para resolverlo.
+pulls.merge_pull_request=Fusionar Pull Request
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=Nuevo Milestone
+milestones.open_tab=%d abiertas
+milestones.close_tab=%d cerradas
+milestones.closed=Cerrada %s
+milestones.no_due_date=Sin fecha límite
+milestones.open=Abrir
+milestones.close=Cerrar
+milestones.new_subheader=Cree milestones para organizar las incidencias.
+milestones.create=Nuevo Milestone
+milestones.title=Título
+milestones.desc=Descripción
+milestones.due_date=Fecha límite (opcional)
+milestones.clear=Eliminar
+milestones.invalid_due_date_format=El formato de la fecha límite no es válido, debe ser 'yyyy-mm-dd'.
+milestones.create_success=¡El milestone '%s' ha sido creado con éxito!
+milestones.edit=Editar Milestone
+milestones.edit_subheader=Use una buena descripción en el milestone para no confundir al resto de usuarios.
+milestones.cancel=Cancelar
+milestones.modify=Modificar Milestone
+milestones.edit_success=¡Los cambios al milestone '%s' se han guardado con éxito!
+milestones.deletion=Borrar milestone
+milestones.deletion_desc=El borrado de este milestone eliminará su información y las incidencias asociadas. ¿Desea continuar?
+milestones.deletion_success=¡El milestone ha sido eliminado con éxito!
+
+settings=Configuración
+settings.options=Opciones
+settings.collaboration=Colaboración
+settings.hooks=Webhooks
+settings.githooks=Git Hooks
+settings.basic_settings=Configuración Básica
+settings.danger_zone=Zona de Peligro
+settings.site=Sitio Oficial
+settings.update_settings=Actualizar Configuración
+settings.change_reponame_prompt=Este cambio afectará a los enlaces al repositorio.
+settings.transfer=Transferir la Propiedad
+settings.transfer_desc=Transferir este repositorio a otro usuario u organización donde tengas permisos de administración.
+settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con el mismo nombre.
+settings.delete=Eliminar este Repositorio
+settings.delete_desc=Una vez has eliminado un repositorio, no hay vuelta atrás. Por favor, asegúrate de que es lo que quieres.
+settings.transfer_notices_1=- Perderá el permiso de acceso si el nuevo propietario es otro usuario.
+settings.transfer_notices_2=- Conservará el privilegio de acceso si el nuevo propietario es una organización y usted es uno de los propietarios de dicha organización.
+settings.transfer_form_title=Por favor introduzca esta información para confirmar la operación:
+settings.delete_notices_1=- Esta operación <strong>NO PUEDE</strong> revertirse.
+settings.delete_notices_2=- Esta operación eliminará de manera permanente todo el contenido de este repositorio, incluyendo los datos de git, las incidencias, los comentarios y los permisos de acceso de los colaboradores.
+settings.delete_notices_fork_1=- Si este repositorio es público, todos los forks se convertirán en repositorios independientes tras el borrado.
+settings.delete_notices_fork_2=- Si este repositorio es privado, todos los forks serán eliminados simultáneamente.
+settings.delete_notices_fork_3=- Si desea mantener los forks tras el borrado, por favor convierta este repositorio en público antes de proceder.
+settings.update_settings_success=Las opciones del repositorio se han actualizado correctamente.
+settings.transfer_owner=Nuevo Propietario
+settings.make_transfer=Transferir
+settings.transfer_succeed=La propiedad del repositorio ha sido transferida exitosamente.
+settings.confirm_delete=Confirmar Eliminación
+settings.add_collaborator=Añadir Nuevo Colaborador
+settings.add_collaborator_success=Se ha añadido el nuevo colaborador.
+settings.remove_collaborator_success=Se ha eliminado el colaborador.
+settings.search_user_placeholder=Buscar usuario...
+settings.user_is_org_member=El usuario es miembro de la organización, no puede ser añadido como colaborador.
+settings.add_webhook=Añadir Webhook
+settings.hooks_desc=Los Webhooks permiten a servicios externos recibir notificaciones cuando sucedan ciertos eventos en Gogs. Cuando sucedan los eventos especificados, enviaremos una petición POST a cada una de las URLs indicadas. Para obtener más información, consulta nuestra <a target="_blank" href="%s">Guía de Webhooks</a>.
+settings.webhook_deletion=Eliminar Webhook
+settings.webhook_deletion_desc=Al borrar este webhook se eliminará su información y todo su historial. ¿Desea continuar?
+settings.webhook_deletion_success=¡Webhook eliminado con éxito!
+settings.webhook.request=Petición
+settings.webhook.response=Respuesta
+settings.webhook.headers=Encabezado
+settings.webhook.payload=Payload
+settings.webhook.body=Cuerpo del mensaje
+settings.githooks_desc=Los Git Hooks son una funcionalidad del propio Git, puedes editar los ficheros de los hooks soportados en la siguiente lista para aplicar operaciones personalizadas.
+settings.githook_edit_desc=Si el hook no está activo, se mostrará contenido de ejemplo. Dejar el contenido vacío deshabilitará este hook.
+settings.githook_name=Nombre del Hook
+settings.githook_content=Contenido del Hook
+settings.update_githook=Actualizar Hook
+settings.add_webhook_desc=Enviaremos una petición <code>POST</code> a la siguiente URL con los detalles de cualquier evento suscrito. También puedes especificar qué formato de datos te gustaría recibir (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Puedes encontrar más información en la <a target="_blank" href="%s">Guía de Webhooks</a>.
+settings.payload_url=URL de Payload
+settings.content_type=Tipo de Contenido
+settings.secret=Secreto
+settings.slack_username=Nombre de usuario
+settings.slack_icon_url=URL de icono
+settings.slack_color=Color
+settings.event_desc=¿Qué eventos te gustaría que desencadenasen este webhook?
+settings.event_push_only=Solo el evento <code>push</code>.
+settings.event_send_everything=Necesito <strong>todo</strong>.
+settings.event_choose=Déjeme elegir lo que necesito.
+settings.event_create=Crear
+settings.event_create_desc=Rama o etiqueta creada
+settings.event_push=Push
+settings.event_push_desc=Git push a un repositorio
+settings.active=Activo
+settings.active_helper=Enviaremos detalles del evento cuando este hook se dispare.
+settings.add_hook_success=Se ha añadido un nuevo webhook.
+settings.update_webhook=Actualizar Webhook
+settings.update_hook_success=Se ha actualizado el Webhook.
+settings.delete_webhook=Borrar Webhook
+settings.recent_deliveries=Envíos Recientes
+settings.hook_type=Tipo de Hook
+settings.add_slack_hook_desc=Añade integración con <a href="%s">Slack</a> a tu repositorio.
+settings.slack_token=Token
+settings.slack_domain=Dominio
+settings.slack_channel=Canal
+settings.deploy_keys=Claves de Despliegue
+settings.add_deploy_key=Añadir Clave de Despliegue
+settings.no_deploy_keys=No has añadido ninguna clave de despliegue.
+settings.title=Título
+settings.deploy_key_content=Contenido
+settings.key_been_used=Se ha usado la clave de despliegue.
+settings.key_name_used=Ya existe una clave de despliegue con el mismo nombre.
+settings.add_key_success=¡La nueva clave de desplieque '%s' ha sido creada con éxito!
+settings.deploy_key_deletion=Eliminar Clave de Despliegue
+settings.deploy_key_deletion_desc=Al eliminar esta clave de despliegue se perderán el permiso de acceso a este repositorio con dicha clave. ¿Deseas continuar?
+settings.deploy_key_deletion_success=¡Clave de despliegue eliminada con éxito!
+
+diff.browse_source=Explorar el Código
+diff.parent=padre
+diff.commit=commit
+diff.data_not_available=Los datos del Diff no están disponibles.
+diff.show_diff_stats=Mostrar Estadísticas de Diff
+diff.stats_desc=Se han <strong>modificado %d ficheros</strong> con <strong>%d adiciones</strong> y <strong>%d borrados</strong>
+diff.bin=BIN
+diff.view_file=Ver Fichero
+
+release.releases=Releases
+release.new_release=Nueva Release
+release.draft=Borrador
+release.prerelease=Pre-Release
+release.stable=Estable
+release.edit=editar
+release.ahead=<strong>%d</strong> commits en %s desde esta release
+release.source_code=Código Fuente
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Nombre de la etiqueta
+release.target=Destino
+release.tag_helper=Escoge una etiqueta o crea una nueva al publicar.
+release.title=Título
+release.content=Contenido
+release.write=Escribir
+release.preview=Vista Previa
+release.loading=Cargando...
+release.prerelease_desc=Esta es una pre-release
+release.prerelease_helper=Esta release está marcada como no apta para producción.
+release.cancel=Cancelar
+release.publish=Publicar Release
+release.save_draft=Guardar Borrador
+release.edit_release=Editar Release
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Ya existe una Release con esta etiqueta.
+release.downloads=Descargas
+
+[org]
+org_name_holder=Nombre de la Organización
+org_full_name_holder=Nombre de la organización
+org_name_helper=Los grandes nombres de organizaciones son cortos y memorables.
+create_org=Crear Organización
+repo_updated=Actualizado
+people=Personas
+invite_someone=Invitar a alguien
+teams=Equipos
+lower_members=miembros
+lower_repositories=repositorios
+create_new_team=Crear un Nuevo Equipo
+org_desc=Descripción
+team_name=Nombre del Equipo
+team_desc=Descripción
+team_name_helper=Utiliza este nombre para mencionar a este equipo en las conversaciones.
+team_desc_helper=¿En qué consiste este equipo?
+team_permission_desc=¿Qué nivel de permisos debería tener este equipo?
+
+form.name_reserved=El nombre de la organización '%s' está reservado.
+form.name_pattern_not_allowed=El patrón de nombre de la organización '%s' no está permitido.
+
+settings=Configuración
+settings.options=Opciones
+settings.full_name=Nombre Completo
+settings.website=Página Web
+settings.location=Localización
+settings.update_settings=Actualizar Configuración
+settings.update_setting_success=La configuración de la Organización se ha actualizado correctamente.
+settings.change_orgname_prompt=Este cambio afectará a los enlaces que hacen referencia a la organización.
+settings.update_avatar_success=La configuración de avatar de la organización ha sido actualizada con éxito.
+settings.delete=Eliminar Organización
+settings.delete_account=Eliminar esta Organización
+settings.delete_prompt=Esta operación eliminará esta organización de manera permanente, y ¡<strong>NO PUEDE</strong> deshacerse!
+settings.confirm_delete_account=Confirmar Eliminación
+settings.delete_org_title=Eliminación de la Organización
+settings.delete_org_desc=Esta organización se va a eliminar permanentemente, ¿quieres continuar?
+settings.hooks_desc=Añadir webhooks que serán ejecutados para <strong>todos los repositorios</strong> de esta organización.
+
+members.public=Público
+members.public_helper=convertir en privado
+members.private=Privado
+members.private_helper=convertir en público
+members.owner=Propietario
+members.member=Miembro
+members.conceal=Ocultar
+members.remove=Eliminar
+members.leave=Abandonar
+members.invite_desc=Comienza a teclear un nombre de usuario para invitar a un nuevo miembro a %s:
+members.invite_now=Invitar
+
+teams.join=Unirse
+teams.leave=Abandonar
+teams.read_access=Acceso de Lectura
+teams.read_access_helper=Este equipo podrá ver y clonar sus repositorios.
+teams.write_access=Acceso de Escritura
+teams.write_access_helper=Este equipo podrá leer sus repositorios, así como hacer push en ellos.
+teams.admin_access=Acceso de Administrador
+teams.admin_access_helper=Este equipo podrá hacer push/pull en sus repositorios, así como añadir colaboradores a ellos.
+teams.no_desc=Este equipo no tiene descripción
+teams.settings=Configuración
+teams.owners_permission_desc=Los propietarios tienen acceso completo a <strong>todos los repositorios</strong> y tienen <strong>derechos de administración</strong> en la organización.
+teams.members=Miembros del Equipo
+teams.update_settings=Actualizar Configuración
+teams.delete_team=Borrar este Equipo
+teams.add_team_member=Añadir Miembro al Equipo
+teams.delete_team_title=Eliminar Equipo
+teams.delete_team_desc=Este equipo va a ser eliminado, ¿seguro que quieres continuar? Los miembros de este equipo pueden perder acceso a algunos repositorios.
+teams.delete_team_success=El Equipo se ha eliminado correctamente.
+teams.read_permission_desc=Este equipo tiene permisos de <strong>Lectura</strong>: sus miembros pueden ver y clonar los repositorios del equipo.
+teams.write_permission_desc=Este equipo tiene permisos de <strong>Escritura</strong>: sus miembros pueden leer y hacer push a los repositorios del equipo.
+teams.admin_permission_desc=Este equipo tiene permisos de <strong>Administración</strong>: sus miembros pueden leer, hacer push y añadir colaboradores a los repositorios del equipo.
+teams.repositories=Repositorios del Equipo
+teams.add_team_repository=Añadir Repositorio al Equipo
+teams.remove_repo=Eliminar
+teams.add_nonexistent_repo=El repositorio que estás intentando añadir no existe, por favor, créalo primero.
+
+[admin]
+dashboard=Dashboard
+users=Usuarios
+organizations=Organizaciones
+repositories=Repositorios
+authentication=Autenticaciones
+config=Configuración
+notices=Avisos del Sistema
+monitor=Monitorización
+first_page=Primera
+last_page=Última
+total=Total: %d
+
+dashboard.statistic=Estadísticas
+dashboard.operations=Operaciones
+dashboard.system_status=Estado del Monitor del Sistema
+dashboard.statistic_info=La base de datos de Gogs contiene <b>%d</b> usuarios, <b>%d</b> organizaciones, <b>%d</b> claves públicas, <b>%d</b> repositorios, <b>%d</b> vigilados, <b>%d</b> destacados, <b>%d</b> acciones, <b>%d</b> accesos, <b>%d</b> incidencias, <b>%d</b> comentarios, <b>%d</b> cuentas de redes sociales, <b>%d</b> seguidores, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> fuentes de login, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> etiquetas, <b>%d</b> hooks, <b>%d</b> equipos, <b>%d</b> tareas actualizadas, <b>%d</b> adjuntos.
+dashboard.operation_name=Nombre de la Operación
+dashboard.operation_switch=Interruptor
+dashboard.operation_run=Ejecutar
+dashboard.clean_unbind_oauth=Limpiar solicitudes de OAuth sin confirmar
+dashboard.clean_unbind_oauth_success=Las solicitudes de OAuth sin confirmar se han eliminado correctamente.
+dashboard.delete_inactivate_accounts=Eliminar todas las cuentas inactivas
+dashboard.delete_inactivate_accounts_success=Todas las cuentas inactivas se han eliminado correctamente.
+dashboard.delete_repo_archives=Eliminar todos los archivos de repositorios
+dashboard.delete_repo_archives_success=Todos los archivos de repositorios se han eliminado correctamente.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Ejecutar la recolección de basura en los repositorios
+dashboard.git_gc_repos_success=Todos los repositorios han ejecutado correctamente el recolector de basuras.
+dashboard.resync_all_sshkeys=Reescribir el fichero '.ssh/authorized_keys'(atención: se perderán las claves que no pertenezcan a Gogs)
+dashboard.resync_all_sshkeys_success=Todas las claves públicas se han reescrito correctamente.
+dashboard.resync_all_update_hooks=Reescribir todos los hooks de actualización de los repositorios (necesario cuando se modifica la ruta de configuración personalizada)
+dashboard.resync_all_update_hooks_success=Todos los hooks de actualización de los repositorios se han reescrito correctamente.
+
+dashboard.server_uptime=Uptime del Servidor
+dashboard.current_goroutine=Gorutinas Actuales
+dashboard.current_memory_usage=Uso de Memoria Actual
+dashboard.total_memory_allocated=Total de Memoria Reservada
+dashboard.memory_obtained=Memoria Obtenida
+dashboard.pointer_lookup_times=Tiempos de Búsqueda de Punteros
+dashboard.memory_allocate_times=Tiempos de Reserva de Memoria
+dashboard.memory_free_times=Tiempos de Liberado de Memoria
+dashboard.current_heap_usage=Uso de Heap Actual
+dashboard.heap_memory_obtained=Memoria de Heap Obtenida
+dashboard.heap_memory_idle=Memoria de Heap Inactiva
+dashboard.heap_memory_in_use=Memoria de Heap en Uso
+dashboard.heap_memory_released=Memoria de Heap Liberada
+dashboard.heap_objects=Objetos en el Heap
+dashboard.bootstrap_stack_usage=Uso de la Pila de Bootstrap
+dashboard.stack_memory_obtained=Memoria de Pila Obtenida
+dashboard.mspan_structures_usage=Uso de Estructuras MSpan
+dashboard.mspan_structures_obtained=Estructuras MSpan Obtenidas
+dashboard.mcache_structures_usage=Uso de estructuras MCache
+dashboard.mcache_structures_obtained=Estructuras MCache Obtenidas
+dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtenido
+dashboard.gc_metadata_obtained=Metadatos del Recolector de Basuras Obtenidos
+dashboard.other_system_allocation_obtained=Otros Recursos del Sistema Asignados
+dashboard.next_gc_recycle=Siguiente Reciclado del Recolector de Basuras
+dashboard.last_gc_time=Tiempo desde el Último GC
+dashboard.total_gc_time=Pausa Total por GC
+dashboard.total_gc_pause=Pausa Total por GC
+dashboard.last_gc_pause=Última Pausa por GC
+dashboard.gc_times=Ejecuciones GC
+
+users.user_manage_panel=Panel de Gestión de Usuarios
+users.new_account=Crear Nueva Cuenta
+users.name=Nombre
+users.activated=Activado
+users.admin=Administrador
+users.repos=Repositorios
+users.created=Creado
+users.send_register_notify=Enviar notificación de registro al usuario
+users.new_success=La cuenta '%s' ha sido creada con éxito.
+users.edit=Editar
+users.auth_source=Fuente de Autenticación
+users.local=Local
+users.auth_login_name=Nombre de Inicio de Sesión de Autenticación
+users.password_helper=Deje el campo vacío si no desea cambiar la contraseña.
+users.update_profile_success=El perfil de la cuenta se ha actualizado correctamente.
+users.edit_account=Editar Cuenta
+users.is_activated=Esta cuenta está activada
+users.is_admin=Esta cuenta tiene permisos de administrador
+users.allow_git_hook=Esta cuenta tiene permisos para crear hooks de Git
+users.allow_import_local=Esta cuenta dispone de permisos para importar repositorios locales
+users.update_profile=Actualizar Perfil de la Cuenta
+users.delete_account=Eliminar esta Cuenta
+users.still_own_repo=Esta cuenta es propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
+users.still_has_org=Esta cuenta es miembro de una o más organizaciones, tienes que abandonarlas o eliminarlas primero.
+users.deletion_success=Su cuenta ha sido eliminada correctamente!
+
+orgs.org_manage_panel=Panel de Gestión de Organización
+orgs.name=Nombre
+orgs.teams=Equipos
+orgs.members=Miembros
+
+repos.repo_manage_panel=Panel de Gestión de Repositorios
+repos.owner=Propietario
+repos.name=Nombre
+repos.private=Privado
+repos.watches=Vigilantes
+repos.stars=Estrellas
+repos.issues=Incidencias
+
+auths.auth_manage_panel=Panel de Administración de Autenticación
+auths.new=Añadir Nuevo Origen
+auths.name=Nombre
+auths.type=Tipo
+auths.enabled=Activo
+auths.updated=Actualizado
+auths.auth_type=Tipo de Autenticación
+auths.auth_name=Nombre de Autenticación
+auths.domain=Dominio
+auths.host=Host
+auths.port=Puerto
+auths.bind_dn=Bind DN
+auths.bind_password=Contraseña Bind
+auths.bind_password_helper=Advertencia: La contraseña se almacena como texto plano. No utilice una cuenta con privilegios elevados.
+auths.user_base=Base de Búsqueda de Usuarios
+auths.user_dn=DN de Usuario
+auths.attribute_name=Atributo nombre
+auths.attribute_surname=Atributo apellido
+auths.attribute_mail=Atributo correo electrónico
+auths.filter=Filtro de Usuario
+auths.admin_filter=Filtro de Aministrador
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=Tipo de Autenticación SMTP
+auths.smtphost=SMTP Host
+auths.smtpport=Puerto SMTP
+auths.allowed_domains=Dominios Permitidos
+auths.allowed_domains_helper=Deje el campo vacío si no desea restringir ningún dominio. Para restringir más de uno, separe los dominios con una coma ','.
+auths.enable_tls=Habilitar Cifrado TLS
+auths.skip_tls_verify=Omitir la verificación TLS
+auths.pam_service_name=Nombre del Servicio PAM
+auths.enable_auto_register=Hablilitar Auto-Registro
+auths.tips=Consejos
+auths.edit=Editar la Configuración de Autenticación
+auths.activated=Esta autenticación ha sido activada
+auths.new_success=¡La autenticación '%s' ha sido añadida con éxito!
+auths.update_success=La configuración de autenticación ha sido actualizada con éxito.
+auths.update=Actualizar la Configuración de Autenticación
+auths.delete=Eliminar Autenticación
+auths.delete_auth_title=Borrado de Autenticación
+auths.delete_auth_desc=Esta autenticación será eliminada. ¿Deseas continuar?
+auths.deletion_success=¡La autenticación ha sido eliminada con éxito!
+
+config.server_config=Configuración del Servidor
+config.app_name=Nombre de la Aplicación
+config.app_ver=Versión de la Aplicación
+config.app_url=URL de la Aplicación
+config.domain=Dominio
+config.offline_mode=Modo Sin Conexión
+config.disable_router_log=Deshabilitar Log del Router
+config.run_user=Ejecutada como Usuario
+config.run_mode=Modo de Ejecución
+config.repo_root_path=Ruta del Repositorio
+config.static_file_root_path=Ruta de los Ficheros Estáticos
+config.log_file_root_path=Ruta de los Ficheros de Log
+config.script_type=Tipo de Script
+config.reverse_auth_user=Autenticación Inversa de Usuario
+config.db_config=Configuración de la Base de Datos
+config.db_type=Tipo
+config.db_host=Host
+config.db_name=Nombre
+config.db_user=Usuario
+config.db_ssl_mode=Modo SSL
+config.db_ssl_mode_helper=(solo para "postgres")
+config.db_path=Ruta
+config.db_path_helper=(para "sqlite3" y "tidb")
+config.service_config=Configuración del Servicio
+config.register_email_confirm=Solicitar Confirmación por Correo Electrónico
+config.disable_register=Deshabilitar el Registro
+config.show_registration_button=Mostrar Botón de Registro
+config.require_sign_in_view=Solicitar la Vista de Inicio de Sesión
+config.enable_cache_avatar=Activar la Caché de Avatar
+config.mail_notify=Notificación por Correo Electrónico
+config.disable_key_size_check=Deshabilitar la comprobación de Tamaño Mínimo de Clave
+config.enable_captcha=Activar Captcha
+config.active_code_lives=Habilitar Vida del Código
+config.reset_password_code_lives=Restablecer Contraseña de Vida del Código
+config.webhook_config=Configuración de Webhooks
+config.queue_length=Tamaño de Cola de Envío
+config.deliver_timeout=Timeout de Entrega
+config.skip_tls_verify=Omitir la Verificación TLS
+config.mailer_config=Configuración del Mailer
+config.mailer_enabled=Activado
+config.mailer_disable_helo=Desactivar HELO
+config.mailer_name=Nombre
+config.mailer_host=Host
+config.mailer_user=Usuario
+config.oauth_config=Configuración OAuth
+config.oauth_enabled=Activado
+config.cache_config=Configuración de la Caché
+config.cache_adapter=Adaptador de la Caché
+config.cache_interval=Intervalo de la Caché
+config.cache_conn=Conexión de la Caché
+config.session_config=Configuración de la Sesión
+config.session_provider=Proveedor de la Sesión
+config.provider_config=Configuración del Proveedor
+config.cookie_name=Nombre de la Cookie
+config.enable_set_cookie=Activar Establecimiento de Cookie
+config.gc_interval_time=Intervalo de tiempo del GC
+config.session_life_time=Tiempo de Vida de la Sesión
+config.https_only=Sólo HTTPS
+config.cookie_life_time=Tiempo de Vida de la Cookie
+config.picture_config=Configuración de Imagen
+config.picture_service=Servicio de Imágen
+config.disable_gravatar=Desactivar Gravatar
+config.log_config=Configuración del Log
+config.log_mode=Modo del Log
+
+monitor.cron=Tareas de Cron
+monitor.name=Nombre
+monitor.schedule=Agenda
+monitor.next=Próxima Vez
+monitor.previous=Vez Anterior
+monitor.execute_times=Ejecuciones
+monitor.process=Procesos en Ejecución
+monitor.desc=Descripción
+monitor.start=Hora de Inicio
+monitor.execute_time=Tiempo de ejecución
+
+notices.system_notice_list=Notificaciones del Sistema
+notices.type=Tipo
+notices.type_1=Repositorio
+notices.desc=Descripción
+notices.op=Op.
+notices.delete_success=La notificación del sistema se ha eliminado correctamente.
+
+[action]
+create_repo=repositorio creado <a href="%s">%s</a>
+rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a>
+commit_repo=hizo push a <a href="%[1]s/src/%[2]s">%[3]s</a> en <a href="%[1]s">%[4]s</a>
+create_issue=`incidencia abierta <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`creado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
+comment_issue=`comentó en la incidencia <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`fusionado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
+transfer_repo=transfirió el repositorio <code>%s</code> a <a href="%s">%s</a>
+push_tag=hizo push del tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
+compare_2_commits=Ver la comparación de estos 2 commits
+
+[tool]
+ago=hace
+from_now=desde ahora
+now=ahora
+1s=%s 1 segundo
+1m=%s 1 minuto
+1h=%s 1 hora
+1d=%s 1 día
+1w=%s 1 semana
+1mon=%s 1 mes
+1y=%s 1 año
+seconds=%[2]d %[1]s segundos
+minutes=%s %d minutos
+hours=%s %d horas
+days=%s %d días
+weeks=%s %d semanas
+months=%s %d meses
+years=%s %d años
+raw_seconds=segundos
+raw_minutes=minutos
+
+[dropzone]
+default_message=Suéltelos aquí o pulse para cargar archivos.
+invalid_input_type=No está permitido cargar archivos de este tipo.
+file_too_big=El tamaño del archivo ({{filesize}} MB) excede el tamaño máximo ({{maxFilesize}} MB).
+remove_file=Eliminar archivo
+

+ 1009 - 992
conf/locale/locale_fr-FR.ini

@@ -1,992 +1,1009 @@
-app_desc=Un service de Git sans prise de tête auto-hébergé codé en Go
-
-home=Accueil
-dashboard=Tableau de bord
-explore=Explorer
-help=Aide
-sign_in=Connexion
-sign_out=Déconnexion
-sign_up=Créer un compte
-register=S'inscrire
-website=Site Web
-version=Version
-page=Page
-template=Modèle
-language=Langue
-create_new=Créer...
-user_profile_and_more=Profil utilisateur et plus
-signed_in_as=Connecté en tant que
-
-username=Nom d'utilisateur
-email=E-mail
-password=Mot de passe
-re_type=Confirmez
-captcha=Captcha
-
-repository=Dépôt
-organization=Organisation
-mirror=Miroir
-new_repo=Nouveau Dépôt
-new_migrate=Nouvelle Migration
-new_fork=Nouvel embranchement
-new_org=Nouvelle Organisation
-manage_org=Gérer les Organisations
-admin_panel=Administration
-account_settings=Paramètres du Compte
-settings=Paramètres
-your_profile=Votre profil
-your_settings=Vos paramètres
-
-news_feed=Flux d'actualités
-pull_requests=Pull Requests
-issues=Problèmes
-
-cancel=Annuler
-
-[search]
-search=Rechercher...
-repository=Dépôt
-user=Utilisateur
-issue=Problème
-code=Code
-
-[install]
-install=Installation
-title=Instructions pour la première exécution
-docker_helper=Si vous exécuté Gogs grâce à Docker, merci de lire la <a target="_blank" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit dans cette page !
-requite_db_desc=Gogs requiert MySQL, PostgreSQL, SQLite3 ou TiDB.
-db_title=Paramètres de la base de données
-db_type=Type de Base de Données
-host=Hôte
-user=Utilisateur
-password=Mot De Passe
-db_name=Nom de la Base de Données
-db_helper=Veuillez utiliser le moteur INNODB avec le jeu de caractères utf8_general_ci pour MySQL.
-ssl_mode=Mode SSL
-path=Chemin
-sqlite_helper=Le chemin du fichier de la base de données SQLite3 ou TiDB.
-err_empty_db_path=Le chemin de la base de données SQLite3 ou TiDB ne peut être vide.
-err_invalid_tidb_name=Le nom de la base de données TIDB ne peux contenir les caractères "." ou "-".
-no_admin_and_disable_registration=Vous ne pouvez pas désactiver l'enregistrement sans créer un compte admin.
-err_empty_admin_password=Le mot de passe Admin ne peut pas être vide.
-
-general_title=Paramètres Généraux de Gogs
-app_name=Nom de l'Application
-app_name_helper=Inscrivez fièrement le nom de votre organisation ici !
-repo_path=Emplacement Racine du Dépôt
-repo_path_helper=Tous les Dépôts Git distants seront sauvegardés ici.
-run_user=Entrer un Utilisateur
-run_user_helper=L'utilisateur doit avoir accès à la Racine du Référentiel et éxécuter Gogs.
-domain=Domaine
-domain_helper=Cela affecte les doublons d'URL SSH.
-ssh_port=Port SSH
-ssh_port_helper=C'est le numéro de port qui qui est utilisé par votre serveur SSH, le laisser vide pour désactiver la fonctionnalité.
-http_port=Port HTTP
-http_port_helper=Numéro de port que l'application écoutera.
-app_url=URL de l'Application
-app_url_helper=Cela affecte les doublons d'URL HTTP/HTTPS et le contenu d'e-mail.
-
-optional_title=Paramètres facultatifs
-email_title=Paramètres du Service de Messagerie
-smtp_host=Hôte SMTP
-smtp_from=Provenant de
-smtp_from_helper=Adresse de l'expéditeur, RFC 5322. Soit une adresse courriel simple, soit au format "Nom" <email@example.com>.
-mailer_user=E-mail de l'Expéditeur
-mailer_password=Mot de Passe de l'Expéditeur
-register_confirm=Activer la Confirmation d'Enregistrement
-mail_notify=Activer la Notification des Mails reçus
-server_service_title=Paramètres du serveur et des autres services
-offline_mode=Activer le Mode hors connexion
-offline_mode_popup=Désactiver le CDN, même en production. Toutes les ressources seront distribuées en local.
-disable_gravatar=Désactiver le Service Gravatar
-disable_gravatar_popup=Désactiver Gravatar et les sources personnalisées, tous les avatars sont téléchargés par les utilisateurs ou par défaut.
-disable_registration=Désactiver le formulaire d'inscription
-disable_registration_popup=Désactiver le formulaire d'inscription, seuls les administrateurs peuvent créer des comptes.
-enable_captcha=Activez le Captcha
-enable_captcha_popup=Demande la validation Captcha pour l'auto-enregistrement de l'utilisateur.
-require_sign_in_view=Demander une connexion pour afficher des pages
-require_sign_in_view_popup=Seules les personnes connectées peuvent voir les pages. Les visiteurs anonymes ne pourront voir que les pages de connexion/enregistrement.
-admin_setting_desc=Vous n'avez pas besoin de créer un compte admin. L'utilisateur ayant l'ID = 1 aura l'accès admin automatiquement.
-admin_title=Paramètres du Compte Administrateur
-admin_name=Nom d'Utilisateur
-admin_password=Mot de Passe
-confirm_password=Confirmez le Mot de Passe
-admin_email=E-mail
-install_gogs=Installer Gogs
-test_git_failed=Tentative de commande "git" échouée : %v
-sqlite3_not_available=Votre version publiée ne prend pas en charge SQLite3. Veuillez télécharger la version binaire officielle à cette adresse %s.
-invalid_db_setting=Paramètres de base de données incorrects : %v
-invalid_repo_path=Chemin vers le répertoire racine invalide : %v
-run_user_not_match=L'utilisateur entré n'est pas l'utilisateur actuel : %s -> %s
-save_config_failed=Sauvegarde de la configuration échouée : %v
-invalid_admin_setting=Paramètres du compte administrateur invalides : %v
-install_success=Bienvenue ! Nous sommes heureux que vous ayez choisi Gogs, amusez-vous et prenez soin de vous.
-
-[home]
-uname_holder=Nom d'Utilisateur ou E-mail
-password_holder=Mot de Passe
-switch_dashboard_context=Basculer le Contexte du Tableau de Bord
-my_repos=Mes Référentiels
-collaborative_repos=Référentiels collaboratifs
-my_orgs=Mes Organisations
-my_mirrors=Mes Miroirs
-view_home=Voir %s
-
-issues.in_your_repos=Dans vos dépôts
-
-[explore]
-repos=Référentiels
-
-[auth]
-create_new_account=Créer un Nouveau Compte
-register_hepler_msg=Déjà enregistré ? Connectez-vous !
-social_register_hepler_msg=Possesseur d'un compte ? Associez-le !
-disable_register_prompt=Désolé, les enregistrements ont été désactivés. Veuillez contacter l'administrateur du site.
-disable_register_mail=Désolé, la Confirmation par Mail des Enregistrements a été désactivée.
-remember_me=Se souvenir de Moi
-forgot_password=Mot de Passe oublié
-forget_password=Mot de Passe oublié ?
-sign_up_now=Pas de compte ? Créer maintenant.
-confirmation_mail_sent_prompt=Un nouveau mail de confirmation à été envoyé à <b>%s</b>. Veuillez vérifier votre boîte de réception dans un délai de %d heures pour compléter votre enregistrement.
-sign_in_to_account=Connectez-vous à votre compte
-active_your_account=Activer votre Compte
-resent_limit_prompt=Désolé, vos tentatives d'activation sont trop fréquentes. Veuillez réessayer dans 3 minutes.
-has_unconfirmed_mail=Bonjour %s, votre adresse courriel (<b>%s</b>) n'a pas été confirmée. Si vous n'avez reçu aucun courriel de confirmation ou souhaitez renouveler l'envoi, appuyez sur le bouton ci-dessous.
-resend_mail=Cliquez ici pour renvoyer un mail de confirmation
-email_not_associate=Cette adresse e-mail n'est associée à aucun compte.
-send_reset_mail=Cliquez ici pour (r)envoyer le mail de réinitialisation du mot de passe
-reset_password=Réinitialiser le Mot de Passe
-invalid_code=Désolé, code de confirmation invalide ou expiré.
-reset_password_helper=Cliquez ici pour réinitialiser votre mot de passe
-password_too_short=Le mot de passe doit contenir 6 caractères minimum.
-
-[mail]
-activate_account=Veuillez activer votre compte
-activate_email=Veuillez vérifier votre adresse e-mail
-reset_password=Réinitialiser votre mot de passe
-register_success=Succès de l'enregistrement, Bienvenue
-
-[modal]
-yes=Oui
-no=Non
-modify=Modifier
-
-[form]
-UserName=Nom d'Utilisateur
-RepoName=Nom du dépôt
-Email=Adresse E-mail
-Password=Mot de Passe
-Retype=Confirmez le Mot de Passe
-SSHTitle=Nom de la clé SSH
-HttpsUrl=URL HTTPS
-PayloadUrl=URL des Données Utiles
-TeamName=Nom d'équipe
-AuthName=Nom d'autorisation
-AdminEmail=E-mail de l'administrateur
-
-require_error=` Ne peut être vide `
-alpha_dash_error=` doivent être des caractères alpha, numeriques ou console (-_) valides `
-alpha_dash_dot_error=` doivent être des caractères alpha, numeriques, console (-_) valides ou des points `
-size_error=` doit être à la taille de %s.`
-min_size_error=` %s caractères minimum `
-max_size_error=` %s caractères maximum `
-email_error=` adresse e-mail invalide `
-url_error=` URL invalide `
-unknown_error=Erreur inconnue :
-captcha_incorrect=Le Captcha ne correspond pas.
-password_not_match=Le mot de passe et la confirmation de mot de passe ne correspondent pas.
-
-username_been_taken=Nom d'utilisateur déjà pris.
-repo_name_been_taken=Nom de dépôt déjà utilisé.
-org_name_been_taken=Nom d'organisation déjà pris.
-team_name_been_taken=Nom d'équipe déjà pris.
-email_been_used=Adresse e-mail déjà utilisée.
-illegal_team_name=Le nom de l'équipe contient des caractères interdits.
-username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect.
-enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct.
-enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct.
-enterred_invalid_password=Veuillez vérifier que le mot de passe saisi soit correct.
-user_not_exist=Cet utilisateur n'existe pas.
-last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire.
-
-invalid_ssh_key=Désolé, impossible de valider votre clé SSH : %s
-unable_verify_ssh_key=Gogs n'a pu vérifier la validité de votre clé SSH, même si nous partons du principe qu'elle le soit. Cela-dit, veuillez vous en assurer.
-auth_failed=Échec d'authentification : %s
-
-still_own_repo=Votre compte comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
-still_has_org=Votre compte contient toujours au moins une adhésion à une organisation, vous devez quitter ou supprimer votre adhésion.
-org_still_own_repo=Cette organisation comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
-
-still_own_user=Cette authentification a déjà servi à d'autres utilisateurs. Veuillez les déplacer puis supprimez à nouveau.
-
-target_branch_not_exist=La branche cible n'existe pas.
-
-[user]
-change_avatar=Changez d'avatar via gravatar.com
-change_custom_avatar=Changer votre avatar dans les paramètres
-join_on=Adhéré le
-repositories=Référentiels
-activity=Activités publiques
-followers=Abonnés
-starred=Votés
-following=Abonnements
-
-form.name_reserved=Le nom '%s' est réservé.
-form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'utilisateur.
-
-[settings]
-profile=Profil
-password=Mot de Passe
-ssh_keys=Clés SSH
-social=Réseaux Sociaux
-applications=Applications
-orgs=Organisations
-delete=Supprimer le Compte
-uid=ID d'Utilisateur
-
-public_profile=Profil Public
-profile_desc=Votre adresse e-mail est publique et sera utilisée pour les notifications relatives au compte, ainsi que pour toute opération Web effectuée via le site.
-full_name=Non Complet
-website=Site Web
-location=Localisation
-update_profile=Valider les modifications
-update_profile_success=Profil mis à jour avec succès.
-change_username=Non d'utilisateur modifié
-change_username_prompt=Cette modification affectera la manière dont les liens se rapportent à votre compte.
-continue=Continuer
-cancel=Annuler
-
-enable_custom_avatar=Activer l'Avatar personnalisé
-enable_custom_avatar_helper=Cette option désactive l'affichage via Gravatar
-choose_new_avatar=Sélectionner un nouvel avatar
-update_avatar=Mettre l'Avatar à Jour
-uploaded_avatar_not_a_image=Le fichier téléchargé n'est pas une image.
-no_custom_avatar_available=Aucun avatar personnalisé disponible, activation impossible.
-update_avatar_success=Votre avatar a été mis à jour avec succès.
-
-change_password=Modifier le Mot de Passe
-old_password=Mot de Passe actuel
-new_password=Nouveau Mot de Passe
-retype_new_password=Retapez le nouveau mot de passe
-password_incorrect=Mot de passe actuel incorrect.
-change_password_success=Mot de passe modifié avec succès. Vous pouvez à présent vous connecter avec le nouveau mot de passe.
-
-emails=Adresses E-mail
-manage_emails=Gérer les adresses e-mail
-email_desc=Votre adresse e-mail principale sera utilisée pour les notifications et d'autres opérations.
-primary=Principale
-primary_email=Définir comme principale
-delete_email=Supprimer
-email_deletion=Suppression de l'adresse mél
-email_deletion_desc=Supprimer cette adresse mél supprimera les informations associées à votre compte. Voulez-vous continuer ?
-email_deletion_success=L'adresse mél a été supprimée avec succès !
-add_new_email=Ajouter une nouvelle adresse courriel
-add_email=Ajouter un courriel
-add_email_confirmation_sent=Une nouvelle confirmation d'adresse e-mail a été envoyé à '%s', veuillez vérifier votre boîte de réception dans un délai de %d heures pour terminer le processus de confirmation.
-add_email_success=Votre courriel a été ajouté avec succès.
-
-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>.
-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à.
-key_name=Nom de la Clé
-key_content=Contenu
-add_key_success=La nouvelle clé SSH '%s' a été ajoutée avec succès !
-delete_key=Supprimer
-ssh_key_deletion=Suppression de la clé SSH
-ssh_key_deletion_desc=Supprimer cette clé SSH supprimera tous les accès à votre compte. Voulez-vous continuer ?
-ssh_key_deletion_success=Clé SSH supprimée avec succès !
-add_on=Ajouté le
-last_used=Dernière utilisation le
-no_activity=Aucune activité récente
-key_state_desc=Cette clé a été utilisée durant les 7 derniers jours
-token_state_desc=Cette clé a été utilisée durant les 7 derniers jours
-
-manage_social=Gérer les réseaux sociaux associés
-social_desc=Ceci est la liste des comptes de réseaux sociaux associés. Supprimez ceux que vous ne reconnaissez pas.
-unbind=Dissocier
-unbind_success=Compte de réseau social dissocié.
-
-manage_access_token=Gérer les jetons d'accès personnels
-generate_new_token=Générer le nouveau jeton
-tokens_desc=Jetons, que vous avez généré, qui peuvent être utilisés pour accéder à l'API Gogs.
-new_token_desc=Comme pour l'instant, chaque jeton aura un accès complet à votre compte.
-token_name=Nom du jeton
-generate_token=Générer le jeton
-generate_token_succees=Nouveau jeton d'accès a été généré avec succès ! Assurez-vous de copier votre nouveau jeton d'accès personnel maintenant. Vous ne serez pas en mesure de le revoir !
-delete_token=Supprimer
-access_token_deletion=Suppression du jeton d'accès
-access_token_deletion_desc=Supprimer ce jeton d'accès supprimera tous les accès de l'application. Voulez-vous continuer ?
-delete_token_success=Le jeton d'accèsa été supprimée avec succès ! N'oubliez pas de mettre aussi à jour vos applications.
-
-delete_account=Supprimer le Compte
-delete_prompt=Votre compte sera supprimé définitivement et cette opération est <strong>IRRÉVERSIBLE</strong> !
-confirm_delete_account=Confirmer la suppression
-delete_account_title=Suppression de compte
-delete_account_desc=Ce compte sera supprimé définitivement. Voulez-vous continuer ?
-
-[repo]
-owner=Propriétaire
-repo_name=Nom du Référentiel
-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=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Les changement de cette valeur affectera tous les forks)
-fork_repo=Scinder le dépôt
-fork_from=Embranchement de
-fork_visiblity_helper=Un dépôt scindé ne peut pas changer sa visiblité
-repo_desc=Description
-repo_lang=Langue
-repo_lang_helper=Sélectionnez les fichiers .gitignore
-license=Licence
-license_helper=Sélectionner un fichier de licence
-readme=Fichier Readme
-readme_helper=Sélectionnez un modèle de readme
-auto_init=Initialiser ce dépôt avec le modèle et les fichiers sélectionnés
-create_repo=Créer un dépôt
-default_branch=Branche par défaut
-mirror_interval=Intervalle du miroir (heure)
-
-form.name_reserved=Le nom de dépôt '%s' est réservé.
-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_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.
-migrate.invalid_local_path=Chemin local non valide, non existant ou n'étant pas un dossier.
-
-forked_from=dérivé depuis
-fork_from_self=Vous nous ne pouvez pas scinder un dépôt que vous possédez déja !
-copy_link=Copier
-copy_link_success=Copié!
-copy_link_error=Appuyez sur ⌘-C ou Ctrl-C pour copier
-click_to_copy=Copier dans le presse-papiers
-copied=Copié
-clone_helper=Besoin d'aide pour le clonage ? Visitez <a target="_blank" href="%s"> l'aider</a> !
-unwatch=Ne plus suivre
-watch=Suivre
-unstar=Retirer le vote
-star=Voter
-fork=Embranchement
-
-no_desc=Aucune description
-quick_guide=Introduction rapide
-clone_this_repo=Cloner ce dépôt
-create_new_repo_command=Créer un nouveau dépôt en ligne de commande
-push_exist_repo=Soumettre un dépôt existant par ligne de commande
-repo_is_empty=Ce référentiel est vide, veuillez revenir plus tard !
-
-
-branch=Branche
-tree=Aborescence
-branch_and_tags=Branches & Tags
-branches=Branches
-tags=Tags
-issues=Problèmes
-pulls=Pull Requests
-labels=Etiquettes
-milestones=Étapes
-commits=Commissions
-releases=Publications
-file_raw=Raw
-file_history=Historique
-file_view_raw=Voir le Raw
-file_permalink=Lien permanent
-
-commits.commits=Commissions
-commits.search=Rechercher des commissions
-commits.find=Trouver
-commits.author=Auteur
-commits.message=Message
-commits.date=Date
-commits.older=Précédemment
-commits.newer=Récemment
-
-issues.new=Nouveau Problème
-issues.new.labels=Etiquettes
-issues.new.no_label=Pas d'étiquette
-issues.new.clear_labels=Effacer les étiquettes
-issues.new.milestone=Étape
-issues.new.no_milestone=Pas d'étape
-issues.new.clear_milestone=Effacer l'étape
-issues.new.open_milestone=Ouvrir l'étape
-issues.new.closed_milestone=Étapes fermées
-issues.new.assignee=Affecté à
-issues.new.clear_assignee=Supprimer les assignataires
-issues.new.no_assignee=Pas d'assignataire
-issues.create=Créer un rapport de problème
-issues.new_label=Nouvelle étiquette
-issues.new_label_placeholder=Nom de l'étiquette...
-issues.create_label=Créer une étiquette
-issues.open_tab=%d Ouvert
-issues.close_tab=%d Fermé
-issues.filter_label=Étiquette
-issues.filter_label_no_select=Aucun étiquette sélectionnée
-issues.filter_milestone=Étape
-issues.filter_milestone_no_select=Aucun jalon sélectionné
-issues.filter_assignee=Assigné
-issues.filter_assginee_no_select=Pas d'assignataire selectionné
-issues.filter_type=Type
-issues.filter_type.all_issues=Tous les problèmes
-issues.filter_type.assigned_to_you=Qui vous sont assignés
-issues.filter_type.created_by_you=Créé(es) par vous
-issues.filter_type.mentioning_you=Vous mentionnant
-issues.filter_sort=Trier
-issues.filter_sort.latest=Plus récent
-issues.filter_sort.oldest=Plus ancien/ne
-issues.filter_sort.recentupdate=Mis à jour récemment
-issues.filter_sort.leastupdate=Moins récemment mis à jour
-issues.filter_sort.mostcomment=Plus commentés
-issues.filter_sort.leastcomment=Moins commenté
-issues.opened_by=Ouvrir %[1]s by <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='commenté à <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
-issues.no_content=Il n'existe pas encore de contenu.
-issues.close_issue=Fermer
-issues.close_comment_issue=Fermer et commenter
-issues.reopen_issue=Réouvrir
-issues.reopen_comment_issue=Réouvrir et commenter
-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=`cette question référencé à partir d'un commit <a id="%[1]s" href="#%[1]s"> %[2]s</a>`
-issues.poster=Publier
-issues.admin=Admin
-issues.owner=Propriétaire
-issues.sign_up_for_free=Inscrivez-vous gratuitement
-issues.sign_in_require_desc=pour rejoindre cette conversation. Vous avez déjà un compte ? <a href="%s">Connectez-vous commenter</a>
-issues.edit=Modifier
-issues.cancel=Annuler
-issues.save=Enregistrer
-issues.label_title=Nom du Label
-issues.label_color=Couleur du Label
-issues.label_count=%d labels
-issues.label_open_issues=%d problèmes ouverts
-issues.label_edit=Éditer
-issues.label_delete=Supprimer
-issues.label_modify=Modification du Label
-issues.label_deletion=Suppression du Label
-issues.label_deletion_desc=Cette opération supprimera également toutes les informations relatives aux problèmes. Voulez-vous continuer ?
-issues.label_deletion_success=Label supprimé avec succès !
-
-pulls.compare_changes=Comparer les changements
-pulls.compare_changes_desc=Comparer deux branches et faire une demande de récupération Pull pour les changements.
-pulls.compare_base=Base
-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 de tirer entre ces deux cibles : <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Creer une Pull Request
-pulls.title_desc=veut fusionner %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code>
-pulls.merged_title_desc=à fusionné %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversation
-pulls.tab_commits=Commits
-pulls.tab_files=Fichiers modifiés
-pulls.reopen_to_merge=Veuillez rouvrir cette demande de Pull Request pour effectuer l'opération de fusion.
-pulls.merged=Fusionné
-pulls.has_merged=Cette Pull Request a été fusionnée avec succès !
-pulls.data_broken=Les données de cette Pull Request a été rompues en raison de la suppression d'informations du Fork.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=Vous pouvez effectuer d'opération de fusion automatique sur cette demande de Pull Request.
-pulls.cannot_auto_merge_desc=Vous ne pouvez effectuer des opération de fusion automatique car il y a des conflits entre les Commits.
-pulls.cannot_auto_merge_helper=Veuillez utiliser l'outil en ligne de commande pour le résoudre.
-pulls.merge_pull_request=Fusionner la Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=Nouveau Jalon
-milestones.open_tab=%d Ouvert
-milestones.close_tab=%d Fermé
-milestones.closed=%s fermé
-milestones.no_due_date=Aucune date d'échéance
-milestones.open=Ouvrir
-milestones.close=Fermer
-milestones.new_subheader=Créez des jalons pour organiser vos problèmes.
-milestones.create=Créer un Jalon
-milestones.title=Titre
-milestones.desc=Description
-milestones.due_date=Date d'échéance (facultatif)
-milestones.clear=Effacer
-milestones.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'année-mm-jj'.
-milestones.create_success=Le Jalon '%s' a été crée avec succès !
-milestones.edit=Éditer le Jalon
-milestones.edit_subheader=Utilisez une description claire pour les jalons pour ne pas induire les gens en erreur.
-milestones.cancel=Annuler
-milestones.modify=Modifier le Jalon
-milestones.edit_success=Le Jalon '%s' a été modifié avec succès !
-milestones.deletion=Supprimer le Jalon
-milestones.deletion_desc=Supprimer ce Jalon effacera ses informations dans tous les problèmes relatifs. Voulez-vous continuer ?
-milestones.deletion_success=Le Jalon a été supprimé avec succès !
-
-settings=Paramètres
-settings.options=Options
-settings.collaboration=Collaboration
-settings.hooks=Webhooks
-settings.githooks=Git Hooks
-settings.basic_settings=Paramètres de base
-settings.danger_zone=Zone de danger
-settings.site=Site officiel
-settings.update_settings=Valider
-settings.change_reponame_prompt=Ce changement affectera comment les liens sont reliés avec le dépôt.
-settings.transfer=Transférer les propriétés
-settings.transfer_desc=Transfèrer ce dépôt à un autre utilisateur ou une organisation dont vous possédez des droits d'administrateur.
-settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi.
-settings.delete=Supprimer ce Référentiel
-settings.delete_desc=Attention, action irréversible. Soyez sûre de vous.
-settings.transfer_notices_1=-Vous perdrez l'accès si le nouveau propriétaire est un utilisateur individuel.
-settings.transfer_notices_2=-Vous préserverez l'accès si le nouveau propriétaire est une organisation et si vous y appartenez.
-settings.transfer_form_title=Veuillez recopier le texte suivant afin de confirmer votre opération :
-settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
-settings.delete_notices_2=-Cette opération supprimera définitivement le dépôt, y compris les données Git, problèmes, commentaires et accès des collaborateurs.
-settings.delete_notices_fork_1=-Si ce dépôt est public, tous les Forks vont devenir indépendant après la suppression.
-settings.delete_notices_fork_2=-Si ce dépôt est privé, tous les Forks seront supprimés en même temps.
-settings.delete_notices_fork_3=-Si vous souhaitez conserver tous les forks après suppression, veuillez tout d'abord modifier la visibilité de ce dépôt en public.
-settings.update_settings_success=Options mises à jour avec succès.
-settings.transfer_owner=Nouveau propriétaire
-settings.make_transfer=Transférer
-settings.transfer_succeed=Le contrôle du dépôt a été transféré avec succès.
-settings.confirm_delete=Confirmer la suppression
-settings.add_collaborator=Ajouter un collaborateur
-settings.add_collaborator_success=Nouveau collaborateur ajouté.
-settings.remove_collaborator_success=Collaborateur supprimé.
-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=Webhooks aux services externes être notifié lorsque certains événements se produisent sur Gogs. Lorsque les événements spécifiés se produisent, nous vous enverrons une demande POST à chacun des URL que vous fournissez. Apprenez-en davantage dans notre <a target="_blank" href="%s"> Webhooks Guide</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ée avec succès !
-settings.webhook.request=Requête
-settings.webhook.response=Réponse
-settings.webhook.headers=Entêtes 
-settings.webhook.payload=Payload
-settings.webhook.body=Corps
-settings.githooks_desc=Les Hooks Git sont alimentés par Git lui même. Les Hooks compatibles sont modifiables dans la liste ci-dessous pour effectuer des opérations personnalisées.
-settings.githook_edit_desc=Si un Hook est inactif, un exemple de contenu vous sera proposé. Un contenu laissé vide signifie un Hook inactif.
-settings.githook_name=Nom du Hook
-settings.githook_content=Contenu du Hook
-settings.update_githook=Mettre le Hook à jour
-settings.add_webhook_desc=Nous vous enverrons une demande <code>POST</code> à l'URL ci-dessous avec les détails de tous les événements souscrites. Vous pouvez également spécifier quel format de données vous souhaitez recevoir (JSON, <code>x-www-formulaires-urlencoded</code>, <em>etc.</em>). Plus d'informations se trouvent dans le <a target="_blank" href="%s"> Guide de le Webhooks</a>.
-settings.payload_url=URL des Données Utiles
-settings.content_type=Type de contenu
-settings.secret=Confidentiel
-settings.slack_username=Nom d'utilisateur
-settings.slack_icon_url=URL de l'icône
-settings.slack_color=Couleur
-settings.event_desc=Quel évènement ce Webhook doit-il déclencher ?
-settings.event_push_only=Uniquement les <code>push</code> (soumissions).
-settings.event_send_everything=J'ai besoin de <strong>tout</strong>.
-settings.event_choose=Permettez-moi de choisir ce dont j'ai besoin.
-settings.event_create=Créer
-settings.event_create_desc=Branch, ou Tag créé
-settings.event_push=Push
-settings.event_push_desc=Git push vers un dépôt
-settings.active=Actif
-settings.active_helper=Les détails seront délivrés lorsque ce Hook sera déclenché.
-settings.add_hook_success=Nouveau Webhook ajouté.
-settings.update_webhook=Mettre le Webhook à jour
-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.slack_token=Jeton
-settings.slack_domain=Domaine
-settings.slack_channel=Canal
-settings.deploy_keys=Clés de déploiement
-settings.add_deploy_key=Ajouter une Clé de Déploiement
-settings.no_deploy_keys=Vous n'avez ajouté aucune clé de déploiement.
-settings.title=Titre
-settings.deploy_key_content=Contenu
-settings.key_been_used=Le contenu de la clé de déploiement a été utilisé.
-settings.key_name_used=Une clé de déploiement avec le même nom existe déjà.
-settings.add_key_success=La nouvelle clé de déploiement '%s' a été ajoutée avec succès !
-settings.deploy_key_deletion=Supprimer la Clé de Déploiement
-settings.deploy_key_deletion_desc=Supprimer cette clé de déploiement effacera tous les accès relatifs pour ce référentiel. Voulez-vous continuer ?
-settings.deploy_key_deletion_success=La clé de déploiement a été supprimée avec succès !
-
-diff.browse_source=Parcourir la Source
-diff.parent=Parent
-diff.commit=Commettre
-diff.data_not_available=Données Diff indisponibles.
-diff.show_diff_stats=Afficher les stats Diff
-diff.stats_desc=<strong> %d fichiers modifiés</strong> avec <strong>%d ajouts</strong> et <strong>%d suppressions</strong>
-diff.bin=BIN
-diff.view_file=Voir le fichier
-
-release.releases=Versions
-release.new_release=Nouvelle version
-release.draft=Brouillon
-release.prerelease=Pré-publication
-release.stable=Stable
-release.edit=Éditer
-release.ahead=<strong>%d</strong> commissions à %s depuis cette publication
-release.source_code=Code Source
-release.tag_name=Nom du tag
-release.target=Cible 
-release.tag_helper=Choisissez un tag existant ou créez-en un nouveau à publier.
-release.release_title=Titre de la publication
-release.content_with_md=Contenu avec <a href="%s">Démarque(s)</a>
-release.write=Écrire
-release.preview=Prévisualiser
-release.content_placeholder=Rédiger du contenu
-release.loading=Chargement…
-release.prerelease_desc=Il s'agit d'une version préliminaire
-release.prerelease_helper=Nous soulignerons que cette version est considérée comme non prête pour la production.
-release.publish=Publier
-release.save_draft=Sauvegarder le Brouillon
-release.edit_release=Éditer la publication
-release.tag_name_already_exist=Une publication avec ce nom de tag a déjà existée.
-
-[org]
-org_name_holder=Nom d'organisation
-org_name_helper=Idéalement, un nom d'organisation devrait être court et mémorable.
-create_org=Créer une organisation
-repo_updated=Mis à jour
-people=Contacts
-invite_someone=Inviter quelqu'un
-teams=Équipes
-lower_members=Membres
-lower_repositories=Référentiels
-create_new_team=Créer une Nouvelle Équipe
-org_desc=Description
-team_name=Nom d'Équipe
-team_desc=Description
-team_name_helper=Ce nom sera utilisé pour mentionner l'équipe dans les conversations.
-team_desc_helper=Présentation de l'équipe
-team_permission_desc=Quel niveau d'accès cette équipe devrait-elle posséder ?
-
-form.name_reserved=Le nom d'organisation '%s' est réservé.
-form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'organisation.
-
-settings=Paramètres
-settings.options=Options
-settings.full_name=Non Complet
-settings.website=Site Web
-settings.location=Localisation
-settings.update_settings=Valider
-settings.update_setting_success=Paramètres d'organisation modifiés avec succès.
-settings.change_orgname_prompt=Cette modification affectera comment des liens se rapportent à l'organisation.
-settings.update_avatar_success=Les paramètres de l'avatar de l'organisation a été mis à jour avec succès.
-settings.delete=Supprimer l'organisation
-settings.delete_account=Supprimer cette organisation
-settings.delete_prompt=Cela supprimera cette organisation définitivement. Cette opération est <strong>IRRÉVERSIBLE</strong> !
-settings.confirm_delete_account=Confirmez la suppression
-settings.delete_org_title=Suppression d'organisation
-settings.delete_org_desc=Cette organisation sera définitivement supprimée. Continuer ?
-settings.hooks_desc=Ajoute des Webhooks qui seront activés pour <strong>tous les Référentiels</strong> de cette organisation.
-
-members.public=Public
-members.public_helper=Rendre privé
-members.private=Privé
-members.private_helper=Rendre public
-members.owner=Propriétaire
-members.member=Membre
-members.conceal=Masquer
-members.remove=Exclure
-members.leave=Quitter
-members.invite_desc=Tapez un nom d'utilisateur pour inviter un nouveau membre chez %s :
-members.invite_now=Lancer l'invitation
-
-teams.join=Rejoindre
-teams.leave=Quitter
-teams.read_access=Accès en Lecture
-teams.read_access_helper=Cette équipe aura la possibilité de voir et dupliquer ses Référentiels.
-teams.write_access=Accès en Écriture
-teams.write_access_helper=Cette équipe possèdera aussi bien des droits de lecture que d'écriture sur ses Référentiels.
-teams.admin_access=Accès Administrateur
-teams.admin_access_helper=Cette équipe possèdera des droits de lecture, d'écriture, ainsi que le pouvoir d'ajouter des collaborateurs.
-teams.no_desc=Aucune description
-teams.settings=Paramètres
-teams.owners_permission_desc=Les propriétaires possèdent <strong>les droits d'administrateur</strong> et disposent d'un accès complet à <strong>tous les Référentiels</strong> de l'organisation.
-teams.members=Membres de L'Équipe
-teams.update_settings=Valider
-teams.delete_team=Supprimer cette Équipe
-teams.add_team_member=Ajouter un Membre
-teams.delete_team_title=Suppression de l'équipe
-teams.delete_team_desc=Cette équipe sera supprimée. Les membres pourraient perdre leurs accès à certains dépôts.
-teams.delete_team_success=Équipe supprimée avec succès.
-teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</strong> : les membres peuvent voir et dupliquer ses Référentiels.
-teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses Référentiels.
-teams.admin_permission_desc=Cette équipe permet l'accès en <strong>administrateur</strong> : les membres peuvent voir, participer et ajouter des collaborateurs à ses Référentiels.
-teams.repositories=Référentiels de l'Équipe
-teams.add_team_repository=Ajouter un Dépôt à l'Équipe
-teams.remove_repo=Supprimer
-teams.add_nonexistent_repo=Dépôt inexistant, veuillez d'abord le créer.
-
-[admin]
-dashboard=Tableau de bord
-users=Utilisateurs
-organizations=Organisations
-repositories=Référentiels
-authentication=Authentifications
-config=Configuration
-notices=Notes Systèmes
-monitor=Supervision
-first_page=Première
-last_page=Dernière
-total=Total : %d
-
-dashboard.statistic=Statistiques
-dashboard.operations=Opérations
-dashboard.system_status=État du Moniteur Système
-dashboard.statistic_info=La base de données Gogs contient <b>%d</b> utilisateurs, <b>%d</b> organisations, <b>%d</b> clés publiques, <b>%d</b> Référentiels, <b>%d</b> suivis, <b>%d</b> votes, <b>%d</b> actions, <b>%d</b> accès, <b>%d</b> problèmes, <b>%d</b> commentaires, <b>%d</b> comptes de réseaux sociaux, <b>%d</b> abonnements, <b>%d</b> miroirs, <b>%d</b> publications, <b>%d</b> connexions d'origine, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> tâches hook, <b>%d</b> équipes, <b>%d</b> tâches de mise à jour, <b>%d</b> fichiers.
-dashboard.operation_name=Nom de l'Opération
-dashboard.operation_switch=Basculer
-dashboard.operation_run=Exécuter
-dashboard.clean_unbind_oauth=Nettoyer les associations OAuthes
-dashboard.clean_unbind_oauth_success=Tous unbind OAuthes ont été supprimés avec succès.
-dashboard.delete_inactivate_accounts=Supprimer tous les comptes inactifs
-dashboard.delete_inactivate_accounts_success=Inactivent tous les comptes ont été supprimés avec succès.
-dashboard.delete_repo_archives=Supprimer toutes les archives de référentiels
-dashboard.delete_repo_archives_success=Toutes les archives de référentiels ont été supprimés avec succès.
-dashboard.git_gc_repos=Collecter les déchets des référentiels
-dashboard.git_gc_repos_success=Tous les dépôts ont effectué la collecte avec succès.
-dashboard.resync_all_sshkeys=Ré-écrire le fichier '.ssh/authorized_keys' (attention : les clés hors-Gogs vont être perdues)
-dashboard.resync_all_sshkeys_success=Toutes les clés publiques ont été ré-écrites avec succès.
-dashboard.resync_all_update_hooks=Ré-écrire tous les hooks de mises à jour des dépôts (requis quand le chemin de la configuration personnalisé est modifié)
-dashboard.resync_all_update_hooks_success=Les mises à jour de hook des référentiels ont toutes été réécrites avec succès.
-
-dashboard.server_uptime=Durée de Marche Serveur
-dashboard.current_goroutine=Goroutines actuelles
-dashboard.current_memory_usage=Utilisation Mémoire actuelle
-dashboard.total_memory_allocated=Mémoire totale allouée
-dashboard.memory_obtained=Mémoire obtenue
-dashboard.pointer_lookup_times=Nombre de Consultations Pointeur
-dashboard.memory_allocate_times=Nombre d'Allocation Mémoire
-dashboard.memory_free_times=Nombre de Libération Mémoire
-dashboard.current_heap_usage=Utilisation Tas (Heap)
-dashboard.heap_memory_obtained=Mémoire Tas (Heap) obtenue
-dashboard.heap_memory_idle=Mémoire Tas (Heap) au Repos
-dashboard.heap_memory_in_use=Utilisation Mémoire Tas (Heap)
-dashboard.heap_memory_released=Mémoire Tas (Heap) libérée
-dashboard.heap_objects=Objets Tas (Heap)
-dashboard.bootstrap_stack_usage=Utilisation Pile Bootstrap
-dashboard.stack_memory_obtained=Mémoire Pile obtenue
-dashboard.mspan_structures_usage=Utilisation des Structures MSpan
-dashboard.mspan_structures_obtained=Structures MSpan obtenues
-dashboard.mcache_structures_usage=Utilisation des Structures MCache
-dashboard.mcache_structures_obtained=Structures MCache obtenues
-dashboard.profiling_bucket_hash_table_obtained=Profilage de Seau de Table de Hashage obtenu
-dashboard.gc_metadata_obtained=Métadonnées GC obtenues
-dashboard.other_system_allocation_obtained=Allocation de l'autre Système obtenue
-dashboard.next_gc_recycle=Traitement GC suivant
-dashboard.last_gc_time=Depuis le dernier GC
-dashboard.total_gc_time=Pause GC totale
-dashboard.total_gc_pause=Pause GC
-dashboard.last_gc_pause=Dernière Pause GC
-dashboard.gc_times=Nombres de GC
-
-users.user_manage_panel=Gestion des Utilisateurs
-users.new_account=Créer un nouveau compte
-users.name=Nom
-users.activated=Activés
-users.admin=Administrateur
-users.repos=Dépôts
-users.created=Créés
-users.send_register_notify=Envoyer une Notification d'enregistrement à l'utilisateur
-users.new_success=Nouveau compte '%s' a été créé avec succès.
-users.edit=Éditer
-users.auth_source=Sources d'authentification
-users.local=Locales
-users.auth_login_name=Nom d'utilisateur d'authentification
-users.password_helper=Laissez-le vide pour ne pas changer.
-users.update_profile_success=Profil mis à jour avec succès.
-users.edit_account=Modifier le Compte
-users.is_activated=Ce compte est activé
-users.is_admin=Ce compte possède un niveau d'accès administrateur
-users.allow_git_hook=Ce compte dispose des autorisations pour créer des crochets de Git
-users.update_profile=Mettre le profil à jour
-users.delete_account=Supprimer ce Compte
-users.still_own_repo=Ce compte possède toujours des dépôts. Vous devez d'abord les supprimer ou les transférer.
-users.still_has_org=Ce compte a toujours membres de l'organisation, vous avez à gauche ou supprimez tout d'abord.
-users.deletion_success=Le compte a été supprimé avec succès !
-
-orgs.org_manage_panel=Gestion des Organisations
-orgs.name=Nom
-orgs.teams=Équipes
-orgs.members=Membres
-
-repos.repo_manage_panel=Gestion des Dépôts
-repos.owner=Propriétaire
-repos.name=Nom
-repos.private=Privé
-repos.watches=Suivi par
-repos.stars=Votes
-repos.issues=Problèmes
-
-auths.auth_manage_panel=Panel d'administration des authentifications
-auths.new=Ajouter une nouvelle source d'authentification
-auths.name=Nom
-auths.type=Type
-auths.enabled=Activé
-auths.updated=Mis à jour
-auths.auth_type=Type d'authentification
-auths.auth_name=Nom de l'authentification
-auths.domain=Domaine
-auths.host=Hôte
-auths.port=Port
-auths.bind_dn=Bind DN
-auths.bind_password=Bind mot de passe
-auths.bind_password_helper=AVERTISSEMENT : Ce mot de passe est stocké en texte clair. N'utilisez pas le mot de passe d'un compte doté de privilèges élevé.
-auths.user_base=Utilisateur Search Base
-auths.user_dn=Utilisateur DN
-auths.attribute_name=Attribut du prénom
-auths.attribute_surname=Attribut du nom de famille
-auths.attribute_mail=Attribut de l'e-mail
-auths.filter=Utilisateur Filter
-auths.admin_filter=Administrateur Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=Type d'authentification SMTP
-auths.smtphost=Hôte SMTP
-auths.smtpport=Port SMTP
-auths.allowed_domains=Domaines autorisés
-auths.allowed_domains_helper=Laissez-le vide pour ne pas restreindre de domaines. Plusieurs domaines doivent être séparés par une virgule «, ».
-auths.enable_tls=Activer le Chiffrement TLS
-auths.skip_tls_verify=Ne pas vérifier TLS
-auths.pam_service_name=Nom du Service PAM
-auths.enable_auto_register=Connexion Automatique
-auths.tips=Conseils
-auths.edit=Modifier les paramètres d'authentification
-auths.activated=Authentification activée
-auths.new_success=Nouvelle authentification «%s » a été ajoutée avec succès.
-auths.update_success=Les paramètre d'authentification a été mis à jour avec succès.
-auths.update=Mettre à jour les paramètres d'authentifications
-auths.delete=Supprimer cette authentification
-auths.delete_auth_title=Suppression de l'authentification
-auths.delete_auth_desc=Cette autorisation sera supprimée. Continuer?
-auths.deletion_success=L'authentification a été supprimée avec succès !
-
-config.server_config=Configuration du Serveur
-config.app_name=Nom de l'Application
-config.app_ver=Version de l'Application
-config.app_url=URL de l'Application
-config.domain=Domaine
-config.offline_mode=Mode hors-ligne
-config.disable_router_log=Désactiver la Journalisation du Routeur
-config.run_user=Entrer un Utilisateur
-config.run_mode=Mode d'Éxécution
-config.repo_root_path=Emplacement des Dépôts
-config.static_file_root_path=Emplacement Racine du Fichier Statique
-config.log_file_root_path=Emplacement Racine du Fichier Journal
-config.script_type=Type de Script
-config.reverse_auth_user=Annuler l'Authentification de l'Utilisateur
-config.db_config=Configuration de la Base de Données
-config.db_type=Type
-config.db_host=Hôte
-config.db_name=Nom
-config.db_user=Utilisateur
-config.db_ssl_mode=Mode SSL
-config.db_ssl_mode_helper=("postgres" uniquement)
-config.db_path=Emplacement
-config.db_path_helper=(pour « sqlite3 » et « TIDB »)
-config.service_config=Configuration du Service
-config.register_email_confirm=Nécessite une confirmation par courriel
-config.disable_register=Désactiver l'Enregistrement
-config.show_registration_button=Afficher le bouton d'enregistrement
-config.require_sign_in_view=Connexion Obligatoire pour Visualiser
-config.enable_cache_avatar=Activer le Cache d'Avatar
-config.mail_notify=Mailer les Notifications
-config.disable_key_size_check=Désactiver la vérification de la taille de clé minimale
-config.enable_captcha=Activez le Captcha
-config.active_code_lives=Limites de Code Actif
-config.reset_password_code_lives=Réinitialiser le Mot De Passe des Limites de Code
-config.webhook_config=Configuration Webhook
-config.queue_length=Longueur de la file d'attente
-config.deliver_timeout=Expiration d'Envoi
-config.skip_tls_verify=Ne pas vérifier TLS
-config.mailer_config=Configuration du Maileur
-config.mailer_enabled=Activé
-config.mailer_disable_helo=Désactiver HELO
-config.mailer_name=Nom
-config.mailer_host=Hôte
-config.mailer_user=Utilisateur
-config.oauth_config=Configuration OAuth
-config.oauth_enabled=Activé
-config.cache_config=Configuration du Cache
-config.cache_adapter=Adaptateur du Cache
-config.cache_interval=Intervals du Cache
-config.cache_conn=Liaison du Cache
-config.session_config=Configuration de Session
-config.session_provider=Fournisseur de Session
-config.provider_config=Configurer le Fournisseur
-config.cookie_name=Nom du Cookie
-config.enable_set_cookie=Activer les Cookies
-config.gc_interval_time=Intervals GC
-config.session_life_time=Durée de Session
-config.https_only=HTTPS uniquement
-config.cookie_life_time=Expiration du Cookie
-config.picture_config=Configuration d'Image
-config.picture_service=Service d'Imagerie
-config.disable_gravatar=Désactiver Gravatar
-config.log_config=Configuration du Journal
-config.log_mode=Mode du Journal
-
-monitor.cron=Tâches Cron
-monitor.name=Nom
-monitor.schedule=Planification
-monitor.next=Suivant
-monitor.previous=Précédent
-monitor.execute_times=Nombre d'Éxécutions
-monitor.process=Processus en cours d'Éxécution
-monitor.desc=Description
-monitor.start=Heure de Démarrage
-monitor.execute_time=Heure d'Éxécution
-
-notices.system_notice_list=Notes Systèmes
-notices.type=Type
-notices.type_1=Dépôt
-notices.desc=Description
-notices.op=Opération
-notices.delete_success=Note système supprimée avec succès.
-
-[action]
-create_repo=a crée le dépôt <a href="%s">%s</a>
-rename_repo=rebaptisé le dépôt de <code>%[1]s</code> à <a href="%[2]s">%[3]s</a>
-commit_repo=a soumis à <a href="%s/src/%s">%[2]s</a> chez <a href="%[1]s">%[3]s</a>
-create_issue=`a ouvert un problème <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>`
-comment_issue=`a commenté le problème <a href="%s/issues/%s">%s#%[2]s</a>`
-merge_pull_request=`pull request fusionné 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 tagé <a href="%s/src/%s">%[2]s</a> à <a href="%[1]s">%[3]s</a>
-compare_2_commits=Comparer ces 2 commissions
-
-[tool]
-ago=auparavant
-from_now=à partir de maintenant
-now=maintenant
-1s=1 seconde %s
-1m=1 minute %s
-1h=1 heure %s
-1d=1 jour %s
-1w=1 semaine %s
-1mon=1 mois %s
-1y=1 an %s
-seconds=%d secondes %s
-minutes=%d minutes %s
-hours=%d heures %s
-days=%d jours %s
-weeks=%d semaines %s
-months=%d mois %s
-years=%d ans %s
-raw_seconds=secondes
-raw_minutes=minutes
-
-[dropzone]
-default_message=Déposez les fichiers ici ou cliquez pour télécharger.
-invalid_input_type=Vous ne pouvez pas télécharger des fichiers de ce type.
-file_too_big=Le fichier de taille ({{filesize}} Mo) dépasse la taille maximale ({{maxFilesize}} MB).
-remove_file=Supprimer le fichier
-
+app_desc=Un service Git auto-hébergé sans prise de tête
+
+home=Accueil
+dashboard=Tableau de bord
+explore=Explorer
+help=Aide
+sign_in=Connexion
+sign_out=Déconnexion
+sign_up=Créer un compte
+register=Inscription
+website=Site Web
+version=Version
+page=Page
+template=Modèle
+language=Langue
+create_new=Créer...
+user_profile_and_more=Profil utilisateur et plus
+signed_in_as=Connecté en tant que
+
+username=Nom d'utilisateur
+email=E-mail
+password=Mot de passe
+re_type=Confirmez
+captcha=Captcha
+
+repository=Dépôt
+organization=Organisation
+mirror=Miroir
+new_repo=Nouveau Dépôt
+new_migrate=Nouvelle Migration
+new_fork=Nouvel embranchement
+new_org=Nouvelle Organisation
+manage_org=Gérer les Organisations
+admin_panel=Administration
+account_settings=Paramètres du Compte
+settings=Paramètres
+your_profile=Votre profil
+your_settings=Vos paramètres
+
+news_feed=Flux d'actualités
+pull_requests=Pull Requests
+issues=Problèmes
+
+cancel=Annuler
+
+[search]
+search=Rechercher...
+repository=Dépôt
+user=Utilisateur
+issue=Problème
+code=Code
+
+[install]
+install=Installation
+title=Instructions pour la première exécution
+docker_helper=Si vous exécutez Gogs grâce à Docker, merci de lire la <a target="_blank" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit sur cette page !
+requite_db_desc=Gogs requiert MySQL, PostgreSQL, SQLite3 ou TiDB.
+db_title=Paramètres de la base de données
+db_type=Type de Base de Données
+host=Hôte
+user=Utilisateur
+password=Mot De Passe
+db_name=Nom de la Base de Données
+db_helper=Veuillez utiliser le moteur INNODB avec le jeu de caractères utf8_general_ci pour MySQL.
+ssl_mode=Mode SSL
+path=Chemin
+sqlite_helper=Le chemin du fichier de la base de données SQLite3 ou TiDB.
+err_empty_db_path=Le chemin de la base de données SQLite3 ou TiDB ne peut être vide.
+err_invalid_tidb_name=Le nom de la base de données TiDB ne peut contenir les caractères "." ou "-".
+no_admin_and_disable_registration=Vous ne pouvez pas désactiver l'enregistrement sans créer un compte administrateur.
+err_empty_admin_password=Le mot de passe du compte administrateur ne peut être vide.
+
+general_title=Paramètres Généraux de Gogs
+app_name=Nom de l'Application
+app_name_helper=Inscrivez fièrement le nom de votre organisation ici !
+repo_path=Emplacement Racine du Dépôt
+repo_path_helper=Tous les Dépôts Git distants seront sauvegardés ici.
+run_user=Entrer un Utilisateur
+run_user_helper=L'utilisateur doit avoir accès à la Racine du Référentiel et éxécuter Gogs.
+domain=Domaine
+domain_helper=Cela affecte les doublons d'URL SSH.
+ssh_port=Port SSH
+ssh_port_helper=C'est le numéro de port qui est utilisé par votre serveur SSH, le laisser vide pour désactiver la fonctionnalité.
+http_port=Port HTTP
+http_port_helper=Numéro de port que l'application écoutera.
+app_url=URL de l'Application
+app_url_helper=Cela affecte les doublons d'URL HTTP/HTTPS et le contenu d'e-mail.
+
+optional_title=Paramètres facultatifs
+email_title=Paramètres du Service de Messagerie
+smtp_host=Hôte SMTP
+smtp_from=Provenant de
+smtp_from_helper=Adresse de l'expéditeur, RFC 5322. Soit une adresse courriel simple, soit au format "Nom" <email@example.com>.
+mailer_user=E-mail de l'Expéditeur
+mailer_password=Mot de Passe de l'Expéditeur
+register_confirm=Activer la Confirmation d'Enregistrement
+mail_notify=Activer la Notification des Mails reçus
+server_service_title=Paramètres du serveur et des autres services
+offline_mode=Activer le Mode hors connexion
+offline_mode_popup=Désactiver le CDN, même en production. Toutes les ressources seront distribuées en local.
+disable_gravatar=Désactiver le Service Gravatar
+disable_gravatar_popup=Désactiver Gravatar et les sources personnalisées, tous les avatars sont téléchargés par les utilisateurs ou par défaut.
+disable_registration=Désactiver le formulaire d'inscription
+disable_registration_popup=Désactiver le formulaire d'inscription, seuls les administrateurs peuvent créer des comptes.
+enable_captcha=Activez le Captcha
+enable_captcha_popup=Demande la validation Captcha pour l'auto-enregistrement de l'utilisateur.
+require_sign_in_view=Demander une connexion pour afficher des pages
+require_sign_in_view_popup=Seules les personnes connectées peuvent voir les pages. Les visiteurs anonymes ne pourront voir que les pages de connexion/enregistrement.
+admin_setting_desc=Vous n'avez pas besoin de créer un compte admin. L'utilisateur ayant l'ID = 1 se verra automatiquement attribuer l'accès administrateur.
+admin_title=Paramètres du Compte Administrateur
+admin_name=Nom d'Utilisateur
+admin_password=Mot de Passe
+confirm_password=Confirmez le Mot de Passe
+admin_email=E-mail de l'administrateur
+install_gogs=Installer Gogs
+test_git_failed=Tentative de commande "git" échouée : %v
+sqlite3_not_available=Votre version publiée ne prend pas en charge SQLite3. Veuillez télécharger la version binaire officielle à cette adresse %s.
+invalid_db_setting=Paramètres de base de données incorrects : %v
+invalid_repo_path=Chemin vers le répertoire racine invalide : %v
+run_user_not_match=L'utilisateur entré n'est pas l'utilisateur actuel : %s -> %s
+save_config_failed=La sauvegarde de la configuration a échoué : %v
+invalid_admin_setting=Paramètres du compte administrateur invalides : %v
+install_success=Bienvenue ! Nous sommes heureux que vous ayez choisi Gogs, amusez-vous et prenez soin de vous.
+
+[home]
+uname_holder=Nom d'Utilisateur ou E-mail
+password_holder=Mot de Passe
+switch_dashboard_context=Basculer le Contexte du Tableau de Bord
+my_repos=Mes Référentiels
+collaborative_repos=Référentiels collaboratifs
+my_orgs=Mes Organisations
+my_mirrors=Mes Miroirs
+view_home=Voir %s
+
+issues.in_your_repos=Dans vos dépôts
+
+[explore]
+repos=Référentiels
+
+[auth]
+create_new_account=Créer un Nouveau Compte
+register_hepler_msg=Déjà enregistré ? Connectez-vous !
+social_register_hepler_msg=Possesseur d'un compte ? Associez-le !
+disable_register_prompt=Désolé, les enregistrements ont été désactivés. Veuillez contacter l'administrateur du site.
+disable_register_mail=Désolé, la Confirmation par Mail des Enregistrements a été désactivée.
+remember_me=Se souvenir de Moi
+forgot_password=Mot de Passe oublié
+forget_password=Mot de Passe oublié ?
+sign_up_now=Pas de compte ? Créer maintenant.
+confirmation_mail_sent_prompt=Un nouveau mail de confirmation à été envoyé à <b>%s</b>. Veuillez vérifier votre boîte de réception dans un délai de %d heures pour compléter votre enregistrement.
+active_your_account=Activer votre Compte
+resent_limit_prompt=Désolé, vos tentatives d'activation sont trop fréquentes. Veuillez réessayer dans 3 minutes.
+has_unconfirmed_mail=Bonjour %s, votre adresse courriel (<b>%s</b>) n'a pas été confirmée. Si vous n'avez reçu aucun courriel de confirmation ou souhaitez renouveler l'envoi, appuyez sur le bouton ci-dessous.
+resend_mail=Cliquez ici pour renvoyer un mail de confirmation
+email_not_associate=Cette adresse e-mail n'est associée à aucun compte.
+send_reset_mail=Cliquez ici pour (r)envoyer le mail de réinitialisation du mot de passe
+reset_password=Réinitialiser le Mot de Passe
+invalid_code=Désolé, code de confirmation invalide ou expiré.
+reset_password_helper=Cliquez ici pour réinitialiser votre mot de passe
+password_too_short=Le mot de passe doit contenir 6 caractères minimum.
+
+[mail]
+activate_account=Veuillez activer votre compte
+activate_email=Veuillez vérifier votre adresse e-mail
+reset_password=Réinitialiser votre mot de passe
+register_success=Succès de l'enregistrement, Bienvenue
+register_notify=Bienvenue à bord
+
+[modal]
+yes=Oui
+no=Non
+modify=Modifier
+
+[form]
+UserName=Nom d'Utilisateur
+RepoName=Nom du dépôt
+Email=Adresse E-mail
+Password=Mot de Passe
+Retype=Confirmez le Mot de Passe
+SSHTitle=Nom de la clé SSH
+HttpsUrl=URL HTTPS
+PayloadUrl=URL des Données Utiles
+TeamName=Nom d'équipe
+AuthName=Nom d'autorisation
+AdminEmail=E-mail de l'administrateur
+
+require_error=` Ne peut être vide `
+alpha_dash_error=` doivent être des caractères alpha, numeriques ou console (-_) valides `
+alpha_dash_dot_error=` doivent être des caractères alpha, numeriques, console (-_) valides ou des points `
+size_error=` doit être à la taille de %s.`
+min_size_error=` %s caractères minimum `
+max_size_error=` %s caractères maximum `
+email_error=` adresse e-mail invalide `
+url_error=` URL invalide `
+include_error=`doit contenir la sous-chaîne '%s'.`
+unknown_error=Erreur inconnue :
+captcha_incorrect=Le Captcha ne correspond pas.
+password_not_match=Le mot de passe et la confirmation de mot de passe ne correspondent pas.
+
+username_been_taken=Nom d'utilisateur déjà pris.
+repo_name_been_taken=Nom de dépôt déjà utilisé.
+org_name_been_taken=Nom d'organisation déjà pris.
+team_name_been_taken=Nom d'équipe déjà pris.
+email_been_used=Adresse e-mail déjà utilisée.
+illegal_team_name=Le nom de l'équipe contient des caractères interdits.
+username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect.
+enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct.
+enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct.
+enterred_invalid_password=Veuillez vérifier que le mot de passe saisi soit correct.
+user_not_exist=Cet utilisateur n'existe pas.
+last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire.
+
+invalid_ssh_key=Désolé, impossible de valider votre clé SSH : %s
+unable_verify_ssh_key=Gogs n'a pu vérifier la validité de votre clé SSH, même si nous partons du principe qu'elle le soit. Cela-dit, veuillez vous en assurer.
+auth_failed=Échec d'authentification : %s
+
+still_own_repo=Votre compte comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
+still_has_org=Votre compte contient toujours au moins une adhésion à une organisation, vous devez quitter ou supprimer votre adhésion.
+org_still_own_repo=Cette organisation comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
+
+still_own_user=Cette authentification a déjà servi à d'autres utilisateurs. Veuillez les déplacer puis supprimez à nouveau.
+
+target_branch_not_exist=La branche cible n'existe pas.
+
+[user]
+change_avatar=Changez d'avatar via gravatar.com
+change_custom_avatar=Changer votre avatar dans les paramètres
+join_on=Adhéré le
+repositories=Référentiels
+activity=Activités publiques
+followers=Abonnés
+starred=Votés
+following=Abonnements
+
+form.name_reserved=Le nom '%s' est réservé.
+form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'utilisateur.
+
+[settings]
+profile=Profil
+password=Mot de Passe
+ssh_keys=Clés SSH
+social=Réseaux Sociaux
+applications=Applications
+orgs=Organisations
+delete=Supprimer le Compte
+uid=ID d'Utilisateur
+
+public_profile=Profil Public
+profile_desc=Votre adresse e-mail est publique et sera utilisée pour les notifications relatives au compte, ainsi que pour toute opération Web effectuée via le site.
+full_name=Nom Complet
+website=Site Web
+location=Localisation
+update_profile=Valider les modifications
+update_profile_success=Profil mis à jour avec succès.
+change_username=Non d'utilisateur modifié
+change_username_prompt=Cette modification affectera la manière dont les liens se rapportent à votre compte.
+continue=Continuer
+cancel=Annuler
+
+enable_custom_avatar=Activer l'Avatar personnalisé
+enable_custom_avatar_helper=Cette option désactive l'affichage via Gravatar
+choose_new_avatar=Sélectionner un nouvel avatar
+update_avatar=Mettre à jour l'avatar
+uploaded_avatar_not_a_image=Le fichier téléchargé n'est pas une image.
+no_custom_avatar_available=Aucun avatar personnalisé disponible, activation impossible.
+update_avatar_success=Votre avatar a été mis à jour avec succès.
+
+change_password=Modifier le Mot de Passe
+old_password=Mot de Passe actuel
+new_password=Nouveau Mot de Passe
+retype_new_password=Retapez le nouveau mot de passe
+password_incorrect=Mot de passe actuel incorrect.
+change_password_success=Mot de passe modifié avec succès. Vous pouvez à présent vous connecter avec le nouveau mot de passe.
+
+emails=Adresses E-mail
+manage_emails=Gérer les adresses e-mail
+email_desc=Votre adresse e-mail principale sera utilisée pour les notifications et d'autres opérations.
+primary=Principale
+primary_email=Définir comme principale
+delete_email=Supprimer
+email_deletion=Suppression de l'adresse mél
+email_deletion_desc=Supprimer cette adresse mél supprimera les informations associées à votre compte. Voulez-vous continuer ?
+email_deletion_success=L'adresse mél a été supprimée avec succès !
+add_new_email=Ajouter une nouvelle adresse courriel
+add_email=Ajouter un courriel
+add_email_confirmation_sent=Une nouvelle confirmation d'adresse e-mail a été envoyé à '%s', veuillez vérifier votre boîte de réception dans un délai de %d heures pour terminer le processus de confirmation.
+add_email_success=Votre courriel a été ajouté avec succès.
+
+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>.
+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à.
+key_name=Nom de la Clé
+key_content=Contenu
+add_key_success=La nouvelle clé SSH '%s' a été ajoutée avec succès !
+delete_key=Supprimer
+ssh_key_deletion=Suppression de la clé SSH
+ssh_key_deletion_desc=Supprimer cette clé SSH supprimera tous les accès à votre compte. Voulez-vous continuer ?
+ssh_key_deletion_success=Clé SSH supprimée avec succès !
+add_on=Ajouté le
+last_used=Dernière utilisation le
+no_activity=Aucune activité récente
+key_state_desc=Cette clé a été utilisée durant les 7 derniers jours
+token_state_desc=Cette clé a été utilisée durant les 7 derniers jours
+
+manage_social=Gérer les réseaux sociaux associés
+social_desc=Ceci est la liste des comptes de réseaux sociaux associés. Supprimez ceux que vous ne reconnaissez pas.
+unbind=Dissocier
+unbind_success=Compte de réseau social dissocié.
+
+manage_access_token=Gérer les jetons d'accès personnels
+generate_new_token=Générer le nouveau jeton
+tokens_desc=Jetons, que vous avez généré, qui peuvent être utilisés pour accéder à l'API Gogs.
+new_token_desc=Chaque Jeton donnera un accès complet à votre compte.
+token_name=Nom du jeton
+generate_token=Générer le jeton
+generate_token_succees=Nouveau jeton d'accès a été généré avec succès ! Assurez-vous de copier votre nouveau jeton d'accès personnel maintenant. Vous ne serez pas en mesure de le revoir !
+delete_token=Supprimer
+access_token_deletion=Suppression du jeton d'accès
+access_token_deletion_desc=Supprimer ce jeton d'accès supprimera tous les accès de l'application. Voulez-vous continuer ?
+delete_token_success=Le jeton d'accèsa été supprimé avec succès ! N'oubliez pas de mettre à jour vos applications.
+
+delete_account=Supprimer le Compte
+delete_prompt=Votre compte sera supprimé définitivement et cette opération est <strong>IRRÉVERSIBLE</strong> !
+confirm_delete_account=Confirmer la suppression
+delete_account_title=Suppression de compte
+delete_account_desc=Ce compte sera supprimé définitivement. Voulez-vous continuer ?
+
+[repo]
+owner=Propriétaire
+repo_name=Nom du Référentiel
+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_fork_helper=(Les changement de cette valeur affectera tous les forks)
+clone_helper=Besoin d'aide pour dupliquer ? Visitez <a target="_blank" href="%s">l'aide</a> !
+fork_repo=Scinder le dépôt
+fork_from=Embranchement de
+fork_visiblity_helper=La visibilité d'un référentiel d'embranchement ne peut pas être modifiée.
+repo_desc=Description
+repo_lang=Langue
+repo_lang_helper=Sélectionnez les fichiers .gitignore
+license=Licence
+license_helper=Sélectionner un fichier de licence
+readme=Fichier Readme
+readme_helper=Sélectionnez un modèle de readme
+auto_init=Initialiser ce dépôt avec le modèle et les fichiers sélectionnés
+create_repo=Créer un dépôt
+default_branch=Branche par défaut
+mirror_interval=Intervalle du miroir (heure)
+watchers=Observateurs
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Le nom de dépôt '%s' est réservé.
+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_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.
+migrate.permission_denied=Vous n'êtes pas autorisé à importer des dépôts locaux.
+migrate.invalid_local_path=Chemin local non valide, non existant ou n'étant pas un dossier.
+migrate.failed=Migration failed: %v
+
+forked_from=embranché à partir de
+fork_from_self=Vous nous ne pouvez pas scinder un dépôt que vous possédez déja !
+copy_link=Copier
+copy_link_success=Copié!
+copy_link_error=Appuyez sur ⌘-C ou Ctrl-C pour copier
+copied=Copié
+unwatch=Ne plus suivre
+watch=Suivre
+unstar=Retirer le vote
+star=Voter
+fork=Embranchement
+
+no_desc=Aucune description
+quick_guide=Introduction rapide
+clone_this_repo=Cloner ce dépôt
+create_new_repo_command=Créer un nouveau dépôt en ligne de commande
+push_exist_repo=Soumettre un référentiel existant via la ligne de commande
+repo_is_empty=Ce référentiel est vide, veuillez revenir plus tard !
+
+branch=Branche
+tree=Aborescence
+filter_branch_and_tag=Filter branch or tag
+branches=Branches
+tags=Tags
+issues=Problèmes
+pulls=Pull Requests
+labels=Etiquettes
+milestones=Étapes
+commits=Commissions
+releases=Publications
+file_raw=Raw
+file_history=Historique
+file_view_raw=Voir le Raw
+file_permalink=Lien permanent
+
+commits.commits=Commissions
+commits.search=Rechercher des commissions
+commits.find=Trouver
+commits.author=Auteur
+commits.message=Message
+commits.date=Date
+commits.older=Précédemment
+commits.newer=Récemment
+
+issues.new=Nouveau Problème
+issues.new.labels=Etiquettes
+issues.new.no_label=Pas d'étiquette
+issues.new.clear_labels=Effacer les étiquettes
+issues.new.milestone=Étape
+issues.new.no_milestone=Pas d'étape
+issues.new.clear_milestone=Effacer l'étape
+issues.new.open_milestone=Ouvrir l'étape
+issues.new.closed_milestone=Étapes fermées
+issues.new.assignee=Affecté à
+issues.new.clear_assignee=Supprimer les assignataires
+issues.new.no_assignee=Pas d'assignataire
+issues.create=Créer un rapport de problème
+issues.new_label=Nouvelle étiquette
+issues.new_label_placeholder=Nom de l'étiquette...
+issues.create_label=Créer une étiquette
+issues.open_tab=%d Ouvert
+issues.close_tab=%d Fermé
+issues.filter_label=Étiquette
+issues.filter_label_no_select=Aucun étiquette sélectionnée
+issues.filter_milestone=Étape
+issues.filter_milestone_no_select=Aucun jalon sélectionné
+issues.filter_assignee=Assigné
+issues.filter_assginee_no_select=Pas d'assignataire selectionné
+issues.filter_type=Type
+issues.filter_type.all_issues=Tous les problèmes
+issues.filter_type.assigned_to_you=Qui vous sont assignés
+issues.filter_type.created_by_you=Créé(es) par vous
+issues.filter_type.mentioning_you=Vous mentionnant
+issues.filter_sort=Trier
+issues.filter_sort.latest=Plus récent
+issues.filter_sort.oldest=Plus ancien/ne
+issues.filter_sort.recentupdate=Mis à jour récemment
+issues.filter_sort.leastupdate=Moins récemment mis à jour
+issues.filter_sort.mostcomment=Plus commentés
+issues.filter_sort.leastcomment=Moins commenté
+issues.opened_by=Ouvrir %[1]s by <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='commenté à <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
+issues.no_content=Il n'existe pas encore de contenu.
+issues.close_issue=Fermer
+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 à partir d'un commit <a id="%[1]s" href="#%[1]s"> %[2]s</a>`
+issues.poster=Publier
+issues.admin=Admin
+issues.owner=Propriétaire
+issues.sign_up_for_free=Inscrivez-vous gratuitement
+issues.sign_in_require_desc=pour rejoindre cette conversation. Vous avez déjà un compte ? <a href="%s">Connectez-vous commenter</a>
+issues.edit=Modifier
+issues.cancel=Annuler
+issues.save=Enregistrer
+issues.label_title=Nom du Label
+issues.label_color=Couleur du Label
+issues.label_count=%d labels
+issues.label_open_issues=%d problèmes ouverts
+issues.label_edit=Éditer
+issues.label_delete=Supprimer
+issues.label_modify=Modification du Label
+issues.label_deletion=Suppression du Label
+issues.label_deletion_desc=Cette opération supprimera également toutes les informations relatives aux problèmes. Voulez-vous continuer ?
+issues.label_deletion_success=Label supprimé avec succès !
+
+pulls.new=New Pull Request
+pulls.compare_changes=Comparer les changements
+pulls.compare_changes_desc=Comparer deux branches et faire une demande de récupération Pull pour les changements.
+pulls.compare_base=Base
+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 de tirer entre ces deux cibles : <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Creer une Pull Request
+pulls.title_desc=veut fusionner %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code>
+pulls.merged_title_desc=à fusionné %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Fichiers modifiés
+pulls.reopen_to_merge=Veuillez rouvrir cette demande de Pull Request pour effectuer l'opération de fusion.
+pulls.merged=Fusionné
+pulls.has_merged=Cette Pull Request a été fusionnée avec succès !
+pulls.data_broken=Les données de cette Pull Request a été rompues en raison de la suppression d'informations du Fork.
+pulls.is_checking=La recherche de conflits est toujours en cours, veuillez rafraichir la page dans quelques instants.
+pulls.can_auto_merge_desc=Vous pouvez effectuer d'opération de fusion automatique sur cette demande de Pull Request.
+pulls.cannot_auto_merge_desc=Vous ne pouvez effectuer des opération de fusion automatique car il y a des conflits entre les Commits.
+pulls.cannot_auto_merge_helper=Veuillez utiliser l'outil en ligne de commande pour le résoudre.
+pulls.merge_pull_request=Fusionner la Pull Request
+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
+milestones.close_tab=%d Fermé
+milestones.closed=%s fermé
+milestones.no_due_date=Aucune date d'échéance
+milestones.open=Ouvrir
+milestones.close=Fermer
+milestones.new_subheader=Créez des jalons pour organiser vos problèmes.
+milestones.create=Créer un Jalon
+milestones.title=Titre
+milestones.desc=Description
+milestones.due_date=Date d'échéance (facultatif)
+milestones.clear=Effacer
+milestones.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'AAAA-mm-jj'.
+milestones.create_success=Le Jalon '%s' a été crée avec succès !
+milestones.edit=Éditer le Jalon
+milestones.edit_subheader=Utilisez une description claire pour les jalons pour ne pas induire les gens en erreur.
+milestones.cancel=Annuler
+milestones.modify=Modifier le Jalon
+milestones.edit_success=Le Jalon '%s' a été modifié avec succès !
+milestones.deletion=Supprimer le Jalon
+milestones.deletion_desc=Supprimer ce Jalon effacera ses informations dans tous les problèmes relatifs. Voulez-vous continuer ?
+milestones.deletion_success=Le Jalon a été supprimé avec succès !
+
+settings=Paramètres
+settings.options=Options
+settings.collaboration=Collaboration
+settings.hooks=Webhooks
+settings.githooks=Git Hooks
+settings.basic_settings=Paramètres de base
+settings.danger_zone=Zone de danger
+settings.site=Site officiel
+settings.update_settings=Valider
+settings.change_reponame_prompt=Ce changement affectera comment les liens sont reliés avec le dépôt.
+settings.transfer=Transférer les propriétés
+settings.transfer_desc=Transfèrer ce dépôt à un autre utilisateur ou une organisation dont vous possédez des droits d'administrateur.
+settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi.
+settings.delete=Supprimer ce Référentiel
+settings.delete_desc=Attention, action irréversible. Soyez sûr de vous.
+settings.transfer_notices_1=-Vous perdrez l'accès si le nouveau propriétaire est un utilisateur individuel.
+settings.transfer_notices_2=-Vous préserverez l'accès si le nouveau propriétaire est une organisation et si vous y appartenez.
+settings.transfer_form_title=Veuillez recopier le texte suivant afin de confirmer votre opération :
+settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
+settings.delete_notices_2=-Cette opération supprimera définitivement le dépôt, y compris les données Git, problèmes, commentaires et accès des collaborateurs.
+settings.delete_notices_fork_1=-Si ce dépôt est public, tous les Forks vont devenir indépendants après la suppression.
+settings.delete_notices_fork_2=-Si ce dépôt est privé, tous les Forks seront supprimés en même temps.
+settings.delete_notices_fork_3=-Si vous souhaitez conserver tous les forks après suppression, veuillez tout d'abord modifier la visibilité de ce dépôt en public.
+settings.update_settings_success=Options mises à jour avec succès.
+settings.transfer_owner=Nouveau propriétaire
+settings.make_transfer=Transférer
+settings.transfer_succeed=Le contrôle du dépôt a été transféré avec succès.
+settings.confirm_delete=Confirmer la suppression
+settings.add_collaborator=Ajouter un collaborateur
+settings.add_collaborator_success=Nouveau collaborateur ajouté.
+settings.remove_collaborator_success=Collaborateur supprimé.
+settings.search_user_placeholder=Rechercher un utilisateur...
+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 Gogs, une notification sera envoyée vers l'hôte cible préalablement spécifié. Apprenez-en davantage dans le <a target="_blank" 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 !
+settings.webhook.request=Requête
+settings.webhook.response=Réponse
+settings.webhook.headers=Entêtes 
+settings.webhook.payload=Payload
+settings.webhook.body=Corps
+settings.githooks_desc=Les Hooks Git sont alimentés par Git lui même. Les Hooks compatibles sont modifiables dans la liste ci-dessous pour effectuer des opérations personnalisées.
+settings.githook_edit_desc=Si un Hook est inactif, un exemple de contenu vous sera proposé. Un contenu laissé vide signifie un Hook inactif.
+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" href="%s">Guide des WebHooks</a>.
+settings.payload_url=URL des Données Utiles
+settings.content_type=Type de contenu
+settings.secret=Confidentiel
+settings.slack_username=Nom d'utilisateur
+settings.slack_icon_url=URL de l'icône
+settings.slack_color=Couleur
+settings.event_desc=Quel évènement ce Webhook doit-il déclencher ?
+settings.event_push_only=Uniquement les <code>push</code> (soumissions).
+settings.event_send_everything=J'ai besoin de <strong>tout</strong>.
+settings.event_choose=Permettez-moi de choisir ce dont j'ai besoin.
+settings.event_create=Créer
+settings.event_create_desc=Branche, ou Tag créé
+settings.event_push=Push
+settings.event_push_desc=Git push vers un dépôt
+settings.active=Actif
+settings.active_helper=Les détails seront délivrés lorsque ce Hook sera déclenché.
+settings.add_hook_success=Nouveau Webhook ajouté.
+settings.update_webhook=Mettre à jour le Webhook
+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.slack_token=Jeton
+settings.slack_domain=Domaine
+settings.slack_channel=Canal
+settings.deploy_keys=Clés de déploiement
+settings.add_deploy_key=Ajouter une Clé de Déploiement
+settings.no_deploy_keys=Vous n'avez ajouté aucune clé de déploiement.
+settings.title=Titre
+settings.deploy_key_content=Contenu
+settings.key_been_used=Le contenu de la clé de déploiement a été utilisé.
+settings.key_name_used=Une clé de déploiement avec le même nom existe déjà.
+settings.add_key_success=La nouvelle clé de déploiement '%s' a été ajoutée avec succès !
+settings.deploy_key_deletion=Supprimer la Clé de Déploiement
+settings.deploy_key_deletion_desc=Supprimer cette clé de déploiement effacera tous les accès relatifs pour ce référentiel. Voulez-vous continuer ?
+settings.deploy_key_deletion_success=La clé de déploiement a été supprimée avec succès !
+
+diff.browse_source=Parcourir la Source
+diff.parent=Parent
+diff.commit=Commettre
+diff.data_not_available=Données Diff indisponibles.
+diff.show_diff_stats=Afficher les stats Diff
+diff.stats_desc=<strong> %d fichiers modifiés</strong> avec <strong>%d ajouts</strong> et <strong>%d suppressions</strong>
+diff.bin=BIN
+diff.view_file=Voir le fichier
+
+release.releases=Versions
+release.new_release=Nouvelle version
+release.draft=Brouillon
+release.prerelease=Pré-publication
+release.stable=Stable
+release.edit=Éditer
+release.ahead=<strong>%d</strong> commissions à %s depuis cette publication
+release.source_code=Code Source
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Nom du tag
+release.target=Cible 
+release.tag_helper=Choisissez un tag existant ou créez-en un nouveau à publier.
+release.title=Titre
+release.content=Contenu
+release.write=Écrire
+release.preview=Prévisualiser
+release.loading=Chargement…
+release.prerelease_desc=Il s'agit d'une version préliminaire
+release.prerelease_helper=Nous soulignerons que cette version est considérée comme non prête pour la production.
+release.cancel=Annuler
+release.publish=Publier
+release.save_draft=Sauvegarder le Brouillon
+release.edit_release=Éditer la publication
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Une publication avec ce nom de tag existe déjà.
+release.downloads=Téléchargements
+
+[org]
+org_name_holder=Nom d'organisation
+org_full_name_holder=Nom complet de l'organisation
+org_name_helper=Idéalement, un nom d'organisation devrait être court et facilement mémorisable.
+create_org=Créer une organisation
+repo_updated=Mis à jour
+people=Contacts
+invite_someone=Inviter quelqu'un
+teams=Équipes
+lower_members=Membres
+lower_repositories=Référentiels
+create_new_team=Créer une Nouvelle Équipe
+org_desc=Description
+team_name=Nom d'Équipe
+team_desc=Description
+team_name_helper=Ce nom sera utilisé pour mentionner l'équipe dans les conversations.
+team_desc_helper=Présentation de l'équipe
+team_permission_desc=Quel niveau d'accès cette équipe devrait-elle posséder ?
+
+form.name_reserved=Le nom d'organisation '%s' est réservé.
+form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'organisation.
+
+settings=Paramètres
+settings.options=Options
+settings.full_name=Non Complet
+settings.website=Site Web
+settings.location=Localisation
+settings.update_settings=Valider
+settings.update_setting_success=Paramètres d'organisation modifiés avec succès.
+settings.change_orgname_prompt=Cette modification affectera comment des liens se rapportent à l'organisation.
+settings.update_avatar_success=Les paramètres de l'avatar de l'organisation ont été mis à jour avec succès.
+settings.delete=Supprimer l'organisation
+settings.delete_account=Supprimer cette organisation
+settings.delete_prompt=Cela supprimera cette organisation définitivement. Cette opération est <strong>IRRÉVERSIBLE</strong> !
+settings.confirm_delete_account=Confirmez la suppression
+settings.delete_org_title=Suppression d'organisation
+settings.delete_org_desc=Cette organisation sera définitivement supprimée. Continuer ?
+settings.hooks_desc=Ajoute des Webhooks qui seront activés pour <strong>tous les Référentiels</strong> de cette organisation.
+
+members.public=Public
+members.public_helper=Rendre privé
+members.private=Privé
+members.private_helper=Rendre public
+members.owner=Propriétaire
+members.member=Membre
+members.conceal=Masquer
+members.remove=Exclure
+members.leave=Quitter
+members.invite_desc=Tapez un nom d'utilisateur pour inviter un nouveau membre chez %s :
+members.invite_now=Envoyer une invitation
+
+teams.join=Rejoindre
+teams.leave=Quitter
+teams.read_access=Accès en Lecture
+teams.read_access_helper=Cette équipe aura la possibilité de voir et dupliquer ses Référentiels.
+teams.write_access=Accès en Écriture
+teams.write_access_helper=Cette équipe possèdera aussi bien des droits de lecture que d'écriture sur ses Référentiels.
+teams.admin_access=Accès Administrateur
+teams.admin_access_helper=Cette équipe possèdera des droits de lecture, d'écriture, ainsi que le pouvoir d'ajouter des collaborateurs.
+teams.no_desc=Aucune description
+teams.settings=Paramètres
+teams.owners_permission_desc=Les propriétaires possèdent <strong>les droits d'administrateur</strong> et disposent d'un accès complet à <strong>tous les Référentiels</strong> de l'organisation.
+teams.members=Membres de L'Équipe
+teams.update_settings=Valider
+teams.delete_team=Supprimer cette Équipe
+teams.add_team_member=Ajouter un Membre
+teams.delete_team_title=Suppression de l'équipe
+teams.delete_team_desc=Cette équipe sera supprimée. Les membres pourraient perdre leurs accès à certains dépôts.
+teams.delete_team_success=Équipe supprimée avec succès.
+teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</strong> : les membres peuvent voir et dupliquer ses Référentiels.
+teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses Référentiels.
+teams.admin_permission_desc=Cette équipe permet l'accès en <strong>administrateur</strong> : les membres peuvent voir, participer et ajouter des collaborateurs à ses Référentiels.
+teams.repositories=Référentiels de l'Équipe
+teams.add_team_repository=Ajouter un Dépôt à l'Équipe
+teams.remove_repo=Supprimer
+teams.add_nonexistent_repo=Dépôt inexistant, veuillez d'abord le créer.
+
+[admin]
+dashboard=Tableau de bord
+users=Utilisateurs
+organizations=Organisations
+repositories=Référentiels
+authentication=Authentifications
+config=Configuration
+notices=Notes Systèmes
+monitor=Supervision
+first_page=Première
+last_page=Dernière
+total=Total : %d
+
+dashboard.statistic=Statistiques
+dashboard.operations=Opérations
+dashboard.system_status=État du Moniteur Système
+dashboard.statistic_info=La base de données Gogs contient <b>%d</b> utilisateurs, <b>%d</b> organisations, <b>%d</b> clés publiques, <b>%d</b> Référentiels, <b>%d</b> suivis, <b>%d</b> votes, <b>%d</b> actions, <b>%d</b> accès, <b>%d</b> problèmes, <b>%d</b> commentaires, <b>%d</b> comptes de réseaux sociaux, <b>%d</b> abonnements, <b>%d</b> miroirs, <b>%d</b> publications, <b>%d</b> connexions d'origine, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> tâches hook, <b>%d</b> équipes, <b>%d</b> tâches de mise à jour, <b>%d</b> fichiers.
+dashboard.operation_name=Nom de l'Opération
+dashboard.operation_switch=Basculer
+dashboard.operation_run=Exécuter
+dashboard.clean_unbind_oauth=Nettoyer les associations OAuthes
+dashboard.clean_unbind_oauth_success=Tous unbind OAuthes ont été supprimés avec succès.
+dashboard.delete_inactivate_accounts=Supprimer tous les comptes inactifs
+dashboard.delete_inactivate_accounts_success=Tous les comptes inactifs ont été supprimés avec succès.
+dashboard.delete_repo_archives=Supprimer toutes les archives de référentiels
+dashboard.delete_repo_archives_success=Toutes les archives des référentiels ont été supprimées avec succès.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Collecter les déchets des référentiels
+dashboard.git_gc_repos_success=Tous les dépôts ont effectué la collecte avec succès.
+dashboard.resync_all_sshkeys=Ré-écrire le fichier '.ssh/authorized_keys' (attention : les clés hors-Gogs vont être perdues)
+dashboard.resync_all_sshkeys_success=Toutes les clés publiques ont été ré-écrites avec succès.
+dashboard.resync_all_update_hooks=Ré-écrire tous les hooks de mises à jour des dépôts (requis quand le chemin de la configuration personnalisé est modifié)
+dashboard.resync_all_update_hooks_success=Les mises à jour de hook des référentiels ont toutes été réécrites avec succès.
+
+dashboard.server_uptime=Durée de Marche Serveur
+dashboard.current_goroutine=Goroutines actuelles
+dashboard.current_memory_usage=Utilisation Mémoire actuelle
+dashboard.total_memory_allocated=Mémoire totale allouée
+dashboard.memory_obtained=Mémoire obtenue
+dashboard.pointer_lookup_times=Nombre de Consultations Pointeur
+dashboard.memory_allocate_times=Nombre d'Allocation Mémoire
+dashboard.memory_free_times=Nombre de Libération Mémoire
+dashboard.current_heap_usage=Utilisation Tas (Heap)
+dashboard.heap_memory_obtained=Mémoire Tas (Heap) obtenue
+dashboard.heap_memory_idle=Mémoire Tas (Heap) au Repos
+dashboard.heap_memory_in_use=Utilisation Mémoire Tas (Heap)
+dashboard.heap_memory_released=Mémoire Tas (Heap) libérée
+dashboard.heap_objects=Objets Tas (Heap)
+dashboard.bootstrap_stack_usage=Utilisation Pile Bootstrap
+dashboard.stack_memory_obtained=Mémoire Pile obtenue
+dashboard.mspan_structures_usage=Utilisation des Structures MSpan
+dashboard.mspan_structures_obtained=Structures MSpan obtenues
+dashboard.mcache_structures_usage=Utilisation des Structures MCache
+dashboard.mcache_structures_obtained=Structures MCache obtenues
+dashboard.profiling_bucket_hash_table_obtained=Profilage de Seau de Table de Hashage obtenu
+dashboard.gc_metadata_obtained=Métadonnées GC obtenues
+dashboard.other_system_allocation_obtained=Allocation de l'autre Système obtenue
+dashboard.next_gc_recycle=Traitement GC suivant
+dashboard.last_gc_time=Depuis le dernier GC
+dashboard.total_gc_time=Pause GC totale
+dashboard.total_gc_pause=Pause GC
+dashboard.last_gc_pause=Dernière Pause GC
+dashboard.gc_times=Nombres de GC
+
+users.user_manage_panel=Gestion des Utilisateurs
+users.new_account=Créer un nouveau compte
+users.name=Nom
+users.activated=Activés
+users.admin=Administrateur
+users.repos=Dépôts
+users.created=Créés
+users.send_register_notify=Envoyer une Notification d'enregistrement à l'utilisateur
+users.new_success=Nouveau compte '%s' a été créé avec succès.
+users.edit=Éditer
+users.auth_source=Sources d'authentification
+users.local=Locales
+users.auth_login_name=Nom d'utilisateur d'authentification
+users.password_helper=Laissez-le vide pour ne pas changer.
+users.update_profile_success=Profil mis à jour avec succès.
+users.edit_account=Modifier le Compte
+users.is_activated=Ce compte est activé
+users.is_admin=Ce compte possède un niveau d'accès administrateur
+users.allow_git_hook=Ce compte dispose des autorisations pour créer des crochets de Git
+users.allow_import_local=Ce compte dispose des permissions nécessaire à l'import des dépôts locaux
+users.update_profile=Mettre à jour le profil
+users.delete_account=Supprimer ce Compte
+users.still_own_repo=Ce compte possède toujours des dépôts. Vous devez d'abord les supprimer ou les transférer.
+users.still_has_org=Ce compte a toujours membres de l'organisation, vous avez à gauche ou supprimez tout d'abord.
+users.deletion_success=Le compte a été supprimé avec succès !
+
+orgs.org_manage_panel=Gestion des Organisations
+orgs.name=Nom
+orgs.teams=Équipes
+orgs.members=Membres
+
+repos.repo_manage_panel=Gestion des Dépôts
+repos.owner=Propriétaire
+repos.name=Nom
+repos.private=Privé
+repos.watches=Suivi par
+repos.stars=Votes
+repos.issues=Problèmes
+
+auths.auth_manage_panel=Panel d'administration des authentifications
+auths.new=Ajouter une nouvelle source d'authentification
+auths.name=Nom
+auths.type=Type
+auths.enabled=Activé
+auths.updated=Mis à jour
+auths.auth_type=Type d'authentification
+auths.auth_name=Nom de l'authentification
+auths.domain=Domaine
+auths.host=Hôte
+auths.port=Port
+auths.bind_dn=Bind DN
+auths.bind_password=Bind mot de passe
+auths.bind_password_helper=Avertissement : Ce mot de passe est stocké en clair. N'utilisez pas le mot de passe d'un compte doté de privilèges élevés.
+auths.user_base=Utilisateur Search Base
+auths.user_dn=Utilisateur DN
+auths.attribute_name=Attribut du prénom
+auths.attribute_surname=Attribut du nom de famille
+auths.attribute_mail=Attribut de l'e-mail
+auths.filter=Filtre utilisateur
+auths.admin_filter=Filtre administrateur
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=Type d'authentification SMTP
+auths.smtphost=Hôte SMTP
+auths.smtpport=Port SMTP
+auths.allowed_domains=Domaines autorisés
+auths.allowed_domains_helper=Laissez-le vide pour ne pas restreindre de domaines. Plusieurs domaines doivent être séparés par une virgule «, ».
+auths.enable_tls=Activer le Chiffrement TLS
+auths.skip_tls_verify=Ne pas vérifier TLS
+auths.pam_service_name=Nom du Service PAM
+auths.enable_auto_register=Connexion Automatique
+auths.tips=Conseils
+auths.edit=Modifier les paramètres d'authentification
+auths.activated=Authentification activée
+auths.new_success=Nouvelle authentification «%s » a été ajoutée avec succès.
+auths.update_success=Les paramètre d'authentification a été mis à jour avec succès.
+auths.update=Mettre à jour les paramètres d'authentifications
+auths.delete=Supprimer cette authentification
+auths.delete_auth_title=Suppression de l'authentification
+auths.delete_auth_desc=Cette authentification va être supprimée. voulez-vous continuer ?
+auths.deletion_success=L'authentification a été supprimée avec succès !
+
+config.server_config=Configuration du Serveur
+config.app_name=Nom de l'Application
+config.app_ver=Version de l'Application
+config.app_url=URL de l'Application
+config.domain=Domaine
+config.offline_mode=Mode hors-ligne
+config.disable_router_log=Désactiver la Journalisation du Routeur
+config.run_user=Entrer un Utilisateur
+config.run_mode=Mode d'Éxécution
+config.repo_root_path=Emplacement des Dépôts
+config.static_file_root_path=Emplacement Racine du Fichier Statique
+config.log_file_root_path=Emplacement Racine du Fichier Journal
+config.script_type=Type de Script
+config.reverse_auth_user=Annuler l'Authentification de l'Utilisateur
+config.db_config=Configuration de la Base de Données
+config.db_type=Type
+config.db_host=Hôte
+config.db_name=Nom
+config.db_user=Utilisateur
+config.db_ssl_mode=Mode SSL
+config.db_ssl_mode_helper=("postgres" uniquement)
+config.db_path=Emplacement
+config.db_path_helper=(pour « sqlite3 » et « TIDB »)
+config.service_config=Configuration du Service
+config.register_email_confirm=Nécessite une confirmation par courriel
+config.disable_register=Désactiver l'Enregistrement
+config.show_registration_button=Afficher le bouton d'enregistrement
+config.require_sign_in_view=Connexion Obligatoire pour Visualiser
+config.enable_cache_avatar=Activer le Cache d'Avatar
+config.mail_notify=Mailer les Notifications
+config.disable_key_size_check=Désactiver la vérification de la taille de clé minimale
+config.enable_captcha=Activez le Captcha
+config.active_code_lives=Limites de Code Actif
+config.reset_password_code_lives=Réinitialiser le Mot De Passe des Limites de Code
+config.webhook_config=Configuration Webhook
+config.queue_length=Longueur de la file d'attente
+config.deliver_timeout=Expiration d'Envoi
+config.skip_tls_verify=Ne pas vérifier TLS
+config.mailer_config=Configuration du Maileur
+config.mailer_enabled=Activé
+config.mailer_disable_helo=Désactiver HELO
+config.mailer_name=Nom
+config.mailer_host=Hôte
+config.mailer_user=Utilisateur
+config.oauth_config=Configuration OAuth
+config.oauth_enabled=Activé
+config.cache_config=Configuration du Cache
+config.cache_adapter=Adaptateur du Cache
+config.cache_interval=Intervales du Cache
+config.cache_conn=Liaison du Cache
+config.session_config=Configuration de Session
+config.session_provider=Fournisseur de Session
+config.provider_config=Configurer le Fournisseur
+config.cookie_name=Nom du Cookie
+config.enable_set_cookie=Activer les Cookies
+config.gc_interval_time=Intervals GC
+config.session_life_time=Durée de Session
+config.https_only=HTTPS uniquement
+config.cookie_life_time=Expiration du Cookie
+config.picture_config=Configuration d'Image
+config.picture_service=Service d'Imagerie
+config.disable_gravatar=Désactiver Gravatar
+config.log_config=Configuration du Journal
+config.log_mode=Mode du Journal
+
+monitor.cron=Tâches Cron
+monitor.name=Nom
+monitor.schedule=Planification
+monitor.next=Suivant
+monitor.previous=Précédent
+monitor.execute_times=Nombre d'Éxécutions
+monitor.process=Processus en cours d'Éxécution
+monitor.desc=Description
+monitor.start=Heure de Démarrage
+monitor.execute_time=Heure d'Éxécution
+
+notices.system_notice_list=Notes Systèmes
+notices.type=Type
+notices.type_1=Dépôt
+notices.desc=Description
+notices.op=Opération
+notices.delete_success=Note système supprimée avec succès.
+
+[action]
+create_repo=a crée le dépôt <a href="%s">%s</a>
+rename_repo=rebaptisé le dépôt de <code>%[1]s</code> à <a href="%[2]s">%[3]s</a>
+commit_repo=a soumis à <a href="%[1]s/src/%[2]s">%[3]s</a> chez <a href="%[1]s">%[4]s</a>
+create_issue=`a ouvert un problème <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>`
+comment_issue=`a commenté le problème <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`pull request fusionné 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> à <a href="%[1]s">%[3]s</a>
+compare_2_commits=Comparer ces 2 commissions
+
+[tool]
+ago=auparavant
+from_now=à partir de maintenant
+now=maintenant
+1s=1 seconde %s
+1m=1 minute %s
+1h=1 heure %s
+1d=1 jour %s
+1w=1 semaine %s
+1mon=1 mois %s
+1y=1 an %s
+seconds=%d secondes %s
+minutes=%d minutes %s
+hours=%d heures %s
+days=%d jours %s
+weeks=%d semaines %s
+months=%d mois %s
+years=%d ans %s
+raw_seconds=secondes
+raw_minutes=minutes
+
+[dropzone]
+default_message=Déposez les fichiers ici ou cliquez pour télécharger.
+invalid_input_type=Vous ne pouvez pas télécharger des fichiers de ce type.
+file_too_big=Le fichier de taille ({{filesize}} Mo) dépasse la taille maximale ({{maxFilesize}} MB).
+remove_file=Supprimer le fichier
+

+ 1009 - 992
conf/locale/locale_it-IT.ini

@@ -1,992 +1,1009 @@
-app_desc=Un servizio Git auto-ospitato pronto all'uso
-
-home=Home
-dashboard=Pannello di controllo
-explore=Esplora
-help=Aiuto
-sign_in=Accedi
-sign_out=Esci
-sign_up=Registrati
-register=Registrati
-website=Sito Web
-version=Versione
-page=Pagina
-template=Template
-language=Lingua
-create_new=Crea...
-user_profile_and_more=Profilo utente e altro
-signed_in_as=Signed in as
-
-username=Nome utente
-email=E-mail
-password=Password
-re_type=Conferma
-captcha=Captcha
-
-repository=Repository
-organization=Organizzazione
-mirror=Mirror
-new_repo=Nuovo Repository
-new_migrate=Nuova Migrazione
-new_fork=Nuovo Fork Repository
-new_org=Nuova organizzazione
-manage_org=Gestisci le organizzazioni
-admin_panel=Pannello di amministrazione
-account_settings=Impostazioni dell'account
-settings=Impostazioni
-your_profile=Profilo
-your_settings=Impostazioni
-
-news_feed=Notizie
-pull_requests=Pull Requests
-issues=Problemi
-
-cancel=Annulla
-
-[search]
-search=Ricerca...
-repository=Repository
-user=Utente
-issue=Problema
-code=Codice
-
-[install]
-install=Installazione
-title=Passi d'installazione per il primo avvio
-docker_helper=Se stai utilizzando Gogs su Docker, per favore leggi le <a target="_blank" href="%s">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!
-requite_db_desc=Gogs necessita MySQL, PostgreSQL, SQLite3 o TiDB.
-db_title=Impostazioni Database
-db_type=Tipo di database
-host=Host
-user=Utente
-password=Password
-db_name=Nome del database
-db_helper=Utilizza il motore INNODB con codifica utf8_general_ci per MySQL.
-ssl_mode=Modalità SSL
-path=Percorso
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
-no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
-err_empty_admin_password=Admin password cannot be empty.
-
-general_title=Impostazioni di Base dell'Applicazione
-app_name=Nome Applicazione
-app_name_helper=Scrivi qui il nome della tua organizzazione forte e chiaro!
-repo_path=Percorso Root del Repository
-repo_path_helper=Tutti i repository Git remoti saranno salvati in questa directory.
-run_user=Esegui con l'utente
-run_user_helper=L'utente deve avere accesso al percorso root del repository e avviare Gogs.
-domain=Dominio
-domain_helper=Questo modifica lo SSH clone URLs.
-ssh_port=Porta SSH
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
-http_port=Porta HTTP
-http_port_helper=Porta di ascolto dell'applicazione.
-app_url=URL Applicazione
-app_url_helper=Questo influisce sugli URL per il clonaggio via HTTP/HTTPS e da qualche parte nella posta elettronica.
-
-optional_title=Impostazioni Facoltative
-email_title=Impostazioni E-mail
-smtp_host=Host SMTP
-smtp_from=Da
-smtp_from_helper=Mail da indirizzo, RFC 5322. Può essere solo un indirizzo email o il formato "Nome" <email@esempio.com>.
-mailer_user=E-mail del Mittente
-mailer_password=Password del Mittente
-register_confirm=Abilita Conferma di Registrazione
-mail_notify=Abilita Notifiche via Email
-server_service_title=Impostazioni del Server e Altri Servizi
-offline_mode=Abilita Modalità Offline
-offline_mode_popup=Disabilita il CDN anche in modalità produttiva, tutte le risorse saranno servite localmente.
-disable_gravatar=Disable Gravatar Service
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
-disable_registration=Disabilita Registrazione Manuale
-disable_registration_popup=Disabilita la registrazione manuale degli utenti, solo gli amministratori possono creare account.
-enable_captcha=Abilita Captcha
-enable_captcha_popup=Require validate captcha for user self-registration.
-require_sign_in_view=Abilita Richiesta di Accesso per Vedere le Pagine
-require_sign_in_view_popup=Solo gli utenti loggati possono vedere le pagine, i visitatori potranno vedere solo le pagine di accesso e registrazione.
-admin_setting_desc=Non devi per forza creare un account admin proprio adesso, ma comunque l'utente ID=1 otterrà l'accesso da amministratore automaticamente.
-admin_title=Impostazioni Account Amministratore
-admin_name=Nome utente
-admin_password=Password
-confirm_password=Conferma Password
-admin_email=E-mail
-install_gogs=Installare Gogs
-test_git_failed=Fallito il test del comando git: %v
-sqlite3_not_available=Questa versione non supporta SQLite3, si prega di scaricare la versione binaria ufficiale da %s, NON la versione gobuild.
-invalid_db_setting=La configurazione del database non è corretta: %v
-invalid_repo_path=Percorso root del repository invalido: %v
-run_user_not_match=Run user non è l'utente corrente:  %s -> %s
-save_config_failed=Fallito il salvataggio della configurazione: %v
-invalid_admin_setting=Impostazioni account Admin non valide: %v
-install_success=Benvenuto! Siamo felici che tu abbia scelto Gogs, buon divertimento.
-
-[home]
-uname_holder=Nome Utente o E-mail
-password_holder=Password
-switch_dashboard_context=Cambia Dashboard Context
-my_repos=I miei Repository
-collaborative_repos=Repository Condivisi
-my_orgs=Le mie Organizzazioni
-my_mirrors=I miei Mirror
-view_home=View %s
-
-issues.in_your_repos=Nei tuoi repository
-
-[explore]
-repos=Repository
-
-[auth]
-create_new_account=Crea un nuovo Account
-register_hepler_msg=Hai già un account? Accedi ora!
-social_register_hepler_msg=Hai già un account? Associalo ora!
-disable_register_prompt=Siamo spiacenti, registrazione è stata disabilitata. Si prega di contattare l'amministratore del sito.
-disable_register_mail=Siamo spiacenti, la conferma di registrazione via Mail è stata disattivata.
-remember_me=Ricordami
-forgot_password=Password dimenticata
-forget_password=Password dimenticata?
-sign_up_now=Bisogno di un account? Iscriviti ora.
-confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a <b>%s</b>, verifica la tua casella di posta entro le prossime %d ore per completare la registrazione.
-sign_in_to_account=Accedi al tuo account
-active_your_account=Attiva il tuo Account
-resent_limit_prompt=Siamo spiacenti, si stanno inviando e-mail di attivazione troppo spesso. Si prega di attendere 3 minuti.
-has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (<b>%s</b>). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto.
-resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione
-email_not_associate=Questo indirizzo e-mail non è associato ad alcun account.
-send_reset_mail=Clicca qui per (ri)inviare la tua e-mail di reimpostazione password
-reset_password=Reimposta la tua Password
-invalid_code=Siamo spiacenti, il codice di conferma è scaduto o non valido.
-reset_password_helper=Clicca qui per reimpostare la password
-password_too_short=La lunghezza della password non può essere meno 6 caratteri.
-
-[mail]
-activate_account=Please activate your account
-activate_email=Verifica il tuo indirizzo e-mail
-reset_password=Reimposta la tua password
-register_success=Registrazione completata con successo, Benvenuto
-
-[modal]
-yes=Sì
-no=No
-modify=Modifica
-
-[form]
-UserName=Nome utente
-RepoName=Nome Repository
-Email=Indirizzo E-mail
-Password=Password
-Retype=Reinserisci password
-SSHTitle=Nome chiave SSH
-HttpsUrl=URL HTTPS
-PayloadUrl=URL Payload
-TeamName=Nome Team
-AuthName=Nome autorizzazione
-AdminEmail=Email dell'Admin
-
-require_error=` non può essere vuoto.`
-alpha_dash_error=` ammessi solo caratteri alfanumerici o trattini(-_).`
-alpha_dash_dot_error=` ammessi solo caratteri alfanumerici o trattini(-_) o punti.`
-size_error='deve essere %s.'
-min_size_error=` deve contenere almeno %s caratteri.`
-max_size_error=` deve contenere massimo %s caratteri.`
-email_error=` non è un indirizzo e-mail valido.`
-url_error=` non è un URL valido.`
-unknown_error=Errore sconosciuto:
-captcha_incorrect=Il Captcha non corrisponde.
-password_not_match=Le due password non corrispondono.
-
-username_been_taken=Il nome utente è già utilizzato.
-repo_name_been_taken=Il nome del Repository è già utilizzato.
-org_name_been_taken=Il nome dell'Organizzazione è già utlizzato.
-team_name_been_taken=Il nome del Team è già utilizzato.
-email_been_used=L'indirizzo E-mail è già utilizzato.
-illegal_team_name=Il nome del Team contiene caratteri non validi.
-username_password_incorrect=Nome utente o password incorretti.
-enterred_invalid_repo_name=Si prega di assicurarsi che il nome del repository inserito sia corretto.
-enterred_invalid_owner_name=Si prega di assicurarsi che il nome del proprietario inserito sia corretto.
-enterred_invalid_password=Verificare che la  password inserita sia corretta.
-user_not_exist=L'utente inserito non esiste.
-last_org_owner=L'utente che si vuole rimuovere è l'ultimo membro admin del team. Ci deve essere un altro proprietario.
-
-invalid_ssh_key=Siamo spiacenti, non siamo in grado di verificare la chiave SSH: %s
-unable_verify_ssh_key=Gogs non può verificare la chiave SSH, ma assumiamo che sia valida, si prega di verificare voi stessi.
-auth_failed=Autenticazione non riuscita: %v
-
-still_own_repo=Il tuo account possiede ancora almeno un repository, dovete prima cancellarli o trasferirne la proprietà.
-still_has_org=Il tuo account è ancora associato ad almeno un'organizzazione, disassociarsi prima.
-org_still_own_repo=Questa organizzazione ha ancora la proprietà del repository, dovete cancellarla o trasferirli prima.
-
-still_own_user=Questa autenticazione è ancora in uso da almeno un utente, per favore rimuovili dall'autenticazione e riprova.
-
-target_branch_not_exist=Il ramo (branch) di destinazione non esiste.
-
-[user]
-change_avatar=Cambia il tuo avatar su gravatar.com
-change_custom_avatar=Cambia il tuo avatar nelle impostazioni
-join_on=Si è unito il
-repositories=Repository
-activity=Attività pubblica
-followers=Seguaci
-starred=Votate
-following=Seguiti
-
-form.name_reserved=L'username '%s' è riservato.
-form.name_pattern_not_allowed=La struttura del nome utente '%s' non è consentita.
-
-[settings]
-profile=Profilo
-password=Password
-ssh_keys=Chiavi SSH
-social=Account Sociali
-applications=Applicazioni
-orgs=Organizzazioni
-delete=Elimina account
-uid=Uid
-
-public_profile=Profilo pubblico
-profile_desc=Il tuo indirizzo e-mail è pubblico e sarà usato per ogni notifica inerente al tuo account, e per qualsiasi operazione web effettuata attraverso il sito.
-full_name=Nome Completo
-website=Sito web
-location=Posizione
-update_profile=Aggiorna Profilo
-update_profile_success=Il tuo profilo è stato aggiornato con successo.
-change_username=Username Cambiato
-change_username_prompt=This change will affect the way how links relate to your account.
-continue=Continua
-cancel=Annulla
-
-enable_custom_avatar=Abilita avatar personalizzato
-enable_custom_avatar_helper=Seleziona per disabilitare il fetch da Gravatar
-choose_new_avatar=Scegli un nuovo avatar
-update_avatar=Aggiorna le impostazioni avatar
-uploaded_avatar_not_a_image=Il file caricato non è un'immagine.
-no_custom_avatar_available=Nessun avatar personalizzato disponibile, impossibile abilitarlo.
-update_avatar_success=Le tue impostazioni avatar sono state aggiornate con successo.
-
-change_password=Cambia Password
-old_password=Password attuale
-new_password=Nuova Password
-retype_new_password=Re-inserisci la password
-password_incorrect=La Password attuale non è corretta.
-change_password_success=La tua password è stata cambiata con successo. Ora puoi accedere usando la nuova password.
-
-emails=Indirizzi e-mail
-manage_emails=Gestisci indirizzi email
-email_desc=Il tuo indirizzo e-mail primario sarà usato per le notifiche e altre operazioni.
-primary=Primario
-primary_email=Imposta come primario
-delete_email=Elimina
-email_deletion=E-mail Deletion
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail has been deleted successfully!
-add_new_email=Aggiungi un nuovo indirizzo E-mail
-add_email=Aggiungi E-mail
-add_email_confirmation_sent=Una nuova email di conferma è stata inviata a '%s', per favore controlla la tua posta in arrivo nelle prossime %d ore per completare il processo di registrazione.
-add_email_success=Il tuo nuovo indirizzo e-mail è stato aggiunto con successo.
-
-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.
-add_new_key=Aggiungi Chiave SSH
-ssh_key_been_used=Public key content has been used.
-ssh_key_name_used=Public key with same name has already existed.
-key_name=Nome della Chiave
-key_content=Contenuto
-add_key_success=New SSH key '%s' has been added successfully!
-delete_key=Elimina
-ssh_key_deletion=SSH Key Deletion
-ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
-ssh_key_deletion_success=SSH key has been deleted successfully!
-add_on=Aggiunto il
-last_used=Ultimo accesso il
-no_activity=Nessuna attività recente
-key_state_desc=Hai utilizzato questa chiave negli ultimi 7 giorni
-token_state_desc=This token is used in last 7 days
-
-manage_social=Gestisci gli Account Sociali Associati
-social_desc=Questa è un elenco degli account sociali associati. Rimuovere qualsiasi account che non si riconosce.
-unbind=Disassocia
-unbind_success=Account sociale disassociato.
-
-manage_access_token=Gestisci i Token di Accesso Personale
-generate_new_token=Genera Nuovo Token
-tokens_desc=Tokens you have generated that can be used to access the Gogs APIs.
-new_token_desc=Da questo momento, ogni token avrà pieno accesso al tuo account.
-token_name=Nome Token
-generate_token=Genera Token
-generate_token_succees=Nuovo token di accesso generato con successo! Assicurarsi di copiare il nuovo token di accesso personale ora: non sarà possibile visualizzarlo nuovamente!
-delete_token=Elimina
-access_token_deletion=Personal Access Token Deletion
-access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
-delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
-
-delete_account=Elimina Account
-delete_prompt=L'operazione eliminerà permanentemente l'account e <strong>NON POTRÀ</strong> essere annullata!
-confirm_delete_account=Conferma Eliminazione
-delete_account_title=Eliminazione account
-delete_account_desc=Questo account sta per essere eliminato in modo definitivo, vuoi continuare?
-
-[repo]
-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=This repository is <span class="ui red text">Private</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Change of this value will affect all forks)
-fork_repo=Forka Repository
-fork_from=Forka da
-fork_visiblity_helper=Non puoi cambiare la visibilità di un repository forkato.
-repo_desc=Descrizione
-repo_lang=Lingua
-repo_lang_helper=Seleziona file .gitignore
-license=Licenza
-license_helper=Selezionare un file di licenza
-readme=Readme
-readme_helper=Seleziona un template per il readme
-auto_init=Initialize this repository with selected files and template
-create_repo=Crea Repository
-default_branch=Ramo (Branch) predefinito
-mirror_interval=Intervallo Mirror (in ore)
-
-form.name_reserved=Il nome repository %s è riservato.
-form.name_pattern_not_allowed=La struttura del nome del repository %s non è consentita.
-
-need_auth=Richiesta di autorizzazione
-migrate_type=Tipo di migrazione
-migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
-migrate_repo=Migra Repository
-migrate.clone_address=Duplica Indirizzo
-migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
-migrate.invalid_local_path=Percorso locale non valido, non esiste o non è una cartella.
-
-forked_from=forkato da
-fork_from_self=Non puoi forkare il tuo stesso repository!
-copy_link=Copia
-copy_link_success=Copied!
-copy_link_error=Press ⌘-C or Ctrl-C to copy
-click_to_copy=Copia negli appunti
-copied=OK copiato
-clone_helper=Hai bisogno di aiuto per la clonazione? Visita <a target="_blank" href="%s">Aiuto</a>!
-unwatch=Non seguire più
-watch=Segui
-unstar=Togli il voto
-star=Vota
-fork=Forka
-
-no_desc=Nessuna descrizione
-quick_guide=Guida rapida
-clone_this_repo=Clona questo repository
-create_new_repo_command=Crea nuovo repository da riga di comando
-push_exist_repo=Push un repo esistente dalla riga di comando
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=Ramo (Branch)
-tree=Albero (Tree)
-branch_and_tags=Rami (Branch) & Tag
-branches=Rami (Branch)
-tags=Tag
-issues=Problemi
-pulls=Pull Requests
-labels=Etichette
-milestones=Traguardi
-commits=Commit
-releases=Rilasci
-file_raw=Originale
-file_history=Cronologia
-file_view_raw=Vedi originale
-file_permalink=Permalink
-
-commits.commits=Commits
-commits.search=Ricerca una versione
-commits.find=Cerca
-commits.author=Autore
-commits.message=Messaggio
-commits.date=Data
-commits.older=Più vecchio
-commits.newer=Più recente
-
-issues.new=Nuovo Problema
-issues.new.labels=Etichette
-issues.new.no_label=Nessuna etichetta
-issues.new.clear_labels=Pulisci le etichette
-issues.new.milestone=Traguardo
-issues.new.no_milestone=No Milestone
-issues.new.clear_milestone=Clear milestone
-issues.new.open_milestone=Open Milestones
-issues.new.closed_milestone=Closed Milestones
-issues.new.assignee=Assegnatario
-issues.new.clear_assignee=Clear assignee
-issues.new.no_assignee=No assignee
-issues.create=Create Issue
-issues.new_label=Nuova etichetta
-issues.new_label_placeholder=Nome dell'etichetta...
-issues.create_label=Create Label
-issues.open_tab=%d Aperti
-issues.close_tab=%d Chiusi
-issues.filter_label=Etichetta
-issues.filter_label_no_select=Nessuna etichetta selezionata
-issues.filter_milestone=Traguardo
-issues.filter_milestone_no_select=No selected milestone
-issues.filter_assignee=Assegnatario
-issues.filter_assginee_no_select=No selected Assignee
-issues.filter_type=Tipo
-issues.filter_type.all_issues=Tutti i problemi
-issues.filter_type.assigned_to_you=Assegnati a te
-issues.filter_type.created_by_you=Creati da te
-issues.filter_type.mentioning_you=Che ti riguardano
-issues.filter_sort=Sort
-issues.filter_sort.latest=Newest
-issues.filter_sort.oldest=Oldest
-issues.filter_sort.recentupdate=Recently updated
-issues.filter_sort.leastupdate=Least recently updated
-issues.filter_sort.mostcomment=Most commented
-issues.filter_sort.leastcomment=Least commented
-issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=opened %[1]s by %[2]s
-issues.previous=Pagina precedente
-issues.next=Pagina successiva
-issues.open_title=Open
-issues.closed_title=Closed
-issues.num_comments=%d comments
-issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=There is no content yet.
-issues.close_issue=Close
-issues.close_comment_issue=Close and comment
-issues.reopen_issue=Reopen
-issues.reopen_comment_issue=Reopen and comment
-issues.create_comment=Commento
-issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Poster
-issues.admin=Amministratore
-issues.owner=Proprietario
-issues.sign_up_for_free=Sign up for free
-issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
-issues.edit=Edit
-issues.cancel=Cancel
-issues.save=Save
-issues.label_title=Nome etichetta
-issues.label_color=Colore etichetta
-issues.label_count=%d etichette
-issues.label_open_issues=%d problemi aperti
-issues.label_edit=Modifica
-issues.label_delete=Elimina
-issues.label_modify=Modifica Etichetta
-issues.label_deletion=Elimina Etichetta
-issues.label_deletion_desc=Eliminare l'etichetta rimuovera le sue informazioni in tutti i problemi correlati. Vuoi continuare?
-issues.label_deletion_success=Etichetta eliminata con successo!
-
-pulls.compare_changes=Compare Changes
-pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
-pulls.compare_base=base
-pulls.compare_compare=compare
-pulls.filter_branch=Filter branch
-pulls.no_results=No results found.
-pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
-pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Crea Pull Request
-pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
-pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversation
-pulls.tab_commits=Commits
-pulls.tab_files=Files changed
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Unisci Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=New Milestone
-milestones.open_tab=%d Open
-milestones.close_tab=%d Closed
-milestones.closed=Closed %s
-milestones.no_due_date=No due date
-milestones.open=Open
-milestones.close=Close
-milestones.new_subheader=Create milestones to organize your issues.
-milestones.create=Create Milestone
-milestones.title=Title
-milestones.desc=Description
-milestones.due_date=Due Date (optional)
-milestones.clear=Clear
-milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
-milestones.create_success=Milestone '%s' has been created successfully!
-milestones.edit=Edit Milestone
-milestones.edit_subheader=Use better description for milestones so people won't be confused.
-milestones.cancel=Cancel
-milestones.modify=Modify Milestone
-milestones.edit_success=Changes of milestone '%s' has been saved successfully!
-milestones.deletion=Milestone Deletion
-milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
-milestones.deletion_success=Milestone has been deleted successfully!
-
-settings=Impostazioni
-settings.options=Opzioni
-settings.collaboration=Collaborazione
-settings.hooks=Webhooks
-settings.githooks=Git Hooks
-settings.basic_settings=Impostazioni di Base
-settings.danger_zone=Zona Pericolosa
-settings.site=Sito Ufficiale
-settings.update_settings=Aggiorna Impostazioni
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
-settings.transfer=Trasferisci proprietà
-settings.transfer_desc=Trasferisci questa repository a un altro utente o a un'organizzazione nella quale hai diritti d'amministratore.
-settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome.
-settings.delete=Elimina questo repository
-settings.delete_desc=Una volta che hai cancellato il repository, non puoi tornare indietro. Si prega di fare attenzione.
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=Le opzioni repository sono state aggiornate con successo.
-settings.transfer_owner=Nuovo Proprietario
-settings.make_transfer=Trasferisci
-settings.transfer_succeed=Proprietà del repository trasferita con successo.
-settings.confirm_delete=Conferma eliminazione
-settings.add_collaborator=Aggiungi nuovo collaboratore
-settings.add_collaborator_success=Il nuovo collaboratore è stato aggiunto.
-settings.remove_collaborator_success=Il collaboratore è stato rimosso.
-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 Gogs, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target="_blank" href="%s">Guida ai Webhooks</a>.
-settings.webhook_deletion=Delete Webhook
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Request
-settings.webhook.response=Response
-settings.webhook.headers=Headers
-settings.webhook.payload=Payload
-settings.webhook.body=Body
-settings.githooks_desc=Gli Hooks di Git sono una funzionalità di Git stesso, puoi modificare i file degli hooks supportati nell'elenco qui sotto per compiere azioni personalizzate.
-settings.githook_edit_desc=Se l'hook è inattivo, sarà presentato un contenuto esempio. Lasciando il contenuto vuoto disattiverai questo hook.
-settings.githook_name=Nome hook
-settings.githook_content=Contenuto hook
-settings.update_githook=Aggiorna Hook
-settings.add_webhook_desc=Gogs 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" href="%s">Guida ai Webhook</a>.
-settings.payload_url=Payload URL
-settings.content_type=Content Type
-settings.secret=Secret
-settings.slack_username=Username
-settings.slack_icon_url=Icon URL
-settings.slack_color=Color
-settings.event_desc=Quali eventi dovrebbero innescare questo webhook?
-settings.event_push_only=Solo l'evento <code>push</code>.
-settings.event_send_everything=I need <strong>everything</strong>.
-settings.event_choose=Let me choose what I need.
-settings.event_create=Create
-settings.event_create_desc=Branch, or tag created
-settings.event_push=Push
-settings.event_push_desc=Git push to a repository
-settings.active=Attivo
-settings.active_helper=Anche i dettagli riguardanti l'evento che ha innescato l'hook saranno inviati.
-settings.add_hook_success=Il nuovo webhook è stato aggiunto.
-settings.update_webhook=Aggiorna Webhook
-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.slack_token=Token
-settings.slack_domain=Dominio
-settings.slack_channel=Canale
-settings.deploy_keys=Dispiega Chiavi
-settings.add_deploy_key=Add Deploy Key
-settings.no_deploy_keys=You haven't added any deploy key.
-settings.title=Title
-settings.deploy_key_content=Content
-settings.key_been_used=Deploy key content has been used.
-settings.key_name_used=Deploy key with same name has already existed.
-settings.add_key_success=New deploy key '%s' has been added successfully!
-settings.deploy_key_deletion=Delete Deploy Key
-settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
-settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
-
-diff.browse_source=Sfoglia il codice sorgente
-diff.parent=parent
-diff.commit=commit
-diff.data_not_available=Diff Data non disponibile.
-diff.show_diff_stats=Mostra Diff Stats
-diff.stats_desc=<strong>%d ha cambiato i file</strong> con <strong>%d aggiunte</strong> e <strong>%d eliminazioni</strong>
-diff.bin=BIN
-diff.view_file=Vedi File
-
-release.releases=Rilasci
-release.new_release=Nuovo Rilascio
-release.draft=Bozza
-release.prerelease=Pre-Rilascio
-release.stable=Stabile
-release.edit=modifica
-release.ahead=<strong>%d</strong> commits da %s da questo rilascio
-release.source_code=Codice Sorgente
-release.tag_name=Nome tag
-release.target=Obbiettivo
-release.tag_helper=Scegli un tag esistente o crea un nuovo tag una volta pubblicato.
-release.release_title=Nome release
-release.content_with_md=Contenuto in <a href="%s">Markdown</a>
-release.write=Scrivi
-release.preview=Anteprima
-release.content_placeholder=Scrivi qualcosa
-release.loading=Caricamento...
-release.prerelease_desc=Questo è un pre-rilascio
-release.prerelease_helper=Precisiamo che questo rilascio non è pronta per la produzione.
-release.publish=Pubblica Rilascio
-release.save_draft=Salva Bozza
-release.edit_release=Modifica Rilascio
-release.tag_name_already_exist=Un rilascio con questo tag esiste già.
-
-[org]
-org_name_holder=Nome dell'Organizzazione
-org_name_helper=Le migliori organizzazioni hanno nomi brevi e memorabili.
-create_org=Crea Organizzazione
-repo_updated=Aggiornato
-people=Utenti
-invite_someone=Invita Qualcuno
-teams=Team
-lower_members=membri
-lower_repositories=repository
-create_new_team=Crea Nuovo Team
-org_desc=Descrizione
-team_name=Nome Team
-team_desc=Descrizione
-team_name_helper=Verrà usato questo nome per riferirsi a questo team nella conversazioni.
-team_desc_helper=In cosa consiste questo team?
-team_permission_desc=Quale livello di autorizzazione dovrebbe avere questa squadra?
-
-form.name_reserved=Il nome organizzazione '%s' è riservato.
-form.name_pattern_not_allowed=La struttura del nome dell'organizzazione '%s' non è consentita.
-
-settings=Impostazioni
-settings.options=Opzioni
-settings.full_name=Nome Completo
-settings.website=Sito Web
-settings.location=Residenza
-settings.update_settings=Aggiorna Impostazioni
-settings.update_setting_success=Impostazioni dell'organizzazione aggiornate con successo.
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=Elimina organizzazione
-settings.delete_account=Elimina questa organizzazione
-settings.delete_prompt=L'organizzazione verrà rimossa definitivamente, e questa operazione <strong>NON PUÒ</strong> essere annullata!
-settings.confirm_delete_account=Conferma Eliminazione
-settings.delete_org_title=Eliminazione Organizzazione
-settings.delete_org_desc=Questa organizzazione sta per essere eliminato in modo permanente, vuoi continuare?
-settings.hooks_desc=Aggiungi i webhooks che verranno attivati per <strong>tutti i repository</strong> sotto questa organizzazione.
-
-members.public=Pubblico
-members.public_helper=rendi privato
-members.private=Privato
-members.private_helper=rendi pubblico
-members.owner=Proprietario
-members.member=Membro
-members.conceal=Nascondere
-members.remove=Rimuovere
-members.leave=Abbandona
-members.invite_desc=Digita un nome utente per invitare un nuovo membro a %s:
-members.invite_now=Invita ora
-
-teams.join=Iscriviti
-teams.leave=Abbandona
-teams.read_access=Accesso di Lettura
-teams.read_access_helper=Questo team sarà in grado di visualizzare e clonare i suoi repository.
-teams.write_access=Accesso di Scrittura
-teams.write_access_helper=Questo team sarà in grado di leggere i suoi repository, come pure pusharli.
-teams.admin_access=Accesso Amministratore
-teams.admin_access_helper=Questo team sarà in grado di pushare/pullare i propri repo, così come aggiungere altri collaboratori.
-teams.no_desc=Questo team non ha alcuna descrizione
-teams.settings=Impostazioni
-teams.owners_permission_desc=I Proprietari hanno pieno accesso a <strong>tutti i repository</strong> e hanno <strong>diritti di amministatore</strong> nell'organizzazione.
-teams.members=Membri del Team
-teams.update_settings=Aggiorna Impostazioni
-teams.delete_team=Elimina questo Team
-teams.add_team_member=Aggiungere un Membro al Team
-teams.delete_team_title=Eliminazione Team
-teams.delete_team_desc=Quando questo team verrà eliminato, i membri di questa squadra potrebbero perdere l'accesso ad alcuni repository. Si desidera continuare?
-teams.delete_team_success=Team eliminato con successo.
-teams.read_permission_desc=Questo Team concede accesso di <strong>Lettura</strong>: i membri possono visualizzare e clonare i repository del Team.
-teams.write_permission_desc=Questo Team concede accesso di <strong>Scrittura</strong>: i membri possono leggere e pushare i repository del Team.
-teams.admin_permission_desc=Questo Team concede accesso di <strong>Amministratore</strong>: i membri possono leggere i, pushare a, e aggiungere collaboratori ai repository del Team.
-teams.repositories=Repository di Squadra
-teams.add_team_repository=Aggiungere Repository di Squadra
-teams.remove_repo=Rimuovi
-teams.add_nonexistent_repo=Il repository che stai tentando di aggiungere non esiste, crealo prima.
-
-[admin]
-dashboard=Pannello di Controllo
-users=Utenti
-organizations=Organizzazioni
-repositories=Repository
-authentication=Autenticazioni
-config=Configurazione
-notices=Avvisi di sistema
-monitor=Monitoraggio
-first_page=First
-last_page=Last
-total=Total: %d
-
-dashboard.statistic=Statistiche
-dashboard.operations=Operazioni
-dashboard.system_status=Stato del Monitor di Sistema
-dashboard.statistic_info=Il database di Gogs ha <b>%d</b> utenti, <b>%d</b> organizzazioni, <b>%d</b> chiavi pubbliche, <b>%d</b> repository, <b>%d</b> utenti che seguono, <b>%d</b> voti, <b>%d</b> azioni, <b>%d</b> accessi, <b>%d</b> problemi, <b>%d</b> commenti, <b>%d</b> account sociali, <b>%d</b> utenti seguiti, <b>%d</b> mirror, <b>%d</b> rilasci, <b>%d</b> fonti di accesso, <b>%d</b> webhook, <b>%d</b> traguardi, <b>%d</b> etichette, <b>%d</b> incarichi hook, <b>%d</b> team, <b>%d</b> attività di aggiornamento, <b>%d</b> allegati.
-dashboard.operation_name=Nome Operazione
-dashboard.operation_switch=Cambia
-dashboard.operation_run=Esegui
-dashboard.clean_unbind_oauth=Pulire OAuthes non associati
-dashboard.clean_unbind_oauth_success=Tutti gli OAuthes non associati eliminati con successo.
-dashboard.delete_inactivate_accounts=Elimina tutti gli account inattivi
-dashboard.delete_inactivate_accounts_success=Tutti gli account inattivi eliminati con successo.
-dashboard.delete_repo_archives=Elimina tutti gli archivi dei repository
-dashboard.delete_repo_archives_success=Tutti gli archivi del repository sono stati eliminati con successo.
-dashboard.git_gc_repos=Fare la procedura di garbage collection sui repository
-dashboard.git_gc_repos_success=Tutti i repository hanno fatto la procedura di garbage collection con successo.
-dashboard.resync_all_sshkeys=Riscrivi il file '.ssh/authorized_keys' (attenzione: le chiavi non appartenenti a Gogs saranno perse)
-dashboard.resync_all_sshkeys_success=Tutte le chiavi pubbliche riscritte con successo.
-dashboard.resync_all_update_hooks=Riscrivere tutti gli update hook dei repository (necessario quando il percorso di configurazione personalizzata viene modificato)
-dashboard.resync_all_update_hooks_success=Tutti gli update hook dei repository riscritti con successo.
-
-dashboard.server_uptime=Tempo in Attività del Server
-dashboard.current_goroutine=Goroutine Correnti
-dashboard.current_memory_usage=Utilizzo di Memoria Corrente
-dashboard.total_memory_allocated=Memoria Allocata Totale
-dashboard.memory_obtained=Memoria Ottenuta
-dashboard.pointer_lookup_times=Ricerche del Puntatore
-dashboard.memory_allocate_times=Allocazioni Memoria
-dashboard.memory_free_times=Svuotamenti di Memoria
-dashboard.current_heap_usage=Utilizzo Heap Corrente
-dashboard.heap_memory_obtained=Memoria Heap Ottenuta
-dashboard.heap_memory_idle=Memoria Heap Inattiva
-dashboard.heap_memory_in_use=Memoria Heap In Uso
-dashboard.heap_memory_released=Memoria Heap Rilasciata
-dashboard.heap_objects=Oggetti dell'Heap
-dashboard.bootstrap_stack_usage=Utilizzo Pila di Bootstrap
-dashboard.stack_memory_obtained=Memoria Stack Ottenuta
-dashboard.mspan_structures_usage=Utilizzo Strutture MSpan
-dashboard.mspan_structures_obtained=Strutture MSpan Ottenute
-dashboard.mcache_structures_usage=Utilizzo di Strutture MCache
-dashboard.mcache_structures_obtained=Strutture MCache Ottenute
-dashboard.profiling_bucket_hash_table_obtained=Tabella di Hash del Bucket Ottenuta
-dashboard.gc_metadata_obtained=Metadata della GC ottenuta
-dashboard.other_system_allocation_obtained=Altre Allocazioni di Sistema Ottenute
-dashboard.next_gc_recycle=Prossimo Riciclaggio GC
-dashboard.last_gc_time=Dall'Ultimo GC
-dashboard.total_gc_time=Pausa Totale della GC
-dashboard.total_gc_pause=Pausa Totale della GC
-dashboard.last_gc_pause=Ultima pausa della GC
-dashboard.gc_times=Esecuzioni GC
-
-users.user_manage_panel=Pannello Gestione Utenti
-users.new_account=Crea Nuovo Account
-users.name=Nome
-users.activated=Attivato
-users.admin=Amministratore
-users.repos=Repo
-users.created=Creato
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=Modifica
-users.auth_source=Authentication Source
-users.local=Locale
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=Profilo dell'account aggiornato con successo.
-users.edit_account=Modifica Account
-users.is_activated=Questo account è attivato
-users.is_admin=Questo account ha permessi di amministratore
-users.allow_git_hook=Questo account ha il permesso di creare hooks di Git
-users.update_profile=Aggiornare Profilo Account
-users.delete_account=Elimina Questo Account
-users.still_own_repo=Questo account possiede ancora almeno un repository, devi prima cancellarli o trasferirli.
-users.still_has_org=Questo account appartiene ancora ad almeno un'organizzazione, è necessario prima abbandonarle o eliminale.
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=Pannello Gestione Organizzazioni
-orgs.name=Nome
-orgs.teams=Team
-orgs.members=Membri
-
-repos.repo_manage_panel=Pannello Organizzazione Repository
-repos.owner=Proprietario
-repos.name=Nome
-repos.private=Privati
-repos.watches=Segue
-repos.stars=Voti
-repos.issues=Problemi
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Add New Source
-auths.name=Nome
-auths.type=Tipo
-auths.enabled=Attivo
-auths.updated=Aggiornato
-auths.auth_type=Authentication Type
-auths.auth_name=Authentication Name
-auths.domain=Dominio
-auths.host=Host
-auths.port=Porta
-auths.bind_dn=Bind DN
-auths.bind_password=Bind Password
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=Attributo Nome
-auths.attribute_surname=Attributo Cognome
-auths.attribute_mail=Attributo Email
-auths.filter=User Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=Host SMTP
-auths.smtpport=Porta SMTP
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=Abilitare Crittografia TLS
-auths.skip_tls_verify=Skip TLS Verify
-auths.pam_service_name=Nome del Servizio PAM
-auths.enable_auto_register=Abilitare Registrazione Automatica
-auths.tips=Consigli
-auths.edit=Edit Authentication Setting
-auths.activated=Questa Autenticazione è stata attivata
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Authentication setting has been updated successfully.
-auths.update=Update Authentication Setting
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=Configurazione Server
-config.app_name=Nome Applicazione
-config.app_ver=Versione Applicazione
-config.app_url=URL Applicazione
-config.domain=Dominio
-config.offline_mode=Modalità Offline
-config.disable_router_log=Disattivare Log del Router
-config.run_user=Utente Esecutore
-config.run_mode=Modalità Esecuzione
-config.repo_root_path=Percorso Root del Repository
-config.static_file_root_path=Percorso Root del File Statico
-config.log_file_root_path=Percorso Root del File di Log
-config.script_type=Tipo di Script
-config.reverse_auth_user=Autenticazione Utente Inversa
-config.db_config=Configurazione Database
-config.db_type=Tipo
-config.db_host=Host
-config.db_name=Nome
-config.db_user=Utente
-config.db_ssl_mode=Modalità SSL
-config.db_ssl_mode_helper=(solo per "postgres")
-config.db_path=Percorso
-config.db_path_helper=(for "sqlite3" and "tidb")
-config.service_config=Configurazione Servizio
-config.register_email_confirm=Richiedono Conferma dell'Email
-config.disable_register=Disabilita Registrazione
-config.show_registration_button=Mostra Pulsane Registrazione
-config.require_sign_in_view=Richiesto Accesso per Vedere
-config.enable_cache_avatar=Abilitare Cache dell'Avatar
-config.mail_notify=Email di Notifica
-config.disable_key_size_check=Disable Minimum Key Size Check
-config.enable_captcha=Enable Captcha
-config.active_code_lives=Attiva Vita del Codice
-config.reset_password_code_lives=Reimpostare Password della Vita del Codice
-config.webhook_config=Configurazione Webhook
-config.queue_length=Queue Length
-config.deliver_timeout=Tempo Limite di Consegna
-config.skip_tls_verify=Salta verifiche TLS
-config.mailer_config=Configurazione Mailer
-config.mailer_enabled=Attivo
-config.mailer_disable_helo=Disattiva HELO
-config.mailer_name=Nome
-config.mailer_host=Host
-config.mailer_user=Utente
-config.oauth_config=Configurazione OAuth
-config.oauth_enabled=Attivo
-config.cache_config=Configurazione Cache
-config.cache_adapter=Adattatore Cache
-config.cache_interval=Intervallo Cache
-config.cache_conn=Connessione Cache
-config.session_config=Configurazione Sessione
-config.session_provider=Fornitore Sessione
-config.provider_config=Impostazioni Provider
-config.cookie_name=Nome del Cookie
-config.enable_set_cookie=Abilita Uso dei Cookie
-config.gc_interval_time=Intervallo di tempo della GC
-config.session_life_time=Durata Sessione
-config.https_only=Solo HTTPS
-config.cookie_life_time=Durata Cookie
-config.picture_config=Configurazione Foto
-config.picture_service=Servizio foto
-config.disable_gravatar=Disabilita Gravatar
-config.log_config=Configurazione Log
-config.log_mode=Modalità Log
-
-monitor.cron=Incarici di cron
-monitor.name=Nome
-monitor.schedule=Agenda
-monitor.next=La Prossima Volta
-monitor.previous=La Scorsa Volta
-monitor.execute_times=Numero di Esecuzioni
-monitor.process=Processi in Esecuzione
-monitor.desc=Descrizione
-monitor.start=Orario Avvio
-monitor.execute_time=Tempo di Esecuzione
-
-notices.system_notice_list=Avvisi di Sistema
-notices.type=Tipo
-notices.type_1=Repository
-notices.desc=Descrizione
-notices.op=Op.
-notices.delete_success=Avviso di sistema cancellato con successo.
-
-[action]
-create_repo=ha creato il repository <a href="%s">%s</a>
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=ha pushato nel <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]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>`
-merge_pull_request=`merged pull request <a href="%s/pulls/%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_2_commits=Vedi confronto per questi 2 commit
-
-[tool]
-ago=fa
-from_now=da adesso
-now=ora
-1s=1 secondo %s
-1m=1 minuto %s
-1h=1 ora %s
-1d=1 giorno %s
-1w=1 settimana %s
-1mon=1 mese %s
-1y=1 anno %s
-seconds=%d secondi %s
-minutes=%d minuti %s
-hours=%d ore %s
-days=%d giorni %s
-weeks=%d settimane %s
-months=%d mesi %s
-years=%d anni %s
-raw_seconds=secondi
-raw_minutes=minuti
-
-[dropzone]
-default_message=Drop files here or click to upload.
-invalid_input_type=You can't upload files of this type.
-file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
-remove_file=Remove file
-
+app_desc=Un servizio Git auto-ospitato pronto all'uso
+
+home=Home
+dashboard=Pannello di controllo
+explore=Esplora
+help=Aiuto
+sign_in=Accedi
+sign_out=Esci
+sign_up=Registrati
+register=Registrati
+website=Sito Web
+version=Versione
+page=Pagina
+template=Template
+language=Lingua
+create_new=Crea...
+user_profile_and_more=Profilo utente e altro
+signed_in_as=Signed in as
+
+username=Nome utente
+email=E-mail
+password=Password
+re_type=Conferma
+captcha=Captcha
+
+repository=Repository
+organization=Organizzazione
+mirror=Mirror
+new_repo=Nuovo Repository
+new_migrate=Nuova Migrazione
+new_fork=Nuovo Fork Repository
+new_org=Nuova organizzazione
+manage_org=Gestisci le organizzazioni
+admin_panel=Pannello di amministrazione
+account_settings=Impostazioni dell'account
+settings=Impostazioni
+your_profile=Profilo
+your_settings=Impostazioni
+
+news_feed=Notizie
+pull_requests=Pull Requests
+issues=Problemi
+
+cancel=Annulla
+
+[search]
+search=Ricerca...
+repository=Repository
+user=Utente
+issue=Problema
+code=Codice
+
+[install]
+install=Installazione
+title=Passi d'installazione per il primo avvio
+docker_helper=Se stai utilizzando Gogs su Docker, per favore leggi le <a target="_blank" href="%s">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!
+requite_db_desc=Gogs necessita MySQL, PostgreSQL, SQLite3 o TiDB.
+db_title=Impostazioni Database
+db_type=Tipo di database
+host=Host
+user=Utente
+password=Password
+db_name=Nome del database
+db_helper=Utilizza il motore INNODB con codifica utf8_general_ci per MySQL.
+ssl_mode=Modalità SSL
+path=Percorso
+sqlite_helper=The file path of SQLite3 or TiDB database.
+err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
+err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
+no_admin_and_disable_registration=Non puoi disabilitare la registrazione senza aver creato un amministratore.
+err_empty_admin_password=La password dell'amministratore non puo' essere vuota.
+
+general_title=Impostazioni di Base dell'Applicazione
+app_name=Nome Applicazione
+app_name_helper=Scrivi qui il nome della tua organizzazione forte e chiaro!
+repo_path=Percorso Root del Repository
+repo_path_helper=Tutti i repository Git remoti saranno salvati in questa directory.
+run_user=Esegui con l'utente
+run_user_helper=L'utente deve avere accesso al percorso root del repository e avviare Gogs.
+domain=Dominio
+domain_helper=Questo modifica lo SSH clone URLs.
+ssh_port=Porta SSH
+ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
+http_port=Porta HTTP
+http_port_helper=Porta di ascolto dell'applicazione.
+app_url=URL Applicazione
+app_url_helper=Questo influisce sugli URL per il clonaggio via HTTP/HTTPS e da qualche parte nella posta elettronica.
+
+optional_title=Impostazioni Facoltative
+email_title=Impostazioni E-mail
+smtp_host=Host SMTP
+smtp_from=Da
+smtp_from_helper=Mail da indirizzo, RFC 5322. Può essere solo un indirizzo email o il formato "Nome" <email@esempio.com>.
+mailer_user=E-mail del Mittente
+mailer_password=Password del Mittente
+register_confirm=Abilita Conferma di Registrazione
+mail_notify=Abilita Notifiche via Email
+server_service_title=Impostazioni del Server e Altri Servizi
+offline_mode=Abilita Modalità Offline
+offline_mode_popup=Disabilita il CDN anche in modalità produttiva, tutte le risorse saranno servite localmente.
+disable_gravatar=Disable Gravatar Service
+disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
+disable_registration=Disabilita Registrazione Manuale
+disable_registration_popup=Disabilita la registrazione manuale degli utenti, solo gli amministratori possono creare account.
+enable_captcha=Abilita Captcha
+enable_captcha_popup=Require validate captcha for user self-registration.
+require_sign_in_view=Abilita Richiesta di Accesso per Vedere le Pagine
+require_sign_in_view_popup=Solo gli utenti loggati possono vedere le pagine, i visitatori potranno vedere solo le pagine di accesso e registrazione.
+admin_setting_desc=Non devi per forza creare un account admin proprio adesso, ma comunque l'utente ID=1 otterrà l'accesso da amministratore automaticamente.
+admin_title=Impostazioni Account Amministratore
+admin_name=Nome utente
+admin_password=Password
+confirm_password=Conferma Password
+admin_email=Admin E-mail
+install_gogs=Installare Gogs
+test_git_failed=Fallito il test del comando git: %v
+sqlite3_not_available=Questa versione non supporta SQLite3, si prega di scaricare la versione binaria ufficiale da %s, NON la versione gobuild.
+invalid_db_setting=La configurazione del database non è corretta: %v
+invalid_repo_path=Percorso root del repository invalido: %v
+run_user_not_match=Run user non è l'utente corrente:  %s -> %s
+save_config_failed=Fallito il salvataggio della configurazione: %v
+invalid_admin_setting=Impostazioni account Admin non valide: %v
+install_success=Benvenuto! Siamo felici che tu abbia scelto Gogs, buon divertimento.
+
+[home]
+uname_holder=Nome Utente o E-mail
+password_holder=Password
+switch_dashboard_context=Cambia Dashboard Context
+my_repos=I miei Repository
+collaborative_repos=Repository Condivisi
+my_orgs=Le mie Organizzazioni
+my_mirrors=I miei Mirror
+view_home=Vedi %s
+
+issues.in_your_repos=Nei tuoi repository
+
+[explore]
+repos=Repository
+
+[auth]
+create_new_account=Crea un nuovo Account
+register_hepler_msg=Hai già un account? Accedi ora!
+social_register_hepler_msg=Hai già un account? Associalo ora!
+disable_register_prompt=Siamo spiacenti, registrazione è stata disabilitata. Si prega di contattare l'amministratore del sito.
+disable_register_mail=Siamo spiacenti, la conferma di registrazione via Mail è stata disattivata.
+remember_me=Ricordami
+forgot_password=Password dimenticata
+forget_password=Password dimenticata?
+sign_up_now=Bisogno di un account? Iscriviti ora.
+confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a <b>%s</b>, verifica la tua casella di posta entro le prossime %d ore per completare la registrazione.
+active_your_account=Attiva il tuo Account
+resent_limit_prompt=Siamo spiacenti, si stanno inviando e-mail di attivazione troppo spesso. Si prega di attendere 3 minuti.
+has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (<b>%s</b>). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto.
+resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione
+email_not_associate=Questo indirizzo e-mail non è associato ad alcun account.
+send_reset_mail=Clicca qui per (ri)inviare la tua e-mail di reimpostazione password
+reset_password=Reimposta la tua Password
+invalid_code=Siamo spiacenti, il codice di conferma è scaduto o non valido.
+reset_password_helper=Clicca qui per reimpostare la password
+password_too_short=La lunghezza della password non può essere meno 6 caratteri.
+
+[mail]
+activate_account=Per favore attiva il tuo account
+activate_email=Verifica il tuo indirizzo e-mail
+reset_password=Reimposta la tua password
+register_success=Registrazione completata con successo, Benvenuto
+register_notify=Welcome on board
+
+[modal]
+yes=Sì
+no=No
+modify=Modifica
+
+[form]
+UserName=Nome utente
+RepoName=Nome Repository
+Email=Indirizzo E-mail
+Password=Password
+Retype=Reinserisci password
+SSHTitle=Nome chiave SSH
+HttpsUrl=URL HTTPS
+PayloadUrl=URL Payload
+TeamName=Nome Team
+AuthName=Nome autorizzazione
+AdminEmail=Email dell'Admin
+
+require_error=` non può essere vuoto.`
+alpha_dash_error=` ammessi solo caratteri alfanumerici o trattini(-_).`
+alpha_dash_dot_error=` ammessi solo caratteri alfanumerici o trattini(-_) o punti.`
+size_error='deve essere %s.'
+min_size_error=` deve contenere almeno %s caratteri.`
+max_size_error=` deve contenere massimo %s caratteri.`
+email_error=` non è un indirizzo e-mail valido.`
+url_error=` non è un URL valido.`
+include_error=` deve contenere la stringa '%s'.`
+unknown_error=Errore sconosciuto:
+captcha_incorrect=Il Captcha non corrisponde.
+password_not_match=Le due password non corrispondono.
+
+username_been_taken=Il nome utente è già utilizzato.
+repo_name_been_taken=Il nome del Repository è già utilizzato.
+org_name_been_taken=Il nome dell'Organizzazione è già utlizzato.
+team_name_been_taken=Il nome del Team è già utilizzato.
+email_been_used=L'indirizzo E-mail è già utilizzato.
+illegal_team_name=Il nome del Team contiene caratteri non validi.
+username_password_incorrect=Nome utente o password incorretti.
+enterred_invalid_repo_name=Si prega di assicurarsi che il nome del repository inserito sia corretto.
+enterred_invalid_owner_name=Si prega di assicurarsi che il nome del proprietario inserito sia corretto.
+enterred_invalid_password=Verificare che la  password inserita sia corretta.
+user_not_exist=L'utente inserito non esiste.
+last_org_owner=L'utente che si vuole rimuovere è l'ultimo membro admin del team. Ci deve essere un altro proprietario.
+
+invalid_ssh_key=Siamo spiacenti, non siamo in grado di verificare la chiave SSH: %s
+unable_verify_ssh_key=Gogs non può verificare la chiave SSH, ma assumiamo che sia valida, si prega di verificare voi stessi.
+auth_failed=Autenticazione non riuscita: %v
+
+still_own_repo=Il tuo account possiede ancora almeno un repository, dovete prima cancellarli o trasferirne la proprietà.
+still_has_org=Il tuo account è ancora associato ad almeno un'organizzazione, disassociarsi prima.
+org_still_own_repo=Questa organizzazione ha ancora la proprietà del repository, dovete cancellarla o trasferirli prima.
+
+still_own_user=Questa autenticazione è ancora in uso da almeno un utente, per favore rimuovili dall'autenticazione e riprova.
+
+target_branch_not_exist=Il ramo (branch) di destinazione non esiste.
+
+[user]
+change_avatar=Cambia il tuo avatar su gravatar.com
+change_custom_avatar=Cambia il tuo avatar nelle impostazioni
+join_on=Si è unito il
+repositories=Repository
+activity=Attività pubblica
+followers=Seguaci
+starred=Votate
+following=Seguiti
+
+form.name_reserved=L'username '%s' è riservato.
+form.name_pattern_not_allowed=La struttura del nome utente '%s' non è consentita.
+
+[settings]
+profile=Profilo
+password=Password
+ssh_keys=Chiavi SSH
+social=Account Sociali
+applications=Applicazioni
+orgs=Organizzazioni
+delete=Elimina account
+uid=Uid
+
+public_profile=Profilo pubblico
+profile_desc=Il tuo indirizzo e-mail è pubblico e sarà usato per ogni notifica inerente al tuo account, e per qualsiasi operazione web effettuata attraverso il sito.
+full_name=Nome Completo
+website=Sito web
+location=Posizione
+update_profile=Aggiorna Profilo
+update_profile_success=Il tuo profilo è stato aggiornato con successo.
+change_username=Username Cambiato
+change_username_prompt=This change will affect the way how links relate to your account.
+continue=Continua
+cancel=Annulla
+
+enable_custom_avatar=Abilita avatar personalizzato
+enable_custom_avatar_helper=Seleziona per disabilitare il fetch da Gravatar
+choose_new_avatar=Scegli un nuovo avatar
+update_avatar=Aggiorna le impostazioni avatar
+uploaded_avatar_not_a_image=Il file caricato non è un'immagine.
+no_custom_avatar_available=Nessun avatar personalizzato disponibile, impossibile abilitarlo.
+update_avatar_success=Le tue impostazioni avatar sono state aggiornate con successo.
+
+change_password=Cambia Password
+old_password=Password attuale
+new_password=Nuova Password
+retype_new_password=Re-inserisci la password
+password_incorrect=La Password attuale non è corretta.
+change_password_success=La tua password è stata cambiata con successo. Ora puoi accedere usando la nuova password.
+
+emails=Indirizzi e-mail
+manage_emails=Gestisci indirizzi email
+email_desc=Il tuo indirizzo e-mail primario sarà usato per le notifiche e altre operazioni.
+primary=Primario
+primary_email=Imposta come primario
+delete_email=Elimina
+email_deletion=E-mail Deletion
+email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
+email_deletion_success=E-mail has been deleted successfully!
+add_new_email=Aggiungi un nuovo indirizzo E-mail
+add_email=Aggiungi E-mail
+add_email_confirmation_sent=Una nuova email di conferma è stata inviata a '%s', per favore controlla la tua posta in arrivo nelle prossime %d ore per completare il processo di registrazione.
+add_email_success=Il tuo nuovo indirizzo e-mail è stato aggiunto con successo.
+
+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.
+add_new_key=Aggiungi Chiave SSH
+ssh_key_been_used=Public key content has been used.
+ssh_key_name_used=Public key with same name has already existed.
+key_name=Nome della Chiave
+key_content=Contenuto
+add_key_success=New SSH key '%s' has been added successfully!
+delete_key=Elimina
+ssh_key_deletion=SSH Key Deletion
+ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
+ssh_key_deletion_success=La chiave SSH e' stata cancellata con successo!
+add_on=Aggiunto il
+last_used=Ultimo accesso il
+no_activity=Nessuna attività recente
+key_state_desc=Hai utilizzato questa chiave negli ultimi 7 giorni
+token_state_desc=Questo token e' satato utilizzato negli ultimi 7 giorni
+
+manage_social=Gestisci gli Account Sociali Associati
+social_desc=Questa è un elenco degli account sociali associati. Rimuovere qualsiasi account che non si riconosce.
+unbind=Disassocia
+unbind_success=Account sociale disassociato.
+
+manage_access_token=Gestisci i Token di Accesso Personale
+generate_new_token=Genera Nuovo Token
+tokens_desc=Tokens you have generated that can be used to access the Gogs APIs.
+new_token_desc=Da questo momento, ogni token avrà pieno accesso al tuo account.
+token_name=Nome Token
+generate_token=Genera Token
+generate_token_succees=Nuovo token di accesso generato con successo! Assicurarsi di copiare il nuovo token di accesso personale ora: non sarà possibile visualizzarlo nuovamente!
+delete_token=Elimina
+access_token_deletion=Personal Access Token Deletion
+access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
+delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
+
+delete_account=Elimina Account
+delete_prompt=L'operazione eliminerà permanentemente l'account e <strong>NON POTRÀ</strong> essere annullata!
+confirm_delete_account=Conferma Eliminazione
+delete_account_title=Eliminazione account
+delete_account_desc=Questo account sta per essere eliminato in modo definitivo, vuoi continuare?
+
+[repo]
+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=This repository is <span class="ui red text">Private</span>
+visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
+clone_helper=Hai bisogno di aiuto per la clonazione? Visita <a target="_blank" href="%s">Aiuto</a>!
+fork_repo=Forka Repository
+fork_from=Forka da
+fork_visiblity_helper=Non puoi cambiare la visibilità di un repository forkato.
+repo_desc=Descrizione
+repo_lang=Lingua
+repo_lang_helper=Seleziona file .gitignore
+license=Licenza
+license_helper=Selezionare un file di licenza
+readme=Readme
+readme_helper=Seleziona un template per il readme
+auto_init=Initialize this repository with selected files and template
+create_repo=Crea Repository
+default_branch=Ramo (Branch) predefinito
+mirror_interval=Intervallo Mirror (in ore)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Il nome repository %s è riservato.
+form.name_pattern_not_allowed=La struttura del nome del repository %s non è consentita.
+
+need_auth=Richiesta di autorizzazione
+migrate_type=Tipo di migrazione
+migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
+migrate_repo=Migra Repository
+migrate.clone_address=Duplica Indirizzo
+migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
+migrate.permission_denied=You are not allowed to import local repositories.
+migrate.invalid_local_path=Percorso locale non valido, non esiste o non è una cartella.
+migrate.failed=Migration failed: %v
+
+forked_from=forkato da
+fork_from_self=Non puoi forkare il tuo stesso repository!
+copy_link=Copia
+copy_link_success=Copiato!
+copy_link_error=Press ⌘-C or Ctrl-C to copy
+copied=OK copiato
+unwatch=Non seguire più
+watch=Segui
+unstar=Togli il voto
+star=Vota
+fork=Forka
+
+no_desc=Nessuna descrizione
+quick_guide=Guida rapida
+clone_this_repo=Clona questo repository
+create_new_repo_command=Crea nuovo repository da riga di comando
+push_exist_repo=Push un repo esistente dalla riga di comando
+repo_is_empty=This repository is empty, please come back later!
+
+branch=Ramo (Branch)
+tree=Albero (Tree)
+filter_branch_and_tag=Filter branch or tag
+branches=Rami (Branch)
+tags=Tag
+issues=Problemi
+pulls=Pull Requests
+labels=Etichette
+milestones=Traguardi
+commits=Commit
+releases=Rilasci
+file_raw=Originale
+file_history=Cronologia
+file_view_raw=Vedi originale
+file_permalink=Permalink
+
+commits.commits=Commits
+commits.search=Ricerca una versione
+commits.find=Cerca
+commits.author=Autore
+commits.message=Messaggio
+commits.date=Data
+commits.older=Più vecchio
+commits.newer=Più recente
+
+issues.new=Nuovo Problema
+issues.new.labels=Etichette
+issues.new.no_label=Nessuna etichetta
+issues.new.clear_labels=Pulisci le etichette
+issues.new.milestone=Traguardo
+issues.new.no_milestone=No Milestone
+issues.new.clear_milestone=Clear milestone
+issues.new.open_milestone=Open Milestones
+issues.new.closed_milestone=Closed Milestones
+issues.new.assignee=Assegnatario
+issues.new.clear_assignee=Clear assignee
+issues.new.no_assignee=No assignee
+issues.create=Create Issue
+issues.new_label=Nuova etichetta
+issues.new_label_placeholder=Nome dell'etichetta...
+issues.create_label=Create Label
+issues.open_tab=%d Aperti
+issues.close_tab=%d Chiusi
+issues.filter_label=Etichetta
+issues.filter_label_no_select=Nessuna etichetta selezionata
+issues.filter_milestone=Traguardo
+issues.filter_milestone_no_select=No selected milestone
+issues.filter_assignee=Assegnatario
+issues.filter_assginee_no_select=No selected Assignee
+issues.filter_type=Tipo
+issues.filter_type.all_issues=Tutti i problemi
+issues.filter_type.assigned_to_you=Assegnati a te
+issues.filter_type.created_by_you=Creati da te
+issues.filter_type.mentioning_you=Che ti riguardano
+issues.filter_sort=Ordina
+issues.filter_sort.latest=Newest
+issues.filter_sort.oldest=Oldest
+issues.filter_sort.recentupdate=Recently updated
+issues.filter_sort.leastupdate=Least recently updated
+issues.filter_sort.mostcomment=Most commented
+issues.filter_sort.leastcomment=Least commented
+issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=opened %[1]s by %[2]s
+issues.previous=Pagina precedente
+issues.next=Pagina successiva
+issues.open_title=Open
+issues.closed_title=Closed
+issues.num_comments=%d comments
+issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=There is no content yet.
+issues.close_issue=Chiudi
+issues.close_comment_issue=Comment and close
+issues.reopen_issue=Reopen
+issues.reopen_comment_issue=Comment and reopen
+issues.create_comment=Commento
+issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Poster
+issues.admin=Amministratore
+issues.owner=Proprietario
+issues.sign_up_for_free=Registrati gratuitamente
+issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
+issues.edit=Edit
+issues.cancel=Cancel
+issues.save=Save
+issues.label_title=Nome etichetta
+issues.label_color=Colore etichetta
+issues.label_count=%d etichette
+issues.label_open_issues=%d problemi aperti
+issues.label_edit=Modifica
+issues.label_delete=Elimina
+issues.label_modify=Modifica Etichetta
+issues.label_deletion=Elimina Etichetta
+issues.label_deletion_desc=Eliminare l'etichetta rimuovera le sue informazioni in tutti i problemi correlati. Vuoi continuare?
+issues.label_deletion_success=Etichetta eliminata con successo!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Compare Changes
+pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
+pulls.no_results=No results found.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Crea Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Unisci Pull Request
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=New Milestone
+milestones.open_tab=%d Open
+milestones.close_tab=%d Closed
+milestones.closed=Closed %s
+milestones.no_due_date=No due date
+milestones.open=Open
+milestones.close=Close
+milestones.new_subheader=Create milestones to organize your issues.
+milestones.create=Create Milestone
+milestones.title=Title
+milestones.desc=Description
+milestones.due_date=Due Date (optional)
+milestones.clear=Clear
+milestones.invalid_due_date_format=Due date format is invalid, must be 'yyyy-mm-dd'.
+milestones.create_success=Milestone '%s' has been created successfully!
+milestones.edit=Edit Milestone
+milestones.edit_subheader=Use better description for milestones so people won't be confused.
+milestones.cancel=Cancel
+milestones.modify=Modify Milestone
+milestones.edit_success=Changes of milestone '%s' has been saved successfully!
+milestones.deletion=Milestone Deletion
+milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
+milestones.deletion_success=Milestone has been deleted successfully!
+
+settings=Impostazioni
+settings.options=Opzioni
+settings.collaboration=Collaborazione
+settings.hooks=Webhooks
+settings.githooks=Git Hooks
+settings.basic_settings=Impostazioni di Base
+settings.danger_zone=Zona Pericolosa
+settings.site=Sito Ufficiale
+settings.update_settings=Aggiorna Impostazioni
+settings.change_reponame_prompt=This change will affect how links relate to the repository.
+settings.transfer=Trasferisci proprietà
+settings.transfer_desc=Trasferisci questa repository a un altro utente o a un'organizzazione nella quale hai diritti d'amministratore.
+settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome.
+settings.delete=Elimina questo repository
+settings.delete_desc=Una volta che hai cancellato il repository, non puoi tornare indietro. Si prega di fare attenzione.
+settings.transfer_notices_1=- You will lose access if new owner is a individual user.
+settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
+settings.transfer_form_title=Please enter following information to confirm your operation:
+settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
+settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
+settings.update_settings_success=Le opzioni repository sono state aggiornate con successo.
+settings.transfer_owner=Nuovo Proprietario
+settings.make_transfer=Trasferisci
+settings.transfer_succeed=Proprietà del repository trasferita con successo.
+settings.confirm_delete=Conferma eliminazione
+settings.add_collaborator=Aggiungi nuovo collaboratore
+settings.add_collaborator_success=Il nuovo collaboratore è stato aggiunto.
+settings.remove_collaborator_success=Il collaboratore è stato rimosso.
+settings.search_user_placeholder=Search user...
+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 Gogs, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target="_blank" href="%s">Guida ai Webhooks</a>.
+settings.webhook_deletion=Delete Webhook
+settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
+settings.webhook_deletion_success=Webhook has been deleted successfully!
+settings.webhook.request=Request
+settings.webhook.response=Response
+settings.webhook.headers=Headers
+settings.webhook.payload=Payload
+settings.webhook.body=Body
+settings.githooks_desc=Gli Hooks di Git sono una funzionalità di Git stesso, puoi modificare i file degli hooks supportati nell'elenco qui sotto per compiere azioni personalizzate.
+settings.githook_edit_desc=Se l'hook è inattivo, sarà presentato un contenuto esempio. Lasciando il contenuto vuoto disattiverai questo hook.
+settings.githook_name=Nome hook
+settings.githook_content=Contenuto hook
+settings.update_githook=Aggiorna Hook
+settings.add_webhook_desc=Gogs 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" href="%s">Guida ai Webhook</a>.
+settings.payload_url=Payload URL
+settings.content_type=Content Type
+settings.secret=Secret
+settings.slack_username=Username
+settings.slack_icon_url=Icon URL
+settings.slack_color=Color
+settings.event_desc=Quali eventi dovrebbero innescare questo webhook?
+settings.event_push_only=Solo l'evento <code>push</code>.
+settings.event_send_everything=I need <strong>everything</strong>.
+settings.event_choose=Let me choose what I need.
+settings.event_create=Create
+settings.event_create_desc=Branch, or tag created
+settings.event_push=Push
+settings.event_push_desc=Git push to a repository
+settings.active=Attivo
+settings.active_helper=Anche i dettagli riguardanti l'evento che ha innescato l'hook saranno inviati.
+settings.add_hook_success=Il nuovo webhook è stato aggiunto.
+settings.update_webhook=Aggiorna Webhook
+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.slack_token=Token
+settings.slack_domain=Dominio
+settings.slack_channel=Canale
+settings.deploy_keys=Dispiega Chiavi
+settings.add_deploy_key=Add Deploy Key
+settings.no_deploy_keys=You haven't added any deploy key.
+settings.title=Title
+settings.deploy_key_content=Content
+settings.key_been_used=Deploy key content has been used.
+settings.key_name_used=Deploy key with same name has already existed.
+settings.add_key_success=New deploy key '%s' has been added successfully!
+settings.deploy_key_deletion=Delete Deploy Key
+settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
+settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
+
+diff.browse_source=Sfoglia il codice sorgente
+diff.parent=parent
+diff.commit=commit
+diff.data_not_available=Diff Data non disponibile.
+diff.show_diff_stats=Mostra Diff Stats
+diff.stats_desc=<strong>%d ha cambiato i file</strong> con <strong>%d aggiunte</strong> e <strong>%d eliminazioni</strong>
+diff.bin=BIN
+diff.view_file=Vedi File
+
+release.releases=Rilasci
+release.new_release=Nuovo Rilascio
+release.draft=Bozza
+release.prerelease=Pre-Rilascio
+release.stable=Stabile
+release.edit=modifica
+release.ahead=<strong>%d</strong> commits da %s da questo rilascio
+release.source_code=Codice Sorgente
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Nome tag
+release.target=Obbiettivo
+release.tag_helper=Scegli un tag esistente o crea un nuovo tag una volta pubblicato.
+release.title=Title
+release.content=Content
+release.write=Scrivi
+release.preview=Anteprima
+release.loading=Caricamento...
+release.prerelease_desc=Questo è un pre-rilascio
+release.prerelease_helper=Precisiamo che questo rilascio non è pronta per la produzione.
+release.cancel=Cancel
+release.publish=Pubblica Rilascio
+release.save_draft=Salva Bozza
+release.edit_release=Modifica Rilascio
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Un rilascio con questo tag esiste già.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Nome dell'Organizzazione
+org_full_name_holder=Organization Full Name
+org_name_helper=Le migliori organizzazioni hanno nomi brevi e memorabili.
+create_org=Crea Organizzazione
+repo_updated=Aggiornato
+people=Utenti
+invite_someone=Invita Qualcuno
+teams=Team
+lower_members=membri
+lower_repositories=repository
+create_new_team=Crea Nuovo Team
+org_desc=Descrizione
+team_name=Nome Team
+team_desc=Descrizione
+team_name_helper=Verrà usato questo nome per riferirsi a questo team nella conversazioni.
+team_desc_helper=In cosa consiste questo team?
+team_permission_desc=Quale livello di autorizzazione dovrebbe avere questa squadra?
+
+form.name_reserved=Il nome organizzazione '%s' è riservato.
+form.name_pattern_not_allowed=La struttura del nome dell'organizzazione '%s' non è consentita.
+
+settings=Impostazioni
+settings.options=Opzioni
+settings.full_name=Nome Completo
+settings.website=Sito Web
+settings.location=Residenza
+settings.update_settings=Aggiorna Impostazioni
+settings.update_setting_success=Impostazioni dell'organizzazione aggiornate con successo.
+settings.change_orgname_prompt=This change will affect how links relate to the organization.
+settings.update_avatar_success=Organization avatar setting has been updated successfully.
+settings.delete=Elimina organizzazione
+settings.delete_account=Elimina questa organizzazione
+settings.delete_prompt=L'organizzazione verrà rimossa definitivamente, e questa operazione <strong>NON PUÒ</strong> essere annullata!
+settings.confirm_delete_account=Conferma Eliminazione
+settings.delete_org_title=Eliminazione Organizzazione
+settings.delete_org_desc=Questa organizzazione sta per essere eliminato in modo permanente, vuoi continuare?
+settings.hooks_desc=Aggiungi i webhooks che verranno attivati per <strong>tutti i repository</strong> sotto questa organizzazione.
+
+members.public=Pubblico
+members.public_helper=rendi privato
+members.private=Privato
+members.private_helper=rendi pubblico
+members.owner=Proprietario
+members.member=Membro
+members.conceal=Nascondere
+members.remove=Rimuovere
+members.leave=Abbandona
+members.invite_desc=Digita un nome utente per invitare un nuovo membro a %s:
+members.invite_now=Invita ora
+
+teams.join=Iscriviti
+teams.leave=Abbandona
+teams.read_access=Accesso di Lettura
+teams.read_access_helper=Questo team sarà in grado di visualizzare e clonare i suoi repository.
+teams.write_access=Accesso di Scrittura
+teams.write_access_helper=Questo team sarà in grado di leggere i suoi repository, come pure pusharli.
+teams.admin_access=Accesso Amministratore
+teams.admin_access_helper=Questo team sarà in grado di pushare/pullare i propri repo, così come aggiungere altri collaboratori.
+teams.no_desc=Questo team non ha alcuna descrizione
+teams.settings=Impostazioni
+teams.owners_permission_desc=I Proprietari hanno pieno accesso a <strong>tutti i repository</strong> e hanno <strong>diritti di amministatore</strong> nell'organizzazione.
+teams.members=Membri del Team
+teams.update_settings=Aggiorna Impostazioni
+teams.delete_team=Elimina questo Team
+teams.add_team_member=Aggiungere un Membro al Team
+teams.delete_team_title=Eliminazione Team
+teams.delete_team_desc=Quando questo team verrà eliminato, i membri di questa squadra potrebbero perdere l'accesso ad alcuni repository. Si desidera continuare?
+teams.delete_team_success=Team eliminato con successo.
+teams.read_permission_desc=Questo Team concede accesso di <strong>Lettura</strong>: i membri possono visualizzare e clonare i repository del Team.
+teams.write_permission_desc=Questo Team concede accesso di <strong>Scrittura</strong>: i membri possono leggere e pushare i repository del Team.
+teams.admin_permission_desc=Questo Team concede accesso di <strong>Amministratore</strong>: i membri possono leggere i, pushare a, e aggiungere collaboratori ai repository del Team.
+teams.repositories=Repository di Squadra
+teams.add_team_repository=Aggiungere Repository di Squadra
+teams.remove_repo=Rimuovi
+teams.add_nonexistent_repo=Il repository che stai tentando di aggiungere non esiste, crealo prima.
+
+[admin]
+dashboard=Pannello di Controllo
+users=Utenti
+organizations=Organizzazioni
+repositories=Repository
+authentication=Autenticazioni
+config=Configurazione
+notices=Avvisi di sistema
+monitor=Monitoraggio
+first_page=First
+last_page=Last
+total=Total: %d
+
+dashboard.statistic=Statistiche
+dashboard.operations=Operazioni
+dashboard.system_status=Stato del Monitor di Sistema
+dashboard.statistic_info=Il database di Gogs ha <b>%d</b> utenti, <b>%d</b> organizzazioni, <b>%d</b> chiavi pubbliche, <b>%d</b> repository, <b>%d</b> utenti che seguono, <b>%d</b> voti, <b>%d</b> azioni, <b>%d</b> accessi, <b>%d</b> problemi, <b>%d</b> commenti, <b>%d</b> account sociali, <b>%d</b> utenti seguiti, <b>%d</b> mirror, <b>%d</b> rilasci, <b>%d</b> fonti di accesso, <b>%d</b> webhook, <b>%d</b> traguardi, <b>%d</b> etichette, <b>%d</b> incarichi hook, <b>%d</b> team, <b>%d</b> attività di aggiornamento, <b>%d</b> allegati.
+dashboard.operation_name=Nome Operazione
+dashboard.operation_switch=Cambia
+dashboard.operation_run=Esegui
+dashboard.clean_unbind_oauth=Pulire OAuthes non associati
+dashboard.clean_unbind_oauth_success=Tutti gli OAuthes non associati eliminati con successo.
+dashboard.delete_inactivate_accounts=Elimina tutti gli account inattivi
+dashboard.delete_inactivate_accounts_success=Tutti gli account inattivi eliminati con successo.
+dashboard.delete_repo_archives=Elimina tutti gli archivi dei repository
+dashboard.delete_repo_archives_success=Tutti gli archivi del repository sono stati eliminati con successo.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Fare la procedura di garbage collection sui repository
+dashboard.git_gc_repos_success=Tutti i repository hanno fatto la procedura di garbage collection con successo.
+dashboard.resync_all_sshkeys=Riscrivi il file '.ssh/authorized_keys' (attenzione: le chiavi non appartenenti a Gogs saranno perse)
+dashboard.resync_all_sshkeys_success=Tutte le chiavi pubbliche riscritte con successo.
+dashboard.resync_all_update_hooks=Riscrivere tutti gli update hook dei repository (necessario quando il percorso di configurazione personalizzata viene modificato)
+dashboard.resync_all_update_hooks_success=Tutti gli update hook dei repository riscritti con successo.
+
+dashboard.server_uptime=Tempo in Attività del Server
+dashboard.current_goroutine=Goroutine Correnti
+dashboard.current_memory_usage=Utilizzo di Memoria Corrente
+dashboard.total_memory_allocated=Memoria Allocata Totale
+dashboard.memory_obtained=Memoria Ottenuta
+dashboard.pointer_lookup_times=Ricerche del Puntatore
+dashboard.memory_allocate_times=Allocazioni Memoria
+dashboard.memory_free_times=Svuotamenti di Memoria
+dashboard.current_heap_usage=Utilizzo Heap Corrente
+dashboard.heap_memory_obtained=Memoria Heap Ottenuta
+dashboard.heap_memory_idle=Memoria Heap Inattiva
+dashboard.heap_memory_in_use=Memoria Heap In Uso
+dashboard.heap_memory_released=Memoria Heap Rilasciata
+dashboard.heap_objects=Oggetti dell'Heap
+dashboard.bootstrap_stack_usage=Utilizzo Pila di Bootstrap
+dashboard.stack_memory_obtained=Memoria Stack Ottenuta
+dashboard.mspan_structures_usage=Utilizzo Strutture MSpan
+dashboard.mspan_structures_obtained=Strutture MSpan Ottenute
+dashboard.mcache_structures_usage=Utilizzo di Strutture MCache
+dashboard.mcache_structures_obtained=Strutture MCache Ottenute
+dashboard.profiling_bucket_hash_table_obtained=Tabella di Hash del Bucket Ottenuta
+dashboard.gc_metadata_obtained=Metadata della GC ottenuta
+dashboard.other_system_allocation_obtained=Altre Allocazioni di Sistema Ottenute
+dashboard.next_gc_recycle=Prossimo Riciclaggio GC
+dashboard.last_gc_time=Dall'Ultimo GC
+dashboard.total_gc_time=Pausa Totale della GC
+dashboard.total_gc_pause=Pausa Totale della GC
+dashboard.last_gc_pause=Ultima pausa della GC
+dashboard.gc_times=Esecuzioni GC
+
+users.user_manage_panel=Pannello Gestione Utenti
+users.new_account=Crea Nuovo Account
+users.name=Nome
+users.activated=Attivato
+users.admin=Amministratore
+users.repos=Repo
+users.created=Creato
+users.send_register_notify=Send Registration Notification To User
+users.new_success=New account '%s' has been created successfully.
+users.edit=Modifica
+users.auth_source=Authentication Source
+users.local=Locale
+users.auth_login_name=Authentication Login Name
+users.password_helper=Leave it empty to remain unchanged.
+users.update_profile_success=Profilo dell'account aggiornato con successo.
+users.edit_account=Modifica Account
+users.is_activated=Questo account è attivato
+users.is_admin=Questo account ha permessi di amministratore
+users.allow_git_hook=Questo account ha il permesso di creare hooks di Git
+users.allow_import_local=This account has permissions to import local repositories
+users.update_profile=Aggiornare Profilo Account
+users.delete_account=Elimina Questo Account
+users.still_own_repo=Questo account possiede ancora almeno un repository, devi prima cancellarli o trasferirli.
+users.still_has_org=Questo account appartiene ancora ad almeno un'organizzazione, è necessario prima abbandonarle o eliminale.
+users.deletion_success=Account has been deleted successfully!
+
+orgs.org_manage_panel=Pannello Gestione Organizzazioni
+orgs.name=Nome
+orgs.teams=Team
+orgs.members=Membri
+
+repos.repo_manage_panel=Pannello Organizzazione Repository
+repos.owner=Proprietario
+repos.name=Nome
+repos.private=Privati
+repos.watches=Segue
+repos.stars=Voti
+repos.issues=Problemi
+
+auths.auth_manage_panel=Authentication Manage Panel
+auths.new=Add New Source
+auths.name=Nome
+auths.type=Tipo
+auths.enabled=Attivo
+auths.updated=Aggiornato
+auths.auth_type=Authentication Type
+auths.auth_name=Authentication Name
+auths.domain=Dominio
+auths.host=Host
+auths.port=Porta
+auths.bind_dn=Bind DN
+auths.bind_password=Bind Password
+auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
+auths.user_base=User Search Base
+auths.user_dn=User DN
+auths.attribute_name=Attributo Nome
+auths.attribute_surname=Attributo Cognome
+auths.attribute_mail=Attributo Email
+auths.filter=User Filter
+auths.admin_filter=Admin Filter
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP Authentication Type
+auths.smtphost=Host SMTP
+auths.smtpport=Porta SMTP
+auths.allowed_domains=Allowed Domains
+auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
+auths.enable_tls=Abilitare Crittografia TLS
+auths.skip_tls_verify=Skip TLS Verify
+auths.pam_service_name=Nome del Servizio PAM
+auths.enable_auto_register=Abilitare Registrazione Automatica
+auths.tips=Consigli
+auths.edit=Edit Authentication Setting
+auths.activated=Questa Autenticazione è stata attivata
+auths.new_success=New authentication '%s' has been added successfully.
+auths.update_success=Authentication setting has been updated successfully.
+auths.update=Update Authentication Setting
+auths.delete=Delete This Authentication
+auths.delete_auth_title=Authentication Deletion
+auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
+auths.deletion_success=Authentication has been deleted successfully!
+
+config.server_config=Configurazione Server
+config.app_name=Nome Applicazione
+config.app_ver=Versione Applicazione
+config.app_url=URL Applicazione
+config.domain=Dominio
+config.offline_mode=Modalità Offline
+config.disable_router_log=Disattivare Log del Router
+config.run_user=Utente Esecutore
+config.run_mode=Modalità Esecuzione
+config.repo_root_path=Percorso Root del Repository
+config.static_file_root_path=Percorso Root del File Statico
+config.log_file_root_path=Percorso Root del File di Log
+config.script_type=Tipo di Script
+config.reverse_auth_user=Autenticazione Utente Inversa
+config.db_config=Configurazione Database
+config.db_type=Tipo
+config.db_host=Host
+config.db_name=Nome
+config.db_user=Utente
+config.db_ssl_mode=Modalità SSL
+config.db_ssl_mode_helper=(solo per "postgres")
+config.db_path=Percorso
+config.db_path_helper=(for "sqlite3" and "tidb")
+config.service_config=Configurazione Servizio
+config.register_email_confirm=Richiedono Conferma dell'Email
+config.disable_register=Disabilita Registrazione
+config.show_registration_button=Mostra Pulsane Registrazione
+config.require_sign_in_view=Richiesto Accesso per Vedere
+config.enable_cache_avatar=Abilitare Cache dell'Avatar
+config.mail_notify=Email di Notifica
+config.disable_key_size_check=Disable Minimum Key Size Check
+config.enable_captcha=Enable Captcha
+config.active_code_lives=Attiva Vita del Codice
+config.reset_password_code_lives=Reimpostare Password della Vita del Codice
+config.webhook_config=Configurazione Webhook
+config.queue_length=Queue Length
+config.deliver_timeout=Tempo Limite di Consegna
+config.skip_tls_verify=Salta verifiche TLS
+config.mailer_config=Configurazione Mailer
+config.mailer_enabled=Attivo
+config.mailer_disable_helo=Disattiva HELO
+config.mailer_name=Nome
+config.mailer_host=Host
+config.mailer_user=Utente
+config.oauth_config=Configurazione OAuth
+config.oauth_enabled=Attivo
+config.cache_config=Configurazione Cache
+config.cache_adapter=Adattatore Cache
+config.cache_interval=Intervallo Cache
+config.cache_conn=Connessione Cache
+config.session_config=Configurazione Sessione
+config.session_provider=Fornitore Sessione
+config.provider_config=Impostazioni Provider
+config.cookie_name=Nome del Cookie
+config.enable_set_cookie=Abilita Uso dei Cookie
+config.gc_interval_time=Intervallo di tempo della GC
+config.session_life_time=Durata Sessione
+config.https_only=Solo HTTPS
+config.cookie_life_time=Durata Cookie
+config.picture_config=Configurazione Foto
+config.picture_service=Servizio foto
+config.disable_gravatar=Disabilita Gravatar
+config.log_config=Configurazione Log
+config.log_mode=Modalità Log
+
+monitor.cron=Incarici di cron
+monitor.name=Nome
+monitor.schedule=Agenda
+monitor.next=La Prossima Volta
+monitor.previous=La Scorsa Volta
+monitor.execute_times=Numero di Esecuzioni
+monitor.process=Processi in Esecuzione
+monitor.desc=Descrizione
+monitor.start=Orario Avvio
+monitor.execute_time=Tempo di Esecuzione
+
+notices.system_notice_list=Avvisi di Sistema
+notices.type=Tipo
+notices.type_1=Repository
+notices.desc=Descrizione
+notices.op=Op.
+notices.delete_success=Avviso di sistema cancellato con successo.
+
+[action]
+create_repo=ha creato il repository <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <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>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%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_2_commits=Vedi confronto per questi 2 commit
+
+[tool]
+ago=fa
+from_now=da adesso
+now=ora
+1s=1 secondo %s
+1m=1 minuto %s
+1h=1 ora %s
+1d=1 giorno %s
+1w=1 settimana %s
+1mon=1 mese %s
+1y=1 anno %s
+seconds=%d secondi %s
+minutes=%d minuti %s
+hours=%d ore %s
+days=%d giorni %s
+weeks=%d settimane %s
+months=%d mesi %s
+years=%d anni %s
+raw_seconds=secondi
+raw_minutes=minuti
+
+[dropzone]
+default_message=Drop files here or click to upload.
+invalid_input_type=You can't upload files of this type.
+file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
+remove_file=Remove file
+

+ 1009 - 992
conf/locale/locale_ja-JP.ini

@@ -1,992 +1,1009 @@
-app_desc=Go言語で実装したセルフホストGitサービス
-
-home=ホーム
-dashboard=ダッシュボード
-explore=エスクプローラ
-help=ヘルプ
-sign_in=サインイン
-sign_out=サインアウト
-sign_up=サインアップ
-register=登録
-website=WEBサイト
-version=バージョン
-page=ページ
-template=テンプレート
-language=言語
-create_new=作成...
-user_profile_and_more=ユーザープロファイルなど
-signed_in_as=サインイン済み
-
-username=ユーザ名
-email=E-mail
-password=パスワード
-re_type=再入力
-captcha=キャプチャ
-
-repository=リポジトリ
-organization=組織
-mirror=ミラー
-new_repo=新しいリポジトリ
-new_migrate=新しい移行
-new_fork=新しいフォークのリポジトリ
-new_org=新しい組織
-manage_org=組織を管理
-admin_panel=管理者パネル
-account_settings=アカウント設定
-settings=設定
-your_profile=あなたのプロファイル
-your_settings=あなたの設定
-
-news_feed=ニュースのフィード
-pull_requests=プルリクエスト
-issues=課題
-
-cancel=キャンセル
-
-[search]
-search=検索...
-repository=リポジトリ
-user=ユーザ
-issue=課題
-code=コード
-
-[install]
-install=インストール
-title=初回実行のインストール手順
-docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
-requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
-db_title=データベース設定
-db_type=データベースの種類
-host=ホスト
-user=ユーザ
-password=パスワード
-db_name=データベース名
-db_helper=Mysql INNODB エンジン utf8_general_ci の文字セットを使用してください。
-ssl_mode=SSL モード
-path=パス
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
-no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
-err_empty_admin_password=Admin password cannot be empty.
-
-general_title=Gogs の全般設定
-app_name=アプリケーション名
-app_name_helper=素晴らしい組織名を入れてください!
-repo_path=リポジトリのルートパス
-repo_path_helper=すべての Git リモート リポジトリはこのディレクトリに保存されます。
-run_user=実行ユーザ
-run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス、及びGogs を実行する権限を所有する必要があります。
-domain=ドメイン
-domain_helper=これはSSHクローンURLに影響する。
-ssh_port=SSH ポート
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
-http_port=HTTP ポート
-http_port_helper=アプリケーションが待ち受けするポート番号。
-app_url=アプリケーションの URL
-app_url_helper=この設定は、HTTP / HTTPSのクローンURLおよび、一部のメールボックスへのリンクに影響を与えます。
-
-optional_title=オプション設定
-email_title=E-mailサービス設定
-smtp_host=SMTP ホスト
-smtp_from=差出人
-smtp_from_helper=送信者メールアドレス、RFC 5322。フォーマットはメールアドレスのみ、または"Name" <email@example.com>。
-mailer_user=送信者の電子メール
-mailer_password=送信者のパスワード
-register_confirm=登録の確認を有効にする
-mail_notify=メール通知を有効にする
-server_service_title=サーバーとその他のサービスの設定
-offline_mode=オフラインモード有効化
-offline_mode_popup=プロダクション モードでCDN を無効にし、すべてのリソースファイルをローカルで提供します 。
-disable_gravatar=Gravatarのサービスを無効にします
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
-disable_registration=自己登録を無効にする
-disable_registration_popup=自己登録を無効にし、管理者のみがアカウント作成できる
-enable_captcha=Captchaを有効にする
-enable_captcha_popup=Require validate captcha for user self-registration.
-require_sign_in_view=サインインしたユーザのみページ閲覧を許可
-require_sign_in_view_popup=サインインしたユーザのみがページを閲覧できます。ビジターはサインインもしくはサインアップページのみ見られます。
-admin_setting_desc=今管理者アカウントを作成する必要はありません。ID = 1のユーザ は自動的に管理者の権限を獲得します。
-admin_title=管理者アカウントの設定
-admin_name=ユーザ名
-admin_password=パスワード
-confirm_password=パスワード確認
-admin_email=E-mail
-install_gogs=Gogs をインストール
-test_git_failed='Git' コマンドテストに失敗: %v
-sqlite3_not_available=このリリース バージョンは SQLite3 をサポートしていません。gobuild バージョンではない、公式のバイナリ バージョンを %s からダウンロードしてください。
-invalid_db_setting=データベースの設定が正しくありません: %v
-invalid_repo_path=リポジトリのルート パスが無効です: %v
-run_user_not_match=実行ユーザーは、現在のユーザーではない: %s-> %s
-save_config_failed=構成の保存に失敗した: %v
-invalid_admin_setting=管理者アカウントの設定が無効です: %v
-install_success=ようこそ!我々はあなたが Gogs を選んでくれて嬉しいです!楽しみましょう!
-
-[home]
-uname_holder=ユーザー名またはEメール
-password_holder=パスワード
-switch_dashboard_context=ダッシュ ボードのコンテキストを切替
-my_repos=私のリポジトリ
-collaborative_repos=共同リポジトリ
-my_orgs=私の組織
-my_mirrors=私のミラー
-view_home=ビュー %s
-
-issues.in_your_repos=あなたのリポジトリ
-
-[explore]
-repos=リポジトリ
-
-[auth]
-create_new_account=新規アカウントを作成
-register_hepler_msg=すでにアカウントをお持ちですか?今すぐログイン !
-social_register_hepler_msg=すでにアカウントをお持ちですか?今すぐバインド !
-disable_register_prompt=申し訳ありませんが、登録が無効になっています。サイト管理者に問い合わせてください。
-disable_register_mail=申し訳ありませんが、登録メールの確認機能が無効になっています。
-remember_me=ログイン状態を保持する
-forgot_password=パスワードを忘れた
-forget_password=パスワードを忘れた?
-sign_up_now=アカウントが必要ですか?今すぐサインアップ
-confirmation_mail_sent_prompt=新しい確認メールを <b>%s</b> に送りました。登録を完了させるために、%d時間以内にあなたのメールボックスを確認してください。
-sign_in_to_account=Sign in to your account
-active_your_account=アカウントをアクティブ
-resent_limit_prompt=申し訳ありませんが、アクティベーションメールは頻繁に送信しています。3 分お待ちください。
-has_unconfirmed_mail=こんにちは %s さん、あなたの電子メール アドレス (<b>%s</b>) は未確認です。もし確認メールをまだ確認できていないか、改めて再送信する場合は、下のボタンをクリックしてください。
-resend_mail=アクティベーションメールを再送信するにはここをクリック
-email_not_associate=この電子メール アドレスは、アカウントには関連付けられません。
-send_reset_mail=パスワードリセットのメールを再送するにはここをクリック
-reset_password=パスワードリセット
-invalid_code=申し訳ありませんが、確認用コードが期限切れまたは無効です。
-reset_password_helper=パスワードをリセットするにはここをクリック
-password_too_short=6文字未満のパスワードは設定できません。
-
-[mail]
-activate_account=Please activate your account
-activate_email=Verify your e-mail address
-reset_password=Reset your password
-register_success=Register success, Welcome
-
-[modal]
-yes=はい
-no=いいえ
-modify=変更
-
-[form]
-UserName=ユーザ名
-RepoName=リポジトリ名
-Email=Eメールアドレス
-Password=パスワード
-Retype=パスワードを再入力
-SSHTitle=SSH キーの名前
-HttpsUrl=HTTPS URL
-PayloadUrl=ペイロードの URL
-TeamName=チーム名
-AuthName=承認名
-AdminEmail=管理者の電子メール
-
-require_error=空にできません
-alpha_dash_error=アルファベット、数字、ハイフン"-"、アンダースコア"_"のいずれかの必要があります
-alpha_dash_dot_error=' アルファベット、数値、ダッシュ(-)、アンダースコア(_) 、ドット(.)のいずれかを入力する必要があります。 '
-size_error=`サイズは %s である必要があります`
-min_size_error=' 少なくとも %s 文字の必要があります '
-max_size_error=' %s 文字以下の必要があります '
-email_error=' は有効な電子メール アドレスではない '
-url_error=' は有効な URL はありません。 '
-unknown_error=不明なエラー:
-captcha_incorrect=Captcha が一致しませんでした。
-password_not_match=パスワードと確認用パスワードが一致同していません。
-
-username_been_taken=ユーザー名は既に使用されています。
-repo_name_been_taken=リポジトリ名は既に使用されています。
-org_name_been_taken=組織名は既に使用されています。
-team_name_been_taken=チーム名は既に使用されています。
-email_been_used=電子メール アドレスは既に使用されています。
-illegal_team_name=チーム名に無効な文字が含まれています。
-username_password_incorrect=ユーザー名またはパスワードが正しくありません。
-enterred_invalid_repo_name=入力したリポジトリの名前が正しいかどうかを確認してください。
-enterred_invalid_owner_name=入力された所有者名が正しいかどうかを確認してください。
-enterred_invalid_password=入力したパスワードが正しいかを確認してください。
-user_not_exist=指定されたユーザーは存在しません。
-last_org_owner=削除するユーザーはチームの最後のメンバーです。別の所有者設定が必要です。
-
-invalid_ssh_key=SSHを確認できません:%s
-unable_verify_ssh_key=GogsはあなたのSSH keyを確認できません。しかし、我々は有効とみなしますので、自分自身で確認してください。
-auth_failed=認証に失敗しました: %v
-
-still_own_repo=アカウント所有のリポジトリがあり、リポジトリの削除または所有者の移譲が必要です。
-still_has_org=アカウントはまだ組織のメンバーであり、組織から退出するか削除する必要があります。
-org_still_own_repo=この組織はまだリポジトリの所有しています、リポジトリを削除または転送する必要があります。
-
-still_own_user=この認証はまだ一部のユーザーによって使用されています。一部のユーザを移動させてから、もう一度削除してください。
-
-target_branch_not_exist=ターゲットブランチが存在しない
-
-[user]
-change_avatar=gravatar.com で自分のアバターを変更
-change_custom_avatar=設定で自分のアバターを変更
-join_on=参加しました
-repositories=リポジトリ
-activity=パブリック・アクティビティ
-followers=フォロワー
-starred=スター
-following=フォロー
-
-form.name_reserved=ユーザー名 '%s' は予約されています。
-form.name_pattern_not_allowed=ユーザ名のパターン '%s' は許可されていません。
-
-[settings]
-profile=プロフィール
-password=パスワード
-ssh_keys=SSH キー
-social=SNSアカウント
-applications=アプリケーション
-orgs=組織
-delete=アカウントを削除
-uid=Uid
-
-public_profile=パブリック プロフィール
-profile_desc=あなたのメールアドレスは公開され、任意のアカウント関連の通知に使用されます。また、Webベースの操作はサイトを介して行います。
-full_name=フルネーム
-website=WEBサイト
-location=ロケーション
-update_profile=プロファイル更新
-update_profile_success=あなたのプロフィールが更新されました。
-change_username=ユーザー名が変更されました
-change_username_prompt=This change will affect the way how links relate to your account.
-continue=続行
-cancel=キャンセル
-
-enable_custom_avatar=カスタムのアバターを有効にする
-enable_custom_avatar_helper=Gravatarからのフェッチを無効にするのを、有効にします
-choose_new_avatar=新しいアバターを選択
-update_avatar=アバターの設定を更新
-uploaded_avatar_not_a_image=アップロードされたファイルは画像ではない。
-no_custom_avatar_available=利用可能なカスタム アバターがないため、有効にできません。
-update_avatar_success=あなたのアバターの設定が更新されました。
-
-change_password=パスワードを変更
-old_password=現在のパスワード
-new_password=新しいパスワード
-retype_new_password=Retype New Password
-password_incorrect=現在のパスワードが正しくありません。
-change_password_success=パスワードが正常に変更されました。今すぐ新しいパスワード経由でサインインすることができます。
-
-emails=E-mail アドレス
-manage_emails=E-mail アドレスを管理
-email_desc=あなたのプライマリメールアドレスは、通知やその他の操作に使用されます。
-primary=プライマリー
-primary_email=プライマリに設定
-delete_email=削除
-email_deletion=E-mail Deletion
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail has been deleted successfully!
-add_new_email=新しいe-mailアドレスを追加
-add_email=電子メールを追加します。
-add_email_confirmation_sent='%s' に新しい確認メールを送信しました、次の %d 時間以内に受信トレイを確認し、確認プロセスを完了してください。
-add_email_success=新しいe-mail アドレスが追加されました。
-
-manage_ssh_keys=SSH キーを管理
-add_key=キーを追加
-ssh_desc=これはあなたのアカウントに関連付けられている SSH キーの一覧です。あなたが認識していないキーを削除します。
-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=同じ名前の公開鍵は既に存在しています。
-key_name=キーの名前
-key_content=コンテンツ
-add_key_success=新しいSSHキー '%s' が正常に追加されました!
-delete_key=削除
-ssh_key_deletion=SSH キーの削除
-ssh_key_deletion_desc=このSSHキーを削除すると、あなたのアカウントに関連するすべてのアクセスが削除されます。続行しますか?
-ssh_key_deletion_success=SSH キーは正常に削除されました!
-add_on=追加された
-last_used=最終使用日
-no_activity=最近の活動なし
-key_state_desc=この鍵は7日間以内に使われています。
-token_state_desc=この鍵は7日間以内に使われています。
-
-manage_social=関連付けられているSNSアカウントを管理
-social_desc=これは関連付けられたソーシャルアカウントのリストです。あなたが認識していない結び付けを削除します。
-unbind=バインド解除
-unbind_success=SNSアカウントがバインドされていない。
-
-manage_access_token=個人のアクセス トークンを管理
-generate_new_token=新しいトークンを生成
-tokens_desc=生成したトークンを利用して Gogs の API にアクセスすることができます。
-new_token_desc=今のところ、全てのトークンはあなたのアカウントにフルアクセスできます。
-token_name=トークン名
-generate_token=トークンを生成
-generate_token_succees=新しいアクセス トークンは正常に生成されました !今すぐあなたの新しいアクセス トークンをコピーしておいてください。二度と見ることはできませんので確認してください!
-delete_token=削除
-access_token_deletion=パーソナルアクセストークンの削除
-access_token_deletion_desc=パーソナルアクセストークンを削除すると、関連するアプリケーションのすべてのアクセスが削除されます。続行しますか?
-delete_token_success=パーソナルアクセストークンは正常に削除されました!同時にあなたのアプリケーションを更新することを忘れないでください。
-
-delete_account=アカウントを削除
-delete_prompt=この操作はあなたのアカウントを完全に削除し、復旧<strong>できない</strong> !
-confirm_delete_account=削除の確認
-delete_account_title=アカウントの削除
-delete_account_desc=このアカウントは永久に削除しようとしている、継続しますか?
-
-[repo]
-owner=オーナー
-repo_name=リポジトリ名
-repo_name_helper=偉大なリポジトリ名は短い。思い出に残り、そして<strong>一意</strong>だ。
-visibility=ビジビリティ
-visiblity_helper=このリポジトリは<span class="ui red text">プライベート</span>です。
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(この値の変更はすべてのフォークに適用されます)
-fork_repo=フォークのリポジトリ
-fork_from=フォーク元
-fork_visiblity_helper=フォークされたリポジトリは可視状態を変更できません
-repo_desc=説明
-repo_lang=言語
-repo_lang_helper=.gitignoreファイルを選択
-license=ライセンス
-license_helper=ライセンス ファイルを選択
-readme=Readme
-readme_helper=Select a readme template
-auto_init=Initialize this repository with selected files and template
-create_repo=リポジトリを作成
-default_branch=デフォルトのブランチ
-mirror_interval=ミラー 間隔(時)
-
-form.name_reserved=リポジトリ名 '%s' は予約されています。
-form.name_pattern_not_allowed=リポジトリ名のパターン '%s' は許可されていません。
-
-need_auth=認証が必要
-migrate_type=マイグレーションの種類
-migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
-migrate_repo=リポジトリを移行
-migrate.clone_address=クローンアドレス
-migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
-migrate.invalid_local_path=ローカルパスが無効です。存在しないかディレクトリではありません。
-
-forked_from=フォーク元
-fork_from_self=すでにあなたの所有しているリポジトリはフォークできません
-copy_link=コピー
-copy_link_success=Copied!
-copy_link_error=Press ⌘-C or Ctrl-C to copy
-click_to_copy=クリップボードにコピー
-copied=コピー成功
-clone_helper=クローニングのヘルプが必要ですか?<a target="_blank"href="%s"> ヘルプ</a> を参照してください!
-unwatch=Unwatch
-watch=Watch
-unstar=Unstar
-star=Star
-fork=Fork
-
-no_desc=説明なし
-quick_guide=クイック ガイド
-clone_this_repo=このリポジトリのクローンを作成
-create_new_repo_command=コマンドラインで新しいリポジトリを作成します。
-push_exist_repo=コマンド ・ ラインから既存のリポジトリをプッシュ
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=ブランチ
-tree=ツリー
-branch_and_tags=ブランチ& タグ
-branches=ブランチ
-tags=タグ
-issues=課題
-pulls=プルリクエスト
-labels=ラベル
-milestones=マイルストーン
-commits=コミット
-releases=リリース
-file_raw=生データ
-file_history=履歴
-file_view_raw=生データを見る
-file_permalink=パーマリンク
-
-commits.commits=コミット
-commits.search=コミットの検索
-commits.find=検索
-commits.author=作者
-commits.message=メッセージ
-commits.date=日付
-commits.older=古い
-commits.newer=新しい
-
-issues.new=新しい問題
-issues.new.labels=ラベル
-issues.new.no_label=ラベルなし
-issues.new.clear_labels=ラベルをクリア
-issues.new.milestone=マイルストーン
-issues.new.no_milestone=マイルストーンなし
-issues.new.clear_milestone=マイルストーンをクリア
-issues.new.open_milestone=オープン中のマイルストーン
-issues.new.closed_milestone=クローズされたマイルストーン
-issues.new.assignee=担当者
-issues.new.clear_assignee=担当者をクリア
-issues.new.no_assignee=担当者なし
-issues.create=問題を作成
-issues.new_label=新しいラベル
-issues.new_label_placeholder=ラベル名...
-issues.create_label=ラベルを作成
-issues.open_tab=%d オープン
-issues.close_tab=%d クローズ
-issues.filter_label=ラベル
-issues.filter_label_no_select=選択したラベルがありません。
-issues.filter_milestone=マイルストーン
-issues.filter_milestone_no_select=選択されたマイルストーンなし
-issues.filter_assignee=アサインされた人
-issues.filter_assginee_no_select=No selected Assignee
-issues.filter_type=タイプ
-issues.filter_type.all_issues=すべての問題
-issues.filter_type.assigned_to_you=あなたに割り当てられました。
-issues.filter_type.created_by_you=あなたが作成しました。
-issues.filter_type.mentioning_you=あなたに伝える
-issues.filter_sort=並べ替え
-issues.filter_sort.latest=最新
-issues.filter_sort.oldest=最も古い
-issues.filter_sort.recentupdate=Recently updated
-issues.filter_sort.leastupdate=Least recently updated
-issues.filter_sort.mostcomment=Most commented
-issues.filter_sort.leastcomment=Least commented
-issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=opened %[1]s by %[2]s
-issues.previous=前ページ
-issues.next=次ページ
-issues.open_title=Open
-issues.closed_title=Closed
-issues.num_comments=%d comments
-issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=There is no content yet.
-issues.close_issue=Close
-issues.close_comment_issue=Close and comment
-issues.reopen_issue=Reopen
-issues.reopen_comment_issue=Reopen and comment
-issues.create_comment=Comment
-issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Poster
-issues.admin=Admin
-issues.owner=Owner
-issues.sign_up_for_free=Sign up for free
-issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
-issues.edit=Edit
-issues.cancel=Cancel
-issues.save=Save
-issues.label_title=ラベル名
-issues.label_color=ラベルの色
-issues.label_count=%d ラベル
-issues.label_open_issues=%d 未解決の問題
-issues.label_edit=編集
-issues.label_delete=削除
-issues.label_modify=ラベルの変更
-issues.label_deletion=ラベルの削除
-issues.label_deletion_desc=ラベルを削除すると、関連するすべての問題の情報が削除されます。続行しますか。
-issues.label_deletion_success=ラベルは正常に削除されました。
-
-pulls.compare_changes=変更を比較
-pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。
-pulls.compare_base=base
-pulls.compare_compare=compare
-pulls.filter_branch=Filter branch
-pulls.no_results=結果が見つかりませんでした。
-pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
-pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Create Pull Request
-pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
-pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversation
-pulls.tab_commits=Commits
-pulls.tab_files=Files changed
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Merge Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=新しいマイルストーン
-milestones.open_tab=%d オープン
-milestones.close_tab=%d クローズ
-milestones.closed=%s を閉じました
-milestones.no_due_date=期限なし
-milestones.open=開く
-milestones.close=閉じる
-milestones.new_subheader=Create milestones to organize your issues.
-milestones.create=Create Milestone
-milestones.title=Title
-milestones.desc=Description
-milestones.due_date=Due Date (optional)
-milestones.clear=Clear
-milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
-milestones.create_success=Milestone '%s' has been created successfully!
-milestones.edit=Edit Milestone
-milestones.edit_subheader=Use better description for milestones so people won't be confused.
-milestones.cancel=Cancel
-milestones.modify=Modify Milestone
-milestones.edit_success=Changes of milestone '%s' has been saved successfully!
-milestones.deletion=Milestone Deletion
-milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
-milestones.deletion_success=Milestone has been deleted successfully!
-
-settings=設定
-settings.options=オプション
-settings.collaboration=コラボレーション
-settings.hooks=Webhooks
-settings.githooks=Git のフック
-settings.basic_settings=基本設定
-settings.danger_zone=危険地帯
-settings.site=公式サイト
-settings.update_settings=設定の更新
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
-settings.transfer=オーナー移転
-settings.transfer_desc=リポジトリをあなたが管理者権限を持っている別のユーザーまた組織に移譲します。
-settings.new_owner_has_same_repo=新しいオーナーは、既に同じ名前のリポジトリを持っています。
-settings.delete=このリポジトリを削除
-settings.delete_desc=リポジトリを削除すると元に戻せません。確実に確認してください。
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=リポジトリ オプションが更新されました。
-settings.transfer_owner=新しいオーナー
-settings.make_transfer=転送
-settings.transfer_succeed=リポジトリの所有権は正常に転送されました。
-settings.confirm_delete=削除の確認
-settings.add_collaborator=新しい共同編集者を追加
-settings.add_collaborator_success=新しい共同編集者が追加されました。
-settings.remove_collaborator_success=共同編集者が削除されました。
-settings.user_is_org_member=ユーザーは組織の一員なので、共同編集者として追加することはできません。
-settings.add_webhook=Webhook を追加
-settings.hooks_desc=Webhooksは、Gogsで特定のイベントの発生時に指定された外部サービスに通知を許可します。イベントが発生すると、それぞれ指定されたUrlに、POSTリクエストが送られます。詳細はこちらのの <a target="_blank"href="%s"> Webhooks ガイド</a>をご覧ください。
-settings.webhook_deletion=Delete Webhook
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Request
-settings.webhook.response=Response
-settings.webhook.headers=Headers
-settings.webhook.payload=Payload
-settings.webhook.body=Body
-settings.githooks_desc=Git のフックは Git 自体によって提供されています。以下のリストのファイルを編集して、サポートされているフックのカスタム操作を適用することができます。
-settings.githook_edit_desc=もしフックがアクティブではない場合は、サンプルコンテンツが表示されます。コンテンツを空白にするにはこのフックを無効にします。
-settings.githook_name=フックの名前
-settings.githook_content=コンテンツをフック
-settings.update_githook=フックを更新
-settings.add_webhook_desc=私たちは、指定されたURLに購読されたイベントの詳細を <code>POST</code>リクエストとして送信します。あなたは、異なるデータ受信モード(JSONまたは, <code>x-www-form-urlencoded</code>, <em>その他</em>) を設定することができます。詳細については、<a target="_blank" href="%s">Webhookガイド</a>を参照してください。
-settings.payload_url=ペイロードの URL
-settings.content_type=コンテンツ タイプ
-settings.secret=秘密
-settings.slack_username=Username
-settings.slack_icon_url=Icon URL
-settings.slack_color=Color
-settings.event_desc=どのイベントをこのWEBフックのトリガーにしますか?
-settings.event_push_only=<code>push</code> イベントのみ
-settings.event_send_everything=I need <strong>everything</strong>.
-settings.event_choose=Let me choose what I need.
-settings.event_create=Create
-settings.event_create_desc=Branch, or tag created
-settings.event_push=Push
-settings.event_push_desc=Git push to a repository
-settings.active=アクティブ
-settings.active_helper=このフックのトリガーが引かれた時に、イベントの詳細を配信します。
-settings.add_hook_success=新しい webhook が追加されました。
-settings.update_webhook=Webhookを更新
-settings.update_hook_success=Webhook を更新しました。
-settings.delete_webhook=Webhook を削除
-settings.recent_deliveries=最近のデリバリー
-settings.hook_type=フックタイプ
-settings.add_slack_hook_desc=<a href="%s"> Slack</a> インテグレーションをリポジトリに追加します。
-settings.slack_token=トークン
-settings.slack_domain=ドメイン
-settings.slack_channel=チャンネル
-settings.deploy_keys=デプロイキー
-settings.add_deploy_key=Add Deploy Key
-settings.no_deploy_keys=You haven't added any deploy key.
-settings.title=Title
-settings.deploy_key_content=Content
-settings.key_been_used=Deploy key content has been used.
-settings.key_name_used=Deploy key with same name has already existed.
-settings.add_key_success=New deploy key '%s' has been added successfully!
-settings.deploy_key_deletion=Delete Deploy Key
-settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
-settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
-
-diff.browse_source=ソースを参照
-diff.parent=親
-diff.commit=コミット
-diff.data_not_available=差分データは利用できません。
-diff.show_diff_stats=差分情報を表示
-diff.stats_desc=共有<strong>%d 個のファイルを変更した</strong>、<strong>%d 個の追加</strong> と <strong>%d 個の削除</strong>を含む
-diff.bin=BIN
-diff.view_file=ファイルの表示
-
-release.releases=リリース
-release.new_release=新しいリリース
-release.draft=ドラフト
-release.prerelease=プレリリース
-release.stable=安定
-release.edit=編集
-release.ahead=このリリース以降 %s へ <strong>%d</strong> コミット
-release.source_code=ソース コード
-release.tag_name=タグ名
-release.target=ターゲット
-release.tag_helper=既存のタグを選択するか、新しいタグを作成し発行します。
-release.release_title=リリース タイトル
-release.content_with_md=<a href="%s"> Markdown</a> コンテンツ
-release.write=書込み
-release.preview=プレビュー
-release.content_placeholder=コンテンツを書く
-release.loading=読み込み中…
-release.prerelease_desc=これはリリース前のものです
-release.prerelease_helper=このリリースは非プロダクション利用として識別します。
-release.publish=リリースを発行
-release.save_draft=下書きを保存
-release.edit_release=リリースを編集
-release.tag_name_already_exist=このタグ名には既にリリースが存在します。
-
-[org]
-org_name_holder=組織名
-org_name_helper=偉大な組織の名は短く覚えやすいです。
-create_org=組織を作成
-repo_updated=更新した
-people=人々
-invite_someone=誰かを招待
-teams=チーム
-lower_members=メンバー
-lower_repositories=リポジトリ
-create_new_team=新しいチームを作成
-org_desc=説明
-team_name=チーム名
-team_desc=説明
-team_name_helper=会話の時、この名前を使用しチーム名を表明します。
-team_desc_helper=このチームに関する全ての情報は?
-team_permission_desc=このチームに必要な権限レベルは?
-
-form.name_reserved=組織名 '%s' は予約されています。
-form.name_pattern_not_allowed=組織名のパターン '%s' は許可されていません。
-
-settings=設定
-settings.options=オプション
-settings.full_name=フルネーム
-settings.website=WEBサイト
-settings.location=ロケーション
-settings.update_settings=設定の更新
-settings.update_setting_success=組織の設定が更新されました。
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=組織を削除
-settings.delete_account=この組織を削除
-settings.delete_prompt=操作はこの組織を完全に削除し、復旧<strong>できない</strong>!
-settings.confirm_delete_account=削除の確認
-settings.delete_org_title=組織の削除
-settings.delete_org_desc=この組織は完全に削除されます、継続しますか?
-settings.hooks_desc=この組織のもとで <strong>すべてのリポジトリ</strong> に対してトリガーされる webhook を追加します。
-
-members.public=パブリック
-members.public_helper=プライベートにする
-members.private=プライベート
-members.private_helper=公開する
-members.owner=オーナー
-members.member=メンバー
-members.conceal=隠す
-members.remove=削除
-members.leave=退出
-members.invite_desc=%s に招待する新しいメンバーをユーザ名を入力してください:
-members.invite_now=今すぐ招待
-
-teams.join=参加
-teams.leave=退出
-teams.read_access=読み取りアクセス権
-teams.read_access_helper=このチームはリポジトリの閲覧とクローンをすることができます。
-teams.write_access=書き込みアクセス権
-teams.write_access_helper=このチームはリポジトリを読むだけではなく、プッシュすることもできます。
-teams.admin_access=管理者のアクセス権
-teams.admin_access_helper=このチームはリポジトリにプッシュ/プル、及び他の共同編集者を追加することができます。
-teams.no_desc=このチームは説明がありません。
-teams.settings=設定
-teams.owners_permission_desc=オーナーは<strong>すべてのリポジトリ</strong> へのフルアクセス権、組織の <strong>管理権限</strong>を持ちます。
-teams.members=チーム メンバー
-teams.update_settings=設定の更新
-teams.delete_team=このチームを削除
-teams.add_team_member=チーム メンバーを追加
-teams.delete_team_title=チームの削除
-teams.delete_team_desc=このチームを削除します、継続しますか?このチームのメンバーはいくつかのリポジトリへのアクセスを失う可能性があります。
-teams.delete_team_success=指定のチームが正常に削除されました。
-teams.read_permission_desc=このチームは<strong>読み取り</strong>権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。
-teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
-teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
-teams.repositories=チームのリポジトリ
-teams.add_team_repository=チームのリポジトリを追加
-teams.remove_repo=削除(Remove)
-teams.add_nonexistent_repo=追加しようとしているリポジトリは存在しません。まずはじめに作成してください。
-
-[admin]
-dashboard=ダッシュボード
-users=ユーザ
-organizations=組織
-repositories=リポジトリ
-authentication=認証
-config=コンフィギュレーション
-notices=システム通知
-monitor=モニタリング
-first_page=First
-last_page=Last
-total=Total: %d
-
-dashboard.statistic=統計
-dashboard.operations=操作
-dashboard.system_status=システム モニターのステータス
-dashboard.statistic_info=Gogs データベースは <b>%d</b> ユーザ, <b>%d</b> 組織, <b>%d</b> 公開鍵, <b>%d</b> リポジトリ, <b>%d</b> ウォッチ, <b>%d</b> スター, <b>%d</b> 行動, <b>%d</b> アクセス, <b>%d</b> 問題, <b>%d</b> コメント, <b>%d</b> ソーシャルアカウント, <b>%d</b> フォロー, <b>%d</b> ミラー, <b>%d</b> リリース, <b>%d</b> ログイン元, <b>%d</b> webhook, <b>%d</b> マイルストーン, <b>%d</b> ラベル, <b>%d</b> フックタスク, <b>%d</b> チーム, <b>%d</b> アップデートタスク, <b>%d</b> 添付ファイル の情報を持っています。
-dashboard.operation_name=操作の名前
-dashboard.operation_switch=スイッチ
-dashboard.operation_run=実行
-dashboard.clean_unbind_oauth=結び付けられていない OAuth をクリーン
-dashboard.clean_unbind_oauth_success=結び付けられていない全ての OAuth を正常に削除しました。
-dashboard.delete_inactivate_accounts=非アクティブのアカウントをすべて削除
-dashboard.delete_inactivate_accounts_success=すべての非アクティブアカウントは正常に削除されました。
-dashboard.delete_repo_archives=リポジトリのすべてのアーカイブを削除
-dashboard.delete_repo_archives_success=リポジトリのすべてのアーカイブが正常に削除されました。
-dashboard.git_gc_repos=リポジトリでのガベージコレクションを実行します。
-dashboard.git_gc_repos_success=すべてのリポジトリは正常にガベージ コレクションを行いました。
-dashboard.resync_all_sshkeys='.ssh/ authorized_keys' ファイルを再生成します。(警告:Gogsキー以外は失われます)
-dashboard.resync_all_sshkeys_success=すべての公開鍵が正常に書き換えられました。
-dashboard.resync_all_update_hooks=リポジトリの update フックをすべて再更新する(カスタムの設定パスが変更されたときに必要)
-dashboard.resync_all_update_hooks_success=リポジトリの update フックがすべて正常に再更新されました。
-
-dashboard.server_uptime=サーバーの稼働時間
-dashboard.current_goroutine=現在のGoroutine
-dashboard.current_memory_usage=現在のメモリ使用量
-dashboard.total_memory_allocated=割り当てられたメモリの合計
-dashboard.memory_obtained=配分されたメモリ量
-dashboard.pointer_lookup_times=ポインタ参照回数
-dashboard.memory_allocate_times=メモリ割当回数
-dashboard.memory_free_times=メモリ解放回数
-dashboard.current_heap_usage=現在のヒープ使用量
-dashboard.heap_memory_obtained=配分されたヒープ メモリ量
-dashboard.heap_memory_idle=アイドルのヒープ メモリ量
-dashboard.heap_memory_in_use=使用中のヒープ メモリ
-dashboard.heap_memory_released=ヒープ メモリが解放されました
-dashboard.heap_objects=ヒープ オブジェクト
-dashboard.bootstrap_stack_usage=ブートストラップスタック使用量
-dashboard.stack_memory_obtained=配分されたスタック メモリ量
-dashboard.mspan_structures_usage=MSpan 構造体の使用量
-dashboard.mspan_structures_obtained=配分されたMSpan 構造体
-dashboard.mcache_structures_usage=MCache 構造体の使用量
-dashboard.mcache_structures_obtained=分配されたMCache 構造体
-dashboard.profiling_bucket_hash_table_obtained=ハッシュテーブル分析に割り当てられたメモリ
-dashboard.gc_metadata_obtained=GCメタデータ取得
-dashboard.other_system_allocation_obtained=他のシステムに割り当てられたメモリ
-dashboard.next_gc_recycle=次回のGCリサイクル
-dashboard.last_gc_time=前回GCからの時間
-dashboard.total_gc_time=GC一時停止の合計
-dashboard.total_gc_pause=GC一時停止の合計
-dashboard.last_gc_pause=直近のGC一時停止
-dashboard.gc_times=GC実行回数
-
-users.user_manage_panel=ユーザー管理パネル
-users.new_account=新規アカウントを作成
-users.name=名前
-users.activated=アクティブ化
-users.admin=アドミン
-users.repos=リポジトリ
-users.created=作成されました
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=編集
-users.auth_source=Authentication Source
-users.local=ローカル
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=アカウントのプロファイルが更新されました。
-users.edit_account=アカウントの編集
-users.is_activated=アカウントがアクティブされました
-users.is_admin=このアカウントには管理者の権限を持つ
-users.allow_git_hook=このアカウントには Git のフックを作成する権限を持つ
-users.update_profile=アカウント ・ プロファイルを更新
-users.delete_account=このアカウントを削除
-users.still_own_repo=アカウント所有のリポジトリがあり、リポジトリの削除または所有者の移譲が必要です。
-users.still_has_org=アカウントはまだ組織のメンバーであり、組織から退出するか削除する必要があります。
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=組織の管理パネル
-orgs.name=名前
-orgs.teams=チーム
-orgs.members=メンバー
-
-repos.repo_manage_panel=リポジトリの管理パネル
-repos.owner=オーナー
-repos.name=名前
-repos.private=プライベート
-repos.watches=Watches
-repos.stars=Stars
-repos.issues=課題
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Add New Source
-auths.name=名前
-auths.type=タイプ
-auths.enabled=Enabled
-auths.updated=Updated
-auths.auth_type=Authentication Type
-auths.auth_name=Authentication Name
-auths.domain=ドメイン
-auths.host=ホスト
-auths.port=ポート
-auths.bind_dn=Bind DN
-auths.bind_password=Bind Password
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=名前属性
-auths.attribute_surname=名字属性
-auths.attribute_mail=Eメール属性
-auths.filter=User Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=SMTP ホスト
-auths.smtpport=SMTP ポート
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=TLS 暗号化を有効にする
-auths.skip_tls_verify=Skip TLS Verify
-auths.pam_service_name=PAMサービス名
-auths.enable_auto_register=自動登録を有効にする
-auths.tips=ヒント
-auths.edit=Edit Authentication Setting
-auths.activated=認証がアクティブされました
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Authentication setting has been updated successfully.
-auths.update=Update Authentication Setting
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=サーバーの構成
-config.app_name=アプリケーション名
-config.app_ver=アプリケーションのバージョン
-config.app_url=アプリケーションの URL
-config.domain=ドメイン
-config.offline_mode=オフラインモード
-config.disable_router_log=ルーターのログを無効にする
-config.run_user=実行ユーザ
-config.run_mode=実行モード
-config.repo_root_path=リポジトリのルートパス
-config.static_file_root_path=静的ファイルのルートパス
-config.log_file_root_path=ログ ファイルのルート パス
-config.script_type=スクリプトの種類
-config.reverse_auth_user=リバース認証ユーザ
-config.db_config=データベースの構成
-config.db_type=タイプ
-config.db_host=ホスト
-config.db_name=名前
-config.db_user=ユーザ
-config.db_ssl_mode=SSL モード
-config.db_ssl_mode_helper=(「postgres」のみ)
-config.db_path=パス
-config.db_path_helper=(for "sqlite3" and "tidb")
-config.service_config=サービスの構成
-config.register_email_confirm=電子メールの確認を必要
-config.disable_register=登録を無効にする
-config.show_registration_button=登録ボタンを表示します。
-config.require_sign_in_view=サインインを要求
-config.enable_cache_avatar=アバターのキャッシュを有効にします。
-config.mail_notify=メール通知
-config.disable_key_size_check=Disable Minimum Key Size Check
-config.enable_captcha=Enable Captcha
-config.active_code_lives=コードリンクの有効期限をアクティブ
-config.reset_password_code_lives=パスワードリンクの有効期限をリセット
-config.webhook_config=Webhook設定
-config.queue_length=Queue Length
-config.deliver_timeout=送信タイムアウト
-config.skip_tls_verify=TLSの確認を省略
-config.mailer_config=メーラーの構成
-config.mailer_enabled=有効にした
-config.mailer_disable_helo=HELOコマンド無効
-config.mailer_name=名前
-config.mailer_host=ホスト
-config.mailer_user=ユーザ
-config.oauth_config=OAuth 構成
-config.oauth_enabled=Enabled
-config.cache_config=キャッシュの構成
-config.cache_adapter=キャッシュ アダプター
-config.cache_interval=キャッシュ間隔
-config.cache_conn=キャッシュ接続
-config.session_config=セッションの構成
-config.session_provider=セッション プロバイダー
-config.provider_config=プロバイダーの構成
-config.cookie_name=クッキー名
-config.enable_set_cookie=クッキーの設定を有効にする
-config.gc_interval_time=GC 間隔
-config.session_life_time=セッションのライフタイム
-config.https_only=HTTPS のみ
-config.cookie_life_time=クッキーのライフタイム
-config.picture_config=画像構成
-config.picture_service=画像サービス
-config.disable_gravatar=グラバターを無効にする
-config.log_config=ログの構成
-config.log_mode=ログ モード
-
-monitor.cron=Cron タスク
-monitor.name=名前
-monitor.schedule=スケジュール
-monitor.next=次回
-monitor.previous=前回
-monitor.execute_times=実行回数
-monitor.process=実行中のプロセス
-monitor.desc=説明
-monitor.start=開始日時
-monitor.execute_time=実行時間:
-
-notices.system_notice_list=システム通知
-notices.type=タイプ
-notices.type_1=リポジトリ
-notices.desc=説明
-notices.op=Op。
-notices.delete_success=システム通知が正常に削除されました。
-
-[action]
-create_repo=リポジトリ <a href="%s"> %s</a>を作成しました
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=<a href="%[1]s">%[3]s</a>を<a href="%[1]s/src/%[2]s">%[2]s</a>にプッシュしました
-create_issue=`問題 <a href="%s/issues/%s">%s#%[2]s</a> を開きました`
-create_pull_request=`created 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=`merged 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="%[1]s">%[3]s</a> に タグ <a href="%[1]s/src/%[2]s">%[2]s</a> をプッシュしました
-compare_2_commits=これら 2 のコミットの比較を閲覧する
-
-[tool]
-ago=前
-from_now=今から
-now=今
-1s=1 秒 %s
-1m=1 分 %s
-1h=1 時間 %s
-1d=1 日 %s
-1w=1 週間 %s
-1mon=1 ヶ月 %s
-1y=1 年間 %s
-seconds=%d 秒 %s
-minutes=%d 分の %s
-hours=%d 時間 %s
-days=%d 日 %s
-weeks=%d 週間 %s
-months=%d ヶ月 %s
-years=%d 年 %s
-raw_seconds=秒
-raw_minutes=分
-
-[dropzone]
-default_message=Drop files here or click to upload.
-invalid_input_type=You can't upload files of this type.
-file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
-remove_file=Remove file
-
+app_desc=Go言語で実装したセルフホストGitサービス
+
+home=ホーム
+dashboard=ダッシュボード
+explore=エスクプローラ
+help=ヘルプ
+sign_in=サインイン
+sign_out=サインアウト
+sign_up=サインアップ
+register=登録
+website=WEBサイト
+version=バージョン
+page=ページ
+template=テンプレート
+language=言語
+create_new=作成...
+user_profile_and_more=ユーザープロファイルなど
+signed_in_as=サインイン済み
+
+username=ユーザ名
+email=E-mail
+password=パスワード
+re_type=再入力
+captcha=キャプチャ
+
+repository=リポジトリ
+organization=組織
+mirror=ミラー
+new_repo=新しいリポジトリ
+new_migrate=新しい移行
+new_fork=新しいフォークのリポジトリ
+new_org=新しい組織
+manage_org=組織を管理
+admin_panel=管理者パネル
+account_settings=アカウント設定
+settings=設定
+your_profile=あなたのプロファイル
+your_settings=あなたの設定
+
+news_feed=ニュースのフィード
+pull_requests=プルリクエスト
+issues=課題
+
+cancel=キャンセル
+
+[search]
+search=検索...
+repository=リポジトリ
+user=ユーザ
+issue=課題
+code=コード
+
+[install]
+install=インストール
+title=初回実行のインストール手順
+docker_helper=DockerでGogsを稼動する場合、このページに変更を加えるまえに、 <a target="_blank" href="%s">Guidelines</a>をよく読んでください!
+requite_db_desc=Gogs は、MySQL、PostgreSQL、SQLite3 または TiDB が必要です。
+db_title=データベース設定
+db_type=データベースの種類
+host=ホスト
+user=ユーザ
+password=パスワード
+db_name=データベース名
+db_helper=Mysql INNODB エンジン utf8_general_ci の文字セットを使用してください。
+ssl_mode=SSL モード
+path=パス
+sqlite_helper=SQLite3 または TiDB のデータベースのファイル パス。
+err_empty_db_path=SQLite3 または TiDB データベースのパスを空にすることはできません。
+err_invalid_tidb_name=TiDB データベース名は文字"."と"-"を許可しない。
+no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
+err_empty_admin_password=管理者パスワードは空白にできません。
+
+general_title=Gogs の全般設定
+app_name=アプリケーション名
+app_name_helper=素晴らしい組織名を入れてください!
+repo_path=リポジトリのルートパス
+repo_path_helper=すべての Git リモート リポジトリはこのディレクトリに保存されます。
+run_user=実行ユーザ
+run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス、及びGogs を実行する権限を所有する必要があります。
+domain=ドメイン
+domain_helper=これはSSHクローンURLに影響する。
+ssh_port=SSH ポート
+ssh_port_helper=あならのSSHサーバおポート番号、SSH機能を無効するにはここを空白のままにしてください。
+http_port=HTTP ポート
+http_port_helper=アプリケーションが待ち受けするポート番号。
+app_url=アプリケーションの URL
+app_url_helper=この設定は、HTTP / HTTPSのクローンURLおよび、一部のメールボックスへのリンクに影響を与えます。
+
+optional_title=オプション設定
+email_title=E-mailサービス設定
+smtp_host=SMTP ホスト
+smtp_from=差出人
+smtp_from_helper=送信者メールアドレス、RFC 5322。フォーマットはメールアドレスのみ、または"Name" <email@example.com>。
+mailer_user=送信者の電子メール
+mailer_password=送信者のパスワード
+register_confirm=登録の確認を有効にする
+mail_notify=メール通知を有効にする
+server_service_title=サーバーとその他のサービスの設定
+offline_mode=オフラインモード有効化
+offline_mode_popup=プロダクション モードでCDN を無効にし、すべてのリソースファイルをローカルで提供します 。
+disable_gravatar=Gravatarのサービスを無効にします
+disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
+disable_registration=自己登録を無効にする
+disable_registration_popup=自己登録を無効にし、管理者のみがアカウント作成できる
+enable_captcha=Captchaを有効にする
+enable_captcha_popup=ユーザによる自己登録のため、有効なcaptchaが必要です。
+require_sign_in_view=サインインしたユーザのみページ閲覧を許可
+require_sign_in_view_popup=サインインしたユーザのみがページを閲覧できます。ビジターはサインインもしくはサインアップページのみ見られます。
+admin_setting_desc=今管理者アカウントを作成する必要はありません。ID = 1のユーザ は自動的に管理者の権限を獲得します。
+admin_title=管理者アカウントの設定
+admin_name=ユーザ名
+admin_password=パスワード
+confirm_password=パスワード確認
+admin_email=管理者の電子メール
+install_gogs=Gogs をインストール
+test_git_failed='Git' コマンドテストに失敗: %v
+sqlite3_not_available=このリリース バージョンは SQLite3 をサポートしていません。gobuild バージョンではない、公式のバイナリ バージョンを %s からダウンロードしてください。
+invalid_db_setting=データベースの設定が正しくありません: %v
+invalid_repo_path=リポジトリのルート パスが無効です: %v
+run_user_not_match=実行ユーザーは、現在のユーザーではない: %s-> %s
+save_config_failed=構成の保存に失敗した: %v
+invalid_admin_setting=管理者アカウントの設定が無効です: %v
+install_success=ようこそ!我々はあなたが Gogs を選んでくれて嬉しいです!楽しみましょう!
+
+[home]
+uname_holder=ユーザー名またはEメール
+password_holder=パスワード
+switch_dashboard_context=ダッシュ ボードのコンテキストを切替
+my_repos=私のリポジトリ
+collaborative_repos=共同リポジトリ
+my_orgs=私の組織
+my_mirrors=私のミラー
+view_home=ビュー %s
+
+issues.in_your_repos=あなたのリポジトリ
+
+[explore]
+repos=リポジトリ
+
+[auth]
+create_new_account=新規アカウントを作成
+register_hepler_msg=すでにアカウントをお持ちですか?今すぐログイン !
+social_register_hepler_msg=すでにアカウントをお持ちですか?今すぐバインド !
+disable_register_prompt=申し訳ありませんが、登録が無効になっています。サイト管理者に問い合わせてください。
+disable_register_mail=申し訳ありませんが、登録メールの確認機能が無効になっています。
+remember_me=ログイン状態を保持する
+forgot_password=パスワードを忘れた
+forget_password=パスワードを忘れた?
+sign_up_now=アカウントが必要ですか?今すぐサインアップ
+confirmation_mail_sent_prompt=新しい確認メールを <b>%s</b> に送りました。登録を完了させるために、%d時間以内にあなたのメールボックスを確認してください。
+active_your_account=アカウントをアクティブ
+resent_limit_prompt=申し訳ありませんが、アクティベーションメールは頻繁に送信しています。3 分お待ちください。
+has_unconfirmed_mail=こんにちは %s さん、あなたの電子メール アドレス (<b>%s</b>) は未確認です。もし確認メールをまだ確認できていないか、改めて再送信する場合は、下のボタンをクリックしてください。
+resend_mail=アクティベーションメールを再送信するにはここをクリック
+email_not_associate=この電子メール アドレスは、アカウントには関連付けられません。
+send_reset_mail=パスワードリセットのメールを再送するにはここをクリック
+reset_password=パスワードリセット
+invalid_code=申し訳ありませんが、確認用コードが期限切れまたは無効です。
+reset_password_helper=パスワードをリセットするにはここをクリック
+password_too_short=6文字未満のパスワードは設定できません。
+
+[mail]
+activate_account=あなたのアカウントを有効にしてください。
+activate_email=電子メール アドレスを確認します。
+reset_password=パスワードをリセットします.
+register_success=ようこそ、登録成功
+register_notify=Welcome on board
+
+[modal]
+yes=はい
+no=いいえ
+modify=変更
+
+[form]
+UserName=ユーザ名
+RepoName=リポジトリ名
+Email=Eメールアドレス
+Password=パスワード
+Retype=パスワードを再入力
+SSHTitle=SSH キーの名前
+HttpsUrl=HTTPS URL
+PayloadUrl=ペイロードの URL
+TeamName=チーム名
+AuthName=承認名
+AdminEmail=管理者の電子メール
+
+require_error=空にできません
+alpha_dash_error=アルファベット、数字、ハイフン"-"、アンダースコア"_"のいずれかの必要があります
+alpha_dash_dot_error=' アルファベット、数値、ダッシュ(-)、アンダースコア(_) 、ドット(.)のいずれかを入力する必要があります。 '
+size_error=`サイズは %s である必要があります`
+min_size_error=' 少なくとも %s 文字の必要があります '
+max_size_error=' %s 文字以下の必要があります '
+email_error=' は有効な電子メール アドレスではない '
+url_error=' は有効な URL はありません。 '
+include_error=' 文字列 '%s' を含める必要があります。 '
+unknown_error=不明なエラー:
+captcha_incorrect=Captcha が一致しませんでした。
+password_not_match=パスワードと確認用パスワードが一致同していません。
+
+username_been_taken=ユーザー名は既に使用されています。
+repo_name_been_taken=リポジトリ名は既に使用されています。
+org_name_been_taken=組織名は既に使用されています。
+team_name_been_taken=チーム名は既に使用されています。
+email_been_used=電子メール アドレスは既に使用されています。
+illegal_team_name=チーム名に無効な文字が含まれています。
+username_password_incorrect=ユーザー名またはパスワードが正しくありません。
+enterred_invalid_repo_name=入力したリポジトリの名前が正しいかどうかを確認してください。
+enterred_invalid_owner_name=入力された所有者名が正しいかどうかを確認してください。
+enterred_invalid_password=入力したパスワードが正しいかを確認してください。
+user_not_exist=指定されたユーザーは存在しません。
+last_org_owner=削除するユーザーはチームの最後のメンバーです。別の所有者設定が必要です。
+
+invalid_ssh_key=SSHを確認できません:%s
+unable_verify_ssh_key=GogsはあなたのSSH keyを確認できません。しかし、我々は有効とみなしますので、自分自身で確認してください。
+auth_failed=認証に失敗しました: %v
+
+still_own_repo=アカウント所有のリポジトリがあり、リポジトリの削除または所有者の移譲が必要です。
+still_has_org=アカウントはまだ組織のメンバーであり、組織から退出するか削除する必要があります。
+org_still_own_repo=この組織はまだリポジトリの所有しています、リポジトリを削除または転送する必要があります。
+
+still_own_user=この認証はまだ一部のユーザーによって使用されています。一部のユーザを移動させてから、もう一度削除してください。
+
+target_branch_not_exist=ターゲットブランチが存在しない
+
+[user]
+change_avatar=gravatar.com で自分のアバターを変更
+change_custom_avatar=設定で自分のアバターを変更
+join_on=参加しました
+repositories=リポジトリ
+activity=パブリック・アクティビティ
+followers=フォロワー
+starred=スター
+following=フォロー
+
+form.name_reserved=ユーザー名 '%s' は予約されています。
+form.name_pattern_not_allowed=ユーザ名のパターン '%s' は許可されていません。
+
+[settings]
+profile=プロフィール
+password=パスワード
+ssh_keys=SSH キー
+social=SNSアカウント
+applications=アプリケーション
+orgs=組織
+delete=アカウントを削除
+uid=Uid
+
+public_profile=パブリック プロフィール
+profile_desc=あなたのメールアドレスは公開され、任意のアカウント関連の通知に使用されます。また、Webベースの操作はサイトを介して行います。
+full_name=フルネーム
+website=WEBサイト
+location=ロケーション
+update_profile=プロファイル更新
+update_profile_success=あなたのプロフィールが更新されました。
+change_username=ユーザー名が変更されました
+change_username_prompt=この変更はリンクをアカウントに関連付ける方法に影響します。
+continue=続行
+cancel=キャンセル
+
+enable_custom_avatar=カスタムのアバターを有効にする
+enable_custom_avatar_helper=Gravatarからのフェッチを無効にするのを、有効にします
+choose_new_avatar=新しいアバターを選択
+update_avatar=アバターの設定を更新
+uploaded_avatar_not_a_image=アップロードされたファイルは画像ではない。
+no_custom_avatar_available=利用可能なカスタム アバターがないため、有効にできません。
+update_avatar_success=あなたのアバターの設定が更新されました。
+
+change_password=パスワードを変更
+old_password=現在のパスワード
+new_password=新しいパスワード
+retype_new_password=新しいパスワードを再入力します。
+password_incorrect=現在のパスワードが正しくありません。
+change_password_success=パスワードが正常に変更されました。今すぐ新しいパスワード経由でサインインすることができます。
+
+emails=E-mail アドレス
+manage_emails=E-mail アドレスを管理
+email_desc=あなたのプライマリメールアドレスは、通知やその他の操作に使用されます。
+primary=プライマリー
+primary_email=プライマリに設定
+delete_email=削除
+email_deletion=電子メールの削除
+email_deletion_desc=この電子メール アドレスを削除すると、あなたのアカウントの関連情報も削除されます。続行しますか。
+email_deletion_success=電子メールが正常に削除されました。
+add_new_email=新しいe-mailアドレスを追加
+add_email=電子メールを追加します。
+add_email_confirmation_sent='%s' に新しい確認メールを送信しました、次の %d 時間以内に受信トレイを確認し、確認プロセスを完了してください。
+add_email_success=新しいe-mail アドレスが追加されました。
+
+manage_ssh_keys=SSH キーを管理
+add_key=キーを追加
+ssh_desc=これはあなたのアカウントに関連付けられている SSH キーの一覧です。あなたが認識していないキーを削除します。
+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=同じ名前の公開鍵は既に存在しています。
+key_name=キーの名前
+key_content=コンテンツ
+add_key_success=新しいSSHキー '%s' が正常に追加されました!
+delete_key=削除
+ssh_key_deletion=SSH キーの削除
+ssh_key_deletion_desc=このSSHキーを削除すると、あなたのアカウントに関連するすべてのアクセスが削除されます。続行しますか?
+ssh_key_deletion_success=SSH キーは正常に削除されました!
+add_on=追加された
+last_used=最終使用日
+no_activity=最近の活動なし
+key_state_desc=この鍵は7日間以内に使われています。
+token_state_desc=この鍵は7日間以内に使われています。
+
+manage_social=関連付けられているSNSアカウントを管理
+social_desc=これは関連付けられたソーシャルアカウントのリストです。あなたが認識していない結び付けを削除します。
+unbind=バインド解除
+unbind_success=SNSアカウントがバインドされていない。
+
+manage_access_token=個人のアクセス トークンを管理
+generate_new_token=新しいトークンを生成
+tokens_desc=生成したトークンを利用して Gogs の API にアクセスすることができます。
+new_token_desc=今のところ、全てのトークンはあなたのアカウントにフルアクセスできます。
+token_name=トークン名
+generate_token=トークンを生成
+generate_token_succees=新しいアクセス トークンは正常に生成されました !今すぐあなたの新しいアクセス トークンをコピーしておいてください。二度と見ることはできませんので確認してください!
+delete_token=削除
+access_token_deletion=パーソナルアクセストークンの削除
+access_token_deletion_desc=パーソナルアクセストークンを削除すると、関連するアプリケーションのすべてのアクセスが削除されます。続行しますか?
+delete_token_success=パーソナルアクセストークンは正常に削除されました!同時にあなたのアプリケーションを更新することを忘れないでください。
+
+delete_account=アカウントを削除
+delete_prompt=この操作はあなたのアカウントを完全に削除し、復旧<strong>できない</strong> !
+confirm_delete_account=削除の確認
+delete_account_title=アカウントの削除
+delete_account_desc=このアカウントは永久に削除しようとしている、継続しますか?
+
+[repo]
+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_fork_helper=(この値の変更はすべてのフォークに適用されます)
+clone_helper=クローニングのヘルプが必要ですか?<a target="_blank"href="%s"> ヘルプ</a> を参照してください!
+fork_repo=フォークのリポジトリ
+fork_from=フォーク元
+fork_visiblity_helper=フォークされたリポジトリは可視状態を変更できません
+repo_desc=説明
+repo_lang=言語
+repo_lang_helper=.gitignoreファイルを選択
+license=ライセンス
+license_helper=ライセンス ファイルを選択
+readme=Readme
+readme_helper=Readme ファイルのテンプレートを選択
+auto_init=選択されたファイルおよびテンプレートでリポジトリを初期化
+create_repo=リポジトリを作成
+default_branch=デフォルトのブランチ
+mirror_interval=ミラー 間隔(時)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=リポジトリ名 '%s' は予約されています。
+form.name_pattern_not_allowed=リポジトリ名のパターン '%s' は許可されていません。
+
+need_auth=認証が必要
+migrate_type=マイグレーションの種類
+migrate_type_helper=このリポジトリは、<span class="text blue"> ミラー</span> になります
+migrate_repo=リポジトリを移行
+migrate.clone_address=クローンアドレス
+migrate.clone_address_desc=これは、HTTP/HTTPS/GIT URL またはローカル サーバー パスを設定できます。
+migrate.permission_denied=You are not allowed to import local repositories.
+migrate.invalid_local_path=ローカルパスが無効です。存在しないかディレクトリではありません。
+migrate.failed=Migration failed: %v
+
+forked_from=フォーク元
+fork_from_self=すでにあなたの所有しているリポジトリはフォークできません
+copy_link=コピー
+copy_link_success=コピーされました!
+copy_link_error=⌘ C または Ctrl-C キーを押してコピー
+copied=コピー成功
+unwatch=Unwatch
+watch=Watch
+unstar=Unstar
+star=Star
+fork=Fork
+
+no_desc=説明なし
+quick_guide=クイック ガイド
+clone_this_repo=このリポジトリのクローンを作成
+create_new_repo_command=コマンドラインで新しいリポジトリを作成します。
+push_exist_repo=コマンド ・ ラインから既存のリポジトリをプッシュ
+repo_is_empty=このリポジトリは空です、後で戻って来て下さい!
+
+branch=ブランチ
+tree=ツリー
+filter_branch_and_tag=Filter branch or tag
+branches=ブランチ
+tags=タグ
+issues=課題
+pulls=プルリクエスト
+labels=ラベル
+milestones=マイルストーン
+commits=コミット
+releases=リリース
+file_raw=生データ
+file_history=履歴
+file_view_raw=生データを見る
+file_permalink=パーマリンク
+
+commits.commits=コミット
+commits.search=コミットの検索
+commits.find=検索
+commits.author=作者
+commits.message=メッセージ
+commits.date=日付
+commits.older=古い
+commits.newer=新しい
+
+issues.new=新しい問題
+issues.new.labels=ラベル
+issues.new.no_label=ラベルなし
+issues.new.clear_labels=ラベルをクリア
+issues.new.milestone=マイルストーン
+issues.new.no_milestone=マイルストーンなし
+issues.new.clear_milestone=マイルストーンをクリア
+issues.new.open_milestone=オープン中のマイルストーン
+issues.new.closed_milestone=クローズされたマイルストーン
+issues.new.assignee=担当者
+issues.new.clear_assignee=担当者をクリア
+issues.new.no_assignee=担当者なし
+issues.create=問題を作成
+issues.new_label=新しいラベル
+issues.new_label_placeholder=ラベル名...
+issues.create_label=ラベルを作成
+issues.open_tab=%d オープン
+issues.close_tab=%d クローズ
+issues.filter_label=ラベル
+issues.filter_label_no_select=選択したラベルがありません。
+issues.filter_milestone=マイルストーン
+issues.filter_milestone_no_select=選択されたマイルストーンなし
+issues.filter_assignee=アサインされた人
+issues.filter_assginee_no_select=選択可能な担当者がいない
+issues.filter_type=タイプ
+issues.filter_type.all_issues=すべての問題
+issues.filter_type.assigned_to_you=あなたに割り当てられました。
+issues.filter_type.created_by_you=あなたが作成しました。
+issues.filter_type.mentioning_you=あなたに伝える
+issues.filter_sort=並べ替え
+issues.filter_sort.latest=最新
+issues.filter_sort.oldest=最も古い
+issues.filter_sort.recentupdate=最近更新された
+issues.filter_sort.leastupdate=Least recently updated
+issues.filter_sort.mostcomment=一番多いコメント
+issues.filter_sort.leastcomment=一番少ないコメント
+issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=opened %[1]s by %[2]s
+issues.previous=前ページ
+issues.next=次ページ
+issues.open_title=オープン
+issues.closed_title=クローズ
+issues.num_comments=%d コメント
+issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=まだコンテンツがありません
+issues.close_issue=閉じる
+issues.close_comment_issue=コメントと閉じる
+issues.reopen_issue=Reopen
+issues.reopen_comment_issue=コメントと再開
+issues.create_comment=コメント 
+issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=ポスター
+issues.admin=アドミン
+issues.owner=オーナー
+issues.sign_up_for_free=無料でサインアップ
+issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
+issues.edit=編集
+issues.cancel=キャンセル
+issues.save=保存
+issues.label_title=ラベル名
+issues.label_color=ラベルの色
+issues.label_count=%d ラベル
+issues.label_open_issues=%d 未解決の問題
+issues.label_edit=編集
+issues.label_delete=削除
+issues.label_modify=ラベルの変更
+issues.label_deletion=ラベルの削除
+issues.label_deletion_desc=ラベルを削除すると、関連するすべての問題の情報が削除されます。続行しますか。
+issues.label_deletion_success=ラベルは正常に削除されました。
+
+pulls.new=New Pull Request
+pulls.compare_changes=変更を比較
+pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。
+pulls.compare_base=ベース
+pulls.compare_compare=比較
+pulls.filter_branch=フィルターブランチ
+pulls.no_results=結果が見つかりませんでした。
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=プルリクエストを作成します。
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=会話
+pulls.tab_commits=コミット
+pulls.tab_files=ファイルが変更された
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=マージされた
+pulls.has_merged=このプルプルリクエストは正常にマージされました!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=それを解決するためにコマンド ライン ツールを使用してください。
+pulls.merge_pull_request=プルリクエストをマージします。
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=新しいマイルストーン
+milestones.open_tab=%d オープン
+milestones.close_tab=%d クローズ
+milestones.closed=%s を閉じました
+milestones.no_due_date=期限なし
+milestones.open=開く
+milestones.close=閉じる
+milestones.new_subheader=あなたの課題を整理するためマイルス トーンを作成します。
+milestones.create=マイルス トーンを作成
+milestones.title=タイトル
+milestones.desc=説明
+milestones.due_date=期日 (オプション)
+milestones.clear=消去
+milestones.invalid_due_date_format=期限日付のフォーマットが無効、'yyyy-mm-dd' のフォーマットが必要です。
+milestones.create_success=マイルス トーン '%s' が正常に作成されました!
+milestones.edit=マイルス トーンを編集
+milestones.edit_subheader=人々を混乱させないため、マイルス トーンにより良い説明を使用します。
+milestones.cancel=キャンセル
+milestones.modify=マイルス トーンを変更します。
+milestones.edit_success=マイルス トーン '%s' の変更が正常に保存されました。
+milestones.deletion=マイルス トーンの削除
+milestones.deletion_desc=このマイルス トーンを削除すると、関連課題に該当情報が削除されます。続行しますか。
+milestones.deletion_success=マイルス トーンは正常に削除されました。
+
+settings=設定
+settings.options=オプション
+settings.collaboration=コラボレーション
+settings.hooks=Webhooks
+settings.githooks=Git のフック
+settings.basic_settings=基本設定
+settings.danger_zone=危険地帯
+settings.site=公式サイト
+settings.update_settings=設定の更新
+settings.change_reponame_prompt=この変更はリンクがリポジトリに関連付ける方法に影響します。
+settings.transfer=オーナー移転
+settings.transfer_desc=リポジトリをあなたが管理者権限を持っている別のユーザーまた組織に移譲します。
+settings.new_owner_has_same_repo=新しいオーナーは、既に同じ名前のリポジトリを持っています。
+settings.delete=このリポジトリを削除
+settings.delete_desc=リポジトリを削除すると元に戻せません。確実に確認してください。
+settings.transfer_notices_1=-新しい所有者が個人ユーザーの場合、あなたがアクセスできなくなります。
+settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
+settings.transfer_form_title=操作を確認するために、以下の情報を入力してください。
+settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
+settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
+settings.update_settings_success=リポジトリ オプションが更新されました。
+settings.transfer_owner=新しいオーナー
+settings.make_transfer=転送
+settings.transfer_succeed=リポジトリの所有権は正常に転送されました。
+settings.confirm_delete=削除の確認
+settings.add_collaborator=新しい共同編集者を追加
+settings.add_collaborator_success=新しい共同編集者が追加されました。
+settings.remove_collaborator_success=共同編集者が削除されました。
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=ユーザーは組織の一員なので、共同編集者として追加することはできません。
+settings.add_webhook=Webhook を追加
+settings.hooks_desc=Webhooksは、Gogsで特定のイベントの発生時に指定された外部サービスに通知を許可します。イベントが発生すると、それぞれ指定されたUrlに、POSTリクエストが送られます。詳細はこちらのの <a target="_blank"href="%s"> Webhooks ガイド</a>をご覧ください。
+settings.webhook_deletion=Webhook を削除
+settings.webhook_deletion_desc=このwebhookを削除すると、すべての情報と配信履歴が削除されます。続行しますか?
+settings.webhook_deletion_success=Webhook が正常に削除されました。
+settings.webhook.request=リクエスト
+settings.webhook.response=レスポンス
+settings.webhook.headers=ヘッダ
+settings.webhook.payload=ペイロード
+settings.webhook.body=ボディ
+settings.githooks_desc=Git のフックは Git 自体によって提供されています。以下のリストのファイルを編集して、サポートされているフックのカスタム操作を適用することができます。
+settings.githook_edit_desc=もしフックがアクティブではない場合は、サンプルコンテンツが表示されます。コンテンツを空白にするにはこのフックを無効にします。
+settings.githook_name=フックの名前
+settings.githook_content=コンテンツをフック
+settings.update_githook=フックを更新
+settings.add_webhook_desc=私たちは、指定されたURLに購読されたイベントの詳細を <code>POST</code>リクエストとして送信します。あなたは、異なるデータ受信モード(JSONまたは, <code>x-www-form-urlencoded</code>, <em>その他</em>) を設定することができます。詳細については、<a target="_blank" href="%s">Webhookガイド</a>を参照してください。
+settings.payload_url=ペイロードの URL
+settings.content_type=コンテンツ タイプ
+settings.secret=秘密
+settings.slack_username=ユーザ名
+settings.slack_icon_url=アイコン URL
+settings.slack_color=カラー
+settings.event_desc=どのイベントをこのWEBフックのトリガーにしますか?
+settings.event_push_only=<code>push</code> イベントのみ
+settings.event_send_everything=<strong>すべて</strong> が必要です。
+settings.event_choose=必要なものを選択しましょう。
+settings.event_create=Create
+settings.event_create_desc=ブランチ、またはタグを作成
+settings.event_push=プッシュ
+settings.event_push_desc=Git リポジトリにプッシュ
+settings.active=アクティブ
+settings.active_helper=このフックのトリガーが引かれた時に、イベントの詳細を配信します。
+settings.add_hook_success=新しい webhook が追加されました。
+settings.update_webhook=Webhookを更新
+settings.update_hook_success=Webhook を更新しました。
+settings.delete_webhook=Webhook を削除
+settings.recent_deliveries=最近のデリバリー
+settings.hook_type=フックタイプ
+settings.add_slack_hook_desc=<a href="%s"> Slack</a> インテグレーションをリポジトリに追加します。
+settings.slack_token=トークン
+settings.slack_domain=ドメイン
+settings.slack_channel=チャンネル
+settings.deploy_keys=デプロイキー
+settings.add_deploy_key=デプロイキーを追加
+settings.no_deploy_keys=でプロキーは1つも追加されていません。
+settings.title=タイトル
+settings.deploy_key_content=コンテント
+settings.key_been_used=デプロイキーが使用されています。
+settings.key_name_used=同じ名前のデプロイキーが既に存在しています。
+settings.add_key_success=新しいデプロイキー '%s'が正常に追加されました!
+settings.deploy_key_deletion=デプロイキーを削除
+settings.deploy_key_deletion_desc=このデプロイキーを削除すると、このリポジトリに関連するすべてのアクセス権も削除されます。続行しますか。
+settings.deploy_key_deletion_success=デプロイキーが正常に削除された!
+
+diff.browse_source=ソースを参照
+diff.parent=親
+diff.commit=コミット
+diff.data_not_available=差分データは利用できません。
+diff.show_diff_stats=差分情報を表示
+diff.stats_desc=共有<strong>%d 個のファイルを変更した</strong>、<strong>%d 個の追加</strong> と <strong>%d 個の削除</strong>を含む
+diff.bin=BIN
+diff.view_file=ファイルの表示
+
+release.releases=リリース
+release.new_release=新しいリリース
+release.draft=ドラフト
+release.prerelease=プレリリース
+release.stable=安定
+release.edit=編集
+release.ahead=このリリース以降 %s へ <strong>%d</strong> コミット
+release.source_code=ソース コード
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=タグ名
+release.target=ターゲット
+release.tag_helper=既存のタグを選択するか、新しいタグを作成し発行します。
+release.title=Title
+release.content=Content
+release.write=書込み
+release.preview=プレビュー
+release.loading=読み込み中…
+release.prerelease_desc=これはリリース前のものです
+release.prerelease_helper=このリリースは非プロダクション利用として識別します。
+release.cancel=Cancel
+release.publish=リリースを発行
+release.save_draft=下書きを保存
+release.edit_release=リリースを編集
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=このタグ名には既にリリースが存在します。
+release.downloads=Downloads
+
+[org]
+org_name_holder=組織名
+org_full_name_holder=組織のフルネーム
+org_name_helper=偉大な組織の名は短く覚えやすいです。
+create_org=組織を作成
+repo_updated=更新した
+people=人々
+invite_someone=誰かを招待
+teams=チーム
+lower_members=メンバー
+lower_repositories=リポジトリ
+create_new_team=新しいチームを作成
+org_desc=説明
+team_name=チーム名
+team_desc=説明
+team_name_helper=会話の時、この名前を使用しチーム名を表明します。
+team_desc_helper=このチームに関する全ての情報は?
+team_permission_desc=このチームに必要な権限レベルは?
+
+form.name_reserved=組織名 '%s' は予約されています。
+form.name_pattern_not_allowed=組織名のパターン '%s' は許可されていません。
+
+settings=設定
+settings.options=オプション
+settings.full_name=フルネーム
+settings.website=WEBサイト
+settings.location=ロケーション
+settings.update_settings=設定の更新
+settings.update_setting_success=組織の設定が更新されました。
+settings.change_orgname_prompt=This change will affect how links relate to the organization.
+settings.update_avatar_success=Organization avatar setting has been updated successfully.
+settings.delete=組織を削除
+settings.delete_account=この組織を削除
+settings.delete_prompt=操作はこの組織を完全に削除し、復旧<strong>できない</strong>!
+settings.confirm_delete_account=削除の確認
+settings.delete_org_title=組織の削除
+settings.delete_org_desc=この組織は完全に削除されます、継続しますか?
+settings.hooks_desc=この組織のもとで <strong>すべてのリポジトリ</strong> に対してトリガーされる webhook を追加します。
+
+members.public=パブリック
+members.public_helper=プライベートにする
+members.private=プライベート
+members.private_helper=公開する
+members.owner=オーナー
+members.member=メンバー
+members.conceal=隠す
+members.remove=削除
+members.leave=退出
+members.invite_desc=%s に招待する新しいメンバーをユーザ名を入力してください:
+members.invite_now=今すぐ招待
+
+teams.join=参加
+teams.leave=退出
+teams.read_access=読み取りアクセス権
+teams.read_access_helper=このチームはリポジトリの閲覧とクローンをすることができます。
+teams.write_access=書き込みアクセス権
+teams.write_access_helper=このチームはリポジトリを読むだけではなく、プッシュすることもできます。
+teams.admin_access=管理者のアクセス権
+teams.admin_access_helper=このチームはリポジトリにプッシュ/プル、及び他の共同編集者を追加することができます。
+teams.no_desc=このチームは説明がありません。
+teams.settings=設定
+teams.owners_permission_desc=オーナーは<strong>すべてのリポジトリ</strong> へのフルアクセス権、組織の <strong>管理権限</strong>を持ちます。
+teams.members=チーム メンバー
+teams.update_settings=設定の更新
+teams.delete_team=このチームを削除
+teams.add_team_member=チーム メンバーを追加
+teams.delete_team_title=チームの削除
+teams.delete_team_desc=このチームを削除します、継続しますか?このチームのメンバーはいくつかのリポジトリへのアクセスを失う可能性があります。
+teams.delete_team_success=指定のチームが正常に削除されました。
+teams.read_permission_desc=このチームは<strong>読み取り</strong>権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。
+teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
+teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
+teams.repositories=チームのリポジトリ
+teams.add_team_repository=チームのリポジトリを追加
+teams.remove_repo=削除(Remove)
+teams.add_nonexistent_repo=追加しようとしているリポジトリは存在しません。まずはじめに作成してください。
+
+[admin]
+dashboard=ダッシュボード
+users=ユーザ
+organizations=組織
+repositories=リポジトリ
+authentication=認証
+config=コンフィギュレーション
+notices=システム通知
+monitor=モニタリング
+first_page=First
+last_page=Last
+total=合計: %d
+
+dashboard.statistic=統計
+dashboard.operations=操作
+dashboard.system_status=システム モニターのステータス
+dashboard.statistic_info=Gogs データベースは <b>%d</b> ユーザ, <b>%d</b> 組織, <b>%d</b> 公開鍵, <b>%d</b> リポジトリ, <b>%d</b> ウォッチ, <b>%d</b> スター, <b>%d</b> 行動, <b>%d</b> アクセス, <b>%d</b> 問題, <b>%d</b> コメント, <b>%d</b> ソーシャルアカウント, <b>%d</b> フォロー, <b>%d</b> ミラー, <b>%d</b> リリース, <b>%d</b> ログイン元, <b>%d</b> webhook, <b>%d</b> マイルストーン, <b>%d</b> ラベル, <b>%d</b> フックタスク, <b>%d</b> チーム, <b>%d</b> アップデートタスク, <b>%d</b> 添付ファイル の情報を持っています。
+dashboard.operation_name=操作の名前
+dashboard.operation_switch=スイッチ
+dashboard.operation_run=実行
+dashboard.clean_unbind_oauth=結び付けられていない OAuth をクリーン
+dashboard.clean_unbind_oauth_success=結び付けられていない全ての OAuth を正常に削除しました。
+dashboard.delete_inactivate_accounts=非アクティブのアカウントをすべて削除
+dashboard.delete_inactivate_accounts_success=すべての非アクティブアカウントは正常に削除されました。
+dashboard.delete_repo_archives=リポジトリのすべてのアーカイブを削除
+dashboard.delete_repo_archives_success=リポジトリのすべてのアーカイブが正常に削除されました。
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=リポジトリでのガベージコレクションを実行します。
+dashboard.git_gc_repos_success=すべてのリポジトリは正常にガベージ コレクションを行いました。
+dashboard.resync_all_sshkeys='.ssh/ authorized_keys' ファイルを再生成します。(警告:Gogsキー以外は失われます)
+dashboard.resync_all_sshkeys_success=すべての公開鍵が正常に書き換えられました。
+dashboard.resync_all_update_hooks=リポジトリの update フックをすべて再更新する(カスタムの設定パスが変更されたときに必要)
+dashboard.resync_all_update_hooks_success=リポジトリの update フックがすべて正常に再更新されました。
+
+dashboard.server_uptime=サーバーの稼働時間
+dashboard.current_goroutine=現在のGoroutine
+dashboard.current_memory_usage=現在のメモリ使用量
+dashboard.total_memory_allocated=割り当てられたメモリの合計
+dashboard.memory_obtained=配分されたメモリ量
+dashboard.pointer_lookup_times=ポインタ参照回数
+dashboard.memory_allocate_times=メモリ割当回数
+dashboard.memory_free_times=メモリ解放回数
+dashboard.current_heap_usage=現在のヒープ使用量
+dashboard.heap_memory_obtained=配分されたヒープ メモリ量
+dashboard.heap_memory_idle=アイドルのヒープ メモリ量
+dashboard.heap_memory_in_use=使用中のヒープ メモリ
+dashboard.heap_memory_released=ヒープ メモリが解放されました
+dashboard.heap_objects=ヒープ オブジェクト
+dashboard.bootstrap_stack_usage=ブートストラップスタック使用量
+dashboard.stack_memory_obtained=配分されたスタック メモリ量
+dashboard.mspan_structures_usage=MSpan 構造体の使用量
+dashboard.mspan_structures_obtained=配分されたMSpan 構造体
+dashboard.mcache_structures_usage=MCache 構造体の使用量
+dashboard.mcache_structures_obtained=分配されたMCache 構造体
+dashboard.profiling_bucket_hash_table_obtained=ハッシュテーブル分析に割り当てられたメモリ
+dashboard.gc_metadata_obtained=GCメタデータ取得
+dashboard.other_system_allocation_obtained=他のシステムに割り当てられたメモリ
+dashboard.next_gc_recycle=次回のGCリサイクル
+dashboard.last_gc_time=前回GCからの時間
+dashboard.total_gc_time=GC一時停止の合計
+dashboard.total_gc_pause=GC一時停止の合計
+dashboard.last_gc_pause=直近のGC一時停止
+dashboard.gc_times=GC実行回数
+
+users.user_manage_panel=ユーザー管理パネル
+users.new_account=新規アカウントを作成
+users.name=名前
+users.activated=アクティブ化
+users.admin=アドミン
+users.repos=リポジトリ
+users.created=作成されました
+users.send_register_notify=登録通知をユーザーに送信
+users.new_success=New account '%s' has been created successfully.
+users.edit=編集
+users.auth_source=認証ソース
+users.local=ローカル
+users.auth_login_name=認証ログイン名
+users.password_helper=それをそのまま空のままにします。
+users.update_profile_success=アカウントのプロファイルが更新されました。
+users.edit_account=アカウントの編集
+users.is_activated=アカウントがアクティブされました
+users.is_admin=このアカウントには管理者の権限を持つ
+users.allow_git_hook=このアカウントには Git のフックを作成する権限を持つ
+users.allow_import_local=This account has permissions to import local repositories
+users.update_profile=アカウント ・ プロファイルを更新
+users.delete_account=このアカウントを削除
+users.still_own_repo=アカウント所有のリポジトリがあり、リポジトリの削除または所有者の移譲が必要です。
+users.still_has_org=アカウントはまだ組織のメンバーであり、組織から退出するか削除する必要があります。
+users.deletion_success=アカウントが正常に削除されました。
+
+orgs.org_manage_panel=組織の管理パネル
+orgs.name=名前
+orgs.teams=チーム
+orgs.members=メンバー
+
+repos.repo_manage_panel=リポジトリの管理パネル
+repos.owner=オーナー
+repos.name=名前
+repos.private=プライベート
+repos.watches=Watches
+repos.stars=Stars
+repos.issues=課題
+
+auths.auth_manage_panel=認証管理パネル
+auths.new=新しいソースを追加
+auths.name=名前
+auths.type=タイプ
+auths.enabled=Enabled
+auths.updated=Updated
+auths.auth_type=認証タイプ
+auths.auth_name=認証名
+auths.domain=ドメイン
+auths.host=ホスト
+auths.port=ポート
+auths.bind_dn=バインド DN
+auths.bind_password=バインド パスワード
+auths.bind_password_helper=警告: このパスワードは暗号化されずに格納されます。特権を持つアカウントに使用しないでください。
+auths.user_base=ユーザ検索ベース
+auths.user_dn=User DN
+auths.attribute_name=名前属性
+auths.attribute_surname=名字属性
+auths.attribute_mail=Eメール属性
+auths.filter=User フィルター
+auths.admin_filter=Admin フィルター
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP 認証の種類
+auths.smtphost=SMTP ホスト
+auths.smtpport=SMTP ポート
+auths.allowed_domains=許可されているドメイン
+auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
+auths.enable_tls=TLS 暗号化を有効にする
+auths.skip_tls_verify=TLSベリファイを省略
+auths.pam_service_name=PAMサービス名
+auths.enable_auto_register=自動登録を有効にする
+auths.tips=ヒント
+auths.edit=認証設定を編集
+auths.activated=認証がアクティブされました
+auths.new_success=新しい認証 '%s' が正常に追加されました。
+auths.update_success=認証の設定が正常に更新されました。
+auths.update=認証設定を更新
+auths.delete=この認証を削除
+auths.delete_auth_title=認証削除
+auths.delete_auth_desc=認証を削除します、継続しますか?
+auths.deletion_success=認証が正常に削除されました。
+
+config.server_config=サーバーの構成
+config.app_name=アプリケーション名
+config.app_ver=アプリケーションのバージョン
+config.app_url=アプリケーションの URL
+config.domain=ドメイン
+config.offline_mode=オフラインモード
+config.disable_router_log=ルーターのログを無効にする
+config.run_user=実行ユーザ
+config.run_mode=実行モード
+config.repo_root_path=リポジトリのルートパス
+config.static_file_root_path=静的ファイルのルートパス
+config.log_file_root_path=ログ ファイルのルート パス
+config.script_type=スクリプトの種類
+config.reverse_auth_user=リバース認証ユーザ
+config.db_config=データベースの構成
+config.db_type=タイプ
+config.db_host=ホスト
+config.db_name=名前
+config.db_user=ユーザ
+config.db_ssl_mode=SSL モード
+config.db_ssl_mode_helper=(「postgres」のみ)
+config.db_path=パス
+config.db_path_helper=(for "sqlite3" and "tidb")
+config.service_config=サービスの構成
+config.register_email_confirm=電子メールの確認を必要
+config.disable_register=登録を無効にする
+config.show_registration_button=登録ボタンを表示します。
+config.require_sign_in_view=サインインを要求
+config.enable_cache_avatar=アバターのキャッシュを有効にします。
+config.mail_notify=メール通知
+config.disable_key_size_check=最小キー サイズ チェックを無効にします
+config.enable_captcha=Captchaを有効にする
+config.active_code_lives=コードリンクの有効期限をアクティブ
+config.reset_password_code_lives=パスワードリンクの有効期限をリセット
+config.webhook_config=Webhook設定
+config.queue_length=キューの長さ
+config.deliver_timeout=送信タイムアウト
+config.skip_tls_verify=TLSの確認を省略
+config.mailer_config=メーラーの構成
+config.mailer_enabled=有効にした
+config.mailer_disable_helo=HELOコマンド無効
+config.mailer_name=名前
+config.mailer_host=ホスト
+config.mailer_user=ユーザ
+config.oauth_config=OAuth 構成
+config.oauth_enabled=Enabled
+config.cache_config=キャッシュの構成
+config.cache_adapter=キャッシュ アダプター
+config.cache_interval=キャッシュ間隔
+config.cache_conn=キャッシュ接続
+config.session_config=セッションの構成
+config.session_provider=セッション プロバイダー
+config.provider_config=プロバイダーの構成
+config.cookie_name=クッキー名
+config.enable_set_cookie=クッキーの設定を有効にする
+config.gc_interval_time=GC 間隔
+config.session_life_time=セッションのライフタイム
+config.https_only=HTTPS のみ
+config.cookie_life_time=クッキーのライフタイム
+config.picture_config=画像構成
+config.picture_service=画像サービス
+config.disable_gravatar=グラバターを無効にする
+config.log_config=ログの構成
+config.log_mode=ログ モード
+
+monitor.cron=Cron タスク
+monitor.name=名前
+monitor.schedule=スケジュール
+monitor.next=次回
+monitor.previous=前回
+monitor.execute_times=実行回数
+monitor.process=実行中のプロセス
+monitor.desc=説明
+monitor.start=開始日時
+monitor.execute_time=実行時間:
+
+notices.system_notice_list=システム通知
+notices.type=タイプ
+notices.type_1=リポジトリ
+notices.desc=説明
+notices.op=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">%[4]s</a>を<a href="%[1]s/src/%[2]s">%[3]s</a>にプッシュしました
+create_issue=`問題 <a href="%s/issues/%s">%s#%[2]s</a> を開きました`
+create_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="%[1]s">%[3]s</a> に タグ <a href="%[1]s/src/%[2]s">%[2]s</a> をプッシュしました
+compare_2_commits=これら 2 のコミットの比較を閲覧する
+
+[tool]
+ago=前
+from_now=今から
+now=今
+1s=1 秒 %s
+1m=1 分 %s
+1h=1 時間 %s
+1d=1 日 %s
+1w=1 週間 %s
+1mon=1 ヶ月 %s
+1y=1 年間 %s
+seconds=%d 秒 %s
+minutes=%d 分の %s
+hours=%d 時間 %s
+days=%d 日 %s
+weeks=%d 週間 %s
+months=%d ヶ月 %s
+years=%d 年 %s
+raw_seconds=秒
+raw_minutes=分
+
+[dropzone]
+default_message=ここにファイルをドロップまたはクリックしてアップロードします。
+invalid_input_type=このタイプのファイルはアップロードできません.
+file_too_big=ファイルのサイズ ({{filesize}} MB) では、最大サイズ ({{maxFilesize}} MB) を超えています。
+remove_file=ファイル削除
+

+ 1009 - 992
conf/locale/locale_lv-LV.ini

@@ -1,992 +1,1009 @@
-app_desc=Viegli uzstādāms Git serviss, kas rakstīts valodā Go
-
-home=Sākums
-dashboard=Infopanelis
-explore=Izpētīt
-help=Palīdzība
-sign_in=Pierakstīties
-sign_out=Izrakstīties
-sign_up=Pieteikties
-register=Reģistrēties
-website=Mājas lapa
-version=Versija
-page=Lapa
-template=Sagatave
-language=Valoda
-create_new=Izveidot...
-user_profile_and_more=Lietotāja profilu un vairāk
-signed_in_as=Pierakstījies kā
-
-username=Lietotājvārds
-email=E-pasts
-password=Parole
-re_type=Parole atkārtoti
-captcha=Pārbaudes kods
-
-repository=Repozitorijs
-organization=Organizācija
-mirror=Spogulis
-new_repo=Jauns repozitorijs
-new_migrate=Jauna migrācija
-new_fork=Jauns atdalītais repozitorijs
-new_org=Jauna organizācija
-manage_org=Pārvaldīt organizācijas
-admin_panel=Admin panelis
-account_settings=Konta iestatījumi
-settings=Iestatījumi
-your_profile=Tavs profils
-your_settings=Tavi iestatījumi
-
-news_feed=Jaunumu plūsma
-pull_requests=Izmaiņu pieprasījumi
-issues=Problēmas
-
-cancel=Atcelt
-
-[search]
-search=Meklēt...
-repository=Repozitorijs
-user=Lietotājs
-issue=Kļūda
-code=Kods
-
-[install]
-install=Instalācija
-title=Instalācijas soļi pirmo reizi palaižot
-docker_helper=Ja Gogs tiek lietots zem Docker, izlasiet uzmanīgi <a target="_blank" href="%s">vadlīnijas</a>, pirms ko maināt šajā lapā!
-requite_db_desc=Gogs nepieciešams MySQL, PostgreSQL, SQLite3 vai TiDB.
-db_title=Datu bāzes iestatījumi
-db_type=Datu bāzes veids
-host=Resursdators
-user=Lietotājs
-password=Parole
-db_name=Datu bāzes nosaukums
-db_helper=Nepieciešams izmantot MySQL INNODB dzini ar rakstzīmju kopu utf8_general_ci.
-ssl_mode=SSL režīms
-path=Ceļš
-sqlite_helper=SQLite3 vai TiDB datu bāzes faila atrašanās vieta.
-err_empty_db_path=Nepieciešams norādīt SQLite3 vai TiDB datu bāzes atrašanās vietu.
-err_invalid_tidb_name=TiDB datu bāzes nosaukums nevar saturēt simbolus "." un "-".
-no_admin_and_disable_registration=Reģistrāciju nevar atslēgt, kamēr nav izveidots administratora konts.
-err_empty_admin_password=Administratora kontam ir obligāti jānorāda parole.
-
-general_title=Gogs vispārīgie iestatījumi
-app_name=Lietotnes nosaukums
-app_name_helper=Norādiet organizācijas nosaukumu šeit!
-repo_path=Repozitoriju glabāšanas vieta
-repo_path_helper=Visi Git attālinātie repozitoriji tiks glabāti šajā direktorijā.
-run_user=Izpildes lietotājs
-run_user_helper=Lietotājam ir jābūt rakstīšanas tiesībām repozitorija saknes direktorijai un Gogs jābūt palaistam zem šī lietotāja.
-domain=Domēns
-domain_helper=Tas ietekmē SSH klonēšanas URL.
-ssh_port=SSH ports
-ssh_port_helper=Porta numurs, kuru izmanto Jūsu SSH serveris, atstājiet tukšu, ja nevēlaties izmantot SSH.
-http_port=HTTP ports
-http_port_helper=Porta numurs pēc kura lietojumprogrammai būs iespējams pieslēgties.
-app_url=Lietotnes URL
-app_url_helper=Tas ietekmē HTTP/HTTPS klonēšanas URL un e-pasta saturā izsūtītās saites.
-
-optional_title=Neobligātie iestatījumi
-email_title=E-pasta pakalpojuma iestatījumi
-smtp_host=SMTP resursdators
-smtp_from=Sūtītājs
-smtp_from_helper=E-pasta adrese, RFC 5322. Drīkst būt vienkārši e-pasta adrese vai formātā "Nosaukums" <e-pasts@example.com>.
-mailer_user=Sūtītāja e-pasta adrese
-mailer_password=Sūtītāja parole
-register_confirm=Iespējot reģistrēšanās apstiprināšanu
-mail_notify=Iespējot e-pasta paziņojumus
-server_service_title=Servera un citu servisu iestatījumi
-offline_mode=Iespējot bezsaistes režīmu
-offline_mode_popup=Atspējot CDN arī produkcijas režīmā, visi resursu faili tiks piegādāti no servera.
-disable_gravatar=Atspējot Gravatar pakalpojumu
-disable_gravatar_popup=Atspējot Gravatar un citus avotus, visus avatarus augšupielādēts lietotāji vai izmantos noklusēto attēlu.
-disable_registration=Atspējot lietotāju reģistrāciju
-disable_registration_popup=Atspējot lietotāju reģistrāciju, tikai administrators varēs izveidot jaunus lietotāju kontus.
-enable_captcha=Iespējot drošības kodu
-enable_captcha_popup=Lietotājam reģistrējoties, pieprasīt ievadīt drošības kodu.
-require_sign_in_view=Iespējot nepieciešamību autorizēties, lai aplūkotu lapas
-require_sign_in_view_popup=Tika autorizēti lietotāji var aplūkot lapas, neautorizēti lietotāji var piekļūt tikai autorizācijas un reģistrēšanās lapām.
-admin_setting_desc=Nav nepieciešams izveidot administratora kontu uzreiz, lietotājs ar ID=1 saņems administratora tiesības automātiski.
-admin_title=Admin konta iestatījumi
-admin_name=Lietotājvārds
-admin_password=Parole
-confirm_password=Apstipriniet paroli
-admin_email=E-pasts
-install_gogs=Instalēt Gogs
-test_git_failed=Kļūda pārbaudot 'git' komandu: %v
-sqlite3_not_available=Jūsu versija neatbalsta SQLite3, lūdzu lejupielādējiet oficiālo bināro versiju no %s, NEVIS gobuild versiju.
-invalid_db_setting=Datu bāzes iestatījums nav pareizs: %v
-invalid_repo_path=Repozitorija atrašanās vieta ir nekorekta: %v
-run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s
-save_config_failed=Neizdevās saglabāt konfigurāciju: %v
-invalid_admin_setting=Nekorekts admin konta iestatījums: %v
-install_success=Laipni lūdzam! Mēs priecājamies, ka Jūs izvēlaties Gogs, patīkamu lietošanu!
-
-[home]
-uname_holder=Lietotājvārds vai e-pasts
-password_holder=Parole
-switch_dashboard_context=Mainīt infopaneļa kontekstu
-my_repos=Mani repozitoriji
-collaborative_repos=Sadarbības repozitoriji
-my_orgs=Manas organizācijas
-my_mirrors=Mani spoguļi
-view_home=Skatīties %s
-
-issues.in_your_repos=Jūsu repozitorijos
-
-[explore]
-repos=Repozitoriji
-
-[auth]
-create_new_account=Izveidot jaunu kontu
-register_hepler_msg=Jau ir konts? Pieraksties tagad!
-social_register_hepler_msg=Jau ir konts? Sasaisti tagad!
-disable_register_prompt=Atvainojiet, reģistrācija ir atspējota. Lūdzu, sazinieties ar vietnes administratoru.
-disable_register_mail=Atvainojiet, reģistrācijas e-pasta apstiprināšana ir atspējota.
-remember_me=Atcerēties mani
-forgot_password=Aizmirsu paroli
-forget_password=Aizmirsi paroli?
-sign_up_now=Nepieciešams konts? Reģistrējies tagad.
-confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasts ir nosūtīts uz <b>%s</b>, lūdzu, pārbaudies savu e-pasta kontu tuvāko %d stundu laikā, lai pabeigtu reģistrācijas procesu.
-sign_in_to_account=Pierakstīties savā kontā
-active_your_account=Aktivizēt savu kontu
-resent_limit_prompt=Atvainojiet, Jūs sūtījāt aktivizācijas e-pastu pārāk bieži. Lūdzu, gaidiet 3 minūtes.
-has_unconfirmed_mail=Sveiki %s, Jums ir neapstiprināta e-pasta adrese (<b>%s</b>). Ja neesat saņēmis apstiprināšanas e-pastu vai Jums ir nepieciešams nosūtīt jaunu, lūdzu, nospiediet pogu, kas atrodas zemāk.
-resend_mail=Nospiediet šeit, lai vēlreiz nosūtītu aktivizācijas e-pastu
-email_not_associate=Šī e-pasta adrese nav saistīta ar Jūsu kontu.
-send_reset_mail=Spiediet šeit, lai nosūtītu paroles maiņas vēstuli uz Jūsu e-pastu
-reset_password=Atjaunot savu paroli
-invalid_code=Atvainojiet, Jūsu apstiprināšanas kodam ir beidzies derīguma termiņš vai arī tas ir nepareizs.
-reset_password_helper=Nospiediet šeit, lai atjaunotu paroli
-password_too_short=Paroles garums nedrīkst būt mazāks par 6.
-
-[mail]
-activate_account=Lūdzu, aktivizējiet savu kontu
-activate_email=Apstipriniet savu e-pasta adresi
-reset_password=Atiestatīt savu paroli
-register_success=Reģistrācija notikusi veiksmīgi
-
-[modal]
-yes=Jā
-no=Nē
-modify=Mainīt
-
-[form]
-UserName=Lietotājvārds
-RepoName=Repozitorija nosaukums
-Email=E-pasta adrese
-Password=Parole
-Retype=Parole atkārtoti
-SSHTitle=SSH atslēgas nosaukums
-HttpsUrl=HTTPS URL
-PayloadUrl=Vērtuma URL
-TeamName=Komandas nosaukums
-AuthName=Autorizācijas nosaukums
-AdminEmail=Admin e-pasta adrese
-
-require_error=` nedrīkst būt tukšs.`
-alpha_dash_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus vai domuzīmes (-_).`
-alpha_dash_dot_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus, domuzīmes (-_) vai punktu.`
-size_error=` jābūt %s simbolus garam.`
-min_size_error=` jabūt vismaz %s simbolu garumā.`
-max_size_error=` jabūt ne mazāk kā %s simbolu garumā.`
-email_error=` nav derīga e-pasta adrese.`
-url_error=` nav korekts URL.`
-unknown_error=Nezināma kļūda:
-captcha_incorrect=Pārbaudes kods nesakrīt ar attēlā redzamo.
-password_not_match=Parole un atkārtoti ievadītā parole nav vienādas.
-
-username_been_taken=Lietotājvārds ir jau aizņemts.
-repo_name_been_taken=Repozitorija vārds ir jau aizņemts.
-org_name_been_taken=Organizācijas nosaukums ir jau aizņemts.
-team_name_been_taken=Komandas nosaukums ir jau aizņemts.
-email_been_used=E-pasta adrese jau tiek izmantota.
-illegal_team_name=Grupas nosaukums satur neatļautas rakstzīmes.
-username_password_incorrect=Lietotājvārds vai parole nav pareiza.
-enterred_invalid_repo_name=Lūdzu, pārliecinieties, vai ievadītā repozitorija nosaukums ir pareizs.
-enterred_invalid_owner_name=Lūdzu, pārliecinieties, vai ievadītā īpašnieka vārds ir pareizs.
-enterred_invalid_password=Lūdzu pārliecinieties, vai Jūsu ievadītā parole ir pareiza.
-user_not_exist=Šāds lietotājs neeksistē.
-last_org_owner=Nav iespējams noņemt vienīgo komandas īpašnieku. Pirms tam ir nepieciešams norādīt jauno īpašnieku.
-
-invalid_ssh_key=Atvainojiet, nav iespējams pārbaudīt Jūsu SSH atslēgu: %s
-unable_verify_ssh_key=Nav iespējams pārbaudīt jūsu SSH atslēgu, bet tiks pieņemts, ka tā ir derīga, lūdzu, pārliecinieties par to pats.
-auth_failed=Autentifikācija neizdevās: %v
-
-still_own_repo=Jūsu esat vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
-still_has_org=Jūsu esat vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju.
-org_still_own_repo=Šī organizācija ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
-
-still_own_user=Šo autentifikāciju joprojām izmanto vismaz viens lietotājs, nepieciešams šiem lietotājiem nomainīt autentifikācijas veidu vai tos izdzēst.
-
-target_branch_not_exist=Mērķa atzars neeksistē
-
-[user]
-change_avatar=Mainīt savu profila attēlu vietnē gravatar.com
-change_custom_avatar=Mainīt savu profila attēlu iestatījumos
-join_on=Pievienojās
-repositories=Repozitoriji
-activity=Publiskā aktivitāte
-followers=Sekotāji
-starred=Atzīmēti ar zvaigznīti
-following=Seko
-
-form.name_reserved=Lietotāja vārds '%s' jau ir aizņemts.
-form.name_pattern_not_allowed=Lietotāja vārds '%s' nav atļauts.
-
-[settings]
-profile=Profils
-password=Parole
-ssh_keys=SSH atslēgas
-social=Sociālie konti
-applications=Lietotnes
-orgs=Organizācijas
-delete=Dzēst kontu
-uid=Lietotāja ID
-
-public_profile=Publiskais profils
-profile_desc=Jūsu e-pasta adrese ir publiska un tiks izmantota, lai nosūtītju Jums paziņojumus, kas saistīti ar Jūsu kontu vai darbībām veiktām caur šo mājas lapu.
-full_name=Pilns vārds
-website=Mājas lapa
-location=Atrašanās vieta
-update_profile=Mainīt profilu
-update_profile_success=Jūsu profila dati ir veiksmīgi saglabāti.
-change_username=Lietotāja vārds mainīts
-change_username_prompt=Šī izmaiņa ietekmēs saites, kas norāda uz Jūsu kontu.
-continue=Turpināt
-cancel=Atcelt
-
-enable_custom_avatar=Iespējot maināmu profila attēlu
-enable_custom_avatar_helper=Iespējojiet šo, lai atslēgtu profilu attēlu ņemšanu no gravatar.com
-choose_new_avatar=Izvēlēties jaunu profila attēlu
-update_avatar=Saglabāt profila bildi
-uploaded_avatar_not_a_image=Augšupielādētais fails nav attēls.
-no_custom_avatar_available=Nav iespējams mainīt profila bildi.
-update_avatar_success=Jūsu profila bilde tika veiksmīgi saglabāta.
-
-change_password=Mainīt paroli
-old_password=Pašreizējā parole
-new_password=Jauna parole
-retype_new_password=Ievadīt paroli atkāroti
-password_incorrect=Ievadīta nepareiza pašreizējā parole.
-change_password_success=Parole tika veiksmīgi nomainīta. Tagad jūs varat pieraksītites, izmantojot jauno paroli.
-
-emails=E-pasta adreses
-manage_emails=Pārvaldīt e-pasta adreses
-email_desc=Primārā e-pasta adrese tiks izmantota sūtot notifikācijas un citām dabībām.
-primary=Primārā
-primary_email=Iestatīt kā primāro
-delete_email=Dzēst
-email_deletion=E-pasta dzēšana
-email_deletion_desc=Dzēšot šo e-pasta adresi, tiks dzēsta arī visa ar to saistītā informācija no Jūsu konta. Vai vēlaties turpināt?
-email_deletion_success=E-pasta adrese ir veiksmīgi izdzēsta!
-add_new_email=Pievienot jaunu e-pasta adresi
-add_email=Pievienot e-pastu
-add_email_confirmation_sent=Jauns apstiprinājuma e-pasts tika nosūtīts uz '%s', pārbaudiet savu e-pastu tuvāko %d stundu laikā, lai pabeigtu apstiprināšanas procesu.
-add_email_success=Jūsu jaunā e-pasta adrese tika veiksmīgi pievienota.
-
-manage_ssh_keys=Pārvaldīt SSH atslēgas
-add_key=Pievienot atslēgu
-ssh_desc=Šis ir saraksts ar Jūsu kontam piesaistītajām SSH atslēgām. Dzēsiet visas, kuras Jūs neatpazīstat.
-ssh_helper=<strong>Vajadzīga palīdzība?</strong> Apskatieties pamācību kā <a href="%s">ģenerēt SSH atslēgas</a> vai kā novērst <a href="%s">biežāk sastopamās SSH problēmas</a>.
-add_new_key=Pievienot SSH atslēgu
-ssh_key_been_used=Šī publiskā atslēga jau ir izmantota.
-ssh_key_name_used=Publiskā atslēga ar šādu nosaukumu jau eksistē.
-key_name=Atslēgas nosaukums
-key_content=Saturs
-add_key_success=Jauna SSH atslēga '%s' tika veiksmīgi pievienota!
-delete_key=Dzēst
-ssh_key_deletion=SSH atslēgas dzēšana
-ssh_key_deletion_desc=Dzēšot šo SSH atslēgu, tiks dzēsta visa ar to saistītā piekļuve Jūsu kontam. Vai vēlaties turpināt?
-ssh_key_deletion_success=SSH atslēga tika veiksmīgi izdzēsta!
-add_on=Pievienota
-last_used=Pēdējo reizi izmantota
-no_activity=Nav nesenas aktivitātes
-key_state_desc=Šī atslēga tika izmantota pēdējo 7 dienu laikā
-token_state_desc=Šis talons tika izmantots pēdējo 7 dienu laikā
-
-manage_social=Pārvaldīt piesaistītos sociālos kontus
-social_desc=Šeit tiek attēloti visi sociālie konti, kas ir piesaistīti Jūsu kontam. Dzēsiet visus, kurus Jūs neatpazīstat.
-unbind=Atsaistīt
-unbind_success=Sociālais konts tika atsaistīts.
-
-manage_access_token=Pārvaldīt personīgos piekļuves talonus
-generate_new_token=Ģenerēt jaunu talonu
-tokens_desc=Taloni, kurus esat uzģenerējuši, kas var tikt izmantoti, lai piekļūtu Gogs API.
-new_token_desc=Pašlaik visiem taloniem ir pilna piekļuve Jūsu kontam.
-token_name=Talona nosaukums
-generate_token=Ģenerēt talonu
-generate_token_succees=Jauns piekļuves talons tika veiksmīgi uzģenerēts! Pārliecinieties, ka esat to nokopējis, jo to Jums vairāk nebūs iespēja izdarīt!
-delete_token=Dzēst
-access_token_deletion=Personīgā piekļuves talona dzēšana
-access_token_deletion_desc=Dzēšot personīgo piekļuves talonu, tiks liegta piekļuve aplikācijām, kas to izmanto. Vai vēlaties turpināt?
-delete_token_success=Personīgās piekļuves talons veiksmīgi izdzēsts! Neaizmirstiet nomainīt uz citu aplikācijās, kas to izmantoja.
-
-delete_account=Dzēst savu kontu
-delete_prompt=Šī darbība pilnībā izdzēsīs Jūsu kontu, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
-confirm_delete_account=Apstiprināt dzēšanu
-delete_account_title=Konta dzēšana
-delete_account_desc=Šis konts tiks neatgriezeniski dzēsts, vai vēlaties turpināt?
-
-[repo]
-owner=Īpašnieks
-repo_name=Repozitorija nosaukums
-repo_name_helper=Labi repzotoriju nosaukumi ir īsi, tādi kurus viegli atcerēties un <strong>unikāli</strong>.
-visibility=Redzamība
-visiblity_helper=Šis repozitorijs ir <span class="ui red text">privāts</span>
-visiblity_helper_forced=Lapas administrators ir noteicis, ka visiem repozitorijiem ir jābūt <span class="ui red text">privātiem</span>
-visiblity_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus)
-fork_repo=Atdalīt repozitoriju
-fork_from=Atdalīt no
-fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību
-repo_desc=Apraksts
-repo_lang=Valoda
-repo_lang_helper=Izvēlieties .gitignore failus
-license=Licence
-license_helper=Izvēlieties licences failu
-readme=LasiMani
-readme_helper=Izvēlieties faila LasiMani sagatavi
-auto_init=Inicializēt šo repozitoriju ar izvēlētajiem failiem un sagatavi
-create_repo=Izveidot repozitoriju
-default_branch=Noklusējuma atzars
-mirror_interval=Spoguļošanas intervāls (stundās)
-
-form.name_reserved=Repozitorija nosaukums '%s' ir rezervēts.
-form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts.
-
-need_auth=Nepieciešama autorizācija
-migrate_type=Migrācijas veids
-migrate_type_helper=Šis repozitorijs būs <span class="text blue">spogulis</span>
-migrate_repo=Migrēt repozitoriju
-migrate.clone_address=Klonēšanas adrese
-migrate.clone_address_desc=Tas var būt HTTP/HTTPS/GIT URL vai ceļš uz lokālā servera.
-migrate.invalid_local_path=Nekorents lokālais ceļš, tas neeksistē vai nav direktorijs.
-
-forked_from=atdalīts no
-fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks!
-copy_link=Kopēt
-copy_link_success=Nokopēts!
-copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
-click_to_copy=Kopēt uz starpliktuvi
-copied=Kopēšana notikusi veiksmīgi
-clone_helper=Nepieciešama palīdzība kā veikt klonēšana? Apmeklējiet <a target="_blank" href="%s">Palīdzība</a> lapu!
-unwatch=Nevērot
-watch=Vērot
-unstar=Noņemt zvaigznīti
-star=Pievienot zvaigznīti
-fork=Atdalīts
-
-no_desc=Nav apraksta
-quick_guide=Īsa pamācība
-clone_this_repo=Klonēt šo repozitoriju
-create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
-push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
-repo_is_empty=Šis repozitorijs ir tukšs, apskatiet atkal vēlāk!
-
-
-branch=Atzars
-tree=Koks
-branch_and_tags=Atzari un tagi
-branches=Atzari
-tags=Tagi
-issues=Problēmas
-pulls=Izmaiņu pieprasījumi
-labels=Etiķetes
-milestones=Atskaites punkti
-commits=Revīzijas
-releases=Laidieni
-file_raw=Neapstrādāts
-file_history=Vēsture
-file_view_raw=Rādīt neapstrādātu
-file_permalink=Patstāvīgā saite
-
-commits.commits=Revīzijas
-commits.search=Meklēt revīzijas
-commits.find=Meklēt
-commits.author=Autors
-commits.message=Ziņojums
-commits.date=Datums
-commits.older=Vecāki
-commits.newer=Jaunāki
-
-issues.new=Jauna problēma
-issues.new.labels=Etiķetes
-issues.new.no_label=Nav etiķešu
-issues.new.clear_labels=Noņemt etiķetes
-issues.new.milestone=Atskaites punkts
-issues.new.no_milestone=Nav atskaites punktu
-issues.new.clear_milestone=Notīrīt atskaites punktus
-issues.new.open_milestone=Atvērtie atskaites punktus
-issues.new.closed_milestone=Aizvērtie atskaites punkti
-issues.new.assignee=Atbildīgais
-issues.new.clear_assignee=Noņemt atbildīgo
-issues.new.no_assignee=Nav atbildīgā
-issues.create=Pieteikt problēmu
-issues.new_label=Jauna etiķete
-issues.new_label_placeholder=Etiķetes nosaukums...
-issues.create_label=Izveidot etiķeti
-issues.open_tab=%d atvērti
-issues.close_tab=%d aizvērti
-issues.filter_label=Etiķete
-issues.filter_label_no_select=Nav atzīmēta etiķete
-issues.filter_milestone=Atskaites punkts
-issues.filter_milestone_no_select=Nav atzīmēts atskaites punkts
-issues.filter_assignee=Atbildīgais
-issues.filter_assginee_no_select=Nav atzīmēts atbildīgais
-issues.filter_type=Veids
-issues.filter_type.all_issues=Visas problēmas
-issues.filter_type.assigned_to_you=Piešķirtās Jums
-issues.filter_type.created_by_you=Jūsu izveidotās
-issues.filter_type.mentioning_you=Esat pieminēts
-issues.filter_sort=Kārtot
-issues.filter_sort.latest=Jaunākie
-issues.filter_sort.oldest=Vecakie
-issues.filter_sort.recentupdate=Nesen atjaunotās
-issues.filter_sort.leastupdate=Vissenāk atjaunotās
-issues.filter_sort.mostcomment=Visvairāk komentētās
-issues.filter_sort.leastcomment=Vismazāk komentētās
-issues.opened_by=<a href="%[2]s">%[3]s</a> atvēra %[1]s
-issues.opened_by_fake=%[2]s atvēra %[1]s
-issues.previous=Iepriekšējā
-issues.next=Nākamā
-issues.open_title=Atvērta
-issues.closed_title=Slēgta
-issues.num_comments=%d komentāri
-issues.commented_at=`komentēja <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Vēl nav satura.
-issues.close_issue=Aizvērt
-issues.close_comment_issue=Komentēt un aizvērt
-issues.reopen_issue=Atvērt atkārtoti
-issues.reopen_comment_issue=Atvērt atkārtoti un komentēt
-issues.create_comment=Komentēt
-issues.closed_at=`aizvērts <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`atvērts atkārtoti <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`pieminēja šo problēmu revīzijā <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Autors
-issues.admin=Administrators
-issues.owner=Īpašnieks
-issues.sign_up_for_free=Pievienojieties
-issues.sign_in_require_desc=, lai piedalītos diskusijā. Jau ir konts? <a href="%s">Pierakstieties, lai komentētu</a>
-issues.edit=Labot
-issues.cancel=Atcelt
-issues.save=Saglabāt
-issues.label_title=Etiķetes nosaukums
-issues.label_color=Etiķetes krāsa
-issues.label_count=%d etiķetes
-issues.label_open_issues=%d atvērtas problēmas
-issues.label_edit=Labot
-issues.label_delete=Dzēst
-issues.label_modify=Etiķetes labošana
-issues.label_deletion=Etiķetes dzēšana
-issues.label_deletion_desc=Dzēšot šo etiķeti, tā tiks noņemta no visām saistītajām problēmām. Vai vēlaties turpināt?
-issues.label_deletion_success=Etiķete tika veiksmīgi izdzēsta!
-
-pulls.compare_changes=Salīdzināt izmaiņas
-pulls.compare_changes_desc=Salīdzināt divus atzarus un izveidot izmaiņu pieprasījumu.
-pulls.compare_base=pamata
-pulls.compare_compare=salīdzināmais
-pulls.filter_branch=Filtrēt atzarus
-pulls.no_results=Nekas netika atrasts.
-pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi.
-pulls.has_pull_request=`Jau eksistē izmaiņu pieprasījums starp šiem diviem atzariem: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Izveidot izmaiņu pieprasījumu
-pulls.title_desc=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code>
-pulls.merged_title_desc=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Saruna
-pulls.tab_commits=Revīzijas
-pulls.tab_files=Izmainītie faili
-pulls.reopen_to_merge=Lūdzu, atkārtoti atveriet šo izmaiņu pieprasījumu, lai veiktu sapludināšanu.
-pulls.merged=Sapludināts
-pulls.has_merged=Šo izmaiņu pieprasījums tika veiksmīgi sapludināts!
-pulls.data_broken=Nepieejami izmaiņu pieprasījuma dati, jo dzēsta informācija no atdalītā repozitorija.
-pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet lapu.
-pulls.can_auto_merge_desc=Ir iespējams veikt automātisko sapludināšanas darbību šim izmaiņu pieprasījumam.
-pulls.cannot_auto_merge_desc=Nav iespējams veikt automātisko sapludināšanas darbību, jo starp revīzijām ir konflikti.
-pulls.cannot_auto_merge_helper=Lūdzu, izmantojiet komandrindas rīku, lai to atrisinātu.
-pulls.merge_pull_request=Izmaiņu pieprasījuma sapludināšana
-pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) no šī repozitorija ar tādu pašu sapludināšanas informāciju un gaida sapludināšanu.`
-
-milestones.new=Jauns atskaites punkts
-milestones.open_tab=%d atvērti
-milestones.close_tab=%d aizvērti
-milestones.closed=Aizvērts %s
-milestones.no_due_date=Bez termiņa
-milestones.open=Atvērt
-milestones.close=Aizvērt
-milestones.new_subheader=Izveidojiet atskaites punktus, lai organizētu problēmas.
-milestones.create=Izveidot atskaites punktu
-milestones.title=Virsraksts
-milestones.desc=Apraksts
-milestones.due_date=Termiņš (neobligāts)
-milestones.clear=Notīrīt
-milestones.invalid_due_date_format=Termiņa datuma formāts ir nekorekts, jābūt formātā 'gggg-mm-dd'.
-milestones.create_success=Atskaites punkts '%s' tika veiksmīgi izveidots!
-milestones.edit=Labot atskaites punktu
-milestones.edit_subheader=Izmantojiet pēc iespējas labāku aprakstu atskaites punktiem, lai citiem tas būtu saprotamāks.
-milestones.cancel=Atcelt
-milestones.modify=Mainīt atskaites punktu
-milestones.edit_success=Izmaiņas atskaites punktā '%s' tika veiksmīgi saglabātas!
-milestones.deletion=Atskaites punkta dzēšana
-milestones.deletion_desc=Dzēšot šo atskaites punktu tiks noņemta arī saistītā informācija no problēmu ziņojumiem. Vai vēlaties turpināt?
-milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts!
-
-settings=Iestatījumi
-settings.options=Opcijas
-settings.collaboration=Sadarbība
-settings.hooks=Tīmekļa āķi
-settings.githooks=Git āķi
-settings.basic_settings=Pamatiestatījumi
-settings.danger_zone=Bīstamā zona
-settings.site=Oficiālā mājas lapa
-settings.update_settings=Mainīt iestatījumus
-settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo repozitoriju.
-settings.transfer=Mainīt īpašnieku
-settings.transfer_desc=Mainīt šī repozitorija īpašnieku uz citu lietotāju vai organizāciju, kurai Jums ir administratora tiesībs.
-settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu.
-settings.delete=Dzēst šo repozitoriju
-settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieites vai patiešām vēlaties to darīt.
-settings.transfer_notices_1=- Jūs pazaudēsiet piekļuvi, ja jaunais īpašnieks ir lietotājs.
-settings.transfer_notices_2=- Jūs saglabāsiet piekļuvi, ja jaunais īpašnieks ir organizācija un Jūs esat viens no tās īpašniekiem.
-settings.transfer_form_title=Lūdzu, ievadiet sekojošu informāciju, lai apstiprinātu šo darbību:
-settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
-settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visus šī repozitorija datus, tai skaitā Git datus, problēmu ziņojumus, komentārus un definētās piekļuves tiesības.
-settings.delete_notices_fork_1=- Ja repozitorijs ir publisks, visi atdalītie repozitoriji kļūs neatkarīgi.
-settings.delete_notices_fork_2=- Ja repozitorijs ir privāts, tiks dzēsti arī visi atdalītie repozitoriji.
-settings.delete_notices_fork_3=- Ja vēlaties saglabāt atdalīts repozitorijus pēc dzēšanas, sākumā nomainiet repozitorija redzamību uz publisku.
-settings.update_settings_success=Repozitorija opcijas ir veiksmīgi saglabātas.
-settings.transfer_owner=Jaunais īpašnieks
-settings.make_transfer=Mainīt
-settings.transfer_succeed=Repozitorija īpašnieks ir veiksmīgi nomainīts.
-settings.confirm_delete=Apstiprināt dzēšanu
-settings.add_collaborator=Pievienot jaunu līdzstrādnieku
-settings.add_collaborator_success=Jauns līdzstrādnieks ir pievienots.
-settings.remove_collaborator_success=Līdzstrādnieks tika noņemts.
-settings.user_is_org_member=Lietotājs ir organizācijas biedrs, kas nevar tikt pievienots kā līdzstrādnieks.
-settings.add_webhook=Pievienot tīmekļa āķi
-settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikomiem, kas notiek Git servisā. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Lai uzzinātu sīkāk skatieties <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>.
-settings.webhook_deletion=Dzēst tīmekļa āķi
-settings.webhook_deletion_desc=Dzēšot tīmekļa āķi tiks dzēsta visa ar to saistītā informācija un izpildes vēsture. Vai vēlaties turpināt?
-settings.webhook_deletion_success=Tīmekļa āķis tika veiksmīgi izdzēsts!
-settings.webhook.request=Pieprasījums
-settings.webhook.response=Atbilde
-settings.webhook.headers=Galvenes
-settings.webhook.payload=Derīgā krava
-settings.webhook.body=Saturs
-settings.githooks_desc=Git āķus apstrādā pats Git. Jūs varat labot atbalsīto āku failus sarakstā zemāk, lai veiktu pielāgotas darbības.
-settings.githook_edit_desc=Ja āķis nav aktīvs, tiks attēlots piemērs kā to izmantot. Atstājot āķa saturu tukšu, tas tiks atspējots.
-settings.githook_name=Āķa nosaukums
-settings.githook_content=Āķa saturs
-settings.update_githook=Labot āķi
-settings.add_webhook_desc=Uz norādīto URL tiks nosūtīts <code>POST</code> pieprasījums ar notikuma datiem. Jūs varat norādīt arī datu formātu, kādā datus vēlaties saņemt (JSON, <code>x-www-form-urlencoded</code> <em>utt.</em>). Detalizētāku informāciju ir iespējams uzzināt <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>.
-settings.payload_url=Vērtuma URL
-settings.content_type=Satura tips
-settings.secret=Noslēpums
-settings.slack_username=Lietotājvārds
-settings.slack_icon_url=Ikonas URL
-settings.slack_color=Krāsa
-settings.event_desc=Kādu notikumu rezultātā tiktu izsaukts tīmekļā āķis?
-settings.event_push_only=Tikai izmaiņu nosūtīšanas notikumiem.
-settings.event_send_everything=Vēlos saņemt <strong>visu</strong>.
-settings.event_choose=Atzīmēt, ko vēlos saņemt.
-settings.event_create=Izveidot
-settings.event_create_desc=Atzara vai taga izveidošana
-settings.event_push=Izmaiņu nosūtīšana
-settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju
-settings.active=Aktīvs
-settings.active_helper=Tiks nosūtīti notikuma dati, kad nostrādās šis āķis.
-settings.add_hook_success=Jauns tīmekļa āķis tika veiksmīgi pievienots.
-settings.update_webhook=Mainīt tīmekļa āķi
-settings.update_hook_success=Tīmekļa āķist tika veiksmīgi saglabāts.
-settings.delete_webhook=Dzēst tīmekļa āķi
-settings.recent_deliveries=Pēdējās piegādes
-settings.hook_type=Āķa veids
-settings.add_slack_hook_desc=PIevienot <a href="%s">Slack</a> integrāciju Jūsu repozitorijā.
-settings.slack_token=Talons
-settings.slack_domain=Domēns
-settings.slack_channel=Kanāls
-settings.deploy_keys=Izvietot atslēgas
-settings.add_deploy_key=Pievienot izvietošanas atslēgu
-settings.no_deploy_keys=Nav pievienota neviena izvietošanas atslēga.
-settings.title=Virsraksts
-settings.deploy_key_content=Saturs
-settings.key_been_used=Šāda izvietošanas atslēga jau eksistē.
-settings.key_name_used=Izvietošanas atslēga ar šādu nosaukumu jau eksistē.
-settings.add_key_success=Izvietošanas atslēga '%s' tik veiksmīgi pievienota!
-settings.deploy_key_deletion=Dzēst izvietošanas atslēgu
-settings.deploy_key_deletion_desc=Dzēšot šo izvietošanas atslēgu tiks noņemta arī ar to saistītā piekļuve šim repozitorijam. Vai vēlaties turpināt?
-settings.deploy_key_deletion_success=Izvietošanas atslēga tika veiksmīgi izdzēsta!
-
-diff.browse_source=Pārlūkot izejas kodu
-diff.parent=vecāks
-diff.commit=revīzija
-diff.data_not_available=Salīdzināšanas dati nav pieejami.
-diff.show_diff_stats=Rādīt salīdzināšanas statistiku
-diff.stats_desc=<strong>%d mainītis faili</strong> ar <strong>%d papildinājumiem</strong> un <strong>%d dzēšanām</strong>
-diff.bin=BIN
-diff.view_file=Parādīt failu
-
-release.releases=Laidieni
-release.new_release=Jauns laidiens
-release.draft=Melnraksts
-release.prerelease=Pirmsizlaides versija
-release.stable=Stabila
-release.edit=labot
-release.ahead=<strong>%d</strong> revīzijas atzarā %s kopš šī laidiena
-release.source_code=Izejas kods
-release.tag_name=Taga nosaukums
-release.target=Mērķis
-release.tag_helper=Publicējot, izvēlieties esošu vai izveidojiet jaunu tagu.
-release.release_title=Laidiena virsraksts
-release.content_with_md=Saturs ar <a href="%s">Markdown</a>
-release.write=Rakstīt
-release.preview=Priekšskatītījums
-release.content_placeholder=Uzrakstiet kādu aprakstu
-release.loading=Notiek ielāde...
-release.prerelease_desc=Šī ir pirmslaidiena versija
-release.prerelease_helper=Tiks norādīts, ka šis laidiens nav gatavs lietošanai produkcijas režīmā.
-release.publish=Publicēt laidienu
-release.save_draft=Saglabāt melnrakstu
-release.edit_release=Labot laidienu
-release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē.
-
-[org]
-org_name_holder=Organizācijas nosaukums
-org_name_helper=Labi organizāciju nosaukumi ir īsi un tādi, kurus viegli atcerēties.
-create_org=Izveidot organizāciju
-repo_updated=Atjaunināts
-people=Personas
-invite_someone=Uzaicināt kādu
-teams=Komandas
-lower_members=dalībnieki
-lower_repositories=repozitoriji
-create_new_team=Izveidot jaunu komandu
-org_desc=Apraksts
-team_name=Komandas nosaukums
-team_desc=Apraksts
-team_name_helper=Šo nosaukumu varēs izmantot, lai pieminētu komandu sarunās.
-team_desc_helper=Komandas apraksts
-team_permission_desc=Kādām tiesībām šai komandai būtu jābūt?
-
-form.name_reserved=Organizācijas nosaukums '%s' ir rezervēts.
-form.name_pattern_not_allowed=Organizācijas nosaukums '%s' nav atļauts.
-
-settings=Iestatījumi
-settings.options=Opcijas
-settings.full_name=Pilns vārds, uzvārds
-settings.website=Mājas lapa
-settings.location=Atrašanās vieta
-settings.update_settings=Mainīt iestatījumus
-settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti.
-settings.change_orgname_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo organizāciju.
-settings.update_avatar_success=Organizācijas avatara iestatījumi tika veiksmīgi saglabāti.
-settings.delete=Dzēst organizāciju
-settings.delete_account=Dzēst šo organizāciju
-settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
-settings.confirm_delete_account=Apstiprināt dzēšanu
-settings.delete_org_title=Organizācijas dzēšana
-settings.delete_org_desc=Šī organizācija tiks pilnībā izdzēsta, vai vēlaties turpināt?
-settings.hooks_desc=Pievienot tīmekļa āķus, kas nostrādās <strong>visiem repozitorijiem</strong> šajā organizācijā.
-
-members.public=Publisks
-members.public_helper=padarīt privātu
-members.private=Privāts
-members.private_helper=padarīt publisku
-members.owner=Īpašnieks
-members.member=Biedri
-members.conceal=Noslēpt
-members.remove=Noņemt
-members.leave=Atstāt
-members.invite_desc=Sāciet rakstīt lietotājvārdu, lai uzaicinātu jaunu biedru organizācijā %s:
-members.invite_now=Uzaicināt tagad
-
-teams.join=Pievienoties
-teams.leave=Atstāt
-teams.read_access=Lasīšanas piekļuve
-teams.read_access_helper=Komanda varēs skatīties un klonēt šīs organizācijas repozitorijus.
-teams.write_access=Rakstīšanas piekļuve
-teams.write_access_helper=Komanda varēs skatīties un klonēt, kā arī nosūtīt izmaiņas šīs organizācijas repozitorijiem.
-teams.admin_access=Administratora piekļuve
-teams.admin_access_helper=Šī komanda varēs veikt push/pull komandas tās repozitorijiem, kā arī tiem pievienot citus līdzstrādniekus.
-teams.no_desc=Komandai nav apraksta
-teams.settings=Iestatījumi
-teams.owners_permission_desc=Īpašniekiem ir pilna piekļuve <strong>visiem repozitorijiem</strong> un ir organizācijas <strong>administratora tiesības</strong>.
-teams.members=Komandas biedri
-teams.update_settings=Saglabāt iestatījumus
-teams.delete_team=Dzēst komandu
-teams.add_team_member=Pievienot komandas biedru
-teams.delete_team_title=Komandas dzēšana
-teams.delete_team_desc=Komanda tiks dzēsta, vai vēlaties turpināt? Komandas biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem.
-teams.delete_team_success=Komanda tika veiksmīgi izdzēsta.
-teams.read_permission_desc=Šai komandai ir <strong>lasīšanas</strong> tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus.
-teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem.
-teams.admin_permission_desc=Šai komandai ir <strong>administratora</strong> tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem.
-teams.repositories=Komandas repozitoriji
-teams.add_team_repository=Pievienot komandas repozitoriju
-teams.remove_repo=Noņemt
-teams.add_nonexistent_repo=Repozitorijs, kuram Jūs mēģinat pievienot neeksistē, sākumā izveidojiet to.
-
-[admin]
-dashboard=Infopanelis
-users=Lietotāji
-organizations=Organizācijas
-repositories=Repozitoriji
-authentication=Autentifikācijas
-config=Konfigurācija
-notices=Sistēmas paziņojumi
-monitor=Uzraudzība
-first_page=Pirmā
-last_page=Pēdējā
-total=Kopā: %d
-
-dashboard.statistic=Statistika
-dashboard.operations=Darbības
-dashboard.system_status=Sistēmas uzraudzības statuss
-dashboard.statistic_info=Gogs datu bāze satur <b>%d</b> lietotājus, <b>%d</b> organizācijas, <b>%d</b> publiskās atslēgas, <b>%d</b> repozitorijus, <b>%d</b> vērošanas, <b>%d</b> atzīmētas zvaigznītes, <b>%d</b> darbības, <b>%d</b> piekļuves, <b>%d</b> problēmas, <b>%d</b> komentārus, <b>%d</b> sociālos kontus, <b>%d</b> sekošanas, <b>%d</b> spoguļošanas, <b>%d</b> izlaides, <b>%d</b> login sources, <b>%d</b> tīmekļa āķus, <b>%d</b> starpposmus, <b>%d</b> etiķetes, <b>%d</b> āķu uzdevumus, <b>%d</b> komandas, <b>%d</b> labotus uzdevumus, <b>%d</b> pielikumus.
-dashboard.operation_name=Darbības nosaukums
-dashboard.operation_switch=Pārslēgt
-dashboard.operation_run=Palaist
-dashboard.clean_unbind_oauth=Notīrīt nesaistītās OAuth biļetes
-dashboard.clean_unbind_oauth_success=Visas nesaistītās OAuth biļetes tika veiksmīgi izdzēstas.
-dashboard.delete_inactivate_accounts=Dzēst visus neaktīvos kontus
-dashboard.delete_inactivate_accounts_success=Visi neaktīvie kotni tika veiksmīgi izdzēsti.
-dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus
-dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika veiksmīgi izdzēsti.
-dashboard.git_gc_repos=Veikt repozitoriju datu sakārtošānu (git gc)
-dashboard.git_gc_repos_success=Datu sakārtošana visiem repozitorijiem veiksmīgi pabeigta.
-dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu (brīdinājums: ne-Git atslēgas tiks pazaudētas)
-dashboard.resync_all_sshkeys_success=Visas publiskās atslēgas tika veiksmīgi pārrakstītas.
-dashboard.resync_all_update_hooks=Pārrakstīt visu repozitoriju izmaiņu āķus (nepieciešams, ja tiek mainīta konfigurācijas faila atrašanās vieta)
-dashboard.resync_all_update_hooks_success=Visu repozitoriju izmaiņu āķi tika veiksmīgi pārrakstīti.
-
-dashboard.server_uptime=Servera darbības laiks
-dashboard.current_goroutine=Izmantotās Gorutīnas
-dashboard.current_memory_usage=Pašreiz izmantotā atmiņa
-dashboard.total_memory_allocated=Kopējā piešķirtā atmiņa
-dashboard.memory_obtained=Iegūtā atmiņa
-dashboard.pointer_lookup_times=Rādītāju meklēšanas reizes
-dashboard.memory_allocate_times=Atmiņas piešķiršanas reizes
-dashboard.memory_free_times=Atmiņas atbrīvošanas reizes
-dashboard.current_heap_usage=Pašreizējā kaudzes izmantošana
-dashboard.heap_memory_obtained=Iegūtā kaudzes atmiņa
-dashboard.heap_memory_idle=Neizmantotā kaudzes atmiņa
-dashboard.heap_memory_in_use=Izmantotā kaudzes atmiņa
-dashboard.heap_memory_released=Atbrīvotā kaudzes atmiņa
-dashboard.heap_objects=Kaudzes atmiņas objekti
-dashboard.bootstrap_stack_usage=Izmantotais sāknēšanas steka lielums
-dashboard.stack_memory_obtained=Iegūtā steka atmiņa
-dashboard.mspan_structures_usage=Izmantotās MSpan struktūras
-dashboard.mspan_structures_obtained=Iegūtās MSpan struktūras
-dashboard.mcache_structures_usage=Izmantotās MCache struktūras
-dashboard.mcache_structures_obtained=Iegūtās MCache struktūras
-dashboard.profiling_bucket_hash_table_obtained=Iegūtā profilēšanas kausa jaucējtabula
-dashboard.gc_metadata_obtained=Iegūtie GC metadati
-dashboard.other_system_allocation_obtained=Iegūtās citas sistēmas sadales
-dashboard.next_gc_recycle=Nākošā GC atkritne
-dashboard.last_gc_time=Laiks kopš pēdējās GC
-dashboard.total_gc_time=Kopējais GC izpildes laiks
-dashboard.total_gc_pause=Kopējais GC izpildes laiks
-dashboard.last_gc_pause=Pedējās GC izpildes laiks
-dashboard.gc_times=GC reizes
-
-users.user_manage_panel=Lietotāju pārvaldības panelis
-users.new_account=Izveidot jaunu kontu
-users.name=Vārds
-users.activated=Aktivizēts
-users.admin=Administrators
-users.repos=Repozitoriji
-users.created=Izveidots
-users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu
-users.new_success=Jauns konts '%s' tika veiksmīgi izveidots.
-users.edit=Labot
-users.auth_source=Autentificēšanas avots
-users.local=Iebūvētā
-users.auth_login_name=Autentifikācijas pieteikšanās vārds
-users.password_helper=Atstājiet tukšu, ja nevēlaties mainīt.
-users.update_profile_success=Konta profils tika veiksmīgi saglabāts.
-users.edit_account=Labot kontu
-users.is_activated=Konts ir aktivizēts
-users.is_admin=Šim kontam ir administratora piekļuves tiesības
-users.allow_git_hook=Šim kontam ir tiesības pievienot/labot Git āķus
-users.update_profile=Mainīt konta profilu
-users.delete_account=Dzēst šo kontu
-users.still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
-users.still_has_org=Šis konts ir vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju.
-users.deletion_success=Konts tika veiksmīgi izdzēsts!
-
-orgs.org_manage_panel=Organizāciju pārvaldības panelis
-orgs.name=Nosaukums
-orgs.teams=Komandas
-orgs.members=Dalībnieki
-
-repos.repo_manage_panel=Repozitoriju pārvaldības panelis
-repos.owner=Īpašnieks
-repos.name=Vārds
-repos.private=Privāts
-repos.watches=Vērošana
-repos.stars=Atzīmētās zvaigznītes
-repos.issues=Problēmas
-
-auths.auth_manage_panel=Autentifikācijas pārvaldības panelis
-auths.new=Pievienot jaunu avotu
-auths.name=Nosaukums
-auths.type=Veids
-auths.enabled=Iespējota
-auths.updated=Atjaunināta
-auths.auth_type=Autentifikācijas tips
-auths.auth_name=Autentifikācijas nosaukums
-auths.domain=Domēns
-auths.host=Resursdators
-auths.port=Ports
-auths.bind_dn=Saistīšanas DN
-auths.bind_password=Saistīšanas parole
-auths.bind_password_helper=Brīdinājums: Šī parole tiks saglabāta nešifrētā veidā. Neizmantojiet kontu ar augstām privilēģijām.
-auths.user_base=Lietotāja pamatnosacījumi
-auths.user_dn=Lietotāja DN
-auths.attribute_name=Vārda atribūts
-auths.attribute_surname=Uzvārda atribūts
-auths.attribute_mail=E-pasta atribūts
-auths.filter=Lietotāju filts
-auths.admin_filter=Administratoru filtrs
-auths.ms_ad_sa=MS Ad SA
-auths.smtp_auth=SMTP autentifikācijas tips
-auths.smtphost=SMTP resursdators
-auths.smtpport=SMTP ports
-auths.allowed_domains=Atļautie domēni
-auths.allowed_domains_helper=Atstājiet tukšu, ja nevēlaties ierobežot domēnu vārdus. Domēna vārdus nepieciešams atdalīt ar komatu ','.
-auths.enable_tls=Iespējot TLS šifrēšanu
-auths.skip_tls_verify=Izlaist TLS verifikāciju
-auths.pam_service_name=PAM servisa nosaukums
-auths.enable_auto_register=Iespējot automātisko reģistrāciju
-auths.tips=Padomi
-auths.edit=Labot autentifikācijas iestatījumus
-auths.activated=Autentifikācija ir aktivizēta
-auths.new_success=Jauna autentifikācija '%s' tika veiksmīgi pievienota.
-auths.update_success=Autentifikācijas iestatījumi tika veiksmīgi saglabāti.
-auths.update=Mainīt autentifikācijas iestatījumus
-auths.delete=Dzēst šo autentifikāciju
-auths.delete_auth_title=Autentifikācijas dzēšana
-auths.delete_auth_desc=Šī autentifikācija tiks dzēsta, vai vēlaties turpināt?
-auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
-
-config.server_config=Servera konfigurācija
-config.app_name=Lietotnes nosaukums
-config.app_ver=Lietotnes versija
-config.app_url=Lietotnes URL
-config.domain=Domēns
-config.offline_mode=Bezsaistes režīms
-config.disable_router_log=Atspējot maršrutētāja žurnalizēšanu
-config.run_user=Izpildes lietotājs
-config.run_mode=Izpildes režīms
-config.repo_root_path=Repozitoriju glabāšanas vieta
-config.static_file_root_path=Statisko failu atrašanās vieta
-config.log_file_root_path=Žurnalizēšanas failu glabāšanas vieta
-config.script_type=Skripta veids
-config.reverse_auth_user=Reversā lietotāja autentifikācija
-config.db_config=Datu bāzes konfigurācija
-config.db_type=Veids
-config.db_host=Resursdators
-config.db_name=Nosaukums
-config.db_user=Lietotājs
-config.db_ssl_mode=SSL režīms
-config.db_ssl_mode_helper=(tikai PostgreSQL datu bāzei)
-config.db_path=Ceļš
-config.db_path_helper=(priekš "sqlite3" and "tidb")
-config.service_config=Pakalpojuma konfigurācija
-config.register_email_confirm=Pieprasīt e-pasta apstiprināšanu
-config.disable_register=Atspējot jaunu lietotāju reģistrāciju
-config.show_registration_button=Rādīt reģistrēšanās pogu
-config.require_sign_in_view=Nepieciešama autorizācija
-config.enable_cache_avatar=Glabāt profila attēlus kešatmiņā
-config.mail_notify=Pasta paziņojumi
-config.disable_key_size_check=Atspējot atslēgas minimālā garuma pārbaudi
-config.enable_captcha=Iespējot drošības kodu
-config.active_code_lives=Aktīvā koda ilgums
-config.reset_password_code_lives=Paroles atiestatīšanas koda ilgums
-config.webhook_config=Tīkla āķu konfigurācija
-config.queue_length=Rindas garums
-config.deliver_timeout=Piegādes noildze
-config.skip_tls_verify=Izlaist TLS pārbaudi
-config.mailer_config=Sūtītāja konfigurācija
-config.mailer_enabled=Iespējots
-config.mailer_disable_helo=Atspējot HELO
-config.mailer_name=Nosaukums
-config.mailer_host=Resursdators
-config.mailer_user=Lietotājs
-config.oauth_config=OAuth konfigurācija
-config.oauth_enabled=Iespējota
-config.cache_config=Kešatmiņas konfigurācija
-config.cache_adapter=Kešatmiņas adapteris
-config.cache_interval=Kešatmiņas intervāls
-config.cache_conn=Kešatmiņas pieslēguma parametri
-config.session_config=Sesijas konfigurācja
-config.session_provider=Sesijas nodrošinātājs
-config.provider_config=Pakalpojumu sniedzēja konfigurācija
-config.cookie_name=Sīkdatnes nosaukums
-config.enable_set_cookie=Ļaut izmantot sīkdatnes
-config.gc_interval_time=GC laika intervāls
-config.session_life_time=Sesijas ilgums
-config.https_only=Tikai HTTPS
-config.cookie_life_time=Sīkdatņu glabāšanas ilgums
-config.picture_config=Attēlu konfigurācija
-config.picture_service=Lokāli attēli
-config.disable_gravatar=Atspējot Gravatar
-config.log_config=Žurnalizēšanas konfigurācija
-config.log_mode=Žurnalizēšanas veids
-
-monitor.cron=Cron uzdevumi
-monitor.name=Nosaukums
-monitor.schedule=Grafiks
-monitor.next=Nākošās izpildes laiks
-monitor.previous=Pēdējās izpildes laiks
-monitor.execute_times=Izpilžu skaits
-monitor.process=Darbojošies procesi
-monitor.desc=Apraksts
-monitor.start=Sākuma laiks
-monitor.execute_time=Izpildes laiks
-
-notices.system_notice_list=Sistēmas paziņojumi
-notices.type=Veids
-notices.type_1=Repozitorijs
-notices.desc=Apraksts
-notices.op=Op.
-notices.delete_success=Sistēmas paziņojums tika veiksmīgi izdzēsts.
-
-[action]
-create_repo=izveidoja repozitoriju <a href="%s">%s</a>
-rename_repo=pārsauca repozitoriju no <code>%[1]s</code> uz <a href="%[2]s">%[3]s</a>
-commit_repo=veica izmaiņu nosūtīšanu atzaram <a href="%s/src/%s">%[2]s</a> repozitorijā <a href="%[1]s">%[3]s</a>
-create_issue=`reģistrēja problēmu <a href="%s/issues/%s">%s#%[2]s</a>`
-create_pull_request=`izveidoja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`pievienoja komentāru problēmai <a href="%s/issues/%s">%s#%[2]s</a>`
-merge_pull_request=`sapludināja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
-transfer_repo=mainīja repozitorija <code>%s</code> īpašnieku uz <a href="%s">%s</a>
-push_tag=pievienoja tagu <a href="%s/src/%s">%[2]s</a> repozitorijam <a href="%[1]s">%[3]s</a>
-compare_2_commits=Veikt salīdzināšanu starp šīm 2 revīzijām
-
-[tool]
-ago=atpakaļ
-from_now=no šī brīža
-now=tagad
-1s=1 sekundi %s
-1m=1 minūti %s
-1h=1 stundu %s
-1d=1 dienu %s
-1w=1 nedēļu %s
-1mon=1 mēnesi %s
-1y=1 gadu %s
-seconds=%d sekundes %s
-minutes=%d minūtes %s
-hours=%d stundas %s
-days=%d dienas %s
-weeks=%d nedēļas %s
-months=%d mēneši %s
-years=%d gadi %s
-raw_seconds=sekundes
-raw_minutes=minūtes
-
-[dropzone]
-default_message=Ievelciet failus šeit vai noklikšķiniet, lai augšupielādētu.
-invalid_input_type=Šādus failus nav iespējams augšupielādēt.
-file_too_big=Faila izmērs ({{filesize}} MB) pārsniedz maksimālo atļauto izmēru ({{maxFilesize}} MB).
-remove_file=Noņemt failu
-
+app_desc=Viegli uzstādāms Git serviss, kas rakstīts valodā Go
+
+home=Sākums
+dashboard=Infopanelis
+explore=Izpētīt
+help=Palīdzība
+sign_in=Pierakstīties
+sign_out=Izrakstīties
+sign_up=Pieteikties
+register=Reģistrēties
+website=Mājas lapa
+version=Versija
+page=Lapa
+template=Sagatave
+language=Valoda
+create_new=Izveidot...
+user_profile_and_more=Lietotāja profilu un vairāk
+signed_in_as=Pierakstījies kā
+
+username=Lietotājvārds
+email=E-pasts
+password=Parole
+re_type=Parole atkārtoti
+captcha=Pārbaudes kods
+
+repository=Repozitorijs
+organization=Organizācija
+mirror=Spogulis
+new_repo=Jauns repozitorijs
+new_migrate=Jauna migrācija
+new_fork=Jauns atdalītais repozitorijs
+new_org=Jauna organizācija
+manage_org=Pārvaldīt organizācijas
+admin_panel=Admin panelis
+account_settings=Konta iestatījumi
+settings=Iestatījumi
+your_profile=Tavs profils
+your_settings=Tavi iestatījumi
+
+news_feed=Jaunumu plūsma
+pull_requests=Izmaiņu pieprasījumi
+issues=Problēmas
+
+cancel=Atcelt
+
+[search]
+search=Meklēt...
+repository=Repozitorijs
+user=Lietotājs
+issue=Kļūda
+code=Kods
+
+[install]
+install=Instalācija
+title=Instalācijas soļi pirmo reizi palaižot
+docker_helper=Ja Gogs tiek lietots zem Docker, izlasiet uzmanīgi <a target="_blank" href="%s">vadlīnijas</a>, pirms ko maināt šajā lapā!
+requite_db_desc=Gogs nepieciešams MySQL, PostgreSQL, SQLite3 vai TiDB.
+db_title=Datu bāzes iestatījumi
+db_type=Datu bāzes veids
+host=Resursdators
+user=Lietotājs
+password=Parole
+db_name=Datu bāzes nosaukums
+db_helper=Nepieciešams izmantot MySQL INNODB dzini ar rakstzīmju kopu utf8_general_ci.
+ssl_mode=SSL režīms
+path=Ceļš
+sqlite_helper=SQLite3 vai TiDB datu bāzes faila atrašanās vieta.
+err_empty_db_path=Nepieciešams norādīt SQLite3 vai TiDB datu bāzes atrašanās vietu.
+err_invalid_tidb_name=TiDB datu bāzes nosaukums nevar saturēt simbolus "." un "-".
+no_admin_and_disable_registration=Reģistrāciju nevar atslēgt, kamēr nav izveidots administratora konts.
+err_empty_admin_password=Administratora kontam ir obligāti jānorāda parole.
+
+general_title=Gogs vispārīgie iestatījumi
+app_name=Lietotnes nosaukums
+app_name_helper=Norādiet organizācijas nosaukumu šeit!
+repo_path=Repozitoriju glabāšanas vieta
+repo_path_helper=Visi Git attālinātie repozitoriji tiks glabāti šajā direktorijā.
+run_user=Izpildes lietotājs
+run_user_helper=Lietotājam ir jābūt rakstīšanas tiesībām repozitorija saknes direktorijai un Gogs jābūt palaistam zem šī lietotāja.
+domain=Domēns
+domain_helper=Tas ietekmē SSH klonēšanas URL.
+ssh_port=SSH ports
+ssh_port_helper=Porta numurs, kuru izmanto Jūsu SSH serveris, atstājiet tukšu, ja nevēlaties izmantot SSH.
+http_port=HTTP ports
+http_port_helper=Porta numurs pēc kura lietojumprogrammai būs iespējams pieslēgties.
+app_url=Lietotnes URL
+app_url_helper=Tas ietekmē HTTP/HTTPS klonēšanas URL un e-pasta saturā izsūtītās saites.
+
+optional_title=Neobligātie iestatījumi
+email_title=E-pasta pakalpojuma iestatījumi
+smtp_host=SMTP resursdators
+smtp_from=Sūtītājs
+smtp_from_helper=E-pasta adrese, RFC 5322. Drīkst būt vienkārši e-pasta adrese vai formātā "Nosaukums" <e-pasts@example.com>.
+mailer_user=Sūtītāja e-pasta adrese
+mailer_password=Sūtītāja parole
+register_confirm=Iespējot reģistrēšanās apstiprināšanu
+mail_notify=Iespējot e-pasta paziņojumus
+server_service_title=Servera un citu servisu iestatījumi
+offline_mode=Iespējot bezsaistes režīmu
+offline_mode_popup=Atspējot CDN arī produkcijas režīmā, visi resursu faili tiks piegādāti no servera.
+disable_gravatar=Atspējot Gravatar pakalpojumu
+disable_gravatar_popup=Atspējot Gravatar un citus avotus, visus avatarus augšupielādēts lietotāji vai izmantos noklusēto attēlu.
+disable_registration=Atspējot lietotāju reģistrāciju
+disable_registration_popup=Atspējot lietotāju reģistrāciju, tikai administrators varēs izveidot jaunus lietotāju kontus.
+enable_captcha=Iespējot drošības kodu
+enable_captcha_popup=Lietotājam reģistrējoties, pieprasīt ievadīt drošības kodu.
+require_sign_in_view=Iespējot nepieciešamību autorizēties, lai aplūkotu lapas
+require_sign_in_view_popup=Tika autorizēti lietotāji var aplūkot lapas, neautorizēti lietotāji var piekļūt tikai autorizācijas un reģistrēšanās lapām.
+admin_setting_desc=Nav nepieciešams izveidot administratora kontu uzreiz, lietotājs ar ID=1 saņems administratora tiesības automātiski.
+admin_title=Admin konta iestatījumi
+admin_name=Lietotājvārds
+admin_password=Parole
+confirm_password=Apstipriniet paroli
+admin_email=Administratora e-pasts
+install_gogs=Instalēt Gogs
+test_git_failed=Kļūda pārbaudot 'git' komandu: %v
+sqlite3_not_available=Jūsu versija neatbalsta SQLite3, lūdzu lejupielādējiet oficiālo bināro versiju no %s, NEVIS gobuild versiju.
+invalid_db_setting=Datu bāzes iestatījums nav pareizs: %v
+invalid_repo_path=Repozitorija atrašanās vieta ir nekorekta: %v
+run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s
+save_config_failed=Neizdevās saglabāt konfigurāciju: %v
+invalid_admin_setting=Nekorekts admin konta iestatījums: %v
+install_success=Laipni lūdzam! Mēs priecājamies, ka Jūs izvēlaties Gogs, patīkamu lietošanu!
+
+[home]
+uname_holder=Lietotājvārds vai e-pasts
+password_holder=Parole
+switch_dashboard_context=Mainīt infopaneļa kontekstu
+my_repos=Mani repozitoriji
+collaborative_repos=Sadarbības repozitoriji
+my_orgs=Manas organizācijas
+my_mirrors=Mani spoguļi
+view_home=Skatīties %s
+
+issues.in_your_repos=Jūsu repozitorijos
+
+[explore]
+repos=Repozitoriji
+
+[auth]
+create_new_account=Izveidot jaunu kontu
+register_hepler_msg=Jau ir konts? Pieraksties tagad!
+social_register_hepler_msg=Jau ir konts? Sasaisti tagad!
+disable_register_prompt=Atvainojiet, reģistrācija ir atspējota. Lūdzu, sazinieties ar vietnes administratoru.
+disable_register_mail=Atvainojiet, reģistrācijas e-pasta apstiprināšana ir atspējota.
+remember_me=Atcerēties mani
+forgot_password=Aizmirsu paroli
+forget_password=Aizmirsi paroli?
+sign_up_now=Nepieciešams konts? Reģistrējies tagad.
+confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasts ir nosūtīts uz <b>%s</b>, lūdzu, pārbaudies savu e-pasta kontu tuvāko %d stundu laikā, lai pabeigtu reģistrācijas procesu.
+active_your_account=Aktivizēt savu kontu
+resent_limit_prompt=Atvainojiet, Jūs sūtījāt aktivizācijas e-pastu pārāk bieži. Lūdzu, gaidiet 3 minūtes.
+has_unconfirmed_mail=Sveiki %s, Jums ir neapstiprināta e-pasta adrese (<b>%s</b>). Ja neesat saņēmis apstiprināšanas e-pastu vai Jums ir nepieciešams nosūtīt jaunu, lūdzu, nospiediet pogu, kas atrodas zemāk.
+resend_mail=Nospiediet šeit, lai vēlreiz nosūtītu aktivizācijas e-pastu
+email_not_associate=Šī e-pasta adrese nav saistīta ar Jūsu kontu.
+send_reset_mail=Spiediet šeit, lai nosūtītu paroles maiņas vēstuli uz Jūsu e-pastu
+reset_password=Atjaunot savu paroli
+invalid_code=Atvainojiet, Jūsu apstiprināšanas kodam ir beidzies derīguma termiņš vai arī tas ir nepareizs.
+reset_password_helper=Nospiediet šeit, lai atjaunotu paroli
+password_too_short=Paroles garums nedrīkst būt mazāks par 6.
+
+[mail]
+activate_account=Lūdzu, aktivizējiet savu kontu
+activate_email=Apstipriniet savu e-pasta adresi
+reset_password=Atiestatīt savu paroli
+register_success=Reģistrācija notikusi veiksmīgi
+register_notify=Welcome on board
+
+[modal]
+yes=Jā
+no=Nē
+modify=Mainīt
+
+[form]
+UserName=Lietotājvārds
+RepoName=Repozitorija nosaukums
+Email=E-pasta adrese
+Password=Parole
+Retype=Parole atkārtoti
+SSHTitle=SSH atslēgas nosaukums
+HttpsUrl=HTTPS URL
+PayloadUrl=Vērtuma URL
+TeamName=Komandas nosaukums
+AuthName=Autorizācijas nosaukums
+AdminEmail=Admin e-pasta adrese
+
+require_error=` nedrīkst būt tukšs.`
+alpha_dash_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus vai domuzīmes (-_).`
+alpha_dash_dot_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus, domuzīmes (-_) vai punktu.`
+size_error=` jābūt %s simbolus garam.`
+min_size_error=` jabūt vismaz %s simbolu garumā.`
+max_size_error=` jabūt ne mazāk kā %s simbolu garumā.`
+email_error=` nav derīga e-pasta adrese.`
+url_error=` nav korekts URL.`
+include_error=` ir jāsatur tekstu '%s'.`
+unknown_error=Nezināma kļūda:
+captcha_incorrect=Pārbaudes kods nesakrīt ar attēlā redzamo.
+password_not_match=Parole un atkārtoti ievadītā parole nav vienādas.
+
+username_been_taken=Lietotājvārds ir jau aizņemts.
+repo_name_been_taken=Repozitorija vārds ir jau aizņemts.
+org_name_been_taken=Organizācijas nosaukums ir jau aizņemts.
+team_name_been_taken=Komandas nosaukums ir jau aizņemts.
+email_been_used=E-pasta adrese jau tiek izmantota.
+illegal_team_name=Grupas nosaukums satur neatļautas rakstzīmes.
+username_password_incorrect=Lietotājvārds vai parole nav pareiza.
+enterred_invalid_repo_name=Lūdzu, pārliecinieties, vai ievadītā repozitorija nosaukums ir pareizs.
+enterred_invalid_owner_name=Lūdzu, pārliecinieties, vai ievadītā īpašnieka vārds ir pareizs.
+enterred_invalid_password=Lūdzu pārliecinieties, vai Jūsu ievadītā parole ir pareiza.
+user_not_exist=Šāds lietotājs neeksistē.
+last_org_owner=Nav iespējams noņemt vienīgo komandas īpašnieku. Pirms tam ir nepieciešams norādīt jauno īpašnieku.
+
+invalid_ssh_key=Atvainojiet, nav iespējams pārbaudīt Jūsu SSH atslēgu: %s
+unable_verify_ssh_key=Nav iespējams pārbaudīt jūsu SSH atslēgu, bet tiks pieņemts, ka tā ir derīga, lūdzu, pārliecinieties par to pats.
+auth_failed=Autentifikācija neizdevās: %v
+
+still_own_repo=Jūsu esat vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
+still_has_org=Jūsu esat vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju.
+org_still_own_repo=Šī organizācija ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
+
+still_own_user=Šo autentifikāciju joprojām izmanto vismaz viens lietotājs, nepieciešams šiem lietotājiem nomainīt autentifikācijas veidu vai tos izdzēst.
+
+target_branch_not_exist=Mērķa atzars neeksistē
+
+[user]
+change_avatar=Mainīt savu profila attēlu vietnē gravatar.com
+change_custom_avatar=Mainīt savu profila attēlu iestatījumos
+join_on=Pievienojās
+repositories=Repozitoriji
+activity=Publiskā aktivitāte
+followers=Sekotāji
+starred=Atzīmēti ar zvaigznīti
+following=Seko
+
+form.name_reserved=Lietotāja vārds '%s' jau ir aizņemts.
+form.name_pattern_not_allowed=Lietotāja vārds '%s' nav atļauts.
+
+[settings]
+profile=Profils
+password=Parole
+ssh_keys=SSH atslēgas
+social=Sociālie konti
+applications=Lietotnes
+orgs=Organizācijas
+delete=Dzēst kontu
+uid=Lietotāja ID
+
+public_profile=Publiskais profils
+profile_desc=Jūsu e-pasta adrese ir publiska un tiks izmantota, lai nosūtītju Jums paziņojumus, kas saistīti ar Jūsu kontu vai darbībām veiktām caur šo mājas lapu.
+full_name=Pilns vārds
+website=Mājas lapa
+location=Atrašanās vieta
+update_profile=Mainīt profilu
+update_profile_success=Jūsu profila dati ir veiksmīgi saglabāti.
+change_username=Lietotāja vārds mainīts
+change_username_prompt=Šī izmaiņa ietekmēs saites, kas norāda uz Jūsu kontu.
+continue=Turpināt
+cancel=Atcelt
+
+enable_custom_avatar=Iespējot maināmu profila attēlu
+enable_custom_avatar_helper=Iespējojiet šo, lai atslēgtu profilu attēlu ņemšanu no gravatar.com
+choose_new_avatar=Izvēlēties jaunu profila attēlu
+update_avatar=Saglabāt profila bildi
+uploaded_avatar_not_a_image=Augšupielādētais fails nav attēls.
+no_custom_avatar_available=Nav iespējams mainīt profila bildi.
+update_avatar_success=Jūsu profila bilde tika veiksmīgi saglabāta.
+
+change_password=Mainīt paroli
+old_password=Pašreizējā parole
+new_password=Jauna parole
+retype_new_password=Ievadīt paroli atkāroti
+password_incorrect=Ievadīta nepareiza pašreizējā parole.
+change_password_success=Parole tika veiksmīgi nomainīta. Tagad jūs varat pieraksītites, izmantojot jauno paroli.
+
+emails=E-pasta adreses
+manage_emails=Pārvaldīt e-pasta adreses
+email_desc=Primārā e-pasta adrese tiks izmantota sūtot notifikācijas un citām dabībām.
+primary=Primārā
+primary_email=Iestatīt kā primāro
+delete_email=Dzēst
+email_deletion=E-pasta dzēšana
+email_deletion_desc=Dzēšot šo e-pasta adresi, tiks dzēsta arī visa ar to saistītā informācija no Jūsu konta. Vai vēlaties turpināt?
+email_deletion_success=E-pasta adrese ir veiksmīgi izdzēsta!
+add_new_email=Pievienot jaunu e-pasta adresi
+add_email=Pievienot e-pastu
+add_email_confirmation_sent=Jauns apstiprinājuma e-pasts tika nosūtīts uz '%s', pārbaudiet savu e-pastu tuvāko %d stundu laikā, lai pabeigtu apstiprināšanas procesu.
+add_email_success=Jūsu jaunā e-pasta adrese tika veiksmīgi pievienota.
+
+manage_ssh_keys=Pārvaldīt SSH atslēgas
+add_key=Pievienot atslēgu
+ssh_desc=Šis ir saraksts ar Jūsu kontam piesaistītajām SSH atslēgām. Dzēsiet visas, kuras Jūs neatpazīstat.
+ssh_helper=<strong>Vajadzīga palīdzība?</strong> Apskatieties pamācību kā <a href="%s">ģenerēt SSH atslēgas</a> vai kā novērst <a href="%s">biežāk sastopamās SSH problēmas</a>.
+add_new_key=Pievienot SSH atslēgu
+ssh_key_been_used=Šī publiskā atslēga jau ir izmantota.
+ssh_key_name_used=Publiskā atslēga ar šādu nosaukumu jau eksistē.
+key_name=Atslēgas nosaukums
+key_content=Saturs
+add_key_success=Jauna SSH atslēga '%s' tika veiksmīgi pievienota!
+delete_key=Dzēst
+ssh_key_deletion=SSH atslēgas dzēšana
+ssh_key_deletion_desc=Dzēšot šo SSH atslēgu, tiks dzēsta visa ar to saistītā piekļuve Jūsu kontam. Vai vēlaties turpināt?
+ssh_key_deletion_success=SSH atslēga tika veiksmīgi izdzēsta!
+add_on=Pievienota
+last_used=Pēdējo reizi izmantota
+no_activity=Nav nesenas aktivitātes
+key_state_desc=Šī atslēga tika izmantota pēdējo 7 dienu laikā
+token_state_desc=Šis talons tika izmantots pēdējo 7 dienu laikā
+
+manage_social=Pārvaldīt piesaistītos sociālos kontus
+social_desc=Šeit tiek attēloti visi sociālie konti, kas ir piesaistīti Jūsu kontam. Dzēsiet visus, kurus Jūs neatpazīstat.
+unbind=Atsaistīt
+unbind_success=Sociālais konts tika atsaistīts.
+
+manage_access_token=Pārvaldīt personīgos piekļuves talonus
+generate_new_token=Ģenerēt jaunu talonu
+tokens_desc=Taloni, kurus esat uzģenerējuši, kas var tikt izmantoti, lai piekļūtu Gogs API.
+new_token_desc=Pašlaik visiem taloniem ir pilna piekļuve Jūsu kontam.
+token_name=Talona nosaukums
+generate_token=Ģenerēt talonu
+generate_token_succees=Jauns piekļuves talons tika veiksmīgi uzģenerēts! Pārliecinieties, ka esat to nokopējis, jo to Jums vairāk nebūs iespēja izdarīt!
+delete_token=Dzēst
+access_token_deletion=Personīgā piekļuves talona dzēšana
+access_token_deletion_desc=Dzēšot personīgo piekļuves talonu, tiks liegta piekļuve aplikācijām, kas to izmanto. Vai vēlaties turpināt?
+delete_token_success=Personīgās piekļuves talons veiksmīgi izdzēsts! Neaizmirstiet nomainīt uz citu aplikācijās, kas to izmantoja.
+
+delete_account=Dzēst savu kontu
+delete_prompt=Šī darbība pilnībā izdzēsīs Jūsu kontu, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
+confirm_delete_account=Apstiprināt dzēšanu
+delete_account_title=Konta dzēšana
+delete_account_desc=Šis konts tiks neatgriezeniski dzēsts, vai vēlaties turpināt?
+
+[repo]
+owner=Īpašnieks
+repo_name=Repozitorija nosaukums
+repo_name_helper=Labi repzotoriju nosaukumi ir īsi, tādi kurus viegli atcerēties un <strong>unikāli</strong>.
+visibility=Redzamība
+visiblity_helper=Šis repozitorijs ir <span class="ui red text">privāts</span>
+visiblity_helper_forced=Lapas administrators ir noteicis, ka visiem repozitorijiem ir jābūt <span class="ui red text">privātiem</span>
+visiblity_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus)
+clone_helper=Nepieciešama palīdzība kā veikt klonēšana? Apmeklējiet <a target="_blank" href="%s">Palīdzība</a> lapu!
+fork_repo=Atdalīt repozitoriju
+fork_from=Atdalīt no
+fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību
+repo_desc=Apraksts
+repo_lang=Valoda
+repo_lang_helper=Izvēlieties .gitignore failus
+license=Licence
+license_helper=Izvēlieties licences failu
+readme=LasiMani
+readme_helper=Izvēlieties faila LasiMani sagatavi
+auto_init=Inicializēt šo repozitoriju ar izvēlētajiem failiem un sagatavi
+create_repo=Izveidot repozitoriju
+default_branch=Noklusējuma atzars
+mirror_interval=Spoguļošanas intervāls (stundās)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Repozitorija nosaukums '%s' ir rezervēts.
+form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts.
+
+need_auth=Nepieciešama autorizācija
+migrate_type=Migrācijas veids
+migrate_type_helper=Šis repozitorijs būs <span class="text blue">spogulis</span>
+migrate_repo=Migrēt repozitoriju
+migrate.clone_address=Klonēšanas adrese
+migrate.clone_address_desc=Tas var būt HTTP/HTTPS/GIT URL vai ceļš uz lokālā servera.
+migrate.permission_denied=Jums nav tiesību importēt lokālu repozitoriju.
+migrate.invalid_local_path=Nekorents lokālais ceļš, tas neeksistē vai nav direktorijs.
+migrate.failed=Migration failed: %v
+
+forked_from=atdalīts no
+fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks!
+copy_link=Kopēt
+copy_link_success=Nokopēts!
+copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
+copied=Kopēšana notikusi veiksmīgi
+unwatch=Nevērot
+watch=Vērot
+unstar=Noņemt zvaigznīti
+star=Pievienot zvaigznīti
+fork=Atdalīts
+
+no_desc=Nav apraksta
+quick_guide=Īsa pamācība
+clone_this_repo=Klonēt šo repozitoriju
+create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
+push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
+repo_is_empty=Šis repozitorijs ir tukšs, apskatiet atkal vēlāk!
+
+branch=Atzars
+tree=Koks
+filter_branch_and_tag=Filter branch or tag
+branches=Atzari
+tags=Tagi
+issues=Problēmas
+pulls=Izmaiņu pieprasījumi
+labels=Etiķetes
+milestones=Atskaites punkti
+commits=Revīzijas
+releases=Laidieni
+file_raw=Neapstrādāts
+file_history=Vēsture
+file_view_raw=Rādīt neapstrādātu
+file_permalink=Patstāvīgā saite
+
+commits.commits=Revīzijas
+commits.search=Meklēt revīzijas
+commits.find=Meklēt
+commits.author=Autors
+commits.message=Ziņojums
+commits.date=Datums
+commits.older=Vecāki
+commits.newer=Jaunāki
+
+issues.new=Jauna problēma
+issues.new.labels=Etiķetes
+issues.new.no_label=Nav etiķešu
+issues.new.clear_labels=Noņemt etiķetes
+issues.new.milestone=Atskaites punkts
+issues.new.no_milestone=Nav atskaites punktu
+issues.new.clear_milestone=Notīrīt atskaites punktus
+issues.new.open_milestone=Atvērtie atskaites punktus
+issues.new.closed_milestone=Aizvērtie atskaites punkti
+issues.new.assignee=Atbildīgais
+issues.new.clear_assignee=Noņemt atbildīgo
+issues.new.no_assignee=Nav atbildīgā
+issues.create=Pieteikt problēmu
+issues.new_label=Jauna etiķete
+issues.new_label_placeholder=Etiķetes nosaukums...
+issues.create_label=Izveidot etiķeti
+issues.open_tab=%d atvērti
+issues.close_tab=%d aizvērti
+issues.filter_label=Etiķete
+issues.filter_label_no_select=Nav atzīmēta etiķete
+issues.filter_milestone=Atskaites punkts
+issues.filter_milestone_no_select=Nav atzīmēts atskaites punkts
+issues.filter_assignee=Atbildīgais
+issues.filter_assginee_no_select=Nav atzīmēts atbildīgais
+issues.filter_type=Veids
+issues.filter_type.all_issues=Visas problēmas
+issues.filter_type.assigned_to_you=Piešķirtās Jums
+issues.filter_type.created_by_you=Jūsu izveidotās
+issues.filter_type.mentioning_you=Esat pieminēts
+issues.filter_sort=Kārtot
+issues.filter_sort.latest=Jaunākie
+issues.filter_sort.oldest=Vecakie
+issues.filter_sort.recentupdate=Nesen atjaunotās
+issues.filter_sort.leastupdate=Vissenāk atjaunotās
+issues.filter_sort.mostcomment=Visvairāk komentētās
+issues.filter_sort.leastcomment=Vismazāk komentētās
+issues.opened_by=<a href="%[2]s">%[3]s</a> atvēra %[1]s
+issues.opened_by_fake=%[2]s atvēra %[1]s
+issues.previous=Iepriekšējā
+issues.next=Nākamā
+issues.open_title=Atvērta
+issues.closed_title=Slēgta
+issues.num_comments=%d komentāri
+issues.commented_at=`komentēja <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Vēl nav satura.
+issues.close_issue=Aizvērt
+issues.close_comment_issue=Komentēt un aizvērt
+issues.reopen_issue=Atvērt atkārtoti
+issues.reopen_comment_issue=Komentēt un atvērt atkārtoti
+issues.create_comment=Komentēt
+issues.closed_at=`aizvērts <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`atvērts atkārtoti <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`pieminēja šo problēmu revīzijā <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Autors
+issues.admin=Administrators
+issues.owner=Īpašnieks
+issues.sign_up_for_free=Pievienojieties
+issues.sign_in_require_desc=, lai piedalītos diskusijā. Jau ir konts? <a href="%s">Pierakstieties, lai komentētu</a>
+issues.edit=Labot
+issues.cancel=Atcelt
+issues.save=Saglabāt
+issues.label_title=Etiķetes nosaukums
+issues.label_color=Etiķetes krāsa
+issues.label_count=%d etiķetes
+issues.label_open_issues=%d atvērtas problēmas
+issues.label_edit=Labot
+issues.label_delete=Dzēst
+issues.label_modify=Etiķetes labošana
+issues.label_deletion=Etiķetes dzēšana
+issues.label_deletion_desc=Dzēšot šo etiķeti, tā tiks noņemta no visām saistītajām problēmām. Vai vēlaties turpināt?
+issues.label_deletion_success=Etiķete tika veiksmīgi izdzēsta!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Salīdzināt izmaiņas
+pulls.compare_changes_desc=Salīdzināt divus atzarus un izveidot izmaiņu pieprasījumu.
+pulls.compare_base=pamata
+pulls.compare_compare=salīdzināmais
+pulls.filter_branch=Filtrēt atzarus
+pulls.no_results=Nekas netika atrasts.
+pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi.
+pulls.has_pull_request=`Jau eksistē izmaiņu pieprasījums starp šiem diviem atzariem: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Izveidot izmaiņu pieprasījumu
+pulls.title_desc=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code>
+pulls.merged_title_desc=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Saruna
+pulls.tab_commits=Revīzijas
+pulls.tab_files=Izmainītie faili
+pulls.reopen_to_merge=Lūdzu, atkārtoti atveriet šo izmaiņu pieprasījumu, lai veiktu sapludināšanu.
+pulls.merged=Sapludināts
+pulls.has_merged=Šo izmaiņu pieprasījums tika veiksmīgi sapludināts!
+pulls.data_broken=Nepieejami izmaiņu pieprasījuma dati, jo dzēsta informācija no atdalītā repozitorija.
+pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet lapu.
+pulls.can_auto_merge_desc=Ir iespējams veikt automātisko sapludināšanas darbību šim izmaiņu pieprasījumam.
+pulls.cannot_auto_merge_desc=Nav iespējams veikt automātisko sapludināšanas darbību, jo starp revīzijām ir konflikti.
+pulls.cannot_auto_merge_helper=Lūdzu, izmantojiet komandrindas rīku, lai to atrisinātu.
+pulls.merge_pull_request=Izmaiņu pieprasījuma sapludināšana
+pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) no šī repozitorija ar tādu pašu sapludināšanas informāciju un gaida sapludināšanu.`
+
+milestones.new=Jauns atskaites punkts
+milestones.open_tab=%d atvērti
+milestones.close_tab=%d aizvērti
+milestones.closed=Aizvērts %s
+milestones.no_due_date=Bez termiņa
+milestones.open=Atvērt
+milestones.close=Aizvērt
+milestones.new_subheader=Izveidojiet atskaites punktus, lai organizētu problēmas.
+milestones.create=Izveidot atskaites punktu
+milestones.title=Virsraksts
+milestones.desc=Apraksts
+milestones.due_date=Termiņš (neobligāts)
+milestones.clear=Notīrīt
+milestones.invalid_due_date_format=Termiņa datuma formāts ir nekorekts, jābūt formātā 'gggg-mm-dd'.
+milestones.create_success=Atskaites punkts '%s' tika veiksmīgi izveidots!
+milestones.edit=Labot atskaites punktu
+milestones.edit_subheader=Izmantojiet pēc iespējas labāku aprakstu atskaites punktiem, lai citiem tas būtu saprotamāks.
+milestones.cancel=Atcelt
+milestones.modify=Mainīt atskaites punktu
+milestones.edit_success=Izmaiņas atskaites punktā '%s' tika veiksmīgi saglabātas!
+milestones.deletion=Atskaites punkta dzēšana
+milestones.deletion_desc=Dzēšot šo atskaites punktu tiks noņemta arī saistītā informācija no problēmu ziņojumiem. Vai vēlaties turpināt?
+milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts!
+
+settings=Iestatījumi
+settings.options=Opcijas
+settings.collaboration=Sadarbība
+settings.hooks=Tīmekļa āķi
+settings.githooks=Git āķi
+settings.basic_settings=Pamatiestatījumi
+settings.danger_zone=Bīstamā zona
+settings.site=Oficiālā mājas lapa
+settings.update_settings=Mainīt iestatījumus
+settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo repozitoriju.
+settings.transfer=Mainīt īpašnieku
+settings.transfer_desc=Mainīt šī repozitorija īpašnieku uz citu lietotāju vai organizāciju, kurai Jums ir administratora tiesībs.
+settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu.
+settings.delete=Dzēst šo repozitoriju
+settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieites vai patiešām vēlaties to darīt.
+settings.transfer_notices_1=- Jūs pazaudēsiet piekļuvi, ja jaunais īpašnieks ir lietotājs.
+settings.transfer_notices_2=- Jūs saglabāsiet piekļuvi, ja jaunais īpašnieks ir organizācija un Jūs esat viens no tās īpašniekiem.
+settings.transfer_form_title=Lūdzu, ievadiet sekojošu informāciju, lai apstiprinātu šo darbību:
+settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
+settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visus šī repozitorija datus, tai skaitā Git datus, problēmu ziņojumus, komentārus un definētās piekļuves tiesības.
+settings.delete_notices_fork_1=- Ja repozitorijs ir publisks, visi atdalītie repozitoriji kļūs neatkarīgi.
+settings.delete_notices_fork_2=- Ja repozitorijs ir privāts, tiks dzēsti arī visi atdalītie repozitoriji.
+settings.delete_notices_fork_3=- Ja vēlaties saglabāt atdalīts repozitorijus pēc dzēšanas, sākumā nomainiet repozitorija redzamību uz publisku.
+settings.update_settings_success=Repozitorija opcijas ir veiksmīgi saglabātas.
+settings.transfer_owner=Jaunais īpašnieks
+settings.make_transfer=Mainīt
+settings.transfer_succeed=Repozitorija īpašnieks ir veiksmīgi nomainīts.
+settings.confirm_delete=Apstiprināt dzēšanu
+settings.add_collaborator=Pievienot jaunu līdzstrādnieku
+settings.add_collaborator_success=Jauns līdzstrādnieks ir pievienots.
+settings.remove_collaborator_success=Līdzstrādnieks tika noņemts.
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=Lietotājs ir organizācijas biedrs, kas nevar tikt pievienots kā līdzstrādnieks.
+settings.add_webhook=Pievienot tīmekļa āķi
+settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikomiem, kas notiek Git servisā. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Lai uzzinātu sīkāk skatieties <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>.
+settings.webhook_deletion=Dzēst tīmekļa āķi
+settings.webhook_deletion_desc=Dzēšot tīmekļa āķi tiks dzēsta visa ar to saistītā informācija un izpildes vēsture. Vai vēlaties turpināt?
+settings.webhook_deletion_success=Tīmekļa āķis tika veiksmīgi izdzēsts!
+settings.webhook.request=Pieprasījums
+settings.webhook.response=Atbilde
+settings.webhook.headers=Galvenes
+settings.webhook.payload=Derīgā krava
+settings.webhook.body=Saturs
+settings.githooks_desc=Git āķus apstrādā pats Git. Jūs varat labot atbalsīto āku failus sarakstā zemāk, lai veiktu pielāgotas darbības.
+settings.githook_edit_desc=Ja āķis nav aktīvs, tiks attēlots piemērs kā to izmantot. Atstājot āķa saturu tukšu, tas tiks atspējots.
+settings.githook_name=Āķa nosaukums
+settings.githook_content=Āķa saturs
+settings.update_githook=Labot āķi
+settings.add_webhook_desc=Uz norādīto URL tiks nosūtīts <code>POST</code> pieprasījums ar notikuma datiem. Jūs varat norādīt arī datu formātu, kādā datus vēlaties saņemt (JSON, <code>x-www-form-urlencoded</code> <em>utt.</em>). Detalizētāku informāciju ir iespējams uzzināt <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>.
+settings.payload_url=Vērtuma URL
+settings.content_type=Satura tips
+settings.secret=Noslēpums
+settings.slack_username=Lietotājvārds
+settings.slack_icon_url=Ikonas URL
+settings.slack_color=Krāsa
+settings.event_desc=Kādu notikumu rezultātā tiktu izsaukts tīmekļā āķis?
+settings.event_push_only=Tikai izmaiņu nosūtīšanas notikumiem.
+settings.event_send_everything=Vēlos saņemt <strong>visu</strong>.
+settings.event_choose=Atzīmēt, ko vēlos saņemt.
+settings.event_create=Izveidot
+settings.event_create_desc=Atzara vai taga izveidošana
+settings.event_push=Izmaiņu nosūtīšana
+settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju
+settings.active=Aktīvs
+settings.active_helper=Tiks nosūtīti notikuma dati, kad nostrādās šis āķis.
+settings.add_hook_success=Jauns tīmekļa āķis tika veiksmīgi pievienots.
+settings.update_webhook=Mainīt tīmekļa āķi
+settings.update_hook_success=Tīmekļa āķist tika veiksmīgi saglabāts.
+settings.delete_webhook=Dzēst tīmekļa āķi
+settings.recent_deliveries=Pēdējās piegādes
+settings.hook_type=Āķa veids
+settings.add_slack_hook_desc=PIevienot <a href="%s">Slack</a> integrāciju Jūsu repozitorijā.
+settings.slack_token=Talons
+settings.slack_domain=Domēns
+settings.slack_channel=Kanāls
+settings.deploy_keys=Izvietot atslēgas
+settings.add_deploy_key=Pievienot izvietošanas atslēgu
+settings.no_deploy_keys=Nav pievienota neviena izvietošanas atslēga.
+settings.title=Virsraksts
+settings.deploy_key_content=Saturs
+settings.key_been_used=Šāda izvietošanas atslēga jau eksistē.
+settings.key_name_used=Izvietošanas atslēga ar šādu nosaukumu jau eksistē.
+settings.add_key_success=Izvietošanas atslēga '%s' tik veiksmīgi pievienota!
+settings.deploy_key_deletion=Dzēst izvietošanas atslēgu
+settings.deploy_key_deletion_desc=Dzēšot šo izvietošanas atslēgu tiks noņemta arī ar to saistītā piekļuve šim repozitorijam. Vai vēlaties turpināt?
+settings.deploy_key_deletion_success=Izvietošanas atslēga tika veiksmīgi izdzēsta!
+
+diff.browse_source=Pārlūkot izejas kodu
+diff.parent=vecāks
+diff.commit=revīzija
+diff.data_not_available=Salīdzināšanas dati nav pieejami.
+diff.show_diff_stats=Rādīt salīdzināšanas statistiku
+diff.stats_desc=<strong>%d mainītis faili</strong> ar <strong>%d papildinājumiem</strong> un <strong>%d dzēšanām</strong>
+diff.bin=BIN
+diff.view_file=Parādīt failu
+
+release.releases=Laidieni
+release.new_release=Jauns laidiens
+release.draft=Melnraksts
+release.prerelease=Pirmsizlaides versija
+release.stable=Stabila
+release.edit=labot
+release.ahead=<strong>%d</strong> revīzijas atzarā %s kopš šī laidiena
+release.source_code=Izejas kods
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Taga nosaukums
+release.target=Mērķis
+release.tag_helper=Publicējot, izvēlieties esošu vai izveidojiet jaunu tagu.
+release.title=Title
+release.content=Content
+release.write=Rakstīt
+release.preview=Priekšskatītījums
+release.loading=Notiek ielāde...
+release.prerelease_desc=Šī ir pirmslaidiena versija
+release.prerelease_helper=Tiks norādīts, ka šis laidiens nav gatavs lietošanai produkcijas režīmā.
+release.cancel=Cancel
+release.publish=Publicēt laidienu
+release.save_draft=Saglabāt melnrakstu
+release.edit_release=Labot laidienu
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Organizācijas nosaukums
+org_full_name_holder=Organizācijas pilnais nosaukums
+org_name_helper=Labi organizāciju nosaukumi ir īsi un tādi, kurus viegli atcerēties.
+create_org=Izveidot organizāciju
+repo_updated=Atjaunināts
+people=Personas
+invite_someone=Uzaicināt kādu
+teams=Komandas
+lower_members=dalībnieki
+lower_repositories=repozitoriji
+create_new_team=Izveidot jaunu komandu
+org_desc=Apraksts
+team_name=Komandas nosaukums
+team_desc=Apraksts
+team_name_helper=Šo nosaukumu varēs izmantot, lai pieminētu komandu sarunās.
+team_desc_helper=Komandas apraksts
+team_permission_desc=Kādām tiesībām šai komandai būtu jābūt?
+
+form.name_reserved=Organizācijas nosaukums '%s' ir rezervēts.
+form.name_pattern_not_allowed=Organizācijas nosaukums '%s' nav atļauts.
+
+settings=Iestatījumi
+settings.options=Opcijas
+settings.full_name=Pilns vārds, uzvārds
+settings.website=Mājas lapa
+settings.location=Atrašanās vieta
+settings.update_settings=Mainīt iestatījumus
+settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti.
+settings.change_orgname_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo organizāciju.
+settings.update_avatar_success=Organizācijas avatara iestatījumi tika veiksmīgi saglabāti.
+settings.delete=Dzēst organizāciju
+settings.delete_account=Dzēst šo organizāciju
+settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
+settings.confirm_delete_account=Apstiprināt dzēšanu
+settings.delete_org_title=Organizācijas dzēšana
+settings.delete_org_desc=Šī organizācija tiks pilnībā izdzēsta, vai vēlaties turpināt?
+settings.hooks_desc=Pievienot tīmekļa āķus, kas nostrādās <strong>visiem repozitorijiem</strong> šajā organizācijā.
+
+members.public=Publisks
+members.public_helper=padarīt privātu
+members.private=Privāts
+members.private_helper=padarīt publisku
+members.owner=Īpašnieks
+members.member=Biedri
+members.conceal=Noslēpt
+members.remove=Noņemt
+members.leave=Atstāt
+members.invite_desc=Sāciet rakstīt lietotājvārdu, lai uzaicinātu jaunu biedru organizācijā %s:
+members.invite_now=Uzaicināt tagad
+
+teams.join=Pievienoties
+teams.leave=Atstāt
+teams.read_access=Lasīšanas piekļuve
+teams.read_access_helper=Komanda varēs skatīties un klonēt šīs organizācijas repozitorijus.
+teams.write_access=Rakstīšanas piekļuve
+teams.write_access_helper=Komanda varēs skatīties un klonēt, kā arī nosūtīt izmaiņas šīs organizācijas repozitorijiem.
+teams.admin_access=Administratora piekļuve
+teams.admin_access_helper=Šī komanda varēs veikt push/pull komandas tās repozitorijiem, kā arī tiem pievienot citus līdzstrādniekus.
+teams.no_desc=Komandai nav apraksta
+teams.settings=Iestatījumi
+teams.owners_permission_desc=Īpašniekiem ir pilna piekļuve <strong>visiem repozitorijiem</strong> un ir organizācijas <strong>administratora tiesības</strong>.
+teams.members=Komandas biedri
+teams.update_settings=Saglabāt iestatījumus
+teams.delete_team=Dzēst komandu
+teams.add_team_member=Pievienot komandas biedru
+teams.delete_team_title=Komandas dzēšana
+teams.delete_team_desc=Komanda tiks dzēsta, vai vēlaties turpināt? Komandas biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem.
+teams.delete_team_success=Komanda tika veiksmīgi izdzēsta.
+teams.read_permission_desc=Šai komandai ir <strong>lasīšanas</strong> tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus.
+teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem.
+teams.admin_permission_desc=Šai komandai ir <strong>administratora</strong> tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem.
+teams.repositories=Komandas repozitoriji
+teams.add_team_repository=Pievienot komandas repozitoriju
+teams.remove_repo=Noņemt
+teams.add_nonexistent_repo=Repozitorijs, kuram Jūs mēģinat pievienot neeksistē, sākumā izveidojiet to.
+
+[admin]
+dashboard=Infopanelis
+users=Lietotāji
+organizations=Organizācijas
+repositories=Repozitoriji
+authentication=Autentifikācijas
+config=Konfigurācija
+notices=Sistēmas paziņojumi
+monitor=Uzraudzība
+first_page=Pirmā
+last_page=Pēdējā
+total=Kopā: %d
+
+dashboard.statistic=Statistika
+dashboard.operations=Darbības
+dashboard.system_status=Sistēmas uzraudzības statuss
+dashboard.statistic_info=Gogs datu bāze satur <b>%d</b> lietotājus, <b>%d</b> organizācijas, <b>%d</b> publiskās atslēgas, <b>%d</b> repozitorijus, <b>%d</b> vērošanas, <b>%d</b> atzīmētas zvaigznītes, <b>%d</b> darbības, <b>%d</b> piekļuves, <b>%d</b> problēmas, <b>%d</b> komentārus, <b>%d</b> sociālos kontus, <b>%d</b> sekošanas, <b>%d</b> spoguļošanas, <b>%d</b> izlaides, <b>%d</b> login sources, <b>%d</b> tīmekļa āķus, <b>%d</b> starpposmus, <b>%d</b> etiķetes, <b>%d</b> āķu uzdevumus, <b>%d</b> komandas, <b>%d</b> labotus uzdevumus, <b>%d</b> pielikumus.
+dashboard.operation_name=Darbības nosaukums
+dashboard.operation_switch=Pārslēgt
+dashboard.operation_run=Palaist
+dashboard.clean_unbind_oauth=Notīrīt nesaistītās OAuth biļetes
+dashboard.clean_unbind_oauth_success=Visas nesaistītās OAuth biļetes tika veiksmīgi izdzēstas.
+dashboard.delete_inactivate_accounts=Dzēst visus neaktīvos kontus
+dashboard.delete_inactivate_accounts_success=Visi neaktīvie kotni tika veiksmīgi izdzēsti.
+dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus
+dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika veiksmīgi izdzēsti.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Veikt repozitoriju datu sakārtošānu (git gc)
+dashboard.git_gc_repos_success=Datu sakārtošana visiem repozitorijiem veiksmīgi pabeigta.
+dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu (brīdinājums: ne-Git atslēgas tiks pazaudētas)
+dashboard.resync_all_sshkeys_success=Visas publiskās atslēgas tika veiksmīgi pārrakstītas.
+dashboard.resync_all_update_hooks=Pārrakstīt visu repozitoriju izmaiņu āķus (nepieciešams, ja tiek mainīta konfigurācijas faila atrašanās vieta)
+dashboard.resync_all_update_hooks_success=Visu repozitoriju izmaiņu āķi tika veiksmīgi pārrakstīti.
+
+dashboard.server_uptime=Servera darbības laiks
+dashboard.current_goroutine=Izmantotās Gorutīnas
+dashboard.current_memory_usage=Pašreiz izmantotā atmiņa
+dashboard.total_memory_allocated=Kopējā piešķirtā atmiņa
+dashboard.memory_obtained=Iegūtā atmiņa
+dashboard.pointer_lookup_times=Rādītāju meklēšanas reizes
+dashboard.memory_allocate_times=Atmiņas piešķiršanas reizes
+dashboard.memory_free_times=Atmiņas atbrīvošanas reizes
+dashboard.current_heap_usage=Pašreizējā kaudzes izmantošana
+dashboard.heap_memory_obtained=Iegūtā kaudzes atmiņa
+dashboard.heap_memory_idle=Neizmantotā kaudzes atmiņa
+dashboard.heap_memory_in_use=Izmantotā kaudzes atmiņa
+dashboard.heap_memory_released=Atbrīvotā kaudzes atmiņa
+dashboard.heap_objects=Kaudzes atmiņas objekti
+dashboard.bootstrap_stack_usage=Izmantotais sāknēšanas steka lielums
+dashboard.stack_memory_obtained=Iegūtā steka atmiņa
+dashboard.mspan_structures_usage=Izmantotās MSpan struktūras
+dashboard.mspan_structures_obtained=Iegūtās MSpan struktūras
+dashboard.mcache_structures_usage=Izmantotās MCache struktūras
+dashboard.mcache_structures_obtained=Iegūtās MCache struktūras
+dashboard.profiling_bucket_hash_table_obtained=Iegūtā profilēšanas kausa jaucējtabula
+dashboard.gc_metadata_obtained=Iegūtie GC metadati
+dashboard.other_system_allocation_obtained=Iegūtās citas sistēmas sadales
+dashboard.next_gc_recycle=Nākošā GC atkritne
+dashboard.last_gc_time=Laiks kopš pēdējās GC
+dashboard.total_gc_time=Kopējais GC izpildes laiks
+dashboard.total_gc_pause=Kopējais GC izpildes laiks
+dashboard.last_gc_pause=Pedējās GC izpildes laiks
+dashboard.gc_times=GC reizes
+
+users.user_manage_panel=Lietotāju pārvaldības panelis
+users.new_account=Izveidot jaunu kontu
+users.name=Vārds
+users.activated=Aktivizēts
+users.admin=Administrators
+users.repos=Repozitoriji
+users.created=Izveidots
+users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu
+users.new_success=Jauns konts '%s' tika veiksmīgi izveidots.
+users.edit=Labot
+users.auth_source=Autentificēšanas avots
+users.local=Iebūvētā
+users.auth_login_name=Autentifikācijas pieteikšanās vārds
+users.password_helper=Atstājiet tukšu, ja nevēlaties mainīt.
+users.update_profile_success=Konta profils tika veiksmīgi saglabāts.
+users.edit_account=Labot kontu
+users.is_activated=Konts ir aktivizēts
+users.is_admin=Šim kontam ir administratora piekļuves tiesības
+users.allow_git_hook=Šim kontam ir tiesības pievienot/labot Git āķus
+users.allow_import_local=Šim kontam ir tiesības importēt lokālus repozitorijus
+users.update_profile=Mainīt konta profilu
+users.delete_account=Dzēst šo kontu
+users.still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
+users.still_has_org=Šis konts ir vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju.
+users.deletion_success=Konts tika veiksmīgi izdzēsts!
+
+orgs.org_manage_panel=Organizāciju pārvaldības panelis
+orgs.name=Nosaukums
+orgs.teams=Komandas
+orgs.members=Dalībnieki
+
+repos.repo_manage_panel=Repozitoriju pārvaldības panelis
+repos.owner=Īpašnieks
+repos.name=Vārds
+repos.private=Privāts
+repos.watches=Vērošana
+repos.stars=Atzīmētās zvaigznītes
+repos.issues=Problēmas
+
+auths.auth_manage_panel=Autentifikācijas pārvaldības panelis
+auths.new=Pievienot jaunu avotu
+auths.name=Nosaukums
+auths.type=Veids
+auths.enabled=Iespējota
+auths.updated=Atjaunināta
+auths.auth_type=Autentifikācijas tips
+auths.auth_name=Autentifikācijas nosaukums
+auths.domain=Domēns
+auths.host=Resursdators
+auths.port=Ports
+auths.bind_dn=Saistīšanas DN
+auths.bind_password=Saistīšanas parole
+auths.bind_password_helper=Brīdinājums: Šī parole tiks saglabāta nešifrētā veidā. Neizmantojiet kontu ar augstām privilēģijām.
+auths.user_base=Lietotāja pamatnosacījumi
+auths.user_dn=Lietotāja DN
+auths.attribute_name=Vārda atribūts
+auths.attribute_surname=Uzvārda atribūts
+auths.attribute_mail=E-pasta atribūts
+auths.filter=Lietotāju filts
+auths.admin_filter=Administratoru filtrs
+auths.ms_ad_sa=MS Ad SA
+auths.smtp_auth=SMTP autentifikācijas tips
+auths.smtphost=SMTP resursdators
+auths.smtpport=SMTP ports
+auths.allowed_domains=Atļautie domēni
+auths.allowed_domains_helper=Atstājiet tukšu, ja nevēlaties ierobežot domēnu vārdus. Domēna vārdus nepieciešams atdalīt ar komatu ','.
+auths.enable_tls=Iespējot TLS šifrēšanu
+auths.skip_tls_verify=Izlaist TLS verifikāciju
+auths.pam_service_name=PAM servisa nosaukums
+auths.enable_auto_register=Iespējot automātisko reģistrāciju
+auths.tips=Padomi
+auths.edit=Labot autentifikācijas iestatījumus
+auths.activated=Autentifikācija ir aktivizēta
+auths.new_success=Jauna autentifikācija '%s' tika veiksmīgi pievienota.
+auths.update_success=Autentifikācijas iestatījumi tika veiksmīgi saglabāti.
+auths.update=Mainīt autentifikācijas iestatījumus
+auths.delete=Dzēst šo autentifikāciju
+auths.delete_auth_title=Autentifikācijas dzēšana
+auths.delete_auth_desc=Šī autentifikācija tiks dzēsta, vai vēlaties turpināt?
+auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
+
+config.server_config=Servera konfigurācija
+config.app_name=Lietotnes nosaukums
+config.app_ver=Lietotnes versija
+config.app_url=Lietotnes URL
+config.domain=Domēns
+config.offline_mode=Bezsaistes režīms
+config.disable_router_log=Atspējot maršrutētāja žurnalizēšanu
+config.run_user=Izpildes lietotājs
+config.run_mode=Izpildes režīms
+config.repo_root_path=Repozitoriju glabāšanas vieta
+config.static_file_root_path=Statisko failu atrašanās vieta
+config.log_file_root_path=Žurnalizēšanas failu glabāšanas vieta
+config.script_type=Skripta veids
+config.reverse_auth_user=Reversā lietotāja autentifikācija
+config.db_config=Datu bāzes konfigurācija
+config.db_type=Veids
+config.db_host=Resursdators
+config.db_name=Nosaukums
+config.db_user=Lietotājs
+config.db_ssl_mode=SSL režīms
+config.db_ssl_mode_helper=(tikai PostgreSQL datu bāzei)
+config.db_path=Ceļš
+config.db_path_helper=(priekš "sqlite3" and "tidb")
+config.service_config=Pakalpojuma konfigurācija
+config.register_email_confirm=Pieprasīt e-pasta apstiprināšanu
+config.disable_register=Atspējot jaunu lietotāju reģistrāciju
+config.show_registration_button=Rādīt reģistrēšanās pogu
+config.require_sign_in_view=Nepieciešama autorizācija
+config.enable_cache_avatar=Glabāt profila attēlus kešatmiņā
+config.mail_notify=Pasta paziņojumi
+config.disable_key_size_check=Atspējot atslēgas minimālā garuma pārbaudi
+config.enable_captcha=Iespējot drošības kodu
+config.active_code_lives=Aktīvā koda ilgums
+config.reset_password_code_lives=Paroles atiestatīšanas koda ilgums
+config.webhook_config=Tīkla āķu konfigurācija
+config.queue_length=Rindas garums
+config.deliver_timeout=Piegādes noildze
+config.skip_tls_verify=Izlaist TLS pārbaudi
+config.mailer_config=Sūtītāja konfigurācija
+config.mailer_enabled=Iespējots
+config.mailer_disable_helo=Atspējot HELO
+config.mailer_name=Nosaukums
+config.mailer_host=Resursdators
+config.mailer_user=Lietotājs
+config.oauth_config=OAuth konfigurācija
+config.oauth_enabled=Iespējota
+config.cache_config=Kešatmiņas konfigurācija
+config.cache_adapter=Kešatmiņas adapteris
+config.cache_interval=Kešatmiņas intervāls
+config.cache_conn=Kešatmiņas pieslēguma parametri
+config.session_config=Sesijas konfigurācja
+config.session_provider=Sesijas nodrošinātājs
+config.provider_config=Pakalpojumu sniedzēja konfigurācija
+config.cookie_name=Sīkdatnes nosaukums
+config.enable_set_cookie=Ļaut izmantot sīkdatnes
+config.gc_interval_time=GC laika intervāls
+config.session_life_time=Sesijas ilgums
+config.https_only=Tikai HTTPS
+config.cookie_life_time=Sīkdatņu glabāšanas ilgums
+config.picture_config=Attēlu konfigurācija
+config.picture_service=Lokāli attēli
+config.disable_gravatar=Atspējot Gravatar
+config.log_config=Žurnalizēšanas konfigurācija
+config.log_mode=Žurnalizēšanas veids
+
+monitor.cron=Cron uzdevumi
+monitor.name=Nosaukums
+monitor.schedule=Grafiks
+monitor.next=Nākošās izpildes laiks
+monitor.previous=Pēdējās izpildes laiks
+monitor.execute_times=Izpilžu skaits
+monitor.process=Darbojošies procesi
+monitor.desc=Apraksts
+monitor.start=Sākuma laiks
+monitor.execute_time=Izpildes laiks
+
+notices.system_notice_list=Sistēmas paziņojumi
+notices.type=Veids
+notices.type_1=Repozitorijs
+notices.desc=Apraksts
+notices.op=Op.
+notices.delete_success=Sistēmas paziņojums tika veiksmīgi izdzēsts.
+
+[action]
+create_repo=izveidoja repozitoriju <a href="%s">%s</a>
+rename_repo=pārsauca repozitoriju no <code>%[1]s</code> uz <a href="%[2]s">%[3]s</a>
+commit_repo=veica izmaiņu nosūtīšanu atzaram <a href="%[1]s/src/%[2]s">%[3]s</a> repozitorijā <a href="%[1]s">%[4]s</a>
+create_issue=`reģistrēja problēmu <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`izveidoja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
+comment_issue=`pievienoja komentāru problēmai <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`sapludināja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
+transfer_repo=mainīja repozitorija <code>%s</code> īpašnieku uz <a href="%s">%s</a>
+push_tag=pievienoja tagu <a href="%s/src/%s">%[2]s</a> repozitorijam <a href="%[1]s">%[3]s</a>
+compare_2_commits=Veikt salīdzināšanu starp šīm 2 revīzijām
+
+[tool]
+ago=atpakaļ
+from_now=no šī brīža
+now=tagad
+1s=1 sekundi %s
+1m=1 minūti %s
+1h=1 stundu %s
+1d=1 dienu %s
+1w=1 nedēļu %s
+1mon=1 mēnesi %s
+1y=1 gadu %s
+seconds=%d sekundes %s
+minutes=%d minūtes %s
+hours=%d stundas %s
+days=%d dienas %s
+weeks=%d nedēļas %s
+months=%d mēneši %s
+years=%d gadi %s
+raw_seconds=sekundes
+raw_minutes=minūtes
+
+[dropzone]
+default_message=Ievelciet failus šeit vai noklikšķiniet, lai augšupielādētu.
+invalid_input_type=Šādus failus nav iespējams augšupielādēt.
+file_too_big=Faila izmērs ({{filesize}} MB) pārsniedz maksimālo atļauto izmēru ({{maxFilesize}} MB).
+remove_file=Noņemt failu
+

+ 1009 - 992
conf/locale/locale_nl-NL.ini

@@ -1,992 +1,1009 @@
-app_desc=Een eenvoudige zelfgehoste Git service geschreven in Go
-
-home=Huis
-dashboard=Dashboard
-explore=Verkennen
-help=Help
-sign_in=Inloggen
-sign_out=Afmelden
-sign_up=Aanmelden
-register=Registreer
-website=Website
-version=Versie
-page=Pagina
-template=Sjabloon
-language=Taal
-create_new=Create...
-user_profile_and_more=Gebruikersprofiel en meer
-signed_in_as=Aangemeld als
-
-username=Gebruikersnaam
-email=E-mail
-password=Wachttwoord
-re_type=Verificatie
-captcha=CAPTCHA
-
-repository=Repositorie
-organization=Organisatie
-mirror=Spiegel
-new_repo=Nieuwe repositorie
-new_migrate=Nieuwe migratie
-new_fork=Nieuwe vork Repository
-new_org=Nieuwe organisatie
-manage_org=Beheer organisaties
-admin_panel=Adminpaneel
-account_settings=Accountinstellingen
-settings=Instellingen
-your_profile=Uw profiel
-your_settings=Uw instellingen
-
-news_feed=Nieuwsfeed
-pull_requests=Pull-aanvragen
-issues=Kwesties
-
-cancel=Annuleer
-
-[search]
-search=Zoeken...
-repository=Opslagplaats
-user=Gebruiker
-issue=Probleem
-code=Code
-
-[install]
-install=Installatie
-title=Installatiestappen voor de eerste keer opstarten
-docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
-requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
-db_title=Database instellingen
-db_type=Database-type
-host=Host
-user=Gebruikersnaam
-password=Wachtwoord
-db_name=Database naam
-db_helper=Gebruik InnoDB engine met utf8_general_ci karakterset voor MySQL.
-ssl_mode=SSL-modus
-path=Pad
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
-no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
-err_empty_admin_password=Admin password cannot be empty.
-
-general_title=Toepassing algemene instellingen
-app_name=Applicatienaam
-app_name_helper=Plaats hier je organisatienaam in grote letters!
-repo_path=Repositories basis directorie
-repo_path_helper=Alle remote Git repositories worden in deze directorie opgeslagen
-run_user=Uitvoerende gebruikersnaam
-run_user_helper=Deze gebruiker moet toegang hebben tot de git repositorie directorie en moet Gogs kunnen starten
-domain=Domein
-domain_helper=Dit heeft invloed op de SSH kloon URLs
-ssh_port=SSH-poort
-ssh_port_helper=Nummer van de poort die uw SSH-server gebruikt, laat dit leeg om de SSH functie uit te schakelen.
-http_port=HTTP-poort
-http_port_helper=Poortnummer waar het programma naar luistert.
-app_url=Applicatie URL
-app_url_helper=Dit heeft invloed op de HTTP/HTTPS kloon urls en de urls die in de email worden gebruikt
-
-optional_title=Optionele instellingen
-email_title=E-mail service instellingen
-smtp_host=SMTP host
-smtp_from=Afzender
-smtp_from_helper=Email afzender, RFC 5322. Dit kan gewoon een email adres zijn of het "Naam"<email@example.com> formaat.
-mailer_user=Afzender e-mail / gebruikersnaam
-mailer_password=Wachtwoord
-register_confirm=Activeer registratie emails
-mail_notify=Activeer e-mailnotificaties
-server_service_title=Server en andere Services-instellingen
-offline_mode=Off line modus inschakelen
-offline_mode_popup=Schakel CDN uit in productiemodus, alle bestanden worden lokaal aangeboden.
-disable_gravatar=Gravatar Service uitschakelen
-disable_gravatar_popup=Schakel Gravatar en andere bronnen uit, alle avatars worden door gebruikers geüpload of zijn standaard.
-disable_registration=Schakel zelfregistratie uit
-disable_registration_popup=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
-enable_captcha=Enable Captcha
-enable_captcha_popup=Require validate captcha for user self-registration.
-require_sign_in_view=Schakel vereiste aanmelding om pagina's te zien in
-require_sign_in_view_popup=Alleen ingelogde gebruikers kunnen pagina's bekijken, bezoekers kunnen alleen de login/registratie pagina's zien.
-admin_setting_desc=U hoeft niet meteen een administratie account te maken, de gebruiker met ID=1 krijgt automatisch administratierechten.
-admin_title=Instellingen beheerdersaccount
-admin_name=Gebruikersnaam
-admin_password=Wachtwoord
-confirm_password=Verifieer wachtwoord
-admin_email=E-mailadres
-install_gogs=Installeer Gogs
-test_git_failed=Git test niet gelukt: 'git' commando %v
-sqlite3_not_available=Uw versie biedt geen ondersteuning voor SQLite3, download de officiële binaire versie van %s, niet de gobuild versie.
-invalid_db_setting=Uw database instellingen zijn niet correct: %v
-invalid_repo_path=Repositorie basis pad is niet correct: %v
-run_user_not_match=De uitvoerende gebruiker is niet de huidig gebruiker: %s -> %s
-save_config_failed=Kan de configuratie niet opslaan: %v
-invalid_admin_setting=Uw admin-instellingen zijn niet geldig: %v
-install_success=Welkom! Wij zijn veheugd dat u voor Gogs heeft gekozen, veel plezier en tot ziens
-
-[home]
-uname_holder=Gebruikersnaam of e-mail
-password_holder=Wachtwoord
-switch_dashboard_context=Wissel voorpaginacontext
-my_repos=Mijn repositories
-collaborative_repos=Gedeelde repositories
-my_orgs=Mijn organisaties
-my_mirrors=Mijn mirrors
-view_home=Bekijk %s
-
-issues.in_your_repos=In uw repositories
-
-[explore]
-repos=Repositories
-
-[auth]
-create_new_account=Maak nieuw account aan
-register_hepler_msg=Heeft u al een account? Meld u nu aan!
-social_register_hepler_msg=Heeft u al een account? Koppel nu!
-disable_register_prompt=Sorry, registratie is uitgeschakeld. Neem contact op met de beheerder van deze site.
-disable_register_mail=Sorry, bevestiging van registratie per e-mail is uitgeschakeld.
-remember_me=Onthoud mij
-forgot_password=Wachtwoord vergeten
-forget_password=Wachtwoord vergeten?
-sign_up_now=Een account nodig? Meld u nu aan.
-confirmation_mail_sent_prompt=Een bevestigingsemail is gestuurd naar <b>%s</b>, Bevestig u aanvraag binnen %d uren om uw registratie te voltooien.
-sign_in_to_account=Sign in to your account
-active_your_account=Activeer uw account
-resent_limit_prompt=Sorry, u heeft te snel na elkaar een aanvraag gedaan voor een activatie mail. Wacht drie minuten voor uw volgende aanvraag.
-has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (<b>%s</b>). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop.
-resend_mail=Klik hier om uw activatie mail nog een keer te verzenden
-email_not_associate=Dit e-mailadres is niet gekoppeld aan een account.
-send_reset_mail=Klik hier om uw wachtwoord reset mail (nogmaals) te versturen
-reset_password=Reset uw wachtwoord
-invalid_code=Sorry, uw bevestigingscode is verlopen of niet meer geldig.
-reset_password_helper=Klik hier om uw wachtwoord opnieuw in te stellen.
-password_too_short=De lengte van uw wachtwoord moet minimaal zes karakters zijn.
-
-[mail]
-activate_account=Please activate your account
-activate_email=Verify your e-mail address
-reset_password=Reset your password
-register_success=Register success, Welcome
-
-[modal]
-yes=Ja
-no=Nee
-modify=Aanpassen
-
-[form]
-UserName=Gebruikersnaam
-RepoName=Repositorie naam
-Email=e-mailadres
-Password=Wachtwoord
-Retype=Verifieer wachtwoord
-SSHTitle=SSH sleutel naam
-HttpsUrl=HTTPS-URL
-PayloadUrl=Nettolading URL
-TeamName=Team naam
-AuthName=Autorisatienaam
-AdminEmail=E-mail beheerder
-
-require_error=kan niet leeg zijn.
-alpha_dash_error=moet een valide alfanumeriek of dash(-_) karakter zijn.
-alpha_dash_dot_error=moet een valide alfanumeriek, dash(-_) of (.) punt karakter zijn.
-size_error=moet groter zijn dan %s
-min_size_error=moet minimaal %s karakters bevatten.
-max_size_error=mag maximaal %s karakters bevatten.
-email_error=is niet een valide e-mail adres.
-url_error=is niet een valide URL.
-unknown_error=Onbekende fout:
-captcha_incorrect=Captcha komt niet overeen.
-password_not_match=Wachtwoord en verificatie wachtwoord komen niet overeen.
-
-username_been_taken=Gebruikersnaam is al in gebruik.
-repo_name_been_taken=Repositorie naam is al in gebruik.
-org_name_been_taken=Organisatie naam is al in gebruik.
-team_name_been_taken=Team naam is al in gebruik.
-email_been_used=e-mailadres is al in gebruik.
-illegal_team_name=Team naam bevat illegale karakters.
-username_password_incorrect=Gebruikersnaam of wachtwoord is niet correct.
-enterred_invalid_repo_name=U heeft een onjuiste repositorie naam ingevoerd.
-enterred_invalid_owner_name=U heeft een onjuiste eigenaar ingevoerd.
-enterred_invalid_password=U heeft een onjuiste wachtwoord ingevoerd.
-user_not_exist=Gegeven gebruiker bestaat niet.
-last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst nieuwe lid (eigenaar) aanstellen.
-
-invalid_ssh_key=Sorry, we zijn niet in staat om uw SSH-sleutel te verifiëren: %s
-unable_verify_ssh_key=Gogs kan niet controleren of uw SSH-sleutel, maar wij gaan ervan uit dat is geldig, zorg ervoor dat uzelf.
-auth_failed=Verificatie mislukt: %v
-
-still_own_repo=Uw account heeft nog een eigendom op een repositorie. U moet deze eerst verwijderen of overdragen.
-still_has_org=Uw account nog steeds lidmaatschap van organisatie, u hebt naar links of hen eerst verwijderen.
-org_still_own_repo=De organisatie heeft nog eigendomen op repositories. U moet deze eerst verwijderen of overdragen.
-
-still_own_user=Deze authenticatie methode wordt nog gebruikt door sommige gebruikers. U moet hen eerst verplaatsen of verwijderen.
-
-target_branch_not_exist=Doel branch bestaat niet
-
-[user]
-change_avatar=Verander uw avatar op Gravatar.com
-change_custom_avatar=Wijzig uw avatar in de instellingen
-join_on=Aangemeld op
-repositories=repositories
-activity=Openbare activiteit
-followers=Volgers
-starred=Sterren
-following=Volgt
-
-form.name_reserved=De gebruikersnaam '%s' is gereserveerd.
-form.name_pattern_not_allowed=Het gebruikersnaam patroon '%s' is niet toegestaan.
-
-[settings]
-profile=Profiel
-password=Wachtwoord
-ssh_keys=SSH-sleutels
-social=Sociale netwerk-accounts
-applications=Toepassingen
-orgs=Organisaties
-delete=Verwijder account
-uid=uid
-
-public_profile=Openbaar profiel
-profile_desc=Uw e-mailadres is openbaar en zal gebruikt worden voor alle account gerelateerde berichtgevingen en bewerkingingen die via de website worden gedaan.
-full_name=Volledige naam
-website=Website
-location=Locatie
-update_profile=Profile bijwerken
-update_profile_success=Uw profiel is succesvol bijgewerkt.
-change_username=Username veranderd
-change_username_prompt=This change will affect the way how links relate to your account.
-continue=Doorgaan
-cancel=Annuleren
-
-enable_custom_avatar=Aangepaste avatar inschakelen
-enable_custom_avatar_helper=Avatar niet ophalen van Gravatar
-choose_new_avatar=Kies een nieuwe avatar
-update_avatar=Avatar instelling bijwerken
-uploaded_avatar_not_a_image=Geüpload bestand is geen afbeelding.
-no_custom_avatar_available=Geen aangepaste avatar beschikbaar, kan niet worden ingeschakeld.
-update_avatar_success=Instellingen voor avatar succesvol bijgewerkt.
-
-change_password=Verander wachtwoord
-old_password=Huidige wachtwoord
-new_password=Nieuw wachtwoord
-retype_new_password=Retype New Password
-password_incorrect=Huidig wachtwoord is niet correct.
-change_password_success=Wachtwoord is succesvol gewijzigd. U kunt nu met uw nieuwe wachtwoord inloggen.
-
-emails=E-mailadressen
-manage_emails=E-mailadressen beheren
-email_desc=Uw primaire e-mailadres zal worden gebruikt voor meldingen en andere administratieve taken.
-primary=Primair
-primary_email=Instellen als primair
-delete_email=Verwijder
-email_deletion=E-mail Deletion
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail has been deleted successfully!
-add_new_email=Nieuw e-mailadres toevoegen
-add_email=E-mailadres toevoegen
-add_email_confirmation_sent=Een nieuwe bevestiging e-mail werd verstuurd naar '%s', gelieve uw inbox in de komende %d uren te controleren om het bevestigingsproces te voltooien.
-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>De behoeftehulp van?</strong> Check out onze gids voor het <a href="%s"> genereren van SSH sleutels</a> of <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.
-key_name=Sleutel naam
-key_content=Inhoud
-add_key_success=Nieuwe SSH sleutel '%s' werd met succes toegevoegd!
-delete_key=Verwijder
-ssh_key_deletion=SSH sleutel verwijderen
-ssh_key_deletion_desc=Het verwijderen van deze SSH sleutel zal alle verwante toegang tot uw account verwijderen. Wilt u doorgaan?
-ssh_key_deletion_success=SSH sleutel is succesvol verwijderd!
-add_on=Toegevoegd op
-last_used=Laatst gebruikt op
-no_activity=Geen recente activiteiten
-key_state_desc=Deze sleutel werd gebruikt in de laatste 7 dagen
-token_state_desc=Deze token is de laatste 7 dagen gebruikt
-
-manage_social=Beheer gekoppelde sociale accounts
-social_desc=Dit is een lijst van de bijbehorende sociale accounts koppelingen, Verwijder eventueel koppelingen die u niet herkent.
-unbind=Loskoppelen
-unbind_success=Sociaal account is ontkoppeld.
-
-manage_access_token=Persoonlijke toegangstokens beheren
-generate_new_token=Nieuwe Token genereren
-tokens_desc=Tokens die u hebt gegenereerd om toegang tot de Gogs APIs te verkrijgen.
-new_token_desc=Zoals voor nu, moet elke token zal hebben volledige toegang tot uw account.
-token_name=Symbolische naam
-generate_token=Token genereren
-generate_token_succees=Nieuwe toegangstoken is met succes gegenereerd! Zorg ervoor dat uw nieuwe persoonlijke toegangstoken nu kopiëren. U zal niet zitten kundig voor zien het weer!
-delete_token=Verwijderen
-access_token_deletion=Persoonlijke toegang token verwijderen
-access_token_deletion_desc=Verwijderen van deze persoonlijke toegang token zal alle verwante toegang verwijderen. Wilt u doorgaan?
-delete_token_success=Persoonlijke toegangstoken is met succes verwijderd! Vergeet niet uw toepassingen ook bij te werken.
-
-delete_account=Verwijder uw account
-delete_prompt=Deze handeling zal uw account definitief verwijderen, u kunt dit <strong> NIET </strong> terug draaien!
-confirm_delete_account=Bevestig verwijdering
-delete_account_title=Account verwijderen
-delete_account_desc=Dit account zal permanent worden verwijderd. Wilt u doorgaan?
-
-[repo]
-owner=Eigenaar
-repo_name=Repositorie naam
-repo_name_helper=Een goede repositorie naam is kort, memorabel en <strong>uniek</strong>.
-visibility=Zichtbaarheid
-visiblity_helper=Deze repositorie is <span class="ui red text">privaat</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Verandering van deze waarde zal van invloed zijn op alle forks)
-fork_repo=Vork Repository
-fork_from=Afsplitsing van
-fork_visiblity_helper=Gevorkte repository wijzigen zijn bereik potentiële kopers niet
-repo_desc=Omschrijving
-repo_lang=Taal
-repo_lang_helper=Selecteer .gitignore bestanden
-license=Licentie
-license_helper=Selecteer een licentie bestand
-readme=Leesmij-bestand
-readme_helper=Selecteer een sjabloon voor het Leesmij-bestand
-auto_init=Initialiseer deze repositorie met de geselecteerde bestanden en sjabloon
-create_repo=Nieuwe Repositorie
-default_branch=Standaard branch
-mirror_interval=Mirror interval(uur)
-
-form.name_reserved=Repositorienaam '%s' is gereserveerd.
-form.name_pattern_not_allowed=Repositorie naampatroon '%s' is niet toegestaan.
-
-need_auth=Autorisatie vereist
-migrate_type=Migratie type
-migrate_type_helper=Deze repositorie zal een <span class="text blue">mirror</span> zijn
-migrate_repo=Migreer repositorie
-migrate.clone_address=Clone adres
-migrate.clone_address_desc=Dit kan een HTTP/HTTPS/GIT URL zijn of een lokaal pad.
-migrate.invalid_local_path=Ongeldig lokaal pad, het pad bestaat niet of het is geen map.
-
-forked_from=geforked van
-fork_from_self=U kunt geen repository forken die u al beheert!
-copy_link=Kopieer
-copy_link_success=Copied!
-copy_link_error=Press ⌘-C or Ctrl-C to copy
-click_to_copy=Kopieer link naar plakbord
-copied=Gekopieerd
-clone_helper=De behoeftehulp van klonen? Bezoek <a target="_blank" href="%s"> helpen</a>!
-unwatch=Negeren
-watch=Volgen
-unstar=Ontster
-star=Ster
-fork=Vork
-
-no_desc=Geen omschrijving
-quick_guide=Snelstart gids
-clone_this_repo=Kloon deze repositorie
-create_new_repo_command=Maak een nieuwe repositorie aan vanaf de console
-push_exist_repo=Push een bestaande repositorie vanaf de console
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=Aftakking
-tree=Boom
-branch_and_tags=Aftakkingen & labels
-branches=Aftakkingen
-tags=Labels
-issues=Kwesties
-pulls=Pull-aanvragen
-labels=Labels
-milestones=Mijlpalen
-commits=Commits
-releases=Publicaties
-file_raw=Ruwe
-file_history=Geschiedenis
-file_view_raw=Weergave ruwe
-file_permalink=Permalink
-
-commits.commits=Commits
-commits.search=Zoeken
-commits.find=zoek
-commits.author=Auteur
-commits.message=Bericht
-commits.date=Datum
-commits.older=Ouder
-commits.newer=Nieuwer
-
-issues.new=Nieuw probleem
-issues.new.labels=Labels
-issues.new.no_label=Geen label
-issues.new.clear_labels=Verwijder labels
-issues.new.milestone=Mijlpaal
-issues.new.no_milestone=Geen mijlpaal
-issues.new.clear_milestone=Verwijder mijlpaal
-issues.new.open_milestone=Open mijlpalen
-issues.new.closed_milestone=Gesloten mijlpalen
-issues.new.assignee=Verantwoordelijke
-issues.new.clear_assignee=Verwijder verantwoordelijke
-issues.new.no_assignee=Geen verantwoordelijke
-issues.create=Maak probleem
-issues.new_label=Nieuw Label
-issues.new_label_placeholder=Tekst label...
-issues.create_label=Maak label
-issues.open_tab=%d Open
-issues.close_tab=%d gesloten
-issues.filter_label=Label
-issues.filter_label_no_select=Geen label geselecteerd
-issues.filter_milestone=Mijlpaal
-issues.filter_milestone_no_select=Geen geselecteerde mijlpaal
-issues.filter_assignee=Aangewezene
-issues.filter_assginee_no_select=Geen geselecteerde verantwoordelijke
-issues.filter_type=Type
-issues.filter_type.all_issues=Alle kwesties
-issues.filter_type.assigned_to_you=Aan jou toegewezen
-issues.filter_type.created_by_you=Aangemaakt door jou
-issues.filter_type.mentioning_you=Vermelden jou
-issues.filter_sort=Sorteer
-issues.filter_sort.latest=Nieuwste
-issues.filter_sort.oldest=Oudste
-issues.filter_sort.recentupdate=Recent bijgewerkt
-issues.filter_sort.leastupdate=Minst recent bijgewerkt
-issues.filter_sort.mostcomment=Meest besproken
-issues.filter_sort.leastcomment=Minst besproken
-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
-issues.open_title=Open
-issues.closed_title=Gesloten
-issues.num_comments=%d opmerkingen
-issues.commented_at=`gaf commentaar op <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Er is nog geen inhoud.
-issues.close_issue=Sluit
-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 een commit <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
-issues.poster=Poster
-issues.admin=Admin
-issues.owner=Eigenaar
-issues.sign_up_for_free=Gratis aanmelden
-issues.sign_in_require_desc=om deel te nemen in deze conversatie. Heeft u al een account? <a href="%s">Meld u aan om te reageren</a>
-issues.edit=Bewerken
-issues.cancel=Annuleren
-issues.save=Opslaan
-issues.label_title=Labelnaam
-issues.label_color=Labelkleur
-issues.label_count=%d labels
-issues.label_open_issues=%d geopende problemen
-issues.label_edit=Bewerken
-issues.label_delete=Verwijder
-issues.label_modify=Wijzig label
-issues.label_deletion=Verwijder label
-issues.label_deletion_desc=Het verwijderen van dit label zal alle informatie in de gerelateerde problemen verwijderen. Wilt u doorgaan?
-issues.label_deletion_success=Label werd met succes verwijderd!
-
-pulls.compare_changes=Vergelijk veranderingen
-pulls.compare_changes_desc=Vergelijk twee vertakkingen en maak een pull verzoek voor wijzigingen.
-pulls.compare_base=base
-pulls.compare_compare=vergelijk
-pulls.filter_branch=Filter branch
-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.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=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Discussie
-pulls.tab_commits=Commits
-pulls.tab_files=Bestanden gewijzigd
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Samenvoegen van pull verzoek
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=Nieuwe mijlpaal
-milestones.open_tab=%d geopend
-milestones.close_tab=%d gesloten
-milestones.closed=%s werd gesloten
-milestones.no_due_date=Geen vervaldatum
-milestones.open=Open
-milestones.close=Sluit
-milestones.new_subheader=Maak mijlpalen voor het organiseren van uw problemen.
-milestones.create=Mijlpaal maken
-milestones.title=Titel
-milestones.desc=Beschrijving
-milestones.due_date=Vervaldatum (optioneel)
-milestones.clear=Leegmaken
-milestones.invalid_due_date_format=Formaat vervaldatum is ongeldig, moet zijn "jaar-mm-dd".
-milestones.create_success=Mijlpaal '%s' is met succes aangemaakt!
-milestones.edit=Bewerk mijlpaal
-milestones.edit_subheader=Gebruik een goede beschrijving voor mijlpalen, om verwarring te voorkomen.
-milestones.cancel=Annuleer
-milestones.modify=Mijlpaal wijzigen
-milestones.edit_success=Wijzigingen van mijlpaal '%s' is met succes opgeslagen!
-milestones.deletion=Mijlpaal verwijderen
-milestones.deletion_desc=Het verwijderen van dit label zal alle informatie in de gerelateerde problemen verwijderen. Wilt u doorgaan?
-milestones.deletion_success=Mijlpaal is met succes verwijderd!
-
-settings=Instellingen
-settings.options=Opties
-settings.collaboration=Samenwerking
-settings.hooks=Webhooks
-settings.githooks=Git haken
-settings.basic_settings=Basis instellingen
-settings.danger_zone=Gevaren zone
-settings.site=Officiële site
-settings.update_settings=Instellingen bewerken
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
-settings.transfer=Eigendom overdragen
-settings.transfer_desc=Draag deze repo over aan een andere gebruiker of een organisatie waar u beheerders rechten heeft.
-settings.new_owner_has_same_repo=De nieuwe eigenaar heeft al een repositorie met deze naam
-settings.delete=Verwijder deze repositorie
-settings.delete_desc=Als u eenmaal een repositorie verwijderd is er geen weg terug. Gelieve zeker te zijn van uw acties.
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=Repositorie instellingen zijn succesvol bijgewerkt.
-settings.transfer_owner=Nieuwe eigenaar
-settings.make_transfer=Maak overdracht
-settings.transfer_succeed=Eigendom repositorie succesvol overgedragen
-settings.confirm_delete=Bevestig verwijdering
-settings.add_collaborator=Nieuwe medewerker toevoegen
-settings.add_collaborator_success=medewerker is toegevoegd.
-settings.remove_collaborator_success=medewerker is verwijderd.
-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 Gogs 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" href="%s"> Webhooks gids</a>.
-settings.webhook_deletion=Webhook verwijderen
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Verzoek
-settings.webhook.response=Antwoord
-settings.webhook.headers=Headers
-settings.webhook.payload=Lading
-settings.webhook.body=Inhoud
-settings.githooks_desc=Git haken worden aangedreven door Git zelf, u kunt bestanden van ondersteunde haken in de lijst hieronder om aangepaste acties van toepassing bewerken.
-settings.githook_edit_desc=Als haak niet actief is, zal monster inhoud worden gepresenteerd. Verlof inhoud leeg zal deze haak uitschakelen.
-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" href="%s"> Webhooks gids</a>.
-settings.payload_url=Nettolading URL
-settings.content_type=Content type
-settings.secret=Geheim
-settings.slack_username=Gebruikersnaam
-settings.slack_icon_url=Icoon URL
-settings.slack_color=Kleur
-settings.event_desc=Bij welke gebeurtenissen wilt u dat deze webhook getriggerd wordt?
-settings.event_push_only=Alleen bij de <code>push</code> event.
-settings.event_send_everything=Ik moet <strong>alles</strong> hebben.
-settings.event_choose=Laat me kiezen wat ik nodig heb.
-settings.event_create=Creëer
-settings.event_create_desc=Branch, of tag aangemaakt
-settings.event_push=Push
-settings.event_push_desc=Git push naar een repository
-settings.active=Actief
-settings.active_helper=We zullen details van de gebeurtenissen af leveren wanneer deze webhook wordt geactiveerd.
-settings.add_hook_success=Nieuwe webhook toegevoegd.
-settings.update_webhook=Bewerk webhook
-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.slack_token=Slack token
-settings.slack_domain=Slack domein
-settings.slack_channel=Slack kanaal
-settings.deploy_keys=Installeer sleutels
-settings.add_deploy_key=Toevoegen deploy sleutel
-settings.no_deploy_keys=U hebt nog geen deploy sleutels toegevoegd.
-settings.title=Titel
-settings.deploy_key_content=Inhoud
-settings.key_been_used=Deploy sleutel inhoud werd gebruikt.
-settings.key_name_used=Deploy sleutel met eenzelfde naam bestaat al.
-settings.add_key_success=Nieuwe deploy sleutel '%s' werd succesvol toegevoegd!
-settings.deploy_key_deletion=Verwijder deploy sleutel
-settings.deploy_key_deletion_desc=Het verwijderen van deze deploy sleutel zal alle gerelateerde toegang verwijderen voor deze repositorie. Wilt u doorgaan?
-settings.deploy_key_deletion_success=Deploy sleutel werd met succes verwijderd!
-
-diff.browse_source=Bladeren bron
-diff.parent=bovenliggende
-diff.commit=commit
-diff.data_not_available=Diff gegevens niet beschikbaar.
-diff.show_diff_stats=Toon Diff Stats
-diff.stats_desc=<strong>%d gewijzigde bestanden</strong> met <strong>toevoegingen van %d</strong> en <strong>%d verwijderingen</strong>
-diff.bin=BIN
-diff.view_file=Bestand weergeven
-
-release.releases=Releases
-release.new_release=Nieuwe release
-release.draft=Concept
-release.prerelease=Voorlopige versie
-release.stable=Stabiel
-release.edit=bewerken
-release.ahead=<strong>%d</strong> aanpassingen aan %s sinds deze versie
-release.source_code=Broncode
-release.tag_name=Tagnaam
-release.target=Doel
-release.tag_helper=Kies een bestaande tag, of creëer een nieuwe tag bij publiceren.
-release.release_title=Release titel
-release.content_with_md=Inhoud met <a href="%s">Markeringen</a>
-release.write=Schrijf
-release.preview=Voorbeeld
-release.content_placeholder=Schrijf enige inhoud
-release.loading=Laden...
-release.prerelease_desc=Dit is een beta-versie
-release.prerelease_helper=Wij wijzen u erop dat deze release is niet geschikt voor productie doeleinden.
-release.publish=Release publiceren
-release.save_draft=Concept opslaan
-release.edit_release=Release bewerken
-release.tag_name_already_exist=Versie met deze naam bestaat al.
-
-[org]
-org_name_holder=Organisatienaam
-org_name_helper=Een goede organisatienaam is kort en memorabel.
-create_org=Nieuwe organisatie aanmaken
-repo_updated=Geupdate
-people=Mensen
-invite_someone=Iemand uitnodigen
-teams=Teams
-lower_members=leden
-lower_repositories=repositories
-create_new_team=Nieuw team aanmaken
-org_desc=Omschrijving
-team_name=Teamnaam
-team_desc=Omschrijving
-team_name_helper=U gebruikt deze naam om dit team te vermelden in conversaties.
-team_desc_helper=Waar gaat dit team doen?
-team_permission_desc=Welke privileges zou dit team moeten hebben?
-
-form.name_reserved=Organisatienaam '%s' is gereserveerd.
-form.name_pattern_not_allowed=Organisatie naampatroon '%s' is niet toegestaan.
-
-settings=Instellingen
-settings.options=Opties
-settings.full_name=Volledige naam
-settings.website=Website
-settings.location=Locatie
-settings.update_settings=Instellingen bijwerken
-settings.update_setting_success=Organisatie instellingen zijn succesvol bijgewerkt.
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=Verwijder organisatie
-settings.delete_account=Verwijder deze organisatie
-settings.delete_prompt=Deze actie zal de origanisatie permanent verwijderen. U kunt dit <strong>NIET</strong> terug draaien!
-settings.confirm_delete_account=Bevestig verwijdering
-settings.delete_org_title=Verwijderen organsiatie
-settings.delete_org_desc=Deze organisatie zal permanent worden verwijderd, wilt u doorgaan?
-settings.hooks_desc=Een webhook toevoegen die door <strong>alle repositories</strong> in deze organisatie getriggerd kan worden.
-
-members.public=Openbaar
-members.public_helper=maak prive
-members.private=Prive
-members.private_helper=maak openbaar
-members.owner=Eigenaar
-members.member=Lid
-members.conceal=Verbergen
-members.remove=Verwijderen
-members.leave=Verlaat
-members.invite_desc=Begin met het typen van een gebruikersnaam om een nieuw lid aan %s uit te nodigen:
-members.invite_now=Nu uitnodigen
-
-teams.join=Lid worden
-teams.leave=Vertlaat
-teams.read_access=Leestoegang
-teams.read_access_helper=Dit team is in staat om zijn repositories te bekijken en te klonen.
-teams.write_access=Schrijf toegang
-teams.write_access_helper=Dit team is in staat om zijn repositories te bekijken en push aanvragen te verwerken.
-teams.admin_access=Beheerder toegang
-teams.admin_access_helper=Dit team is in staat om push & pull aanvragen te verwerken en om nieuwe medewerkers toe te voegen.
-teams.no_desc=Dit team heeft geen omschrijving
-teams.settings=Instellingen
-teams.owners_permission_desc=Eigenaren hebben volledige toegang tot <strong>alle repositories</strong> en hebben <strong>beheerder rechten</strong> over de organisatie.
-teams.members=Team leden
-teams.update_settings=Instellingen bijwerken
-teams.delete_team=Verwijder deze team
-teams.add_team_member=Nieuwe team lid aanmaken
-teams.delete_team_title=Team verwijderen
-teams.delete_team_desc=Dit team zal worden verwijderd. De leden van dit team zullen toegang tot alle repositories van het team verliezen. Wilt u doorgaan?
-teams.delete_team_success=Gekozen team is succesvol verwijderd.
-teams.read_permission_desc=Dit team heeft <strong>Lees</strong> rechten : leden kunnen repositories lezen en klonen.
-teams.write_permission_desc=Dit team heeft <strong>Schrijf</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken.
-teams.admin_permission_desc=Dit team heeft <strong>Beheerders</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken en medewerkers toevoegen.
-teams.repositories=Teamrepositories
-teams.add_team_repository=Nieuwe teamrepositorie aanmaken
-teams.remove_repo=Verwijder
-teams.add_nonexistent_repo=De opslagplaats die u probeert toe te voegen niet bestaat, kunt u het eerst aanmaken.
-
-[admin]
-dashboard=Dashboard
-users=Gebruikers
-organizations=Orgranisaties
-repositories=Repositories
-authentication=Autenticaties
-config=Configuratie
-notices=Systeem aankondigingen
-monitor=Bijhouden
-first_page=First
-last_page=Last
-total=Total: %d
-
-dashboard.statistic=Statistieken
-dashboard.operations=Bewerkingen
-dashboard.system_status=Status Systeemmonitor
-dashboard.statistic_info=Gogs database heeft <b>%d</b> gebruikers, <b>%d</b> organisaties, <b>%d</b> openbare sleutels, <b>%d</b> repositories, <b>%d</b> volgers, <b>%d</b> sterren, <b>%d</b> acties, <b>%d</b> participanten, <b>%d</b> issues, <b>%d</b> reacties, <b>%d</b> sociale accounten, <b>%d</b> volgers, <b>%d</b> mirrors, <b>%d</b> publicaties, <b>%d</b> login bronnen, <b>%d</b> webhooks, <b>%d</b> mijlpalen, <b>%d</b> labels, <b>%d</b> hook taken, <b>%d</b> teams, <b>%d</b> bijgewerkte taken, <b>%d</b> bijlagen.
-dashboard.operation_name=Bewerking naam
-dashboard.operation_switch=Omschakelen
-dashboard.operation_run=Uitvoeren
-dashboard.clean_unbind_oauth=Clean unbound OAuths
-dashboard.clean_unbind_oauth_success=Alle OAuthes binding hebben verwijderd.
-dashboard.delete_inactivate_accounts=Verwijder alle inactieve accounts
-dashboard.delete_inactivate_accounts_success=Alle inactivering van rekeningen hebben verwijderd.
-dashboard.delete_repo_archives=Verwijderen van alle repositories archieven
-dashboard.delete_repo_archives_success=Alle repositories archieven hebben verwijderd.
-dashboard.git_gc_repos=Garbage collectie uitvoeren
-dashboard.git_gc_repos_success=Garbage collectie met succes uitgevoerd.
-dashboard.resync_all_sshkeys=Herschrijf '.ssh/authorized_keys' (Let op: alle sleutels die niet van Gogs zijn zullen verloren gaan!)
-dashboard.resync_all_sshkeys_success=Alle publieke sleutels zijn herschreven.
-dashboard.resync_all_update_hooks=Herschrijf alle repositorie-hooks (nodig als de configuratie bestandslocatie is gewijzigd)
-dashboard.resync_all_update_hooks_success=Alle repositorie-hooks zijn herschreven.
-
-dashboard.server_uptime=Uptime server
-dashboard.current_goroutine=Huidige Goroutines
-dashboard.current_memory_usage=Huidige geheugen gebruik
-dashboard.total_memory_allocated=Totaal toegewezen geheugen
-dashboard.memory_obtained=Geheugen gebruikt
-dashboard.pointer_lookup_times=Aanwijzer Lookup keer
-dashboard.memory_allocate_times=Geheugen toewijzen keer
-dashboard.memory_free_times=Geheugen gratis keer
-dashboard.current_heap_usage=Huidige Heap gebruik
-dashboard.heap_memory_obtained=Heap-geheugen verkregen
-dashboard.heap_memory_idle=Heap Memory inactief
-dashboard.heap_memory_in_use=Hoop geheugen In gebruik
-dashboard.heap_memory_released=Heap-geheugen vrijgegeven
-dashboard.heap_objects=Heap-objecten
-dashboard.bootstrap_stack_usage=Bootstrap Stack gebruik
-dashboard.stack_memory_obtained=Stapel geheugen verkregen
-dashboard.mspan_structures_usage=MSpan structuren gebruik
-dashboard.mspan_structures_obtained=MSpan structuren verkregen
-dashboard.mcache_structures_usage=MCache structuren gebruik
-dashboard.mcache_structures_obtained=MCache structuren verkregen
-dashboard.profiling_bucket_hash_table_obtained=Profilering emmer hashtabel verkregen
-dashboard.gc_metadata_obtained=GC Metadada verkregen
-dashboard.other_system_allocation_obtained=Andere systeem toewijzing verkregen
-dashboard.next_gc_recycle=Volgende GC recycle
-dashboard.last_gc_time=Sinds vorige GC verwerkingstijd
-dashboard.total_gc_time=Totaal GC verwerkingstijd
-dashboard.total_gc_pause=Totaal GC verwerkingstijd
-dashboard.last_gc_pause=Laatste GC verwerkingstijd
-dashboard.gc_times=GC verwerkingen
-
-users.user_manage_panel=Gebruikers beheren
-users.new_account=Nieuw account aanmaken
-users.name=Naam
-users.activated=Geactiveerd
-users.admin=Admin
-users.repos=Repos
-users.created=Aangemaakt
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=Bewerken
-users.auth_source=Authentication Source
-users.local=Lokaal
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=Profiel is succesvol bijgewerkt.
-users.edit_account=Bewerk account
-users.is_activated=Dit account is geactiveerd
-users.is_admin=Dit account heeft beheerdersrechten
-users.allow_git_hook=Deze account beschikt over machtigingen voor het maken van Git haken
-users.update_profile=Account profiel bijwerken
-users.delete_account=Dit account verwijderen
-users.still_own_repo=Dit account is nog steeds eigendom van een repositorie. U moet deze repositorie eerst verwijderen of overdragen.
-users.still_has_org=Deze account nog steeds lidmaatschap van organisatie, u hebt naar links of hen eerst verwijderen.
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=Organisaties beheren
-orgs.name=Naam
-orgs.teams=Teams
-orgs.members=Leden
-
-repos.repo_manage_panel=Repositoriebeheerpaneel
-repos.owner=Eigenaar
-repos.name=Naam
-repos.private=Prive
-repos.watches=Volgers
-repos.stars=Sterren
-repos.issues=Kwesties
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Add New Source
-auths.name=Naam
-auths.type=Type
-auths.enabled=Ingeschakeld
-auths.updated=Bijgewerkt
-auths.auth_type=Authentication Type
-auths.auth_name=Authentication Name
-auths.domain=Domein
-auths.host=Host
-auths.port=Poort
-auths.bind_dn=Binden DN
-auths.bind_password=Bind Password
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=Voornaam attribuut
-auths.attribute_surname=Achternaam attribuut
-auths.attribute_mail=E-mail attribuut
-auths.filter=User Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=MS Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=SMTP host
-auths.smtpport=SMTP poort
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=Activeer TLS-encryptie
-auths.skip_tls_verify=Skip TLS Verify
-auths.pam_service_name=PAM servicenaam
-auths.enable_auto_register=Activeer automatische registratie
-auths.tips=Tips
-auths.edit=Edit Authentication Setting
-auths.activated=Deze autorisatiemethode is geactiveerd
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Authentication setting has been updated successfully.
-auths.update=Update Authentication Setting
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=Serverconfiguratie
-config.app_name=Applicatienaam
-config.app_ver=Applicatieversie
-config.app_url=Applicatie-URL
-config.domain=Domein
-config.offline_mode=Offline-modus
-config.disable_router_log=Router-log uitschakelen
-config.run_user=Uitvoerende gebruiker
-config.run_mode=Uitvoer modus
-config.repo_root_path=Repositorie basis pad
-config.static_file_root_path=Statische bestanden basis pad
-config.log_file_root_path=Log bestand basis pad
-config.script_type=Script type
-config.reverse_auth_user=Omgekeerde verificatie gebruiker
-config.db_config=Databaseconfiguratie
-config.db_type=Type
-config.db_host=Host
-config.db_name=Naam
-config.db_user=Gebruiker
-config.db_ssl_mode=SSL modus
-config.db_ssl_mode_helper=(alleen voor "postgres")
-config.db_path=Pad
-config.db_path_helper=(for "sqlite3" and "tidb")
-config.service_config=Serviceconfiguratie
-config.register_email_confirm=E-mailbevestiging registreren
-config.disable_register=Registratie uitgeschakeld
-config.show_registration_button=Registeren knop weergeven
-config.require_sign_in_view=Inloggen vereist om te kunnen inzien
-config.enable_cache_avatar=Avatar Cache inschakelen
-config.mail_notify=E-mailnotificaties
-config.disable_key_size_check=Disable Minimum Key Size Check
-config.enable_captcha=Enable Captcha
-config.active_code_lives=Actieve Code leven
-config.reset_password_code_lives=Reset wachtwoord Code leven
-config.webhook_config=Webhook configuratie
-config.queue_length=Lengte van wachtrij
-config.deliver_timeout=Bezorging verlooptijd
-config.skip_tls_verify=TLS certificaat controle overslaan
-config.mailer_config=Mailerconfiguatie
-config.mailer_enabled=Ingeschakeld
-config.mailer_disable_helo=Schakel HELO uit
-config.mailer_name=Naam
-config.mailer_host=Host
-config.mailer_user=Gebruiker
-config.oauth_config=OAuth-configuratie
-config.oauth_enabled=Ingeschakeld
-config.cache_config=Cache-configuratie
-config.cache_adapter=Cache-adapter
-config.cache_interval=Cache-interval
-config.cache_conn=Cache-connectie
-config.session_config=Sessieconfiguratie
-config.session_provider=Sessieprovider
-config.provider_config=Provider config
-config.cookie_name=Cookie naam
-config.enable_set_cookie=Set Cookie inschakelen
-config.gc_interval_time=GC interval time
-config.session_life_time=Sessie duur
-config.https_only=Alleen HTTPS
-config.cookie_life_time=Cookie duur leeftijd
-config.picture_config=Foto configuratie
-config.picture_service=Foto service
-config.disable_gravatar=Gravatar uitschakelen
-config.log_config=Logconfiguratie
-config.log_mode=Log-modus
-
-monitor.cron=Cron-taken
-monitor.name=Naam
-monitor.schedule=Planning
-monitor.next=Volgende
-monitor.previous=Vorige
-monitor.execute_times=Aantal keren uitgevoerd
-monitor.process=Draaiende processen
-monitor.desc=Omschrijving
-monitor.start=Starttijd
-monitor.execute_time=Uitvoertijd
-
-notices.system_notice_list=Systeem aankondigingen
-notices.type=Type
-notices.type_1=Opslagplaats
-notices.desc=Beschrijving
-notices.op=Op.
-notices.delete_success=Systeem bericht is met succes verwijderd.
-
-[action]
-create_repo=repositorie aangemaakt in <a href="%s">%s</a>
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=push update naar <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a>
-create_issue=`opende issue in <a href="%s/issues/%s">%s#%[2]s</a>`
-create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`reactie op issue <a href="%s/issues/%s">%s#%[2]s</a>`
-merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-transfer_repo=repositorie 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_2_commits=Weergave vergelijking voor deze 2 commits
-
-[tool]
-ago=geleden
-from_now=vanaf nu
-now=nu
-1s=1 seconde %s
-1m=1 minuut %s
-1h=1 uur %s
-1d=1 dag %s
-1w=1 week %s
-1mon=1 maand %s
-1y=1 jaar %s
-seconds=%d seconden %s
-minutes=%d minuten %s
-hours=%d uur %s
-days=%d dagen %s
-weeks=%d weken %s
-months=%d maanden %s
-years=%d jaren %s
-raw_seconds=seconden
-raw_minutes=minuten
-
-[dropzone]
-default_message=Drop bestanden hier of klik om te uploaden.
-invalid_input_type=U kunt geen bestanden van dit type uploaden.
-file_too_big=Bestandsgrootte ({{filesize}} MB) overschrijdt de maximale grootte ({{maxFilesize}} MB).
-remove_file=Verwijder bestand
-
+app_desc=Een eenvoudige zelfgehoste Git service geschreven in Go
+
+home=Huis
+dashboard=Dashboard
+explore=Verkennen
+help=Help
+sign_in=Inloggen
+sign_out=Afmelden
+sign_up=Aanmelden
+register=Registreer
+website=Website
+version=Versie
+page=Pagina
+template=Sjabloon
+language=Taal
+create_new=Create...
+user_profile_and_more=Gebruikersprofiel en meer
+signed_in_as=Aangemeld als
+
+username=Gebruikersnaam
+email=E-mail
+password=Wachttwoord
+re_type=Verificatie
+captcha=CAPTCHA
+
+repository=Repositorie
+organization=Organisatie
+mirror=Spiegel
+new_repo=Nieuwe repositorie
+new_migrate=Nieuwe migratie
+new_fork=Nieuwe vork Repository
+new_org=Nieuwe organisatie
+manage_org=Beheer organisaties
+admin_panel=Adminpaneel
+account_settings=Accountinstellingen
+settings=Instellingen
+your_profile=Uw profiel
+your_settings=Uw instellingen
+
+news_feed=Nieuwsfeed
+pull_requests=Pull-aanvragen
+issues=Kwesties
+
+cancel=Annuleer
+
+[search]
+search=Zoeken...
+repository=Opslagplaats
+user=Gebruiker
+issue=Probleem
+code=Code
+
+[install]
+install=Installatie
+title=Installatiestappen voor de eerste keer opstarten
+docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
+requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
+db_title=Database instellingen
+db_type=Database-type
+host=Host
+user=Gebruikersnaam
+password=Wachtwoord
+db_name=Database naam
+db_helper=Gebruik InnoDB engine met utf8_general_ci karakterset voor MySQL.
+ssl_mode=SSL-modus
+path=Pad
+sqlite_helper=The file path of SQLite3 or TiDB database.
+err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
+err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
+no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
+err_empty_admin_password=Admin password cannot be empty.
+
+general_title=Toepassing algemene instellingen
+app_name=Applicatienaam
+app_name_helper=Plaats hier je organisatienaam in grote letters!
+repo_path=Repositories basis directorie
+repo_path_helper=Alle remote Git repositories worden in deze directorie opgeslagen
+run_user=Uitvoerende gebruikersnaam
+run_user_helper=Deze gebruiker moet toegang hebben tot de git repositorie directorie en moet Gogs kunnen starten
+domain=Domein
+domain_helper=Dit heeft invloed op de SSH kloon URLs
+ssh_port=SSH-poort
+ssh_port_helper=Nummer van de poort die uw SSH-server gebruikt, laat dit leeg om de SSH functie uit te schakelen.
+http_port=HTTP-poort
+http_port_helper=Poortnummer waar het programma naar luistert.
+app_url=Applicatie URL
+app_url_helper=Dit heeft invloed op de HTTP/HTTPS kloon urls en de urls die in de email worden gebruikt
+
+optional_title=Optionele instellingen
+email_title=E-mail service instellingen
+smtp_host=SMTP host
+smtp_from=Afzender
+smtp_from_helper=Email afzender, RFC 5322. Dit kan gewoon een email adres zijn of het "Naam"<email@example.com> formaat.
+mailer_user=Afzender e-mail / gebruikersnaam
+mailer_password=Wachtwoord
+register_confirm=Activeer registratie emails
+mail_notify=Activeer e-mailnotificaties
+server_service_title=Server en andere Services-instellingen
+offline_mode=Off line modus inschakelen
+offline_mode_popup=Schakel CDN uit in productiemodus, alle bestanden worden lokaal aangeboden.
+disable_gravatar=Gravatar Service uitschakelen
+disable_gravatar_popup=Schakel Gravatar en andere bronnen uit, alle avatars worden door gebruikers geüpload of zijn standaard.
+disable_registration=Schakel zelfregistratie uit
+disable_registration_popup=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
+enable_captcha=Enable Captcha
+enable_captcha_popup=Require validate captcha for user self-registration.
+require_sign_in_view=Schakel vereiste aanmelding om pagina's te zien in
+require_sign_in_view_popup=Alleen ingelogde gebruikers kunnen pagina's bekijken, bezoekers kunnen alleen de login/registratie pagina's zien.
+admin_setting_desc=U hoeft niet meteen een administratie account te maken, de gebruiker met ID=1 krijgt automatisch administratierechten.
+admin_title=Instellingen beheerdersaccount
+admin_name=Gebruikersnaam
+admin_password=Wachtwoord
+confirm_password=Verifieer wachtwoord
+admin_email=Admin E-mail
+install_gogs=Installeer Gogs
+test_git_failed=Git test niet gelukt: 'git' commando %v
+sqlite3_not_available=Uw versie biedt geen ondersteuning voor SQLite3, download de officiële binaire versie van %s, niet de gobuild versie.
+invalid_db_setting=Uw database instellingen zijn niet correct: %v
+invalid_repo_path=Repositorie basis pad is niet correct: %v
+run_user_not_match=De uitvoerende gebruiker is niet de huidig gebruiker: %s -> %s
+save_config_failed=Kan de configuratie niet opslaan: %v
+invalid_admin_setting=Uw admin-instellingen zijn niet geldig: %v
+install_success=Welkom! Wij zijn veheugd dat u voor Gogs heeft gekozen, veel plezier en tot ziens
+
+[home]
+uname_holder=Gebruikersnaam of e-mail
+password_holder=Wachtwoord
+switch_dashboard_context=Wissel voorpaginacontext
+my_repos=Mijn repositories
+collaborative_repos=Gedeelde repositories
+my_orgs=Mijn organisaties
+my_mirrors=Mijn mirrors
+view_home=Bekijk %s
+
+issues.in_your_repos=In uw repositories
+
+[explore]
+repos=Repositories
+
+[auth]
+create_new_account=Maak nieuw account aan
+register_hepler_msg=Heeft u al een account? Meld u nu aan!
+social_register_hepler_msg=Heeft u al een account? Koppel nu!
+disable_register_prompt=Sorry, registratie is uitgeschakeld. Neem contact op met de beheerder van deze site.
+disable_register_mail=Sorry, bevestiging van registratie per e-mail is uitgeschakeld.
+remember_me=Onthoud mij
+forgot_password=Wachtwoord vergeten
+forget_password=Wachtwoord vergeten?
+sign_up_now=Een account nodig? Meld u nu aan.
+confirmation_mail_sent_prompt=Een bevestigingsemail is gestuurd naar <b>%s</b>, Bevestig u aanvraag binnen %d uren om uw registratie te voltooien.
+active_your_account=Activeer uw account
+resent_limit_prompt=Sorry, u heeft te snel na elkaar een aanvraag gedaan voor een activatie mail. Wacht drie minuten voor uw volgende aanvraag.
+has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (<b>%s</b>). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop.
+resend_mail=Klik hier om uw activatie mail nog een keer te verzenden
+email_not_associate=Dit e-mailadres is niet gekoppeld aan een account.
+send_reset_mail=Klik hier om uw wachtwoord reset mail (nogmaals) te versturen
+reset_password=Reset uw wachtwoord
+invalid_code=Sorry, uw bevestigingscode is verlopen of niet meer geldig.
+reset_password_helper=Klik hier om uw wachtwoord opnieuw in te stellen.
+password_too_short=De lengte van uw wachtwoord moet minimaal zes karakters zijn.
+
+[mail]
+activate_account=Please activate your account
+activate_email=Verify your e-mail address
+reset_password=Reset your password
+register_success=Register success, Welcome
+register_notify=Welcome on board
+
+[modal]
+yes=Ja
+no=Nee
+modify=Aanpassen
+
+[form]
+UserName=Gebruikersnaam
+RepoName=Repositorie naam
+Email=e-mailadres
+Password=Wachtwoord
+Retype=Verifieer wachtwoord
+SSHTitle=SSH sleutel naam
+HttpsUrl=HTTPS-URL
+PayloadUrl=Nettolading URL
+TeamName=Team naam
+AuthName=Autorisatienaam
+AdminEmail=E-mail beheerder
+
+require_error=kan niet leeg zijn.
+alpha_dash_error=moet een valide alfanumeriek of dash(-_) karakter zijn.
+alpha_dash_dot_error=moet een valide alfanumeriek, dash(-_) of (.) punt karakter zijn.
+size_error=moet groter zijn dan %s
+min_size_error=moet minimaal %s karakters bevatten.
+max_size_error=mag maximaal %s karakters bevatten.
+email_error=is niet een valide e-mail adres.
+url_error=is niet een valide URL.
+include_error=` must contain substring '%s'.`
+unknown_error=Onbekende fout:
+captcha_incorrect=Captcha komt niet overeen.
+password_not_match=Wachtwoord en verificatie wachtwoord komen niet overeen.
+
+username_been_taken=Gebruikersnaam is al in gebruik.
+repo_name_been_taken=Repositorie naam is al in gebruik.
+org_name_been_taken=Organisatie naam is al in gebruik.
+team_name_been_taken=Team naam is al in gebruik.
+email_been_used=e-mailadres is al in gebruik.
+illegal_team_name=Team naam bevat illegale karakters.
+username_password_incorrect=Gebruikersnaam of wachtwoord is niet correct.
+enterred_invalid_repo_name=U heeft een onjuiste repositorie naam ingevoerd.
+enterred_invalid_owner_name=U heeft een onjuiste eigenaar ingevoerd.
+enterred_invalid_password=U heeft een onjuiste wachtwoord ingevoerd.
+user_not_exist=Gegeven gebruiker bestaat niet.
+last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst nieuwe lid (eigenaar) aanstellen.
+
+invalid_ssh_key=Sorry, we zijn niet in staat om uw SSH-sleutel te verifiëren: %s
+unable_verify_ssh_key=Gogs kan niet controleren of uw SSH-sleutel, maar wij gaan ervan uit dat is geldig, zorg ervoor dat uzelf.
+auth_failed=Verificatie mislukt: %v
+
+still_own_repo=Uw account heeft nog een eigendom op een repositorie. U moet deze eerst verwijderen of overdragen.
+still_has_org=Uw account nog steeds lidmaatschap van organisatie, u hebt naar links of hen eerst verwijderen.
+org_still_own_repo=De organisatie heeft nog eigendomen op repositories. U moet deze eerst verwijderen of overdragen.
+
+still_own_user=Deze authenticatie methode wordt nog gebruikt door sommige gebruikers. U moet hen eerst verplaatsen of verwijderen.
+
+target_branch_not_exist=Doel branch bestaat niet
+
+[user]
+change_avatar=Verander uw avatar op Gravatar.com
+change_custom_avatar=Wijzig uw avatar in de instellingen
+join_on=Aangemeld op
+repositories=repositories
+activity=Openbare activiteit
+followers=Volgers
+starred=Sterren
+following=Volgt
+
+form.name_reserved=De gebruikersnaam '%s' is gereserveerd.
+form.name_pattern_not_allowed=Het gebruikersnaam patroon '%s' is niet toegestaan.
+
+[settings]
+profile=Profiel
+password=Wachtwoord
+ssh_keys=SSH-sleutels
+social=Sociale netwerk-accounts
+applications=Toepassingen
+orgs=Organisaties
+delete=Verwijder account
+uid=uid
+
+public_profile=Openbaar profiel
+profile_desc=Uw e-mailadres is openbaar en zal gebruikt worden voor alle account gerelateerde berichtgevingen en bewerkingingen die via de website worden gedaan.
+full_name=Volledige naam
+website=Website
+location=Locatie
+update_profile=Profile bijwerken
+update_profile_success=Uw profiel is succesvol bijgewerkt.
+change_username=Username veranderd
+change_username_prompt=This change will affect the way how links relate to your account.
+continue=Doorgaan
+cancel=Annuleren
+
+enable_custom_avatar=Aangepaste avatar inschakelen
+enable_custom_avatar_helper=Avatar niet ophalen van Gravatar
+choose_new_avatar=Kies een nieuwe avatar
+update_avatar=Avatar instelling bijwerken
+uploaded_avatar_not_a_image=Geüpload bestand is geen afbeelding.
+no_custom_avatar_available=Geen aangepaste avatar beschikbaar, kan niet worden ingeschakeld.
+update_avatar_success=Instellingen voor avatar succesvol bijgewerkt.
+
+change_password=Verander wachtwoord
+old_password=Huidige wachtwoord
+new_password=Nieuw wachtwoord
+retype_new_password=Retype New Password
+password_incorrect=Huidig wachtwoord is niet correct.
+change_password_success=Wachtwoord is succesvol gewijzigd. U kunt nu met uw nieuwe wachtwoord inloggen.
+
+emails=E-mailadressen
+manage_emails=E-mailadressen beheren
+email_desc=Uw primaire e-mailadres zal worden gebruikt voor meldingen en andere administratieve taken.
+primary=Primair
+primary_email=Instellen als primair
+delete_email=Verwijder
+email_deletion=E-mail Deletion
+email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
+email_deletion_success=E-mail has been deleted successfully!
+add_new_email=Nieuw e-mailadres toevoegen
+add_email=E-mailadres toevoegen
+add_email_confirmation_sent=Een nieuwe bevestiging e-mail werd verstuurd naar '%s', gelieve uw inbox in de komende %d uren te controleren om het bevestigingsproces te voltooien.
+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>De behoeftehulp van?</strong> Check out onze gids voor het <a href="%s"> genereren van SSH sleutels</a> of <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.
+key_name=Sleutel naam
+key_content=Inhoud
+add_key_success=Nieuwe SSH sleutel '%s' werd met succes toegevoegd!
+delete_key=Verwijder
+ssh_key_deletion=SSH sleutel verwijderen
+ssh_key_deletion_desc=Het verwijderen van deze SSH sleutel zal alle verwante toegang tot uw account verwijderen. Wilt u doorgaan?
+ssh_key_deletion_success=SSH sleutel is succesvol verwijderd!
+add_on=Toegevoegd op
+last_used=Laatst gebruikt op
+no_activity=Geen recente activiteiten
+key_state_desc=Deze sleutel werd gebruikt in de laatste 7 dagen
+token_state_desc=Deze token is de laatste 7 dagen gebruikt
+
+manage_social=Beheer gekoppelde sociale accounts
+social_desc=Dit is een lijst van de bijbehorende sociale accounts koppelingen, Verwijder eventueel koppelingen die u niet herkent.
+unbind=Loskoppelen
+unbind_success=Sociaal account is ontkoppeld.
+
+manage_access_token=Persoonlijke toegangstokens beheren
+generate_new_token=Nieuwe Token genereren
+tokens_desc=Tokens die u hebt gegenereerd om toegang tot de Gogs APIs te verkrijgen.
+new_token_desc=Zoals voor nu, moet elke token zal hebben volledige toegang tot uw account.
+token_name=Symbolische naam
+generate_token=Token genereren
+generate_token_succees=Nieuwe toegangstoken is met succes gegenereerd! Zorg ervoor dat uw nieuwe persoonlijke toegangstoken nu kopiëren. U zal niet zitten kundig voor zien het weer!
+delete_token=Verwijderen
+access_token_deletion=Persoonlijke toegang token verwijderen
+access_token_deletion_desc=Verwijderen van deze persoonlijke toegang token zal alle verwante toegang verwijderen. Wilt u doorgaan?
+delete_token_success=Persoonlijke toegangstoken is met succes verwijderd! Vergeet niet uw toepassingen ook bij te werken.
+
+delete_account=Verwijder uw account
+delete_prompt=Deze handeling zal uw account definitief verwijderen, u kunt dit <strong> NIET </strong> terug draaien!
+confirm_delete_account=Bevestig verwijdering
+delete_account_title=Account verwijderen
+delete_account_desc=Dit account zal permanent worden verwijderd. Wilt u doorgaan?
+
+[repo]
+owner=Eigenaar
+repo_name=Repositorie naam
+repo_name_helper=Een goede repositorie naam is kort, memorabel en <strong>uniek</strong>.
+visibility=Zichtbaarheid
+visiblity_helper=Deze repositorie is <span class="ui red text">privaat</span>
+visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
+visiblity_fork_helper=(Verandering van deze waarde zal van invloed zijn op alle forks)
+clone_helper=De behoeftehulp van klonen? Bezoek <a target="_blank" href="%s"> helpen</a>!
+fork_repo=Vork Repository
+fork_from=Afsplitsing van
+fork_visiblity_helper=Gevorkte repository wijzigen zijn bereik potentiële kopers niet
+repo_desc=Omschrijving
+repo_lang=Taal
+repo_lang_helper=Selecteer .gitignore bestanden
+license=Licentie
+license_helper=Selecteer een licentie bestand
+readme=Leesmij-bestand
+readme_helper=Selecteer een sjabloon voor het Leesmij-bestand
+auto_init=Initialiseer deze repositorie met de geselecteerde bestanden en sjabloon
+create_repo=Nieuwe Repositorie
+default_branch=Standaard branch
+mirror_interval=Mirror interval(uur)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Repositorienaam '%s' is gereserveerd.
+form.name_pattern_not_allowed=Repositorie naampatroon '%s' is niet toegestaan.
+
+need_auth=Autorisatie vereist
+migrate_type=Migratie type
+migrate_type_helper=Deze repositorie zal een <span class="text blue">mirror</span> zijn
+migrate_repo=Migreer repositorie
+migrate.clone_address=Clone adres
+migrate.clone_address_desc=Dit kan een HTTP/HTTPS/GIT URL zijn of een lokaal pad.
+migrate.permission_denied=You are not allowed to import local repositories.
+migrate.invalid_local_path=Ongeldig lokaal pad, het pad bestaat niet of het is geen map.
+migrate.failed=Migration failed: %v
+
+forked_from=geforked van
+fork_from_self=U kunt geen repository forken die u al beheert!
+copy_link=Kopieer
+copy_link_success=Copied!
+copy_link_error=Press ⌘-C or Ctrl-C to copy
+copied=Gekopieerd
+unwatch=Negeren
+watch=Volgen
+unstar=Ontster
+star=Ster
+fork=Vork
+
+no_desc=Geen omschrijving
+quick_guide=Snelstart gids
+clone_this_repo=Kloon deze repositorie
+create_new_repo_command=Maak een nieuwe repositorie aan vanaf de console
+push_exist_repo=Push een bestaande repositorie vanaf de console
+repo_is_empty=This repository is empty, please come back later!
+
+branch=Aftakking
+tree=Boom
+filter_branch_and_tag=Filter branch or tag
+branches=Aftakkingen
+tags=Labels
+issues=Kwesties
+pulls=Pull-aanvragen
+labels=Labels
+milestones=Mijlpalen
+commits=Commits
+releases=Publicaties
+file_raw=Ruwe
+file_history=Geschiedenis
+file_view_raw=Weergave ruwe
+file_permalink=Permalink
+
+commits.commits=Commits
+commits.search=Zoeken
+commits.find=zoek
+commits.author=Auteur
+commits.message=Bericht
+commits.date=Datum
+commits.older=Ouder
+commits.newer=Nieuwer
+
+issues.new=Nieuw probleem
+issues.new.labels=Labels
+issues.new.no_label=Geen label
+issues.new.clear_labels=Verwijder labels
+issues.new.milestone=Mijlpaal
+issues.new.no_milestone=Geen mijlpaal
+issues.new.clear_milestone=Verwijder mijlpaal
+issues.new.open_milestone=Open mijlpalen
+issues.new.closed_milestone=Gesloten mijlpalen
+issues.new.assignee=Verantwoordelijke
+issues.new.clear_assignee=Verwijder verantwoordelijke
+issues.new.no_assignee=Geen verantwoordelijke
+issues.create=Maak probleem
+issues.new_label=Nieuw Label
+issues.new_label_placeholder=Tekst label...
+issues.create_label=Maak label
+issues.open_tab=%d Open
+issues.close_tab=%d gesloten
+issues.filter_label=Label
+issues.filter_label_no_select=Geen label geselecteerd
+issues.filter_milestone=Mijlpaal
+issues.filter_milestone_no_select=Geen geselecteerde mijlpaal
+issues.filter_assignee=Aangewezene
+issues.filter_assginee_no_select=Geen geselecteerde verantwoordelijke
+issues.filter_type=Type
+issues.filter_type.all_issues=Alle kwesties
+issues.filter_type.assigned_to_you=Aan jou toegewezen
+issues.filter_type.created_by_you=Aangemaakt door jou
+issues.filter_type.mentioning_you=Vermelden jou
+issues.filter_sort=Sorteer
+issues.filter_sort.latest=Nieuwste
+issues.filter_sort.oldest=Oudste
+issues.filter_sort.recentupdate=Recent bijgewerkt
+issues.filter_sort.leastupdate=Minst recent bijgewerkt
+issues.filter_sort.mostcomment=Meest besproken
+issues.filter_sort.leastcomment=Minst besproken
+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
+issues.open_title=Open
+issues.closed_title=Gesloten
+issues.num_comments=%d opmerkingen
+issues.commented_at=`gaf commentaar op <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Er is nog geen inhoud.
+issues.close_issue=Sluit
+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 een commit <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
+issues.poster=Poster
+issues.admin=Admin
+issues.owner=Eigenaar
+issues.sign_up_for_free=Gratis aanmelden
+issues.sign_in_require_desc=om deel te nemen in deze conversatie. Heeft u al een account? <a href="%s">Meld u aan om te reageren</a>
+issues.edit=Bewerken
+issues.cancel=Annuleren
+issues.save=Opslaan
+issues.label_title=Labelnaam
+issues.label_color=Labelkleur
+issues.label_count=%d labels
+issues.label_open_issues=%d geopende problemen
+issues.label_edit=Bewerken
+issues.label_delete=Verwijder
+issues.label_modify=Wijzig label
+issues.label_deletion=Verwijder label
+issues.label_deletion_desc=Het verwijderen van dit label zal alle informatie in de gerelateerde problemen verwijderen. Wilt u doorgaan?
+issues.label_deletion_success=Label werd met succes verwijderd!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Vergelijk veranderingen
+pulls.compare_changes_desc=Vergelijk twee vertakkingen en maak een pull verzoek voor wijzigingen.
+pulls.compare_base=base
+pulls.compare_compare=vergelijk
+pulls.filter_branch=Filter branch
+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.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=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Discussie
+pulls.tab_commits=Commits
+pulls.tab_files=Bestanden gewijzigd
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Samenvoegen van pull verzoek
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=Nieuwe mijlpaal
+milestones.open_tab=%d geopend
+milestones.close_tab=%d gesloten
+milestones.closed=%s werd gesloten
+milestones.no_due_date=Geen vervaldatum
+milestones.open=Open
+milestones.close=Sluit
+milestones.new_subheader=Maak mijlpalen voor het organiseren van uw problemen.
+milestones.create=Mijlpaal maken
+milestones.title=Titel
+milestones.desc=Beschrijving
+milestones.due_date=Vervaldatum (optioneel)
+milestones.clear=Leegmaken
+milestones.invalid_due_date_format=Formaat vervaldatum is ongeldig, moet zijn "jjjj-mm-dd".
+milestones.create_success=Mijlpaal '%s' is met succes aangemaakt!
+milestones.edit=Bewerk mijlpaal
+milestones.edit_subheader=Gebruik een goede beschrijving voor mijlpalen, om verwarring te voorkomen.
+milestones.cancel=Annuleer
+milestones.modify=Mijlpaal wijzigen
+milestones.edit_success=Wijzigingen van mijlpaal '%s' is met succes opgeslagen!
+milestones.deletion=Mijlpaal verwijderen
+milestones.deletion_desc=Het verwijderen van dit label zal alle informatie in de gerelateerde problemen verwijderen. Wilt u doorgaan?
+milestones.deletion_success=Mijlpaal is met succes verwijderd!
+
+settings=Instellingen
+settings.options=Opties
+settings.collaboration=Samenwerking
+settings.hooks=Webhooks
+settings.githooks=Git haken
+settings.basic_settings=Basis instellingen
+settings.danger_zone=Gevaren zone
+settings.site=Officiële site
+settings.update_settings=Instellingen bewerken
+settings.change_reponame_prompt=This change will affect how links relate to the repository.
+settings.transfer=Eigendom overdragen
+settings.transfer_desc=Draag deze repo over aan een andere gebruiker of een organisatie waar u beheerders rechten heeft.
+settings.new_owner_has_same_repo=De nieuwe eigenaar heeft al een repositorie met deze naam
+settings.delete=Verwijder deze repositorie
+settings.delete_desc=Als u eenmaal een repositorie verwijderd is er geen weg terug. Gelieve zeker te zijn van uw acties.
+settings.transfer_notices_1=- You will lose access if new owner is a individual user.
+settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
+settings.transfer_form_title=Please enter following information to confirm your operation:
+settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
+settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
+settings.update_settings_success=Repositorie instellingen zijn succesvol bijgewerkt.
+settings.transfer_owner=Nieuwe eigenaar
+settings.make_transfer=Maak overdracht
+settings.transfer_succeed=Eigendom repositorie succesvol overgedragen
+settings.confirm_delete=Bevestig verwijdering
+settings.add_collaborator=Nieuwe medewerker toevoegen
+settings.add_collaborator_success=medewerker is toegevoegd.
+settings.remove_collaborator_success=medewerker is verwijderd.
+settings.search_user_placeholder=Search user...
+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 Gogs 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" href="%s"> Webhooks gids</a>.
+settings.webhook_deletion=Webhook verwijderen
+settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
+settings.webhook_deletion_success=Webhook has been deleted successfully!
+settings.webhook.request=Verzoek
+settings.webhook.response=Antwoord
+settings.webhook.headers=Headers
+settings.webhook.payload=Lading
+settings.webhook.body=Inhoud
+settings.githooks_desc=Git haken worden aangedreven door Git zelf, u kunt bestanden van ondersteunde haken in de lijst hieronder om aangepaste acties van toepassing bewerken.
+settings.githook_edit_desc=Als haak niet actief is, zal monster inhoud worden gepresenteerd. Verlof inhoud leeg zal deze haak uitschakelen.
+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" href="%s"> Webhooks gids</a>.
+settings.payload_url=Nettolading URL
+settings.content_type=Content type
+settings.secret=Geheim
+settings.slack_username=Gebruikersnaam
+settings.slack_icon_url=Icoon URL
+settings.slack_color=Kleur
+settings.event_desc=Bij welke gebeurtenissen wilt u dat deze webhook getriggerd wordt?
+settings.event_push_only=Alleen bij de <code>push</code> event.
+settings.event_send_everything=Ik moet <strong>alles</strong> hebben.
+settings.event_choose=Laat me kiezen wat ik nodig heb.
+settings.event_create=Creëer
+settings.event_create_desc=Branch, of tag aangemaakt
+settings.event_push=Push
+settings.event_push_desc=Git push naar een repository
+settings.active=Actief
+settings.active_helper=We zullen details van de gebeurtenissen af leveren wanneer deze webhook wordt geactiveerd.
+settings.add_hook_success=Nieuwe webhook toegevoegd.
+settings.update_webhook=Bewerk webhook
+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.slack_token=Slack token
+settings.slack_domain=Slack domein
+settings.slack_channel=Slack kanaal
+settings.deploy_keys=Installeer sleutels
+settings.add_deploy_key=Toevoegen deploy sleutel
+settings.no_deploy_keys=U hebt nog geen deploy sleutels toegevoegd.
+settings.title=Titel
+settings.deploy_key_content=Inhoud
+settings.key_been_used=Deploy sleutel inhoud werd gebruikt.
+settings.key_name_used=Deploy sleutel met eenzelfde naam bestaat al.
+settings.add_key_success=Nieuwe deploy sleutel '%s' werd succesvol toegevoegd!
+settings.deploy_key_deletion=Verwijder deploy sleutel
+settings.deploy_key_deletion_desc=Het verwijderen van deze deploy sleutel zal alle gerelateerde toegang verwijderen voor deze repositorie. Wilt u doorgaan?
+settings.deploy_key_deletion_success=Deploy sleutel werd met succes verwijderd!
+
+diff.browse_source=Bladeren bron
+diff.parent=bovenliggende
+diff.commit=commit
+diff.data_not_available=Diff gegevens niet beschikbaar.
+diff.show_diff_stats=Toon Diff Stats
+diff.stats_desc=<strong>%d gewijzigde bestanden</strong> met <strong>toevoegingen van %d</strong> en <strong>%d verwijderingen</strong>
+diff.bin=BIN
+diff.view_file=Bestand weergeven
+
+release.releases=Releases
+release.new_release=Nieuwe release
+release.draft=Concept
+release.prerelease=Voorlopige versie
+release.stable=Stabiel
+release.edit=bewerken
+release.ahead=<strong>%d</strong> aanpassingen aan %s sinds deze versie
+release.source_code=Broncode
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Tagnaam
+release.target=Doel
+release.tag_helper=Kies een bestaande tag, of creëer een nieuwe tag bij publiceren.
+release.title=Title
+release.content=Content
+release.write=Schrijf
+release.preview=Voorbeeld
+release.loading=Laden...
+release.prerelease_desc=Dit is een beta-versie
+release.prerelease_helper=Wij wijzen u erop dat deze release is niet geschikt voor productie doeleinden.
+release.cancel=Cancel
+release.publish=Release publiceren
+release.save_draft=Concept opslaan
+release.edit_release=Release bewerken
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Versie met deze naam bestaat al.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Organisatienaam
+org_full_name_holder=Organization Full Name
+org_name_helper=Een goede organisatienaam is kort en memorabel.
+create_org=Nieuwe organisatie aanmaken
+repo_updated=Geupdate
+people=Mensen
+invite_someone=Iemand uitnodigen
+teams=Teams
+lower_members=leden
+lower_repositories=repositories
+create_new_team=Nieuw team aanmaken
+org_desc=Omschrijving
+team_name=Teamnaam
+team_desc=Omschrijving
+team_name_helper=U gebruikt deze naam om dit team te vermelden in conversaties.
+team_desc_helper=Waar gaat dit team doen?
+team_permission_desc=Welke privileges zou dit team moeten hebben?
+
+form.name_reserved=Organisatienaam '%s' is gereserveerd.
+form.name_pattern_not_allowed=Organisatie naampatroon '%s' is niet toegestaan.
+
+settings=Instellingen
+settings.options=Opties
+settings.full_name=Volledige naam
+settings.website=Website
+settings.location=Locatie
+settings.update_settings=Instellingen bijwerken
+settings.update_setting_success=Organisatie instellingen zijn succesvol bijgewerkt.
+settings.change_orgname_prompt=This change will affect how links relate to the organization.
+settings.update_avatar_success=Organization avatar setting has been updated successfully.
+settings.delete=Verwijder organisatie
+settings.delete_account=Verwijder deze organisatie
+settings.delete_prompt=Deze actie zal de origanisatie permanent verwijderen. U kunt dit <strong>NIET</strong> terug draaien!
+settings.confirm_delete_account=Bevestig verwijdering
+settings.delete_org_title=Verwijderen organsiatie
+settings.delete_org_desc=Deze organisatie zal permanent worden verwijderd, wilt u doorgaan?
+settings.hooks_desc=Een webhook toevoegen die door <strong>alle repositories</strong> in deze organisatie getriggerd kan worden.
+
+members.public=Openbaar
+members.public_helper=maak prive
+members.private=Prive
+members.private_helper=maak openbaar
+members.owner=Eigenaar
+members.member=Lid
+members.conceal=Verbergen
+members.remove=Verwijderen
+members.leave=Verlaat
+members.invite_desc=Begin met het typen van een gebruikersnaam om een nieuw lid aan %s uit te nodigen:
+members.invite_now=Nu uitnodigen
+
+teams.join=Lid worden
+teams.leave=Vertlaat
+teams.read_access=Leestoegang
+teams.read_access_helper=Dit team is in staat om zijn repositories te bekijken en te klonen.
+teams.write_access=Schrijf toegang
+teams.write_access_helper=Dit team is in staat om zijn repositories te bekijken en push aanvragen te verwerken.
+teams.admin_access=Beheerder toegang
+teams.admin_access_helper=Dit team is in staat om push & pull aanvragen te verwerken en om nieuwe medewerkers toe te voegen.
+teams.no_desc=Dit team heeft geen omschrijving
+teams.settings=Instellingen
+teams.owners_permission_desc=Eigenaren hebben volledige toegang tot <strong>alle repositories</strong> en hebben <strong>beheerder rechten</strong> over de organisatie.
+teams.members=Team leden
+teams.update_settings=Instellingen bijwerken
+teams.delete_team=Verwijder deze team
+teams.add_team_member=Nieuwe team lid aanmaken
+teams.delete_team_title=Team verwijderen
+teams.delete_team_desc=Dit team zal worden verwijderd. De leden van dit team zullen toegang tot alle repositories van het team verliezen. Wilt u doorgaan?
+teams.delete_team_success=Gekozen team is succesvol verwijderd.
+teams.read_permission_desc=Dit team heeft <strong>Lees</strong> rechten : leden kunnen repositories lezen en klonen.
+teams.write_permission_desc=Dit team heeft <strong>Schrijf</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken.
+teams.admin_permission_desc=Dit team heeft <strong>Beheerders</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken en medewerkers toevoegen.
+teams.repositories=Teamrepositories
+teams.add_team_repository=Nieuwe teamrepositorie aanmaken
+teams.remove_repo=Verwijder
+teams.add_nonexistent_repo=De opslagplaats die u probeert toe te voegen niet bestaat, kunt u het eerst aanmaken.
+
+[admin]
+dashboard=Dashboard
+users=Gebruikers
+organizations=Orgranisaties
+repositories=Repositories
+authentication=Autenticaties
+config=Configuratie
+notices=Systeem aankondigingen
+monitor=Bijhouden
+first_page=First
+last_page=Last
+total=Total: %d
+
+dashboard.statistic=Statistieken
+dashboard.operations=Bewerkingen
+dashboard.system_status=Status Systeemmonitor
+dashboard.statistic_info=Gogs database heeft <b>%d</b> gebruikers, <b>%d</b> organisaties, <b>%d</b> openbare sleutels, <b>%d</b> repositories, <b>%d</b> volgers, <b>%d</b> sterren, <b>%d</b> acties, <b>%d</b> participanten, <b>%d</b> issues, <b>%d</b> reacties, <b>%d</b> sociale accounten, <b>%d</b> volgers, <b>%d</b> mirrors, <b>%d</b> publicaties, <b>%d</b> login bronnen, <b>%d</b> webhooks, <b>%d</b> mijlpalen, <b>%d</b> labels, <b>%d</b> hook taken, <b>%d</b> teams, <b>%d</b> bijgewerkte taken, <b>%d</b> bijlagen.
+dashboard.operation_name=Bewerking naam
+dashboard.operation_switch=Omschakelen
+dashboard.operation_run=Uitvoeren
+dashboard.clean_unbind_oauth=Clean unbound OAuths
+dashboard.clean_unbind_oauth_success=Alle OAuthes binding hebben verwijderd.
+dashboard.delete_inactivate_accounts=Verwijder alle inactieve accounts
+dashboard.delete_inactivate_accounts_success=Alle inactivering van rekeningen hebben verwijderd.
+dashboard.delete_repo_archives=Verwijderen van alle repositories archieven
+dashboard.delete_repo_archives_success=Alle repositories archieven hebben verwijderd.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Garbage collectie uitvoeren
+dashboard.git_gc_repos_success=Garbage collectie met succes uitgevoerd.
+dashboard.resync_all_sshkeys=Herschrijf '.ssh/authorized_keys' (Let op: alle sleutels die niet van Gogs zijn zullen verloren gaan!)
+dashboard.resync_all_sshkeys_success=Alle publieke sleutels zijn herschreven.
+dashboard.resync_all_update_hooks=Herschrijf alle repositorie-hooks (nodig als de configuratie bestandslocatie is gewijzigd)
+dashboard.resync_all_update_hooks_success=Alle repositorie-hooks zijn herschreven.
+
+dashboard.server_uptime=Uptime server
+dashboard.current_goroutine=Huidige Goroutines
+dashboard.current_memory_usage=Huidige geheugen gebruik
+dashboard.total_memory_allocated=Totaal toegewezen geheugen
+dashboard.memory_obtained=Geheugen gebruikt
+dashboard.pointer_lookup_times=Aanwijzer Lookup keer
+dashboard.memory_allocate_times=Geheugen toewijzen keer
+dashboard.memory_free_times=Geheugen gratis keer
+dashboard.current_heap_usage=Huidige Heap gebruik
+dashboard.heap_memory_obtained=Heap-geheugen verkregen
+dashboard.heap_memory_idle=Heap Memory inactief
+dashboard.heap_memory_in_use=Hoop geheugen In gebruik
+dashboard.heap_memory_released=Heap-geheugen vrijgegeven
+dashboard.heap_objects=Heap-objecten
+dashboard.bootstrap_stack_usage=Bootstrap Stack gebruik
+dashboard.stack_memory_obtained=Stapel geheugen verkregen
+dashboard.mspan_structures_usage=MSpan structuren gebruik
+dashboard.mspan_structures_obtained=MSpan structuren verkregen
+dashboard.mcache_structures_usage=MCache structuren gebruik
+dashboard.mcache_structures_obtained=MCache structuren verkregen
+dashboard.profiling_bucket_hash_table_obtained=Profilering emmer hashtabel verkregen
+dashboard.gc_metadata_obtained=GC Metadada verkregen
+dashboard.other_system_allocation_obtained=Andere systeem toewijzing verkregen
+dashboard.next_gc_recycle=Volgende GC recycle
+dashboard.last_gc_time=Sinds vorige GC verwerkingstijd
+dashboard.total_gc_time=Totaal GC verwerkingstijd
+dashboard.total_gc_pause=Totaal GC verwerkingstijd
+dashboard.last_gc_pause=Laatste GC verwerkingstijd
+dashboard.gc_times=GC verwerkingen
+
+users.user_manage_panel=Gebruikers beheren
+users.new_account=Nieuw account aanmaken
+users.name=Naam
+users.activated=Geactiveerd
+users.admin=Admin
+users.repos=Repos
+users.created=Aangemaakt
+users.send_register_notify=Send Registration Notification To User
+users.new_success=New account '%s' has been created successfully.
+users.edit=Bewerken
+users.auth_source=Authentication Source
+users.local=Lokaal
+users.auth_login_name=Authentication Login Name
+users.password_helper=Leave it empty to remain unchanged.
+users.update_profile_success=Profiel is succesvol bijgewerkt.
+users.edit_account=Bewerk account
+users.is_activated=Dit account is geactiveerd
+users.is_admin=Dit account heeft beheerdersrechten
+users.allow_git_hook=Deze account beschikt over machtigingen voor het maken van Git haken
+users.allow_import_local=This account has permissions to import local repositories
+users.update_profile=Account profiel bijwerken
+users.delete_account=Dit account verwijderen
+users.still_own_repo=Dit account is nog steeds eigendom van een repositorie. U moet deze repositorie eerst verwijderen of overdragen.
+users.still_has_org=Deze account nog steeds lidmaatschap van organisatie, u hebt naar links of hen eerst verwijderen.
+users.deletion_success=Account has been deleted successfully!
+
+orgs.org_manage_panel=Organisaties beheren
+orgs.name=Naam
+orgs.teams=Teams
+orgs.members=Leden
+
+repos.repo_manage_panel=Repositoriebeheerpaneel
+repos.owner=Eigenaar
+repos.name=Naam
+repos.private=Prive
+repos.watches=Volgers
+repos.stars=Sterren
+repos.issues=Kwesties
+
+auths.auth_manage_panel=Authentication Manage Panel
+auths.new=Add New Source
+auths.name=Naam
+auths.type=Type
+auths.enabled=Ingeschakeld
+auths.updated=Bijgewerkt
+auths.auth_type=Authentication Type
+auths.auth_name=Authentication Name
+auths.domain=Domein
+auths.host=Host
+auths.port=Poort
+auths.bind_dn=Binden DN
+auths.bind_password=Bind Password
+auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
+auths.user_base=User Search Base
+auths.user_dn=User DN
+auths.attribute_name=Voornaam attribuut
+auths.attribute_surname=Achternaam attribuut
+auths.attribute_mail=E-mail attribuut
+auths.filter=User Filter
+auths.admin_filter=Admin Filter
+auths.ms_ad_sa=MS Ad SA
+auths.smtp_auth=SMTP Authentication Type
+auths.smtphost=SMTP host
+auths.smtpport=SMTP poort
+auths.allowed_domains=Allowed Domains
+auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
+auths.enable_tls=Activeer TLS-encryptie
+auths.skip_tls_verify=Skip TLS Verify
+auths.pam_service_name=PAM servicenaam
+auths.enable_auto_register=Activeer automatische registratie
+auths.tips=Tips
+auths.edit=Edit Authentication Setting
+auths.activated=Deze autorisatiemethode is geactiveerd
+auths.new_success=New authentication '%s' has been added successfully.
+auths.update_success=Authentication setting has been updated successfully.
+auths.update=Update Authentication Setting
+auths.delete=Delete This Authentication
+auths.delete_auth_title=Authentication Deletion
+auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
+auths.deletion_success=Authentication has been deleted successfully!
+
+config.server_config=Serverconfiguratie
+config.app_name=Applicatienaam
+config.app_ver=Applicatieversie
+config.app_url=Applicatie-URL
+config.domain=Domein
+config.offline_mode=Offline-modus
+config.disable_router_log=Router-log uitschakelen
+config.run_user=Uitvoerende gebruiker
+config.run_mode=Uitvoer modus
+config.repo_root_path=Repositorie basis pad
+config.static_file_root_path=Statische bestanden basis pad
+config.log_file_root_path=Log bestand basis pad
+config.script_type=Script type
+config.reverse_auth_user=Omgekeerde verificatie gebruiker
+config.db_config=Databaseconfiguratie
+config.db_type=Type
+config.db_host=Host
+config.db_name=Naam
+config.db_user=Gebruiker
+config.db_ssl_mode=SSL modus
+config.db_ssl_mode_helper=(alleen voor "postgres")
+config.db_path=Pad
+config.db_path_helper=(for "sqlite3" and "tidb")
+config.service_config=Serviceconfiguratie
+config.register_email_confirm=E-mailbevestiging registreren
+config.disable_register=Registratie uitgeschakeld
+config.show_registration_button=Registeren knop weergeven
+config.require_sign_in_view=Inloggen vereist om te kunnen inzien
+config.enable_cache_avatar=Avatar Cache inschakelen
+config.mail_notify=E-mailnotificaties
+config.disable_key_size_check=Disable Minimum Key Size Check
+config.enable_captcha=Enable Captcha
+config.active_code_lives=Actieve Code leven
+config.reset_password_code_lives=Reset wachtwoord Code leven
+config.webhook_config=Webhook configuratie
+config.queue_length=Lengte van wachtrij
+config.deliver_timeout=Bezorging verlooptijd
+config.skip_tls_verify=TLS certificaat controle overslaan
+config.mailer_config=Mailerconfiguatie
+config.mailer_enabled=Ingeschakeld
+config.mailer_disable_helo=Schakel HELO uit
+config.mailer_name=Naam
+config.mailer_host=Host
+config.mailer_user=Gebruiker
+config.oauth_config=OAuth-configuratie
+config.oauth_enabled=Ingeschakeld
+config.cache_config=Cache-configuratie
+config.cache_adapter=Cache-adapter
+config.cache_interval=Cache-interval
+config.cache_conn=Cache-connectie
+config.session_config=Sessieconfiguratie
+config.session_provider=Sessieprovider
+config.provider_config=Provider config
+config.cookie_name=Cookie naam
+config.enable_set_cookie=Set Cookie inschakelen
+config.gc_interval_time=GC interval time
+config.session_life_time=Sessie duur
+config.https_only=Alleen HTTPS
+config.cookie_life_time=Cookie duur leeftijd
+config.picture_config=Foto configuratie
+config.picture_service=Foto service
+config.disable_gravatar=Gravatar uitschakelen
+config.log_config=Logconfiguratie
+config.log_mode=Log-modus
+
+monitor.cron=Cron-taken
+monitor.name=Naam
+monitor.schedule=Planning
+monitor.next=Volgende
+monitor.previous=Vorige
+monitor.execute_times=Aantal keren uitgevoerd
+monitor.process=Draaiende processen
+monitor.desc=Omschrijving
+monitor.start=Starttijd
+monitor.execute_time=Uitvoertijd
+
+notices.system_notice_list=Systeem aankondigingen
+notices.type=Type
+notices.type_1=Opslagplaats
+notices.desc=Beschrijving
+notices.op=Op.
+notices.delete_success=Systeem bericht is met succes verwijderd.
+
+[action]
+create_repo=repositorie aangemaakt in <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]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>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
+comment_issue=`reactie op issue <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
+transfer_repo=repositorie 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_2_commits=Weergave vergelijking voor deze 2 commits
+
+[tool]
+ago=geleden
+from_now=vanaf nu
+now=nu
+1s=1 seconde %s
+1m=1 minuut %s
+1h=1 uur %s
+1d=1 dag %s
+1w=1 week %s
+1mon=1 maand %s
+1y=1 jaar %s
+seconds=%d seconden %s
+minutes=%d minuten %s
+hours=%d uur %s
+days=%d dagen %s
+weeks=%d weken %s
+months=%d maanden %s
+years=%d jaren %s
+raw_seconds=seconden
+raw_minutes=minuten
+
+[dropzone]
+default_message=Drop bestanden hier of klik om te uploaden.
+invalid_input_type=U kunt geen bestanden van dit type uploaden.
+file_too_big=Bestandsgrootte ({{filesize}} MB) overschrijdt de maximale grootte ({{maxFilesize}} MB).
+remove_file=Verwijder bestand
+

+ 1009 - 992
conf/locale/locale_pl-PL.ini

@@ -1,992 +1,1009 @@
-app_desc=Bezbolesna usługa Git napisana w Go działająca na własnym serwerze
-
-home=Strona główna
-dashboard=Pulpit
-explore=Odkrywaj
-help=Pomoc
-sign_in=Zaloguj się
-sign_out=Wyloguj
-sign_up=Zarejestruj się
-register=Zarejestruj się
-website=Strona
-version=Wersja
-page=Strona
-template=Szablon
-language=Język
-create_new=Utwórz...
-user_profile_and_more=Profil użytkownika i więcej
-signed_in_as=Zalogowany jako
-
-username=Nazwa Użytkownika
-email=E-mail
-password=Hasło
-re_type=Wpisz ponownie
-captcha=Captcha
-
-repository=Repozytorium
-organization=Organizacja
-mirror=Mirror
-new_repo=Nowe repozytorium
-new_migrate=Nowa migracja
-new_fork=Forkuj repozytorium
-new_org=Nowa organizacja
-manage_org=Zarządzaj organizacjami
-admin_panel=Panel admina
-account_settings=Ustawienia konta
-settings=Ustawienia
-your_profile=Twój profil
-your_settings=Twoje ustawienia
-
-news_feed=Kanał aktualności
-pull_requests=Oczekujące zmiany
-issues=Problemy
-
-cancel=Anuluj
-
-[search]
-search=Wyszukiwanie...
-repository=Repozytorium
-user=Użytkownik
-issue=Zgłoszenie
-code=Kod
-
-[install]
-install=Instalacja
-title=Kroki instalacyjne dla pierwszego uruchomienia
-docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
-requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
-db_title=Ustawienia bazy danych
-db_type=Typ bazy danych
-host=Host
-user=Użytkownik
-password=Hasło
-db_name=Nazwa bazy danych
-db_helper=Proszę użyć silnika INNODB z kodowaniem utf8_general_ci dla MySQL.
-ssl_mode=Tryb SSL
-path=Ścieżka
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
-no_admin_and_disable_registration=Rejestracji nie można wyłączyć bez tworzenia konta admina.
-err_empty_admin_password=Hasło admina nie może być pusta.
-
-general_title=Ustawienia ogólne Gogs
-app_name=Nazwa aplikacji
-app_name_helper=Umieść tutaj wielką i głośną nazwę swojej organizacji!
-repo_path=Katalog repozytoriów
-repo_path_helper=W tym katalogu zostaną zapisane wszystkie repozytoria Git.
-run_user=Nazwa użytkownika uruchomieniowego
-run_user_helper=Użytkownik musi mieć dostęp do katalogu repozytoriów i uruchamiania Gogs.
-domain=Domena
-domain_helper=To wpłynie na URLe do klonowania poprzez SSH.
-ssh_port=Port SSH
-ssh_port_helper=Numer portu, z którego korzysta z serwer SSH; pozostaw puste, aby wyłączyć funkcję SSH.
-http_port=Port HTTP
-http_port_helper=Numer portu na którym aplikacja jest dostępna.
-app_url=Adres URL aplikacji
-app_url_helper=To wpłynie na adresy klonowania HTTP/HTTPS i w wiadomościach e-mail.
-
-optional_title=Ustawienia opcjonalne
-email_title=Ustawienia serwera e-mail
-smtp_host=Serwer SMTP
-smtp_from=Od
-smtp_from_helper=Adres w polu "Od", zgodnie z RFC 5322. Może być to po prostu adres email, bądź adres w formacie "Nazwa" <email@example.com>.
-mailer_user=Nadawca wiadomości E-mail
-mailer_password=Hasło nadawcy
-register_confirm=Włącz potwierdzenia rejestracji
-mail_notify=Włącz powiadomienia e-mail
-server_service_title=Ustawienia serwera i innych usług
-offline_mode=Włącz tryb offline
-offline_mode_popup=Wyłącz CDN, nawet w trybie produkcyjnym, wszystkie pliki zasobów będą podawane lokalnie.
-disable_gravatar=Wyłącz usługę Gravatar
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
-disable_registration=Wyłącz samodzielną rejestrację
-disable_registration_popup=Wyłącz samodzielną rejestrację użytkownika, tylko administrator będzie mógł tworzyć konta.
-enable_captcha=Włącz Captcha
-enable_captcha_popup=Require validate captcha for user self-registration.
-require_sign_in_view=Włącz wymóg zalogowania do przeglądania stron
-require_sign_in_view_popup=Tylko zalogowani użytkownicy będą mogli przeglądać strony, goście zobaczą tylko stronę logowania.
-admin_setting_desc=Nie musisz tworzyć konta administratora teraz, użytkownik z ID = 1 zyska dostęp administratora automatycznie.
-admin_title=Ustawienia konta administratora
-admin_name=Nazwa Użytkownika
-admin_password=Hasło
-confirm_password=Potwierdź hasło
-admin_email=E-mail
-install_gogs=Zainstaluj Gogs
-test_git_failed=Nie udało się przetestować polecenia "git": %v
-sqlite3_not_available=Twoje wydanie nie obsługuje SQLite3, proszę pobrać oficjalne wydanie z %s, a NIE wersję z gobuild.
-invalid_db_setting=Ustawienia bazy danych nie są poprawne: %v
-invalid_repo_path=Ścieżka repozytoriów nie jest poprawna: %v
-run_user_not_match=Użytkownik aplikacji nie jest aktualnym użytkownikiem: %s -> %s
-save_config_failed=Nie udało się zapisać konfiguracji: %v
-invalid_admin_setting=Nieprawidłowe ustawienia konta admina: %v
-install_success=Cześć! Cieszymy się, że wybierałeś Gogs, baw się dobrze.
-
-[home]
-uname_holder=Nazwa użytkownika lub e-mail
-password_holder=Hasło
-switch_dashboard_context=Przełącz kontekst strony głównej
-my_repos=Moje repozytoria
-collaborative_repos=Wspólne repozytoria
-my_orgs=Moje organizacje
-my_mirrors=Moje mirrory
-view_home=Zobacz %s
-
-issues.in_your_repos=W twoich repozytoriach
-
-[explore]
-repos=Repozytoria
-
-[auth]
-create_new_account=Załóż nowe konto
-register_hepler_msg=Masz już konto? Zaloguj się teraz!
-social_register_hepler_msg=Masz już konto? Powiąż je teraz!
-disable_register_prompt=Przepraszamy rejestracja została wyłączona. Prosimy o kontakt z administratorem serwisu.
-disable_register_mail=Przepraszamy, potwierdzenia rejestracji zostały wyłączone przez administratora.
-remember_me=Zapamiętaj mnie
-forgot_password=Zapomniałem hasła
-forget_password=Zapomniałeś hasła?
-sign_up_now=Potrzebujesz konta? Zarejestruj się teraz.
-confirmation_mail_sent_prompt=Nowa wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>, proszę sprawdzić swoją skrzynkę odbiorczą w ciągu najbliższych godzin %d aby dokończyć proces rejestracji.
-sign_in_to_account=Zaloguj się na swoje konto
-active_your_account=Aktywuj swoje konto
-resent_limit_prompt=Niestety, zbyt często wysyłasz e-mail aktywacyjny. Proszę odczekać 3 minuty.
-has_unconfirmed_mail=Witaj, %s, masz niepotwierdzony adres e-mail (<b>%s</b>). Jeśli nie otrzymałeś wiadomości e-mail z potwierdzeniem lub potrzebujesz wysłać nową, kliknij na poniższy przycisk.
-resend_mail=Kliknij tutaj, aby wysłać e-mail aktywacyjny
-email_not_associate=Ten adres e-mail nie jest skojarzony z żadnym kontem.
-send_reset_mail=Kliknij tutaj, aby (ponownie) wysłać e-mail z instrukcjami resetowania hasła
-reset_password=Resetowanie hasła
-invalid_code=Niestety, twój kod potwierdzający wygasł lub jest nieprawidłowy.
-reset_password_helper=Kliknij tutaj, aby zresetować hasło
-password_too_short=Długość hasła nie może być mniejsza niż 6 znaków.
-
-[mail]
-activate_account=Prosimy aktywować swoje konto
-activate_email=Sprawdź Twój adres e-mail
-reset_password=Zmień swoje hasło
-register_success=Zostałeś zarejestrowany, witamy
-
-[modal]
-yes=Tak
-no=Nie
-modify=Zmień
-
-[form]
-UserName=Nazwa Użytkownika
-RepoName=Nazwa repozytorium
-Email=Adres e-mail
-Password=Hasło
-Retype=Wpisz ponownie hasło
-SSHTitle=Nazwa klucza SSH
-HttpsUrl=HTTPS URL
-PayloadUrl=URL do wywołania
-TeamName=Nazwa zespołu
-AuthName=Nazwa autoryzacji
-AdminEmail=E-mail administratora
-
-require_error=` nie może być puste.`
-alpha_dash_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników oraz podkreśleń.`
-alpha_dash_dot_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników, podkreśleń oraz kropek.`
-size_error="musi być wielkości %s."
-min_size_error=` musi zawierać co najwyżej %s znaków.`
-max_size_error=` musi zawierać co najwyżej %s znaków.`
-email_error=` nie jest poprawnym adresem e-mail.`
-url_error=` nie jest poprawnym adresem URL.`
-unknown_error=Nieznany błąd:
-captcha_incorrect=Kod captcha nie zgadza się.
-password_not_match=Hasło i potwierdzenie nie zgadzają się.
-
-username_been_taken=Nazwa użytkownika jest już zajęta.
-repo_name_been_taken=Nazwa repozytorium jest już zajęta.
-org_name_been_taken=Nazwa organizacji jest już zajęta.
-team_name_been_taken=Nazwa zespołu jest już zajęta.
-email_been_used=Adres e-mail jest już zarejestrowany.
-illegal_team_name=Nazwa zespołu zawiera niedozwolone znaki.
-username_password_incorrect=Nazwa użytkownika lub hasło nie jest prawidłowe.
-enterred_invalid_repo_name=Upewnij się, że wprowadzona nazwa repozytorium jest poprawna.
-enterred_invalid_owner_name=Upewnij się, że nazwa właściciela repozytorium jest poprawna.
-enterred_invalid_password=Proszę upewnij się, że wprowadzono hasło jest poprawne.
-user_not_exist=Podany użytkownik nie istnieje.
-last_org_owner=Usuwany użytkownik jest ostatnim członkiem ekipy właścicieli. Musi być inny właściciel.
-
-invalid_ssh_key=Niestety, nie jesteśmy stanie zweryfikować twojego klucza SSH: %s
-unable_verify_ssh_key=Gogs nie może zweryfikować twojego klucza SSH, ale zakładamy, że jest poprawny, proszę sprawdź to samodzielnie.
-auth_failed=Uwierzytelnianie nie powiodło się: %v
-
-still_own_repo=Twoje konto jest dalej właścicielem repozytorium, musisz je usunąć lub przekazać.
-still_has_org=Twoje konto dalej posiada członkostwo w organizacji, musisz ją opuścić bądź usunąć.
-org_still_own_repo=Ta organizacja dalej jest właścicielem repozytorium, musisz je usunąć bądź przekazać.
-
-still_own_user=To uwierzytelnienie dalej jest używane przez kilku użytkowników, musisz je przenieść i usunąć ponownie.
-
-target_branch_not_exist=Podana gałąź nie istnieje
-
-[user]
-change_avatar=Zmień swój avatar na gravatar.com
-change_custom_avatar=Zmień awatar w ustawieniach
-join_on=Dołączył
-repositories=Repozytoria
-activity=Publiczna aktywność
-followers=Obserwujący
-starred=Polubionych
-following=Obserwowani
-
-form.name_reserved=Nazwa użytkownika "%s" jest zarezerwowana.
-form.name_pattern_not_allowed=Wzorzec nazwy użytkownika "%s" jest niedozwolony.
-
-[settings]
-profile=Profil
-password=Hasło
-ssh_keys=Klucze SSH
-social=Konta społecznościowe
-applications=Aplikacje
-orgs=Organizacje
-delete=Usuń konto
-uid=UID
-
-public_profile=Profil publiczny
-profile_desc=Twój adres e-mail jest publiczny i będzie używany dla wszystkich powiadomień związanych z kontem i dla każdej operacji wykonanej przez tę stronę.
-full_name=Imię i Nazwisko
-website=Strona
-location=Lolalizacja
-update_profile=Zaktualizuj profil
-update_profile_success=Twój profil został pomyślnie zaktualizowany.
-change_username=Zmieniono nazwę użytkownika
-change_username_prompt=This change will affect the way how links relate to your account.
-continue=Konynuuj
-cancel=Anuluj
-
-enable_custom_avatar=Włącz niestandardowe awatary
-enable_custom_avatar_helper=Włącz to by wyłączyć grawatary
-choose_new_avatar=Wybierz nowy avatar
-update_avatar=Zaktualizuj ustawienia awatara
-uploaded_avatar_not_a_image=Załadowany plik nie jest obrazem.
-no_custom_avatar_available=Własny avatar niedostępny, nie można go włączyć.
-update_avatar_success=Ustawienia awatarów zostały pomyślnie zaktualizowane.
-
-change_password=Zmień hasło
-old_password=Aktualne hasło
-new_password=Nowe hasło
-retype_new_password=Powtórz nowe hasło
-password_incorrect=Bieżące hasło nie jest prawidłowe.
-change_password_success=Hasło zostało zmienione pomyślnie. Możesz teraz zalogować się za pomocą nowego hasła.
-
-emails=Adresy e-mail
-manage_emails=Zarządzaj adresami e-mail
-email_desc=Twój podstawowy adres e-mail będzie używany dla powiadomień i innych działań.
-primary=Podstawowy
-primary_email=Ustaw jako podstawowy
-delete_email=Usuń
-email_deletion=Usunięcie wiadomości e-mail
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail został usunięty pomyślnie!
-add_new_email=Dodaj nowy e-mail
-add_email=Dodaj e-mail
-add_email_confirmation_sent=Nowa wiadomość e-mail z potwierdzeniem została wysłana do '%s', proszę sprawdzić swoją skrzynkę odbiorczą w ciągu %d godzin, aby dokończyć proces potwierdzania.
-add_email_success=Twój nowy e-mail został dodany pomyślnie.
-
-manage_ssh_keys=Zarządzaj kluczami SSH
-add_key=Dodaj klucz
-ssh_desc=To jest lista kluczy SSH powiązanych z Twoim kontem. Usuń klucze, które nie rozpoznajesz.
-ssh_helper=<strong>Potrzebujesz pomocy?</strong> Sprawdź nasz przewodnik <a href="%s"> generowania kluczy SSH</a> lub rozwiązywanie <a href="%s">typowych problemów z SSH</a>.
-add_new_key=Dodaj klucz SSH
-ssh_key_been_used=Public key content has been used.
-ssh_key_name_used=Klucz publiczny o tej samej nazwie już istnieje.
-key_name=Nazwa klucza
-key_content=Treść
-add_key_success=Pomyślnie dodano nowy klucz SSH '%s'!
-delete_key=Usuń
-ssh_key_deletion=Usunięcie klucza SSH
-ssh_key_deletion_desc=Usunięcie tego klucza SSH będzie skutkować usunięciem wszystkich powiązanych dostępów do twojego konta. Czy chcesz kontynuować?
-ssh_key_deletion_success=Klucz SSH został usunięty pomyślnie!
-add_on=Dodano
-last_used=Ostatnio użyto
-no_activity=Brak aktywności
-key_state_desc=This key is used in last 7 days
-token_state_desc=This token is used in last 7 days
-
-manage_social=Zarządzaj powiązanymi kontami społecznościowymi
-social_desc=To jest lista powiązanych kont społecznościowych. Usuń powiązania, których nie rozpoznajesz.
-unbind=Usuń powiązanie
-unbind_success=Konto społecznościowe zostało odpięte.
-
-manage_access_token=Zarządzaj osobistymi tokenami dostępu
-generate_new_token=Wygeneruj nowy token
-tokens_desc=Tokens you have generated that can be used to access the Gogs APIs.
-new_token_desc=Jak na razie, każdy token zapewnia pełen dostęp do Twojego konta.
-token_name=Nazwa tokena
-generate_token=Wygeneruj token
-generate_token_succees=Nowy token dostępu został wygenerowany pomyślnie! Upewnij się, że teraz go skopiowałeś. Nie będziesz mógł go zobaczyć ponownie!
-delete_token=Usuń
-access_token_deletion=Usuwanie osobistego tokena dostępu
-access_token_deletion_desc=Usunięcie tego tokena osobistego dostęp spowoduje usunięcie wszystkich powiązanych dostępów do aplikacji. Czy chcesz kontynuować?
-delete_token_success=Osobisty token dostępu został usunięty pomyślnie! Nie zapomnij również zaktualizować swoich aplikacji.
-
-delete_account=Usuń konto
-delete_prompt=Ta operacja trwale usuwa konto, i <strong>NIE MOŻE</strong> zostać cofnięta!
-confirm_delete_account=Potwierdź usunięcie
-delete_account_title=Usunięcie konta
-delete_account_desc=To konto będzie usunięte na zawsze, chcesz kontynuować?
-
-[repo]
-owner=Właściciel
-repo_name=Nazwa repozytorium
-repo_name_helper=Dobre nazwy repozytorium są krótkie, wpadające w pamięć i <strong>unikalne</strong>.
-visibility=Widoczność
-visiblity_helper=To repozytorium jest <span class="ui red text">prywatne</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Change of this value will affect all forks)
-fork_repo=Sforkowane
-fork_from=Forkuj z
-fork_visiblity_helper=Fork nie może zmieniać swojej widoczności
-repo_desc=Opis
-repo_lang=Język
-repo_lang_helper=Wybierz pliki .gitignore
-license=Licencja
-license_helper=Wybierz plik licencji
-readme=Readme
-readme_helper=Wybierz szablon readme
-auto_init=Initialize this repository with selected files and template
-create_repo=Utwórz repozytorium
-default_branch=Domyślna gałąź
-mirror_interval=Odświeżanie mirrorów (godziny)
-
-form.name_reserved=Nazwa repozytorium "%s" jest zarezerwowana.
-form.name_pattern_not_allowed=Wzorzec nazwy repozytorium "%s" jest niedozwolony.
-
-need_auth=Wymaga autoryzacji
-migrate_type=Typ migracji
-migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
-migrate_repo=Przenieś repozytorium
-migrate.clone_address=Sklonuj adres
-migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
-migrate.invalid_local_path=Ścieżka jest niepoprawna. Nie istnieje lub nie jest katalogiem.
-
-forked_from=sklonowany z
-fork_from_self=You cannot fork repository you already owned!
-copy_link=Kopiuj
-copy_link_success=Skopiowane!
-copy_link_error=Naciśnij klawisze ⌘-C i Ctrl-C, aby skopiować
-click_to_copy=Kopiuj do schowka
-copied=Skopiowano
-clone_helper=Potrzebujesz pomocy z klonowaniem? Odwiedź <a target="_blank" href="%s">Pomoc</a>!
-unwatch=Przestań obserwować
-watch=Obserwuj
-unstar=Usuń gwiazdkę
-star=Polub
-fork=Fork
-
-no_desc=Brak opisu
-quick_guide=Skrócona instrukcja
-clone_this_repo=Klonuj repozytorium
-create_new_repo_command=Utwórz nowe repozytorium z wiersza poleceń
-push_exist_repo=Wyślij istniejące repozytorium z wiersza poleceń
-repo_is_empty=To repozytorium jest puste, proszę wrócić później!
-
-
-branch=Gałąź
-tree=Drzewo
-branch_and_tags=Gałęzie i tagi
-branches=Gałęzie
-tags=Tagi
-issues=Problemy
-pulls=Pull Requests
-labels=Etykiety
-milestones=Kamienie milowe
-commits=Commity
-releases=Wydania
-file_raw=Czysty
-file_history=Historia
-file_view_raw=Zobacz czysty
-file_permalink=Bezpośredni odnośnik
-
-commits.commits=Commity
-commits.search=Przeszukaj commity
-commits.find=Szukaj
-commits.author=Autor
-commits.message=Wiadomość
-commits.date=Data
-commits.older=Starsze
-commits.newer=Nowsze
-
-issues.new=Nowe zgłoszenie
-issues.new.labels=Etykiety
-issues.new.no_label=Brak etykiety
-issues.new.clear_labels=Wyczyść etykiety
-issues.new.milestone=Kamień milowy
-issues.new.no_milestone=No Milestone
-issues.new.clear_milestone=Clear milestone
-issues.new.open_milestone=Otwórz "kamienie milowe"
-issues.new.closed_milestone=Zamknięte "kamienie milowe"
-issues.new.assignee=Assignee
-issues.new.clear_assignee=Clear assignee
-issues.new.no_assignee=No assignee
-issues.create=Create Issue
-issues.new_label=Nowa etykieta
-issues.new_label_placeholder=Label name...
-issues.create_label=Create Label
-issues.open_tab=%d Open
-issues.close_tab=%d Closed
-issues.filter_label=Etykieta
-issues.filter_label_no_select=No selected label
-issues.filter_milestone=Kamień milowy
-issues.filter_milestone_no_select=No selected milestone
-issues.filter_assignee=Przypisany
-issues.filter_assginee_no_select=No selected Assignee
-issues.filter_type=Typ
-issues.filter_type.all_issues=All issues
-issues.filter_type.assigned_to_you=Assigned to you
-issues.filter_type.created_by_you=Created by you
-issues.filter_type.mentioning_you=Mentioning you
-issues.filter_sort=Sort
-issues.filter_sort.latest=Najnowszy
-issues.filter_sort.oldest=Oldest
-issues.filter_sort.recentupdate=Recently updated
-issues.filter_sort.leastupdate=Least recently updated
-issues.filter_sort.mostcomment=Most commented
-issues.filter_sort.leastcomment=Least commented
-issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=opened %[1]s by %[2]s
-issues.previous=Previous
-issues.next=Następny
-issues.open_title=otwarty
-issues.closed_title=zamknięty
-issues.num_comments=%d komentarzy
-issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=There is no content yet.
-issues.close_issue=Close
-issues.close_comment_issue=Close and comment
-issues.reopen_issue=Reopen
-issues.reopen_comment_issue=Otwórz ponownie i dodaj komentarz
-issues.create_comment=Komentuj
-issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Autor
-issues.admin=Admin
-issues.owner=Właściciel
-issues.sign_up_for_free=Zarejestruj się za darmo
-issues.sign_in_require_desc=do przyłączenia się do tej rozmowy. Masz już konto? <a href="%s"> Zaloguj się by komentować</a>
-issues.edit=Edytuj
-issues.cancel=Anuluj
-issues.save=Zapisz
-issues.label_title=Nazwa etykiety
-issues.label_color=Kolor etykiety
-issues.label_count=%d etykiety
-issues.label_open_issues=%d otwartych zgłoszeń
-issues.label_edit=Edytuj
-issues.label_delete=Usuń
-issues.label_modify=Modyfikacja etykiety
-issues.label_deletion=Usunięcie etykiety
-issues.label_deletion_desc=Delete this label will remove its information in all related issues. Do you want to continue?
-issues.label_deletion_success=Etykieta została usunięta pomyślnie!
-
-pulls.compare_changes=Compare Changes
-pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
-pulls.compare_base=base
-pulls.compare_compare=compare
-pulls.filter_branch=Filter branch
-pulls.no_results=Nie znaleziono wyników.
-pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
-pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Utwórz Pull Request
-pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
-pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversation
-pulls.tab_commits=Commits
-pulls.tab_files=Files changed
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Merge Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=Nowy kamień milowy
-milestones.open_tab=%d Open
-milestones.close_tab=%d Closed
-milestones.closed=Closed %s
-milestones.no_due_date=Nie ustalono terminu
-milestones.open=Otwórz
-milestones.close=Zamknij
-milestones.new_subheader=Create milestones to organize your issues.
-milestones.create=Utwórz punkt kontrolny
-milestones.title=Tytuł
-milestones.desc=Opis
-milestones.due_date=Termin realizacji (opcjonalnie)
-milestones.clear=Wyczyść
-milestones.invalid_due_date_format=Format daty realizacji jest nieprawidłowy, musi być "rok mm-dd".
-milestones.create_success=Kamień milowy "%s" został utworzony pomyślnie!
-milestones.edit=Edytuj kamień milowy
-milestones.edit_subheader=Use better description for milestones so people won't be confused.
-milestones.cancel=Anuluj
-milestones.modify=Modyfikuj kamień milowy
-milestones.edit_success=Changes of milestone '%s' has been saved successfully!
-milestones.deletion=Milestone Deletion
-milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
-milestones.deletion_success=Kamień milowy został usunięty pomyślnie!
-
-settings=Ustawienia
-settings.options=Opcje
-settings.collaboration=Współpraca
-settings.hooks=Webhooks
-settings.githooks=Skrypty Git
-settings.basic_settings=Ustawienia podstawowe
-settings.danger_zone=Strefa niebezpieczeństwa
-settings.site=Oficjalna Strona
-settings.update_settings=Aktualizuj ustawienia
-settings.change_reponame_prompt=Zmiana nazwy repozytorium wpłynie na linki do niego.
-settings.transfer=Przeniesienie własności
-settings.transfer_desc=Przenieś to repozytorium do innego użytkownika lub organizacji gdzie masz uprawnienia administratora.
-settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
-settings.delete=Usuń to repozytorium
-settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=Opcje repozytorium zostały pomyślnie zaktualizowane.
-settings.transfer_owner=Nowy właściciel
-settings.make_transfer=Przenieś
-settings.transfer_succeed=Własność repozytorium została przeniesiona pomyślnie.
-settings.confirm_delete=Potwierdź usunięcie
-settings.add_collaborator=Dodaj nowego współpracownika
-settings.add_collaborator_success=Został dodany nowy współpracownik.
-settings.remove_collaborator_success=Współpracownik został usunięty.
-settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
-settings.add_webhook=Dodaj Webhooka
-settings.hooks_desc=Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
-settings.webhook_deletion=Usuń Webhook
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Żądanie
-settings.webhook.response=Response
-settings.webhook.headers=Headers
-settings.webhook.payload=Payload
-settings.webhook.body=Body
-settings.githooks_desc=Doczepki Git są napędzane przez samego Git, można edytować pliki obsługiwanych doczepek z poniższej listy, aby wykonywać niestandardowe operacje.
-settings.githook_edit_desc=Jeżeli doczepka jest nieaktywna, prezentowana będzie przykładowa treść. Pozostawienie pustej wartości wyłączy tą doczepkę.
-settings.githook_name=Nazwa skryptu
-settings.githook_content=Treść skryptu
-settings.update_githook=Zaktualizuj skrypt
-settings.add_webhook_desc=Wyślemy żądanie <code>POST</code> pod poniższy adres ze szczegółami zdarzeń. Możesz również ustalić format danych zapytania (JSON, <code>x-www-form-urlencoded</code>, <em>itp</em>). Więcej informacji można znaleźć w <a target="_blank" href="%s">przewodniku skryptów internetowych</a>.
-settings.payload_url=URL do wywołania
-settings.content_type=Typ zawartości
-settings.secret=Sekret
-settings.slack_username=Username
-settings.slack_icon_url=Icon URL
-settings.slack_color=Kolor
-settings.event_desc=Jakie zdarzenia mają wywoływać ten skrypt internetowy?
-settings.event_push_only=Tylko zdarzenia <code>push</code>.
-settings.event_send_everything=Potrzebuję <strong>wszystkiego</strong>.
-settings.event_choose=Pozwól mi wybrać, czego potrzebuję.
-settings.event_create=Utwórz
-settings.event_create_desc=Branch, or tag created
-settings.event_push=Push
-settings.event_push_desc=Git push to a repository
-settings.active=Aktywny
-settings.active_helper=Dostarczymy szczegóły zdarzenia, gdy ten skrypt zostanie wywołany.
-settings.add_hook_success=Nowy skrypt został dodany.
-settings.update_webhook=Zaktualizuj skrypt internetowy
-settings.update_hook_success=Skrypt internetowy został zaktualizowany.
-settings.delete_webhook=Usuń skrypt internetowy
-settings.recent_deliveries=Ostatnie wywołania
-settings.hook_type=Typ skryptu
-settings.add_slack_hook_desc=Dodać integrację ze <a href="%s">Slackiem</a> do twojego repozytorium.
-settings.slack_token=Token
-settings.slack_domain=Domena
-settings.slack_channel=Kanał
-settings.deploy_keys=Klucze wdrożeniowe
-settings.add_deploy_key=Add Deploy Key
-settings.no_deploy_keys=You haven't added any deploy key.
-settings.title=Tytuł
-settings.deploy_key_content=Treść
-settings.key_been_used=Deploy key content has been used.
-settings.key_name_used=Deploy key with same name has already existed.
-settings.add_key_success=New deploy key '%s' has been added successfully!
-settings.deploy_key_deletion=Delete Deploy Key
-settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
-settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
-
-diff.browse_source=Przeglądaj źródła
-diff.parent=rodzic
-diff.commit=commit
-diff.data_not_available=Informacje nt. zmiany nie są dostępne.
-diff.show_diff_stats=Pokaż statystyki zmian
-diff.stats_desc=<strong>%d zmienionych plików</strong> z <strong>%d dodań</strong> i <strong>%d usunięć</strong>
-diff.bin=BIN
-diff.view_file=Wyświetl plik
-
-release.releases=Wydania
-release.new_release=Nowe wydanie
-release.draft=Szkic
-release.prerelease=Wersja wstępna
-release.stable=Stabilny
-release.edit=edytuj
-release.ahead=<strong>%d</strong> commitów w %s od tego wydania
-release.source_code=Kod źródłowy
-release.tag_name=Nazwa tagu
-release.target=Cel
-release.tag_helper=Wybierz istniejący tag, bądź utwórz nowy podczas publikacji.
-release.release_title=Nazwa wydania
-release.content_with_md=Treść sformatowana za pomocą <a href="%s">Markdown</a>
-release.write=Napisz
-release.preview=Pogdląd
-release.content_placeholder=Napisz jakąś treść
-release.loading=Ładowanie...
-release.prerelease_desc=To jest wersja wstępna
-release.prerelease_helper=Chcemy zwrócić uwagę, że ta wersja jest oznaczona jako eksperymentalna.
-release.publish=Publikuj wersję
-release.save_draft=Zapisz szkic
-release.edit_release=Edytuj wydanie
-release.tag_name_already_exist=Wersja o tej nazwie tagu już istnieje.
-
-[org]
-org_name_holder=Nazwa organizacji
-org_name_helper=Świetne nazwy organizacji są krótkie i łatwe do zapamiętania.
-create_org=Utwórz organizację
-repo_updated=Zaktualizowano
-people=Ludzie
-invite_someone=Zaproś kogoś
-teams=Zespoły
-lower_members=członkowie
-lower_repositories=repozytoria
-create_new_team=Utwórz nowy zespół
-org_desc=Opis
-team_name=Nazwa zespołu
-team_desc=Opis
-team_name_helper=Będziesz używał tej nazwy do wywoływania tego zespołu w dyskusjach.
-team_desc_helper=Czym zajmuje się ten zespół?
-team_permission_desc=Jaki poziom uprawnień powinien mieć ten zespół?
-
-form.name_reserved=Nazwa organizacji "%s" jest zarezerwowana.
-form.name_pattern_not_allowed=Wzorzec nazwy organizacji "%s" jest niedozwolony.
-
-settings=Ustawienia
-settings.options=Opcje
-settings.full_name=Imię i Nazwisko
-settings.website=Strona
-settings.location=Lolalizacja
-settings.update_settings=Aktualizuj ustawienia
-settings.update_setting_success=Ustawienia organizacji zostały pomyślnie zaktualizowane.
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=Usuń Organizację
-settings.delete_account=Usuń tą organizację
-settings.delete_prompt=Organizacja zostanie trwale usunięta, a to <strong>NIE MOŻE</strong> być cofnięte!
-settings.confirm_delete_account=Potwierdź usunięcie
-settings.delete_org_title=Usunięcie organizacji
-settings.delete_org_desc=Ta organizacja zostanie trwale usunięta, czy chcesz kontynuować?
-settings.hooks_desc=Add webhooks that will be triggered for <strong>all repositories</strong> under this organization.
-
-members.public=Publiczne
-members.public_helper=sprywatyzuj
-members.private=Prywatne
-members.private_helper=upublicznij
-members.owner=Właściciel
-members.member=Członek
-members.conceal=Ukryj
-members.remove=Usuń
-members.leave=Opuść
-members.invite_desc=Zacznij wpisywać nazwę użytkownika by zaprosić nowego członka do %s:
-members.invite_now=Zaproś teraz
-
-teams.join=Dołącz
-teams.leave=Opuść
-teams.read_access=Dostęp do odczytu
-teams.read_access_helper=Ten zespół będzie mógł wyświetlać i klonować swoje repozytoria.
-teams.write_access=Dostęp do zapisu
-teams.write_access_helper=Ten zespół będzie mógł odczytywać i wysyłać do swoich repozytoriów.
-teams.admin_access=Uprawnienia admina
-teams.admin_access_helper=Ten zespół będzie mógł wysyłać i pobierać swoje repozytoria, oraz dodawać do nich współpracowników.
-teams.no_desc=Ten zespół nie ma opisu
-teams.settings=Ustawienia
-teams.owners_permission_desc=Właściciele mają pełny dostęp do <strong>wszystkich repozytoriów</strong> i mają <strong>prawa administratora</strong> w organizacji.
-teams.members=Członkowie zespołu
-teams.update_settings=Aktualizuj ustawienia
-teams.delete_team=Usuń ten zespół
-teams.add_team_member=Dodaj członka zespołu
-teams.delete_team_title=Usuwanie zespołu
-teams.delete_team_desc=Ten zespół zostanie usunięty, czy na pewno chcesz kontynuować? Jego członkowie mogą utracić dostęp do części repozytoriów.
-teams.delete_team_success=Zespół został usunięty pomyślnie.
-teams.read_permission_desc=Ten zespół daje dostęp do <strong>odczytu</strong>: członkowie mogą wyświetlać i klonować repozytoria zespołu.
-teams.write_permission_desc=Ten zespół daje dostęp do <strong>zapisu</strong>: członkowie mogą wyświetlać i wysyłać do repozytoriów zespołu.
-teams.admin_permission_desc=Ten zespół daje dostęp <strong>pełny</strong>: członkowie mogą wyświetlać, wysyłać i dodawać współpracowników do repozytoriów zespołu.
-teams.repositories=Repozytoria zespołu
-teams.add_team_repository=Dodaj repozytorium zespołu
-teams.remove_repo=Usuń
-teams.add_nonexistent_repo=Repozytorium, które próbujesz dodać, nie istnieje, wpierw je utwórz.
-
-[admin]
-dashboard=Pulpit
-users=Użytkownicy
-organizations=Organizacje
-repositories=Repozytoria
-authentication=Uwierzytelnienia
-config=Konfiguracja
-notices=Powiadomienia systemowe
-monitor=Monitorowanie
-first_page=Pierwsza
-last_page=Ostatnia
-total=Ogółem: %d
-
-dashboard.statistic=Statystyki
-dashboard.operations=Operacje
-dashboard.system_status=Stan monitora systemu
-dashboard.statistic_info=Baza danych Gogs zawiera <b>%d</b> użytkowników, <b>%d</b> organizacji, <b>%d</b> kluczy publicznych, <b>%d</b> repozytoriów, <b>%d</b> obserwujących, <b>%d</b> polubionych, <b>%d</b> akcji, <b>%d</b> tokenów, <b>%d</b> problemów, <b>%d</b> komenatrzy, <b>%d</b> kont społecznościowych, <b>%d</b> obserwacji, <b>%d</b> mirrorów, <b>%d</b> wydań, <b>%d</b> login sources, <b>%d</b> webhooków, <b>%d</b> kamieni milowych, <b>%d</b> labels, <b>%d</b> zadań hooków, <b>%d</b> zespołów, <b>%d</b> zadań aktualizacji, <b>%d</b> załączników.
-dashboard.operation_name=Nazwa operacji
-dashboard.operation_switch=Przełącz
-dashboard.operation_run=Uruchom
-dashboard.clean_unbind_oauth=Usuń niepowiązane wpisy OAuth
-dashboard.clean_unbind_oauth_success=Wszystkie niepowiązane wpisy OAuth zostały pomyślnie usunięte.
-dashboard.delete_inactivate_accounts=Usuń wszystkie nieaktywne konta
-dashboard.delete_inactivate_accounts_success=Wszystkie nieaktywne konta zostały usunięte pomyślnie.
-dashboard.delete_repo_archives=Usuń wszystkie archiwa repozytoriów
-dashboard.delete_repo_archives_success=Pomyślnie usunięto wszystkie archiwa repozytoriów.
-dashboard.git_gc_repos=Usuń śmieci z repozytoriów
-dashboard.git_gc_repos_success=Wszystkie repozytoria zakończyły odśmiecanie pomyślnie.
-dashboard.resync_all_sshkeys=Przeładuj klucze publiczne w pliku '.ssh/authorized_keys' (uwaga: klucze poza Gogs zostaną usunięte)
-dashboard.resync_all_sshkeys_success=Przeładowanie kluczy publicznych zakończyło się sukcesem.
-dashboard.resync_all_update_hooks=Rewrite all update hook of repositories (needed when custom config path is changed)
-dashboard.resync_all_update_hooks_success=All repositories' update hook have been rewritten successfully.
-
-dashboard.server_uptime=Uptime serwera
-dashboard.current_goroutine=Bieżące Goroutines
-dashboard.current_memory_usage=Bieżące użycie pamięci
-dashboard.total_memory_allocated=Całkowita przydzielona pamięć
-dashboard.memory_obtained=Memory Obtained
-dashboard.pointer_lookup_times=Pointer Lookup Times
-dashboard.memory_allocate_times=Memory Allocate Times
-dashboard.memory_free_times=Memory Free Times
-dashboard.current_heap_usage=Bieżące użycie stosu
-dashboard.heap_memory_obtained=Heap Memory Obtained
-dashboard.heap_memory_idle=Heap Memory Idle
-dashboard.heap_memory_in_use=Użycie pamięci stosu
-dashboard.heap_memory_released=Heap Memory Released
-dashboard.heap_objects=Ilość obiektów na stercie
-dashboard.bootstrap_stack_usage=Bootstrap Stack Usage
-dashboard.stack_memory_obtained=Stack Memory Obtained
-dashboard.mspan_structures_usage=MSpan Structures Usage
-dashboard.mspan_structures_obtained=MSpan Structures Obtained
-dashboard.mcache_structures_usage=MCache Structures Usage
-dashboard.mcache_structures_obtained=MCache Structures Obtained
-dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
-dashboard.gc_metadata_obtained=Ilość uzyskanych danych przez GC
-dashboard.other_system_allocation_obtained=Other System Allocation Obtained
-dashboard.next_gc_recycle=Następne wywołanie GC
-dashboard.last_gc_time=Czas od ostatniego wywołania GC
-dashboard.total_gc_time=Sumaryczny czas wstrzymania przez GC
-dashboard.total_gc_pause=Sumaryczny czas wstrzymania przez GC
-dashboard.last_gc_pause=Ostatnie wstrzymanie przez GC
-dashboard.gc_times=Ilość wywołań GC
-
-users.user_manage_panel=Panel zarządzania kontem użytkownika
-users.new_account=Załóż nowe konto
-users.name=Nazwa
-users.activated=Aktywowany
-users.admin=Admin
-users.repos=Repozytoria
-users.created=Utworzony
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=Edytuj
-users.auth_source=Authentication Source
-users.local=Lokalne
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=Profil konta został pomyślnie zaktualizowany.
-users.edit_account=Edytuj konto
-users.is_activated=To konto jest aktywne
-users.is_admin=To konto ma uprawnienia administratora
-users.allow_git_hook=To konto posiada uprawnienia do tworzenia skryptów Git
-users.update_profile=Zaktualizuj profil konta
-users.delete_account=Usuń to konto
-users.still_own_repo=Twoje konto jest dalej właścicielem repozytorium, musisz je usunąć lub przekazać.
-users.still_has_org=Twoje konto dalej posiada członkostwo w organizacji, musisz ją opuścić bądź usunąć.
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=Panel zarządzania organizacją
-orgs.name=Nazwa
-orgs.teams=Zespoły
-orgs.members=Członkowie
-
-repos.repo_manage_panel=Panel zarządzania repozytorium
-repos.owner=Właściciel
-repos.name=Nazwa
-repos.private=Prywatne
-repos.watches=Obserwujących
-repos.stars=Polubienia
-repos.issues=Problemy
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Dodać nowe Źródło
-auths.name=Nazwa
-auths.type=Typ
-auths.enabled=Włączono
-auths.updated=Zaktualizowano
-auths.auth_type=Typ uwierzytelniania
-auths.auth_name=Nazwa uwierzytelniania
-auths.domain=Domena
-auths.host=Host
-auths.port=Port
-auths.bind_dn=Bind DN
-auths.bind_password=Bind Password
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=Atrybut imienia
-auths.attribute_surname=Atrybut nazwiska
-auths.attribute_mail=Atrybut email
-auths.filter=User Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=Serwer SMTP
-auths.smtpport=Port SMTP
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=Włącz szyfrowanie TLS
-auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
-auths.pam_service_name=Nazwa usługi PAM
-auths.enable_auto_register=Włącz automatyczną rejestrację
-auths.tips=Wskazówki
-auths.edit=Edit Authentication Setting
-auths.activated=To uwierzytelnienie zostało aktywowane
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Ustawienia uwierzytelnienia zostały zaktualizowane pomyślnie.
-auths.update=Aktualizuj ustawienia uwierzytelniania
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=To uwierzytelnienie zostanie usunięte, czy chcesz kontynuować?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=Konfiguracja serwera
-config.app_name=Nazwa Aplikacji
-config.app_ver=Wersja aplikacji
-config.app_url=Adres URL aplikacji
-config.domain=Domena
-config.offline_mode=Tryb offline
-config.disable_router_log=Wyłącz dziennik routera
-config.run_user=Nazwa użytkownika uruchomieniowego
-config.run_mode=Tryb uruchamienia
-config.repo_root_path=Ścieżka repozytoriów
-config.static_file_root_path=Ścieżka plików statycznych
-config.log_file_root_path=Ścieżka plików dziennika
-config.script_type=Typ skryptu
-config.reverse_auth_user=Użytkownik dostarczony przez odwrotne proxy
-config.db_config=Konfiguracja bazy danych
-config.db_type=Typ
-config.db_host=Host
-config.db_name=Nazwa
-config.db_user=Użytkownik
-config.db_ssl_mode=Tryb SSL
-config.db_ssl_mode_helper=(tylko dla "postgres")
-config.db_path=Ścieżka
-config.db_path_helper=(dla "sqlite3" i "tidb")
-config.service_config=Konfiguracja usługi
-config.register_email_confirm=Wymagaj potwierdzenia e-mail
-config.disable_register=Wyłącz rejestrację
-config.show_registration_button=Pokazuj przycisk rejestracji
-config.require_sign_in_view=Wymagaj bycia zalogowanym
-config.enable_cache_avatar=Włącz cache awatarów
-config.mail_notify=Powiadomienia e-mail
-config.disable_key_size_check=Wyłącz sprawdzanie minimalnego rozmiaru klucza
-config.enable_captcha=Włącz Captcha
-config.active_code_lives=Ważność kodów aktywacyjnych
-config.reset_password_code_lives=Czas życia kodu resetowania hasła
-config.webhook_config=Konfiguracja skryptów internetowych
-config.queue_length=Długość kolejki
-config.deliver_timeout=Limit czasu zdarzenia
-config.skip_tls_verify=Pomiń weryfikację protokołu TLS
-config.mailer_config=Konfiguracja poczty
-config.mailer_enabled=Aktywne
-config.mailer_disable_helo=Wyłącz HELO
-config.mailer_name=Nazwa
-config.mailer_host=Host
-config.mailer_user=Użytkownik
-config.oauth_config=Konfiguracja OAuth
-config.oauth_enabled=Aktywne
-config.cache_config=Konfiguracja cache
-config.cache_adapter=Adapter cache
-config.cache_interval=Interwał pamięci podręcznej
-config.cache_conn=Połączenie z pamięcią podręczną
-config.session_config=Konfiguracja sesji
-config.session_provider=Dostawca sesji
-config.provider_config=Konfiguracja dostawcy
-config.cookie_name=Nazwa ciasteczka
-config.enable_set_cookie=Włącz ciasteczka
-config.gc_interval_time=Interwał odśmiecania
-config.session_life_time=Czas życia sesji
-config.https_only=Tylko HTTPS
-config.cookie_life_time=Czas życia ciasteczka
-config.picture_config=Ustawienia obrazów
-config.picture_service=Serwis obrazów
-config.disable_gravatar=Wyłącz Gravatara
-config.log_config=Konfiguracja dziennika
-config.log_mode=Tryb dziennika
-
-monitor.cron=Zadania cron
-monitor.name=Nazwa
-monitor.schedule=Harmonogram
-monitor.next=Następny czas
-monitor.previous=Poprzedni czas
-monitor.execute_times=Czas wykonania
-monitor.process=Procesy
-monitor.desc=Opis
-monitor.start=Czas rozpoczęcia
-monitor.execute_time=Czas wykonania
-
-notices.system_notice_list=Powiadomienia systemu
-notices.type=Typ
-notices.type_1=Repozytorium
-notices.desc=Opis
-notices.op=Op.
-notices.delete_success=Powiadomienia systemowe zostały usunięte pomyślnie.
-
-[action]
-create_repo=utworzono repozytorium <a href="%s"> %s</a>
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=wypchnął do <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s"> %[3]s</a>
-create_issue=`zgłosił problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
-create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`skomentował problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
-merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-transfer_repo=przeniósł repozytorium <code>%s</code> do <a href="%s">%s</a>
-push_tag=opublikował tag <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
-compare_2_commits=Zobacz porównanie tych 2 commitów
-
-[tool]
-ago=temu
-from_now=od teraz
-now=teraz
-1s=1 sekundę %s
-1m=1 minutę %s
-1h=1 godzinę %s
-1d=1 dzień %s
-1w=1 tydzień %s
-1mon=1 miesiąc %s
-1y=1 rok %s
-seconds=%d sekund %s
-minutes=%d minut %s
-hours=%d godzin %s
-days=%d dni %s
-weeks=%d tygodni %s
-months=%d miesięcy %s
-years=%d lat %s
-raw_seconds=sekund
-raw_minutes=minut
-
-[dropzone]
-default_message=Upuść pliki tutaj lub kliknij, aby przesłać.
-invalid_input_type=Nie można przesłać plików tego typu.
-file_too_big=Rozmiar pliku ({{filesize}} MB) przekracza rozmiar maksymalny ({{maxFilesize}} MB).
-remove_file=Usuń plik
-
+app_desc=Bezbolesna usługa Git napisana w Go działająca na własnym serwerze
+
+home=Strona główna
+dashboard=Pulpit
+explore=Odkrywaj
+help=Pomoc
+sign_in=Zaloguj się
+sign_out=Wyloguj
+sign_up=Zarejestruj się
+register=Zarejestruj się
+website=Strona
+version=Wersja
+page=Strona
+template=Szablon
+language=Język
+create_new=Utwórz...
+user_profile_and_more=Profil użytkownika i więcej
+signed_in_as=Zalogowany jako
+
+username=Nazwa Użytkownika
+email=E-mail
+password=Hasło
+re_type=Wpisz ponownie
+captcha=Captcha
+
+repository=Repozytorium
+organization=Organizacja
+mirror=Mirror
+new_repo=Nowe repozytorium
+new_migrate=Nowa migracja
+new_fork=Forkuj repozytorium
+new_org=Nowa organizacja
+manage_org=Zarządzaj organizacjami
+admin_panel=Panel admina
+account_settings=Ustawienia konta
+settings=Ustawienia
+your_profile=Twój profil
+your_settings=Twoje ustawienia
+
+news_feed=Kanał aktualności
+pull_requests=Oczekujące zmiany
+issues=Problemy
+
+cancel=Anuluj
+
+[search]
+search=Wyszukiwanie...
+repository=Repozytorium
+user=Użytkownik
+issue=Zgłoszenie
+code=Kod
+
+[install]
+install=Instalacja
+title=Kroki instalacyjne dla pierwszego uruchomienia
+docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
+requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
+db_title=Ustawienia bazy danych
+db_type=Typ bazy danych
+host=Host
+user=Użytkownik
+password=Hasło
+db_name=Nazwa bazy danych
+db_helper=Proszę użyć silnika INNODB z kodowaniem utf8_general_ci dla MySQL.
+ssl_mode=Tryb SSL
+path=Ścieżka
+sqlite_helper=The file path of SQLite3 or TiDB database.
+err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
+err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
+no_admin_and_disable_registration=Rejestracji nie można wyłączyć bez tworzenia konta admina.
+err_empty_admin_password=Hasło admina nie może być pusta.
+
+general_title=Ustawienia ogólne Gogs
+app_name=Nazwa aplikacji
+app_name_helper=Umieść tutaj wielką i głośną nazwę swojej organizacji!
+repo_path=Katalog repozytoriów
+repo_path_helper=W tym katalogu zostaną zapisane wszystkie repozytoria Git.
+run_user=Nazwa użytkownika uruchomieniowego
+run_user_helper=Użytkownik musi mieć dostęp do katalogu repozytoriów i uruchamiania Gogs.
+domain=Domena
+domain_helper=To wpłynie na URLe do klonowania poprzez SSH.
+ssh_port=Port SSH
+ssh_port_helper=Numer portu, z którego korzysta z serwer SSH; pozostaw puste, aby wyłączyć funkcję SSH.
+http_port=Port HTTP
+http_port_helper=Numer portu na którym aplikacja jest dostępna.
+app_url=Adres URL aplikacji
+app_url_helper=To wpłynie na adresy klonowania HTTP/HTTPS i w wiadomościach e-mail.
+
+optional_title=Ustawienia opcjonalne
+email_title=Ustawienia serwera e-mail
+smtp_host=Serwer SMTP
+smtp_from=Od
+smtp_from_helper=Adres w polu "Od", zgodnie z RFC 5322. Może być to po prostu adres email, bądź adres w formacie "Nazwa" <email@example.com>.
+mailer_user=Nadawca wiadomości E-mail
+mailer_password=Hasło nadawcy
+register_confirm=Włącz potwierdzenia rejestracji
+mail_notify=Włącz powiadomienia e-mail
+server_service_title=Ustawienia serwera i innych usług
+offline_mode=Włącz tryb offline
+offline_mode_popup=Wyłącz CDN, nawet w trybie produkcyjnym, wszystkie pliki zasobów będą podawane lokalnie.
+disable_gravatar=Wyłącz usługę Gravatar
+disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
+disable_registration=Wyłącz samodzielną rejestrację
+disable_registration_popup=Wyłącz samodzielną rejestrację użytkownika, tylko administrator będzie mógł tworzyć konta.
+enable_captcha=Włącz Captcha
+enable_captcha_popup=Require validate captcha for user self-registration.
+require_sign_in_view=Włącz wymóg zalogowania do przeglądania stron
+require_sign_in_view_popup=Tylko zalogowani użytkownicy będą mogli przeglądać strony, goście zobaczą tylko stronę logowania.
+admin_setting_desc=Nie musisz tworzyć konta administratora teraz, użytkownik z ID = 1 zyska dostęp administratora automatycznie.
+admin_title=Ustawienia konta administratora
+admin_name=Nazwa Użytkownika
+admin_password=Hasło
+confirm_password=Potwierdź hasło
+admin_email=Admin E-mail
+install_gogs=Zainstaluj Gogs
+test_git_failed=Nie udało się przetestować polecenia "git": %v
+sqlite3_not_available=Twoje wydanie nie obsługuje SQLite3, proszę pobrać oficjalne wydanie z %s, a NIE wersję z gobuild.
+invalid_db_setting=Ustawienia bazy danych nie są poprawne: %v
+invalid_repo_path=Ścieżka repozytoriów nie jest poprawna: %v
+run_user_not_match=Użytkownik aplikacji nie jest aktualnym użytkownikiem: %s -> %s
+save_config_failed=Nie udało się zapisać konfiguracji: %v
+invalid_admin_setting=Nieprawidłowe ustawienia konta admina: %v
+install_success=Cześć! Cieszymy się, że wybierałeś Gogs, baw się dobrze.
+
+[home]
+uname_holder=Nazwa użytkownika lub e-mail
+password_holder=Hasło
+switch_dashboard_context=Przełącz kontekst strony głównej
+my_repos=Moje repozytoria
+collaborative_repos=Wspólne repozytoria
+my_orgs=Moje organizacje
+my_mirrors=Moje mirrory
+view_home=Zobacz %s
+
+issues.in_your_repos=W twoich repozytoriach
+
+[explore]
+repos=Repozytoria
+
+[auth]
+create_new_account=Załóż nowe konto
+register_hepler_msg=Masz już konto? Zaloguj się teraz!
+social_register_hepler_msg=Masz już konto? Powiąż je teraz!
+disable_register_prompt=Przepraszamy rejestracja została wyłączona. Prosimy o kontakt z administratorem serwisu.
+disable_register_mail=Przepraszamy, potwierdzenia rejestracji zostały wyłączone przez administratora.
+remember_me=Zapamiętaj mnie
+forgot_password=Zapomniałem hasła
+forget_password=Zapomniałeś hasła?
+sign_up_now=Potrzebujesz konta? Zarejestruj się teraz.
+confirmation_mail_sent_prompt=Nowa wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>, proszę sprawdzić swoją skrzynkę odbiorczą w ciągu najbliższych godzin %d aby dokończyć proces rejestracji.
+active_your_account=Aktywuj swoje konto
+resent_limit_prompt=Niestety, zbyt często wysyłasz e-mail aktywacyjny. Proszę odczekać 3 minuty.
+has_unconfirmed_mail=Witaj, %s, masz niepotwierdzony adres e-mail (<b>%s</b>). Jeśli nie otrzymałeś wiadomości e-mail z potwierdzeniem lub potrzebujesz wysłać nową, kliknij na poniższy przycisk.
+resend_mail=Kliknij tutaj, aby wysłać e-mail aktywacyjny
+email_not_associate=Ten adres e-mail nie jest skojarzony z żadnym kontem.
+send_reset_mail=Kliknij tutaj, aby (ponownie) wysłać e-mail z instrukcjami resetowania hasła
+reset_password=Resetowanie hasła
+invalid_code=Niestety, twój kod potwierdzający wygasł lub jest nieprawidłowy.
+reset_password_helper=Kliknij tutaj, aby zresetować hasło
+password_too_short=Długość hasła nie może być mniejsza niż 6 znaków.
+
+[mail]
+activate_account=Prosimy aktywować swoje konto
+activate_email=Sprawdź Twój adres e-mail
+reset_password=Zmień swoje hasło
+register_success=Zostałeś zarejestrowany, witamy
+register_notify=Welcome on board
+
+[modal]
+yes=Tak
+no=Nie
+modify=Zmień
+
+[form]
+UserName=Nazwa Użytkownika
+RepoName=Nazwa repozytorium
+Email=Adres e-mail
+Password=Hasło
+Retype=Wpisz ponownie hasło
+SSHTitle=Nazwa klucza SSH
+HttpsUrl=HTTPS URL
+PayloadUrl=URL do wywołania
+TeamName=Nazwa zespołu
+AuthName=Nazwa autoryzacji
+AdminEmail=E-mail administratora
+
+require_error=` nie może być puste.`
+alpha_dash_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników oraz podkreśleń.`
+alpha_dash_dot_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników, podkreśleń oraz kropek.`
+size_error="musi być wielkości %s."
+min_size_error=` musi zawierać co najwyżej %s znaków.`
+max_size_error=` musi zawierać co najwyżej %s znaków.`
+email_error=` nie jest poprawnym adresem e-mail.`
+url_error=` nie jest poprawnym adresem URL.`
+include_error=` must contain substring '%s'.`
+unknown_error=Nieznany błąd:
+captcha_incorrect=Kod captcha nie zgadza się.
+password_not_match=Hasło i potwierdzenie nie zgadzają się.
+
+username_been_taken=Nazwa użytkownika jest już zajęta.
+repo_name_been_taken=Nazwa repozytorium jest już zajęta.
+org_name_been_taken=Nazwa organizacji jest już zajęta.
+team_name_been_taken=Nazwa zespołu jest już zajęta.
+email_been_used=Adres e-mail jest już zarejestrowany.
+illegal_team_name=Nazwa zespołu zawiera niedozwolone znaki.
+username_password_incorrect=Nazwa użytkownika lub hasło nie jest prawidłowe.
+enterred_invalid_repo_name=Upewnij się, że wprowadzona nazwa repozytorium jest poprawna.
+enterred_invalid_owner_name=Upewnij się, że nazwa właściciela repozytorium jest poprawna.
+enterred_invalid_password=Proszę upewnij się, że wprowadzono hasło jest poprawne.
+user_not_exist=Podany użytkownik nie istnieje.
+last_org_owner=Usuwany użytkownik jest ostatnim członkiem ekipy właścicieli. Musi być inny właściciel.
+
+invalid_ssh_key=Niestety, nie jesteśmy stanie zweryfikować twojego klucza SSH: %s
+unable_verify_ssh_key=Gogs nie może zweryfikować twojego klucza SSH, ale zakładamy, że jest poprawny, proszę sprawdź to samodzielnie.
+auth_failed=Uwierzytelnianie nie powiodło się: %v
+
+still_own_repo=Twoje konto jest dalej właścicielem repozytorium, musisz je usunąć lub przekazać.
+still_has_org=Twoje konto dalej posiada członkostwo w organizacji, musisz ją opuścić bądź usunąć.
+org_still_own_repo=Ta organizacja dalej jest właścicielem repozytorium, musisz je usunąć bądź przekazać.
+
+still_own_user=To uwierzytelnienie dalej jest używane przez kilku użytkowników, musisz je przenieść i usunąć ponownie.
+
+target_branch_not_exist=Podana gałąź nie istnieje
+
+[user]
+change_avatar=Zmień swój avatar na gravatar.com
+change_custom_avatar=Zmień awatar w ustawieniach
+join_on=Dołączył
+repositories=Repozytoria
+activity=Publiczna aktywność
+followers=Obserwujący
+starred=Polubionych
+following=Obserwowani
+
+form.name_reserved=Nazwa użytkownika "%s" jest zarezerwowana.
+form.name_pattern_not_allowed=Wzorzec nazwy użytkownika "%s" jest niedozwolony.
+
+[settings]
+profile=Profil
+password=Hasło
+ssh_keys=Klucze SSH
+social=Konta społecznościowe
+applications=Aplikacje
+orgs=Organizacje
+delete=Usuń konto
+uid=UID
+
+public_profile=Profil publiczny
+profile_desc=Twój adres e-mail jest publiczny i będzie używany dla wszystkich powiadomień związanych z kontem i dla każdej operacji wykonanej przez tę stronę.
+full_name=Imię i Nazwisko
+website=Strona
+location=Lolalizacja
+update_profile=Zaktualizuj profil
+update_profile_success=Twój profil został pomyślnie zaktualizowany.
+change_username=Zmieniono nazwę użytkownika
+change_username_prompt=This change will affect the way how links relate to your account.
+continue=Konynuuj
+cancel=Anuluj
+
+enable_custom_avatar=Włącz niestandardowe awatary
+enable_custom_avatar_helper=Włącz to by wyłączyć grawatary
+choose_new_avatar=Wybierz nowy avatar
+update_avatar=Zaktualizuj ustawienia awatara
+uploaded_avatar_not_a_image=Załadowany plik nie jest obrazem.
+no_custom_avatar_available=Własny avatar niedostępny, nie można go włączyć.
+update_avatar_success=Ustawienia awatarów zostały pomyślnie zaktualizowane.
+
+change_password=Zmień hasło
+old_password=Aktualne hasło
+new_password=Nowe hasło
+retype_new_password=Powtórz nowe hasło
+password_incorrect=Bieżące hasło nie jest prawidłowe.
+change_password_success=Hasło zostało zmienione pomyślnie. Możesz teraz zalogować się za pomocą nowego hasła.
+
+emails=Adresy e-mail
+manage_emails=Zarządzaj adresami e-mail
+email_desc=Twój podstawowy adres e-mail będzie używany dla powiadomień i innych działań.
+primary=Podstawowy
+primary_email=Ustaw jako podstawowy
+delete_email=Usuń
+email_deletion=Usunięcie wiadomości e-mail
+email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
+email_deletion_success=E-mail został usunięty pomyślnie!
+add_new_email=Dodaj nowy e-mail
+add_email=Dodaj e-mail
+add_email_confirmation_sent=Nowa wiadomość e-mail z potwierdzeniem została wysłana do '%s', proszę sprawdzić swoją skrzynkę odbiorczą w ciągu %d godzin, aby dokończyć proces potwierdzania.
+add_email_success=Twój nowy e-mail został dodany pomyślnie.
+
+manage_ssh_keys=Zarządzaj kluczami SSH
+add_key=Dodaj klucz
+ssh_desc=To jest lista kluczy SSH powiązanych z Twoim kontem. Usuń klucze, które nie rozpoznajesz.
+ssh_helper=<strong>Potrzebujesz pomocy?</strong> Sprawdź nasz przewodnik <a href="%s"> generowania kluczy SSH</a> lub rozwiązywanie <a href="%s">typowych problemów z SSH</a>.
+add_new_key=Dodaj klucz SSH
+ssh_key_been_used=Public key content has been used.
+ssh_key_name_used=Klucz publiczny o tej samej nazwie już istnieje.
+key_name=Nazwa klucza
+key_content=Treść
+add_key_success=Pomyślnie dodano nowy klucz SSH '%s'!
+delete_key=Usuń
+ssh_key_deletion=Usunięcie klucza SSH
+ssh_key_deletion_desc=Usunięcie tego klucza SSH będzie skutkować usunięciem wszystkich powiązanych dostępów do twojego konta. Czy chcesz kontynuować?
+ssh_key_deletion_success=Klucz SSH został usunięty pomyślnie!
+add_on=Dodano
+last_used=Ostatnio użyto
+no_activity=Brak aktywności
+key_state_desc=This key is used in last 7 days
+token_state_desc=This token is used in last 7 days
+
+manage_social=Zarządzaj powiązanymi kontami społecznościowymi
+social_desc=To jest lista powiązanych kont społecznościowych. Usuń powiązania, których nie rozpoznajesz.
+unbind=Usuń powiązanie
+unbind_success=Konto społecznościowe zostało odpięte.
+
+manage_access_token=Zarządzaj osobistymi tokenami dostępu
+generate_new_token=Wygeneruj nowy token
+tokens_desc=Tokens you have generated that can be used to access the Gogs APIs.
+new_token_desc=Jak na razie, każdy token zapewnia pełen dostęp do Twojego konta.
+token_name=Nazwa tokena
+generate_token=Wygeneruj token
+generate_token_succees=Nowy token dostępu został wygenerowany pomyślnie! Upewnij się, że teraz go skopiowałeś. Nie będziesz mógł go zobaczyć ponownie!
+delete_token=Usuń
+access_token_deletion=Usuwanie osobistego tokena dostępu
+access_token_deletion_desc=Usunięcie tego tokena osobistego dostęp spowoduje usunięcie wszystkich powiązanych dostępów do aplikacji. Czy chcesz kontynuować?
+delete_token_success=Osobisty token dostępu został usunięty pomyślnie! Nie zapomnij również zaktualizować swoich aplikacji.
+
+delete_account=Usuń konto
+delete_prompt=Ta operacja trwale usuwa konto, i <strong>NIE MOŻE</strong> zostać cofnięta!
+confirm_delete_account=Potwierdź usunięcie
+delete_account_title=Usunięcie konta
+delete_account_desc=To konto będzie usunięte na zawsze, chcesz kontynuować?
+
+[repo]
+owner=Właściciel
+repo_name=Nazwa repozytorium
+repo_name_helper=Dobre nazwy repozytorium są krótkie, wpadające w pamięć i <strong>unikalne</strong>.
+visibility=Widoczność
+visiblity_helper=To repozytorium jest <span class="ui red text">prywatne</span>
+visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
+clone_helper=Potrzebujesz pomocy z klonowaniem? Odwiedź <a target="_blank" href="%s">Pomoc</a>!
+fork_repo=Sforkowane
+fork_from=Forkuj z
+fork_visiblity_helper=Fork nie może zmieniać swojej widoczności
+repo_desc=Opis
+repo_lang=Język
+repo_lang_helper=Wybierz pliki .gitignore
+license=Licencja
+license_helper=Wybierz plik licencji
+readme=Readme
+readme_helper=Wybierz szablon readme
+auto_init=Initialize this repository with selected files and template
+create_repo=Utwórz repozytorium
+default_branch=Domyślna gałąź
+mirror_interval=Odświeżanie mirrorów (godziny)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Nazwa repozytorium "%s" jest zarezerwowana.
+form.name_pattern_not_allowed=Wzorzec nazwy repozytorium "%s" jest niedozwolony.
+
+need_auth=Wymaga autoryzacji
+migrate_type=Typ migracji
+migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
+migrate_repo=Przenieś repozytorium
+migrate.clone_address=Sklonuj adres
+migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
+migrate.permission_denied=You are not allowed to import local repositories.
+migrate.invalid_local_path=Ścieżka jest niepoprawna. Nie istnieje lub nie jest katalogiem.
+migrate.failed=Migration failed: %v
+
+forked_from=sklonowany z
+fork_from_self=You cannot fork repository you already owned!
+copy_link=Kopiuj
+copy_link_success=Skopiowane!
+copy_link_error=Naciśnij klawisze ⌘-C i Ctrl-C, aby skopiować
+copied=Skopiowano
+unwatch=Przestań obserwować
+watch=Obserwuj
+unstar=Usuń gwiazdkę
+star=Polub
+fork=Fork
+
+no_desc=Brak opisu
+quick_guide=Skrócona instrukcja
+clone_this_repo=Klonuj repozytorium
+create_new_repo_command=Utwórz nowe repozytorium z wiersza poleceń
+push_exist_repo=Wyślij istniejące repozytorium z wiersza poleceń
+repo_is_empty=To repozytorium jest puste, proszę wrócić później!
+
+branch=Gałąź
+tree=Drzewo
+filter_branch_and_tag=Filter branch or tag
+branches=Gałęzie
+tags=Tagi
+issues=Problemy
+pulls=Pull Requests
+labels=Etykiety
+milestones=Kamienie milowe
+commits=Commity
+releases=Wydania
+file_raw=Czysty
+file_history=Historia
+file_view_raw=Zobacz czysty
+file_permalink=Bezpośredni odnośnik
+
+commits.commits=Commity
+commits.search=Przeszukaj commity
+commits.find=Szukaj
+commits.author=Autor
+commits.message=Wiadomość
+commits.date=Data
+commits.older=Starsze
+commits.newer=Nowsze
+
+issues.new=Nowe zgłoszenie
+issues.new.labels=Etykiety
+issues.new.no_label=Brak etykiety
+issues.new.clear_labels=Wyczyść etykiety
+issues.new.milestone=Kamień milowy
+issues.new.no_milestone=No Milestone
+issues.new.clear_milestone=Clear milestone
+issues.new.open_milestone=Otwórz "kamienie milowe"
+issues.new.closed_milestone=Zamknięte "kamienie milowe"
+issues.new.assignee=Assignee
+issues.new.clear_assignee=Clear assignee
+issues.new.no_assignee=No assignee
+issues.create=Create Issue
+issues.new_label=Nowa etykieta
+issues.new_label_placeholder=Label name...
+issues.create_label=Create Label
+issues.open_tab=%d Open
+issues.close_tab=%d Closed
+issues.filter_label=Etykieta
+issues.filter_label_no_select=No selected label
+issues.filter_milestone=Kamień milowy
+issues.filter_milestone_no_select=No selected milestone
+issues.filter_assignee=Przypisany
+issues.filter_assginee_no_select=No selected Assignee
+issues.filter_type=Typ
+issues.filter_type.all_issues=All issues
+issues.filter_type.assigned_to_you=Assigned to you
+issues.filter_type.created_by_you=Created by you
+issues.filter_type.mentioning_you=Mentioning you
+issues.filter_sort=Sort
+issues.filter_sort.latest=Najnowszy
+issues.filter_sort.oldest=Oldest
+issues.filter_sort.recentupdate=Recently updated
+issues.filter_sort.leastupdate=Least recently updated
+issues.filter_sort.mostcomment=Most commented
+issues.filter_sort.leastcomment=Least commented
+issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=opened %[1]s by %[2]s
+issues.previous=Previous
+issues.next=Następny
+issues.open_title=otwarty
+issues.closed_title=zamknięty
+issues.num_comments=%d komentarzy
+issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=There is no content yet.
+issues.close_issue=Zamknij
+issues.close_comment_issue=Skomentuj i zamknij
+issues.reopen_issue=Otwórz ponownie
+issues.reopen_comment_issue=Otwórz ponownie i dodaj komentarz
+issues.create_comment=Komentuj
+issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Autor
+issues.admin=Admin
+issues.owner=Właściciel
+issues.sign_up_for_free=Zarejestruj się za darmo
+issues.sign_in_require_desc=do przyłączenia się do tej rozmowy. Masz już konto? <a href="%s"> Zaloguj się by komentować</a>
+issues.edit=Edytuj
+issues.cancel=Anuluj
+issues.save=Zapisz
+issues.label_title=Nazwa etykiety
+issues.label_color=Kolor etykiety
+issues.label_count=%d etykiety
+issues.label_open_issues=%d otwartych zgłoszeń
+issues.label_edit=Edytuj
+issues.label_delete=Usuń
+issues.label_modify=Modyfikacja etykiety
+issues.label_deletion=Usunięcie etykiety
+issues.label_deletion_desc=Delete this label will remove its information in all related issues. Do you want to continue?
+issues.label_deletion_success=Etykieta została usunięta pomyślnie!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Compare Changes
+pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filtruj branch
+pulls.no_results=Nie znaleziono wyników.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Utwórz Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commity
+pulls.tab_files=Pliki zmodyfikowane
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Scalone
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Scal Pull Request
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=Nowy kamień milowy
+milestones.open_tab=%d Open
+milestones.close_tab=%d Closed
+milestones.closed=Closed %s
+milestones.no_due_date=Nie ustalono terminu
+milestones.open=Otwórz
+milestones.close=Zamknij
+milestones.new_subheader=Create milestones to organize your issues.
+milestones.create=Utwórz punkt kontrolny
+milestones.title=Tytuł
+milestones.desc=Opis
+milestones.due_date=Termin realizacji (opcjonalnie)
+milestones.clear=Wyczyść
+milestones.invalid_due_date_format=Format daty realizacji jest nieprawidłowy, musi być "rrrr-mm-dd".
+milestones.create_success=Kamień milowy "%s" został utworzony pomyślnie!
+milestones.edit=Edytuj kamień milowy
+milestones.edit_subheader=Use better description for milestones so people won't be confused.
+milestones.cancel=Anuluj
+milestones.modify=Modyfikuj kamień milowy
+milestones.edit_success=Changes of milestone '%s' has been saved successfully!
+milestones.deletion=Milestone Deletion
+milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
+milestones.deletion_success=Kamień milowy został usunięty pomyślnie!
+
+settings=Ustawienia
+settings.options=Opcje
+settings.collaboration=Współpraca
+settings.hooks=Webhooks
+settings.githooks=Skrypty Git
+settings.basic_settings=Ustawienia podstawowe
+settings.danger_zone=Strefa niebezpieczeństwa
+settings.site=Oficjalna Strona
+settings.update_settings=Aktualizuj ustawienia
+settings.change_reponame_prompt=Zmiana nazwy repozytorium wpłynie na linki do niego.
+settings.transfer=Przeniesienie własności
+settings.transfer_desc=Przenieś to repozytorium do innego użytkownika lub organizacji gdzie masz uprawnienia administratora.
+settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
+settings.delete=Usuń to repozytorium
+settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
+settings.transfer_notices_1=- You will lose access if new owner is a individual user.
+settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
+settings.transfer_form_title=Please enter following information to confirm your operation:
+settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
+settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
+settings.update_settings_success=Opcje repozytorium zostały pomyślnie zaktualizowane.
+settings.transfer_owner=Nowy właściciel
+settings.make_transfer=Przenieś
+settings.transfer_succeed=Własność repozytorium została przeniesiona pomyślnie.
+settings.confirm_delete=Potwierdź usunięcie
+settings.add_collaborator=Dodaj nowego współpracownika
+settings.add_collaborator_success=Został dodany nowy współpracownik.
+settings.remove_collaborator_success=Współpracownik został usunięty.
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
+settings.add_webhook=Dodaj Webhooka
+settings.hooks_desc=Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
+settings.webhook_deletion=Usuń Webhook
+settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
+settings.webhook_deletion_success=Webhook has been deleted successfully!
+settings.webhook.request=Żądanie
+settings.webhook.response=Response
+settings.webhook.headers=Headers
+settings.webhook.payload=Payload
+settings.webhook.body=Body
+settings.githooks_desc=Doczepki Git są napędzane przez samego Git, można edytować pliki obsługiwanych doczepek z poniższej listy, aby wykonywać niestandardowe operacje.
+settings.githook_edit_desc=Jeżeli doczepka jest nieaktywna, prezentowana będzie przykładowa treść. Pozostawienie pustej wartości wyłączy tą doczepkę.
+settings.githook_name=Nazwa skryptu
+settings.githook_content=Treść skryptu
+settings.update_githook=Zaktualizuj skrypt
+settings.add_webhook_desc=Wyślemy żądanie <code>POST</code> pod poniższy adres ze szczegółami zdarzeń. Możesz również ustalić format danych zapytania (JSON, <code>x-www-form-urlencoded</code>, <em>itp</em>). Więcej informacji można znaleźć w <a target="_blank" href="%s">przewodniku skryptów internetowych</a>.
+settings.payload_url=URL do wywołania
+settings.content_type=Typ zawartości
+settings.secret=Sekret
+settings.slack_username=Username
+settings.slack_icon_url=Icon URL
+settings.slack_color=Kolor
+settings.event_desc=Jakie zdarzenia mają wywoływać ten skrypt internetowy?
+settings.event_push_only=Tylko zdarzenia <code>push</code>.
+settings.event_send_everything=Potrzebuję <strong>wszystkiego</strong>.
+settings.event_choose=Pozwól mi wybrać, czego potrzebuję.
+settings.event_create=Utwórz
+settings.event_create_desc=Branch, or tag created
+settings.event_push=Push
+settings.event_push_desc=Git push to a repository
+settings.active=Aktywny
+settings.active_helper=Dostarczymy szczegóły zdarzenia, gdy ten skrypt zostanie wywołany.
+settings.add_hook_success=Nowy skrypt został dodany.
+settings.update_webhook=Zaktualizuj skrypt internetowy
+settings.update_hook_success=Skrypt internetowy został zaktualizowany.
+settings.delete_webhook=Usuń skrypt internetowy
+settings.recent_deliveries=Ostatnie wywołania
+settings.hook_type=Typ skryptu
+settings.add_slack_hook_desc=Dodać integrację ze <a href="%s">Slackiem</a> do twojego repozytorium.
+settings.slack_token=Token
+settings.slack_domain=Domena
+settings.slack_channel=Kanał
+settings.deploy_keys=Klucze wdrożeniowe
+settings.add_deploy_key=Add Deploy Key
+settings.no_deploy_keys=You haven't added any deploy key.
+settings.title=Tytuł
+settings.deploy_key_content=Treść
+settings.key_been_used=Deploy key content has been used.
+settings.key_name_used=Deploy key with same name has already existed.
+settings.add_key_success=New deploy key '%s' has been added successfully!
+settings.deploy_key_deletion=Delete Deploy Key
+settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
+settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
+
+diff.browse_source=Przeglądaj źródła
+diff.parent=rodzic
+diff.commit=commit
+diff.data_not_available=Informacje nt. zmiany nie są dostępne.
+diff.show_diff_stats=Pokaż statystyki zmian
+diff.stats_desc=<strong>%d zmienionych plików</strong> z <strong>%d dodań</strong> i <strong>%d usunięć</strong>
+diff.bin=BIN
+diff.view_file=Wyświetl plik
+
+release.releases=Wydania
+release.new_release=Nowe wydanie
+release.draft=Szkic
+release.prerelease=Wersja wstępna
+release.stable=Stabilny
+release.edit=edytuj
+release.ahead=<strong>%d</strong> commitów w %s od tego wydania
+release.source_code=Kod źródłowy
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Nazwa tagu
+release.target=Cel
+release.tag_helper=Wybierz istniejący tag, bądź utwórz nowy podczas publikacji.
+release.title=Title
+release.content=Content
+release.write=Napisz
+release.preview=Pogdląd
+release.loading=Ładowanie...
+release.prerelease_desc=To jest wersja wstępna
+release.prerelease_helper=Chcemy zwrócić uwagę, że ta wersja jest oznaczona jako eksperymentalna.
+release.cancel=Cancel
+release.publish=Publikuj wersję
+release.save_draft=Zapisz szkic
+release.edit_release=Edytuj wydanie
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Wersja o tej nazwie tagu już istnieje.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Nazwa organizacji
+org_full_name_holder=Organization Full Name
+org_name_helper=Świetne nazwy organizacji są krótkie i łatwe do zapamiętania.
+create_org=Utwórz organizację
+repo_updated=Zaktualizowano
+people=Ludzie
+invite_someone=Zaproś kogoś
+teams=Zespoły
+lower_members=członkowie
+lower_repositories=repozytoria
+create_new_team=Utwórz nowy zespół
+org_desc=Opis
+team_name=Nazwa zespołu
+team_desc=Opis
+team_name_helper=Będziesz używał tej nazwy do wywoływania tego zespołu w dyskusjach.
+team_desc_helper=Czym zajmuje się ten zespół?
+team_permission_desc=Jaki poziom uprawnień powinien mieć ten zespół?
+
+form.name_reserved=Nazwa organizacji "%s" jest zarezerwowana.
+form.name_pattern_not_allowed=Wzorzec nazwy organizacji "%s" jest niedozwolony.
+
+settings=Ustawienia
+settings.options=Opcje
+settings.full_name=Imię i Nazwisko
+settings.website=Strona
+settings.location=Lolalizacja
+settings.update_settings=Aktualizuj ustawienia
+settings.update_setting_success=Ustawienia organizacji zostały pomyślnie zaktualizowane.
+settings.change_orgname_prompt=This change will affect how links relate to the organization.
+settings.update_avatar_success=Organization avatar setting has been updated successfully.
+settings.delete=Usuń Organizację
+settings.delete_account=Usuń tą organizację
+settings.delete_prompt=Organizacja zostanie trwale usunięta, a to <strong>NIE MOŻE</strong> być cofnięte!
+settings.confirm_delete_account=Potwierdź usunięcie
+settings.delete_org_title=Usunięcie organizacji
+settings.delete_org_desc=Ta organizacja zostanie trwale usunięta, czy chcesz kontynuować?
+settings.hooks_desc=Add webhooks that will be triggered for <strong>all repositories</strong> under this organization.
+
+members.public=Publiczne
+members.public_helper=sprywatyzuj
+members.private=Prywatne
+members.private_helper=upublicznij
+members.owner=Właściciel
+members.member=Członek
+members.conceal=Ukryj
+members.remove=Usuń
+members.leave=Opuść
+members.invite_desc=Zacznij wpisywać nazwę użytkownika by zaprosić nowego członka do %s:
+members.invite_now=Zaproś teraz
+
+teams.join=Dołącz
+teams.leave=Opuść
+teams.read_access=Dostęp do odczytu
+teams.read_access_helper=Ten zespół będzie mógł wyświetlać i klonować swoje repozytoria.
+teams.write_access=Dostęp do zapisu
+teams.write_access_helper=Ten zespół będzie mógł odczytywać i wysyłać do swoich repozytoriów.
+teams.admin_access=Uprawnienia admina
+teams.admin_access_helper=Ten zespół będzie mógł wysyłać i pobierać swoje repozytoria, oraz dodawać do nich współpracowników.
+teams.no_desc=Ten zespół nie ma opisu
+teams.settings=Ustawienia
+teams.owners_permission_desc=Właściciele mają pełny dostęp do <strong>wszystkich repozytoriów</strong> i mają <strong>prawa administratora</strong> w organizacji.
+teams.members=Członkowie zespołu
+teams.update_settings=Aktualizuj ustawienia
+teams.delete_team=Usuń ten zespół
+teams.add_team_member=Dodaj członka zespołu
+teams.delete_team_title=Usuwanie zespołu
+teams.delete_team_desc=Ten zespół zostanie usunięty, czy na pewno chcesz kontynuować? Jego członkowie mogą utracić dostęp do części repozytoriów.
+teams.delete_team_success=Zespół został usunięty pomyślnie.
+teams.read_permission_desc=Ten zespół daje dostęp do <strong>odczytu</strong>: członkowie mogą wyświetlać i klonować repozytoria zespołu.
+teams.write_permission_desc=Ten zespół daje dostęp do <strong>zapisu</strong>: członkowie mogą wyświetlać i wysyłać do repozytoriów zespołu.
+teams.admin_permission_desc=Ten zespół daje dostęp <strong>pełny</strong>: członkowie mogą wyświetlać, wysyłać i dodawać współpracowników do repozytoriów zespołu.
+teams.repositories=Repozytoria zespołu
+teams.add_team_repository=Dodaj repozytorium zespołu
+teams.remove_repo=Usuń
+teams.add_nonexistent_repo=Repozytorium, które próbujesz dodać, nie istnieje, wpierw je utwórz.
+
+[admin]
+dashboard=Pulpit
+users=Użytkownicy
+organizations=Organizacje
+repositories=Repozytoria
+authentication=Uwierzytelnienia
+config=Konfiguracja
+notices=Powiadomienia systemowe
+monitor=Monitorowanie
+first_page=Pierwsza
+last_page=Ostatnia
+total=Ogółem: %d
+
+dashboard.statistic=Statystyki
+dashboard.operations=Operacje
+dashboard.system_status=Stan monitora systemu
+dashboard.statistic_info=Baza danych Gogs zawiera <b>%d</b> użytkowników, <b>%d</b> organizacji, <b>%d</b> kluczy publicznych, <b>%d</b> repozytoriów, <b>%d</b> obserwujących, <b>%d</b> polubionych, <b>%d</b> akcji, <b>%d</b> tokenów, <b>%d</b> problemów, <b>%d</b> komenatrzy, <b>%d</b> kont społecznościowych, <b>%d</b> obserwacji, <b>%d</b> mirrorów, <b>%d</b> wydań, <b>%d</b> login sources, <b>%d</b> webhooków, <b>%d</b> kamieni milowych, <b>%d</b> labels, <b>%d</b> zadań hooków, <b>%d</b> zespołów, <b>%d</b> zadań aktualizacji, <b>%d</b> załączników.
+dashboard.operation_name=Nazwa operacji
+dashboard.operation_switch=Przełącz
+dashboard.operation_run=Uruchom
+dashboard.clean_unbind_oauth=Usuń niepowiązane wpisy OAuth
+dashboard.clean_unbind_oauth_success=Wszystkie niepowiązane wpisy OAuth zostały pomyślnie usunięte.
+dashboard.delete_inactivate_accounts=Usuń wszystkie nieaktywne konta
+dashboard.delete_inactivate_accounts_success=Wszystkie nieaktywne konta zostały usunięte pomyślnie.
+dashboard.delete_repo_archives=Usuń wszystkie archiwa repozytoriów
+dashboard.delete_repo_archives_success=Pomyślnie usunięto wszystkie archiwa repozytoriów.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Usuń śmieci z repozytoriów
+dashboard.git_gc_repos_success=Wszystkie repozytoria zakończyły odśmiecanie pomyślnie.
+dashboard.resync_all_sshkeys=Przeładuj klucze publiczne w pliku '.ssh/authorized_keys' (uwaga: klucze poza Gogs zostaną usunięte)
+dashboard.resync_all_sshkeys_success=Przeładowanie kluczy publicznych zakończyło się sukcesem.
+dashboard.resync_all_update_hooks=Rewrite all update hook of repositories (needed when custom config path is changed)
+dashboard.resync_all_update_hooks_success=All repositories' update hook have been rewritten successfully.
+
+dashboard.server_uptime=Uptime serwera
+dashboard.current_goroutine=Bieżące Goroutines
+dashboard.current_memory_usage=Bieżące użycie pamięci
+dashboard.total_memory_allocated=Całkowita przydzielona pamięć
+dashboard.memory_obtained=Memory Obtained
+dashboard.pointer_lookup_times=Pointer Lookup Times
+dashboard.memory_allocate_times=Memory Allocate Times
+dashboard.memory_free_times=Memory Free Times
+dashboard.current_heap_usage=Bieżące użycie stosu
+dashboard.heap_memory_obtained=Heap Memory Obtained
+dashboard.heap_memory_idle=Heap Memory Idle
+dashboard.heap_memory_in_use=Użycie pamięci stosu
+dashboard.heap_memory_released=Heap Memory Released
+dashboard.heap_objects=Ilość obiektów na stercie
+dashboard.bootstrap_stack_usage=Bootstrap Stack Usage
+dashboard.stack_memory_obtained=Stack Memory Obtained
+dashboard.mspan_structures_usage=MSpan Structures Usage
+dashboard.mspan_structures_obtained=MSpan Structures Obtained
+dashboard.mcache_structures_usage=MCache Structures Usage
+dashboard.mcache_structures_obtained=MCache Structures Obtained
+dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
+dashboard.gc_metadata_obtained=Ilość uzyskanych danych przez GC
+dashboard.other_system_allocation_obtained=Other System Allocation Obtained
+dashboard.next_gc_recycle=Następne wywołanie GC
+dashboard.last_gc_time=Czas od ostatniego wywołania GC
+dashboard.total_gc_time=Sumaryczny czas wstrzymania przez GC
+dashboard.total_gc_pause=Sumaryczny czas wstrzymania przez GC
+dashboard.last_gc_pause=Ostatnie wstrzymanie przez GC
+dashboard.gc_times=Ilość wywołań GC
+
+users.user_manage_panel=Panel zarządzania kontem użytkownika
+users.new_account=Załóż nowe konto
+users.name=Nazwa
+users.activated=Aktywowany
+users.admin=Admin
+users.repos=Repozytoria
+users.created=Utworzony
+users.send_register_notify=Send Registration Notification To User
+users.new_success=New account '%s' has been created successfully.
+users.edit=Edytuj
+users.auth_source=Authentication Source
+users.local=Lokalne
+users.auth_login_name=Authentication Login Name
+users.password_helper=Leave it empty to remain unchanged.
+users.update_profile_success=Profil konta został pomyślnie zaktualizowany.
+users.edit_account=Edytuj konto
+users.is_activated=To konto jest aktywne
+users.is_admin=To konto ma uprawnienia administratora
+users.allow_git_hook=To konto posiada uprawnienia do tworzenia skryptów Git
+users.allow_import_local=This account has permissions to import local repositories
+users.update_profile=Zaktualizuj profil konta
+users.delete_account=Usuń to konto
+users.still_own_repo=Twoje konto jest dalej właścicielem repozytorium, musisz je usunąć lub przekazać.
+users.still_has_org=Twoje konto dalej posiada członkostwo w organizacji, musisz ją opuścić bądź usunąć.
+users.deletion_success=Account has been deleted successfully!
+
+orgs.org_manage_panel=Panel zarządzania organizacją
+orgs.name=Nazwa
+orgs.teams=Zespoły
+orgs.members=Członkowie
+
+repos.repo_manage_panel=Panel zarządzania repozytorium
+repos.owner=Właściciel
+repos.name=Nazwa
+repos.private=Prywatne
+repos.watches=Obserwujących
+repos.stars=Polubienia
+repos.issues=Problemy
+
+auths.auth_manage_panel=Authentication Manage Panel
+auths.new=Dodać nowe Źródło
+auths.name=Nazwa
+auths.type=Typ
+auths.enabled=Włączono
+auths.updated=Zaktualizowano
+auths.auth_type=Typ uwierzytelniania
+auths.auth_name=Nazwa uwierzytelniania
+auths.domain=Domena
+auths.host=Host
+auths.port=Port
+auths.bind_dn=Bind DN
+auths.bind_password=Bind Password
+auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
+auths.user_base=User Search Base
+auths.user_dn=User DN
+auths.attribute_name=Atrybut imienia
+auths.attribute_surname=Atrybut nazwiska
+auths.attribute_mail=Atrybut email
+auths.filter=User Filter
+auths.admin_filter=Admin Filter
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP Authentication Type
+auths.smtphost=Serwer SMTP
+auths.smtpport=Port SMTP
+auths.allowed_domains=Dozwolone domeny
+auths.allowed_domains_helper=Pozostaw puste aby nie ograniczać domen. Wiele domen powinno być oddzielone przecinkami ','.
+auths.enable_tls=Włącz szyfrowanie TLS
+auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
+auths.pam_service_name=Nazwa usługi PAM
+auths.enable_auto_register=Włącz automatyczną rejestrację
+auths.tips=Wskazówki
+auths.edit=Edytuj ustawienia uwierzytelniania
+auths.activated=To uwierzytelnienie zostało aktywowane
+auths.new_success=Pomyślnie dodano nowe uwierzytelnianie '%s'.
+auths.update_success=Ustawienia uwierzytelnienia zostały zaktualizowane pomyślnie.
+auths.update=Aktualizuj ustawienia uwierzytelniania
+auths.delete=Usuń to uwierzytelnianie
+auths.delete_auth_title=Usunięcie uwierzytelniania
+auths.delete_auth_desc=To uwierzytelnienie zostanie usunięte, czy chcesz kontynuować?
+auths.deletion_success=Uwierzytelnianie zostało usunięte pomyślnie!
+
+config.server_config=Konfiguracja serwera
+config.app_name=Nazwa Aplikacji
+config.app_ver=Wersja aplikacji
+config.app_url=Adres URL aplikacji
+config.domain=Domena
+config.offline_mode=Tryb offline
+config.disable_router_log=Wyłącz dziennik routera
+config.run_user=Nazwa użytkownika uruchomieniowego
+config.run_mode=Tryb uruchamienia
+config.repo_root_path=Ścieżka repozytoriów
+config.static_file_root_path=Ścieżka plików statycznych
+config.log_file_root_path=Ścieżka plików dziennika
+config.script_type=Typ skryptu
+config.reverse_auth_user=Użytkownik dostarczony przez odwrotne proxy
+config.db_config=Konfiguracja bazy danych
+config.db_type=Typ
+config.db_host=Host
+config.db_name=Nazwa
+config.db_user=Użytkownik
+config.db_ssl_mode=Tryb SSL
+config.db_ssl_mode_helper=(tylko dla "postgres")
+config.db_path=Ścieżka
+config.db_path_helper=(dla "sqlite3" i "tidb")
+config.service_config=Konfiguracja usługi
+config.register_email_confirm=Wymagaj potwierdzenia e-mail
+config.disable_register=Wyłącz rejestrację
+config.show_registration_button=Pokazuj przycisk rejestracji
+config.require_sign_in_view=Wymagaj bycia zalogowanym
+config.enable_cache_avatar=Włącz cache awatarów
+config.mail_notify=Powiadomienia e-mail
+config.disable_key_size_check=Wyłącz sprawdzanie minimalnego rozmiaru klucza
+config.enable_captcha=Włącz Captcha
+config.active_code_lives=Ważność kodów aktywacyjnych
+config.reset_password_code_lives=Czas życia kodu resetowania hasła
+config.webhook_config=Konfiguracja skryptów internetowych
+config.queue_length=Długość kolejki
+config.deliver_timeout=Limit czasu zdarzenia
+config.skip_tls_verify=Pomiń weryfikację protokołu TLS
+config.mailer_config=Konfiguracja poczty
+config.mailer_enabled=Aktywne
+config.mailer_disable_helo=Wyłącz HELO
+config.mailer_name=Nazwa
+config.mailer_host=Host
+config.mailer_user=Użytkownik
+config.oauth_config=Konfiguracja OAuth
+config.oauth_enabled=Aktywne
+config.cache_config=Konfiguracja cache
+config.cache_adapter=Adapter cache
+config.cache_interval=Interwał pamięci podręcznej
+config.cache_conn=Połączenie z pamięcią podręczną
+config.session_config=Konfiguracja sesji
+config.session_provider=Dostawca sesji
+config.provider_config=Konfiguracja dostawcy
+config.cookie_name=Nazwa ciasteczka
+config.enable_set_cookie=Włącz ciasteczka
+config.gc_interval_time=Interwał odśmiecania
+config.session_life_time=Czas życia sesji
+config.https_only=Tylko HTTPS
+config.cookie_life_time=Czas życia ciasteczka
+config.picture_config=Ustawienia obrazów
+config.picture_service=Serwis obrazów
+config.disable_gravatar=Wyłącz Gravatara
+config.log_config=Konfiguracja dziennika
+config.log_mode=Tryb dziennika
+
+monitor.cron=Zadania cron
+monitor.name=Nazwa
+monitor.schedule=Harmonogram
+monitor.next=Następny czas
+monitor.previous=Poprzedni czas
+monitor.execute_times=Czas wykonania
+monitor.process=Procesy
+monitor.desc=Opis
+monitor.start=Czas rozpoczęcia
+monitor.execute_time=Czas wykonania
+
+notices.system_notice_list=Powiadomienia systemu
+notices.type=Typ
+notices.type_1=Repozytorium
+notices.desc=Opis
+notices.op=Op.
+notices.delete_success=Powiadomienia systemowe zostały usunięte pomyślnie.
+
+[action]
+create_repo=utworzono repozytorium <a href="%s"> %s</a>
+rename_repo=nazwa repozytorium zmieniona z <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
+commit_repo=wypchnął do <a href="%[1]s/src/%[2]s">%[3]s</a> w <a href="%[1]s"> %[4]s</a>
+create_issue=`zgłosił problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
+create_pull_request="stworzył pull request <a href="%s/pulls/%s"> %s #%[2]s"</a>
+comment_issue=`skomentował problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
+merge_pull_request=scalił pull request <a href="%s/pulls/%s"> %s #%[2]s"</a>
+transfer_repo=przeniósł repozytorium <code>%s</code> do <a href="%s">%s</a>
+push_tag=opublikował tag <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
+compare_2_commits=Zobacz porównanie tych 2 commitów
+
+[tool]
+ago=temu
+from_now=od teraz
+now=teraz
+1s=1 sekundę %s
+1m=1 minutę %s
+1h=1 godzinę %s
+1d=1 dzień %s
+1w=1 tydzień %s
+1mon=1 miesiąc %s
+1y=1 rok %s
+seconds=%d sekund %s
+minutes=%d minut %s
+hours=%d godzin %s
+days=%d dni %s
+weeks=%d tygodni %s
+months=%d miesięcy %s
+years=%d lat %s
+raw_seconds=sekund
+raw_minutes=minut
+
+[dropzone]
+default_message=Upuść pliki tutaj lub kliknij, aby przesłać.
+invalid_input_type=Nie można przesłać plików tego typu.
+file_too_big=Rozmiar pliku ({{filesize}} MB) przekracza rozmiar maksymalny ({{maxFilesize}} MB).
+remove_file=Usuń plik
+

+ 1009 - 992
conf/locale/locale_pt-BR.ini

@@ -1,992 +1,1009 @@
-app_desc=Um serviço de Git auto-hospedado e amigável escrito em Go
-
-home=Página Inicial
-dashboard=Painel de controle
-explore=Explorar
-help=Ajuda
-sign_in=Entrar
-sign_out=Sair
-sign_up=Cadastrar
-register=Registrar
-website=Site
-version=Versão
-page=Página
-template=Modelo
-language=Idioma
-create_new=Criar...
-user_profile_and_more=Perfil do usuário e configurações
-signed_in_as=Você é
-
-username=Usuário
-email=E-mail
-password=Senha
-re_type=Redigite
-captcha=Captcha
-
-repository=Repositório
-organization=Organização
-mirror=Espelho
-new_repo=Novo Repositório
-new_migrate=Nova Migração
-new_fork=Novo Fork de Repositório
-new_org=Nova Organização
-manage_org=Gerenciar Organizações
-admin_panel=Painel do Administrador
-account_settings=Configurações da Conta
-settings=Configurações
-your_profile=Seu perfil
-your_settings=Suas configurações
-
-news_feed=Feed de Notícias
-pull_requests=Solicitações de Pull
-issues=Problemas
-
-cancel=Cancelar
-
-[search]
-search=Pesquisar...
-repository=Repositório
-user=Usuário
-issue=Problema
-code=Código
-
-[install]
-install=Instalação
-title=Etapas de instalação para Primeira Execução
-docker_helper=Se você está rodando o Gogs dentro do Docker, por favor leia os <a target="_blank" href="%s">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!
-requite_db_desc=Gogs requer MySQL, PostgreSQL, SQLite3 ou TiDB.
-db_title=Configurações de Banco de Dados
-db_type=Tipo do Banco de Dados
-host=Host
-user=Usuário
-password=Senha
-db_name=Nome do Banco de Dados
-db_helper=Por favor, use o mecanismo INNODB com o conjunto de caracteres utf8_general_ci para MySQL.
-ssl_mode=Modo SSL
-path=Caminho
-sqlite_helper=O caminho do arquivo do banco de dados SQLite3 ou TiDB.
-err_empty_db_path=O Caminho do banco de dados SQLite3 ou TiDB não pode ser vazio.
-err_invalid_tidb_name=Nome do banco de dados TiDB não permite os caracteres "." e "-".
-no_admin_and_disable_registration=Você não pode desabilitar o registro sem criar uma conta de administrador.
-err_empty_admin_password=A senha de administrador não pode ser vazia.
-
-general_title=Configurações Gerais do Gogs
-app_name=Nome do Aplicativo
-app_name_helper=Coloque o nome da sua organização aqui!
-repo_path=Caminho da Raiz do Repositório
-repo_path_helper=Todos os repositórios remotos do Git serão salvos neste diretório.
-run_user=Executar Usuário
-run_user_helper=O usuário deve ter acesso ao caminho raiz do repositório e executar o Gogs
-domain=Domínio
-domain_helper=Isto afeta URLs para clonagem via SSH.
-ssh_port=Porta SSH
-ssh_port_helper=Número da porta que seu servidor SSH está usando, deixe vazio para desativar o recurso SSH.
-http_port=Porta HTTP
-http_port_helper=Número da porta em que a aplicação irá executar.
-app_url=URL do Aplicativo
-app_url_helper=Isto afeta a URL de clonagem via HTTP/HTTPs e também o email.
-
-optional_title=Configurações Opcionais
-email_title=Configurações do Serviço de E-mail
-smtp_host=Host SMTP
-smtp_from=De	
-smtp_from_helper=O endereço de email deve atender a especificação RFC 5322. O formato deve ser um email ou  "Nome" <email@example.com>.
-mailer_user=E-mail do Remetente
-mailer_password=Senha do Remetente
-register_confirm=Habilitar Confirmação de Registro
-mail_notify=Habilitar Notificação de Correio
-server_service_title=Configurações de Servidor e Outros Serviços
-offline_mode=Ativar Modo Offline
-offline_mode_popup=Desative o CDN mesmo em modo de produção, todos os recursos serão disponibilizados localmente.
-disable_gravatar=Desativar Serviço Gravatar
-disable_gravatar_popup=Desabilitar o Gravatar e fontes personalizadas, todos os avatares são enviados por usuários ou padrão.
-disable_registration=Desativar auto-registro
-disable_registration_popup=Desativar o auto-registro de usuário, para que somente o administrador possa criar contas.
-enable_captcha=Habilitar Captcha
-enable_captcha_popup=Obrigar validação por captcha para auto-registro de usuários.
-require_sign_in_view=Requerer login para a visualização de páginas
-require_sign_in_view_popup=Somente usuários autenticados podem ver todas as páginas, visitantes somente podem entrar ou se cadastrar.
-admin_setting_desc=Você não precisa criar uma conta de administrador agora, no entanto o primeiro usuário (ID=1) automaticamente terá acesso de administrador.
-admin_title=Configurações da Conta de Administrador
-admin_name=Nome de Usuário
-admin_password=Senha
-confirm_password=Confirmar Senha
-admin_email=E-mail
-install_gogs=Instalar Gogs
-test_git_failed=Falha ao testar o comando 'git': %v
-sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o download da versão binária oficial em %s, NÃO da versão gobuild.
-invalid_db_setting=Configuração do banco de dados não está correta: %v
-invalid_repo_path=A raiz do repositório é inválida: %v
-run_user_not_match=O usuário da execução não é o usuário atual: %s -> %s
-save_config_failed=Falha ao salvar a configuração: %v
-invalid_admin_setting=Configuração da conta de administrador está inválida: %v
-install_success=Bem-vindo! Estamos contentes que você escolheu o Gogs, divirta-se e tenha cuidado.
-
-[home]
-uname_holder=Nome de Usuário ou E-mail
-password_holder=Senha
-switch_dashboard_context=Trocar Contexto do Painel de Controle
-my_repos=Meus Repositórios
-collaborative_repos=Repositórios Colaborativos
-my_orgs=Minhas Organizações
-my_mirrors=Meus Espelhos
-view_home=Ver %s
-
-issues.in_your_repos=Em seus repositórios
-
-[explore]
-repos=Repositórios
-
-[auth]
-create_new_account=Criar Nova Conta
-register_hepler_msg=Já tem uma conta? Entre agora!
-social_register_hepler_msg=Já tem uma conta? Junte-se agora!
-disable_register_prompt=Desculpe, novos registros estão desabilitados. Por favor entre em contato com o administrador do site.
-disable_register_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
-remember_me=Lembrar de Mim
-forgot_password=Esqueci a Senha
-forget_password=Esqueceu a senha?
-sign_up_now=Precisa de uma conta? Cadastre-se agora.
-confirmation_mail_sent_prompt=Um novo e-mail de confirmação foi enviado para <b>%s</b>, por favor, verifique sua caixa de entrada nas próximas %d horas para completar seu registro.
-sign_in_to_account=Entre com sua conta
-active_your_account=Ativar Sua Conta
-resent_limit_prompt=Desculpe, você está enviando um e-mail de ativação com muita frequência. Por favor, aguarde 3 minutos.
-has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (<b>%s</b>). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
-resend_mail=Clique aqui para reenviar seu e-mail de ativação
-email_not_associate=Este endereço de e-mail não é associado à nenhuma conta.
-send_reset_mail=Clique aqui para (re)enviar seu e-mail de redefinição da senha
-reset_password=Redefinir Sua Senha
-invalid_code=Desculpe, seu código de confirmação expirou ou não é válido.
-reset_password_helper=Clique aqui para redefinir sua senha
-password_too_short=O comprimento da senha não pode ser menor que 6.
-
-[mail]
-activate_account=Por favor, ative sua conta
-activate_email=Verifique seu endereço de e-mail
-reset_password=Resetar sua senha
-register_success=Registrado com sucesso. Bem vindo
-
-[modal]
-yes=Sim
-no=Não
-modify=Alterar
-
-[form]
-UserName=Nome de usuário
-RepoName=Nome do repositório
-Email=Endereço de e-mail
-Password=Senha
-Retype=Redigite a senha
-SSHTitle=Nome da chave SSH
-HttpsUrl=URL HTTPS
-PayloadUrl=URL de carga
-TeamName=Nome da equipe
-AuthName=Nome de autorização
-AdminEmail=E-mail do Administrador
-
-require_error=` não pode estar vazio.`
-alpha_dash_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
-alpha_dash_dot_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
-size_error='deve ser o tamanho %s.'
-min_size_error=` deve conter pelo menos %s caracteres.`
-max_size_error=` deve conter no máximo %s caracteres.`
-email_error=` não é um endereço de e-mail válido.`
-url_error=`não é uma URL válida.`
-unknown_error=Erro desconhecido:
-captcha_incorrect=O captcha não correspondeu.
-password_not_match=Senha e confirmação da senha não são as mesmas.
-
-username_been_taken=Nome de usuário já foi tomado.
-repo_name_been_taken=Nome do repositório já foi tomado.
-org_name_been_taken=Nome da organização já foi tomado.
-team_name_been_taken=Nome da equipe já foi tomado.
-email_been_used=Endereço de e-mail já foi usado.
-illegal_team_name=O nome da equipe contém caracteres não permitidos.
-username_password_incorrect=Usuário ou senha incorretos.
-enterred_invalid_repo_name=Por favor certifique-se que informou o nome do repositório corretamente.
-enterred_invalid_owner_name=Por favor, verifique se o nome do proprietário está correto.
-enterred_invalid_password=Por favor, verifique se a senha que você digitou está correta.
-user_not_exist=O usuário informado não existe.
-last_org_owner=O usuário a ser removido é o último membro na equipe de proprietários. Deve haver um outro proprietário.
-
-invalid_ssh_key=Desculpe, não conseguimos verificar a sua chave SSH: %s
-unable_verify_ssh_key=Gogs não pode verificar sua chave SSH, mas assumimos que é válida, por favor, verifique a chave pessoalmente.
-auth_failed=A autenticação falhou: %v
-
-still_own_repo=Sua conta ainda tem propriedade do repositório, você tem que excluir ou transferí-la primeiro.
-still_has_org=Sua conta ainda faz parte da organização, você deve sair ou excluí-la primeiro.
-org_still_own_repo=Esta organização ainda tem a propriedade do repositório, você deve excluir ou transferí-la primeiro.
-
-still_own_user=Esta autenticação ainda é usada por alguns usuários, você deve movê-los e depois apagar novamente.
-
-target_branch_not_exist=O branch de destino não existe.
-
-[user]
-change_avatar=Altere o seu avatar em gravatar.com
-change_custom_avatar=Altere seu avatar nas configurações
-join_on=Inscreveu-se em
-repositories=Repositórios
-activity=Atividade Pública
-followers=Seguidores
-starred=Favorito
-following=Seguindo
-
-form.name_reserved=O nome de usuário '%s' não pode ser usado.
-form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de usuário.
-
-[settings]
-profile=Perfil
-password=Senha
-ssh_keys=Chaves SSH
-social=Contas Sociais
-applications=Aplicativos
-orgs=Organizações
-delete=Deletar Conta
-uid=Uid
-
-public_profile=Perfil Público
-profile_desc=Seu endereço de E-mail é publico e será usado para qualquer notificação relacionada à conta, e qualquer operação na web feita através do site.
-full_name=Nome Completo
-website=Site
-location=Localização
-update_profile=Atualizar o Perfil
-update_profile_success=O seu perfil foi atualizado com sucesso.
-change_username=Nome de Usuário Alterado
-change_username_prompt=Essa alteração afetará os links para a sua conta.
-continue=Continuar
-cancel=Cancelar
-
-enable_custom_avatar=Habilitar Avatar Customizado
-enable_custom_avatar_helper=Habilite para desativar a busca no Gravatar
-choose_new_avatar=Escolha um novo avatar
-update_avatar=Atualizar configuração de Avatar
-uploaded_avatar_not_a_image=O arquivo enviado não é uma imagem.
-no_custom_avatar_available=Nenhum avatar personalizado disponível, não pode habilitá-lo.
-update_avatar_success=Sua configuração de avatar foi atualizada com sucesso.
-
-change_password=Mudança de senha
-old_password=Senha Atual
-new_password=Nova Senha
-retype_new_password=Digite novamente a nova senha
-password_incorrect=A senha atual não está correta.
-change_password_success=A senha está alterada com sucesso. Você pode agora entrar com a senha nova.
-
-emails=Endereços de E-mail
-manage_emails=Gerenciar endereços de e-mail
-email_desc=Seu endereço de e-mail principal será usado para notificações e outras operações.
-primary=Principal
-primary_email=Definir como principal
-delete_email=Deletar
-email_deletion=Exclusão do email
-email_deletion_desc=Ao Excluir este endereço de e-mail será removido informações relacionadas com a sua conta. Você deseja continuar?
-email_deletion_success=O E-mail foi excluído com sucesso!
-add_new_email=Adicionar novo endereço de e-mail
-add_email=Adicionar e-mail
-add_email_confirmation_sent=Um novo e-mail de confirmação foi enviado para '%s'. Por favor, verifique sua Caixa de Entrada dentro das próximas %d horas, para concluir o processo de confirmação.
-add_email_success=Seu novo endereço de E-mail foi adicionado com sucesso.
-
-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>.
-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.
-key_name=Nome da Chave
-key_content=Conteúdo
-add_key_success=A nova chave pública '%s' foi adicionada com sucesso!
-delete_key=Deletar
-ssh_key_deletion=Exclusão da chave de SSH
-ssh_key_deletion_desc=Ao Excluir esta chave de SSH será removido todos os acessos para sua conta. Você deseja continuar?
-ssh_key_deletion_success=A chave de SSH foi excluída com sucesso!
-add_on=Adicionado em
-last_used=Última vez usado em
-no_activity=Nenhuma atividade recente
-key_state_desc=Usada a pelo menos 7 dias
-token_state_desc=Este token é usado em pelo menos 7 dias
-
-manage_social=Gerenciar Contas Sociais Associadas
-social_desc=Esta é uma lista de contas sociais. Remova qualquer ligação que você não reconheça.
-unbind=Desvincular
-unbind_success=A conta social foi desvinculada.
-
-manage_access_token=Gerenciar Tokens de Acesso Pessoal
-generate_new_token=Gerar novo Token
-tokens_desc=Tokens gerados por você que podem ser usados para acessar a API do Gogs.
-new_token_desc=Por enquanto, todo token terá acesso completo à sua conta.
-token_name=Nome do Token
-generate_token=Gerar Token
-generate_token_succees=Novo token de acesso gerado com sucesso! Certifique-se de copiar seu novo token de acesso pessoal agora. Você não poderá vê-lo novamente!
-delete_token=Excluir
-access_token_deletion=Exclusão do Token de acesso pessoal
-access_token_deletion_desc=Ao Excluir este token de acesso pessoal será removido todos os acessos do aplicativo. Você deseja continuar?
-delete_token_success=O Token de acesso pessoal foi removido com sucesso! Não se esqueça de atualizar seus aplicativos também.
-
-delete_account=Deletar Sua Conta
-delete_prompt=A operação deletará sua conta permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
-confirm_delete_account=Confirmar Deleção
-delete_account_title=Deleção da Conta
-delete_account_desc=Esta conta será deletada permanentemente, você quer continuar?
-
-[repo]
-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_fork_helper=(A alteração desse valor irá afetar todos os forks)
-fork_repo=Fork o Repositório
-fork_from=Fork de
-fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório forkado.
-repo_desc=Descrição
-repo_lang=Linguagem
-repo_lang_helper=Selecione arquivos .gitignore
-license=Licença
-license_helper=Selecione um arquivo de licença
-readme=Leia-me
-readme_helper=Selecione um modelo de leia-me
-auto_init=Inicializar este repositório com os arquivos selecionados e modelo
-create_repo=Criar Repositório
-default_branch=Branch padrão
-mirror_interval=Intervalo de Espelho (hora)
-
-form.name_reserved=O nome de repositório '%s' não pode ser usado.
-form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de repositório.
-
-need_auth=Precisa de Autorização
-migrate_type=Tipo de Migração
-migrate_type_helper=Este repositório será um <span class="text blue"> espelho</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 ou um caminho de diretório local.
-migrate.invalid_local_path=Caminho local inválido, não existe ou não é um diretório.
-
-forked_from=forkado de
-fork_from_self=Você não pode criar fork de um repositório que já é seu!
-copy_link=Copiar
-copy_link_success=Copiado!
-copy_link_error=Pressione ⌘-C ou Ctrl-C para copiar
-click_to_copy=Copiar para a área de transferência
-copied=Copiado com sucesso
-clone_helper=Precisa de ajuda com a clonagem? Visite a <a target="_blank" href="%s">Ajuda</a>!
-unwatch=Deixar de Observar
-watch=Observar
-unstar=Remover favorito
-star=Favorito
-fork=Fork
-
-no_desc=Nenhuma Descrição
-quick_guide=Guia Rápido
-clone_this_repo=Clonar este repositório
-create_new_repo_command=Criar um novo repositório na linha de comando
-push_exist_repo=Push um repositório existente na linha de comando
-repo_is_empty=Este repositório está vazio, por favor volte mais tarde!
-
-
-branch=Branch
-tree=Árvore
-branch_and_tags=Branches & Tags
-branches=Branches
-tags=Tags
-issues=Problemas
-pulls=Pull Requests
-labels=Etiquetas
-milestones=Marcos
-commits=Commits
-releases=Versões
-file_raw=Cru
-file_history=Histórico
-file_view_raw=Ver cru
-file_permalink=Link permanente
-
-commits.commits=Commits
-commits.search=Pesquisar commits
-commits.find=Buscar
-commits.author=Autor
-commits.message=Mensagem
-commits.date=Data
-commits.older=Mais Antigo
-commits.newer=Mais Novo
-
-issues.new=Novo problema
-issues.new.labels=Etiquetas
-issues.new.no_label=Sem etiqueta
-issues.new.clear_labels=Limpar
-issues.new.milestone=Marco
-issues.new.no_milestone=Sem marco
-issues.new.clear_milestone=Limpar
-issues.new.open_milestone=Marcos abertos
-issues.new.closed_milestone=Marcos fechados
-issues.new.assignee=Responsável
-issues.new.clear_assignee=Limpar
-issues.new.no_assignee=Não atribuída
-issues.create=Salvar
-issues.new_label=Nova etiqueta
-issues.new_label_placeholder=Nome da etiqueta...
-issues.create_label=Salvar
-issues.open_tab=%d aberto
-issues.close_tab=%d fechados
-issues.filter_label=Etiqueta
-issues.filter_label_no_select=Nenhuma etiqueta selecionada
-issues.filter_milestone=Marco
-issues.filter_milestone_no_select=Nenhum marco selecionado
-issues.filter_assignee=Atribuído
-issues.filter_assginee_no_select=Sem atribuição
-issues.filter_type=Tipo
-issues.filter_type.all_issues=Todos os problemas
-issues.filter_type.assigned_to_you=Atribuídos a você
-issues.filter_type.created_by_you=Criado por você
-issues.filter_type.mentioning_you=Mencionando você
-issues.filter_sort=Ordenação
-issues.filter_sort.latest=Mais novos
-issues.filter_sort.oldest=Mais antigos
-issues.filter_sort.recentupdate=Mais recentemente atualizados
-issues.filter_sort.leastupdate=Menos recentemente atualizados
-issues.filter_sort.mostcomment=Mais comentados
-issues.filter_sort.leastcomment=Menos comentados
-issues.opened_by=%[1]s foi aberto por <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=aberto %[1]s por %[2]s
-issues.previous=Página anterior
-issues.next=Próxima página
-issues.open_title=aberto
-issues.closed_title=fechado
-issues.num_comments=%d comentários
-issues.commented_at=`comentado <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=Nenhum conteúdo textual.
-issues.close_issue=Fechar
-issues.close_comment_issue=Comentar e fechar
-issues.reopen_issue=Reabrir
-issues.reopen_comment_issue=Reabrir e comentar
-issues.create_comment=Comentar
-issues.closed_at=`fechado em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reaberto em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`citou este problema em um commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Autor
-issues.admin=Administrador
-issues.owner=Proprietário
-issues.sign_up_for_free=Cadastre-se gratuitamente
-issues.sign_in_require_desc=para participar nesta conversa. Já tem uma conta? <a href="%s">Faça login para comentar</a>
-issues.edit=Editar
-issues.cancel=Cancelar
-issues.save=Salvar
-issues.label_title=Nome da etiqueta
-issues.label_color=Cor da etiqueta
-issues.label_count=%d etiquetas
-issues.label_open_issues=%d problemas abertos
-issues.label_edit=Editar
-issues.label_delete=Excluir
-issues.label_modify=Alteração de etiqueta
-issues.label_deletion=Exclusão de etiqueta
-issues.label_deletion_desc=Excluir uma etiqueta a retirará de todos os problemas que ela estiver marcando. Quer mesmo continuar?
-issues.label_deletion_success=A etiqueta foi excluída com sucesso!
-
-pulls.compare_changes=Comparar mudanças
-pulls.compare_changes_desc=Comparar os dois branches e criar pull request com as mudanças.
-pulls.compare_base=base
-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.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
-pulls.tab_conversation=Conversação
-pulls.tab_commits=Commits
-pulls.tab_files=Arquivos alterados
-pulls.reopen_to_merge=Por favor reabra esse pull request para executar a operação de mescla.
-pulls.merged=Merge realizado
-pulls.has_merged=Este pull request foi mesclado com sucesso!
-pulls.data_broken=Dados deste pull request foram quebrados devido à deleção de informação do fork.
-pulls.is_checking=A verificação do conflito ainda está em progresso, por favor recarregue a página em instantes.
-pulls.can_auto_merge_desc=Você pode realizar uma auto-mescla neste pull request.
-pulls.cannot_auto_merge_desc=Você não pode realizar uma auto-mescla porque há conflitos entre os commits.
-pulls.cannot_auto_merge_helper=Por favor, utilize linha de comando para solucionar isto.
-pulls.merge_pull_request=Merge Pull Request
-pulls.open_unmerged_pull_exists=' Você não pode executar a operação de reabrir porque já existe uma solicitação de pull aberta (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.'
-
-milestones.new=Novo marco
-milestones.open_tab=%d abertos
-milestones.close_tab=%d fechados
-milestones.closed=Fechado %s
-milestones.no_due_date=Sem prazo
-milestones.open=Reabrir
-milestones.close=Fechar
-milestones.new_subheader=Crie marcos para gerenciar seus problemas.
-milestones.create=Salvar marco
-milestones.title=Título
-milestones.desc=Descrição
-milestones.due_date=Prazo (opcional)
-milestones.clear=Limpar
-milestones.invalid_due_date_format=Formato inválido. O valor de data deve ser algo como 'aaaa-mm-dd'.
-milestones.create_success=O marco '%s' foi configurado com sucesso!
-milestones.edit=Edição de marco
-milestones.edit_subheader=Descreva bem a proposta do marco, assim as pessoas não ficarão confusas.
-milestones.cancel=Cancelar
-milestones.modify=Salvar alterações
-milestones.edit_success=O marco '%s' foi alterado com sucesso!
-milestones.deletion=Exclusão de marco
-milestones.deletion_desc=Excluir este marco removerá a informação dele em todos os problemas aos quais estiver associado. Você quer mesmo continuar?
-milestones.deletion_success=Marco excluído com sucesso!
-
-settings=Configurações
-settings.options=Opções
-settings.collaboration=Colaboração
-settings.hooks=Webhooks
-settings.githooks=Hooks do Git
-settings.basic_settings=Configurações Básicas
-settings.danger_zone=Zona de Perigo
-settings.site=Site Oficial
-settings.update_settings=Configurações de Atualização
-settings.change_reponame_prompt=Este mudanças vai afetar os links para este repositório.
-settings.transfer=Transferir Propriedade
-settings.transfer_desc=Transferir este repositório para outro usuário ou para uma organização onde você tem direitos de administrador.
-settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
-settings.delete=Deletar Este Repositório
-settings.delete_desc=Uma vez que você deleta um repositório, não tem volta. Por favor, tenha certeza.
-settings.transfer_notices_1=- Você vai perder acesso se o novo dono for um usuário individual.
-settings.transfer_notices_2=- Você vai continuar tendo acesso se o novo dono é uma organização e você é um dos membros.
-settings.transfer_form_title=Informe a seguinte informação para confirmar a sua operação:
-settings.delete_notices_1=-Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
-settings.delete_notices_2=- Esta operação irá apagar permanentemente o tudo deste repositório, incluindo os dados do Git, problemas, comentários e acessos dos colaboradores.
-settings.delete_notices_fork_1=- Se este repositório é público, todos os forks se tornarão independentes após a deleção.
-settings.delete_notices_fork_2=- Se este repositório é privado, todos os forks serão removidos imediatamente.
-settings.delete_notices_fork_3=- Se você deseja manter todos os forks, por favor muda a visibilidade do repositório para pública primeiro.
-settings.update_settings_success=As opções do repositório foram atualizadas com sucesso.
-settings.transfer_owner=Novo Dono
-settings.make_transfer=Fazer Transferência
-settings.transfer_succeed=A posse do repositório foi transferido com sucesso.
-settings.confirm_delete=Confirmar Deleção
-settings.add_collaborator=Adicionar um Novo Colaborador
-settings.add_collaborator_success=O novo colaborador foi adicionado.
-settings.remove_collaborator_success=O colaborador foi removido.
-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 Gogs. 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" href="%s"> Guia de Webhooks</a>.
-settings.webhook_deletion=Deletar Webhook
-settings.webhook_deletion_desc=Deletar este Webhook vai remover sua informação e todo o histórico de entrega. Deseja continuar?
-settings.webhook_deletion_success=Webhook deletado com sucesso!
-settings.webhook.request=Solicitação
-settings.webhook.response=Resposta
-settings.webhook.headers=Cabeçalhos
-settings.webhook.payload=Payload
-settings.webhook.body=Texto
-settings.githooks_desc=Hooks do Git são ofertados pelo próprio Git, você pode editar arquivos de hooks suportados na lista abaixo para aplicar operações personalizadas.
-settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo será apresentado. Deixar o conteúdo em branco irá desativar esse hook.
-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" href="%s">Webhooks Guide</a>.
-settings.payload_url=URL de carga
-settings.content_type=Tipo de Conteúdo
-settings.secret=Secreto
-settings.slack_username=Nome de usuário
-settings.slack_icon_url=URL do ícone
-settings.slack_color=Cor
-settings.event_desc=Quais eventos você gostaria de acionar a esse webhook?
-settings.event_push_only=Apenas o evento <code>push</code>.
-settings.event_send_everything=Preciso de <strong>tudo</strong>.
-settings.event_choose=Deixe-me escolher o que eu preciso.
-settings.event_create=Criar
-settings.event_create_desc=Branch ou Tag criado
-settings.event_push=Push
-settings.event_push_desc=Git push para o repositório
-settings.active=Ativar
-settings.active_helper=Enviaremos detalhes do evento quando este hook for acionado.
-settings.add_hook_success=Novos hooks de web foram adicionados.
-settings.update_webhook=Atualizar Webhook
-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.slack_token=Token
-settings.slack_domain=Domínio
-settings.slack_channel=Canal
-settings.deploy_keys=Chaves de Deploy
-settings.add_deploy_key=Nova chave
-settings.no_deploy_keys=Você ainda não adicionou chaves para implantação de software.
-settings.title=Título
-settings.deploy_key_content=Conteúdo da chave
-settings.key_been_used=Uma chave de implantação com esse mesmo conteúdo já está em uso.
-settings.key_name_used=Uma chave de implantação já existe com esse com mesmo nome.
-settings.add_key_success=A nova chave de implantação '%s' foi adicionada com sucesso!
-settings.deploy_key_deletion=Exclusão de chave de deploy
-settings.deploy_key_deletion_desc=Excluir esta chave de implantação removerá permissões de acesso a este repositório. Quer mesmo continuar?
-settings.deploy_key_deletion_success=Chave de implantação excluída com sucesso!
-
-diff.browse_source=Ver Código Fonte
-diff.parent=pai
-diff.commit=commit
-diff.data_not_available=Dados de Diff não disponíveis.
-diff.show_diff_stats=Mostrar estatísticas do Diff
-diff.stats_desc=<strong> %d arquivos alterados</strong> com <strong>%d adições</strong> e <strong>%d exclusões</strong>
-diff.bin=BIN
-diff.view_file=Ver Arquivo
-
-release.releases=Versões
-release.new_release=Nova Versão
-release.draft=Rascunho
-release.prerelease=Versão Prévia
-release.stable=Estável
-release.edit=editar
-release.ahead=<strong>%d</strong> commits para %s depois desta versão
-release.source_code=Código fonte
-release.tag_name=Nome da tag
-release.target=Destino
-release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
-release.release_title=Título da Versão
-release.content_with_md=Conteúdo com <a href="%s">Markdown</a>
-release.write=Escrever
-release.preview=Visualizar
-release.content_placeholder=Escreva algum conteúdo
-release.loading=Carregando...
-release.prerelease_desc=Esta é uma versão prévia
-release.prerelease_helper=Vou salientar que esta versão é identificada como não pronta para produção.
-release.publish=Publicar Versão
-release.save_draft=Salvar Rascunho
-release.edit_release=Editar Versão
-release.tag_name_already_exist=Já existiu versão com esse nome de tag.
-
-[org]
-org_name_holder=Nome da Organização
-org_name_helper=Nomes de grandes organizações são curtos e memoráveis.
-create_org=Criar Organização
-repo_updated=Atualizado
-people=Pessoas
-invite_someone=Convidar Alguém
-teams=Equipes
-lower_members=membros
-lower_repositories=repositórios
-create_new_team=Criar Nova Equipe
-org_desc=Descrição
-team_name=Nome da Equipe
-team_desc=Descrição
-team_name_helper=Você usará este nome para mencionar esta equipe em conversas.
-team_desc_helper=Do que trata essa equipe?
-team_permission_desc=Que nível de permissão esta equipe deve ter?
-
-form.name_reserved=O nome de organização '%s' não pode ser usado.
-form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de organização.
-
-settings=Configurações
-settings.options=Opções
-settings.full_name=Nome Completo
-settings.website=Site
-settings.location=Localização
-settings.update_settings=Atualizar Configurações
-settings.update_setting_success=Configuração da organização atualizada com sucesso.
-settings.change_orgname_prompt=Esta mudança vai afetar os links para esta organização.
-settings.update_avatar_success=A configuração de avatar da organização foi atualizado com sucesso.
-settings.delete=Deletar Organização
-settings.delete_account=Deletar Esta Organização
-settings.delete_prompt=A operação deletará esta organização permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
-settings.confirm_delete_account=Confirmar Deleção
-settings.delete_org_title=Deleção da Organização
-settings.delete_org_desc=Esta organização será deletada permanentemente, você quer continuar?
-settings.hooks_desc=Adicionar Webhooks que serão acionados para <strong>todos os repositórios</strong> dessa organização.
-
-members.public=Público
-members.public_helper=tornar privado
-members.private=Privado
-members.private_helper=torar público
-members.owner=Dono
-members.member=Membro
-members.conceal=Ocultar
-members.remove=Remover
-members.leave=Sair
-members.invite_desc=Comece digitando um nome de usuário para convidá-lo como novo membro para %s:
-members.invite_now=Convidar Agora
-
-teams.join=Juntar-se
-teams.leave=Deixar
-teams.read_access=Acesso de Leitura
-teams.read_access_helper=Esta equipe poderá ver e clonar os repositórios dela.
-teams.write_access=Acesso de Escrita
-teams.write_access_helper=Esta equipa será capaz de ler os seus repositórios, bem como fazer push para eles.
-teams.admin_access=Acesso do Administrador
-teams.admin_access_helper=Esta equipe será capaz de fazer push/pull em seus repositórios, bem como adicionar-lhes outros colaboradores.
-teams.no_desc=Esta equipe não tem descrição
-teams.settings=Configurações
-teams.owners_permission_desc=Donos tem acesso total a <strong>todos repositórios</strong> e também <strong>direitos de administrador</strong> para a organização.
-teams.members=Membros da Equipe
-teams.update_settings=Atualizar Configurações
-teams.delete_team=Deletar Esta Equipe
-teams.add_team_member=Adicionar Membro da Equipe
-teams.delete_team_title=Deleção da Equipe
-teams.delete_team_desc=Este equipe será deletada, você quer continuar? Membros desta equipe poderão perder acesso a alguns repositórios.
-teams.delete_team_success=A equipe dada foi deletada com sucesso.
-teams.read_permission_desc=Essa equipe concede acesso para <strong>Leitura</strong>: membros podem ver e clonar os repositórios da equipe.
-teams.write_permission_desc=Esta equipe concede acesso para <strong>escrita</strong>: Membros podem ler e fazer push para os repositórios da equipe.
-teams.admin_permission_desc=Esta equipe concede acesso de <strong>Administrador</strong>: Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
-teams.repositories=Repositórios da Equipe
-teams.add_team_repository=Adicionar Repositório da Equipe
-teams.remove_repo=Remover
-teams.add_nonexistent_repo=O repositório que você está tentando adicionar não existe, por favor, crie-o primeiro.
-
-[admin]
-dashboard=Painel de controle
-users=Usuários
-organizations=Organizações
-repositories=Repositórios
-authentication=Autenticações
-config=Configuração
-notices=Sistema de notificações
-monitor=Monitoramento
-first_page=Primeira
-last_page=Última
-total=Total: %d
-
-dashboard.statistic=Estatística
-dashboard.operations=Operações
-dashboard.system_status=Status do Monitor de Sistema
-dashboard.statistic_info=O banco de dados do Gogs contém <b>%d</b> usuários, <b>%d</b> organizações, <b>%d</b> chaves públicas, <b>%d</b> repositórios, <b>%d</b> observadores, <b>%d</b> estrelas, <b>%d</b> ações, <b>%d</b> acessos, <b>%d</b> questões, <b>%d</b> comentários, <b>%d</b> contas sociais, <b>%d</b> seguidores, <b>%d</b> espelhos, <b>%d</b> versões, <b>%d</b>  origens de login, <b>%d</b> Hooks da Web, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> tarefas hook, <b>%d</b> equipes, <b>%d</b> tarefas de atualização, <b>%d</b> anexos.
-dashboard.operation_name=Nome da Operação
-dashboard.operation_switch=Trocar
-dashboard.operation_run=Executar
-dashboard.clean_unbind_oauth=Limpar OAuthes não acoplados
-dashboard.clean_unbind_oauth_success=Todos OAuthes desvinculados foram excluídos com sucesso.
-dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
-dashboard.delete_inactivate_accounts_success=Todas as contas inativas foram excluídas com sucesso.
-dashboard.delete_repo_archives=Excluir todos os arquivos dos repositórios
-dashboard.delete_repo_archives_success=Todos os arquivos dos repositórios foram excluídos com sucesso.
-dashboard.git_gc_repos=Fazer coleta de lixo nos repositórios
-dashboard.git_gc_repos_success=Em todos repositórios, a coleta de lixo foi realizada com sucesso.
-dashboard.resync_all_sshkeys=Reescrever o arquivo '.ssh/authorized_keys' (atenção: chaves que não sejam do Gogs serão perdidas)
-dashboard.resync_all_sshkeys_success=Todas as chaves públicas foram reescritas com sucesso.
-dashboard.resync_all_update_hooks=Reescrever todos os hooks de atualização dos repositórios (necessário quando o caminho de configuração customizado é alterado)
-dashboard.resync_all_update_hooks_success=Os hooks de atualização de todos os repositórios foram reescritos com sucesso.
-
-dashboard.server_uptime=Servidor Ligado
-dashboard.current_goroutine=Goroutines Atuais
-dashboard.current_memory_usage=Uso de Memória Atual
-dashboard.total_memory_allocated=Total de Memória Alocada
-dashboard.memory_obtained=Memória Obtida
-dashboard.pointer_lookup_times=Nº de Consultas a Ponteiros
-dashboard.memory_allocate_times=Nº de Alocações de Memória
-dashboard.memory_free_times=Nº de Liberações de Memória
-dashboard.current_heap_usage=Uso Atual da Heap
-dashboard.heap_memory_obtained=Memória de Heap Obtida
-dashboard.heap_memory_idle=Memória da Heap Ociosa
-dashboard.heap_memory_in_use=Memória da Heap em Uso
-dashboard.heap_memory_released=Memória da Heap Liberada
-dashboard.heap_objects=Objetos na Heap
-dashboard.bootstrap_stack_usage=Uso de Pilha Bootstrap
-dashboard.stack_memory_obtained=Memória de Pilha Obtida
-dashboard.mspan_structures_usage=Uso de Estruturas de MSpan
-dashboard.mspan_structures_obtained=Estruturas de MSpan Obtidas
-dashboard.mcache_structures_usage=Uso de Estruturas de MCache
-dashboard.mcache_structures_obtained=Estruturas de MCache Obtidas
-dashboard.profiling_bucket_hash_table_obtained=Perfil Obtido da Bucket Hash Table
-dashboard.gc_metadata_obtained=Metadados do GC Obtidos
-dashboard.other_system_allocation_obtained=Outra Alocação de Sistema Obtida
-dashboard.next_gc_recycle=Próxima Reciclagem do GC
-dashboard.last_gc_time=Desde da Última Vez do GC
-dashboard.total_gc_time=Pausa Total do GC
-dashboard.total_gc_pause=Pausa Total do GC
-dashboard.last_gc_pause=Última Pausa do GC
-dashboard.gc_times=Nº Execuções do GC
-
-users.user_manage_panel=Painel de Gerenciamento do Usuário
-users.new_account=Criar Nova Conta
-users.name=Nome
-users.activated=Ativado
-users.admin=Administrador
-users.repos=Repositórios
-users.created=Criado
-users.send_register_notify=Enviar notificação de registro para ao usuário
-users.new_success=Nova conta '%s' foi criada com sucesso.
-users.edit=Editar
-users.auth_source=Fonte da autenticação
-users.local=Local
-users.auth_login_name=Nome de login da autenticação
-users.password_helper=Deixe em branco para não mudar.
-users.update_profile_success=O perfil da conta foi atualizado com sucesso.
-users.edit_account=Editar Conta
-users.is_activated=Esta conta está ativada
-users.is_admin=Esta conta tem permissões de administrador
-users.allow_git_hook=Esta conta tem permissões para criar hooks do Git
-users.update_profile=Atualizar Perfil da Conta
-users.delete_account=Deletar Esta Conta
-users.still_own_repo=Sua conta ainda é proprietária do repositório, você tem que excluir ou transferi-lo primeiro.
-users.still_has_org=Sua conta ainda faz parte da organização, você deve sair ou excluí-la primeiro.
-users.deletion_success=Conta deletada com sucesso!
-
-orgs.org_manage_panel=Painel de Gerenciamento da Organização
-orgs.name=Nome
-orgs.teams=Equipes
-orgs.members=Membros
-
-repos.repo_manage_panel=Painel de Gerenciamento do Repositório
-repos.owner=Dono
-repos.name=Nome
-repos.private=Privado
-repos.watches=Observadores
-repos.stars=Favoritos
-repos.issues=Problemas
-
-auths.auth_manage_panel=Painel de gerenciamento da autenticação
-auths.new=Adicionar nova fonte
-auths.name=Nome
-auths.type=Tipo
-auths.enabled=Habilitado
-auths.updated=Atualizado
-auths.auth_type=Tipo de autenticação
-auths.auth_name=Nome da autenticação
-auths.domain=Domínio
-auths.host=Host
-auths.port=Porta
-auths.bind_dn=Vincular DN
-auths.bind_password=Vincular senha
-auths.bind_password_helper=Atenção: Esta senha é armazenada em texto plano. Não use uma conta com muitos privilégios.
-auths.user_base=Base de pesquisa do usuário
-auths.user_dn=Usuário do DN
-auths.attribute_name=Atributo primeiro nome
-auths.attribute_surname=Atributo sobrenome
-auths.attribute_mail=Atributo e-mail
-auths.filter=Filtro de usuário
-auths.admin_filter=Filtro de administrador
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=Tipo de autenticação SMTP
-auths.smtphost=Host SMTP
-auths.smtpport=Porta SMTP
-auths.allowed_domains=Domínios autorizados
-auths.allowed_domains_helper=Deixe em branco para permitir qualquer domínio do host SMTP. Vários domínios devem ser separados por vírgula ','.
-auths.enable_tls=Habilitar Criptografia TLS
-auths.skip_tls_verify=Ignorar verificação de TLS
-auths.pam_service_name=Nome de Serviço PAM
-auths.enable_auto_register=Habilitar Registro Automático
-auths.tips=Dicas
-auths.edit=Editar a configuração de autenticação
-auths.activated=Esta autenticação foi ativada
-auths.new_success=Nova autenticação '%s' foi adicionada com sucesso.
-auths.update_success=A configuração da autenticação foi atualizada com sucesso.
-auths.update=Atualizar a configuração da autenticação
-auths.delete=Excluir esta autenticação
-auths.delete_auth_title=Exclusão da autenticação
-auths.delete_auth_desc=Esta autenticação esta prestes a ser deletada, deseja continuar?
-auths.deletion_success=Autenticação deletada com sucesso!
-
-config.server_config=Configuração do Servidor
-config.app_name=Nome do Aplicativo
-config.app_ver=Versão do Aplicativo
-config.app_url=URL do Aplicativo
-config.domain=Domínio
-config.offline_mode=Modo Offline
-config.disable_router_log=Desabilitar o Log do Roteador
-config.run_user=Usuário de Execução
-config.run_mode=Modo de Execução
-config.repo_root_path=Caminho Raiz do Repositório
-config.static_file_root_path=Caminho Raiz para Arquivo Estático
-config.log_file_root_path=Caminho Raiz para Arquivo de Log
-config.script_type=Tipo de Script
-config.reverse_auth_user=Usuário de Autenticação Reversa
-config.db_config=Configuração do Banco de Dados
-config.db_type=Tipo
-config.db_host=Host
-config.db_name=Nome
-config.db_user=Usuário
-config.db_ssl_mode=Modo SSL
-config.db_ssl_mode_helper=(apenas para "postgres")
-config.db_path=Caminho
-config.db_path_helper=(para "sqlite3" e "tidb")
-config.service_config=Configuração do Serviço
-config.register_email_confirm=Requerer Confirmação de E-mail
-config.disable_register=Desabilitar Registro
-config.show_registration_button=Mostrar Botão de Registo
-config.require_sign_in_view=Requerer Entrar no Gogs para Ver
-config.enable_cache_avatar=Habilitar Cache de Avatar
-config.mail_notify=Notificação de Correio
-config.disable_key_size_check=Desativar verificação de tamanho mínimo da chave
-config.enable_captcha=Habilitar o Captcha
-config.active_code_lives=Ativar Code Lives
-config.reset_password_code_lives=Redefinir Senha de Code Lives
-config.webhook_config=Configuração de Hook da Web
-config.queue_length=Tamanho da fila
-config.deliver_timeout=Intervalo de Entrega
-config.skip_tls_verify=Pular Verificar TLS
-config.mailer_config=Configuração de Correio
-config.mailer_enabled=Habilitado
-config.mailer_disable_helo=Desabilitar HELO
-config.mailer_name=Nome
-config.mailer_host=Host
-config.mailer_user=Usuário
-config.oauth_config=Configuração do OAuth
-config.oauth_enabled=Habilitado
-config.cache_config=Configuração de Cache
-config.cache_adapter=Adaptador de Cache
-config.cache_interval=Intervalo de Cache
-config.cache_conn=Conexão de Cache
-config.session_config=Configuração da Sessão
-config.session_provider=Provedor da Sessão
-config.provider_config=Configuração do Provedor
-config.cookie_name=Nome do Cookie
-config.enable_set_cookie=Habilitar Uso de Cookie
-config.gc_interval_time=Tempo de Intervalo do GC
-config.session_life_time=Tempo de Vida da Sessão
-config.https_only=Apenas HTTPS
-config.cookie_life_time=Tempo de Vida do Cookie
-config.picture_config=Configuração da Imagem
-config.picture_service=Serviço de Imagens
-config.disable_gravatar=Desativar Gravatar
-config.log_config=Configuração de Log
-config.log_mode=Modo do Log
-
-monitor.cron=Tarefas Cron
-monitor.name=Nome
-monitor.schedule=Cronograma
-monitor.next=Próxima Vez
-monitor.previous=Última Vez
-monitor.execute_times=Nº de Execuções
-monitor.process=Processos em Execução
-monitor.desc=Descrição
-monitor.start=Hora de Início
-monitor.execute_time=Tempo de Execução
-
-notices.system_notice_list=Sistema de Notificações
-notices.type=Tipo
-notices.type_1=Repositório
-notices.desc=Descrição
-notices.op=Op.
-notices.delete_success=Aviso do sistema foi deletado com sucesso.
-
-[action]
-create_repo=repositório criado <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=pushed para <a href="%s/src/%s">%[2]s</a> em <a href="%[1]s">%[3]s</a>
-create_issue='questão aberta <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>`
-comment_issue='comentou sobre a questão <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=repositório transferido de <code>%s</code> para <a href="%s">%s</a>
-push_tag=Foi feito push na tag <a href="%s/src/%s">%[2]s</a> para <a href="%[1]s">%[3]s</a>
-compare_2_commits=Ver comparação desses 2 commits
-
-[tool]
-ago=atrás
-from_now=a partir de agora
-now=agora
-1s=1 segundo %s
-1m=1 minuto %s
-1h=1 hora %s
-1d=1 dia %s
-1w=1 semana %s
-1mon=1 mês %s
-1y=1 ano %s
-seconds=%d segundos %s
-minutes=%d minutos %s
-hours=%d horas %s
-days=%d dias %s
-weeks=%d semanas %s
-months=%d meses %s
-years=%d anos %s
-raw_seconds=segundos
-raw_minutes=minutos
-
-[dropzone]
-default_message=Arraste e solte arquivos aqui, ou clique para selecioná-los.
-invalid_input_type=Você não pode enviar arquivos deste tipo.
-file_too_big=O tamanho do arquivo ({{filesize}} MB) excede o limite máximo ({{maxFilesize}} MB).
-remove_file=Remover
-
+app_desc=Um serviço de Git auto-hospedado e amigável escrito em Go
+
+home=Página Inicial
+dashboard=Painel de controle
+explore=Explorar
+help=Ajuda
+sign_in=Entrar
+sign_out=Sair
+sign_up=Cadastrar
+register=Registrar
+website=Site
+version=Versão
+page=Página
+template=Modelo
+language=Idioma
+create_new=Criar...
+user_profile_and_more=Perfil do usuário e configurações
+signed_in_as=Você é
+
+username=Usuário
+email=E-mail
+password=Senha
+re_type=Redigite
+captcha=Captcha
+
+repository=Repositório
+organization=Organização
+mirror=Espelho
+new_repo=Novo Repositório
+new_migrate=Nova Migração
+new_fork=Novo Fork de Repositório
+new_org=Nova Organização
+manage_org=Gerenciar Organizações
+admin_panel=Painel do Administrador
+account_settings=Configurações da Conta
+settings=Configurações
+your_profile=Seu perfil
+your_settings=Suas configurações
+
+news_feed=Feed de Notícias
+pull_requests=Solicitações de Pull
+issues=Problemas
+
+cancel=Cancelar
+
+[search]
+search=Pesquisar...
+repository=Repositório
+user=Usuário
+issue=Problema
+code=Código
+
+[install]
+install=Instalação
+title=Etapas de instalação para Primeira Execução
+docker_helper=Se você está rodando o Gogs dentro do Docker, por favor leia os <a target="_blank" href="%s">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!
+requite_db_desc=Gogs requer MySQL, PostgreSQL, SQLite3 ou TiDB.
+db_title=Configurações de Banco de Dados
+db_type=Tipo do Banco de Dados
+host=Host
+user=Usuário
+password=Senha
+db_name=Nome do Banco de Dados
+db_helper=Por favor, use o mecanismo INNODB com o conjunto de caracteres utf8_general_ci para MySQL.
+ssl_mode=Modo SSL
+path=Caminho
+sqlite_helper=O caminho do arquivo do banco de dados SQLite3 ou TiDB.
+err_empty_db_path=O Caminho do banco de dados SQLite3 ou TiDB não pode ser vazio.
+err_invalid_tidb_name=Nome do banco de dados TiDB não permite os caracteres "." e "-".
+no_admin_and_disable_registration=Você não pode desabilitar o registro sem criar uma conta de administrador.
+err_empty_admin_password=A senha de administrador não pode ser vazia.
+
+general_title=Configurações Gerais do Gogs
+app_name=Nome do Aplicativo
+app_name_helper=Coloque o nome da sua organização aqui!
+repo_path=Caminho da Raiz do Repositório
+repo_path_helper=Todos os repositórios remotos do Git serão salvos neste diretório.
+run_user=Executar Usuário
+run_user_helper=O usuário deve ter acesso ao caminho raiz do repositório e executar o Gogs
+domain=Domínio
+domain_helper=Isto afeta URLs para clonagem via SSH.
+ssh_port=Porta SSH
+ssh_port_helper=Número da porta que seu servidor SSH está usando, deixe vazio para desativar o recurso SSH.
+http_port=Porta HTTP
+http_port_helper=Número da porta em que a aplicação irá executar.
+app_url=URL do Aplicativo
+app_url_helper=Isto afeta a URL de clonagem via HTTP/HTTPs e também o email.
+
+optional_title=Configurações Opcionais
+email_title=Configurações do Serviço de E-mail
+smtp_host=Host SMTP
+smtp_from=De	
+smtp_from_helper=O endereço de email deve atender a especificação RFC 5322. O formato deve ser um email ou  "Nome" <email@example.com>.
+mailer_user=E-mail do Remetente
+mailer_password=Senha do Remetente
+register_confirm=Habilitar Confirmação de Registro
+mail_notify=Habilitar Notificação de Correio
+server_service_title=Configurações de Servidor e Outros Serviços
+offline_mode=Ativar Modo Offline
+offline_mode_popup=Desative o CDN mesmo em modo de produção, todos os recursos serão disponibilizados localmente.
+disable_gravatar=Desativar Serviço Gravatar
+disable_gravatar_popup=Desabilitar o Gravatar e fontes personalizadas, todos os avatares são enviados por usuários ou padrão.
+disable_registration=Desativar auto-registro
+disable_registration_popup=Desativar o auto-registro de usuário, para que somente o administrador possa criar contas.
+enable_captcha=Habilitar Captcha
+enable_captcha_popup=Obrigar validação por captcha para auto-registro de usuários.
+require_sign_in_view=Requerer login para a visualização de páginas
+require_sign_in_view_popup=Somente usuários autenticados podem ver todas as páginas, visitantes somente podem entrar ou se cadastrar.
+admin_setting_desc=Você não precisa criar uma conta de administrador agora, no entanto o primeiro usuário (ID=1) automaticamente terá acesso de administrador.
+admin_title=Configurações da Conta de Administrador
+admin_name=Nome de Usuário
+admin_password=Senha
+confirm_password=Confirmar Senha
+admin_email=E-mail do Administrador
+install_gogs=Instalar Gogs
+test_git_failed=Falha ao testar o comando 'git': %v
+sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o download da versão binária oficial em %s, NÃO da versão gobuild.
+invalid_db_setting=Configuração do banco de dados não está correta: %v
+invalid_repo_path=A raiz do repositório é inválida: %v
+run_user_not_match=O usuário da execução não é o usuário atual: %s -> %s
+save_config_failed=Falha ao salvar a configuração: %v
+invalid_admin_setting=Configuração da conta de administrador está inválida: %v
+install_success=Bem-vindo! Estamos contentes que você escolheu o Gogs, divirta-se e tenha cuidado.
+
+[home]
+uname_holder=Nome de Usuário ou E-mail
+password_holder=Senha
+switch_dashboard_context=Trocar Contexto do Painel de Controle
+my_repos=Meus Repositórios
+collaborative_repos=Repositórios Colaborativos
+my_orgs=Minhas Organizações
+my_mirrors=Meus Espelhos
+view_home=Ver %s
+
+issues.in_your_repos=Em seus repositórios
+
+[explore]
+repos=Repositórios
+
+[auth]
+create_new_account=Criar Nova Conta
+register_hepler_msg=Já tem uma conta? Entre agora!
+social_register_hepler_msg=Já tem uma conta? Junte-se agora!
+disable_register_prompt=Desculpe, novos registros estão desabilitados. Por favor entre em contato com o administrador do site.
+disable_register_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
+remember_me=Lembrar de Mim
+forgot_password=Esqueci a Senha
+forget_password=Esqueceu a senha?
+sign_up_now=Precisa de uma conta? Cadastre-se agora.
+confirmation_mail_sent_prompt=Um novo e-mail de confirmação foi enviado para <b>%s</b>, por favor, verifique sua caixa de entrada nas próximas %d horas para completar seu registro.
+active_your_account=Ativar Sua Conta
+resent_limit_prompt=Desculpe, você está enviando um e-mail de ativação com muita frequência. Por favor, aguarde 3 minutos.
+has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (<b>%s</b>). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
+resend_mail=Clique aqui para reenviar seu e-mail de ativação
+email_not_associate=Este endereço de e-mail não é associado à nenhuma conta.
+send_reset_mail=Clique aqui para (re)enviar seu e-mail de redefinição da senha
+reset_password=Redefinir Sua Senha
+invalid_code=Desculpe, seu código de confirmação expirou ou não é válido.
+reset_password_helper=Clique aqui para redefinir sua senha
+password_too_short=O comprimento da senha não pode ser menor que 6.
+
+[mail]
+activate_account=Por favor, ative sua conta
+activate_email=Verifique seu endereço de e-mail
+reset_password=Resetar sua senha
+register_success=Registrado com sucesso. Bem vindo
+register_notify=Welcome on board
+
+[modal]
+yes=Sim
+no=Não
+modify=Alterar
+
+[form]
+UserName=Nome de usuário
+RepoName=Nome do repositório
+Email=Endereço de e-mail
+Password=Senha
+Retype=Redigite a senha
+SSHTitle=Nome da chave SSH
+HttpsUrl=URL HTTPS
+PayloadUrl=URL de carga
+TeamName=Nome da equipe
+AuthName=Nome de autorização
+AdminEmail=E-mail do Administrador
+
+require_error=` não pode estar vazio.`
+alpha_dash_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
+alpha_dash_dot_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
+size_error='deve ser o tamanho %s.'
+min_size_error=` deve conter pelo menos %s caracteres.`
+max_size_error=` deve conter no máximo %s caracteres.`
+email_error=` não é um endereço de e-mail válido.`
+url_error=`não é uma URL válida.`
+include_error=` deve conter '%s'.`
+unknown_error=Erro desconhecido:
+captcha_incorrect=O captcha não correspondeu.
+password_not_match=Senha e confirmação da senha não são as mesmas.
+
+username_been_taken=Nome de usuário já foi tomado.
+repo_name_been_taken=Nome do repositório já foi tomado.
+org_name_been_taken=Nome da organização já foi tomado.
+team_name_been_taken=Nome da equipe já foi tomado.
+email_been_used=Endereço de e-mail já foi usado.
+illegal_team_name=O nome da equipe contém caracteres não permitidos.
+username_password_incorrect=Usuário ou senha incorretos.
+enterred_invalid_repo_name=Por favor certifique-se que informou o nome do repositório corretamente.
+enterred_invalid_owner_name=Por favor, verifique se o nome do proprietário está correto.
+enterred_invalid_password=Por favor, verifique se a senha que você digitou está correta.
+user_not_exist=O usuário informado não existe.
+last_org_owner=O usuário a ser removido é o último membro na equipe de proprietários. Deve haver um outro proprietário.
+
+invalid_ssh_key=Desculpe, não conseguimos verificar a sua chave SSH: %s
+unable_verify_ssh_key=Gogs não pode verificar sua chave SSH, mas assumimos que é válida, por favor, verifique a chave pessoalmente.
+auth_failed=A autenticação falhou: %v
+
+still_own_repo=Sua conta ainda tem propriedade do repositório, você tem que excluir ou transferí-la primeiro.
+still_has_org=Sua conta ainda faz parte da organização, você deve sair ou excluí-la primeiro.
+org_still_own_repo=Esta organização ainda tem a propriedade do repositório, você deve excluir ou transferí-la primeiro.
+
+still_own_user=Esta autenticação ainda é usada por alguns usuários, você deve movê-los e depois apagar novamente.
+
+target_branch_not_exist=O branch de destino não existe.
+
+[user]
+change_avatar=Altere o seu avatar em gravatar.com
+change_custom_avatar=Altere seu avatar nas configurações
+join_on=Inscreveu-se em
+repositories=Repositórios
+activity=Atividade Pública
+followers=Seguidores
+starred=Favorito
+following=Seguindo
+
+form.name_reserved=O nome de usuário '%s' não pode ser usado.
+form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de usuário.
+
+[settings]
+profile=Perfil
+password=Senha
+ssh_keys=Chaves SSH
+social=Contas Sociais
+applications=Aplicativos
+orgs=Organizações
+delete=Deletar Conta
+uid=Uid
+
+public_profile=Perfil Público
+profile_desc=Seu endereço de E-mail é publico e será usado para qualquer notificação relacionada à conta, e qualquer operação na web feita através do site.
+full_name=Nome Completo
+website=Site
+location=Localização
+update_profile=Atualizar o Perfil
+update_profile_success=O seu perfil foi atualizado com sucesso.
+change_username=Nome de Usuário Alterado
+change_username_prompt=Essa alteração afetará os links para a sua conta.
+continue=Continuar
+cancel=Cancelar
+
+enable_custom_avatar=Habilitar Avatar Customizado
+enable_custom_avatar_helper=Habilite para desativar a busca no Gravatar
+choose_new_avatar=Escolha um novo avatar
+update_avatar=Atualizar configuração de Avatar
+uploaded_avatar_not_a_image=O arquivo enviado não é uma imagem.
+no_custom_avatar_available=Nenhum avatar personalizado disponível, não pode habilitá-lo.
+update_avatar_success=Sua configuração de avatar foi atualizada com sucesso.
+
+change_password=Mudança de senha
+old_password=Senha Atual
+new_password=Nova Senha
+retype_new_password=Digite novamente a nova senha
+password_incorrect=A senha atual não está correta.
+change_password_success=A senha está alterada com sucesso. Você pode agora entrar com a senha nova.
+
+emails=Endereços de E-mail
+manage_emails=Gerenciar endereços de e-mail
+email_desc=Seu endereço de e-mail principal será usado para notificações e outras operações.
+primary=Principal
+primary_email=Definir como principal
+delete_email=Deletar
+email_deletion=Exclusão do email
+email_deletion_desc=Ao Excluir este endereço de e-mail será removido informações relacionadas com a sua conta. Você deseja continuar?
+email_deletion_success=O E-mail foi excluído com sucesso!
+add_new_email=Adicionar novo endereço de e-mail
+add_email=Adicionar e-mail
+add_email_confirmation_sent=Um novo e-mail de confirmação foi enviado para '%s'. Por favor, verifique sua Caixa de Entrada dentro das próximas %d horas, para concluir o processo de confirmação.
+add_email_success=Seu novo endereço de E-mail foi adicionado com sucesso.
+
+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>.
+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.
+key_name=Nome da Chave
+key_content=Conteúdo
+add_key_success=A nova chave pública '%s' foi adicionada com sucesso!
+delete_key=Deletar
+ssh_key_deletion=Exclusão da chave de SSH
+ssh_key_deletion_desc=Ao Excluir esta chave de SSH será removido todos os acessos para sua conta. Você deseja continuar?
+ssh_key_deletion_success=A chave de SSH foi excluída com sucesso!
+add_on=Adicionado em
+last_used=Última vez usado em
+no_activity=Nenhuma atividade recente
+key_state_desc=Usada a pelo menos 7 dias
+token_state_desc=Este token é usado em pelo menos 7 dias
+
+manage_social=Gerenciar Contas Sociais Associadas
+social_desc=Esta é uma lista de contas sociais. Remova qualquer ligação que você não reconheça.
+unbind=Desvincular
+unbind_success=A conta social foi desvinculada.
+
+manage_access_token=Gerenciar Tokens de Acesso Pessoal
+generate_new_token=Gerar novo Token
+tokens_desc=Tokens gerados por você que podem ser usados para acessar a API do Gogs.
+new_token_desc=Por enquanto, todo token terá acesso completo à sua conta.
+token_name=Nome do Token
+generate_token=Gerar Token
+generate_token_succees=Novo token de acesso gerado com sucesso! Certifique-se de copiar seu novo token de acesso pessoal agora. Você não poderá vê-lo novamente!
+delete_token=Excluir
+access_token_deletion=Exclusão do Token de acesso pessoal
+access_token_deletion_desc=Ao Excluir este token de acesso pessoal será removido todos os acessos do aplicativo. Você deseja continuar?
+delete_token_success=O Token de acesso pessoal foi removido com sucesso! Não se esqueça de atualizar seus aplicativos também.
+
+delete_account=Deletar Sua Conta
+delete_prompt=A operação deletará sua conta permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
+confirm_delete_account=Confirmar Deleção
+delete_account_title=Deleção da Conta
+delete_account_desc=Esta conta será deletada permanentemente, você quer continuar?
+
+[repo]
+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_fork_helper=(A alteração desse valor irá afetar todos os forks)
+clone_helper=Precisa de ajuda com a clonagem? Visite a <a target="_blank" href="%s">Ajuda</a>!
+fork_repo=Fork o Repositório
+fork_from=Fork de
+fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório forkado.
+repo_desc=Descrição
+repo_lang=Linguagem
+repo_lang_helper=Selecione arquivos .gitignore
+license=Licença
+license_helper=Selecione um arquivo de licença
+readme=Leia-me
+readme_helper=Selecione um modelo de leia-me
+auto_init=Inicializar este repositório com os arquivos selecionados e modelo
+create_repo=Criar Repositório
+default_branch=Branch padrão
+mirror_interval=Intervalo de Espelho (hora)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=O nome de repositório '%s' não pode ser usado.
+form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de repositório.
+
+need_auth=Precisa de Autorização
+migrate_type=Tipo de Migração
+migrate_type_helper=Este repositório será um <span class="text blue"> espelho</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 ou um caminho de diretório local.
+migrate.permission_denied=Você não pode importar repositórios locais.
+migrate.invalid_local_path=Caminho local inválido, não existe ou não é um diretório.
+migrate.failed=Migration failed: %v
+
+forked_from=forkado de
+fork_from_self=Você não pode criar fork de um repositório que já é seu!
+copy_link=Copiar
+copy_link_success=Copiado!
+copy_link_error=Pressione ⌘-C ou Ctrl-C para copiar
+copied=Copiado com sucesso
+unwatch=Deixar de Observar
+watch=Observar
+unstar=Remover favorito
+star=Favorito
+fork=Fork
+
+no_desc=Nenhuma Descrição
+quick_guide=Guia Rápido
+clone_this_repo=Clonar este repositório
+create_new_repo_command=Criar um novo repositório na linha de comando
+push_exist_repo=Push um repositório existente na linha de comando
+repo_is_empty=Este repositório está vazio, por favor volte mais tarde!
+
+branch=Branch
+tree=Árvore
+filter_branch_and_tag=Filter branch or tag
+branches=Branches
+tags=Tags
+issues=Problemas
+pulls=Pull Requests
+labels=Etiquetas
+milestones=Marcos
+commits=Commits
+releases=Versões
+file_raw=Cru
+file_history=Histórico
+file_view_raw=Ver cru
+file_permalink=Link permanente
+
+commits.commits=Commits
+commits.search=Pesquisar commits
+commits.find=Buscar
+commits.author=Autor
+commits.message=Mensagem
+commits.date=Data
+commits.older=Mais Antigo
+commits.newer=Mais Novo
+
+issues.new=Novo problema
+issues.new.labels=Etiquetas
+issues.new.no_label=Sem etiqueta
+issues.new.clear_labels=Limpar
+issues.new.milestone=Marco
+issues.new.no_milestone=Sem marco
+issues.new.clear_milestone=Limpar
+issues.new.open_milestone=Marcos abertos
+issues.new.closed_milestone=Marcos fechados
+issues.new.assignee=Responsável
+issues.new.clear_assignee=Limpar
+issues.new.no_assignee=Não atribuída
+issues.create=Salvar
+issues.new_label=Nova etiqueta
+issues.new_label_placeholder=Nome da etiqueta...
+issues.create_label=Salvar
+issues.open_tab=%d aberto
+issues.close_tab=%d fechados
+issues.filter_label=Etiqueta
+issues.filter_label_no_select=Nenhuma etiqueta selecionada
+issues.filter_milestone=Marco
+issues.filter_milestone_no_select=Nenhum marco selecionado
+issues.filter_assignee=Atribuído
+issues.filter_assginee_no_select=Sem atribuição
+issues.filter_type=Tipo
+issues.filter_type.all_issues=Todos os problemas
+issues.filter_type.assigned_to_you=Atribuídos a você
+issues.filter_type.created_by_you=Criado por você
+issues.filter_type.mentioning_you=Mencionando você
+issues.filter_sort=Ordenação
+issues.filter_sort.latest=Mais novos
+issues.filter_sort.oldest=Mais antigos
+issues.filter_sort.recentupdate=Mais recentemente atualizados
+issues.filter_sort.leastupdate=Menos recentemente atualizados
+issues.filter_sort.mostcomment=Mais comentados
+issues.filter_sort.leastcomment=Menos comentados
+issues.opened_by=%[1]s foi aberto por <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=aberto %[1]s por %[2]s
+issues.previous=Página anterior
+issues.next=Próxima página
+issues.open_title=aberto
+issues.closed_title=fechado
+issues.num_comments=%d comentários
+issues.commented_at=`comentado <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Nenhum conteúdo textual.
+issues.close_issue=Fechar
+issues.close_comment_issue=Comentar e fechar
+issues.reopen_issue=Reabrir
+issues.reopen_comment_issue=Comentar e reabrir
+issues.create_comment=Comentar
+issues.closed_at=`fechado em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.reopened_at=`reaberto em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`citou este problema em um commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=Autor
+issues.admin=Administrador
+issues.owner=Proprietário
+issues.sign_up_for_free=Cadastre-se gratuitamente
+issues.sign_in_require_desc=para participar nesta conversa. Já tem uma conta? <a href="%s">Faça login para comentar</a>
+issues.edit=Editar
+issues.cancel=Cancelar
+issues.save=Salvar
+issues.label_title=Nome da etiqueta
+issues.label_color=Cor da etiqueta
+issues.label_count=%d etiquetas
+issues.label_open_issues=%d problemas abertos
+issues.label_edit=Editar
+issues.label_delete=Excluir
+issues.label_modify=Alteração de etiqueta
+issues.label_deletion=Exclusão de etiqueta
+issues.label_deletion_desc=Excluir uma etiqueta a retirará de todos os problemas que ela estiver marcando. Quer mesmo continuar?
+issues.label_deletion_success=A etiqueta foi excluída com sucesso!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Comparar mudanças
+pulls.compare_changes_desc=Comparar os dois branches e criar pull request com as mudanças.
+pulls.compare_base=base
+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.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
+pulls.tab_conversation=Conversação
+pulls.tab_commits=Commits
+pulls.tab_files=Arquivos alterados
+pulls.reopen_to_merge=Por favor reabra esse pull request para executar a operação de mescla.
+pulls.merged=Merge realizado
+pulls.has_merged=Este pull request foi mesclado com sucesso!
+pulls.data_broken=Dados deste pull request foram quebrados devido à deleção de informação do fork.
+pulls.is_checking=A verificação do conflito ainda está em progresso, por favor recarregue a página em instantes.
+pulls.can_auto_merge_desc=Você pode realizar uma auto-mescla neste pull request.
+pulls.cannot_auto_merge_desc=Você não pode realizar uma auto-mescla porque há conflitos entre os commits.
+pulls.cannot_auto_merge_helper=Por favor, utilize linha de comando para solucionar isto.
+pulls.merge_pull_request=Merge Pull Request
+pulls.open_unmerged_pull_exists=' Você não pode executar a operação de reabrir porque já existe uma solicitação de pull aberta (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.'
+
+milestones.new=Novo marco
+milestones.open_tab=%d abertos
+milestones.close_tab=%d fechados
+milestones.closed=Fechado %s
+milestones.no_due_date=Sem prazo
+milestones.open=Reabrir
+milestones.close=Fechar
+milestones.new_subheader=Crie marcos para gerenciar seus problemas.
+milestones.create=Salvar marco
+milestones.title=Título
+milestones.desc=Descrição
+milestones.due_date=Prazo (opcional)
+milestones.clear=Limpar
+milestones.invalid_due_date_format=Formato inválido. O valor de data deve ser algo como 'aaaa-mm-dd'.
+milestones.create_success=O marco '%s' foi configurado com sucesso!
+milestones.edit=Edição de marco
+milestones.edit_subheader=Descreva bem a proposta do marco, assim as pessoas não ficarão confusas.
+milestones.cancel=Cancelar
+milestones.modify=Salvar alterações
+milestones.edit_success=O marco '%s' foi alterado com sucesso!
+milestones.deletion=Exclusão de marco
+milestones.deletion_desc=Excluir este marco removerá a informação dele em todos os problemas aos quais estiver associado. Você quer mesmo continuar?
+milestones.deletion_success=Marco excluído com sucesso!
+
+settings=Configurações
+settings.options=Opções
+settings.collaboration=Colaboração
+settings.hooks=Webhooks
+settings.githooks=Hooks do Git
+settings.basic_settings=Configurações Básicas
+settings.danger_zone=Zona de Perigo
+settings.site=Site Oficial
+settings.update_settings=Configurações de Atualização
+settings.change_reponame_prompt=Este mudanças vai afetar os links para este repositório.
+settings.transfer=Transferir Propriedade
+settings.transfer_desc=Transferir este repositório para outro usuário ou para uma organização onde você tem direitos de administrador.
+settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
+settings.delete=Deletar Este Repositório
+settings.delete_desc=Uma vez que você deleta um repositório, não tem volta. Por favor, tenha certeza.
+settings.transfer_notices_1=- Você vai perder acesso se o novo dono for um usuário individual.
+settings.transfer_notices_2=- Você vai continuar tendo acesso se o novo dono é uma organização e você é um dos membros.
+settings.transfer_form_title=Informe a seguinte informação para confirmar a sua operação:
+settings.delete_notices_1=-Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
+settings.delete_notices_2=- Esta operação irá apagar permanentemente o tudo deste repositório, incluindo os dados do Git, problemas, comentários e acessos dos colaboradores.
+settings.delete_notices_fork_1=- Se este repositório é público, todos os forks se tornarão independentes após a deleção.
+settings.delete_notices_fork_2=- Se este repositório é privado, todos os forks serão removidos imediatamente.
+settings.delete_notices_fork_3=- Se você deseja manter todos os forks, por favor muda a visibilidade do repositório para pública primeiro.
+settings.update_settings_success=As opções do repositório foram atualizadas com sucesso.
+settings.transfer_owner=Novo Dono
+settings.make_transfer=Fazer Transferência
+settings.transfer_succeed=A posse do repositório foi transferido com sucesso.
+settings.confirm_delete=Confirmar Deleção
+settings.add_collaborator=Adicionar um Novo Colaborador
+settings.add_collaborator_success=O novo colaborador foi adicionado.
+settings.remove_collaborator_success=O colaborador foi removido.
+settings.search_user_placeholder=Search user...
+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 Gogs. 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" href="%s"> Guia de Webhooks</a>.
+settings.webhook_deletion=Deletar Webhook
+settings.webhook_deletion_desc=Deletar este Webhook vai remover sua informação e todo o histórico de entrega. Deseja continuar?
+settings.webhook_deletion_success=Webhook deletado com sucesso!
+settings.webhook.request=Solicitação
+settings.webhook.response=Resposta
+settings.webhook.headers=Cabeçalhos
+settings.webhook.payload=Payload
+settings.webhook.body=Texto
+settings.githooks_desc=Hooks do Git são ofertados pelo próprio Git, você pode editar arquivos de hooks suportados na lista abaixo para aplicar operações personalizadas.
+settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo será apresentado. Deixar o conteúdo em branco irá desativar esse hook.
+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" href="%s">Webhooks Guide</a>.
+settings.payload_url=URL de carga
+settings.content_type=Tipo de Conteúdo
+settings.secret=Secreto
+settings.slack_username=Nome de usuário
+settings.slack_icon_url=URL do ícone
+settings.slack_color=Cor
+settings.event_desc=Quais eventos você gostaria de acionar a esse webhook?
+settings.event_push_only=Apenas o evento <code>push</code>.
+settings.event_send_everything=Preciso de <strong>tudo</strong>.
+settings.event_choose=Deixe-me escolher o que eu preciso.
+settings.event_create=Criar
+settings.event_create_desc=Branch ou Tag criado
+settings.event_push=Push
+settings.event_push_desc=Git push para o repositório
+settings.active=Ativar
+settings.active_helper=Enviaremos detalhes do evento quando este hook for acionado.
+settings.add_hook_success=Novos hooks de web foram adicionados.
+settings.update_webhook=Atualizar Webhook
+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.slack_token=Token
+settings.slack_domain=Domínio
+settings.slack_channel=Canal
+settings.deploy_keys=Chaves de Deploy
+settings.add_deploy_key=Nova chave
+settings.no_deploy_keys=Você ainda não adicionou chaves para implantação de software.
+settings.title=Título
+settings.deploy_key_content=Conteúdo da chave
+settings.key_been_used=Uma chave de implantação com esse mesmo conteúdo já está em uso.
+settings.key_name_used=Uma chave de implantação já existe com esse com mesmo nome.
+settings.add_key_success=A nova chave de implantação '%s' foi adicionada com sucesso!
+settings.deploy_key_deletion=Exclusão de chave de deploy
+settings.deploy_key_deletion_desc=Excluir esta chave de implantação removerá permissões de acesso a este repositório. Quer mesmo continuar?
+settings.deploy_key_deletion_success=Chave de implantação excluída com sucesso!
+
+diff.browse_source=Ver Código Fonte
+diff.parent=pai
+diff.commit=commit
+diff.data_not_available=Dados de Diff não disponíveis.
+diff.show_diff_stats=Mostrar estatísticas do Diff
+diff.stats_desc=<strong> %d arquivos alterados</strong> com <strong>%d adições</strong> e <strong>%d exclusões</strong>
+diff.bin=BIN
+diff.view_file=Ver Arquivo
+
+release.releases=Versões
+release.new_release=Nova Versão
+release.draft=Rascunho
+release.prerelease=Versão Prévia
+release.stable=Estável
+release.edit=editar
+release.ahead=<strong>%d</strong> commits para %s depois desta versão
+release.source_code=Código fonte
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Nome da tag
+release.target=Destino
+release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
+release.title=Title
+release.content=Content
+release.write=Escrever
+release.preview=Visualizar
+release.loading=Carregando...
+release.prerelease_desc=Esta é uma versão prévia
+release.prerelease_helper=Vou salientar que esta versão é identificada como não pronta para produção.
+release.cancel=Cancel
+release.publish=Publicar Versão
+release.save_draft=Salvar Rascunho
+release.edit_release=Editar Versão
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Já existiu versão com esse nome de tag.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Nome da Organização
+org_full_name_holder=Nome completo da organização
+org_name_helper=Nomes de grandes organizações são curtos e memoráveis.
+create_org=Criar Organização
+repo_updated=Atualizado
+people=Pessoas
+invite_someone=Convidar Alguém
+teams=Equipes
+lower_members=membros
+lower_repositories=repositórios
+create_new_team=Criar Nova Equipe
+org_desc=Descrição
+team_name=Nome da Equipe
+team_desc=Descrição
+team_name_helper=Você usará este nome para mencionar esta equipe em conversas.
+team_desc_helper=Do que trata essa equipe?
+team_permission_desc=Que nível de permissão esta equipe deve ter?
+
+form.name_reserved=O nome de organização '%s' não pode ser usado.
+form.name_pattern_not_allowed=Não é permitido usar o padrão '%s' para o nome de organização.
+
+settings=Configurações
+settings.options=Opções
+settings.full_name=Nome Completo
+settings.website=Site
+settings.location=Localização
+settings.update_settings=Atualizar Configurações
+settings.update_setting_success=Configuração da organização atualizada com sucesso.
+settings.change_orgname_prompt=Esta mudança vai afetar os links para esta organização.
+settings.update_avatar_success=A configuração de avatar da organização foi atualizado com sucesso.
+settings.delete=Deletar Organização
+settings.delete_account=Deletar Esta Organização
+settings.delete_prompt=A operação deletará esta organização permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
+settings.confirm_delete_account=Confirmar Deleção
+settings.delete_org_title=Deleção da Organização
+settings.delete_org_desc=Esta organização será deletada permanentemente, você quer continuar?
+settings.hooks_desc=Adicionar Webhooks que serão acionados para <strong>todos os repositórios</strong> dessa organização.
+
+members.public=Público
+members.public_helper=tornar privado
+members.private=Privado
+members.private_helper=torar público
+members.owner=Dono
+members.member=Membro
+members.conceal=Ocultar
+members.remove=Remover
+members.leave=Sair
+members.invite_desc=Comece digitando um nome de usuário para convidá-lo como novo membro para %s:
+members.invite_now=Convidar Agora
+
+teams.join=Juntar-se
+teams.leave=Deixar
+teams.read_access=Acesso de Leitura
+teams.read_access_helper=Esta equipe poderá ver e clonar os repositórios dela.
+teams.write_access=Acesso de Escrita
+teams.write_access_helper=Esta equipa será capaz de ler os seus repositórios, bem como fazer push para eles.
+teams.admin_access=Acesso do Administrador
+teams.admin_access_helper=Esta equipe será capaz de fazer push/pull em seus repositórios, bem como adicionar-lhes outros colaboradores.
+teams.no_desc=Esta equipe não tem descrição
+teams.settings=Configurações
+teams.owners_permission_desc=Donos tem acesso total a <strong>todos repositórios</strong> e também <strong>direitos de administrador</strong> para a organização.
+teams.members=Membros da Equipe
+teams.update_settings=Atualizar Configurações
+teams.delete_team=Deletar Esta Equipe
+teams.add_team_member=Adicionar Membro da Equipe
+teams.delete_team_title=Deleção da Equipe
+teams.delete_team_desc=Este equipe será deletada, você quer continuar? Membros desta equipe poderão perder acesso a alguns repositórios.
+teams.delete_team_success=A equipe dada foi deletada com sucesso.
+teams.read_permission_desc=Essa equipe concede acesso para <strong>Leitura</strong>: membros podem ver e clonar os repositórios da equipe.
+teams.write_permission_desc=Esta equipe concede acesso para <strong>escrita</strong>: Membros podem ler e fazer push para os repositórios da equipe.
+teams.admin_permission_desc=Esta equipe concede acesso de <strong>Administrador</strong>: Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
+teams.repositories=Repositórios da Equipe
+teams.add_team_repository=Adicionar Repositório da Equipe
+teams.remove_repo=Remover
+teams.add_nonexistent_repo=O repositório que você está tentando adicionar não existe, por favor, crie-o primeiro.
+
+[admin]
+dashboard=Painel de controle
+users=Usuários
+organizations=Organizações
+repositories=Repositórios
+authentication=Autenticações
+config=Configuração
+notices=Sistema de notificações
+monitor=Monitoramento
+first_page=Primeira
+last_page=Última
+total=Total: %d
+
+dashboard.statistic=Estatística
+dashboard.operations=Operações
+dashboard.system_status=Status do Monitor de Sistema
+dashboard.statistic_info=O banco de dados do Gogs contém <b>%d</b> usuários, <b>%d</b> organizações, <b>%d</b> chaves públicas, <b>%d</b> repositórios, <b>%d</b> observadores, <b>%d</b> estrelas, <b>%d</b> ações, <b>%d</b> acessos, <b>%d</b> questões, <b>%d</b> comentários, <b>%d</b> contas sociais, <b>%d</b> seguidores, <b>%d</b> espelhos, <b>%d</b> versões, <b>%d</b>  origens de login, <b>%d</b> Hooks da Web, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> tarefas hook, <b>%d</b> equipes, <b>%d</b> tarefas de atualização, <b>%d</b> anexos.
+dashboard.operation_name=Nome da Operação
+dashboard.operation_switch=Trocar
+dashboard.operation_run=Executar
+dashboard.clean_unbind_oauth=Limpar OAuthes não acoplados
+dashboard.clean_unbind_oauth_success=Todos OAuthes desvinculados foram excluídos com sucesso.
+dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
+dashboard.delete_inactivate_accounts_success=Todas as contas inativas foram excluídas com sucesso.
+dashboard.delete_repo_archives=Excluir todos os arquivos dos repositórios
+dashboard.delete_repo_archives_success=Todos os arquivos dos repositórios foram excluídos com sucesso.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Fazer coleta de lixo nos repositórios
+dashboard.git_gc_repos_success=Em todos repositórios, a coleta de lixo foi realizada com sucesso.
+dashboard.resync_all_sshkeys=Reescrever o arquivo '.ssh/authorized_keys' (atenção: chaves que não sejam do Gogs serão perdidas)
+dashboard.resync_all_sshkeys_success=Todas as chaves públicas foram reescritas com sucesso.
+dashboard.resync_all_update_hooks=Reescrever todos os hooks de atualização dos repositórios (necessário quando o caminho de configuração customizado é alterado)
+dashboard.resync_all_update_hooks_success=Os hooks de atualização de todos os repositórios foram reescritos com sucesso.
+
+dashboard.server_uptime=Servidor Ligado
+dashboard.current_goroutine=Goroutines Atuais
+dashboard.current_memory_usage=Uso de Memória Atual
+dashboard.total_memory_allocated=Total de Memória Alocada
+dashboard.memory_obtained=Memória Obtida
+dashboard.pointer_lookup_times=Nº de Consultas a Ponteiros
+dashboard.memory_allocate_times=Nº de Alocações de Memória
+dashboard.memory_free_times=Nº de Liberações de Memória
+dashboard.current_heap_usage=Uso Atual da Heap
+dashboard.heap_memory_obtained=Memória de Heap Obtida
+dashboard.heap_memory_idle=Memória da Heap Ociosa
+dashboard.heap_memory_in_use=Memória da Heap em Uso
+dashboard.heap_memory_released=Memória da Heap Liberada
+dashboard.heap_objects=Objetos na Heap
+dashboard.bootstrap_stack_usage=Uso de Pilha Bootstrap
+dashboard.stack_memory_obtained=Memória de Pilha Obtida
+dashboard.mspan_structures_usage=Uso de Estruturas de MSpan
+dashboard.mspan_structures_obtained=Estruturas de MSpan Obtidas
+dashboard.mcache_structures_usage=Uso de Estruturas de MCache
+dashboard.mcache_structures_obtained=Estruturas de MCache Obtidas
+dashboard.profiling_bucket_hash_table_obtained=Perfil Obtido da Bucket Hash Table
+dashboard.gc_metadata_obtained=Metadados do GC Obtidos
+dashboard.other_system_allocation_obtained=Outra Alocação de Sistema Obtida
+dashboard.next_gc_recycle=Próxima Reciclagem do GC
+dashboard.last_gc_time=Desde da Última Vez do GC
+dashboard.total_gc_time=Pausa Total do GC
+dashboard.total_gc_pause=Pausa Total do GC
+dashboard.last_gc_pause=Última Pausa do GC
+dashboard.gc_times=Nº Execuções do GC
+
+users.user_manage_panel=Painel de Gerenciamento do Usuário
+users.new_account=Criar Nova Conta
+users.name=Nome
+users.activated=Ativado
+users.admin=Administrador
+users.repos=Repositórios
+users.created=Criado
+users.send_register_notify=Enviar notificação de registro para ao usuário
+users.new_success=Nova conta '%s' foi criada com sucesso.
+users.edit=Editar
+users.auth_source=Fonte da autenticação
+users.local=Local
+users.auth_login_name=Nome de login da autenticação
+users.password_helper=Deixe em branco para não mudar.
+users.update_profile_success=O perfil da conta foi atualizado com sucesso.
+users.edit_account=Editar Conta
+users.is_activated=Esta conta está ativada
+users.is_admin=Esta conta tem permissões de administrador
+users.allow_git_hook=Esta conta tem permissões para criar hooks do Git
+users.allow_import_local=Esta conta tem permissões para importar repositórios locais
+users.update_profile=Atualizar Perfil da Conta
+users.delete_account=Deletar Esta Conta
+users.still_own_repo=Sua conta ainda é proprietária do repositório, você tem que excluir ou transferi-lo primeiro.
+users.still_has_org=Sua conta ainda faz parte da organização, você deve sair ou excluí-la primeiro.
+users.deletion_success=Conta deletada com sucesso!
+
+orgs.org_manage_panel=Painel de Gerenciamento da Organização
+orgs.name=Nome
+orgs.teams=Equipes
+orgs.members=Membros
+
+repos.repo_manage_panel=Painel de Gerenciamento do Repositório
+repos.owner=Dono
+repos.name=Nome
+repos.private=Privado
+repos.watches=Observadores
+repos.stars=Favoritos
+repos.issues=Problemas
+
+auths.auth_manage_panel=Painel de gerenciamento da autenticação
+auths.new=Adicionar nova fonte
+auths.name=Nome
+auths.type=Tipo
+auths.enabled=Habilitado
+auths.updated=Atualizado
+auths.auth_type=Tipo de autenticação
+auths.auth_name=Nome da autenticação
+auths.domain=Domínio
+auths.host=Host
+auths.port=Porta
+auths.bind_dn=Vincular DN
+auths.bind_password=Vincular senha
+auths.bind_password_helper=Atenção: Esta senha é armazenada em texto plano. Não use uma conta com muitos privilégios.
+auths.user_base=Base de pesquisa do usuário
+auths.user_dn=Usuário do DN
+auths.attribute_name=Atributo primeiro nome
+auths.attribute_surname=Atributo sobrenome
+auths.attribute_mail=Atributo e-mail
+auths.filter=Filtro de usuário
+auths.admin_filter=Filtro de administrador
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=Tipo de autenticação SMTP
+auths.smtphost=Host SMTP
+auths.smtpport=Porta SMTP
+auths.allowed_domains=Domínios autorizados
+auths.allowed_domains_helper=Deixe em branco para permitir qualquer domínio do host SMTP. Vários domínios devem ser separados por vírgula ','.
+auths.enable_tls=Habilitar Criptografia TLS
+auths.skip_tls_verify=Ignorar verificação de TLS
+auths.pam_service_name=Nome de Serviço PAM
+auths.enable_auto_register=Habilitar Registro Automático
+auths.tips=Dicas
+auths.edit=Editar a configuração de autenticação
+auths.activated=Esta autenticação foi ativada
+auths.new_success=Nova autenticação '%s' foi adicionada com sucesso.
+auths.update_success=A configuração da autenticação foi atualizada com sucesso.
+auths.update=Atualizar a configuração da autenticação
+auths.delete=Excluir esta autenticação
+auths.delete_auth_title=Exclusão da autenticação
+auths.delete_auth_desc=Esta autenticação esta prestes a ser deletada, deseja continuar?
+auths.deletion_success=Autenticação deletada com sucesso!
+
+config.server_config=Configuração do Servidor
+config.app_name=Nome do Aplicativo
+config.app_ver=Versão do Aplicativo
+config.app_url=URL do Aplicativo
+config.domain=Domínio
+config.offline_mode=Modo Offline
+config.disable_router_log=Desabilitar o Log do Roteador
+config.run_user=Usuário de Execução
+config.run_mode=Modo de Execução
+config.repo_root_path=Caminho Raiz do Repositório
+config.static_file_root_path=Caminho Raiz para Arquivo Estático
+config.log_file_root_path=Caminho Raiz para Arquivo de Log
+config.script_type=Tipo de Script
+config.reverse_auth_user=Usuário de Autenticação Reversa
+config.db_config=Configuração do Banco de Dados
+config.db_type=Tipo
+config.db_host=Host
+config.db_name=Nome
+config.db_user=Usuário
+config.db_ssl_mode=Modo SSL
+config.db_ssl_mode_helper=(apenas para "postgres")
+config.db_path=Caminho
+config.db_path_helper=(para "sqlite3" e "tidb")
+config.service_config=Configuração do Serviço
+config.register_email_confirm=Requerer Confirmação de E-mail
+config.disable_register=Desabilitar Registro
+config.show_registration_button=Mostrar Botão de Registo
+config.require_sign_in_view=Requerer Entrar no Gogs para Ver
+config.enable_cache_avatar=Habilitar Cache de Avatar
+config.mail_notify=Notificação de Correio
+config.disable_key_size_check=Desativar verificação de tamanho mínimo da chave
+config.enable_captcha=Habilitar o Captcha
+config.active_code_lives=Ativar Code Lives
+config.reset_password_code_lives=Redefinir Senha de Code Lives
+config.webhook_config=Configuração de Hook da Web
+config.queue_length=Tamanho da fila
+config.deliver_timeout=Intervalo de Entrega
+config.skip_tls_verify=Pular Verificar TLS
+config.mailer_config=Configuração de Correio
+config.mailer_enabled=Habilitado
+config.mailer_disable_helo=Desabilitar HELO
+config.mailer_name=Nome
+config.mailer_host=Host
+config.mailer_user=Usuário
+config.oauth_config=Configuração do OAuth
+config.oauth_enabled=Habilitado
+config.cache_config=Configuração de Cache
+config.cache_adapter=Adaptador de Cache
+config.cache_interval=Intervalo de Cache
+config.cache_conn=Conexão de Cache
+config.session_config=Configuração da Sessão
+config.session_provider=Provedor da Sessão
+config.provider_config=Configuração do Provedor
+config.cookie_name=Nome do Cookie
+config.enable_set_cookie=Habilitar Uso de Cookie
+config.gc_interval_time=Tempo de Intervalo do GC
+config.session_life_time=Tempo de Vida da Sessão
+config.https_only=Apenas HTTPS
+config.cookie_life_time=Tempo de Vida do Cookie
+config.picture_config=Configuração da Imagem
+config.picture_service=Serviço de Imagens
+config.disable_gravatar=Desativar Gravatar
+config.log_config=Configuração de Log
+config.log_mode=Modo do Log
+
+monitor.cron=Tarefas Cron
+monitor.name=Nome
+monitor.schedule=Cronograma
+monitor.next=Próxima Vez
+monitor.previous=Última Vez
+monitor.execute_times=Nº de Execuções
+monitor.process=Processos em Execução
+monitor.desc=Descrição
+monitor.start=Hora de Início
+monitor.execute_time=Tempo de Execução
+
+notices.system_notice_list=Sistema de Notificações
+notices.type=Tipo
+notices.type_1=Repositório
+notices.desc=Descrição
+notices.op=Op.
+notices.delete_success=Aviso do sistema foi deletado com sucesso.
+
+[action]
+create_repo=repositório criado <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=pushed para <a href="%[1]s/src/%[2]s">%[3]s</a> em <a href="%[1]s">%[4]s</a>
+create_issue='questão aberta <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>`
+comment_issue='comentou sobre a questão <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=repositório transferido de <code>%s</code> para <a href="%s">%s</a>
+push_tag=Foi feito push na tag <a href="%s/src/%s">%[2]s</a> para <a href="%[1]s">%[3]s</a>
+compare_2_commits=Ver comparação desses 2 commits
+
+[tool]
+ago=atrás
+from_now=a partir de agora
+now=agora
+1s=1 segundo %s
+1m=1 minuto %s
+1h=1 hora %s
+1d=1 dia %s
+1w=1 semana %s
+1mon=1 mês %s
+1y=1 ano %s
+seconds=%d segundos %s
+minutes=%d minutos %s
+hours=%d horas %s
+days=%d dias %s
+weeks=%d semanas %s
+months=%d meses %s
+years=%d anos %s
+raw_seconds=segundos
+raw_minutes=minutos
+
+[dropzone]
+default_message=Arraste e solte arquivos aqui, ou clique para selecioná-los.
+invalid_input_type=Você não pode enviar arquivos deste tipo.
+file_too_big=O tamanho do arquivo ({{filesize}} MB) excede o limite máximo ({{maxFilesize}} MB).
+remove_file=Remover
+

+ 1009 - 992
conf/locale/locale_ru-RU.ini

@@ -1,992 +1,1009 @@
-app_desc=Удобная служба для собственного Git-репозитория, написанная на языке Go
-
-home=Главная
-dashboard=Панель мониторинга
-explore=Обзор
-help=Помощь
-sign_in=Войти
-sign_out=Выход
-sign_up=Регистрация
-register=Зарегистрироваться
-website=Веб-сайт
-version=Версия
-page=Страница
-template=Шаблон
-language=Язык
-create_new=Создать...
-user_profile_and_more=Профиль и остальное
-signed_in_as=Вы вошли как
-
-username=Имя пользователя
-email=Эл. почта
-password=Пароль
-re_type=Повтор
-captcha=Captcha
-
-repository=Репозиторий
-organization=Организация
-mirror=Зеркало
-new_repo=Новый репозиторий
-new_migrate=Новая Миграция
-new_fork=Новый проект из репозитория
-new_org=Новая Организация
-manage_org=Управление Организацией
-admin_panel=Панель администратора
-account_settings=Настройки аккаунта
-settings=Настройки
-your_profile=Ваш профиль
-your_settings=Ваши настройки
-
-news_feed=Лента новостей
-pull_requests=Pull Requests
-issues=Вопросы
-
-cancel=Отмена
-
-[search]
-search=Поиск...
-repository=Репозиторий
-user=Пользователь
-issue=Проблема
-code=Код
-
-[install]
-install=Установка
-title=Установочные шаги для первого запуска
-docker_helper=Если вы используете Gogs в Docker-контейнере, пожалуйста прочтите <a target="_blank" href="%s">эти советы</a>, перед тем как что-либо изменить!
-requite_db_desc=Gogs требует MySQL, PostgreSQL, SQLite3 или TiDB.
-db_title=Настройки базы данных
-db_type=Тип базы данных
-host=Хост
-user=Пользователь
-password=Пароль
-db_name=Имя базы данных
-db_helper=Для MySQL используйте тип таблиц InnoDB с кодировкой utf8_general_ci.
-ssl_mode=Режим SSL
-path=Путь
-sqlite_helper=Путь до базы данных SQLite или TiDB.
-err_empty_db_path=Путь к базе данных SQLite3 или TiDB не может быть пустым.
-err_invalid_tidb_name=Название базы данных TiDB не может содержать символы "." и "-".
-no_admin_and_disable_registration=Вы не можете отключить регистрацию, не создав аккаунт администратора.
-err_empty_admin_password=Пароль администратора не может быть пустым.
-
-general_title=Общие параметры Gogs
-app_name=Имя приложения
-app_name_helper=Укажите здесь название вашей потрясающей организации!
-repo_path=Путь корня репозитория
-repo_path_helper=Все удаленные репозитории Git будут сохранены в этой директории.
-run_user=Пользователь
-run_user_helper=У пользователя должен быть доступ к пути к корню репозитория и к запуску Gogs.
-domain=Домен
-domain_helper=Влияет на URL-адреса для клонирования по SSH.
-ssh_port=SSH порт
-ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH.
-http_port=Порт HTTP
-http_port_helper=Номер порта, который приложение будет слушать.
-app_url=URL приложения
-app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на адреса в электронной почте.
-
-optional_title=Расширенные настройки
-email_title=Настройки службы электронной почты
-smtp_host=Узел SMTP
-smtp_from=Из
-smtp_from_helper=Почта от адреса, RFC 5322. Это может быть email адрес или формат "Имя" <email@example.com>.
-mailer_user=Электронная почта отправителя
-mailer_password=Пароль отправителя
-register_confirm=Включить подтверждение регистрации
-mail_notify=Разрешить почтовые уведомления
-server_service_title=Сервер и другие настройки служб
-offline_mode=Включение офлайн режима
-offline_mode_popup=Отключить CDN даже в производственном режиме, все файлы ресурсов будут раздаваться локально.
-disable_gravatar=Отключить службу Gravatar
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
-disable_registration=Отключить самостоятельную регистрацию
-disable_registration_popup=Запретить пользователям самостоятельную регистрацию, только администратор может создавать аккаунты.
-enable_captcha=Включить капчу
-enable_captcha_popup=Запрашивать капчу при регистрации пользователя.
-require_sign_in_view=Разрешить требовать авторизацию для просмотра страниц
-require_sign_in_view_popup=Только авторизированные пользователи могут просматривать страницы, посетители смогут увидеть только  ссылку на авторизацию вверху страницы.
-admin_setting_desc=Вы не должны создать учетную запись администратора прямо сейчас, пользователь с ID = 1 получит доступ с правами администратора автоматически.
-admin_title=Настройки учётной записи администратора
-admin_name=Имя пользователя
-admin_password=Пароль
-confirm_password=Подтвердить пароль
-admin_email=Эл. почта
-install_gogs=Установить Gogs
-test_git_failed=Не удалось проверить 'git' команду: %v
-sqlite3_not_available=Ваша версия не поддерживает SQLite3, пожалуйста скачайте официальную бинарную версию от %s, а не версию gobuild.
-invalid_db_setting=Настройки базы данных не правильные: %v
-invalid_repo_path=Недопустимый путь к корню репозитория: %v
-run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s
-save_config_failed=Не удалось сохранить конфигурацию: %v
-invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
-install_success=Добро пожаловать! Мы рады, что вы выбрали Gogs. Веселитесь и берегите себя.
-
-[home]
-uname_holder=Имя пользователь или E-mail
-password_holder=Пароль
-switch_dashboard_context=Переключить контекст панели управления
-my_repos=Мои репозитории
-collaborative_repos=Совместные репозитории
-my_orgs=Моя Организация
-my_mirrors=Мои зеркала
-view_home=Показать %s
-
-issues.in_your_repos=В вашем репозитории
-
-[explore]
-repos=Репозитории
-
-[auth]
-create_new_account=Создать новый аккаунт
-register_hepler_msg=Уже есть аккаунт? Авторизуйтесь!
-social_register_hepler_msg=Уже есть учетная запись? Свяжите ее с соцсетью!
-disable_register_prompt=Извините,  возможность регистрации отключена. Пожалуйста, свяжитесь с администратором сайта.
-disable_register_mail=К сожалению подтверждение регистрации по почте отключено.
-remember_me=Запомнить меня
-forgot_password=Забыли пароль
-forget_password=Забыли пароль?
-sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
-confirmation_mail_sent_prompt=Новое письмо для подтверждения было направлено на <b>%s</b>, пожалуйста, проверьте ваш почтовый ящик в течение %d часов для завершения регистрации.
-sign_in_to_account=Войдите свой аккаунт
-active_your_account=Активируйте свой аккаунт
-resent_limit_prompt=Вы слишком часто отправляете письмо с активацией. Подождите 3 минуты, пожалуйста.
-has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (<b>%s</b>). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже.
-resend_mail=Нажмите здесь, чтобы переотправить активационное письмо
-email_not_associate=Этот адрес электронной почты не связан ни с одной учетной записью.
-send_reset_mail=Нажмите сюда, чтобы отправить письмо для сброса пароля
-reset_password=Сброс пароля
-invalid_code=Извините, ваш код подтверждения истек или не является допустимым.
-reset_password_helper=Нажмите здесь, чтобы сбросить свой пароль
-password_too_short=Длина пароля не менее 6 символов.
-
-[mail]
-activate_account=Пожалуйста активируйте свой аккаунт
-activate_email=Подтвердите адрес своей электронной почты
-reset_password=Восстановите ваш пароль
-register_success=Регистрация окончена. Добро пожаловать!
-
-[modal]
-yes=Да
-no=Нет
-modify=Изменить
-
-[form]
-UserName=Пользователь
-RepoName=Имя репозитория
-Email=Адрес эл. почты
-Password=Пароль
-Retype=Введите пароль еще раз
-SSHTitle=Имя SSH ключа
-HttpsUrl=URL HTTPS
-PayloadUrl=URL обработчика
-TeamName=Название команды
-AuthName=Имя авторизации
-AdminEmail=Электронная почта администратора
-
-require_error=` не может быть пустым.`
-alpha_dash_error=«должен быть допустимым символьным, числовым или dash(-_) значением.»
-alpha_dash_dot_error=«должен быть допустимым символьным, числовым или dash(-_) символами, включая точку.»
-size_error=` должен быть размер %s.`
-min_size_error=«должен содержать по крайней мере %s символов.»
-max_size_error=` должен содержать максимум %s символов.`
-email_error=«не является адресом электронной почты.»
-url_error=«не является допустимым URL-адресом.»
-unknown_error=Неизвестная ошибка:
-captcha_incorrect=CAPTCHA не совпадает.
-password_not_match=Пароль и подтверждение пароля не совпадают.
-
-username_been_taken=Имя пользователя уже принято.
-repo_name_been_taken=Имя репозитория уже принято.
-org_name_been_taken=Название организации было уже принято.
-team_name_been_taken=Название команды было уже принято.
-email_been_used=Адрес электронной почты уже используется.
-illegal_team_name=Имя группы содержит недопустимые знаки.
-username_password_incorrect=Имя пользователя или пароль не правильный.
-enterred_invalid_repo_name=Пожалуйста, убедитесь, что введенно правильное имя хранилища.
-enterred_invalid_owner_name=Убедитесь, что введенное имя владельца верное.
-enterred_invalid_password=Убедитесь, что введенный пароль верен.
-user_not_exist=Данный пользователь не существует.
-last_org_owner=Удаляемый пользователь является последним в команде владельцев. Должен быть хотя бы один владелец.
-
-invalid_ssh_key=К сожалению, мы не смогли проверить ваш SSH-ключ: %s
-unable_verify_ssh_key=Gogs не может проверить ваш SSH-ключ, но мы допускаем, что он действителен. Пожалуйста, удостоверьтесь самостоятельно, что ключ действителен.
-auth_failed=Ошибка аутентификации: %v
-
-still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
-still_has_org=Вы находитесь в организации, сперва Вам необходимо покинуть ее или удалить.
-org_still_own_repo=Данная организация все еще является владельцем репозиториев, необходимо удалить или переместить их в начале.
-
-still_own_user=Эта проверка подлинности по-прежнему используется некоторыми пользователями, вы должны переместить их и затем снова удалить.
-
-target_branch_not_exist=Целевая ветка не существует
-
-[user]
-change_avatar=Измените ваш аватар на gravatar.com
-change_custom_avatar=Измените ваш аватар в настройках
-join_on=Присоединилась к
-repositories=Репозитории
-activity=Активность
-followers=Подписчики
-starred=Избранное
-following=Подписан
-
-form.name_reserved=Имя пользователя '%s' зарезервировано.
-form.name_pattern_not_allowed=Имя пользователя «%s» не допускается.
-
-[settings]
-profile=Профиль
-password=Пароль
-ssh_keys=SSH ключи
-social=Учетные записи в соцсетях
-applications=Приложения
-orgs=Организации
-delete=Удалить аккаунт
-uid=UID
-
-public_profile=Открытый профиль
-profile_desc=Адрес вашей электронной почты является публичным и будет использован для любых уведомлений, связанных с аккаунтом, а также для любых действий, совершенных через сайт.
-full_name=ФИО
-website=Веб-сайт
-location=Местоположение
-update_profile=Обновить профиль
-update_profile_success=Ваш профиль был успешно обновлен.
-change_username=Имя пользователя изменено
-change_username_prompt=Это изменение может повлечь за собой изменение ссылок относительно вашего аккаунта.
-continue=Далее
-cancel=Отмена
-
-enable_custom_avatar=Включить собственный аватар
-enable_custom_avatar_helper=Включите эту опцию, чтоб отключить загрузку с Gravatar
-choose_new_avatar=Выбрать новый аватар
-update_avatar=Обновить настройку аватара
-uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
-no_custom_avatar_available=Собственный аватар недоступен, включить его невозможно.
-update_avatar_success=Настройка вашего аватара обновлена успешно.
-
-change_password=Сменить пароль
-old_password=Текущий пароль
-new_password=Новый пароль
-retype_new_password=Подтверждение нового пароля
-password_incorrect=Текущий пароль не правильный.
-change_password_success=Пароль сменен успешно. Теперь вы можете войти с новым паролем.
-
-emails=Адреса электронной почты
-manage_emails=Управление адресами электронной почты
-email_desc=Ваш основной адрес электронной почты будет использован для уведомлений и других операций.
-primary=Основной
-primary_email=Установить как основной
-delete_email=Удалить
-email_deletion=Удаление адреса электронной почты
-email_deletion_desc=Удаление этого адреса электронной почты, приведет к удалению связанной с вашим аккаунтом, информации. Вы точно хотите продолжить?
-email_deletion_success=Адрес электронной почты успешно удален.
-add_new_email=Добавить новый адрес электронной почты
-add_email=Добавить электронную почту
-add_email_confirmation_sent=Новое подтверждение по электронной почте было отправлено '%s', пожалуйста, проверьте свой почтовый ящик в течение следующих %d часов, чтобы завершить процесс подтверждения.
-add_email_success=Новый адрес электронной почты успешно добавлен.
-
-manage_ssh_keys=Управление SSH ключами
-add_key=Добавить ключ
-ssh_desc=Это список ключей SSH связанных с вашей учетной записью. Удаляйте любые неизвестные вам ключи.
-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=Публичный ключ с таким же именем уже существует.
-key_name=Имя ключа
-key_content=Содержимое
-add_key_success=Был успешно добавлен новый ключ SSH «%s»!
-delete_key=Удалить
-ssh_key_deletion=Удаление ключа SSH
-ssh_key_deletion_desc=Удалить этот SSH ключ удалит все связанные с ним доступы для вашей учетной записи. Вы хотите продолжить?
-ssh_key_deletion_success=SSH ключ был успешно удален!
-add_on=Добавлено
-last_used=Последний раз использовался
-no_activity=Еще не применялся
-key_state_desc=Этот ключ использовался за последние 7 дней
-token_state_desc=Этот токен использовался за последние 7 дней
-
-manage_social=Управление привязанными учетными записями в соцсетях
-social_desc=Это список привязанных учетных записей в соцсетях. Удаляйте любые неизвестные вам привязки.
-unbind=Отвязать
-unbind_success=Социальная учетная запись отвязана.
-
-manage_access_token=Управление Токенами Персонального Доступа
-generate_new_token=Создать новый token
-tokens_desc=Созданные вами токены могут использоваться для доступа к Gogs API.
-new_token_desc=Пока что каждый токен будет иметь полный доступ к вашей учетной записи.
-token_name=Имя маркера
-generate_token=Генерировать маркер
-generate_token_succees=Успешно создан новый токен доступа! Пожалуйста сделайте копию вашего нового токена персонального доступа. Вы не сможете увидеть его снова!
-delete_token=Удалить
-access_token_deletion=Personal Access Token Deletion
-access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
-delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
-
-delete_account=Удалить свой аккаунт
-delete_prompt=Этим действием вы удалите свою учетную запись навсегда и <strong>НЕ СМОЖЕТЕ</strong> ее вернуть!
-confirm_delete_account=Подтвердите удаление
-delete_account_title=Удаление аккаунта
-delete_account_desc=Эта учетная запись будет удалена насовсем. Вы хотите продолжить?
-
-[repo]
-owner=Владелец
-repo_name=Имя репозитория
-repo_name_helper=Лучшие названия репозиториев коротки, запоминаемы и <strong>уникальны</strong>.
-visibility=Видимость
-visiblity_helper=This repository is <span class="ui red text">Private</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(Change of this value will affect all forks)
-fork_repo=Ответвить репозиторий
-fork_from=Ответвление от
-fork_visiblity_helper=Ответвленному репозиторию нельзя поменять уровень видимости
-repo_desc=Описание
-repo_lang=Язык
-repo_lang_helper=Выберите файлы .gitignore
-license=Лицензия
-license_helper=Выберите файл лицензии
-readme=Readme
-readme_helper=Выберите шаблон для файла readme
-auto_init=Инициализировать этот репозиторий выбранными файлами и шаблоном
-create_repo=Создать репозиторий
-default_branch=Ветка по умолчанию
-mirror_interval=Интервал зеркалирования (час)
-
-form.name_reserved=Имя репозитория  '%s'  зарезервировано.
-form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается.
-
-need_auth=Требуется авторизация
-migrate_type=Тип миграции
-migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
-migrate_repo=Перенос репозитория
-migrate.clone_address=Скопировать адрес
-migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
-migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или является не папкой.
-
-forked_from=forked from
-fork_from_self=Вы не можете форкнуть репозитарий, так как Вы уже его владелец!
-copy_link=Скопировать
-copy_link_success=Скопировано!
-copy_link_error=Press ⌘-C or Ctrl-C to copy
-click_to_copy=Скопировать в буфер обмена
-copied=Успешно скопировано
-clone_helper=Нужна помощь в клонировании? Посетите страницу <a target="_blank" href="%s">помощи</a>!
-unwatch=Перестать следить
-watch=Следить
-unstar=Убрать из избранного
-star=В избранное
-fork=Ответвить
-
-no_desc=Нет описания
-quick_guide=Краткое руководство
-clone_this_repo=Клонировать репозиторий
-create_new_repo_command=Создать новый репозиторий из командной строки
-push_exist_repo=Отправить существующий репозиторий из командной строки
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=Ветка
-tree=Дерево
-branch_and_tags=Ветки и метки
-branches=Ветки
-tags=Метки
-issues=Обсуждения
-pulls=Pull Requests
-labels=Метки
-milestones=Этапы
-commits=Коммиты
-releases=Релизы
-file_raw=Исходник
-file_history=История
-file_view_raw=Посмотреть исходник
-file_permalink=Постоянная ссылка
-
-commits.commits=Коммиты
-commits.search=Поиск коммитов
-commits.find=Найти
-commits.author=Автор
-commits.message=Сообщение
-commits.date=Дата
-commits.older=Раньше
-commits.newer=Новее
-
-issues.new=Новая задача
-issues.new.labels=Метки
-issues.new.no_label=Не метка
-issues.new.clear_labels=Отчистить метки
-issues.new.milestone=Milestone
-issues.new.no_milestone=No Milestone
-issues.new.clear_milestone=Clear milestone
-issues.new.open_milestone=Open Milestones
-issues.new.closed_milestone=Closed Milestones
-issues.new.assignee=Assignee
-issues.new.clear_assignee=Clear assignee
-issues.new.no_assignee=No assignee
-issues.create=Create Issue
-issues.new_label=Новая метка
-issues.new_label_placeholder=Имя метки...
-issues.create_label=Create Label
-issues.open_tab=%d Открыть
-issues.close_tab=%d Закрыть
-issues.filter_label=Метка
-issues.filter_label_no_select=Нет выбранной метки
-issues.filter_milestone=Этап
-issues.filter_milestone_no_select=No selected milestone
-issues.filter_assignee=Назначено
-issues.filter_assginee_no_select=No selected Assignee
-issues.filter_type=Тип
-issues.filter_type.all_issues=Все задачи
-issues.filter_type.assigned_to_you=Назначено Вам
-issues.filter_type.created_by_you=Созданные вами
-issues.filter_type.mentioning_you=Вы упомянуты
-issues.filter_sort=Сортировать
-issues.filter_sort.latest=Новейшие
-issues.filter_sort.oldest=Старейшие
-issues.filter_sort.recentupdate=Recently updated
-issues.filter_sort.leastupdate=Least recently updated
-issues.filter_sort.mostcomment=Most commented
-issues.filter_sort.leastcomment=Least commented
-issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
-issues.opened_by_fake=opened %[1]s by %[2]s
-issues.previous=Предыдущая страница
-issues.next=Следующая страница
-issues.open_title=Open
-issues.closed_title=Closed
-issues.num_comments=%d comments
-issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.no_content=There is no content yet.
-issues.close_issue=Закрыть
-issues.close_comment_issue=Закрыть и комментировать
-issues.reopen_issue=Reopen
-issues.reopen_comment_issue=Reopen and comment
-issues.create_comment=Комментировать
-issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Poster
-issues.admin=Администратор
-issues.owner=Владелец
-issues.sign_up_for_free=Зарегистрируйтесь бесплатно
-issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
-issues.edit=Изменить
-issues.cancel=Отмена
-issues.save=Save
-issues.label_title=Имя метки
-issues.label_color=Цвет метки
-issues.label_count=%d меток
-issues.label_open_issues=%d открытых задач
-issues.label_edit=Редактировать
-issues.label_delete=Удалить
-issues.label_modify=Изменение метки
-issues.label_deletion=Удаление метки
-issues.label_deletion_desc=Удаление ярлыка затронет все связанные задачи. Продолжить?
-issues.label_deletion_success=Метка была удалена успешно!
-
-pulls.compare_changes=Сравнить изменения
-pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
-pulls.compare_base=base
-pulls.compare_compare=compare
-pulls.filter_branch=Filter branch
-pulls.no_results=No results found.
-pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
-pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Create Pull Request
-pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
-pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Обсуждение
-pulls.tab_commits=Коммиты
-pulls.tab_files=Измененные файлы
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Merge Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=New Milestone
-milestones.open_tab=%d Open
-milestones.close_tab=%d Closed
-milestones.closed=Closed %s
-milestones.no_due_date=No due date
-milestones.open=Open
-milestones.close=Close
-milestones.new_subheader=Create milestones to organize your issues.
-milestones.create=Create Milestone
-milestones.title=Title
-milestones.desc=Description
-milestones.due_date=Due Date (optional)
-milestones.clear=Clear
-milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
-milestones.create_success=Milestone '%s' has been created successfully!
-milestones.edit=Edit Milestone
-milestones.edit_subheader=Use better description for milestones so people won't be confused.
-milestones.cancel=Cancel
-milestones.modify=Modify Milestone
-milestones.edit_success=Changes of milestone '%s' has been saved successfully!
-milestones.deletion=Milestone Deletion
-milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
-milestones.deletion_success=Milestone has been deleted successfully!
-
-settings=Настройки
-settings.options=Опции
-settings.collaboration=Сотрудничество
-settings.hooks=Автоматическое обновление
-settings.githooks=Git хуки
-settings.basic_settings=Основные параметры
-settings.danger_zone=Опасная зона
-settings.site=Официальный сайт
-settings.update_settings=Обновить настройки
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
-settings.transfer=Передать права собственности
-settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
-settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием.
-settings.delete=Удалить этот репозиторий
-settings.delete_desc=Как только вы удалите репозиторий — пути назад не будет. Удостоверьтесь, что вам это точно нужно.
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=Настройка репозитория обновлена успешно.
-settings.transfer_owner=Новый владелец
-settings.make_transfer=Выполнить передачу
-settings.transfer_succeed=Владение репозиторием было успешно передано.
-settings.confirm_delete=Подтвердить удаление
-settings.add_collaborator=Добавить нового соавтора
-settings.add_collaborator_success=Был добавлен новый соавтор.
-settings.remove_collaborator_success=Соавтор был удален.
-settings.user_is_org_member=Пользователь является членом организации,  члены которой не могут быть добавлены в качестве соавтора.
-settings.add_webhook=Добавить Webhook
-settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gogs. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем <a target="_blank" href="%s">Руководстве по Webhooks</a>.
-settings.webhook_deletion=Delete Webhook
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Request
-settings.webhook.response=Response
-settings.webhook.headers=Headers
-settings.webhook.payload=Payload
-settings.webhook.body=Body
-settings.githooks_desc=Git Hooks are powered by Git itself, you can edit files of supported hooks in the list below to perform custom operations.
-settings.githook_edit_desc=If the hook is inactive, sample content will be presented. Leaving content to an empty value will disable this hook.
-settings.githook_name=Название Hook'a
-settings.githook_content=Перехватить содержание
-settings.update_githook=Обновить Hook
-settings.add_webhook_desc=Мы отправим запрос <code>POST</code> на указанный ниже URL с информацией о событиях. Можно также указать формат, в котором вы бы хотели получить данные (JSON, <code>x-www-form-urlencoded</code>, <em>и т.д.</em>). Дополнительную информацию можно найти в <a target="_blank" href="%s">Руководстве по Webhook</a>.
-settings.payload_url=URL обработчика
-settings.content_type=Тип содержимого
-settings.secret=Secret
-settings.slack_username=Username
-settings.slack_icon_url=Icon URL
-settings.slack_color=Color
-settings.event_desc=На какие события этот webhook должен срабатывать?
-settings.event_push_only=Просто  <code>push</code> событие.
-settings.event_send_everything=I need <strong>everything</strong>.
-settings.event_choose=Let me choose what I need.
-settings.event_create=Create
-settings.event_create_desc=Branch, or tag created
-settings.event_push=Push
-settings.event_push_desc=Git push to a repository
-settings.active=Активен
-settings.active_helper=Details regarding the event which triggered the hook will be delivered as well.
-settings.add_hook_success=Был добавлен новый webhook.
-settings.update_webhook=Обновление Webhook
-settings.update_hook_success=Webhook обновлен.
-settings.delete_webhook=Удалить автоматическое обновление
-settings.recent_deliveries=Недавние рассылки
-settings.hook_type=Тип перехватчика
-settings.add_slack_hook_desc=Добавить интеграцию с <a href="%s">Slack</a> в ваш репозиторий.
-settings.slack_token=Token
-settings.slack_domain=Домен
-settings.slack_channel=Канал
-settings.deploy_keys=Ключи развертывания
-settings.add_deploy_key=Add Deploy Key
-settings.no_deploy_keys=You haven't added any deploy key.
-settings.title=Title
-settings.deploy_key_content=Content
-settings.key_been_used=Deploy key content has been used.
-settings.key_name_used=Deploy key with same name has already existed.
-settings.add_key_success=New deploy key '%s' has been added successfully!
-settings.deploy_key_deletion=Delete Deploy Key
-settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
-settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
-
-diff.browse_source=Просмотр исходного кода
-diff.parent=Родитель
-diff.commit=Сommit
-diff.data_not_available=Данные Diff не доступны.
-diff.show_diff_stats=Показать статистику Diff
-diff.stats_desc=<strong> %d измененных файлов</strong> с <strong>%d добавлено</strong> и <strong>%d удалено</strong>
-diff.bin=BIN
-diff.view_file=Просмотреть файл
-
-release.releases=Релизы
-release.new_release=Новый релиз
-release.draft=Черновик
-release.prerelease=Предрелиз
-release.stable=Стабильный
-release.edit=Редактировать
-release.ahead=<strong>%d</strong> коммитов %s начиная с этого релиза
-release.source_code=Исходный код
-release.tag_name=Имя тега
-release.target=Цель
-release.tag_helper=Выберите существующий тег, или создайте новый.
-release.release_title=Название релиза
-release.content_with_md=Содержимое с <a href="%s">Markdown</a>
-release.write=Запись
-release.preview=Предварительный просмотр
-release.content_placeholder=Напишите что-нибудь
-release.loading=Загрузка...
-release.prerelease_desc=Это предварительный релиз
-release.prerelease_helper=We’ll point out that this release is not production-ready.
-release.publish=Опубликовать релиз
-release.save_draft=Сохранить черновик
-release.edit_release=Редактировать релиз
-release.tag_name_already_exist=Релиз с этим именем тега уже существует.
-
-[org]
-org_name_holder=Название организации
-org_name_helper=Лучшие названия организаций коротки и запоминаемы.
-create_org=Создать Организацию
-repo_updated=Обновлено
-people=Люди
-invite_someone=Пригласить кого-нибудь
-teams=Команды
-lower_members=Участники
-lower_repositories=Репозитории
-create_new_team=Создать Новую Команду
-org_desc=Описание
-team_name=Название команды
-team_desc=Описание
-team_name_helper=Вы будете использовать это имя для упоминания этой команды в обсуждении.
-team_desc_helper=What is this team all about?
-team_permission_desc=Какой уровень разрешений должен быть у этой команды?
-
-form.name_reserved=Наименование организации  '%s' зарезервированно.
-form.name_pattern_not_allowed=Шаблон организации  '%s' не допускается.
-
-settings=Настройки
-settings.options=Опции
-settings.full_name=Полное имя
-settings.website=Сайт
-settings.location=Местоположение
-settings.update_settings=Обновить настройки
-settings.update_setting_success=Настройки Организации были успешно обновлены.
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=Удалить Организацию
-settings.delete_account=Удалить Эту Организацию
-settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда. 
-settings.confirm_delete_account=Подтвердить удаление
-settings.delete_org_title=Удаление Организации
-settings.delete_org_desc=Эта организация будет удалена навсегда. Хотите всё-равно продолжить?
-settings.hooks_desc=Добавьте автоматическое обновление, который будет вызываться для <strong>всех репозиций</strong> под этой Группой.
-
-members.public=Публичный
-members.public_helper=Сделать Приватным
-members.private=Приватный
-members.private_helper=Сделать Публичным
-members.owner=Владелец
-members.member=Участник
-members.conceal=Скрыть
-members.remove=Удалить
-members.leave=Покинуть
-members.invite_desc=Начните вводить имя пользователя чтобы пригласить нового члена %s:
-members.invite_now=Пригласите сейчас
-
-teams.join=Объединить
-teams.leave=Выйти
-teams.read_access=Доступ на чтение
-teams.read_access_helper=Эта команда будет иметь возможность просматривать и клонировать ее репозитории.
-teams.write_access=Доступ на запись
-teams.write_access_helper=Эта команда будет в состоянии прочитать ее репозитории, а также посылать изменения.
-teams.admin_access=Доступ администратора
-teams.admin_access_helper=Эта команда будет иметь возможность выполнять push/pull в его репозиториях, а также добавлять других сотрудников к нему.
-teams.no_desc=Эта группа не имеет описания
-teams.settings=Настройки
-teams.owners_permission_desc=Владельцы имеют полный доступ ко <strong>всем репозиториям</strong> и имеют <strong>права администратора</strong> организации.
-teams.members=Члены группы разработки
-teams.update_settings=Обновить настройки
-teams.delete_team=Удалить эту группу разработки
-teams.add_team_member=Добавление члена группы разработки
-teams.delete_team_title=Удалить группу разработки
-teams.delete_team_desc=Эта команда будет удалена. Вы хотите продолжить? Члены этой группы могут потерять доступ к некоторым репозиториям.
-teams.delete_team_success=Данная команда была удалена успешно.
-teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
-teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
-teams.admin_permission_desc=This team grants <strong>Admin</strong> access: members can read from, push to, and add collaborators to the team's repositories.
-teams.repositories=Репозитории группы разработки
-teams.add_team_repository=Добавить репозиторий группы разработки
-teams.remove_repo=Удалить
-teams.add_nonexistent_repo=Вы добавляете в отсутствующий репозиторий, пожалуйста сначала его создайте.
-
-[admin]
-dashboard=Панель управления
-users=Пользователи
-organizations=Организации
-repositories=Репозитории
-authentication=Авторизация
-config=Настройки
-notices=Системные уведомления
-monitor=Мониторинг
-first_page=First
-last_page=Last
-total=Total: %d
-
-dashboard.statistic=Статистика
-dashboard.operations=Операции
-dashboard.system_status=Статус системного монитора
-dashboard.statistic_info=В базе данных Gogs записано <b>%d</b> пользователей, <b>%d</b> организаций, <b>%d</b> публичных ключей, <b>%d</b> репозиторий, <b>%d</b> подписок на репозитории, <b>%d</b> добавлений в избранное, <b>%d</b> действий, <b>%d</b> доступов, <b>%d</b> обсуждений, <b>%d</b> комментариев, <b>%d</b> социальных учетных записей, <b>%d</b> подписок на пользователей, <b>%d</b> зеркал, <b>%d</b> релизов, <b>%d</b> источников входа, <b>%d</b> веб-хуков, <b>%d</b> вех, <b>%d</b> меток, <b>%d</b> задач хуков, <b>%d</b> команд, <b>%d</b> задач по обновлению, <b>%d</b> присоединенных файлов.
-dashboard.operation_name=Наименование Операции
-dashboard.operation_switch=Переключить
-dashboard.operation_run=Запуск
-dashboard.clean_unbind_oauth=Удалить не привязанные OAUth
-dashboard.clean_unbind_oauth_success=Не привязанные OAuth аккаунты успешно удалены.
-dashboard.delete_inactivate_accounts=Удалить все неактивированные учетные записи
-dashboard.delete_inactivate_accounts_success=Все неактивированные учетные записи удалены успешно.
-dashboard.delete_repo_archives=Удаление всех архивов репозиториев
-dashboard.delete_repo_archives_success=Все архивы репозиториев были успешно удалены.
-dashboard.git_gc_repos=Выполнить сборку мусора на репозиториях
-dashboard.git_gc_repos_success=Сборка мусора на всех репозиториях успешно выполнена.
-dashboard.resync_all_sshkeys=Переписать файл «.ssh/authorized_keys» (осторожно: не Gogs ключи будут утеряны)
-dashboard.resync_all_sshkeys_success=Были успешно переписаны все открытые ключи.
-dashboard.resync_all_update_hooks=Rewrite all update hook of repositories (needed when custom config path is changed)
-dashboard.resync_all_update_hooks_success=All repositories' update hook have been rewritten successfully.
-
-dashboard.server_uptime=Время непрерывной работы сервера
-dashboard.current_goroutine=Текущий Goroutines
-dashboard.current_memory_usage=Текущее использование памяти
-dashboard.total_memory_allocated=Всего памяти выделено
-dashboard.memory_obtained=Memory Obtained
-dashboard.pointer_lookup_times=Pointer Lookup Times
-dashboard.memory_allocate_times=Memory Allocate Times
-dashboard.memory_free_times=Memory Free Times
-dashboard.current_heap_usage=Текущее использование кучи
-dashboard.heap_memory_obtained=Heap Memory Obtained
-dashboard.heap_memory_idle=Heap Memory Idle
-dashboard.heap_memory_in_use=Кучи памяти в работе
-dashboard.heap_memory_released=Heap Memory Released
-dashboard.heap_objects=Heap Objects
-dashboard.bootstrap_stack_usage=Bootstrap Stack Usage
-dashboard.stack_memory_obtained=Stack Memory Obtained
-dashboard.mspan_structures_usage=MSpan Structures Usage
-dashboard.mspan_structures_obtained=MSpan Structures Obtained
-dashboard.mcache_structures_usage=MCache Structures Usage
-dashboard.mcache_structures_obtained=MCache Structures Obtained
-dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
-dashboard.gc_metadata_obtained=GC Metadada Obtained
-dashboard.other_system_allocation_obtained=Other System Allocation Obtained
-dashboard.next_gc_recycle=Next GC Recycle
-dashboard.last_gc_time=Since Last GC Time
-dashboard.total_gc_time=Total GC Pause
-dashboard.total_gc_pause=Total GC Pause
-dashboard.last_gc_pause=Last GC Pause
-dashboard.gc_times=GC Times
-
-users.user_manage_panel=User Manage Panel
-users.new_account=Создать новый аккаунт
-users.name=Имя
-users.activated=Активирован
-users.admin=Администратор
-users.repos=Репозитории
-users.created=Создано
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=Редактировать
-users.auth_source=Authentication Source
-users.local=Локальный
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=Профиль учетной записи обновлен успешно.
-users.edit_account=Изменение учетной записи
-users.is_activated=Эта учетная запись активирована
-users.is_admin=У этой учетной записи есть права администратора
-users.allow_git_hook=Пользователь имеет право создать Git перехватчик
-users.update_profile=Обновить профиль учетной записи
-users.delete_account=Удалить эту учетную запись
-users.still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
-users.still_has_org=This account still has membership in at least one organization, you have to leave or delete the organizations first.
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=Управление группами
-orgs.name=Имя
-orgs.teams=Команды
-orgs.members=Участники
-
-repos.repo_manage_panel=Repository Manage Panel
-repos.owner=Владелец
-repos.name=Имя
-repos.private=Приватный
-repos.watches=Следят
-repos.stars=В избранном
-repos.issues=Вопросы
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Add New Source
-auths.name=Имя
-auths.type=Тип
-auths.enabled=Включено
-auths.updated=Обновлено
-auths.auth_type=Authentication Type
-auths.auth_name=Authentication Name
-auths.domain=Домен
-auths.host=Хост
-auths.port=Порт
-auths.bind_dn=Bind DN
-auths.bind_password=Bind Password
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=First name attribute
-auths.attribute_surname=Surname attribute
-auths.attribute_mail=E-mail attribute
-auths.filter=User Filter
-auths.admin_filter=Admin Filter
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=Узел SMTP
-auths.smtpport=SMTP-порт
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=Включение шифрования TLS
-auths.skip_tls_verify=Skip TLS Verify
-auths.pam_service_name=PAM Service Name
-auths.enable_auto_register=Включить автоматическую регистрацию
-auths.tips=Советы
-auths.edit=Edit Authentication Setting
-auths.activated=Эта аутентификация активирована
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Authentication setting has been updated successfully.
-auths.update=Update Authentication Setting
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=Конфигурация сервера
-config.app_name=Имя приложения
-config.app_ver=Версия приложения
-config.app_url=URL приложения
-config.domain=Домен
-config.offline_mode=Автономный режим
-config.disable_router_log=Отключение журнала маршрутизатора
-config.run_user=Запуск пользователем
-config.run_mode=Режим выполнения
-config.repo_root_path=Repository Root Path
-config.static_file_root_path=Static File Root Path
-config.log_file_root_path=Log File Root Path
-config.script_type=Тип сценария
-config.reverse_auth_user=Reverse Authentication User
-config.db_config=Конфигурация базы данных
-config.db_type=Тип
-config.db_host=Хост
-config.db_name=Имя
-config.db_user=Пользователь
-config.db_ssl_mode=Режим SSL
-config.db_ssl_mode_helper=(только для «postgres»)
-config.db_path=Путь
-config.db_path_helper=(for "sqlite3" and "tidb")
-config.service_config=Service Configuration
-config.register_email_confirm=Require E-mail Confirmation
-config.disable_register=Отключить регистрацию
-config.show_registration_button=Show Register Button
-config.require_sign_in_view=Для просмотра необходима авторизация
-config.enable_cache_avatar=Кешировать аватар
-config.mail_notify=Почтовые уведомления
-config.disable_key_size_check=Disable Minimum Key Size Check
-config.enable_captcha=Enable Captcha
-config.active_code_lives=Active Code Lives
-config.reset_password_code_lives=Reset Password Code Lives
-config.webhook_config=Настройка автоматического обновления репозиции
-config.queue_length=Queue Length
-config.deliver_timeout=Задержка доставки
-config.skip_tls_verify=Пропустить TLS проверка
-config.mailer_config=Настройки почты
-config.mailer_enabled=Включено
-config.mailer_disable_helo=Отключить HELO
-config.mailer_name=Имя
-config.mailer_host=Сервер
-config.mailer_user=Пользователь
-config.oauth_config=Конфигурация OAuth
-config.oauth_enabled=Включено
-config.cache_config=Настройки кеша
-config.cache_adapter=Cache Adapter
-config.cache_interval=Cache Interval
-config.cache_conn=Cache Connection
-config.session_config=Session Configuration
-config.session_provider=Session Provider
-config.provider_config=Provider Config
-config.cookie_name=Имя файла cookie
-config.enable_set_cookie=Enable Set Cookie
-config.gc_interval_time=GC Interval Time
-config.session_life_time=Время жизни сессии
-config.https_only=Только HTTPS
-config.cookie_life_time=Время жизни файла cookie
-config.picture_config=Настройка изображения
-config.picture_service=Picture Service
-config.disable_gravatar=Отключить Gravatar
-config.log_config=Конфигурация журнала
-config.log_mode=Режим журналирования
-
-monitor.cron=Задачи cron
-monitor.name=Имя
-monitor.schedule=Расписание
-monitor.next=В следующий раз
-monitor.previous=Предыдущий раз
-monitor.execute_times=Execute Times
-monitor.process=Запущенные процессы
-monitor.desc=Описание
-monitor.start=Момент начала
-monitor.execute_time=Время выполнения
-
-notices.system_notice_list=Система уведомлений
-notices.type=Тип
-notices.type_1=Репозиторий
-notices.desc=Описание
-notices.op=Op.
-notices.delete_success=Системное уведомление успешно удалено.
-
-[action]
-create_repo=создан репозиторий <a href="%s"> %s</a>
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=pushed to <a href="%s/src/%s">%[2]s</a> at <a href="%[1]s">%[3]s</a>
-create_issue=`opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
-create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-comment_issue=`commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
-merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
-transfer_repo=transfered repository <code>%s</code> to <a href="%s">%s</a>
-push_tag=pushed tag <a href="%s/src/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
-compare_2_commits=Просмотреть сравнение двух коммитов
-
-[tool]
-ago=назад
-from_now=from now
-now=сейчас
-1s=1 second %s
-1m=1 минута %s
-1h=1 час %s
-1d=1 день %s
-1w=1 неделя %s
-1mon=1 month %s
-1y=1 год %s
-seconds=%d секунд %s
-minutes=%d минут %s
-hours=%d часов %s
-days=%d дней %s 
-weeks=%d weeks %s
-months=%d months %s
-years=%d years %s
-raw_seconds=секунд
-raw_minutes=минут
-
-[dropzone]
-default_message=Drop files here or click to upload.
-invalid_input_type=You can't upload files of this type.
-file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
-remove_file=Remove file
-
+app_desc=Удобная служба для собственного Git-репозитория, написанная на языке Go
+
+home=Главная
+dashboard=Панель мониторинга
+explore=Обзор
+help=Помощь
+sign_in=Войти
+sign_out=Выход
+sign_up=Регистрация
+register=Зарегистрироваться
+website=Веб-сайт
+version=Версия
+page=Страница
+template=Шаблон
+language=Язык
+create_new=Создать...
+user_profile_and_more=Профиль и остальное
+signed_in_as=Вы вошли как
+
+username=Имя пользователя
+email=Эл. почта
+password=Пароль
+re_type=Повтор
+captcha=Captcha
+
+repository=Репозиторий
+organization=Организация
+mirror=Зеркало
+new_repo=Новый репозиторий
+new_migrate=Новая Миграция
+new_fork=Новый проект из репозитория
+new_org=Новая Организация
+manage_org=Управление Организацией
+admin_panel=Панель администратора
+account_settings=Настройки аккаунта
+settings=Настройки
+your_profile=Ваш профиль
+your_settings=Ваши настройки
+
+news_feed=Лента новостей
+pull_requests=Pull Requests
+issues=Вопросы
+
+cancel=Отмена
+
+[search]
+search=Поиск...
+repository=Репозиторий
+user=Пользователь
+issue=Проблема
+code=Код
+
+[install]
+install=Установка
+title=Установочные шаги для первого запуска
+docker_helper=Если вы используете Gogs в Docker-контейнере, пожалуйста прочтите <a target="_blank" href="%s">эти советы</a>, перед тем как что-либо изменить!
+requite_db_desc=Gogs требует MySQL, PostgreSQL, SQLite3 или TiDB.
+db_title=Настройки базы данных
+db_type=Тип базы данных
+host=Хост
+user=Пользователь
+password=Пароль
+db_name=Имя базы данных
+db_helper=Для MySQL используйте тип таблиц InnoDB с кодировкой utf8_general_ci.
+ssl_mode=Режим SSL
+path=Путь
+sqlite_helper=Путь до базы данных SQLite или TiDB.
+err_empty_db_path=Путь к базе данных SQLite3 или TiDB не может быть пустым.
+err_invalid_tidb_name=Название базы данных TiDB не может содержать символы "." и "-".
+no_admin_and_disable_registration=Вы не можете отключить регистрацию, не создав аккаунт администратора.
+err_empty_admin_password=Пароль администратора не может быть пустым.
+
+general_title=Общие параметры Gogs
+app_name=Имя приложения
+app_name_helper=Укажите здесь название вашей потрясающей организации!
+repo_path=Путь корня репозитория
+repo_path_helper=Все удаленные репозитории Git будут сохранены в этой директории.
+run_user=Пользователь
+run_user_helper=У пользователя должен быть доступ к пути к корню репозитория и к запуску Gogs.
+domain=Домен
+domain_helper=Влияет на URL-адреса для клонирования по SSH.
+ssh_port=SSH порт
+ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH.
+http_port=Порт HTTP
+http_port_helper=Номер порта, который приложение будет слушать.
+app_url=URL приложения
+app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на адреса в электронной почте.
+
+optional_title=Расширенные настройки
+email_title=Настройки службы электронной почты
+smtp_host=Узел SMTP
+smtp_from=Из
+smtp_from_helper=Почта от адреса, RFC 5322. Это может быть email адрес или формат "Имя" <email@example.com>.
+mailer_user=Электронная почта отправителя
+mailer_password=Пароль отправителя
+register_confirm=Включить подтверждение регистрации
+mail_notify=Разрешить почтовые уведомления
+server_service_title=Сервер и другие настройки служб
+offline_mode=Включение офлайн режима
+offline_mode_popup=Отключить CDN даже в производственном режиме, все файлы ресурсов будут раздаваться локально.
+disable_gravatar=Отключить службу Gravatar
+disable_gravatar_popup=Отключить Gravatar и пользовательские источники, все аватары по-умолчанию загружаются пользователями.
+disable_registration=Отключить самостоятельную регистрацию
+disable_registration_popup=Запретить пользователям самостоятельную регистрацию, только администратор может создавать аккаунты.
+enable_captcha=Включить капчу
+enable_captcha_popup=Запрашивать капчу при регистрации пользователя.
+require_sign_in_view=Разрешить требовать авторизацию для просмотра страниц
+require_sign_in_view_popup=Только авторизированные пользователи могут просматривать страницы, посетители смогут увидеть только  ссылку на авторизацию вверху страницы.
+admin_setting_desc=Вы не должны создать учетную запись администратора прямо сейчас, пользователь с ID = 1 получит доступ с правами администратора автоматически.
+admin_title=Настройки учётной записи администратора
+admin_name=Имя пользователя
+admin_password=Пароль
+confirm_password=Подтвердить пароль
+admin_email=Электронная почта администратора
+install_gogs=Установить Gogs
+test_git_failed=Не удалось проверить 'git' команду: %v
+sqlite3_not_available=Ваша версия не поддерживает SQLite3, пожалуйста скачайте официальную бинарную версию от %s, а не версию gobuild.
+invalid_db_setting=Настройки базы данных не правильные: %v
+invalid_repo_path=Недопустимый путь к корню репозитория: %v
+run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s
+save_config_failed=Не удалось сохранить конфигурацию: %v
+invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
+install_success=Добро пожаловать! Мы рады, что вы выбрали Gogs. Веселитесь и берегите себя.
+
+[home]
+uname_holder=Имя пользователь или E-mail
+password_holder=Пароль
+switch_dashboard_context=Переключить контекст панели управления
+my_repos=Мои репозитории
+collaborative_repos=Совместные репозитории
+my_orgs=Моя Организация
+my_mirrors=Мои зеркала
+view_home=Показать %s
+
+issues.in_your_repos=В вашем репозитории
+
+[explore]
+repos=Репозитории
+
+[auth]
+create_new_account=Создать новый аккаунт
+register_hepler_msg=Уже есть аккаунт? Авторизуйтесь!
+social_register_hepler_msg=Уже есть учетная запись? Свяжите ее с соцсетью!
+disable_register_prompt=Извините,  возможность регистрации отключена. Пожалуйста, свяжитесь с администратором сайта.
+disable_register_mail=К сожалению подтверждение регистрации по почте отключено.
+remember_me=Запомнить меня
+forgot_password=Забыли пароль
+forget_password=Забыли пароль?
+sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
+confirmation_mail_sent_prompt=Новое письмо для подтверждения было направлено на <b>%s</b>, пожалуйста, проверьте ваш почтовый ящик в течение %d часов для завершения регистрации.
+active_your_account=Активируйте свой аккаунт
+resent_limit_prompt=Вы слишком часто отправляете письмо с активацией. Подождите 3 минуты, пожалуйста.
+has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (<b>%s</b>). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже.
+resend_mail=Нажмите здесь, чтобы переотправить активационное письмо
+email_not_associate=Этот адрес электронной почты не связан ни с одной учетной записью.
+send_reset_mail=Нажмите сюда, чтобы отправить письмо для сброса пароля
+reset_password=Сброс пароля
+invalid_code=Извините, ваш код подтверждения истек или не является допустимым.
+reset_password_helper=Нажмите здесь, чтобы сбросить свой пароль
+password_too_short=Длина пароля не менее 6 символов.
+
+[mail]
+activate_account=Пожалуйста активируйте свой аккаунт
+activate_email=Подтвердите адрес своей электронной почты
+reset_password=Восстановите ваш пароль
+register_success=Регистрация окончена. Добро пожаловать!
+register_notify=Welcome on board
+
+[modal]
+yes=Да
+no=Нет
+modify=Изменить
+
+[form]
+UserName=Пользователь
+RepoName=Имя репозитория
+Email=Адрес эл. почты
+Password=Пароль
+Retype=Введите пароль еще раз
+SSHTitle=Имя SSH ключа
+HttpsUrl=URL HTTPS
+PayloadUrl=URL обработчика
+TeamName=Название команды
+AuthName=Имя авторизации
+AdminEmail=Электронная почта администратора
+
+require_error=` не может быть пустым.`
+alpha_dash_error=«должен быть допустимым символьным, числовым или dash(-_) значением.»
+alpha_dash_dot_error=«должен быть допустимым символьным, числовым или dash(-_) символами, включая точку.»
+size_error=` должен быть размер %s.`
+min_size_error=«должен содержать по крайней мере %s символов.»
+max_size_error=` должен содержать максимум %s символов.`
+email_error=«не является адресом электронной почты.»
+url_error=«не является допустимым URL-адресом.»
+include_error=` должен содержать '%s'`
+unknown_error=Неизвестная ошибка:
+captcha_incorrect=CAPTCHA не совпадает.
+password_not_match=Пароль и подтверждение пароля не совпадают.
+
+username_been_taken=Имя пользователя уже принято.
+repo_name_been_taken=Имя репозитория уже принято.
+org_name_been_taken=Название организации было уже принято.
+team_name_been_taken=Название команды было уже принято.
+email_been_used=Адрес электронной почты уже используется.
+illegal_team_name=Имя группы содержит недопустимые знаки.
+username_password_incorrect=Имя пользователя или пароль не правильный.
+enterred_invalid_repo_name=Пожалуйста, убедитесь, что введенно правильное имя хранилища.
+enterred_invalid_owner_name=Убедитесь, что введенное имя владельца верное.
+enterred_invalid_password=Убедитесь, что введенный пароль верен.
+user_not_exist=Данный пользователь не существует.
+last_org_owner=Удаляемый пользователь является последним в команде владельцев. Должен быть хотя бы один владелец.
+
+invalid_ssh_key=К сожалению, мы не смогли проверить ваш SSH-ключ: %s
+unable_verify_ssh_key=Gogs не может проверить ваш SSH-ключ, но мы допускаем, что он действителен. Пожалуйста, удостоверьтесь самостоятельно, что ключ действителен.
+auth_failed=Ошибка аутентификации: %v
+
+still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
+still_has_org=Вы находитесь в организации, сперва Вам необходимо покинуть ее или удалить.
+org_still_own_repo=Данная организация все еще является владельцем репозиториев, необходимо удалить или переместить их в начале.
+
+still_own_user=Эта проверка подлинности по-прежнему используется некоторыми пользователями, вы должны переместить их и затем снова удалить.
+
+target_branch_not_exist=Целевая ветка не существует
+
+[user]
+change_avatar=Измените ваш аватар на gravatar.com
+change_custom_avatar=Измените ваш аватар в настройках
+join_on=Присоединилась к
+repositories=Репозитории
+activity=Активность
+followers=Подписчики
+starred=Избранное
+following=Подписан
+
+form.name_reserved=Имя пользователя '%s' зарезервировано.
+form.name_pattern_not_allowed=Имя пользователя «%s» не допускается.
+
+[settings]
+profile=Профиль
+password=Пароль
+ssh_keys=SSH ключи
+social=Учетные записи в соцсетях
+applications=Приложения
+orgs=Организации
+delete=Удалить аккаунт
+uid=UID
+
+public_profile=Открытый профиль
+profile_desc=Адрес вашей электронной почты является публичным и будет использован для любых уведомлений, связанных с аккаунтом, а также для любых действий, совершенных через сайт.
+full_name=ФИО
+website=Веб-сайт
+location=Местоположение
+update_profile=Обновить профиль
+update_profile_success=Ваш профиль был успешно обновлен.
+change_username=Имя пользователя изменено
+change_username_prompt=Это изменение может повлечь за собой изменение ссылок относительно вашего аккаунта.
+continue=Далее
+cancel=Отмена
+
+enable_custom_avatar=Включить собственный аватар
+enable_custom_avatar_helper=Включите эту опцию, чтоб отключить загрузку с Gravatar
+choose_new_avatar=Выбрать новый аватар
+update_avatar=Обновить настройку аватара
+uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
+no_custom_avatar_available=Собственный аватар недоступен, включить его невозможно.
+update_avatar_success=Настройка вашего аватара обновлена успешно.
+
+change_password=Сменить пароль
+old_password=Текущий пароль
+new_password=Новый пароль
+retype_new_password=Подтверждение нового пароля
+password_incorrect=Текущий пароль не правильный.
+change_password_success=Пароль сменен успешно. Теперь вы можете войти с новым паролем.
+
+emails=Адреса электронной почты
+manage_emails=Управление адресами электронной почты
+email_desc=Ваш основной адрес электронной почты будет использован для уведомлений и других операций.
+primary=Основной
+primary_email=Установить как основной
+delete_email=Удалить
+email_deletion=Удаление адреса электронной почты
+email_deletion_desc=Удаление этого адреса электронной почты, приведет к удалению связанной с вашим аккаунтом, информации. Вы точно хотите продолжить?
+email_deletion_success=Адрес электронной почты успешно удален.
+add_new_email=Добавить новый адрес электронной почты
+add_email=Добавить электронную почту
+add_email_confirmation_sent=Новое подтверждение по электронной почте было отправлено '%s', пожалуйста, проверьте свой почтовый ящик в течение следующих %d часов, чтобы завершить процесс подтверждения.
+add_email_success=Новый адрес электронной почты успешно добавлен.
+
+manage_ssh_keys=Управление SSH ключами
+add_key=Добавить ключ
+ssh_desc=Это список ключей SSH связанных с вашей учетной записью. Удаляйте любые неизвестные вам ключи.
+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=Публичный ключ с таким же именем уже существует.
+key_name=Имя ключа
+key_content=Содержимое
+add_key_success=Был успешно добавлен новый ключ SSH «%s»!
+delete_key=Удалить
+ssh_key_deletion=Удаление ключа SSH
+ssh_key_deletion_desc=Удалить этот SSH ключ удалит все связанные с ним доступы для вашей учетной записи. Вы хотите продолжить?
+ssh_key_deletion_success=SSH ключ был успешно удален!
+add_on=Добавлено
+last_used=Последний раз использовался
+no_activity=Еще не применялся
+key_state_desc=Этот ключ использовался за последние 7 дней
+token_state_desc=Этот токен использовался за последние 7 дней
+
+manage_social=Управление привязанными учетными записями в соцсетях
+social_desc=Это список привязанных учетных записей в соцсетях. Удаляйте любые неизвестные вам привязки.
+unbind=Отвязать
+unbind_success=Социальная учетная запись отвязана.
+
+manage_access_token=Управление Токенами Персонального Доступа
+generate_new_token=Создать новый token
+tokens_desc=Созданные вами токены могут использоваться для доступа к Gogs API.
+new_token_desc=Пока что каждый токен будет иметь полный доступ к вашей учетной записи.
+token_name=Имя маркера
+generate_token=Генерировать маркер
+generate_token_succees=Успешно создан новый токен доступа! Пожалуйста сделайте копию вашего нового токена персонального доступа. Вы не сможете увидеть его снова!
+delete_token=Удалить
+access_token_deletion=Удаление персонального токена доступа
+access_token_deletion_desc=Удаление этого персонального токена доступа приведет к удалению всех связанных прав доступа к приложению. Вы хотите продолжить?
+delete_token_success=Персональный токен доступа успешно удален! Не забудьте изменить настройки вашего приложения.
+
+delete_account=Удалить свой аккаунт
+delete_prompt=Этим действием вы удалите свою учетную запись навсегда и <strong>НЕ СМОЖЕТЕ</strong> ее вернуть!
+confirm_delete_account=Подтвердите удаление
+delete_account_title=Удаление аккаунта
+delete_account_desc=Эта учетная запись будет удалена насовсем. Вы хотите продолжить?
+
+[repo]
+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_fork_helper=(Изменение этого значения затронет все форки)
+clone_helper=Нужна помощь в клонировании? Посетите страницу <a target="_blank" href="%s">помощи</a>!
+fork_repo=Ответвить репозиторий
+fork_from=Ответвление от
+fork_visiblity_helper=Ответвленному репозиторию нельзя поменять уровень видимости
+repo_desc=Описание
+repo_lang=Язык
+repo_lang_helper=Выберите файлы .gitignore
+license=Лицензия
+license_helper=Выберите файл лицензии
+readme=Readme
+readme_helper=Выберите шаблон для файла readme
+auto_init=Инициализировать этот репозиторий выбранными файлами и шаблоном
+create_repo=Создать репозиторий
+default_branch=Ветка по умолчанию
+mirror_interval=Интервал зеркалирования (час)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=Имя репозитория  '%s'  зарезервировано.
+form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается.
+
+need_auth=Требуется авторизация
+migrate_type=Тип миграции
+migrate_type_helper=Этот репозиторий будет <span class="text blue">зеркалом</span>
+migrate_repo=Перенос репозитория
+migrate.clone_address=Скопировать адрес
+migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь на сервере.
+migrate.permission_denied=У вас нет прав на импорт локальных репозиториев.
+migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или является не папкой.
+migrate.failed=Migration failed: %v
+
+forked_from=форк от
+fork_from_self=Вы не можете форкнуть репозитарий, так как Вы уже его владелец!
+copy_link=Скопировать
+copy_link_success=Скопировано!
+copy_link_error=Нажмите ⌘-C или Ctrl-C для копирования
+copied=Успешно скопировано
+unwatch=Перестать следить
+watch=Следить
+unstar=Убрать из избранного
+star=В избранное
+fork=Ответвить
+
+no_desc=Нет описания
+quick_guide=Краткое руководство
+clone_this_repo=Клонировать репозиторий
+create_new_repo_command=Создать новый репозиторий из командной строки
+push_exist_repo=Отправить существующий репозиторий из командной строки
+repo_is_empty=Этот репозиторий пуст, пожалуйста, возвращайтесь позже!
+
+branch=Ветка
+tree=Дерево
+filter_branch_and_tag=Filter branch or tag
+branches=Ветки
+tags=Метки
+issues=Обсуждения
+pulls=Пулл реквесты
+labels=Метки
+milestones=Этапы
+commits=Коммиты
+releases=Релизы
+file_raw=Исходник
+file_history=История
+file_view_raw=Посмотреть исходник
+file_permalink=Постоянная ссылка
+
+commits.commits=Коммиты
+commits.search=Поиск коммитов
+commits.find=Найти
+commits.author=Автор
+commits.message=Сообщение
+commits.date=Дата
+commits.older=Раньше
+commits.newer=Новее
+
+issues.new=Новая задача
+issues.new.labels=Метки
+issues.new.no_label=Не метка
+issues.new.clear_labels=Отчистить метки
+issues.new.milestone=Этап
+issues.new.no_milestone=Нет этапа
+issues.new.clear_milestone=Очистить этап
+issues.new.open_milestone=Открыть этап
+issues.new.closed_milestone=Завершенные этапы
+issues.new.assignee=Ответственный
+issues.new.clear_assignee=Убрать ответственного
+issues.new.no_assignee=Нет ответственного
+issues.create=Добавить задачу
+issues.new_label=Новая метка
+issues.new_label_placeholder=Имя метки...
+issues.create_label=Добавить метку
+issues.open_tab=%d Открыть
+issues.close_tab=%d Закрыть
+issues.filter_label=Метка
+issues.filter_label_no_select=Нет выбранной метки
+issues.filter_milestone=Этап
+issues.filter_milestone_no_select=Этап не выбран
+issues.filter_assignee=Назначено
+issues.filter_assginee_no_select=Ответственный не выбран
+issues.filter_type=Тип
+issues.filter_type.all_issues=Все задачи
+issues.filter_type.assigned_to_you=Назначено Вам
+issues.filter_type.created_by_you=Созданные вами
+issues.filter_type.mentioning_you=Вы упомянуты
+issues.filter_sort=Сортировать
+issues.filter_sort.latest=Новейшие
+issues.filter_sort.oldest=Старейшие
+issues.filter_sort.recentupdate=Недавно обновленные
+issues.filter_sort.leastupdate=Давно обновленные
+issues.filter_sort.mostcomment=Большего комментариев
+issues.filter_sort.leastcomment=Меньше комментариев
+issues.opened_by=%[1] открыта <a href="%[2]s">%[3]s</a>
+issues.opened_by_fake=%[1]s открыта %[2]s
+issues.previous=Предыдущая страница
+issues.next=Следующая страница
+issues.open_title=Открыта
+issues.closed_title=Закрыта
+issues.num_comments=комментариев: %d
+issues.commented_at=` прокомментировал <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.no_content=Пока нет содержимого.
+issues.close_issue=Закрыть
+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.poster=Автор
+issues.admin=Администратор
+issues.owner=Владелец
+issues.sign_up_for_free=Зарегистрируйтесь бесплатно
+issues.sign_in_require_desc=чтобы присоединиться к обсуждению. Уже есть аккаунт? <a href="%s">Войдите чтобы прокомментировать</a>
+issues.edit=Изменить
+issues.cancel=Отмена
+issues.save=Сохранить
+issues.label_title=Имя метки
+issues.label_color=Цвет метки
+issues.label_count=%d меток
+issues.label_open_issues=%d открытых задач
+issues.label_edit=Редактировать
+issues.label_delete=Удалить
+issues.label_modify=Изменение метки
+issues.label_deletion=Удаление метки
+issues.label_deletion_desc=Удаление ярлыка затронет все связанные задачи. Продолжить?
+issues.label_deletion_success=Метка была удалена успешно!
+
+pulls.new=New Pull Request
+pulls.compare_changes=Сравнить изменения
+pulls.compare_changes_desc=Сравнить две ветки и создать пулл реквест для изменений.
+pulls.compare_base=родительская ветка
+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.create=Создать пулл-реквест
+pulls.title_desc=хочет смерджить %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code>
+pulls.merged_title_desc=слито %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Обсуждение
+pulls.tab_commits=Коммиты
+pulls.tab_files=Измененные файлы
+pulls.reopen_to_merge=Пожалуйста пересоздайте пулл-реквест для слияния.
+pulls.merged=Слито
+pulls.has_merged=Слияние этого пулл-реквеста успешно завершено!
+pulls.data_broken=Содержимое этого пулл-реквеста было нарушено, вследствии удаления или клонирования информации.
+pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже.
+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) из этого же репозитория, с такими же параметрами слияния, который ожидает слияния.`
+
+milestones.new=Новая контрольная точка
+milestones.open_tab=%d открыты
+milestones.close_tab=%d Закрыт
+milestones.closed=Закрыт %s
+milestones.no_due_date=Срок не указан
+milestones.open=Открыть
+milestones.close=Закрыть
+milestones.new_subheader=Создавайте контрольные точки для трекинга ваших вопросов.
+milestones.create=Создать контрольную точку
+milestones.title=Заголовок
+milestones.desc=Описание
+milestones.due_date=Дата окончания (опционально)
+milestones.clear=Очистить
+milestones.invalid_due_date_format=Некорректная дата окончания. Правильный формат - 'гггг-мм-дд'.
+milestones.create_success=Контрольная точка '%s' успешно создана!
+milestones.edit=Изменить контрольную точку
+milestones.edit_subheader=Используйте лучшее описание контрольной точки, во избежание непонимания со стороны других людей.
+milestones.cancel=Отмена
+milestones.modify=Изменить контрольную точку
+milestones.edit_success=Изменения контрольной точки '%s' успешно сохранены!
+milestones.deletion=Удаление контрольной точки
+milestones.deletion_desc=Удаление этой контрольной точки приведет с удалению всей информации, во всех вопросах (Issues). Вы действительно хотите продолжить?
+milestones.deletion_success=Контрольная точка успешно удалена!
+
+settings=Настройки
+settings.options=Опции
+settings.collaboration=Сотрудничество
+settings.hooks=Автоматическое обновление
+settings.githooks=Git хуки
+settings.basic_settings=Основные параметры
+settings.danger_zone=Опасная зона
+settings.site=Официальный сайт
+settings.update_settings=Обновить настройки
+settings.change_reponame_prompt=Это изменение повлияет на отношения ссылок к этому репозиторию.
+settings.transfer=Передать права собственности
+settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
+settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием.
+settings.delete=Удалить этот репозиторий
+settings.delete_desc=Как только вы удалите репозиторий — пути назад не будет. Удостоверьтесь, что вам это точно нужно.
+settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем.
+settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь.
+settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции:
+settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</strong> быть отменена.
+settings.delete_notices_2=- Эта операция перманентно удалит всё из этого репозитория, включая данные Git, связанные с ним вопросы, комментарии и права доступа для сотрудников.
+settings.delete_notices_fork_1=- Если данный репозиторий является публичным, все склонированные репозитории останутся независимыми, после его удаления.
+settings.delete_notices_fork_2=- Если данный репозиторий является приватным, все его форки будут удалены вместе с ним.
+settings.delete_notices_fork_3=- Если вы хотите сохранить все форки после удаления репозитория, то сначала сделайте его публичным.
+settings.update_settings_success=Настройка репозитория обновлена успешно.
+settings.transfer_owner=Новый владелец
+settings.make_transfer=Выполнить передачу
+settings.transfer_succeed=Владение репозиторием было успешно передано.
+settings.confirm_delete=Подтвердить удаление
+settings.add_collaborator=Добавить нового соавтора
+settings.add_collaborator_success=Был добавлен новый соавтор.
+settings.remove_collaborator_success=Соавтор был удален.
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=Пользователь является членом организации,  члены которой не могут быть добавлены в качестве соавтора.
+settings.add_webhook=Добавить Webhook
+settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gogs. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем <a target="_blank" href="%s">Руководстве по Webhooks</a>.
+settings.webhook_deletion=Удалить веб-хук
+settings.webhook_deletion_desc=Удаление этого веб-хука приведет к удалению всей, связанной с ним, информации, включая историю. Хотите продолжить?
+settings.webhook_deletion_success=Веб-хук успешно удален!
+settings.webhook.request=Запрос
+settings.webhook.response=Ответ
+settings.webhook.headers=Заголовки
+settings.webhook.payload=Содержимое запроса
+settings.webhook.body=Тело ответа
+settings.githooks_desc=Git-хуки предоставляются Git самим по себе, вы можете изменять файлы поддерживаемых хуков из списка ниже чтобы выполнять внешние операции.
+settings.githook_edit_desc=Если хук не активен, будет подставлен пример содержимого. Пустое значение в этом поле приведет к отключению хука.
+settings.githook_name=Название Hook'a
+settings.githook_content=Перехватить содержание
+settings.update_githook=Обновить Hook
+settings.add_webhook_desc=Мы отправим запрос <code>POST</code> на указанный ниже URL с информацией о событиях. Можно также указать формат, в котором вы бы хотели получить данные (JSON, <code>x-www-form-urlencoded</code>, <em>и т.д.</em>). Дополнительную информацию можно найти в <a target="_blank" href="%s">Руководстве по Webhook</a>.
+settings.payload_url=URL обработчика
+settings.content_type=Тип содержимого
+settings.secret=Secret
+settings.slack_username=Имя пользователя
+settings.slack_icon_url=URL иконки
+settings.slack_color=Цвет
+settings.event_desc=На какие события этот webhook должен срабатывать?
+settings.event_push_only=Просто  <code>push</code> событие.
+settings.event_send_everything=Мне нужно <strong>все</strong>.
+settings.event_choose=Позвольте мне выбрать то, что нужно.
+settings.event_create=Создать
+settings.event_create_desc=Ветка или тэг созданы
+settings.event_push=Push
+settings.event_push_desc=Push в репозиторий
+settings.active=Активен
+settings.active_helper=Подробности о событии, вызвавшем срабатывание хука, также будут предоставлены.
+settings.add_hook_success=Был добавлен новый webhook.
+settings.update_webhook=Обновление Webhook
+settings.update_hook_success=Webhook обновлен.
+settings.delete_webhook=Удалить автоматическое обновление
+settings.recent_deliveries=Недавние рассылки
+settings.hook_type=Тип перехватчика
+settings.add_slack_hook_desc=Добавить интеграцию с <a href="%s">Slack</a> в ваш репозиторий.
+settings.slack_token=Token
+settings.slack_domain=Домен
+settings.slack_channel=Канал
+settings.deploy_keys=Ключи развертывания
+settings.add_deploy_key=Добавить ключ развертывания
+settings.no_deploy_keys=Вы не добавляли ключи развертывания.
+settings.title=Заголовок
+settings.deploy_key_content=Содержимое
+settings.key_been_used=Содержимое ключа развертывания уже используется.
+settings.key_name_used=Ключ развертывания с таким заголовком уже существует.
+settings.add_key_success=Новый ключ развертывания '%s' успешно добавлен!
+settings.deploy_key_deletion=Удалить ключ развертывания
+settings.deploy_key_deletion_desc=Удаление ключа развертывания приведет к удалению всех связанных прав доступа к репозиторию. Вы хотите продолжить?
+settings.deploy_key_deletion_success=Ключ развертывания успешно удален!
+
+diff.browse_source=Просмотр исходного кода
+diff.parent=Родитель
+diff.commit=Сommit
+diff.data_not_available=Данные Diff не доступны.
+diff.show_diff_stats=Показать статистику Diff
+diff.stats_desc=<strong> %d измененных файлов</strong> с <strong>%d добавлено</strong> и <strong>%d удалено</strong>
+diff.bin=BIN
+diff.view_file=Просмотреть файл
+
+release.releases=Релизы
+release.new_release=Новый релиз
+release.draft=Черновик
+release.prerelease=Предрелиз
+release.stable=Стабильный
+release.edit=Редактировать
+release.ahead=<strong>%d</strong> коммитов %s начиная с этого релиза
+release.source_code=Исходный код
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=Имя тега
+release.target=Цель
+release.tag_helper=Выберите существующий тег, или создайте новый.
+release.title=Title
+release.content=Content
+release.write=Запись
+release.preview=Предварительный просмотр
+release.loading=Загрузка...
+release.prerelease_desc=Это предварительный релиз
+release.prerelease_helper=Отдельно отметим, что этот релиз не готов к использованию в продакшене.
+release.cancel=Cancel
+release.publish=Опубликовать релиз
+release.save_draft=Сохранить черновик
+release.edit_release=Редактировать релиз
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=Релиз с этим именем тега уже существует.
+release.downloads=Downloads
+
+[org]
+org_name_holder=Название организации
+org_full_name_holder=Полное название организации
+org_name_helper=Лучшие названия организаций коротки и запоминаемы.
+create_org=Создать Организацию
+repo_updated=Обновлено
+people=Люди
+invite_someone=Пригласить кого-нибудь
+teams=Команды
+lower_members=Участники
+lower_repositories=Репозитории
+create_new_team=Создать Новую Команду
+org_desc=Описание
+team_name=Название команды
+team_desc=Описание
+team_name_helper=Вы будете использовать это имя для упоминания этой команды в обсуждении.
+team_desc_helper=Что это за команда?
+team_permission_desc=Какой уровень разрешений должен быть у этой команды?
+
+form.name_reserved=Наименование организации  '%s' зарезервированно.
+form.name_pattern_not_allowed=Шаблон организации  '%s' не допускается.
+
+settings=Настройки
+settings.options=Опции
+settings.full_name=Полное имя
+settings.website=Сайт
+settings.location=Местоположение
+settings.update_settings=Обновить настройки
+settings.update_setting_success=Настройки Организации были успешно обновлены.
+settings.change_orgname_prompt=Это изменение затронет все связанные с организацией, ссылки.
+settings.update_avatar_success=Аватар организации успешно обновлен.
+settings.delete=Удалить Организацию
+settings.delete_account=Удалить Эту Организацию
+settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда. 
+settings.confirm_delete_account=Подтвердить удаление
+settings.delete_org_title=Удаление Организации
+settings.delete_org_desc=Эта организация будет удалена навсегда. Хотите всё-равно продолжить?
+settings.hooks_desc=Добавьте автоматическое обновление, который будет вызываться для <strong>всех репозиций</strong> под этой Группой.
+
+members.public=Публичный
+members.public_helper=Сделать Приватным
+members.private=Приватный
+members.private_helper=Сделать Публичным
+members.owner=Владелец
+members.member=Участник
+members.conceal=Скрыть
+members.remove=Удалить
+members.leave=Покинуть
+members.invite_desc=Начните вводить имя пользователя чтобы пригласить нового члена %s:
+members.invite_now=Пригласите сейчас
+
+teams.join=Объединить
+teams.leave=Выйти
+teams.read_access=Доступ на чтение
+teams.read_access_helper=Эта команда будет иметь возможность просматривать и клонировать ее репозитории.
+teams.write_access=Доступ на запись
+teams.write_access_helper=Эта команда будет в состоянии прочитать ее репозитории, а также посылать изменения.
+teams.admin_access=Доступ администратора
+teams.admin_access_helper=Эта команда будет иметь возможность выполнять push/pull в его репозиториях, а также добавлять других сотрудников к нему.
+teams.no_desc=Эта группа не имеет описания
+teams.settings=Настройки
+teams.owners_permission_desc=Владельцы имеют полный доступ ко <strong>всем репозиториям</strong> и имеют <strong>права администратора</strong> организации.
+teams.members=Члены группы разработки
+teams.update_settings=Обновить настройки
+teams.delete_team=Удалить эту группу разработки
+teams.add_team_member=Добавление члена группы разработки
+teams.delete_team_title=Удалить группу разработки
+teams.delete_team_desc=Эта команда будет удалена. Вы хотите продолжить? Члены этой группы могут потерять доступ к некоторым репозиториям.
+teams.delete_team_success=Данная команда была удалена успешно.
+teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
+teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
+teams.admin_permission_desc=Эта команда дает <strong>административный</strong> доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям.
+teams.repositories=Репозитории группы разработки
+teams.add_team_repository=Добавить репозиторий группы разработки
+teams.remove_repo=Удалить
+teams.add_nonexistent_repo=Вы добавляете в отсутствующий репозиторий, пожалуйста сначала его создайте.
+
+[admin]
+dashboard=Панель управления
+users=Пользователи
+organizations=Организации
+repositories=Репозитории
+authentication=Авторизация
+config=Настройки
+notices=Системные уведомления
+monitor=Мониторинг
+first_page=Первый
+last_page=Последний
+total=Всего: %d
+
+dashboard.statistic=Статистика
+dashboard.operations=Операции
+dashboard.system_status=Статус системного монитора
+dashboard.statistic_info=В базе данных Gogs записано <b>%d</b> пользователей, <b>%d</b> организаций, <b>%d</b> публичных ключей, <b>%d</b> репозиторий, <b>%d</b> подписок на репозитории, <b>%d</b> добавлений в избранное, <b>%d</b> действий, <b>%d</b> доступов, <b>%d</b> обсуждений, <b>%d</b> комментариев, <b>%d</b> социальных учетных записей, <b>%d</b> подписок на пользователей, <b>%d</b> зеркал, <b>%d</b> релизов, <b>%d</b> источников входа, <b>%d</b> веб-хуков, <b>%d</b> вех, <b>%d</b> меток, <b>%d</b> задач хуков, <b>%d</b> команд, <b>%d</b> задач по обновлению, <b>%d</b> присоединенных файлов.
+dashboard.operation_name=Наименование Операции
+dashboard.operation_switch=Переключить
+dashboard.operation_run=Запуск
+dashboard.clean_unbind_oauth=Удалить не привязанные OAUth
+dashboard.clean_unbind_oauth_success=Не привязанные OAuth аккаунты успешно удалены.
+dashboard.delete_inactivate_accounts=Удалить все неактивированные учетные записи
+dashboard.delete_inactivate_accounts_success=Все неактивированные учетные записи удалены успешно.
+dashboard.delete_repo_archives=Удаление всех архивов репозиториев
+dashboard.delete_repo_archives_success=Все архивы репозиториев были успешно удалены.
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=Выполнить сборку мусора на репозиториях
+dashboard.git_gc_repos_success=Сборка мусора на всех репозиториях успешно выполнена.
+dashboard.resync_all_sshkeys=Переписать файл «.ssh/authorized_keys» (осторожно: не Gogs ключи будут утеряны)
+dashboard.resync_all_sshkeys_success=Были успешно переписаны все открытые ключи.
+dashboard.resync_all_update_hooks=Перезаписать все апдейт-хуки этого репозитория (необходимо, когда изменен путь до папки конфигураций)
+dashboard.resync_all_update_hooks_success=Апдейт-хуки всех репозиториев успешно перезаписаны.
+
+dashboard.server_uptime=Время непрерывной работы сервера
+dashboard.current_goroutine=Текущий Goroutines
+dashboard.current_memory_usage=Текущее использование памяти
+dashboard.total_memory_allocated=Всего памяти выделено
+dashboard.memory_obtained=Памяти использовано
+dashboard.pointer_lookup_times=Запросов указателя
+dashboard.memory_allocate_times=Выделений памяти
+dashboard.memory_free_times=Освобождений памяти
+dashboard.current_heap_usage=Текущее использование кучи
+dashboard.heap_memory_obtained=Получено динамической памяти
+dashboard.heap_memory_idle=Не используется динамической памяти
+dashboard.heap_memory_in_use=Кучи памяти в работе
+dashboard.heap_memory_released=Освобождено динамической памяти
+dashboard.heap_objects=Объектов динамической памяти
+dashboard.bootstrap_stack_usage=Использование стека загрузчика
+dashboard.stack_memory_obtained=Память, занятая под стек
+dashboard.mspan_structures_usage=Использование структур MSpan
+dashboard.mspan_structures_obtained=Получено структур MSpan
+dashboard.mcache_structures_usage=Использование структур MCache
+dashboard.mcache_structures_obtained=Получено структур MCache
+dashboard.profiling_bucket_hash_table_obtained=Хеш-таблиц получено при профилировании
+dashboard.gc_metadata_obtained=Получены метаданные сборщика мусора
+dashboard.other_system_allocation_obtained=Получено других системных выделений памяти
+dashboard.next_gc_recycle=Следующая очистка сборщика мусора
+dashboard.last_gc_time=Прошло с последнего сбора мусора
+dashboard.total_gc_time=Итоговое время GC
+dashboard.total_gc_pause=Итоговая задержка GC
+dashboard.last_gc_pause=Последняя пауза сборщика мусора
+dashboard.gc_times=Количество сборок мусора
+
+users.user_manage_panel=Панель управления пользователями
+users.new_account=Создать новый аккаунт
+users.name=Имя
+users.activated=Активирован
+users.admin=Администратор
+users.repos=Репозитории
+users.created=Создано
+users.send_register_notify=Отправить пользователю уведомление о регистрации
+users.new_success=Новая учетная запись '%s' успешно создана.
+users.edit=Редактировать
+users.auth_source=Источник аутентификации
+users.local=Локальный
+users.auth_login_name=Логин для авторизации
+users.password_helper=Оставьте пустым, чтобы оставить без изменений.
+users.update_profile_success=Профиль учетной записи обновлен успешно.
+users.edit_account=Изменение учетной записи
+users.is_activated=Эта учетная запись активирована
+users.is_admin=У этой учетной записи есть права администратора
+users.allow_git_hook=Пользователь имеет право создать Git перехватчик
+users.allow_import_local=Пользователь имеет право импортировать локальные репозитории
+users.update_profile=Обновить профиль учетной записи
+users.delete_account=Удалить эту учетную запись
+users.still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
+users.still_has_org=Эта учетная запись все еще является членом как минимум одной организации. Для продолжения, покиньте или удалите эту организацию.
+users.deletion_success=Учетная запись успешно удалена!
+
+orgs.org_manage_panel=Управление группами
+orgs.name=Имя
+orgs.teams=Команды
+orgs.members=Участники
+
+repos.repo_manage_panel=Панель управления репозиторием
+repos.owner=Владелец
+repos.name=Имя
+repos.private=Приватный
+repos.watches=Следят
+repos.stars=В избранном
+repos.issues=Вопросы
+
+auths.auth_manage_panel=Панель управления аутнентификациями
+auths.new=Добавить новый источник
+auths.name=Имя
+auths.type=Тип
+auths.enabled=Включено
+auths.updated=Обновлено
+auths.auth_type=Тип аутентификации
+auths.auth_name=Имя аутентификации
+auths.domain=Домен
+auths.host=Хост
+auths.port=Порт
+auths.bind_dn=Привязать DN
+auths.bind_password=Привязать пароль
+auths.bind_password_helper=Внимание: Этот пароль сохранен в небезопасном виде. Не используйте высоко-привилегированную учетную запись.
+auths.user_base=База для поиска пользователя
+auths.user_dn=DN пользователя
+auths.attribute_name=Имя аттрибута
+auths.attribute_surname=Фамилия аттрибута
+auths.attribute_mail=Электронная почта аттрибута
+auths.filter=Фильтр пользователя
+auths.admin_filter=Фильтр администратора
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=Тип аутентификации SMTP
+auths.smtphost=Узел SMTP
+auths.smtpport=SMTP-порт
+auths.allowed_domains=Разрешенные домены
+auths.allowed_domains_helper=Оставьте пустым чтобы не ограничивать домены. Несколько доменов должны быть разделены запятыми ','.
+auths.enable_tls=Включение шифрования TLS
+auths.skip_tls_verify=Пропустить проверку TLS
+auths.pam_service_name=Имя службы PAM
+auths.enable_auto_register=Включить автоматическую регистрацию
+auths.tips=Советы
+auths.edit=Изменить параметры канала аутентификации
+auths.activated=Эта аутентификация активирована
+auths.new_success=Новый канал аутентификации '%s' успешно создан.
+auths.update_success=Настройки канала аутентификации успешно сохранены.
+auths.update=Обновить параметры аутентификации
+auths.delete=Удалить этот канал аутентификации
+auths.delete_auth_title=Удаление канала аутентификации
+auths.delete_auth_desc=Этот канал аутентификации будет удален. Вы уверены что хотите продолжить?
+auths.deletion_success=Канал аутентификации успешно удален!
+
+config.server_config=Конфигурация сервера
+config.app_name=Имя приложения
+config.app_ver=Версия приложения
+config.app_url=URL приложения
+config.domain=Домен
+config.offline_mode=Автономный режим
+config.disable_router_log=Отключение журнала маршрутизатора
+config.run_user=Запуск пользователем
+config.run_mode=Режим выполнения
+config.repo_root_path=Путь до корня репозитория
+config.static_file_root_path=Статичный путь до файла
+config.log_file_root_path=Путь до папки с логами
+config.script_type=Тип сценария
+config.reverse_auth_user=Заголовок с именем пользователя для авторизации на reverse proxy
+config.db_config=Конфигурация базы данных
+config.db_type=Тип
+config.db_host=Хост
+config.db_name=Имя
+config.db_user=Пользователь
+config.db_ssl_mode=Режим SSL
+config.db_ssl_mode_helper=(только для «postgres»)
+config.db_path=Путь
+config.db_path_helper=(для "SQLite3" и "TiDB")
+config.service_config=Сервисная конфигурация
+config.register_email_confirm=Требуется подтверждение по электронной почте
+config.disable_register=Отключить регистрацию
+config.show_registration_button=Показать кнопку регистрации
+config.require_sign_in_view=Для просмотра необходима авторизация
+config.enable_cache_avatar=Кешировать аватар
+config.mail_notify=Почтовые уведомления
+config.disable_key_size_check=Отключить проверку на минимальный размер ключа
+config.enable_captcha=Включить капчу
+config.active_code_lives=Время жизни кода для активации
+config.reset_password_code_lives=Время жизни кода сброса пароля
+config.webhook_config=Настройка автоматического обновления репозиции
+config.queue_length=Длина очереди
+config.deliver_timeout=Задержка доставки
+config.skip_tls_verify=Пропустить TLS проверка
+config.mailer_config=Настройки почты
+config.mailer_enabled=Включено
+config.mailer_disable_helo=Отключить HELO
+config.mailer_name=Имя
+config.mailer_host=Сервер
+config.mailer_user=Пользователь
+config.oauth_config=Конфигурация OAuth
+config.oauth_enabled=Включено
+config.cache_config=Настройки кеша
+config.cache_adapter=Адаптер кэша
+config.cache_interval=Интервал кэширования
+config.cache_conn=Подключение кэша
+config.session_config=Конфигурация сессии
+config.session_provider=Провайдер сессии
+config.provider_config=Конфигурация провайдера
+config.cookie_name=Имя файла cookie
+config.enable_set_cookie=Включить установку cookies
+config.gc_interval_time=Интервал работы сборщика мусора
+config.session_life_time=Время жизни сессии
+config.https_only=Только HTTPS
+config.cookie_life_time=Время жизни файла cookie
+config.picture_config=Настройка изображения
+config.picture_service=Сервис изображений
+config.disable_gravatar=Отключить Gravatar
+config.log_config=Конфигурация журнала
+config.log_mode=Режим журналирования
+
+monitor.cron=Задачи cron
+monitor.name=Имя
+monitor.schedule=Расписание
+monitor.next=В следующий раз
+monitor.previous=Предыдущий раз
+monitor.execute_times=Количество выполнений
+monitor.process=Запущенные процессы
+monitor.desc=Описание
+monitor.start=Момент начала
+monitor.execute_time=Время выполнения
+
+notices.system_notice_list=Система уведомлений
+notices.type=Тип
+notices.type_1=Репозиторий
+notices.desc=Описание
+notices.op=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]</a>`
+create_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_2_commits=Просмотреть сравнение двух коммитов
+
+[tool]
+ago=назад
+from_now=с этого момента
+now=сейчас
+1s=1 секунду %s
+1m=1 минута %s
+1h=1 час %s
+1d=1 день %s
+1w=1 неделя %s
+1mon=1 месяц %s
+1y=1 год %s
+seconds=%d секунд %s
+minutes=%d минут %s
+hours=%d часов %s
+days=%d дней %s 
+weeks=недель %s: %d
+months=месяцев %s: %d
+years=лет %s: %d
+raw_seconds=секунд
+raw_minutes=минут
+
+[dropzone]
+default_message=Перетащите файл сюда, или кликните для загрузки.
+invalid_input_type=Вы не можете загружать файлы этого типа.
+file_too_big=Размер файла ({{filesize}} МБ) больше чем максимальный размер ({{maxFilesize}} МБ).
+remove_file=Удалить файл
+

+ 1009 - 992
conf/locale/locale_zh-CN.ini

@@ -1,992 +1,1009 @@
-app_desc=基于 Go 语言的自助 Git 服务
-
-home=首页
-dashboard=控制面板
-explore=探索
-help=帮助
-sign_in=登录
-sign_out=退出
-sign_up=注册
-register=注册
-website=官方网站
-version=当前版本
-page=页面
-template=模板
-language=语言选项
-create_new=创建...
-user_profile_and_more=用户信息及更多
-signed_in_as=已登录用户
-
-username=用户名
-email=邮箱
-password=密码
-re_type=确认密码
-captcha=验证码
-
-repository=仓库
-organization=组织
-mirror=镜像
-new_repo=创建新的仓库
-new_migrate=迁移外部仓库
-new_fork=创建新的派生仓库
-new_org=创建新的组织
-manage_org=管理我的组织
-admin_panel=管理面板
-account_settings=帐户设置
-settings=帐户设置
-your_profile=个人信息
-your_settings=用户设置
-
-news_feed=最新活动
-pull_requests=合并请求
-issues=工单管理
-
-cancel=取消
-
-[search]
-search=搜索...
-repository=仓库
-user=用户
-issue=工单
-code=代码
-
-[install]
-install=安装页面
-title=首次运行安装程序
-docker_helper=如果您正在使用 Docker 容器运行 Gogs,请务必先仔细阅读 <a target="_blank" href="%s">官方文档</a> 后再对本页面进行填写。
-requite_db_desc=Gogs 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
-db_title=数据库设置
-db_type=数据库类型
-host=数据库主机
-user=数据库用户
-password=数据库用户密码
-db_name=数据库名称
-db_helper=如果您使用 MySQL,请使用 INNODB 引擎以及 utf8_general_ci 字符集。
-ssl_mode=SSL 模式
-path=数据库文件路径
-sqlite_helper=SQLite3 或 TiDB 的数据库路径。
-err_empty_db_path=SQLite3 或 TiDB 的数据库路径不能为空。
-err_invalid_tidb_name=TiDB 数据库名称不允许包含字符 "." 或 "-" 。
-no_admin_and_disable_registration=您不能够在未创建管理员用户的情况下禁止注册。
-err_empty_admin_password=管理员密码不能为空。
-
-general_title=应用基本设置
-app_name=应用名称
-app_name_helper=快用狂拽酷炫的组织名称闪瞎我们!
-repo_path=仓库根目录
-repo_path_helper=所有 Git 远程仓库都将被存放于该目录。
-run_user=运行系统用户
-run_user_helper=该用户必须具有对仓库根目录和运行 Gogs 的操作权限。
-domain=域名
-domain_helper=该设置影响 SSH 克隆地址。
-ssh_port=SSH 端口号
-ssh_port_helper=SSH 服务器的监听端口号,留空表示禁用 SSH 功能。
-http_port=HTTP 端口号
-http_port_helper=应用监听的端口号
-app_url=应用 URL
-app_url_helper=该设置影响 HTTP/HTTPS 克隆地址和一些邮箱中的链接。
-
-optional_title=可选设置
-email_title=邮件服务设置
-smtp_host=SMTP 主机
-smtp_from=邮件来自
-smtp_from_helper=邮件来自地址,遵循 RFC 5322 标准。可以是一个单纯的邮箱地址或使用 "Name" <email@example.com> 的格式。
-mailer_user=发送邮箱
-mailer_password=发送邮箱密码
-register_confirm=启用注册邮箱确认
-mail_notify=启用邮件通知提醒
-server_service_title=服务器和其它服务设置
-offline_mode=启用离线模式
-offline_mode_popup=在部署模式下也禁用从 CDN 获取文件,所以的资源都将从本地服务器获取。
-disable_gravatar=禁用 Gravatar 服务
-disable_gravatar_popup=禁用 Gravatar 和自定义源,仅使用由用户上传的或默认的头像。
-disable_registration=禁止用户自主注册
-disable_registration_popup=禁止用户自行注册功能,只有管理员可以添加帐号。
-enable_captcha=启用验证码服务
-enable_captcha_popup=要求在用户注册时输入预验证码
-require_sign_in_view=启用登录访问限制
-require_sign_in_view_popup=只有已登录的用户才能够访问页面,否则将只能看到登录或注册页面。
-admin_setting_desc=创建管理员帐号并不是必须的,因为 ID=1 的用户将自动获得管理员权限。
-admin_title=管理员帐号设置
-admin_name=管理员用户名
-admin_password=管理员密码
-confirm_password=确认密码
-admin_email=管理员邮箱
-install_gogs=立即安装
-test_git_failed=无法识别 'git' 命令:%v
-sqlite3_not_available=您所使用的发行版不支持 SQLite3,请从 %s 下载官方构建版,而不是 gobuild 版本。
-invalid_db_setting=数据库设置不正确:%v
-invalid_repo_path=仓库根目录设置不正确:%v
-run_user_not_match=运行系统用户非当前用户:%s -> %s
-save_config_failed=应用配置保存失败:%v
-invalid_admin_setting=管理员帐户设置不正确:%v
-install_success=您好!我们很高兴您选择使用 Gogs,祝您使用愉快,代码从此无 BUG!
-
-[home]
-uname_holder=用户名或邮箱
-password_holder=密码
-switch_dashboard_context=切换控制面板用户
-my_repos=我的仓库
-collaborative_repos=参与协作的仓库
-my_orgs=我的组织
-my_mirrors=我的镜像
-view_home=访问 %s
-
-issues.in_your_repos=属于该用户仓库的
-
-[explore]
-repos=探索仓库
-
-[auth]
-create_new_account=创建帐户
-register_hepler_msg=已经注册?立即登录!
-social_register_hepler_msg=已经注册?立即绑定!
-disable_register_prompt=对不起,注册功能已被关闭。请联系网站管理员。
-disable_register_mail=对不起,注册邮箱确认功能已被关闭。
-remember_me=记住登录
-forgot_password=忘记密码
-forget_password=忘记密码?
-sign_up_now=还没帐户?马上注册。
-confirmation_mail_sent_prompt=一封新的确认邮件已经被发送至 <b>%s</b>,请检查您的收件箱并在 %d 小时内完成确认注册操作。
-sign_in_to_account=登录到您的帐户
-active_your_account=激活您的帐户
-resent_limit_prompt=对不起,您请求发送激活邮件过于频繁,请等待 3 分钟后再试!
-has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
-resend_mail=单击此处重新发送确认邮件
-email_not_associate=您输入的邮箱地址未被关联到任何帐号!
-send_reset_mail=单击此处(重新)发送您的密码重置邮件
-reset_password=重置密码
-invalid_code=对不起,您的确认代码已过期或已失效。
-reset_password_helper=单击此处重置密码
-password_too_short=密码长度不能少于 6 位!
-
-[mail]
-activate_account=请激活您的帐户
-activate_email=请验证您的邮箱地址
-reset_password=重置您的密码
-register_success=注册成功,欢迎使用
-
-[modal]
-yes=确认操作
-no=取消操作
-modify=确认修改
-
-[form]
-UserName=用户名
-RepoName=仓库名称
-Email=邮箱地址
-Password=密码
-Retype=确认密码
-SSHTitle=SSH 密钥名称
-HttpsUrl=HTTPS URL 地址
-PayloadUrl=推送地址
-TeamName=团队名称
-AuthName=认证名称
-AdminEmail=管理员邮箱
-
-require_error=不能为空。
-alpha_dash_error=必须为英文字母、阿拉伯数字或横线(-_)。
-alpha_dash_dot_error=必须为英文字母、阿拉伯数字、横线(-_)或点。
-size_error=长度必须为 %s。
-min_size_error=长度最小为 %s 个字符。
-max_size_error=长度最大为 %s 个字符。
-email_error=不是一个有效的邮箱地址。
-url_error=不是一个有效的 URL。
-unknown_error=未知错误:
-captcha_incorrect=验证码未匹配。
-password_not_match=密码与确认密码未匹配。
-
-username_been_taken=用户名已经被占用。
-repo_name_been_taken=仓库名称已经被占用。
-org_name_been_taken=组织名称已经被占用。
-team_name_been_taken=团队名称已经被占用。
-email_been_used=邮箱地址已经被使用。
-illegal_team_name=团队名称包含非法字符。
-username_password_incorrect=用户名或密码不正确。
-enterred_invalid_repo_name=请检查您输入的仓库名称是正确。
-enterred_invalid_owner_name=请检查您输入的新所有者用户名是否正确。
-enterred_invalid_password=请检查您输入的密码是否正确。
-user_not_exist=被操作的用户不存在!
-last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作!
-
-invalid_ssh_key=很抱歉,我们无法验证您输入的 SSH 密钥:%s
-unable_verify_ssh_key=Gogs 无法验证您输入的 SSH 密钥,但我们假设那是有效的密钥,请您自行确保其有效性!
-auth_failed=授权验证失败:%v
-
-still_own_repo=您的帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
-still_has_org=您的帐户仍旧是某些组织的成员,您必须先离开或删除组织。
-org_still_own_repo=该组织仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除组织操作!
-
-still_own_user=该授权认证依旧被部分用户使用,请先删除该部分用户后再试!
-
-target_branch_not_exist=目标分支不存在。
-
-[user]
-change_avatar=到 gravatar.com 上修改您的头像
-change_custom_avatar=到个人设置中修改头像
-join_on=加入于
-repositories=仓库列表
-activity=公开活动
-followers=关注者
-starred=已点赞
-following=关注中
-
-form.name_reserved=用户名 '%s' 是被保留的。
-form.name_pattern_not_allowed=用户名不允许 '%s' 的格式。
-
-[settings]
-profile=个人信息
-password=修改密码
-ssh_keys=管理 SSH 密钥
-social=社交帐号绑定
-applications=管理授权应用
-orgs=管理组织
-delete=删除帐户
-uid=用户 ID
-
-public_profile=公开信息
-profile_desc=您的邮箱地址将会被公开,并被用于接收帐户的所有提醒和通知。
-full_name=自定义名称
-website=个人网站
-location=所在地区
-update_profile=更新信息
-update_profile_success=您的个人信息更新成功!
-change_username=用户名将被修改
-change_username_prompt=该操作将会影响到所有与您帐户有关的链接
-continue=继续操作
-cancel=取消操作
-
-enable_custom_avatar=启动自定义头像
-enable_custom_avatar_helper=激活该选项来禁止从 Gravatar 获取头像
-choose_new_avatar=选择新的头像
-update_avatar=更新头像设置
-uploaded_avatar_not_a_image=上传的文件不是一张图片!
-no_custom_avatar_available=未上传过自定义头像,无法激活该选项。
-update_avatar_success=您的头像设置更新成功!
-
-change_password=修改密码
-old_password=当前密码
-new_password=新的密码
-retype_new_password=重新输入新的密码
-password_incorrect=当前密码不正确!
-change_password_success=密码修改成功!您现在可以使用新的密码登录。
-
-emails=邮箱地址
-manage_emails=管理邮箱地址
-email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。
-primary=主要
-primary_email=设为主要
-delete_email=删除
-email_deletion=邮箱删除操作
-email_deletion_desc=删除该邮箱地址将会移除所有相关的信息。是否继续?
-email_deletion_success=邮箱删除成功!
-add_new_email=添加新的邮箱地址
-add_email=添加邮箱
-add_email_confirmation_sent=一封待确认的电子邮件已发送到 '%s',请在 %d 小时内检查您的收件箱,并完成确认过程。
-add_email_success=新的邮箱地址添加成功!
-
-manage_ssh_keys=管理 SSH 密钥
-add_key=增加密钥
-ssh_desc=以下是与您帐户所关联的 SSH 密钥,如果您发现有陌生的密钥,请立即删除它!
-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=使用相同名称的公开密钥已经存在!
-key_name=密钥名称
-key_content=密钥内容
-add_key_success=新的 SSH 密钥 '%s' 添加成功!
-delete_key=删除
-ssh_key_deletion=删除 SSH 公钥操作
-ssh_key_deletion_desc=删除该 SSH 公钥将删除所有与您帐户相关的访问权限。是否继续?
-ssh_key_deletion_success=SSH 公钥删除成功!
-add_on=增加于
-last_used=上次使用在
-no_activity=没有最近活动
-key_state_desc=该密钥在 7 天内被使用过
-token_state_desc=该令牌在 7 天内被使用过
-
-manage_social=管理关联社交帐户
-social_desc=以下是与您帐户所关联的社交帐号,如果您发现有陌生的关联,请立即解除绑定!
-unbind=解除绑定
-unbind_success=社交帐号解除绑定成功!
-
-manage_access_token=管理个人操作令牌
-generate_new_token=生成新的令牌
-tokens_desc=您可以使用这些已生成的令牌来操作 Gogs API。
-new_token_desc=目前为止,任何令牌都对您的帐户拥有完整的操作权限。
-token_name=令牌名称
-generate_token=生成令牌
-generate_token_succees=新的操作令牌生成成功!您必须立即复制到一个安全的地方,因为该令牌只会显示一次!
-delete_token=删除令牌
-access_token_deletion=删除个人操作令牌操作
-access_token_deletion_desc=删除该个人操作令牌将删除所有相关的应用程序的访问权限。是否继续?
-delete_token_success=个人操作令牌删除成功!请更新与该令牌有关的所有应用。
-
-delete_account=删除当前帐户
-delete_prompt=删除操作会永久清除您的帐户信息,并且 <strong>不可恢复</strong>!
-confirm_delete_account=确认删除帐户
-delete_account_title=帐户删除操作
-delete_account_desc=该帐户将被永久性删除,您确定要继续操作吗?
-
-[repo]
-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_fork_helper=(修改该值将会影响到所有派生仓库)
-fork_repo=派生仓库
-fork_from=派生自
-fork_visiblity_helper=派生仓库无法修改可见性
-repo_desc=仓库描述
-repo_lang=仓库语言
-repo_lang_helper=请选择 .gitignore 文件
-license=授权许可
-license_helper=请选择授权许可文件
-readme=自述文档
-readme_helper=请选择自述文档模板
-auto_init=使用选定的文件和模板初始化仓库
-create_repo=创建仓库
-default_branch=默认分支
-mirror_interval=镜像同步周期(小时)
-
-form.name_reserved=仓库名称 '%s' 是被保留的。
-form.name_pattern_not_allowed=仓库名称不允许 '%s' 的格式。
-
-need_auth=需要授权验证
-migrate_type=迁移类型
-migrate_type_helper=该仓库将是一个 <span class="text blue">镜像</span>
-migrate_repo=迁移仓库
-migrate.clone_address=克隆地址
-migrate.clone_address_desc=该地址可以是 HTTP/HTTPS/GIT URL 或本地服务器路径。
-migrate.invalid_local_path=无效的本地路径,不存在或不是一个目录!
-
-forked_from=派生自
-fork_from_self=无法派生已经拥有的仓库!
-copy_link=复制链接
-copy_link_success=复制成功!
-copy_link_error=请按下 ⌘-C 或 Ctrl-C 复制
-click_to_copy=复制到剪切板
-copied=复制成功
-clone_helper=不知道如何操作?访问 <a target="_blank" href="%s">此处</a> 查看帮助!
-unwatch=取消关注
-watch=关注
-unstar=取消点赞
-star=点赞
-fork=派生
-
-no_desc=暂无描述
-quick_guide=快速帮助
-clone_this_repo=克隆当前仓库
-create_new_repo_command=从命令行创建一个新的仓库
-push_exist_repo=从命令行推送已经创建的仓库
-repo_is_empty=该仓库不包含任何内容,请稍后再进行访问!
-
-
-branch=分支
-tree=目录树
-branch_and_tags=分支与标签
-branches=分支列表
-tags=标签列表
-issues=工单管理
-pulls=合并请求
-labels=标签管理
-milestones=里程碑
-commits=提交历史
-releases=版本发布
-file_raw=原始文件
-file_history=文件历史
-file_view_raw=查看原始文件
-file_permalink=永久链接
-
-commits.commits=次代码提交
-commits.search=搜索提交历史
-commits.find=查找
-commits.author=作者
-commits.message=备注
-commits.date=提交日期
-commits.older=更旧的提交
-commits.newer=更新的提交
-
-issues.new=创建工单
-issues.new.labels=标签
-issues.new.no_label=未选择标签
-issues.new.clear_labels=清除选中标签
-issues.new.milestone=里程碑
-issues.new.no_milestone=未选择里程碑
-issues.new.clear_milestone=取消选中里程碑
-issues.new.open_milestone=开启中的里程碑
-issues.new.closed_milestone=已关闭的里程碑
-issues.new.assignee=指派成员
-issues.new.clear_assignee=取消指派成员
-issues.new.no_assignee=未指派成员
-issues.create=创建工单
-issues.new_label=创建标签
-issues.new_label_placeholder=标签名称...
-issues.create_label=创建标签
-issues.open_tab=%d 个开启中
-issues.close_tab=%d 个已关闭
-issues.filter_label=标签筛选
-issues.filter_label_no_select=无筛选标签
-issues.filter_milestone=里程碑筛选
-issues.filter_milestone_no_select=无筛选里程碑
-issues.filter_assignee=指派人筛选
-issues.filter_assginee_no_select=无筛选指派人
-issues.filter_type=类型筛选
-issues.filter_type.all_issues=所有工单
-issues.filter_type.assigned_to_you=指派给您的
-issues.filter_type.created_by_you=由您创建的
-issues.filter_type.mentioning_you=提及您的
-issues.filter_sort=排序
-issues.filter_sort.latest=最新创建
-issues.filter_sort.oldest=最早创建
-issues.filter_sort.recentupdate=最近更新
-issues.filter_sort.leastupdate=最少更新
-issues.filter_sort.mostcomment=最多评论
-issues.filter_sort.leastcomment=最少评论
-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 id="%[1]s" href="#%[1]s">%[2]s</a> 评论`
-issues.no_content=这个人很懒,什么都没留下。
-issues.close_issue=关闭
-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.poster=发布者
-issues.admin=管理员
-issues.owner=所有者
-issues.sign_up_for_free=免费注册
-issues.sign_in_require_desc=并加入到对话中来。如果您已经注册,可以直接 <a href="%s">登录并评论</a>
-issues.edit=编辑
-issues.cancel=取消
-issues.save=保存
-issues.label_title=标签名称
-issues.label_color=标签颜色
-issues.label_count=%d 个标签
-issues.label_open_issues=%d 个开启的工单
-issues.label_edit=编辑
-issues.label_delete=删除
-issues.label_modify=修改标签
-issues.label_deletion=删除标签操作
-issues.label_deletion_desc=删除该标签将会移除所有工单中相关的信息。是否继续?
-issues.label_deletion_success=标签删除成功!
-
-pulls.compare_changes=对比文件变化
-pulls.compare_changes_desc=对比两个分支间的文件变化并发起一个合并请求。
-pulls.compare_base=基准分支
-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.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> 
-pulls.tab_conversation=对话内容
-pulls.tab_commits=代码提交
-pulls.tab_files=文件变动
-pulls.reopen_to_merge=请重新开启合并请求来完成合并操作。
-pulls.merged=已合并
-pulls.has_merged=该合并请求已经成功合并!
-pulls.data_broken=该合并请求的数据由于派生仓库的相关信息被删除而被破坏。
-pulls.is_checking=该合并请求正在进行冲突检查,请稍后再刷新页面。
-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),您无法执行重新开启操作。`
-
-milestones.new=新的里程碑
-milestones.open_tab=%d 开启中
-milestones.close_tab=%d 已关闭
-milestones.closed=于 %s关闭
-milestones.no_due_date=暂无截止日期
-milestones.open=开启
-milestones.close=关闭
-milestones.new_subheader=创建里程碑来更好地组织您的工单。
-milestones.create=创建里程碑
-milestones.title=标题
-milestones.desc=描述
-milestones.due_date=截止日期(可选)
-milestones.clear=清除
-milestones.invalid_due_date_format=截止日期的格式错误,必须是 'year-mm-dd' 的形式。
-milestones.create_success=里程碑 '%s' 创建成功!
-milestones.edit=编辑里程碑
-milestones.edit_subheader=使用更加清晰的描述来帮助人们更好地理解里程碑的作用。
-milestones.cancel=取消
-milestones.modify=修改里程碑
-milestones.edit_success=里程碑 '%s' 的修改内容已经生效!
-milestones.deletion=删除里程碑操作
-milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
-milestones.deletion_success=里程碑删除成功!
-
-settings=仓库设置
-settings.options=基本设置
-settings.collaboration=管理协作者
-settings.hooks=管理 Web 钩子
-settings.githooks=管理 Git 钩子
-settings.basic_settings=基本设置
-settings.danger_zone=危险操作区
-settings.site=官方网站
-settings.update_settings=更新仓库设置
-settings.change_reponame_prompt=该操作将会影响到所有与该仓库有关的链接
-settings.transfer=转移仓库所有权
-settings.transfer_desc=您可以将仓库转移至您拥有管理员权限的帐户或组织。
-settings.new_owner_has_same_repo=新的仓库拥有者已经存在同名仓库!
-settings.delete=删除本仓库
-settings.delete_desc=删除仓库操作不可逆转,请三思而后行。
-settings.transfer_notices_1=- 如果您将仓库转移给个人用户,您将会丢失操作权限。
-settings.transfer_notices_2=- 如果您将仓库转移给您是所有者的组织,您的操作权限将被保留。
-settings.transfer_form_title=请输入以下信息以确认您的操作:
-settings.delete_notices_1=- 此操作 <strong>不可以</strong> 被回滚。
-settings.delete_notices_2=- 此操作将永久删除该仓库,包括 Git 数据、 工单、 评论和协作者的操作权限。
-settings.delete_notices_fork_1=- 如果该仓库为公开的,则在删除仓库后所有的派生仓库都将转换成独立的仓库。
-settings.delete_notices_fork_2=- 如果该仓库为私有,则会同时删除所有的派生仓库。
-settings.delete_notices_fork_3=- 如果您想要保留派生仓库,请先将可见性修改为公开的后再进行删除操作。
-settings.update_settings_success=仓库设置更新成功!
-settings.transfer_owner=新拥有者
-settings.make_transfer=确认转移仓库
-settings.transfer_succeed=仓库所有权转移成功!
-settings.confirm_delete=确认删除仓库
-settings.add_collaborator=增加新的协作者
-settings.add_collaborator_success=成功添加新的协作者!
-settings.remove_collaborator_success=被操作的协作者已经被收回权限!
-settings.user_is_org_member=被操作的用户是组织成员,因此无法添加为协作者!
-settings.add_webhook=添加 Web 钩子
-settings.hooks_desc=Web 钩子允许您设定在 Gogs 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文档</a> 获取更多信息。
-settings.webhook_deletion=删除 Web 钩子
-settings.webhook_deletion_desc=删除该 Web 钩子将会删除与其有关的信息和推送历史。是否继续?
-settings.webhook_deletion_success=Web 钩子删除成功!
-settings.webhook.request=请求内容
-settings.webhook.response=响应内容
-settings.webhook.headers=头信息
-settings.webhook.payload=推送内容
-settings.webhook.body=响应体
-settings.githooks_desc=Git 钩子是由 Git 本身提供的功能,以下为 Gogs 所支持的钩子列表。
-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" href="%s">Webhooks 文档</a> 获取更多信息。 
-settings.payload_url=推送地址
-settings.content_type=数据格式
-settings.secret=密钥文本
-settings.slack_username=服务名称
-settings.slack_icon_url=图标 URL
-settings.slack_color=颜色代码
-settings.event_desc=请设置您希望触发 Web 钩子的事件:
-settings.event_push_only=只推送 <code>push</code> 事件。
-settings.event_send_everything=请把 <strong>一切</strong> 都给我
-settings.event_choose=我的命运自己主宰
-settings.event_create=创建
-settings.event_create_desc=创建分支或标签
-settings.event_push=推送
-settings.event_push_desc=Git 仓库推送
-settings.active=是否激活
-settings.active_helper=当指定事件发生时我们将会触发此 Web 钩子。
-settings.add_hook_success=Web 钩子添加成功!
-settings.update_webhook=更新 Web 钩子
-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.slack_token=令牌
-settings.slack_domain=域名
-settings.slack_channel=频道
-settings.deploy_keys=管理部署密钥
-settings.add_deploy_key=添加部署密钥
-settings.no_deploy_keys=您还没有添加任何部署密钥。
-settings.title=标题
-settings.deploy_key_content=密钥文本
-settings.key_been_used=部署密钥已经被使用!
-settings.key_name_used=使用相同名称的部署密钥已经存在!
-settings.add_key_success=新的部署密钥 '%s' 添加成功!
-settings.deploy_key_deletion=删除部署密钥
-settings.deploy_key_deletion_desc=删除该部署密钥会移除本仓库所以相关的操作权限。是否继续?
-settings.deploy_key_deletion_success=删除部署密钥成功!
-
-diff.browse_source=浏览代码
-diff.parent=父节点
-diff.commit=当前提交
-diff.data_not_available=暂无可用数据
-diff.show_diff_stats=显示文件统计
-diff.stats_desc=共有 <strong> %d 个文件被更改</strong>,包括 <strong>%d 次插入</strong> 和 <strong>%d 次删除</strong>
-diff.bin=二进制
-diff.view_file=查看文件
-
-release.releases=版本发布
-release.new_release=发布新版
-release.draft=草稿
-release.prerelease=预发行
-release.stable=稳定
-release.edit=编辑
-release.ahead=在该版本发布之后已有 <strong>%d</strong> 次代码提交到 %s 分支
-release.source_code=源代码
-release.tag_name=标签名称
-release.target=目标分支
-release.tag_helper=选择或创建一个已经存在的标签
-release.release_title=发布标题
-release.content_with_md=使用 <a href="%s">Markdown</a> 编辑内容
-release.write=内容编辑
-release.preview=效果预览
-release.content_placeholder=请输入内容
-release.loading=正在加载...
-release.prerelease_desc=这是一个预发行版本
-release.prerelease_helper=我们会告知用户不建议将本次发布投入生产环境使用。
-release.publish=发布版本
-release.save_draft=保存草稿
-release.edit_release=编辑发布信息
-release.tag_name_already_exist=已经存在使用相同标签进行发布的版本。
-
-[org]
-org_name_holder=组织名称
-org_name_helper=伟大的组织都有一个简短而寓意深刻的名字。
-create_org=创建组织
-repo_updated=最后更新于
-people=组织成员
-invite_someone=邀请他人加入
-teams=组织团队
-lower_members=名成员
-lower_repositories=个仓库
-create_new_team=创建新的团队
-org_desc=组织描述
-team_name=团队名称
-team_desc=团队描述
-team_name_helper=您可以使用该名称来通知该组全体成员。
-team_desc_helper=一句话描述这个团队是做什么的。
-team_permission_desc=请选择该团队所具有的权限等级:
-
-form.name_reserved=组织名称 '%s' 是被保留的。
-form.name_pattern_not_allowed=组织名称不允许 '%s' 的格式。
-
-settings=组织设置
-settings.options=基本设置
-settings.full_name=组织全名
-settings.website=官方网站
-settings.location=所在地区
-settings.update_settings=更新组织设置
-settings.update_setting_success=组织设置更新成功!
-settings.change_orgname_prompt=该操作将会影响到所有与该组织有关的链接
-settings.update_avatar_success=组织头像更新成功!
-settings.delete=删除组织
-settings.delete_account=删除当前组织
-settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
-settings.confirm_delete_account=确认删除组织
-settings.delete_org_title=组织删除操作
-settings.delete_org_desc=该组织将被永久性删除,您确定要继续操作吗?
-settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。
-
-members.public=公开成员
-members.public_helper=设为私有
-members.private=私有成员
-members.private_helper=设为公开
-members.owner=管理员
-members.member=普通成员
-members.conceal=隐藏身份
-members.remove=移除成员
-members.leave=离开组织
-members.invite_desc=请输入被邀请到组织 %s 的用户名称:
-members.invite_now=立即邀请
-
-teams.join=加入团队
-teams.leave=离开团队
-teams.read_access=读取权限
-teams.read_access_helper=这个团队将拥有查看和克隆所属仓库的权限。
-teams.write_access=写入权限
-teams.write_access_helper=这个团队将拥有查看、克隆和推送所属仓库的权限。
-teams.admin_access=管理权限
-teams.admin_access_helper=这个团队将拥有查看、克隆、推送和添加其他组织成员到团队的权限。
-teams.no_desc=该团队暂无描述
-teams.settings=团队设置
-teams.owners_permission_desc=管理员团队对 <strong>所有仓库</strong> 具有操作权限,且对组织具有 <strong>管理员权限</strong>。
-teams.members=团队成员
-teams.update_settings=更新团队设置
-teams.delete_team=删除当前团队
-teams.add_team_member=添加团队成员
-teams.delete_team_title=团队删除操作
-teams.delete_team_desc=删除操作会永久清除有关该团队的信息,您确定要继续操作吗?团队成员可能会失去对某些仓库的操作权限。
-teams.delete_team_success=指定团队删除成功!
-teams.read_permission_desc=该团队拥有对所属仓库的 <strong>读取</strong> 权限,团队成员可以进行查看和克隆等只读操作。
-teams.write_permission_desc=该团队拥有对所属仓库的 <strong>读取</strong> 和 <strong>写入</strong> 的权限。
-teams.admin_permission_desc=该团队拥有一定的 <strong>管理</strong> 权限,团队成员可以读取、克隆、推送以及添加其它仓库协作者。
-teams.repositories=团队仓库
-teams.add_team_repository=添加团队仓库
-teams.remove_repo=移除仓库
-teams.add_nonexistent_repo=您尝试添加到团队的仓库不存在,请先创建仓库!
-
-[admin]
-dashboard=控制面板
-users=用户管理
-organizations=组织管理
-repositories=仓库管理
-authentication=授权认证管理
-config=应用配置管理
-notices=系统提示管理
-monitor=应用监控面板
-first_page=首页
-last_page=末页
-total=总计:%d
-
-dashboard.statistic=应用统计数据
-dashboard.operations=管理员操作
-dashboard.system_status=系统监视状态
-dashboard.statistic_info=Gogs 数据库统计:<b>%d</b> 位用户,<b>%d</b> 个组织,<b>%d</b> 个公钥,<b>%d</b> 个仓库,<b>%d</b> 个仓库关注,<b>%d</b> 个赞,<b>%d</b> 次行为,<b>%d</b> 条权限记录,<b>%d</b> 张工单,<b>%d</b> 次评论,<b>%d</b> 个社交帐号,<b>%d</b> 个用户关注,<b>%d</b> 个镜像,<b>%d</b> 个版本发布,<b>%d</b> 个登录源,<b>%d</b> 个 Web 钩子,<b>%d</b> 个里程碑,<b>%d</b> 个标签,<b>%d</b> 个钩子任务,<b>%d</b> 个团队,<b>%d</b> 个更新任务,<b>%d</b> 个附件。
-dashboard.operation_name=操作名称
-dashboard.operation_switch=开关
-dashboard.operation_run=执行
-dashboard.clean_unbind_oauth=清理未绑定社交帐号
-dashboard.clean_unbind_oauth_success=所有未绑定社交数据清除成功!
-dashboard.delete_inactivate_accounts=删除所有未激活帐户
-dashboard.delete_inactivate_accounts_success=所有未激活帐号清除成功!
-dashboard.delete_repo_archives=删除所有仓库存档
-dashboard.delete_repo_archives_success=所有仓库存档清除成功!
-dashboard.git_gc_repos=对仓库进行垃圾回收
-dashboard.git_gc_repos_success=所有仓库垃圾回收成功!
-dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密钥也会被删除)
-dashboard.resync_all_sshkeys_success=所有公钥重新生成成功!
-dashboard.resync_all_update_hooks=重新生成所有仓库的 Update 钩子(用于自定义配置文件被修改)
-dashboard.resync_all_update_hooks_success=所有仓库的 Update 钩子重新生成成功!
-
-dashboard.server_uptime=服务运行时间
-dashboard.current_goroutine=当前 Goroutines 数量
-dashboard.current_memory_usage=当前内存使用量
-dashboard.total_memory_allocated=所有被分配的内存
-dashboard.memory_obtained=内存占用量
-dashboard.pointer_lookup_times=指针查找次数
-dashboard.memory_allocate_times=内存分配次数
-dashboard.memory_free_times=内存释放次数
-dashboard.current_heap_usage=当前 Heap 内存使用量
-dashboard.heap_memory_obtained=Heap 内存占用量
-dashboard.heap_memory_idle=Heap 内存空闲量
-dashboard.heap_memory_in_use=正在使用的 Heap 内存
-dashboard.heap_memory_released=被释放的 Heap 内存
-dashboard.heap_objects=Heap 对象数量
-dashboard.bootstrap_stack_usage=启动 Stack 使用量
-dashboard.stack_memory_obtained=被分配的 Stack 内存
-dashboard.mspan_structures_usage=MSpan 结构内存使用量
-dashboard.mspan_structures_obtained=被分配的 MSpan 结构内存
-dashboard.mcache_structures_usage=MCache 结构内存使用量
-dashboard.mcache_structures_obtained=被分配的 MCache 结构内存
-dashboard.profiling_bucket_hash_table_obtained=被分配的剖析哈希表内存
-dashboard.gc_metadata_obtained=被分配的 GC 元数据内存
-dashboard.other_system_allocation_obtained=其它被分配的系统内存
-dashboard.next_gc_recycle=下次 GC 内存回收量
-dashboard.last_gc_time=距离上次 GC 时间
-dashboard.total_gc_time=GC 执行时间总量
-dashboard.total_gc_pause=GC 暂停时间总量
-dashboard.last_gc_pause=上次 GC 暂停时间
-dashboard.gc_times=GC 执行次数
-
-users.user_manage_panel=用户管理面板
-users.new_account=创建新的帐户
-users.name=用户名
-users.activated=已激活
-users.admin=管理员
-users.repos=仓库数
-users.created=创建时间
-users.send_register_notify=向用户发送注册通知邮件
-users.new_success=新的用户 '%s' 创建成功!
-users.edit=编辑
-users.auth_source=认证源
-users.local=本地
-users.auth_login_name=认证登录名称
-users.password_helper=将值留空使其保持不变。
-users.update_profile_success=该用户信息更新成功!
-users.edit_account=编辑用户信息
-users.is_activated=该用户已被激活
-users.is_admin=该用户具有管理员权限
-users.allow_git_hook=该帐户具有创建 Git 钩子的权限
-users.update_profile=更新用户信息
-users.delete_account=删除该用户
-users.still_own_repo=该帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
-users.still_has_org=该帐户仍旧是某些组织的成员,您必须先使其离开或删除组织。
-users.deletion_success=用户删除成功!
-
-orgs.org_manage_panel=组织管理面板
-orgs.name=组织名称
-orgs.teams=团队数
-orgs.members=成员数
-
-repos.repo_manage_panel=仓库管理界面
-repos.owner=所有者
-repos.name=仓库名称
-repos.private=私有库
-repos.watches=关注数
-repos.stars=点赞数
-repos.issues=工单数
-
-auths.auth_manage_panel=认证管理面板
-auths.new=添加新的源
-auths.name=认证名称
-auths.type=认证类型
-auths.enabled=已启用
-auths.updated=最后更新时间
-auths.auth_type=认证类型
-auths.auth_name=认证名称
-auths.domain=域名
-auths.host=主机地址
-auths.port=主机端口
-auths.bind_dn=绑定 DN
-auths.bind_password=绑定密码
-auths.bind_password_helper=警告:该密码将会以明文的形式保存在数据库中。请不要使用拥有高权限的帐户!
-auths.user_base=用户搜索基准
-auths.user_dn=User DN
-auths.attribute_name=名字属性
-auths.attribute_surname=姓氏属性
-auths.attribute_mail=邮箱属性
-auths.filter=用户过滤规则
-auths.admin_filter=管理员过滤规则
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP 认证类型
-auths.smtphost=SMTP 主机地址
-auths.smtpport=SMTP 主机端口
-auths.allowed_domains=域名白名单
-auths.allowed_domains_helper=将值留空表示不对域名做任何限制。多个域名之间需要使用逗号 ',' 分隔。
-auths.enable_tls=启用 TLS 加密
-auths.skip_tls_verify=忽略 TLS 验证
-auths.pam_service_name=PAM 服务名称
-auths.enable_auto_register=允许授权用户自动注册
-auths.tips=帮助提示
-auths.edit=编辑认证设置
-auths.activated=该授权认证已经启用
-auths.new_success=新的授权源 "%s" 添加成功!
-auths.update_success=认证设置更新成功!
-auths.update=更新认证设置
-auths.delete=删除该认证
-auths.delete_auth_title=删除认证操作
-auths.delete_auth_desc=该认证将被删除。是否继续?
-auths.deletion_success=授权源删除成功!
-
-config.server_config=服务器配置
-config.app_name=应用名称
-config.app_ver=应用版本
-config.app_url=应用 URL
-config.domain=应用域名
-config.offline_mode=离线模式
-config.disable_router_log=关闭路由日志
-config.run_user=运行用户
-config.run_mode=运行模式
-config.repo_root_path=仓库根目录
-config.static_file_root_path=静态文件根目录
-config.log_file_root_path=日志文件根目录
-config.script_type=脚本类型
-config.reverse_auth_user=反向代理认证
-config.db_config=数据库配置
-config.db_type=数据库类型
-config.db_host=主机地址
-config.db_name=数据库名称
-config.db_user=连接用户
-config.db_ssl_mode=SSL 模式
-config.db_ssl_mode_helper=(仅限 "postgres" 使用)
-config.db_path=数据库路径
-config.db_path_helper=(用于 "sqlite3" 和 "tidb")
-config.service_config=服务配置
-config.register_email_confirm=注册邮件确认
-config.disable_register=关闭注册功能
-config.show_registration_button=显示注册按钮
-config.require_sign_in_view=强制登录浏览
-config.enable_cache_avatar=开启缓存头像
-config.mail_notify=邮件通知提醒
-config.disable_key_size_check=禁用密钥最小长度检查
-config.enable_captcha=启用验证码服务
-config.active_code_lives=激活用户链接有效期
-config.reset_password_code_lives=重置密码链接有效期
-config.webhook_config=Web 钩子配置
-config.queue_length=队列长度
-config.deliver_timeout=推送超时
-config.skip_tls_verify=忽略 TLS 验证
-config.mailer_config=邮件配置
-config.mailer_enabled=启用服务
-config.mailer_disable_helo=禁用 HELO 操作
-config.mailer_name=发送者名称
-config.mailer_host=邮件主机地址
-config.mailer_user=发送者帐号
-config.oauth_config=社交帐号配置
-config.oauth_enabled=启用服务
-config.cache_config=Cache 配置
-config.cache_adapter=Cache 适配器
-config.cache_interval=Cache 周期
-config.cache_conn=Cache 连接字符串
-config.session_config=Session 配置
-config.session_provider=Session 提供者
-config.provider_config=提供者配置
-config.cookie_name=Cookie 名称
-config.enable_set_cookie=启用设置 Cookie
-config.gc_interval_time=GC 周期
-config.session_life_time=Session 生命周期
-config.https_only=仅限 HTTPS
-config.cookie_life_time=Cookie 生命周期
-config.picture_config=图片配置
-config.picture_service=图片服务
-config.disable_gravatar=禁用 Gravatar 头像
-config.log_config=日志配置
-config.log_mode=日志模式
-
-monitor.cron=Cron 任务
-monitor.name=任务名称
-monitor.schedule=任务安排
-monitor.next=下次执行时间
-monitor.previous=上次执行时间
-monitor.execute_times=执行次数
-monitor.process=运行中进程
-monitor.desc=进程描述
-monitor.start=开始时间
-monitor.execute_time=已执行时间
-
-notices.system_notice_list=系统提示管理
-notices.type=提示类型
-notices.type_1=仓库
-notices.desc=描述
-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="%s/src/%s">%[2]s</a> 分支的代码到 <a href="%[1]s">%[3]s</a>
-create_issue=`创建了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
-create_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_2_commits=查看 2 次提交的内容对比
-
-[tool]
-ago=之前
-from_now=之后
-now=现在
-1s=1 秒%s
-1m=1 分钟%s
-1h=1 小时%s
-1d=1 天%s
-1w=1 周%s
-1mon=1 月%s
-1y=1 年%s
-seconds=%d 秒%s
-minutes=%d 分钟%s
-hours=%d 小时%s
-days=%d 天%s
-weeks=%d 周%s
-months=%d 月%s
-years=%d 年%s
-raw_seconds=秒
-raw_minutes=分钟
-
-[dropzone]
-default_message=拖曳文件到此处或单击上传
-invalid_input_type=您不能上传该类型的文件
-file_too_big=文件体积({{filesize}} MB)超过了最大允许体积({{maxFilesize}} MB)
-remove_file=移除文件
-
+app_desc=基于 Go 语言的自助 Git 服务
+
+home=首页
+dashboard=控制面板
+explore=探索
+help=帮助
+sign_in=登录
+sign_out=退出
+sign_up=注册
+register=注册
+website=官方网站
+version=当前版本
+page=页面
+template=模板
+language=语言选项
+create_new=创建...
+user_profile_and_more=用户信息及更多
+signed_in_as=已登录用户
+
+username=用户名
+email=邮箱
+password=密码
+re_type=确认密码
+captcha=验证码
+
+repository=仓库
+organization=组织
+mirror=镜像
+new_repo=创建新的仓库
+new_migrate=迁移外部仓库
+new_fork=创建新的派生仓库
+new_org=创建新的组织
+manage_org=管理我的组织
+admin_panel=管理面板
+account_settings=帐户设置
+settings=帐户设置
+your_profile=个人信息
+your_settings=用户设置
+
+news_feed=最新活动
+pull_requests=合并请求
+issues=工单管理
+
+cancel=取消
+
+[search]
+search=搜索...
+repository=仓库
+user=用户
+issue=工单
+code=代码
+
+[install]
+install=安装页面
+title=首次运行安装程序
+docker_helper=如果您正在使用 Docker 容器运行 Gogs,请务必先仔细阅读 <a target="_blank" href="%s">官方文档</a> 后再对本页面进行填写。
+requite_db_desc=Gogs 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
+db_title=数据库设置
+db_type=数据库类型
+host=数据库主机
+user=数据库用户
+password=数据库用户密码
+db_name=数据库名称
+db_helper=如果您使用 MySQL,请使用 INNODB 引擎以及 utf8_general_ci 字符集。
+ssl_mode=SSL 模式
+path=数据库文件路径
+sqlite_helper=SQLite3 或 TiDB 的数据库路径。
+err_empty_db_path=SQLite3 或 TiDB 的数据库路径不能为空。
+err_invalid_tidb_name=TiDB 数据库名称不允许包含字符 "." 或 "-" 。
+no_admin_and_disable_registration=您不能够在未创建管理员用户的情况下禁止注册。
+err_empty_admin_password=管理员密码不能为空。
+
+general_title=应用基本设置
+app_name=应用名称
+app_name_helper=快用狂拽酷炫的组织名称闪瞎我们!
+repo_path=仓库根目录
+repo_path_helper=所有 Git 远程仓库都将被存放于该目录。
+run_user=运行系统用户
+run_user_helper=该用户必须具有对仓库根目录和运行 Gogs 的操作权限。
+domain=域名
+domain_helper=该设置影响 SSH 克隆地址。
+ssh_port=SSH 端口号
+ssh_port_helper=SSH 服务器的监听端口号,留空表示禁用 SSH 功能。
+http_port=HTTP 端口号
+http_port_helper=应用监听的端口号
+app_url=应用 URL
+app_url_helper=该设置影响 HTTP/HTTPS 克隆地址和一些邮箱中的链接。
+
+optional_title=可选设置
+email_title=邮件服务设置
+smtp_host=SMTP 主机
+smtp_from=邮件来自
+smtp_from_helper=邮件来自地址,遵循 RFC 5322 标准。可以是一个单纯的邮箱地址或使用 "Name" <email@example.com> 的格式。
+mailer_user=发送邮箱
+mailer_password=发送邮箱密码
+register_confirm=启用注册邮箱确认
+mail_notify=启用邮件通知提醒
+server_service_title=服务器和其它服务设置
+offline_mode=启用离线模式
+offline_mode_popup=在部署模式下也禁用从 CDN 获取文件,所以的资源都将从本地服务器获取。
+disable_gravatar=禁用 Gravatar 服务
+disable_gravatar_popup=禁用 Gravatar 和自定义源,仅使用由用户上传的或默认的头像。
+disable_registration=禁止用户自主注册
+disable_registration_popup=禁止用户自行注册功能,只有管理员可以添加帐号。
+enable_captcha=启用验证码服务
+enable_captcha_popup=要求在用户注册时输入预验证码
+require_sign_in_view=启用登录访问限制
+require_sign_in_view_popup=只有已登录的用户才能够访问页面,否则将只能看到登录或注册页面。
+admin_setting_desc=创建管理员帐号并不是必须的,因为 ID=1 的用户将自动获得管理员权限。
+admin_title=管理员帐号设置
+admin_name=管理员用户名
+admin_password=管理员密码
+confirm_password=确认密码
+admin_email=管理员邮箱
+install_gogs=立即安装
+test_git_failed=无法识别 'git' 命令:%v
+sqlite3_not_available=您所使用的发行版不支持 SQLite3,请从 %s 下载官方构建版,而不是 gobuild 版本。
+invalid_db_setting=数据库设置不正确:%v
+invalid_repo_path=仓库根目录设置不正确:%v
+run_user_not_match=运行系统用户非当前用户:%s -> %s
+save_config_failed=应用配置保存失败:%v
+invalid_admin_setting=管理员帐户设置不正确:%v
+install_success=您好!我们很高兴您选择使用 Gogs,祝您使用愉快,代码从此无 BUG!
+
+[home]
+uname_holder=用户名或邮箱
+password_holder=密码
+switch_dashboard_context=切换控制面板用户
+my_repos=我的仓库
+collaborative_repos=参与协作的仓库
+my_orgs=我的组织
+my_mirrors=我的镜像
+view_home=访问 %s
+
+issues.in_your_repos=属于该用户仓库的
+
+[explore]
+repos=探索仓库
+
+[auth]
+create_new_account=创建帐户
+register_hepler_msg=已经注册?立即登录!
+social_register_hepler_msg=已经注册?立即绑定!
+disable_register_prompt=对不起,注册功能已被关闭。请联系网站管理员。
+disable_register_mail=对不起,注册邮箱确认功能已被关闭。
+remember_me=记住登录
+forgot_password=忘记密码
+forget_password=忘记密码?
+sign_up_now=还没帐户?马上注册。
+confirmation_mail_sent_prompt=一封新的确认邮件已经被发送至 <b>%s</b>,请检查您的收件箱并在 %d 小时内完成确认注册操作。
+active_your_account=激活您的帐户
+resent_limit_prompt=对不起,您请求发送激活邮件过于频繁,请等待 3 分钟后再试!
+has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
+resend_mail=单击此处重新发送确认邮件
+email_not_associate=您输入的邮箱地址未被关联到任何帐号!
+send_reset_mail=单击此处(重新)发送您的密码重置邮件
+reset_password=重置密码
+invalid_code=对不起,您的确认代码已过期或已失效。
+reset_password_helper=单击此处重置密码
+password_too_short=密码长度不能少于 6 位!
+
+[mail]
+activate_account=请激活您的帐户
+activate_email=请验证您的邮箱地址
+reset_password=重置您的密码
+register_success=注册成功,欢迎使用
+register_notify=欢迎使用
+
+[modal]
+yes=确认操作
+no=取消操作
+modify=确认修改
+
+[form]
+UserName=用户名
+RepoName=仓库名称
+Email=邮箱地址
+Password=密码
+Retype=确认密码
+SSHTitle=SSH 密钥名称
+HttpsUrl=HTTPS URL 地址
+PayloadUrl=推送地址
+TeamName=团队名称
+AuthName=认证名称
+AdminEmail=管理员邮箱
+
+require_error=不能为空。
+alpha_dash_error=必须为英文字母、阿拉伯数字或横线(-_)。
+alpha_dash_dot_error=必须为英文字母、阿拉伯数字、横线(-_)或点。
+size_error=长度必须为 %s。
+min_size_error=长度最小为 %s 个字符。
+max_size_error=长度最大为 %s 个字符。
+email_error=不是一个有效的邮箱地址。
+url_error=不是一个有效的 URL。
+include_error=必须包含子字符串 '%s'。
+unknown_error=未知错误:
+captcha_incorrect=验证码未匹配。
+password_not_match=密码与确认密码未匹配。
+
+username_been_taken=用户名已经被占用。
+repo_name_been_taken=仓库名称已经被占用。
+org_name_been_taken=组织名称已经被占用。
+team_name_been_taken=团队名称已经被占用。
+email_been_used=邮箱地址已经被使用。
+illegal_team_name=团队名称包含非法字符。
+username_password_incorrect=用户名或密码不正确。
+enterred_invalid_repo_name=请检查您输入的仓库名称是正确。
+enterred_invalid_owner_name=请检查您输入的新所有者用户名是否正确。
+enterred_invalid_password=请检查您输入的密码是否正确。
+user_not_exist=被操作的用户不存在!
+last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作!
+
+invalid_ssh_key=很抱歉,我们无法验证您输入的 SSH 密钥:%s
+unable_verify_ssh_key=Gogs 无法验证您输入的 SSH 密钥,但我们假设那是有效的密钥,请您自行确保其有效性!
+auth_failed=授权验证失败:%v
+
+still_own_repo=您的帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
+still_has_org=您的帐户仍旧是某些组织的成员,您必须先离开或删除组织。
+org_still_own_repo=该组织仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除组织操作!
+
+still_own_user=该授权认证依旧被部分用户使用,请先删除该部分用户后再试!
+
+target_branch_not_exist=目标分支不存在。
+
+[user]
+change_avatar=到 gravatar.com 上修改您的头像
+change_custom_avatar=到个人设置中修改头像
+join_on=加入于
+repositories=仓库列表
+activity=公开活动
+followers=关注者
+starred=已点赞
+following=关注中
+
+form.name_reserved=用户名 '%s' 是被保留的。
+form.name_pattern_not_allowed=用户名不允许 '%s' 的格式。
+
+[settings]
+profile=个人信息
+password=修改密码
+ssh_keys=管理 SSH 密钥
+social=社交帐号绑定
+applications=管理授权应用
+orgs=管理组织
+delete=删除帐户
+uid=用户 ID
+
+public_profile=公开信息
+profile_desc=您的邮箱地址将会被公开,并被用于接收帐户的所有提醒和通知。
+full_name=自定义名称
+website=个人网站
+location=所在地区
+update_profile=更新信息
+update_profile_success=您的个人信息更新成功!
+change_username=用户名将被修改
+change_username_prompt=该操作将会影响到所有与您帐户有关的链接
+continue=继续操作
+cancel=取消操作
+
+enable_custom_avatar=启动自定义头像
+enable_custom_avatar_helper=激活该选项来禁止从 Gravatar 获取头像
+choose_new_avatar=选择新的头像
+update_avatar=更新头像设置
+uploaded_avatar_not_a_image=上传的文件不是一张图片!
+no_custom_avatar_available=未上传过自定义头像,无法激活该选项。
+update_avatar_success=您的头像设置更新成功!
+
+change_password=修改密码
+old_password=当前密码
+new_password=新的密码
+retype_new_password=重新输入新的密码
+password_incorrect=当前密码不正确!
+change_password_success=密码修改成功!您现在可以使用新的密码登录。
+
+emails=邮箱地址
+manage_emails=管理邮箱地址
+email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。
+primary=主要
+primary_email=设为主要
+delete_email=删除
+email_deletion=邮箱删除操作
+email_deletion_desc=删除该邮箱地址将会移除所有相关的信息。是否继续?
+email_deletion_success=邮箱删除成功!
+add_new_email=添加新的邮箱地址
+add_email=添加邮箱
+add_email_confirmation_sent=一封待确认的电子邮件已发送到 '%s',请在 %d 小时内检查您的收件箱,并完成确认过程。
+add_email_success=新的邮箱地址添加成功!
+
+manage_ssh_keys=管理 SSH 密钥
+add_key=增加密钥
+ssh_desc=以下是与您帐户所关联的 SSH 密钥,如果您发现有陌生的密钥,请立即删除它!
+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=使用相同名称的公开密钥已经存在!
+key_name=密钥名称
+key_content=密钥内容
+add_key_success=新的 SSH 密钥 '%s' 添加成功!
+delete_key=删除
+ssh_key_deletion=删除 SSH 公钥操作
+ssh_key_deletion_desc=删除该 SSH 公钥将删除所有与您帐户相关的访问权限。是否继续?
+ssh_key_deletion_success=SSH 公钥删除成功!
+add_on=增加于
+last_used=上次使用在
+no_activity=没有最近活动
+key_state_desc=该密钥在 7 天内被使用过
+token_state_desc=该令牌在 7 天内被使用过
+
+manage_social=管理关联社交帐户
+social_desc=以下是与您帐户所关联的社交帐号,如果您发现有陌生的关联,请立即解除绑定!
+unbind=解除绑定
+unbind_success=社交帐号解除绑定成功!
+
+manage_access_token=管理个人操作令牌
+generate_new_token=生成新的令牌
+tokens_desc=您可以使用这些已生成的令牌来操作 Gogs API。
+new_token_desc=目前为止,任何令牌都对您的帐户拥有完整的操作权限。
+token_name=令牌名称
+generate_token=生成令牌
+generate_token_succees=新的操作令牌生成成功!您必须立即复制到一个安全的地方,因为该令牌只会显示一次!
+delete_token=删除令牌
+access_token_deletion=删除个人操作令牌操作
+access_token_deletion_desc=删除该个人操作令牌将删除所有相关的应用程序的访问权限。是否继续?
+delete_token_success=个人操作令牌删除成功!请更新与该令牌有关的所有应用。
+
+delete_account=删除当前帐户
+delete_prompt=删除操作会永久清除您的帐户信息,并且 <strong>不可恢复</strong>!
+confirm_delete_account=确认删除帐户
+delete_account_title=帐户删除操作
+delete_account_desc=该帐户将被永久性删除,您确定要继续操作吗?
+
+[repo]
+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_fork_helper=(修改该值将会影响到所有派生仓库)
+clone_helper=不知道如何操作?访问 <a target="_blank" href="%s">此处</a> 查看帮助!
+fork_repo=派生仓库
+fork_from=派生自
+fork_visiblity_helper=派生仓库无法修改可见性
+repo_desc=仓库描述
+repo_lang=仓库语言
+repo_lang_helper=请选择 .gitignore 文件
+license=授权许可
+license_helper=请选择授权许可文件
+readme=自述文档
+readme_helper=请选择自述文档模板
+auto_init=使用选定的文件和模板初始化仓库
+create_repo=创建仓库
+default_branch=默认分支
+mirror_interval=镜像同步周期(小时)
+watchers=关注者
+stargazers=称赞者
+forks=派生仓库
+
+form.name_reserved=仓库名称 '%s' 是被保留的。
+form.name_pattern_not_allowed=仓库名称不允许 '%s' 的格式。
+
+need_auth=需要授权验证
+migrate_type=迁移类型
+migrate_type_helper=该仓库将是一个 <span class="text blue">镜像</span>
+migrate_repo=迁移仓库
+migrate.clone_address=克隆地址
+migrate.clone_address_desc=该地址可以是 HTTP/HTTPS/GIT URL 或本地服务器路径。
+migrate.permission_denied=您没有获得导入本地仓库的权限。
+migrate.invalid_local_path=无效的本地路径,不存在或不是一个目录!
+migrate.failed=迁移失败:%v
+
+forked_from=派生自
+fork_from_self=无法派生已经拥有的仓库!
+copy_link=复制链接
+copy_link_success=复制成功!
+copy_link_error=请按下 ⌘-C 或 Ctrl-C 复制
+copied=复制成功
+unwatch=取消关注
+watch=关注
+unstar=取消点赞
+star=点赞
+fork=派生
+
+no_desc=暂无描述
+quick_guide=快速帮助
+clone_this_repo=克隆当前仓库
+create_new_repo_command=从命令行创建一个新的仓库
+push_exist_repo=从命令行推送已经创建的仓库
+repo_is_empty=该仓库不包含任何内容,请稍后再进行访问!
+
+branch=分支
+tree=目录树
+filter_branch_and_tag=过滤分支或标签
+branches=分支列表
+tags=标签列表
+issues=工单管理
+pulls=合并请求
+labels=标签管理
+milestones=里程碑
+commits=提交历史
+releases=版本发布
+file_raw=原始文件
+file_history=文件历史
+file_view_raw=查看原始文件
+file_permalink=永久链接
+
+commits.commits=次代码提交
+commits.search=搜索提交历史
+commits.find=查找
+commits.author=作者
+commits.message=备注
+commits.date=提交日期
+commits.older=更旧的提交
+commits.newer=更新的提交
+
+issues.new=创建工单
+issues.new.labels=标签
+issues.new.no_label=未选择标签
+issues.new.clear_labels=清除选中标签
+issues.new.milestone=里程碑
+issues.new.no_milestone=未选择里程碑
+issues.new.clear_milestone=取消选中里程碑
+issues.new.open_milestone=开启中的里程碑
+issues.new.closed_milestone=已关闭的里程碑
+issues.new.assignee=指派成员
+issues.new.clear_assignee=取消指派成员
+issues.new.no_assignee=未指派成员
+issues.create=创建工单
+issues.new_label=创建标签
+issues.new_label_placeholder=标签名称...
+issues.create_label=创建标签
+issues.open_tab=%d 个开启中
+issues.close_tab=%d 个已关闭
+issues.filter_label=标签筛选
+issues.filter_label_no_select=无筛选标签
+issues.filter_milestone=里程碑筛选
+issues.filter_milestone_no_select=无筛选里程碑
+issues.filter_assignee=指派人筛选
+issues.filter_assginee_no_select=无筛选指派人
+issues.filter_type=类型筛选
+issues.filter_type.all_issues=所有工单
+issues.filter_type.assigned_to_you=指派给您的
+issues.filter_type.created_by_you=由您创建的
+issues.filter_type.mentioning_you=提及您的
+issues.filter_sort=排序
+issues.filter_sort.latest=最新创建
+issues.filter_sort.oldest=最早创建
+issues.filter_sort.recentupdate=最近更新
+issues.filter_sort.leastupdate=最少更新
+issues.filter_sort.mostcomment=最多评论
+issues.filter_sort.leastcomment=最少评论
+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 id="%[1]s" href="#%[1]s">%[2]s</a> 评论`
+issues.no_content=这个人很懒,什么都没留下。
+issues.close_issue=关闭
+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.poster=发布者
+issues.admin=管理员
+issues.owner=所有者
+issues.sign_up_for_free=免费注册
+issues.sign_in_require_desc=并加入到对话中来。如果您已经注册,可以直接 <a href="%s">登录并评论</a>
+issues.edit=编辑
+issues.cancel=取消
+issues.save=保存
+issues.label_title=标签名称
+issues.label_color=标签颜色
+issues.label_count=%d 个标签
+issues.label_open_issues=%d 个开启的工单
+issues.label_edit=编辑
+issues.label_delete=删除
+issues.label_modify=修改标签
+issues.label_deletion=删除标签操作
+issues.label_deletion_desc=删除该标签将会移除所有工单中相关的信息。是否继续?
+issues.label_deletion_success=标签删除成功!
+
+pulls.new=创建合并请求
+pulls.compare_changes=对比文件变化
+pulls.compare_changes_desc=对比两个分支间的文件变化并发起一个合并请求。
+pulls.compare_base=基准分支
+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.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> 
+pulls.tab_conversation=对话内容
+pulls.tab_commits=代码提交
+pulls.tab_files=文件变动
+pulls.reopen_to_merge=请重新开启合并请求来完成合并操作。
+pulls.merged=已合并
+pulls.has_merged=该合并请求已经成功合并!
+pulls.data_broken=该合并请求的数据由于派生仓库的相关信息被删除而被破坏。
+pulls.is_checking=该合并请求正在进行冲突检查,请稍后再刷新页面。
+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),您无法执行重新开启操作。`
+
+milestones.new=新的里程碑
+milestones.open_tab=%d 开启中
+milestones.close_tab=%d 已关闭
+milestones.closed=于 %s关闭
+milestones.no_due_date=暂无截止日期
+milestones.open=开启
+milestones.close=关闭
+milestones.new_subheader=创建里程碑来更好地组织您的工单。
+milestones.create=创建里程碑
+milestones.title=标题
+milestones.desc=描述
+milestones.due_date=截止日期(可选)
+milestones.clear=清除
+milestones.invalid_due_date_format=截止日期的格式错误,必须是 'yyyy-mm-dd' 的形式。
+milestones.create_success=里程碑 '%s' 创建成功!
+milestones.edit=编辑里程碑
+milestones.edit_subheader=使用更加清晰的描述来帮助人们更好地理解里程碑的作用。
+milestones.cancel=取消
+milestones.modify=修改里程碑
+milestones.edit_success=里程碑 '%s' 的修改内容已经生效!
+milestones.deletion=删除里程碑操作
+milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
+milestones.deletion_success=里程碑删除成功!
+
+settings=仓库设置
+settings.options=基本设置
+settings.collaboration=管理协作者
+settings.hooks=管理 Web 钩子
+settings.githooks=管理 Git 钩子
+settings.basic_settings=基本设置
+settings.danger_zone=危险操作区
+settings.site=官方网站
+settings.update_settings=更新仓库设置
+settings.change_reponame_prompt=该操作将会影响到所有与该仓库有关的链接
+settings.transfer=转移仓库所有权
+settings.transfer_desc=您可以将仓库转移至您拥有管理员权限的帐户或组织。
+settings.new_owner_has_same_repo=新的仓库拥有者已经存在同名仓库!
+settings.delete=删除本仓库
+settings.delete_desc=删除仓库操作不可逆转,请三思而后行。
+settings.transfer_notices_1=- 如果您将仓库转移给个人用户,您将会丢失操作权限。
+settings.transfer_notices_2=- 如果您将仓库转移给您是所有者的组织,您的操作权限将被保留。
+settings.transfer_form_title=请输入以下信息以确认您的操作:
+settings.delete_notices_1=- 此操作 <strong>不可以</strong> 被回滚。
+settings.delete_notices_2=- 此操作将永久删除该仓库,包括 Git 数据、 工单、 评论和协作者的操作权限。
+settings.delete_notices_fork_1=- 如果该仓库为公开的,则在删除仓库后所有的派生仓库都将转换成独立的仓库。
+settings.delete_notices_fork_2=- 如果该仓库为私有,则会同时删除所有的派生仓库。
+settings.delete_notices_fork_3=- 如果您想要保留派生仓库,请先将可见性修改为公开的后再进行删除操作。
+settings.update_settings_success=仓库设置更新成功!
+settings.transfer_owner=新拥有者
+settings.make_transfer=确认转移仓库
+settings.transfer_succeed=仓库所有权转移成功!
+settings.confirm_delete=确认删除仓库
+settings.add_collaborator=增加新的协作者
+settings.add_collaborator_success=成功添加新的协作者!
+settings.remove_collaborator_success=被操作的协作者已经被收回权限!
+settings.search_user_placeholder=搜索用户...
+settings.user_is_org_member=被操作的用户是组织成员,因此无法添加为协作者!
+settings.add_webhook=添加 Web 钩子
+settings.hooks_desc=Web 钩子允许您设定在 Gogs 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文档</a> 获取更多信息。
+settings.webhook_deletion=删除 Web 钩子
+settings.webhook_deletion_desc=删除该 Web 钩子将会删除与其有关的信息和推送历史。是否继续?
+settings.webhook_deletion_success=Web 钩子删除成功!
+settings.webhook.request=请求内容
+settings.webhook.response=响应内容
+settings.webhook.headers=头信息
+settings.webhook.payload=推送内容
+settings.webhook.body=响应体
+settings.githooks_desc=Git 钩子是由 Git 本身提供的功能,以下为 Gogs 所支持的钩子列表。
+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" href="%s">Webhooks 文档</a> 获取更多信息。 
+settings.payload_url=推送地址
+settings.content_type=数据格式
+settings.secret=密钥文本
+settings.slack_username=服务名称
+settings.slack_icon_url=图标 URL
+settings.slack_color=颜色代码
+settings.event_desc=请设置您希望触发 Web 钩子的事件:
+settings.event_push_only=只推送 <code>push</code> 事件。
+settings.event_send_everything=请把 <strong>一切</strong> 都给我
+settings.event_choose=我的命运自己主宰
+settings.event_create=创建
+settings.event_create_desc=创建分支或标签
+settings.event_push=推送
+settings.event_push_desc=Git 仓库推送
+settings.active=是否激活
+settings.active_helper=当指定事件发生时我们将会触发此 Web 钩子。
+settings.add_hook_success=Web 钩子添加成功!
+settings.update_webhook=更新 Web 钩子
+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.slack_token=令牌
+settings.slack_domain=域名
+settings.slack_channel=频道
+settings.deploy_keys=管理部署密钥
+settings.add_deploy_key=添加部署密钥
+settings.no_deploy_keys=您还没有添加任何部署密钥。
+settings.title=标题
+settings.deploy_key_content=密钥文本
+settings.key_been_used=部署密钥已经被使用!
+settings.key_name_used=使用相同名称的部署密钥已经存在!
+settings.add_key_success=新的部署密钥 '%s' 添加成功!
+settings.deploy_key_deletion=删除部署密钥
+settings.deploy_key_deletion_desc=删除该部署密钥会移除本仓库所以相关的操作权限。是否继续?
+settings.deploy_key_deletion_success=删除部署密钥成功!
+
+diff.browse_source=浏览代码
+diff.parent=父节点
+diff.commit=当前提交
+diff.data_not_available=暂无可用数据
+diff.show_diff_stats=显示文件统计
+diff.stats_desc=共有 <strong> %d 个文件被更改</strong>,包括 <strong>%d 次插入</strong> 和 <strong>%d 次删除</strong>
+diff.bin=二进制
+diff.view_file=查看文件
+
+release.releases=版本发布
+release.new_release=发布新版
+release.draft=草稿
+release.prerelease=预发行
+release.stable=稳定
+release.edit=编辑
+release.ahead=在该版本发布之后已有 <strong>%d</strong> 次代码提交到 %s 分支
+release.source_code=源代码
+release.new_subheader=发布版本对产品进行迭代。
+release.edit_subheader=详细的变更日志可以帮助用户更好地了解产品做了哪些改进。
+release.tag_name=标签名称
+release.target=目标分支
+release.tag_helper=选择或创建一个已经存在的标签
+release.title=标题
+release.content=内容
+release.write=内容编辑
+release.preview=效果预览
+release.loading=正在加载...
+release.prerelease_desc=这是一个预发行版本
+release.prerelease_helper=我们会告知用户不建议将本次发布投入生产环境使用。
+release.cancel=取消
+release.publish=发布版本
+release.save_draft=保存草稿
+release.edit_release=编辑发布信息
+release.delete_release=删除此次发布
+release.deletion=删除版本发布操作
+release.deletion_desc=删除该版本发布将会移除相应的 Git 标签。是否继续?
+release.deletion_success=版本发布删除成功!
+release.tag_name_already_exist=已经存在使用相同标签进行发布的版本。
+release.downloads=下载附件
+
+[org]
+org_name_holder=组织名称
+org_full_name_holder=组织全名
+org_name_helper=伟大的组织都有一个简短而寓意深刻的名字。
+create_org=创建组织
+repo_updated=最后更新于
+people=组织成员
+invite_someone=邀请他人加入
+teams=组织团队
+lower_members=名成员
+lower_repositories=个仓库
+create_new_team=创建新的团队
+org_desc=组织描述
+team_name=团队名称
+team_desc=团队描述
+team_name_helper=您可以使用该名称来通知该组全体成员。
+team_desc_helper=一句话描述这个团队是做什么的。
+team_permission_desc=请选择该团队所具有的权限等级:
+
+form.name_reserved=组织名称 '%s' 是被保留的。
+form.name_pattern_not_allowed=组织名称不允许 '%s' 的格式。
+
+settings=组织设置
+settings.options=基本设置
+settings.full_name=组织全名
+settings.website=官方网站
+settings.location=所在地区
+settings.update_settings=更新组织设置
+settings.update_setting_success=组织设置更新成功!
+settings.change_orgname_prompt=该操作将会影响到所有与该组织有关的链接
+settings.update_avatar_success=组织头像更新成功!
+settings.delete=删除组织
+settings.delete_account=删除当前组织
+settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
+settings.confirm_delete_account=确认删除组织
+settings.delete_org_title=组织删除操作
+settings.delete_org_desc=该组织将被永久性删除,您确定要继续操作吗?
+settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。
+
+members.public=公开成员
+members.public_helper=设为私有
+members.private=私有成员
+members.private_helper=设为公开
+members.owner=管理员
+members.member=普通成员
+members.conceal=隐藏身份
+members.remove=移除成员
+members.leave=离开组织
+members.invite_desc=请输入被邀请到组织 %s 的用户名称:
+members.invite_now=立即邀请
+
+teams.join=加入团队
+teams.leave=离开团队
+teams.read_access=读取权限
+teams.read_access_helper=这个团队将拥有查看和克隆所属仓库的权限。
+teams.write_access=写入权限
+teams.write_access_helper=这个团队将拥有查看、克隆和推送所属仓库的权限。
+teams.admin_access=管理权限
+teams.admin_access_helper=这个团队将拥有查看、克隆、推送和添加其他组织成员到团队的权限。
+teams.no_desc=该团队暂无描述
+teams.settings=团队设置
+teams.owners_permission_desc=管理员团队对 <strong>所有仓库</strong> 具有操作权限,且对组织具有 <strong>管理员权限</strong>。
+teams.members=团队成员
+teams.update_settings=更新团队设置
+teams.delete_team=删除当前团队
+teams.add_team_member=添加团队成员
+teams.delete_team_title=团队删除操作
+teams.delete_team_desc=删除操作会永久清除有关该团队的信息,您确定要继续操作吗?团队成员可能会失去对某些仓库的操作权限。
+teams.delete_team_success=指定团队删除成功!
+teams.read_permission_desc=该团队拥有对所属仓库的 <strong>读取</strong> 权限,团队成员可以进行查看和克隆等只读操作。
+teams.write_permission_desc=该团队拥有对所属仓库的 <strong>读取</strong> 和 <strong>写入</strong> 的权限。
+teams.admin_permission_desc=该团队拥有一定的 <strong>管理</strong> 权限,团队成员可以读取、克隆、推送以及添加其它仓库协作者。
+teams.repositories=团队仓库
+teams.add_team_repository=添加团队仓库
+teams.remove_repo=移除仓库
+teams.add_nonexistent_repo=您尝试添加到团队的仓库不存在,请先创建仓库!
+
+[admin]
+dashboard=控制面板
+users=用户管理
+organizations=组织管理
+repositories=仓库管理
+authentication=授权认证管理
+config=应用配置管理
+notices=系统提示管理
+monitor=应用监控面板
+first_page=首页
+last_page=末页
+total=总计:%d
+
+dashboard.statistic=应用统计数据
+dashboard.operations=管理员操作
+dashboard.system_status=系统监视状态
+dashboard.statistic_info=Gogs 数据库统计:<b>%d</b> 位用户,<b>%d</b> 个组织,<b>%d</b> 个公钥,<b>%d</b> 个仓库,<b>%d</b> 个仓库关注,<b>%d</b> 个赞,<b>%d</b> 次行为,<b>%d</b> 条权限记录,<b>%d</b> 张工单,<b>%d</b> 次评论,<b>%d</b> 个社交帐号,<b>%d</b> 个用户关注,<b>%d</b> 个镜像,<b>%d</b> 个版本发布,<b>%d</b> 个登录源,<b>%d</b> 个 Web 钩子,<b>%d</b> 个里程碑,<b>%d</b> 个标签,<b>%d</b> 个钩子任务,<b>%d</b> 个团队,<b>%d</b> 个更新任务,<b>%d</b> 个附件。
+dashboard.operation_name=操作名称
+dashboard.operation_switch=开关
+dashboard.operation_run=执行
+dashboard.clean_unbind_oauth=清理未绑定社交帐号
+dashboard.clean_unbind_oauth_success=所有未绑定社交数据清除成功!
+dashboard.delete_inactivate_accounts=删除所有未激活帐户
+dashboard.delete_inactivate_accounts_success=所有未激活帐号清除成功!
+dashboard.delete_repo_archives=删除所有仓库存档
+dashboard.delete_repo_archives_success=所有仓库存档清除成功!
+dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库记录
+dashboard.delete_missing_repos_success=所有丢失 Git 文件的仓库记录删除成功!
+dashboard.git_gc_repos=对仓库进行垃圾回收
+dashboard.git_gc_repos_success=所有仓库垃圾回收成功!
+dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密钥也会被删除)
+dashboard.resync_all_sshkeys_success=所有公钥重新生成成功!
+dashboard.resync_all_update_hooks=重新生成所有仓库的 Update 钩子(用于自定义配置文件被修改)
+dashboard.resync_all_update_hooks_success=所有仓库的 Update 钩子重新生成成功!
+
+dashboard.server_uptime=服务运行时间
+dashboard.current_goroutine=当前 Goroutines 数量
+dashboard.current_memory_usage=当前内存使用量
+dashboard.total_memory_allocated=所有被分配的内存
+dashboard.memory_obtained=内存占用量
+dashboard.pointer_lookup_times=指针查找次数
+dashboard.memory_allocate_times=内存分配次数
+dashboard.memory_free_times=内存释放次数
+dashboard.current_heap_usage=当前 Heap 内存使用量
+dashboard.heap_memory_obtained=Heap 内存占用量
+dashboard.heap_memory_idle=Heap 内存空闲量
+dashboard.heap_memory_in_use=正在使用的 Heap 内存
+dashboard.heap_memory_released=被释放的 Heap 内存
+dashboard.heap_objects=Heap 对象数量
+dashboard.bootstrap_stack_usage=启动 Stack 使用量
+dashboard.stack_memory_obtained=被分配的 Stack 内存
+dashboard.mspan_structures_usage=MSpan 结构内存使用量
+dashboard.mspan_structures_obtained=被分配的 MSpan 结构内存
+dashboard.mcache_structures_usage=MCache 结构内存使用量
+dashboard.mcache_structures_obtained=被分配的 MCache 结构内存
+dashboard.profiling_bucket_hash_table_obtained=被分配的剖析哈希表内存
+dashboard.gc_metadata_obtained=被分配的 GC 元数据内存
+dashboard.other_system_allocation_obtained=其它被分配的系统内存
+dashboard.next_gc_recycle=下次 GC 内存回收量
+dashboard.last_gc_time=距离上次 GC 时间
+dashboard.total_gc_time=GC 执行时间总量
+dashboard.total_gc_pause=GC 暂停时间总量
+dashboard.last_gc_pause=上次 GC 暂停时间
+dashboard.gc_times=GC 执行次数
+
+users.user_manage_panel=用户管理面板
+users.new_account=创建新的帐户
+users.name=用户名
+users.activated=已激活
+users.admin=管理员
+users.repos=仓库数
+users.created=创建时间
+users.send_register_notify=向用户发送注册通知邮件
+users.new_success=新的用户 '%s' 创建成功!
+users.edit=编辑
+users.auth_source=认证源
+users.local=本地
+users.auth_login_name=认证登录名称
+users.password_helper=将值留空使其保持不变。
+users.update_profile_success=该用户信息更新成功!
+users.edit_account=编辑用户信息
+users.is_activated=该用户已被激活
+users.is_admin=该用户具有管理员权限
+users.allow_git_hook=该用户具有创建 Git 钩子的权限
+users.allow_import_local=该用户具有导入本地仓库的权限
+users.update_profile=更新用户信息
+users.delete_account=删除该用户
+users.still_own_repo=该帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
+users.still_has_org=该帐户仍旧是某些组织的成员,您必须先使其离开或删除组织。
+users.deletion_success=用户删除成功!
+
+orgs.org_manage_panel=组织管理面板
+orgs.name=组织名称
+orgs.teams=团队数
+orgs.members=成员数
+
+repos.repo_manage_panel=仓库管理界面
+repos.owner=所有者
+repos.name=仓库名称
+repos.private=私有库
+repos.watches=关注数
+repos.stars=点赞数
+repos.issues=工单数
+
+auths.auth_manage_panel=认证管理面板
+auths.new=添加新的源
+auths.name=认证名称
+auths.type=认证类型
+auths.enabled=已启用
+auths.updated=最后更新时间
+auths.auth_type=认证类型
+auths.auth_name=认证名称
+auths.domain=域名
+auths.host=主机地址
+auths.port=主机端口
+auths.bind_dn=绑定 DN
+auths.bind_password=绑定密码
+auths.bind_password_helper=警告:该密码将会以明文的形式保存在数据库中。请不要使用拥有高权限的帐户!
+auths.user_base=用户搜索基准
+auths.user_dn=User DN
+auths.attribute_name=名字属性
+auths.attribute_surname=姓氏属性
+auths.attribute_mail=邮箱属性
+auths.filter=用户过滤规则
+auths.admin_filter=管理员过滤规则
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP 认证类型
+auths.smtphost=SMTP 主机地址
+auths.smtpport=SMTP 主机端口
+auths.allowed_domains=域名白名单
+auths.allowed_domains_helper=将值留空表示不对域名做任何限制。多个域名之间需要使用逗号 ',' 分隔。
+auths.enable_tls=启用 TLS 加密
+auths.skip_tls_verify=忽略 TLS 验证
+auths.pam_service_name=PAM 服务名称
+auths.enable_auto_register=允许授权用户自动注册
+auths.tips=帮助提示
+auths.edit=编辑认证设置
+auths.activated=该授权认证已经启用
+auths.new_success=新的授权源 "%s" 添加成功!
+auths.update_success=认证设置更新成功!
+auths.update=更新认证设置
+auths.delete=删除该认证
+auths.delete_auth_title=删除认证操作
+auths.delete_auth_desc=该认证将被删除。是否继续?
+auths.deletion_success=授权源删除成功!
+
+config.server_config=服务器配置
+config.app_name=应用名称
+config.app_ver=应用版本
+config.app_url=应用 URL
+config.domain=应用域名
+config.offline_mode=离线模式
+config.disable_router_log=关闭路由日志
+config.run_user=运行用户
+config.run_mode=运行模式
+config.repo_root_path=仓库根目录
+config.static_file_root_path=静态文件根目录
+config.log_file_root_path=日志文件根目录
+config.script_type=脚本类型
+config.reverse_auth_user=反向代理认证
+config.db_config=数据库配置
+config.db_type=数据库类型
+config.db_host=主机地址
+config.db_name=数据库名称
+config.db_user=连接用户
+config.db_ssl_mode=SSL 模式
+config.db_ssl_mode_helper=(仅限 "postgres" 使用)
+config.db_path=数据库路径
+config.db_path_helper=(用于 "sqlite3" 和 "tidb")
+config.service_config=服务配置
+config.register_email_confirm=注册邮件确认
+config.disable_register=关闭注册功能
+config.show_registration_button=显示注册按钮
+config.require_sign_in_view=强制登录浏览
+config.enable_cache_avatar=开启缓存头像
+config.mail_notify=邮件通知提醒
+config.disable_key_size_check=禁用密钥最小长度检查
+config.enable_captcha=启用验证码服务
+config.active_code_lives=激活用户链接有效期
+config.reset_password_code_lives=重置密码链接有效期
+config.webhook_config=Web 钩子配置
+config.queue_length=队列长度
+config.deliver_timeout=推送超时
+config.skip_tls_verify=忽略 TLS 验证
+config.mailer_config=邮件配置
+config.mailer_enabled=启用服务
+config.mailer_disable_helo=禁用 HELO 操作
+config.mailer_name=发送者名称
+config.mailer_host=邮件主机地址
+config.mailer_user=发送者帐号
+config.oauth_config=社交帐号配置
+config.oauth_enabled=启用服务
+config.cache_config=Cache 配置
+config.cache_adapter=Cache 适配器
+config.cache_interval=Cache 周期
+config.cache_conn=Cache 连接字符串
+config.session_config=Session 配置
+config.session_provider=Session 提供者
+config.provider_config=提供者配置
+config.cookie_name=Cookie 名称
+config.enable_set_cookie=启用设置 Cookie
+config.gc_interval_time=GC 周期
+config.session_life_time=Session 生命周期
+config.https_only=仅限 HTTPS
+config.cookie_life_time=Cookie 生命周期
+config.picture_config=图片配置
+config.picture_service=图片服务
+config.disable_gravatar=禁用 Gravatar 头像
+config.log_config=日志配置
+config.log_mode=日志模式
+
+monitor.cron=Cron 任务
+monitor.name=任务名称
+monitor.schedule=任务安排
+monitor.next=下次执行时间
+monitor.previous=上次执行时间
+monitor.execute_times=执行次数
+monitor.process=运行中进程
+monitor.desc=进程描述
+monitor.start=开始时间
+monitor.execute_time=已执行时间
+
+notices.system_notice_list=系统提示管理
+notices.type=提示类型
+notices.type_1=仓库
+notices.desc=描述
+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>`
+create_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_2_commits=查看 2 次提交的内容对比
+
+[tool]
+ago=之前
+from_now=之后
+now=现在
+1s=1 秒%s
+1m=1 分钟%s
+1h=1 小时%s
+1d=1 天%s
+1w=1 周%s
+1mon=1 月%s
+1y=1 年%s
+seconds=%d 秒%s
+minutes=%d 分钟%s
+hours=%d 小时%s
+days=%d 天%s
+weeks=%d 周%s
+months=%d 月%s
+years=%d 年%s
+raw_seconds=秒
+raw_minutes=分钟
+
+[dropzone]
+default_message=拖曳文件到此处或单击上传
+invalid_input_type=您不能上传该类型的文件
+file_too_big=文件体积({{filesize}} MB)超过了最大允许体积({{maxFilesize}} MB)
+remove_file=移除文件
+

+ 1009 - 992
conf/locale/locale_zh-HK.ini

@@ -1,992 +1,1009 @@
-app_desc=基於 Go 語言的自助 Git 服務
-
-home=首頁
-dashboard=控制面版
-explore=探索
-help=幫助
-sign_in=登錄
-sign_out=退出
-sign_up=註冊
-register=註冊
-website=官方網站
-version=當前版本
-page=頁面
-template=模版
-language=語言選項
-create_new=Create...
-user_profile_and_more=用戶信息及更多
-signed_in_as=已登錄用戶
-
-username=用戶名
-email=郵箱
-password=密碼
-re_type=確認密碼
-captcha=驗證碼
-
-repository=倉庫
-organization=組織
-mirror=鏡像
-new_repo=創建新的倉庫
-new_migrate=遷移外部倉庫
-new_fork=新的派生倉庫
-new_org=創建新的組織
-manage_org=管理我的組織
-admin_panel=管理面版
-account_settings=帳戶設置
-settings=帳戶設置
-your_profile=個人信息
-your_settings=用戶設置
-
-news_feed=最新活動
-pull_requests=合併請求
-issues=問題管理
-
-cancel=取消
-
-[search]
-search=搜尋...
-repository=倉庫
-user=用戶
-issue=工單
-code=程式碼
-
-[install]
-install=安裝頁面
-title=首次執行安裝程序
-docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
-requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
-db_title=數據庫設置
-db_type=數據庫類型
-host=數據庫主機
-user=數據庫用戶
-password=數據庫用戶密碼
-db_name=數據庫名稱
-db_helper=如果您使用 MySQL,請使用 INNODB 引擎以及 utf8_general_ci 字符集。
-ssl_mode=SSL 模式
-path=數據庫文件路徑
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
-no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
-err_empty_admin_password=Admin password cannot be empty.
-
-general_title=應用基本設置
-app_name=應用名稱
-app_name_helper=為您的組織取個響亮而又偉大的名稱
-repo_path=倉庫根目錄
-repo_path_helper=所有 Git 遠程倉庫都將被存放於該目錄。
-run_user=執行系統用戶
-run_user_helper=該用戶必須具有對倉庫根目錄和執行 Gogs 的操作權限。
-domain=域名
-domain_helper=該設置影響 SSH 複製地址。
-ssh_port=SSH 埠
-ssh_port_helper=您的 SSH 服務正在使用此埠號,若要禁用SSH 功能請保持欄位空白。
-http_port=HTTP 端口號
-http_port_helper=應用監聽的端口號
-app_url=應用 URL
-app_url_helper=該設置影響 HTTP/HTTPS 複製地址和一些郵箱中的連結。
-
-optional_title=可選設置
-email_title=電子郵件服務設定
-smtp_host=SMTP 主機
-smtp_from=郵件來自
-smtp_from_helper=郵件來自地址,遵循 RFC 5322 標准。可以是一個單純的郵箱地址或使用 "name" <email@example.com> 的格式。
-mailer_user=發送郵箱
-mailer_password=發送郵箱密碼
-register_confirm=啟用註冊郵箱確認
-mail_notify=啟用郵件通知提醒
-server_service_title=伺服器和其他服務設置
-offline_mode=啓用離線模式
-offline_mode_popup=在部署模式下也禁用從 CDN 獲取文件,所有的資源將從本地伺服器獲取。
-disable_gravatar=禁用 Gravatar 服務
-disable_gravatar_popup=禁用 Gravatar 和自定義源,僅使用由用戶上傳或默認的頭像。
-disable_registration=禁止用戶自主註冊
-disable_registration_popup=禁止用戶自主註冊功能,只有管理員可以添加帳號。
-enable_captcha=Enable Captcha
-enable_captcha_popup=Require validate captcha for user self-registration.
-require_sign_in_view=啓用登錄訪問限制
-require_sign_in_view_popup=只有已登錄的用戶才能夠訪問頁面,否則將只能看到登錄或註冊頁面。
-admin_setting_desc=創建管理員帳號並不是必須的,因為 ID=1 的用戶將自動獲得管理員權限。
-admin_title=管理員帳號設置
-admin_name=管理員用戶名
-admin_password=管理員密碼
-confirm_password=確認密碼
-admin_email=管理員郵箱
-install_gogs=立即安裝
-test_git_failed=無法識別 'git' 命令:%v
-sqlite3_not_available=您所使用的發行版本不支持 SQLite3,請從 %s 下載官方構建版,而不是 gobuild 版本。
-invalid_db_setting=數據庫設置不正確:%v
-invalid_repo_path=倉庫根目錄設置不正確:%v
-run_user_not_match=執行系統用戶非當前用戶:%s -> %s
-save_config_failed=應用配置保存失敗:%v
-invalid_admin_setting=管理員帳戶設置不正確:%v
-install_success=您好!我們很高興您選擇使用 Gogs,祝您使用愉快,代碼從此無 BUG!
-
-[home]
-uname_holder=用戶名或郵箱
-password_holder=密碼
-switch_dashboard_context=切換控制面版用戶
-my_repos=我的倉庫
-collaborative_repos=參與協作的倉庫
-my_orgs=我的組織
-my_mirrors=我的鏡像
-view_home=訪問 %s
-
-issues.in_your_repos=屬於該用戶倉庫的
-
-[explore]
-repos=探索倉庫
-
-[auth]
-create_new_account=創建帳戶
-register_hepler_msg=已經註冊?立即登錄!
-social_register_hepler_msg=已經註冊?立即綁定!
-disable_register_prompt=對不起,註冊功能已被關閉。請聯系網站管理員。
-disable_register_mail=對不起,註冊郵箱確認功能已被關閉。
-remember_me=記住登錄
-forgot_password=忘記密碼
-forget_password=忘記密碼?
-sign_up_now=還沒帳戶?馬上註冊。
-confirmation_mail_sent_prompt=一封新的確認郵件已經被發送至 <b>%s</b>,請檢查您的收件箱並在 %d 小時內完成確認註冊操作。
-sign_in_to_account=Sign in to your account
-active_your_account=激活您的帳戶
-resent_limit_prompt=對不起,您請求發送激活郵件過於頻繁,請等待 3 分鐘後再試!
-has_unconfirmed_mail=%s 您好,您有一封發送至( <b>%s</b>) 但未被確認的郵件。如果您未收到激活郵件,或需要重新發送,請單擊下方的按鈕。
-resend_mail=單擊此處重新發送確認郵件
-email_not_associate=您輸入的郵箱地址未被關聯到任何帳號!
-send_reset_mail=單擊此處(重新)發送您的密碼重置郵件
-reset_password=重置密碼
-invalid_code=對不起,您的確認代碼已過期或已失效。
-reset_password_helper=單擊此處重置密碼
-password_too_short=密碼長度不能少於 6 位!
-
-[mail]
-activate_account=Please activate your account
-activate_email=Verify your e-mail address
-reset_password=Reset your password
-register_success=Register success, Welcome
-
-[modal]
-yes=確認操作
-no=取消操作
-modify=確認修改
-
-[form]
-UserName=用戶名
-RepoName=倉庫名稱
-Email=郵箱地址
-Password=密碼
-Retype=確認密碼
-SSHTitle=SSH 密鑰名稱
-HttpsUrl=HTTPS URL 地址
-PayloadUrl=推送地址
-TeamName=團隊名稱
-AuthName=認證名稱
-AdminEmail=管理員郵箱
-
-require_error=不能為空。
-alpha_dash_error=必須為英文字母、阿拉伯數字或橫線(-_)。
-alpha_dash_dot_error=必須為英文字母、阿拉伯數字、橫線(-_)或點。
-size_error=長度必須為 %s。
-min_size_error=長度最小為 %s 個字符。
-max_size_error=長度最大為 %s 個字符。
-email_error=不是一個有效的郵箱地址。
-url_error=不是一個有效的 URL。
-unknown_error=未知錯誤:
-captcha_incorrect=驗證碼未匹配。
-password_not_match=密碼與確認密碼未匹配。
-
-username_been_taken=用戶名已經被佔用。
-repo_name_been_taken=倉庫名稱已經被佔用。
-org_name_been_taken=組織名稱已經被佔用。
-team_name_been_taken=團隊名稱已經被佔用。
-email_been_used=郵箱地址已經被使用。
-illegal_team_name=團隊名稱包含不合法字符。
-username_password_incorrect=用戶名或密碼不正確。
-enterred_invalid_repo_name=請檢查您輸入的倉庫名稱是正確。
-enterred_invalid_owner_name=請檢查您輸入的新所有者用戶名是否正確。
-enterred_invalid_password=請檢查您輸入的密碼是否正確。
-user_not_exist=被操作的用戶不存在!
-last_org_owner=被移除用戶為最後一位管理員。請添加一位新的管理員再進行移除成員操作!
-
-invalid_ssh_key=很抱歉,我們無法驗證您輸入的 SSH 密鑰:%s
-unable_verify_ssh_key=Gogs 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
-auth_failed=授權驗證失敗:%v
-
-still_own_repo=您的帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
-still_has_org=您的帳戶仍舊是某些組織的成員,您必須先離開或刪除組織。
-org_still_own_repo=該組織仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除組織操作!
-
-still_own_user=該授權認證依舊被部分用戶使用,請先刪除該部分用戶後再試!
-
-target_branch_not_exist=目標分支不存在
-
-[user]
-change_avatar=到 gravatar.com 上修改您的頭像
-change_custom_avatar=到個人設置中修改頭像
-join_on=加入於
-repositories=倉庫列表
-activity=公開活動
-followers=關註者
-starred=已讚好
-following=關註中
-
-form.name_reserved=用戶名 '%s' 是被保留的。
-form.name_pattern_not_allowed=用戶名不允許 '%s' 的格式。
-
-[settings]
-profile=個人信息
-password=修改密碼
-ssh_keys=管理 SSH 密鑰
-social=社交帳號綁定
-applications=管理授權應用
-orgs=管理組織
-delete=刪除帳戶
-uid=用戶 ID
-
-public_profile=公開信息
-profile_desc=您的郵箱地址將會被公開,並被用於接收帳戶的所有提醒和通知。
-full_name=自定義名稱
-website=個人網站
-location=所在地區
-update_profile=更新信息
-update_profile_success=您的個人信息更新成功!
-change_username=用戶名將被修改
-change_username_prompt=This change will affect the way how links relate to your account.
-continue=繼續操作
-cancel=取消操作
-
-enable_custom_avatar=啟動自定義頭像
-enable_custom_avatar_helper=激活該選項來禁止從 Gravatar 獲取頭像
-choose_new_avatar=選擇新的頭像
-update_avatar=更新頭像設置
-uploaded_avatar_not_a_image=上傳的文件不是一張圖片!
-no_custom_avatar_available=沒有任何自定義頭像,無法激活該選項。
-update_avatar_success=您的頭像設置更新成功!
-
-change_password=修改密碼
-old_password=當前密碼
-new_password=新的密碼
-retype_new_password=Retype New Password
-password_incorrect=當前密碼不正確!
-change_password_success=密碼修改成功!您現在可以使用新的密碼登錄。
-
-emails=電子郵件地址
-manage_emails=管理電子郵件地址
-email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。
-primary=主要
-primary_email=设为主要
-delete_email=刪除
-email_deletion=E-mail Deletion
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail has been deleted successfully!
-add_new_email=添加新的電子郵件地址
-add_email=添加電子郵件
-add_email_confirmation_sent=一封待確認的電子郵件已發送到 '%s',請在%d 小時內檢查您的收件箱,並完成確認過程。
-add_email_success=新的邮箱地址添加成功。
-
-manage_ssh_keys=管理 SSH 密鑰
-add_key=增加密鑰
-ssh_desc=以下是與您帳戶所關聯的 SSH 密鑰,如果您發現有陌生的密鑰,請立即刪除它!
-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=使用相同名稱的公共密鑰已經存在!
-key_name=密鑰名稱
-key_content=密鑰內容
-add_key_success=新的 SSH 密鑰 '%s' 添加成功!
-delete_key=刪除
-ssh_key_deletion=刪除 SSH 公鑰
-ssh_key_deletion_desc=刪除該 SSH 公鑰將刪除所有與您帳戶相關的訪問權限。是否繼續?
-ssh_key_deletion_success=SSH 公鑰刪除成功!
-add_on=增加於
-last_used=上次使用在
-no_activity=沒有最近活動
-key_state_desc=該密鑰在 7 天內被使用過
-token_state_desc=此token在過去七天內曾經被使用過
-
-manage_social=管理關聯社交帳戶
-social_desc=以下是與您帳戶所關聯的社交帳號,如果您發現有陌生的關聯,請立即解除綁定!
-unbind=解除綁定
-unbind_success=社交帳號解除綁定成功!
-
-manage_access_token=管理個人操作令牌
-generate_new_token=生成新的令牌
-tokens_desc=您所產生的token將被用來存取Gogs APIs
-new_token_desc=目前為止,任何令牌都對您的帳戶擁有完整的操作權限。
-token_name=令牌名稱
-generate_token=生成令牌
-generate_token_succees=新的操作令牌生成成功!您必須立即複製到一個安全的地方,因為該令牌只會顯示一次!
-delete_token=删除令牌
-access_token_deletion=刪除個人的連接token
-access_token_deletion_desc=刪除此連接token將會刪除與相關應用程式的連結。您想要繼續嗎?
-delete_token_success=您的連接token已成功刪除。請記得更新您的應用程式。
-
-delete_account=刪除當前帳戶
-delete_prompt=刪除操作會永久清除您的帳戶信息,並且 <strong>不可恢復</strong>!
-confirm_delete_account=確認刪除帳戶
-delete_account_title=帳戶刪除操作
-delete_account_desc=該帳戶將被永久性刪除,您確定要繼續操作嗎?
-
-[repo]
-owner=擁有者
-repo_name=倉庫名稱
-repo_name_helper=偉大的倉庫名稱一般都較短、令人深刻並且 <strong>獨一無二</strong> 的。
-visibility=可見度
-visiblity_helper=該倉庫為 <span class="ui red text">私有的</span>
-visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
-visiblity_fork_helper=(修改該值將會影響到所有派生倉庫)
-fork_repo=派生倉庫
-fork_from=派生自
-fork_visiblity_helper=派生倉庫無法修改可見性。
-repo_desc=倉庫描述
-repo_lang=倉庫語言
-repo_lang_helper=Select .gitignore files
-license=授權許可
-license_helper=請選擇授權許可文件
-readme=Readme
-readme_helper=Select a readme template
-auto_init=Initialize this repository with selected files and template
-create_repo=創建倉庫
-default_branch=默認分支
-mirror_interval=鏡像同步周期(小時)
-
-form.name_reserved=倉庫名稱 '%s' 是被保留的。
-form.name_pattern_not_allowed=倉庫名稱不允許 '%s' 的格式。
-
-need_auth=需要授權驗證
-migrate_type=遷移類型
-migrate_type_helper=該倉庫將是一個 <span class="text blue">鏡像</span>
-migrate_repo=遷移倉庫
-migrate.clone_address=複製地址
-migrate.clone_address_desc=該地址可以是 HTTP/HTTPS/GIT URL 或本地服務器路徑。
-migrate.invalid_local_path=無效的本地路徑,該路徑不存在或不是一個目錄!
-
-forked_from=派生自
-fork_from_self=無法派生已經擁有的倉庫!
-copy_link=複製連結
-copy_link_success=Copied!
-copy_link_error=Press ⌘-C or Ctrl-C to copy
-click_to_copy=複製到剪切簿
-copied=複製成功
-clone_helper=不知道如何操作?訪問 <a target="_blank"href="%s"> 帮助説明</a> !
-unwatch=取消關註
-watch=關註
-unstar=取消讚好
-star=讚好
-fork=派生
-
-no_desc=暫無描述
-quick_guide=快速幫助
-clone_this_repo=複製當前倉庫
-create_new_repo_command=從命令行創建一個新的倉庫
-push_exist_repo=從命令行推送已經創建的倉庫
-repo_is_empty=This repository is empty, please come back later!
-
-
-branch=分支
-tree=目錄樹
-branch_and_tags=分支與標籤
-branches=分支列表
-tags=標籤列表
-issues=問題管理
-pulls=Pull Requests
-labels=標籤
-milestones=里程碑
-commits=提交歷史
-releases=版本發佈
-file_raw=原始文件
-file_history=文件歷史
-file_view_raw=查看原始文件
-file_permalink=永久連結
-
-commits.commits=次代碼提交
-commits.search=搜索提交歷史
-commits.find=查找
-commits.author=作者
-commits.message=備註
-commits.date=提交日期
-commits.older=更舊的提交
-commits.newer=更新的提交
-
-issues.new=創建問題
-issues.new.labels=標籤
-issues.new.no_label=未選擇標籤
-issues.new.clear_labels=清除已選取標籤
-issues.new.milestone=里程碑
-issues.new.no_milestone=未選擇里程碑
-issues.new.clear_milestone=清除已選取里程碑
-issues.new.open_milestone=開啟中的里程碑
-issues.new.closed_milestone=已關閉的里程碑
-issues.new.assignee=指派成員
-issues.new.clear_assignee=取消指派成員
-issues.new.no_assignee=未指派成員
-issues.create=創建問題
-issues.new_label=創建標籤
-issues.new_label_placeholder=標籤名稱...
-issues.create_label=創建標籤
-issues.open_tab=%d 個開啓中
-issues.close_tab=%d 個已關閉
-issues.filter_label=標籤篩選
-issues.filter_label_no_select=無篩選標籤
-issues.filter_milestone=里程碑篩選
-issues.filter_milestone_no_select=無篩選里程碑
-issues.filter_assignee=指派人篩選
-issues.filter_assginee_no_select=無篩選指派人
-issues.filter_type=類型篩選
-issues.filter_type.all_issues=所有問題
-issues.filter_type.assigned_to_you=指派給您的
-issues.filter_type.created_by_you=由您創建的
-issues.filter_type.mentioning_you=提及您的
-issues.filter_sort=排序
-issues.filter_sort.latest=最新創建
-issues.filter_sort.oldest=最早創建
-issues.filter_sort.recentupdate=最近更新
-issues.filter_sort.leastupdate=最少更新
-issues.filter_sort.mostcomment=最多評論
-issues.filter_sort.leastcomment=最少評論
-issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
-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 id="%[1]s" href="#%[1]s">%[2]s</a> 評論`
-issues.no_content=尚未有任何內容
-issues.close_issue=關閉
-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=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=發佈者
-issues.admin=管理員
-issues.owner=所有者
-issues.sign_up_for_free=免費註冊
-issues.sign_in_require_desc=及加入到對話當中。如果您已經註冊,可以直接 <a href="%s">登錄及評論</a>
-issues.edit=編輯
-issues.cancel=取消
-issues.save=保存
-issues.label_title=標籤名稱
-issues.label_color=標籤顏色
-issues.label_count=%d 個標籤
-issues.label_open_issues=%d 個開啓的問題
-issues.label_edit=編輯
-issues.label_delete=刪除
-issues.label_modify=修改標籤
-issues.label_deletion=刪除標籤
-issues.label_deletion_desc=刪除該標籤將會移除所有問題中相關的訊息。是否繼續?
-issues.label_deletion_success=標籤刪除成功!
-
-pulls.compare_changes=對比文件變化
-pulls.compare_changes_desc=對比兩個分支間的文件變化及發起一個合併請求。
-pulls.compare_base=base
-pulls.compare_compare=compare
-pulls.filter_branch=Filter branch
-pulls.no_results=未找到結果
-pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
-pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
-pulls.create=Create Pull Request
-pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
-pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
-pulls.tab_conversation=Conversation
-pulls.tab_commits=Commits
-pulls.tab_files=Files changed
-pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
-pulls.merged=Merged
-pulls.has_merged=This pull request has been merged successfully!
-pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
-pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
-pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
-pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
-pulls.merge_pull_request=Merge Pull Request
-pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
-
-milestones.new=新的里程碑
-milestones.open_tab=%d 開啟中
-milestones.close_tab=%d 已關閉
-milestones.closed=於 %s關閉
-milestones.no_due_date=暫無截止日期
-milestones.open=開啟
-milestones.close=關閉
-milestones.new_subheader=創建里程碑來更好地組織你的問題
-milestones.create=創建里程碑
-milestones.title=標題
-milestones.desc=描述
-milestones.due_date=截止日期(可選)
-milestones.clear=清除
-milestones.invalid_due_date_format=截止日期的格式錯誤,必須是 'year-mm-dd' 的形式。
-milestones.create_success=里程碑 '%s' 創建成功!
-milestones.edit=編輯里程碑
-milestones.edit_subheader=使用更加清晰的描述來幫助人們更好地理解里程碑的作用。
-milestones.cancel=取消
-milestones.modify=修改里程碑
-milestones.edit_success=里程碑 '%s' 的修改內容已經生效!
-milestones.deletion=刪除里程碑
-milestones.deletion_desc=刪除該里程碑將會移除所有問題中相關信息。是否繼續?
-milestones.deletion_success=里程碑刪除成功!
-
-settings=倉庫設置
-settings.options=基本設置
-settings.collaboration=管理協作者
-settings.hooks=管理 Web 鉤子
-settings.githooks=管理 Git 鉤子
-settings.basic_settings=基本設置
-settings.danger_zone=危險操作區
-settings.site=官方網站
-settings.update_settings=更新倉庫設置
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
-settings.transfer=轉移倉庫所有權
-settings.transfer_desc=您可以將倉庫轉移至您擁有管理員權限的帳戶或組織。
-settings.new_owner_has_same_repo=新的倉庫擁有者已經存在同名倉庫!
-settings.delete=刪除本倉庫
-settings.delete_desc=刪除倉庫操作不可逆轉,請三思而後行。
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
-settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
-settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
-settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
-settings.update_settings_success=倉庫設置更新成功!
-settings.transfer_owner=新擁有者
-settings.make_transfer=確認轉移倉庫
-settings.transfer_succeed=倉庫所有權轉移成功!
-settings.confirm_delete=確認刪除倉庫
-settings.add_collaborator=增加新的協作者
-settings.add_collaborator_success=成功添加新的協作者!
-settings.remove_collaborator_success=被操作的協作者已經被收回權限!
-settings.user_is_org_member=被操作的用戶是組織成員,因此無法添加為協作者!
-settings.add_webhook=添加 Web 鉤子
-settings.hooks_desc=Web 鉤子允許您設定在 Gogs 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
-settings.webhook_deletion=Delete Webhook
-settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
-settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Request
-settings.webhook.response=Response
-settings.webhook.headers=Headers
-settings.webhook.payload=Payload
-settings.webhook.body=Body
-settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gogs 所支持的鉤子列表。
-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" href="%s">Webhooks 指南</a>.
-settings.payload_url=推送地址
-settings.content_type=數據格式
-settings.secret=密鑰文本
-settings.slack_username=Username
-settings.slack_icon_url=Icon URL
-settings.slack_color=Color
-settings.event_desc=請設置您希望觸發 Web 鉤子的事件:
-settings.event_push_only=只推送 <code>push</code> 事件。
-settings.event_send_everything=I need <strong>everything</strong>.
-settings.event_choose=Let me choose what I need.
-settings.event_create=Create
-settings.event_create_desc=Branch, or tag created
-settings.event_push=Push
-settings.event_push_desc=Git push to a repository
-settings.active=是否激活
-settings.active_helper=當指定事件發生時我們將會觸發此 Web 鉤子。
-settings.add_hook_success=Web 鉤子添加成功!
-settings.update_webhook=更新 Web 鉤子
-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.slack_token=令牌
-settings.slack_domain=域名
-settings.slack_channel=頻道
-settings.deploy_keys=管理部署密鑰
-settings.add_deploy_key=添加部署密鑰
-settings.no_deploy_keys=您還沒有添加任何部署密鑰。
-settings.title=標題
-settings.deploy_key_content=密鑰文本
-settings.key_been_used=部署密鑰已經被使用!
-settings.key_name_used=使用相同名稱的部署密鑰已經存在!
-settings.add_key_success=新的部署密鑰 '%s' 添加成功!
-settings.deploy_key_deletion=刪除部署密鑰
-settings.deploy_key_deletion_desc=刪除該部署密鑰會移除本倉庫所有相關的操作權限。是否繼續?
-settings.deploy_key_deletion_success=刪除部署密鑰成功!
-
-diff.browse_source=瀏覽代碼
-diff.parent=父節點
-diff.commit=當前提交
-diff.data_not_available=暫無可用數據
-diff.show_diff_stats=顯示文件統計
-diff.stats_desc=共有 <strong> %d 個文件被更改</strong>,包括 <strong>%d 次插入</strong> 和 <strong>%d 次删除</strong>
-diff.bin=二進制
-diff.view_file=查看文件
-
-release.releases=版本發佈
-release.new_release=發佈新版本
-release.draft=草稿
-release.prerelease=預發佈版本
-release.stable=穩定
-release.edit=編輯
-release.ahead=在該版本發佈之後已有 <strong>%d</strong> 次代碼提交到 %s 分支
-release.source_code=源代碼
-release.tag_name=標籤名稱
-release.target=目標分支
-release.tag_helper=選擇或創建一個已存在的標籤
-release.release_title=發佈標題
-release.content_with_md=使用 <a href="%s">Markdown</a> 編輯內容
-release.write=內容編輯
-release.preview=效果預覽
-release.content_placeholder=請輸入內容
-release.loading=正在加載...
-release.prerelease_desc=這是一個預發佈版本
-release.prerelease_helper=我們會告知用戶不建議將本發佈投入生產環境使用。
-release.publish=發佈版本
-release.save_draft=保在草稿
-release.edit_release=編輯發佈信息
-release.tag_name_already_exist=已經存在使用相同標籤的發佈版本。
-
-[org]
-org_name_holder=組織名稱
-org_name_helper=偉大的組織都有一個簡短而寓意深刻的名字。
-create_org=創建組織
-repo_updated=最後更新於
-people=組織成員
-invite_someone=邀請他人加入
-teams=組織團隊
-lower_members=名成員
-lower_repositories=個倉庫
-create_new_team=創建新的團隊
-org_desc=組織描述
-team_name=團隊名稱
-team_desc=團隊描述
-team_name_helper=您可以使用該名稱來通知改組全體成員。
-team_desc_helper=一句話描述這個團隊是做什麼的。
-team_permission_desc=請選擇該團隊所具有的權限等級:
-
-form.name_reserved=組織名稱 '%s' 是被保留的。
-form.name_pattern_not_allowed=組織名稱不允許 '%s' 的格式。
-
-settings=組織設置
-settings.options=基本設置
-settings.full_name=組織全名
-settings.website=官方網站
-settings.location=所在地區
-settings.update_settings=更新組織設置
-settings.update_setting_success=組織設置更新成功!
-settings.change_orgname_prompt=This change will affect how links relate to the organization.
-settings.update_avatar_success=Organization avatar setting has been updated successfully.
-settings.delete=刪除組織
-settings.delete_account=刪除當前組織
-settings.delete_prompt=刪除操作會永久清除該組織的信息,並且 <strong>不可恢復</strong>!
-settings.confirm_delete_account=確認刪除組織
-settings.delete_org_title=組織刪除操作
-settings.delete_org_desc=該組織將被永久性刪除,您確定要繼續操作嗎?
-settings.hooks_desc=在此處添加的 Web 鉤子將會應用到該組織下的 <strong>所有倉庫</strong>。
-
-members.public=公開成員
-members.public_helper=設為私有
-members.private=私有成員
-members.private_helper=設為公開
-members.owner=管理員
-members.member=普通成員
-members.conceal=隱藏身份
-members.remove=移除成員
-members.leave=離開組織
-members.invite_desc=請輸入被邀請到組織 %s 的用戶名稱:
-members.invite_now=立即邀請
-
-teams.join=加入團隊
-teams.leave=離開團隊
-teams.read_access=讀取權限
-teams.read_access_helper=這個團隊將擁有查看和複製所屬倉庫的權限。
-teams.write_access=寫入權限
-teams.write_access_helper=這個團隊將擁有查看、複製和推送所屬倉庫的權限。
-teams.admin_access=管理權限
-teams.admin_access_helper=這個團隊將擁有查看、複製、推送和添加其他組織成員到團隊的權限。
-teams.no_desc=該團隊暫無描述
-teams.settings=團隊設置
-teams.owners_permission_desc=管理員團隊對 <strong>所有倉庫</strong> 具有操作權限,且對組織具有 <strong>管理員權限</strong>。
-teams.members=團隊成員
-teams.update_settings=更新團隊設置
-teams.delete_team=刪除當前團隊
-teams.add_team_member=添加團隊成員
-teams.delete_team_title=團隊刪除操作
-teams.delete_team_desc=刪除操作會永久清除有關該團隊的信息,您確定要繼續操作嗎?團隊成員可能會失去對某些倉庫的操作權限。
-teams.delete_team_success=指定團隊刪除成功!
-teams.read_permission_desc=該團隊擁有對所屬倉庫的 <strong>讀取</strong> 權限,團隊成員可以進行查看和複製等只讀操作。
-teams.write_permission_desc=該團隊擁有對所屬倉庫的 <strong>讀取</strong> 和 <strong>寫入</strong> 的權限。
-teams.admin_permission_desc=該團隊擁有一定的 <strong>管理</strong> 權限,團隊成員可以讀取、複製、推送以及添加其它倉庫協作者。
-teams.repositories=團隊倉庫
-teams.add_team_repository=添加團隊倉庫
-teams.remove_repo=移除倉庫
-teams.add_nonexistent_repo=您嘗試添加到團隊的倉庫不存在,請先創建倉庫!
-
-[admin]
-dashboard=控制面版
-users=用戶管理
-organizations=組織管理
-repositories=倉庫管理
-authentication=授權認證管理
-config=應用配置管理
-notices=系統提示管理
-monitor=應用監控面版
-first_page=First
-last_page=Last
-total=Total: %d
-
-dashboard.statistic=應用統計數據
-dashboard.operations=管理員操作
-dashboard.system_status=系統監視狀態
-dashboard.statistic_info=Gogs 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
-dashboard.operation_name=操作名稱
-dashboard.operation_switch=開關
-dashboard.operation_run=執行
-dashboard.clean_unbind_oauth=清理未綁定社交帳號
-dashboard.clean_unbind_oauth_success=所有未綁定社交數據清除成功!
-dashboard.delete_inactivate_accounts=刪除所有未激活帳戶
-dashboard.delete_inactivate_accounts_success=所有未激活帳號清除成功!
-dashboard.delete_repo_archives=刪除所有倉庫存檔
-dashboard.delete_repo_archives_success=所有倉庫存檔清除成功!
-dashboard.git_gc_repos=對倉庫進行垃圾回收
-dashboard.git_gc_repos_success=所有倉庫的垃圾回收已成功完成!
-dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密鑰也會被刪除)
-dashboard.resync_all_sshkeys_success=所有公鑰重新生成成功!
-dashboard.resync_all_update_hooks=重新生成所有倉庫的 Update 鈎子(用於被修改的自定義配置文件)
-dashboard.resync_all_update_hooks_success=已成功重新生成所有倉庫的 Update 鈎子!
-
-dashboard.server_uptime=服務執行時間
-dashboard.current_goroutine=當前 Goroutines 數量
-dashboard.current_memory_usage=當前內存使用量
-dashboard.total_memory_allocated=所有被分配的內存
-dashboard.memory_obtained=內存佔用量
-dashboard.pointer_lookup_times=指針查找次數
-dashboard.memory_allocate_times=內存分配次數
-dashboard.memory_free_times=內存釋放次數
-dashboard.current_heap_usage=當前 Heap 內存使用量
-dashboard.heap_memory_obtained=Heap 內存佔用量
-dashboard.heap_memory_idle=Heap 內存空閒量
-dashboard.heap_memory_in_use=正在使用的 Heap 內存
-dashboard.heap_memory_released=被釋放的 Heap 內存
-dashboard.heap_objects=Heap 對象數量
-dashboard.bootstrap_stack_usage=啟動 Stack 使用量
-dashboard.stack_memory_obtained=被分配的 Stack 內存
-dashboard.mspan_structures_usage=MSpan 結構內存使用量
-dashboard.mspan_structures_obtained=被分配的 MSpan 結構內存
-dashboard.mcache_structures_usage=MCache 結構內存使用量
-dashboard.mcache_structures_obtained=被分配的 MCache 結構內存
-dashboard.profiling_bucket_hash_table_obtained=被分配的剖析哈希表內存
-dashboard.gc_metadata_obtained=被分配的垃圾收集元數據內存
-dashboard.other_system_allocation_obtained=其它被分配的系統內存
-dashboard.next_gc_recycle=下次垃圾收集內存回收量
-dashboard.last_gc_time=距離上次垃圾收集時間
-dashboard.total_gc_time=垃圾收集執行時間總量
-dashboard.total_gc_pause=垃圾收集暫停時間總量
-dashboard.last_gc_pause=上次垃圾收集暫停時間
-dashboard.gc_times=垃圾收集執行次數
-
-users.user_manage_panel=用戶管理面版
-users.new_account=創建新的帳戶
-users.name=用戶名
-users.activated=已激活
-users.admin=管理員
-users.repos=倉庫數
-users.created=創建時間
-users.send_register_notify=Send Registration Notification To User
-users.new_success=New account '%s' has been created successfully.
-users.edit=編輯
-users.auth_source=Authentication Source
-users.local=本地
-users.auth_login_name=Authentication Login Name
-users.password_helper=Leave it empty to remain unchanged.
-users.update_profile_success=該用戶信息更新成功!
-users.edit_account=編輯用戶信息
-users.is_activated=該用戶已被激活
-users.is_admin=該用戶具有管理員權限
-users.allow_git_hook=該帳戶具有創建 Git 鉤子的權限
-users.update_profile=更新用戶信息
-users.delete_account=刪除該用戶
-users.still_own_repo=該帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
-users.still_has_org=該帳戶仍舊是某些組織的成員,您必須先使其離開或刪除組織。
-users.deletion_success=Account has been deleted successfully!
-
-orgs.org_manage_panel=組織管理面版
-orgs.name=組織名稱
-orgs.teams=團隊數
-orgs.members=成員數
-
-repos.repo_manage_panel=倉庫管理界面
-repos.owner=所有者
-repos.name=倉庫名稱
-repos.private=私有庫
-repos.watches=關註數
-repos.stars=讚好數
-repos.issues=問題數
-
-auths.auth_manage_panel=Authentication Manage Panel
-auths.new=Add New Source
-auths.name=認證名稱
-auths.type=認證類型
-auths.enabled=已啟用
-auths.updated=最後更新時間
-auths.auth_type=Authentication Type
-auths.auth_name=Authentication Name
-auths.domain=域名
-auths.host=主機地址
-auths.port=主機端口
-auths.bind_dn=綁定DN
-auths.bind_password=綁定密碼
-auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
-auths.user_base=User Search Base
-auths.user_dn=User DN
-auths.attribute_name=名子屬性
-auths.attribute_surname=姓氏屬性
-auths.attribute_mail=電子郵箱屬性
-auths.filter=使用者篩選器
-auths.admin_filter=管理者篩選器
-auths.ms_ad_sa=Ms Ad SA
-auths.smtp_auth=SMTP Authentication Type
-auths.smtphost=SMTP 主機地址
-auths.smtpport=SMTP 主機端口
-auths.allowed_domains=Allowed Domains
-auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
-auths.enable_tls=啟用 TLS 加密
-auths.skip_tls_verify=Skip TLS Verify
-auths.pam_service_name=PAM 服務名稱
-auths.enable_auto_register=允許授權用戶自動註冊
-auths.tips=幫助提示
-auths.edit=Edit Authentication Setting
-auths.activated=該授權認證已經啟用
-auths.new_success=New authentication '%s' has been added successfully.
-auths.update_success=Authentication setting has been updated successfully.
-auths.update=Update Authentication Setting
-auths.delete=Delete This Authentication
-auths.delete_auth_title=Authentication Deletion
-auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
-auths.deletion_success=Authentication has been deleted successfully!
-
-config.server_config=服務器配置
-config.app_name=應用名稱
-config.app_ver=應用版本
-config.app_url=應用 URL
-config.domain=應用域名
-config.offline_mode=離線模式
-config.disable_router_log=關閉路由日志
-config.run_user=執行用戶
-config.run_mode=執行模式
-config.repo_root_path=倉庫根目錄
-config.static_file_root_path=靜態文件根目錄
-config.log_file_root_path=日志文件根目錄
-config.script_type=腳本類型
-config.reverse_auth_user=反向代理認證
-config.db_config=數據庫配置
-config.db_type=數據庫類型
-config.db_host=主機地址
-config.db_name=數據庫名稱
-config.db_user=數據庫用戶
-config.db_ssl_mode=SSL 模式
-config.db_ssl_mode_helper=(僅限 "postgres" 使用)
-config.db_path=數據庫路徑
-config.db_path_helper=(for "sqlite3" and "tidb")
-config.service_config=服務配置
-config.register_email_confirm=註冊電子郵件確認
-config.disable_register=關閉註冊功能
-config.show_registration_button=顯示註冊按鈕
-config.require_sign_in_view=強制登錄瀏覽
-config.enable_cache_avatar=開啟緩存頭像
-config.mail_notify=郵件通知提醒
-config.disable_key_size_check=Disable Minimum Key Size Check
-config.enable_captcha=Enable Captcha
-config.active_code_lives=激活用戶連結有效期
-config.reset_password_code_lives=重置密碼連結有效期
-config.webhook_config=Web 鉤子配置
-config.queue_length=隊列長度
-config.deliver_timeout=推送超時
-config.skip_tls_verify=忽略 TLS 驗證
-config.mailer_config=郵件配置
-config.mailer_enabled=啟用服務
-config.mailer_disable_helo=禁用 HELO 操作
-config.mailer_name=發送者名稱
-config.mailer_host=郵件主機地址
-config.mailer_user=發送者帳號
-config.oauth_config=社交帳號配置
-config.oauth_enabled=啟用服務
-config.cache_config=Cache 配置
-config.cache_adapter=Cache 適配器
-config.cache_interval=Cache 周期
-config.cache_conn=Cache 連接字符串
-config.session_config=Session 配置
-config.session_provider=Session 提供者
-config.provider_config=提供者配置
-config.cookie_name=Cookie 名稱
-config.enable_set_cookie=啟用設置 Cookie
-config.gc_interval_time=垃圾收集周期
-config.session_life_time=Session 生命周期
-config.https_only=僅限 HTTPS
-config.cookie_life_time=Cookie 生命周期
-config.picture_config=圖片配置
-config.picture_service=圖片服務
-config.disable_gravatar=禁用 Gravatar 頭像
-config.log_config=日誌配置
-config.log_mode=日誌模式
-
-monitor.cron=Cron 任務
-monitor.name=任務名稱
-monitor.schedule=任務安排
-monitor.next=下次執行時間
-monitor.previous=上次執行時間
-monitor.execute_times=執行次數
-monitor.process=執行中進程
-monitor.desc=進程描述
-monitor.start=開始時間
-monitor.execute_time=已執行時間
-
-notices.system_notice_list=系統提示管理
-notices.type=提示類型
-notices.type_1=倉庫
-notices.desc=描述
-notices.op=操作
-notices.delete_success=系統提示刪除成功!
-
-[action]
-create_repo=創建了倉庫 <a href="%s">%s</a>
-rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
-commit_repo=推送了 <a href="%s/src/%s">%[2]s</a> 分支的代碼到 <a href="%[1]s">%[3]s</a>
-create_issue=`創建了問題 <a href="%s/issues/%s">%s#%[2]s</a>`
-create_pull_request=`created 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=`merged 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_2_commits=查看 2 次提交的內容對比
-
-[tool]
-ago=之前
-from_now=之後
-now=現在
-1s=1 秒%s
-1m=1 分鐘%s
-1h=1 小時%s
-1d=1 天%s
-1w=1 周%s
-1mon=1 月%s
-1y=1 年%s
-seconds=%d 秒%s
-minutes=%d 分鐘%s
-hours=%d 小時%s
-days=%d 天%s
-weeks=%d 周%s
-months=%d 月%s
-years=%d 年%s
-raw_seconds=秒
-raw_minutes=分鐘
-
-[dropzone]
-default_message=拖曳文件到此處或單擊上傳
-invalid_input_type=您不能上傳該類型的文件
-file_too_big=文件大小({{filesize}} MB)超過了最大允許大小({{maxFilesize}} MB)
-remove_file=移除文件
-
+app_desc=基於 Go 語言的自助 Git 服務
+
+home=首頁
+dashboard=控制面版
+explore=探索
+help=幫助
+sign_in=登錄
+sign_out=退出
+sign_up=註冊
+register=註冊
+website=官方網站
+version=當前版本
+page=頁面
+template=模版
+language=語言選項
+create_new=創建...
+user_profile_and_more=用戶信息及更多
+signed_in_as=已登錄用戶
+
+username=用戶名
+email=郵箱
+password=密碼
+re_type=確認密碼
+captcha=驗證碼
+
+repository=倉庫
+organization=組織
+mirror=鏡像
+new_repo=創建新的倉庫
+new_migrate=遷移外部倉庫
+new_fork=新的派生倉庫
+new_org=創建新的組織
+manage_org=管理我的組織
+admin_panel=管理面版
+account_settings=帳戶設置
+settings=帳戶設置
+your_profile=個人信息
+your_settings=用戶設置
+
+news_feed=最新活動
+pull_requests=合併請求
+issues=問題管理
+
+cancel=取消
+
+[search]
+search=搜尋...
+repository=倉庫
+user=用戶
+issue=工單
+code=程式碼
+
+[install]
+install=安裝頁面
+title=首次執行安裝程序
+docker_helper=If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
+requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
+db_title=數據庫設置
+db_type=數據庫類型
+host=數據庫主機
+user=數據庫用戶
+password=數據庫用戶密碼
+db_name=數據庫名稱
+db_helper=如果您使用 MySQL,請使用 INNODB 引擎以及 utf8_general_ci 字符集。
+ssl_mode=SSL 模式
+path=數據庫文件路徑
+sqlite_helper=The file path of SQLite3 or TiDB database.
+err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
+err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
+no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
+err_empty_admin_password=Admin password cannot be empty.
+
+general_title=應用基本設置
+app_name=應用名稱
+app_name_helper=為您的組織取個響亮而又偉大的名稱
+repo_path=倉庫根目錄
+repo_path_helper=所有 Git 遠程倉庫都將被存放於該目錄。
+run_user=執行系統用戶
+run_user_helper=該用戶必須具有對倉庫根目錄和執行 Gogs 的操作權限。
+domain=域名
+domain_helper=該設置影響 SSH 複製地址。
+ssh_port=SSH 埠
+ssh_port_helper=您的 SSH 服務正在使用此埠號,若要禁用SSH 功能請保持欄位空白。
+http_port=HTTP 端口號
+http_port_helper=應用監聽的端口號
+app_url=應用 URL
+app_url_helper=該設置影響 HTTP/HTTPS 複製地址和一些郵箱中的連結。
+
+optional_title=可選設置
+email_title=電子郵件服務設定
+smtp_host=SMTP 主機
+smtp_from=郵件來自
+smtp_from_helper=郵件來自地址,遵循 RFC 5322 標准。可以是一個單純的郵箱地址或使用 "name" <email@example.com> 的格式。
+mailer_user=發送郵箱
+mailer_password=發送郵箱密碼
+register_confirm=啟用註冊郵箱確認
+mail_notify=啟用郵件通知提醒
+server_service_title=伺服器和其他服務設置
+offline_mode=啓用離線模式
+offline_mode_popup=在部署模式下也禁用從 CDN 獲取文件,所有的資源將從本地伺服器獲取。
+disable_gravatar=禁用 Gravatar 服務
+disable_gravatar_popup=禁用 Gravatar 和自定義源,僅使用由用戶上傳或默認的頭像。
+disable_registration=禁止用戶自主註冊
+disable_registration_popup=禁止用戶自主註冊功能,只有管理員可以添加帳號。
+enable_captcha=Enable Captcha
+enable_captcha_popup=Require validate captcha for user self-registration.
+require_sign_in_view=啓用登錄訪問限制
+require_sign_in_view_popup=只有已登錄的用戶才能夠訪問頁面,否則將只能看到登錄或註冊頁面。
+admin_setting_desc=創建管理員帳號並不是必須的,因為 ID=1 的用戶將自動獲得管理員權限。
+admin_title=管理員帳號設置
+admin_name=管理員用戶名
+admin_password=管理員密碼
+confirm_password=確認密碼
+admin_email=Admin E-mail
+install_gogs=立即安裝
+test_git_failed=無法識別 'git' 命令:%v
+sqlite3_not_available=您所使用的發行版本不支持 SQLite3,請從 %s 下載官方構建版,而不是 gobuild 版本。
+invalid_db_setting=數據庫設置不正確:%v
+invalid_repo_path=倉庫根目錄設置不正確:%v
+run_user_not_match=執行系統用戶非當前用戶:%s -> %s
+save_config_failed=應用配置保存失敗:%v
+invalid_admin_setting=管理員帳戶設置不正確:%v
+install_success=您好!我們很高興您選擇使用 Gogs,祝您使用愉快,代碼從此無 BUG!
+
+[home]
+uname_holder=用戶名或郵箱
+password_holder=密碼
+switch_dashboard_context=切換控制面版用戶
+my_repos=我的倉庫
+collaborative_repos=參與協作的倉庫
+my_orgs=我的組織
+my_mirrors=我的鏡像
+view_home=訪問 %s
+
+issues.in_your_repos=屬於該用戶倉庫的
+
+[explore]
+repos=探索倉庫
+
+[auth]
+create_new_account=創建帳戶
+register_hepler_msg=已經註冊?立即登錄!
+social_register_hepler_msg=已經註冊?立即綁定!
+disable_register_prompt=對不起,註冊功能已被關閉。請聯系網站管理員。
+disable_register_mail=對不起,註冊郵箱確認功能已被關閉。
+remember_me=記住登錄
+forgot_password=忘記密碼
+forget_password=忘記密碼?
+sign_up_now=還沒帳戶?馬上註冊。
+confirmation_mail_sent_prompt=一封新的確認郵件已經被發送至 <b>%s</b>,請檢查您的收件箱並在 %d 小時內完成確認註冊操作。
+active_your_account=激活您的帳戶
+resent_limit_prompt=對不起,您請求發送激活郵件過於頻繁,請等待 3 分鐘後再試!
+has_unconfirmed_mail=%s 您好,您有一封發送至( <b>%s</b>) 但未被確認的郵件。如果您未收到激活郵件,或需要重新發送,請單擊下方的按鈕。
+resend_mail=單擊此處重新發送確認郵件
+email_not_associate=您輸入的郵箱地址未被關聯到任何帳號!
+send_reset_mail=單擊此處(重新)發送您的密碼重置郵件
+reset_password=重置密碼
+invalid_code=對不起,您的確認代碼已過期或已失效。
+reset_password_helper=單擊此處重置密碼
+password_too_short=密碼長度不能少於 6 位!
+
+[mail]
+activate_account=Please activate your account
+activate_email=Verify your e-mail address
+reset_password=Reset your password
+register_success=Register success, Welcome
+register_notify=Welcome on board
+
+[modal]
+yes=確認操作
+no=取消操作
+modify=確認修改
+
+[form]
+UserName=用戶名
+RepoName=倉庫名稱
+Email=郵箱地址
+Password=密碼
+Retype=確認密碼
+SSHTitle=SSH 密鑰名稱
+HttpsUrl=HTTPS URL 地址
+PayloadUrl=推送地址
+TeamName=團隊名稱
+AuthName=認證名稱
+AdminEmail=管理員郵箱
+
+require_error=不能為空。
+alpha_dash_error=必須為英文字母、阿拉伯數字或橫線(-_)。
+alpha_dash_dot_error=必須為英文字母、阿拉伯數字、橫線(-_)或點。
+size_error=長度必須為 %s。
+min_size_error=長度最小為 %s 個字符。
+max_size_error=長度最大為 %s 個字符。
+email_error=不是一個有效的郵箱地址。
+url_error=不是一個有效的 URL。
+include_error=` must contain substring '%s'.`
+unknown_error=未知錯誤:
+captcha_incorrect=驗證碼未匹配。
+password_not_match=密碼與確認密碼未匹配。
+
+username_been_taken=用戶名已經被佔用。
+repo_name_been_taken=倉庫名稱已經被佔用。
+org_name_been_taken=組織名稱已經被佔用。
+team_name_been_taken=團隊名稱已經被佔用。
+email_been_used=郵箱地址已經被使用。
+illegal_team_name=團隊名稱包含不合法字符。
+username_password_incorrect=用戶名或密碼不正確。
+enterred_invalid_repo_name=請檢查您輸入的倉庫名稱是正確。
+enterred_invalid_owner_name=請檢查您輸入的新所有者用戶名是否正確。
+enterred_invalid_password=請檢查您輸入的密碼是否正確。
+user_not_exist=被操作的用戶不存在!
+last_org_owner=被移除用戶為最後一位管理員。請添加一位新的管理員再進行移除成員操作!
+
+invalid_ssh_key=很抱歉,我們無法驗證您輸入的 SSH 密鑰:%s
+unable_verify_ssh_key=Gogs 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
+auth_failed=授權驗證失敗:%v
+
+still_own_repo=您的帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
+still_has_org=您的帳戶仍舊是某些組織的成員,您必須先離開或刪除組織。
+org_still_own_repo=該組織仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除組織操作!
+
+still_own_user=該授權認證依舊被部分用戶使用,請先刪除該部分用戶後再試!
+
+target_branch_not_exist=目標分支不存在
+
+[user]
+change_avatar=到 gravatar.com 上修改您的頭像
+change_custom_avatar=到個人設置中修改頭像
+join_on=加入於
+repositories=倉庫列表
+activity=公開活動
+followers=關註者
+starred=已讚好
+following=關註中
+
+form.name_reserved=用戶名 '%s' 是被保留的。
+form.name_pattern_not_allowed=用戶名不允許 '%s' 的格式。
+
+[settings]
+profile=個人信息
+password=修改密碼
+ssh_keys=管理 SSH 密鑰
+social=社交帳號綁定
+applications=管理授權應用
+orgs=管理組織
+delete=刪除帳戶
+uid=用戶 ID
+
+public_profile=公開信息
+profile_desc=您的郵箱地址將會被公開,並被用於接收帳戶的所有提醒和通知。
+full_name=自定義名稱
+website=個人網站
+location=所在地區
+update_profile=更新信息
+update_profile_success=您的個人信息更新成功!
+change_username=用戶名將被修改
+change_username_prompt=This change will affect the way how links relate to your account.
+continue=繼續操作
+cancel=取消操作
+
+enable_custom_avatar=啟動自定義頭像
+enable_custom_avatar_helper=激活該選項來禁止從 Gravatar 獲取頭像
+choose_new_avatar=選擇新的頭像
+update_avatar=更新頭像設置
+uploaded_avatar_not_a_image=上傳的文件不是一張圖片!
+no_custom_avatar_available=沒有任何自定義頭像,無法激活該選項。
+update_avatar_success=您的頭像設置更新成功!
+
+change_password=修改密碼
+old_password=當前密碼
+new_password=新的密碼
+retype_new_password=Retype New Password
+password_incorrect=當前密碼不正確!
+change_password_success=密碼修改成功!您現在可以使用新的密碼登錄。
+
+emails=電子郵件地址
+manage_emails=管理電子郵件地址
+email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。
+primary=主要
+primary_email=设为主要
+delete_email=刪除
+email_deletion=E-mail Deletion
+email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
+email_deletion_success=E-mail has been deleted successfully!
+add_new_email=添加新的電子郵件地址
+add_email=添加電子郵件
+add_email_confirmation_sent=一封待確認的電子郵件已發送到 '%s',請在%d 小時內檢查您的收件箱,並完成確認過程。
+add_email_success=新的邮箱地址添加成功。
+
+manage_ssh_keys=管理 SSH 密鑰
+add_key=增加密鑰
+ssh_desc=以下是與您帳戶所關聯的 SSH 密鑰,如果您發現有陌生的密鑰,請立即刪除它!
+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=使用相同名稱的公共密鑰已經存在!
+key_name=密鑰名稱
+key_content=密鑰內容
+add_key_success=新的 SSH 密鑰 '%s' 添加成功!
+delete_key=刪除
+ssh_key_deletion=刪除 SSH 公鑰
+ssh_key_deletion_desc=刪除該 SSH 公鑰將刪除所有與您帳戶相關的訪問權限。是否繼續?
+ssh_key_deletion_success=SSH 公鑰刪除成功!
+add_on=增加於
+last_used=上次使用在
+no_activity=沒有最近活動
+key_state_desc=該密鑰在 7 天內被使用過
+token_state_desc=此token在過去七天內曾經被使用過
+
+manage_social=管理關聯社交帳戶
+social_desc=以下是與您帳戶所關聯的社交帳號,如果您發現有陌生的關聯,請立即解除綁定!
+unbind=解除綁定
+unbind_success=社交帳號解除綁定成功!
+
+manage_access_token=管理個人操作令牌
+generate_new_token=生成新的令牌
+tokens_desc=您所產生的token將被用來存取Gogs APIs
+new_token_desc=目前為止,任何令牌都對您的帳戶擁有完整的操作權限。
+token_name=令牌名稱
+generate_token=生成令牌
+generate_token_succees=新的操作令牌生成成功!您必須立即複製到一個安全的地方,因為該令牌只會顯示一次!
+delete_token=删除令牌
+access_token_deletion=刪除個人的連接token
+access_token_deletion_desc=刪除此連接token將會刪除與相關應用程式的連結。您想要繼續嗎?
+delete_token_success=您的連接token已成功刪除。請記得更新您的應用程式。
+
+delete_account=刪除當前帳戶
+delete_prompt=刪除操作會永久清除您的帳戶信息,並且 <strong>不可恢復</strong>!
+confirm_delete_account=確認刪除帳戶
+delete_account_title=帳戶刪除操作
+delete_account_desc=該帳戶將被永久性刪除,您確定要繼續操作嗎?
+
+[repo]
+owner=擁有者
+repo_name=倉庫名稱
+repo_name_helper=偉大的倉庫名稱一般都較短、令人深刻並且 <strong>獨一無二</strong> 的。
+visibility=可見度
+visiblity_helper=該倉庫為 <span class="ui red text">私有的</span>
+visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
+visiblity_fork_helper=(修改該值將會影響到所有派生倉庫)
+clone_helper=不知道如何操作?訪問 <a target="_blank"href="%s"> 帮助説明</a> !
+fork_repo=派生倉庫
+fork_from=派生自
+fork_visiblity_helper=派生倉庫無法修改可見性。
+repo_desc=倉庫描述
+repo_lang=倉庫語言
+repo_lang_helper=Select .gitignore files
+license=授權許可
+license_helper=請選擇授權許可文件
+readme=Readme
+readme_helper=Select a readme template
+auto_init=Initialize this repository with selected files and template
+create_repo=創建倉庫
+default_branch=默認分支
+mirror_interval=鏡像同步周期(小時)
+watchers=Watchers
+stargazers=Stargazers
+forks=Forks
+
+form.name_reserved=倉庫名稱 '%s' 是被保留的。
+form.name_pattern_not_allowed=倉庫名稱不允許 '%s' 的格式。
+
+need_auth=需要授權驗證
+migrate_type=遷移類型
+migrate_type_helper=該倉庫將是一個 <span class="text blue">鏡像</span>
+migrate_repo=遷移倉庫
+migrate.clone_address=複製地址
+migrate.clone_address_desc=該地址可以是 HTTP/HTTPS/GIT URL 或本地服務器路徑。
+migrate.permission_denied=You are not allowed to import local repositories.
+migrate.invalid_local_path=無效的本地路徑,該路徑不存在或不是一個目錄!
+migrate.failed=Migration failed: %v
+
+forked_from=派生自
+fork_from_self=無法派生已經擁有的倉庫!
+copy_link=複製連結
+copy_link_success=Copied!
+copy_link_error=Press ⌘-C or Ctrl-C to copy
+copied=複製成功
+unwatch=取消關註
+watch=關註
+unstar=取消讚好
+star=讚好
+fork=派生
+
+no_desc=暫無描述
+quick_guide=快速幫助
+clone_this_repo=複製當前倉庫
+create_new_repo_command=從命令行創建一個新的倉庫
+push_exist_repo=從命令行推送已經創建的倉庫
+repo_is_empty=This repository is empty, please come back later!
+
+branch=分支
+tree=目錄樹
+filter_branch_and_tag=Filter branch or tag
+branches=分支列表
+tags=標籤列表
+issues=問題管理
+pulls=Pull Requests
+labels=標籤
+milestones=里程碑
+commits=提交歷史
+releases=版本發佈
+file_raw=原始文件
+file_history=文件歷史
+file_view_raw=查看原始文件
+file_permalink=永久連結
+
+commits.commits=次代碼提交
+commits.search=搜索提交歷史
+commits.find=查找
+commits.author=作者
+commits.message=備註
+commits.date=提交日期
+commits.older=更舊的提交
+commits.newer=更新的提交
+
+issues.new=創建問題
+issues.new.labels=標籤
+issues.new.no_label=未選擇標籤
+issues.new.clear_labels=清除已選取標籤
+issues.new.milestone=里程碑
+issues.new.no_milestone=未選擇里程碑
+issues.new.clear_milestone=清除已選取里程碑
+issues.new.open_milestone=開啟中的里程碑
+issues.new.closed_milestone=已關閉的里程碑
+issues.new.assignee=指派成員
+issues.new.clear_assignee=取消指派成員
+issues.new.no_assignee=未指派成員
+issues.create=創建問題
+issues.new_label=創建標籤
+issues.new_label_placeholder=標籤名稱...
+issues.create_label=創建標籤
+issues.open_tab=%d 個開啓中
+issues.close_tab=%d 個已關閉
+issues.filter_label=標籤篩選
+issues.filter_label_no_select=無篩選標籤
+issues.filter_milestone=里程碑篩選
+issues.filter_milestone_no_select=無篩選里程碑
+issues.filter_assignee=指派人篩選
+issues.filter_assginee_no_select=無篩選指派人
+issues.filter_type=類型篩選
+issues.filter_type.all_issues=所有問題
+issues.filter_type.assigned_to_you=指派給您的
+issues.filter_type.created_by_you=由您創建的
+issues.filter_type.mentioning_you=提及您的
+issues.filter_sort=排序
+issues.filter_sort.latest=最新創建
+issues.filter_sort.oldest=最早創建
+issues.filter_sort.recentupdate=最近更新
+issues.filter_sort.leastupdate=最少更新
+issues.filter_sort.mostcomment=最多評論
+issues.filter_sort.leastcomment=最少評論
+issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
+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 id="%[1]s" href="#%[1]s">%[2]s</a> 評論`
+issues.no_content=尚未有任何內容
+issues.close_issue=關閉
+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=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.poster=發佈者
+issues.admin=管理員
+issues.owner=所有者
+issues.sign_up_for_free=免費註冊
+issues.sign_in_require_desc=及加入到對話當中。如果您已經註冊,可以直接 <a href="%s">登錄及評論</a>
+issues.edit=編輯
+issues.cancel=取消
+issues.save=保存
+issues.label_title=標籤名稱
+issues.label_color=標籤顏色
+issues.label_count=%d 個標籤
+issues.label_open_issues=%d 個開啓的問題
+issues.label_edit=編輯
+issues.label_delete=刪除
+issues.label_modify=修改標籤
+issues.label_deletion=刪除標籤
+issues.label_deletion_desc=刪除該標籤將會移除所有問題中相關的訊息。是否繼續?
+issues.label_deletion_success=標籤刪除成功!
+
+pulls.new=New Pull Request
+pulls.compare_changes=對比文件變化
+pulls.compare_changes_desc=對比兩個分支間的文件變化及發起一個合併請求。
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
+pulls.no_results=未找到結果
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
+pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
+
+milestones.new=新的里程碑
+milestones.open_tab=%d 開啟中
+milestones.close_tab=%d 已關閉
+milestones.closed=於 %s關閉
+milestones.no_due_date=暫無截止日期
+milestones.open=開啟
+milestones.close=關閉
+milestones.new_subheader=創建里程碑來更好地組織你的問題
+milestones.create=創建里程碑
+milestones.title=標題
+milestones.desc=描述
+milestones.due_date=截止日期(可選)
+milestones.clear=清除
+milestones.invalid_due_date_format=截止日期的格式錯誤,必須是 'yyyy-mm-dd' 的形式。
+milestones.create_success=里程碑 '%s' 創建成功!
+milestones.edit=編輯里程碑
+milestones.edit_subheader=使用更加清晰的描述來幫助人們更好地理解里程碑的作用。
+milestones.cancel=取消
+milestones.modify=修改里程碑
+milestones.edit_success=里程碑 '%s' 的修改內容已經生效!
+milestones.deletion=刪除里程碑
+milestones.deletion_desc=刪除該里程碑將會移除所有問題中相關信息。是否繼續?
+milestones.deletion_success=里程碑刪除成功!
+
+settings=倉庫設置
+settings.options=基本設置
+settings.collaboration=管理協作者
+settings.hooks=管理 Web 鉤子
+settings.githooks=管理 Git 鉤子
+settings.basic_settings=基本設置
+settings.danger_zone=危險操作區
+settings.site=官方網站
+settings.update_settings=更新倉庫設置
+settings.change_reponame_prompt=This change will affect how links relate to the repository.
+settings.transfer=轉移倉庫所有權
+settings.transfer_desc=您可以將倉庫轉移至您擁有管理員權限的帳戶或組織。
+settings.new_owner_has_same_repo=新的倉庫擁有者已經存在同名倉庫!
+settings.delete=刪除本倉庫
+settings.delete_desc=刪除倉庫操作不可逆轉,請三思而後行。
+settings.transfer_notices_1=- You will lose access if new owner is a individual user.
+settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
+settings.transfer_form_title=Please enter following information to confirm your operation:
+settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
+settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
+settings.update_settings_success=倉庫設置更新成功!
+settings.transfer_owner=新擁有者
+settings.make_transfer=確認轉移倉庫
+settings.transfer_succeed=倉庫所有權轉移成功!
+settings.confirm_delete=確認刪除倉庫
+settings.add_collaborator=增加新的協作者
+settings.add_collaborator_success=成功添加新的協作者!
+settings.remove_collaborator_success=被操作的協作者已經被收回權限!
+settings.search_user_placeholder=Search user...
+settings.user_is_org_member=被操作的用戶是組織成員,因此無法添加為協作者!
+settings.add_webhook=添加 Web 鉤子
+settings.hooks_desc=Web 鉤子允許您設定在 Gogs 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
+settings.webhook_deletion=Delete Webhook
+settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
+settings.webhook_deletion_success=Webhook has been deleted successfully!
+settings.webhook.request=Request
+settings.webhook.response=Response
+settings.webhook.headers=Headers
+settings.webhook.payload=Payload
+settings.webhook.body=Body
+settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gogs 所支持的鉤子列表。
+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" href="%s">Webhooks 指南</a>.
+settings.payload_url=推送地址
+settings.content_type=數據格式
+settings.secret=密鑰文本
+settings.slack_username=Username
+settings.slack_icon_url=Icon URL
+settings.slack_color=Color
+settings.event_desc=請設置您希望觸發 Web 鉤子的事件:
+settings.event_push_only=只推送 <code>push</code> 事件。
+settings.event_send_everything=I need <strong>everything</strong>.
+settings.event_choose=Let me choose what I need.
+settings.event_create=Create
+settings.event_create_desc=Branch, or tag created
+settings.event_push=Push
+settings.event_push_desc=Git push to a repository
+settings.active=是否激活
+settings.active_helper=當指定事件發生時我們將會觸發此 Web 鉤子。
+settings.add_hook_success=Web 鉤子添加成功!
+settings.update_webhook=更新 Web 鉤子
+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.slack_token=令牌
+settings.slack_domain=域名
+settings.slack_channel=頻道
+settings.deploy_keys=管理部署密鑰
+settings.add_deploy_key=添加部署密鑰
+settings.no_deploy_keys=您還沒有添加任何部署密鑰。
+settings.title=標題
+settings.deploy_key_content=密鑰文本
+settings.key_been_used=部署密鑰已經被使用!
+settings.key_name_used=使用相同名稱的部署密鑰已經存在!
+settings.add_key_success=新的部署密鑰 '%s' 添加成功!
+settings.deploy_key_deletion=刪除部署密鑰
+settings.deploy_key_deletion_desc=刪除該部署密鑰會移除本倉庫所有相關的操作權限。是否繼續?
+settings.deploy_key_deletion_success=刪除部署密鑰成功!
+
+diff.browse_source=瀏覽代碼
+diff.parent=父節點
+diff.commit=當前提交
+diff.data_not_available=暫無可用數據
+diff.show_diff_stats=顯示文件統計
+diff.stats_desc=共有 <strong> %d 個文件被更改</strong>,包括 <strong>%d 次插入</strong> 和 <strong>%d 次删除</strong>
+diff.bin=二進制
+diff.view_file=查看文件
+
+release.releases=版本發佈
+release.new_release=發佈新版本
+release.draft=草稿
+release.prerelease=預發佈版本
+release.stable=穩定
+release.edit=編輯
+release.ahead=在該版本發佈之後已有 <strong>%d</strong> 次代碼提交到 %s 分支
+release.source_code=源代碼
+release.new_subheader=Publish releases to iterate product.
+release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.tag_name=標籤名稱
+release.target=目標分支
+release.tag_helper=選擇或創建一個已存在的標籤
+release.title=Title
+release.content=Content
+release.write=內容編輯
+release.preview=效果預覽
+release.loading=正在加載...
+release.prerelease_desc=這是一個預發佈版本
+release.prerelease_helper=我們會告知用戶不建議將本發佈投入生產環境使用。
+release.cancel=Cancel
+release.publish=發佈版本
+release.save_draft=保在草稿
+release.edit_release=編輯發佈信息
+release.delete_release=Delete This Release
+release.deletion=Release Deletion
+release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
+release.deletion_success=Release has been deleted successfully!
+release.tag_name_already_exist=已經存在使用相同標籤的發佈版本。
+release.downloads=Downloads
+
+[org]
+org_name_holder=組織名稱
+org_full_name_holder=Organization Full Name
+org_name_helper=偉大的組織都有一個簡短而寓意深刻的名字。
+create_org=創建組織
+repo_updated=最後更新於
+people=組織成員
+invite_someone=邀請他人加入
+teams=組織團隊
+lower_members=名成員
+lower_repositories=個倉庫
+create_new_team=創建新的團隊
+org_desc=組織描述
+team_name=團隊名稱
+team_desc=團隊描述
+team_name_helper=您可以使用該名稱來通知改組全體成員。
+team_desc_helper=一句話描述這個團隊是做什麼的。
+team_permission_desc=請選擇該團隊所具有的權限等級:
+
+form.name_reserved=組織名稱 '%s' 是被保留的。
+form.name_pattern_not_allowed=組織名稱不允許 '%s' 的格式。
+
+settings=組織設置
+settings.options=基本設置
+settings.full_name=組織全名
+settings.website=官方網站
+settings.location=所在地區
+settings.update_settings=更新組織設置
+settings.update_setting_success=組織設置更新成功!
+settings.change_orgname_prompt=This change will affect how links relate to the organization.
+settings.update_avatar_success=Organization avatar setting has been updated successfully.
+settings.delete=刪除組織
+settings.delete_account=刪除當前組織
+settings.delete_prompt=刪除操作會永久清除該組織的信息,並且 <strong>不可恢復</strong>!
+settings.confirm_delete_account=確認刪除組織
+settings.delete_org_title=組織刪除操作
+settings.delete_org_desc=該組織將被永久性刪除,您確定要繼續操作嗎?
+settings.hooks_desc=在此處添加的 Web 鉤子將會應用到該組織下的 <strong>所有倉庫</strong>。
+
+members.public=公開成員
+members.public_helper=設為私有
+members.private=私有成員
+members.private_helper=設為公開
+members.owner=管理員
+members.member=普通成員
+members.conceal=隱藏身份
+members.remove=移除成員
+members.leave=離開組織
+members.invite_desc=請輸入被邀請到組織 %s 的用戶名稱:
+members.invite_now=立即邀請
+
+teams.join=加入團隊
+teams.leave=離開團隊
+teams.read_access=讀取權限
+teams.read_access_helper=這個團隊將擁有查看和複製所屬倉庫的權限。
+teams.write_access=寫入權限
+teams.write_access_helper=這個團隊將擁有查看、複製和推送所屬倉庫的權限。
+teams.admin_access=管理權限
+teams.admin_access_helper=這個團隊將擁有查看、複製、推送和添加其他組織成員到團隊的權限。
+teams.no_desc=該團隊暫無描述
+teams.settings=團隊設置
+teams.owners_permission_desc=管理員團隊對 <strong>所有倉庫</strong> 具有操作權限,且對組織具有 <strong>管理員權限</strong>。
+teams.members=團隊成員
+teams.update_settings=更新團隊設置
+teams.delete_team=刪除當前團隊
+teams.add_team_member=添加團隊成員
+teams.delete_team_title=團隊刪除操作
+teams.delete_team_desc=刪除操作會永久清除有關該團隊的信息,您確定要繼續操作嗎?團隊成員可能會失去對某些倉庫的操作權限。
+teams.delete_team_success=指定團隊刪除成功!
+teams.read_permission_desc=該團隊擁有對所屬倉庫的 <strong>讀取</strong> 權限,團隊成員可以進行查看和複製等只讀操作。
+teams.write_permission_desc=該團隊擁有對所屬倉庫的 <strong>讀取</strong> 和 <strong>寫入</strong> 的權限。
+teams.admin_permission_desc=該團隊擁有一定的 <strong>管理</strong> 權限,團隊成員可以讀取、複製、推送以及添加其它倉庫協作者。
+teams.repositories=團隊倉庫
+teams.add_team_repository=添加團隊倉庫
+teams.remove_repo=移除倉庫
+teams.add_nonexistent_repo=您嘗試添加到團隊的倉庫不存在,請先創建倉庫!
+
+[admin]
+dashboard=控制面版
+users=用戶管理
+organizations=組織管理
+repositories=倉庫管理
+authentication=授權認證管理
+config=應用配置管理
+notices=系統提示管理
+monitor=應用監控面版
+first_page=First
+last_page=Last
+total=Total: %d
+
+dashboard.statistic=應用統計數據
+dashboard.operations=管理員操作
+dashboard.system_status=系統監視狀態
+dashboard.statistic_info=Gogs 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
+dashboard.operation_name=操作名稱
+dashboard.operation_switch=開關
+dashboard.operation_run=執行
+dashboard.clean_unbind_oauth=清理未綁定社交帳號
+dashboard.clean_unbind_oauth_success=所有未綁定社交數據清除成功!
+dashboard.delete_inactivate_accounts=刪除所有未激活帳戶
+dashboard.delete_inactivate_accounts_success=所有未激活帳號清除成功!
+dashboard.delete_repo_archives=刪除所有倉庫存檔
+dashboard.delete_repo_archives_success=所有倉庫存檔清除成功!
+dashboard.delete_missing_repos=Delete all repository records that lost Git files
+dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.git_gc_repos=對倉庫進行垃圾回收
+dashboard.git_gc_repos_success=所有倉庫的垃圾回收已成功完成!
+dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密鑰也會被刪除)
+dashboard.resync_all_sshkeys_success=所有公鑰重新生成成功!
+dashboard.resync_all_update_hooks=重新生成所有倉庫的 Update 鈎子(用於被修改的自定義配置文件)
+dashboard.resync_all_update_hooks_success=已成功重新生成所有倉庫的 Update 鈎子!
+
+dashboard.server_uptime=服務執行時間
+dashboard.current_goroutine=當前 Goroutines 數量
+dashboard.current_memory_usage=當前內存使用量
+dashboard.total_memory_allocated=所有被分配的內存
+dashboard.memory_obtained=內存佔用量
+dashboard.pointer_lookup_times=指針查找次數
+dashboard.memory_allocate_times=內存分配次數
+dashboard.memory_free_times=內存釋放次數
+dashboard.current_heap_usage=當前 Heap 內存使用量
+dashboard.heap_memory_obtained=Heap 內存佔用量
+dashboard.heap_memory_idle=Heap 內存空閒量
+dashboard.heap_memory_in_use=正在使用的 Heap 內存
+dashboard.heap_memory_released=被釋放的 Heap 內存
+dashboard.heap_objects=Heap 對象數量
+dashboard.bootstrap_stack_usage=啟動 Stack 使用量
+dashboard.stack_memory_obtained=被分配的 Stack 內存
+dashboard.mspan_structures_usage=MSpan 結構內存使用量
+dashboard.mspan_structures_obtained=被分配的 MSpan 結構內存
+dashboard.mcache_structures_usage=MCache 結構內存使用量
+dashboard.mcache_structures_obtained=被分配的 MCache 結構內存
+dashboard.profiling_bucket_hash_table_obtained=被分配的剖析哈希表內存
+dashboard.gc_metadata_obtained=被分配的垃圾收集元數據內存
+dashboard.other_system_allocation_obtained=其它被分配的系統內存
+dashboard.next_gc_recycle=下次垃圾收集內存回收量
+dashboard.last_gc_time=距離上次垃圾收集時間
+dashboard.total_gc_time=垃圾收集執行時間總量
+dashboard.total_gc_pause=垃圾收集暫停時間總量
+dashboard.last_gc_pause=上次垃圾收集暫停時間
+dashboard.gc_times=垃圾收集執行次數
+
+users.user_manage_panel=用戶管理面版
+users.new_account=創建新的帳戶
+users.name=用戶名
+users.activated=已激活
+users.admin=管理員
+users.repos=倉庫數
+users.created=創建時間
+users.send_register_notify=Send Registration Notification To User
+users.new_success=New account '%s' has been created successfully.
+users.edit=編輯
+users.auth_source=Authentication Source
+users.local=本地
+users.auth_login_name=Authentication Login Name
+users.password_helper=Leave it empty to remain unchanged.
+users.update_profile_success=該用戶信息更新成功!
+users.edit_account=編輯用戶信息
+users.is_activated=該用戶已被激活
+users.is_admin=該用戶具有管理員權限
+users.allow_git_hook=該帳戶具有創建 Git 鉤子的權限
+users.allow_import_local=This account has permissions to import local repositories
+users.update_profile=更新用戶信息
+users.delete_account=刪除該用戶
+users.still_own_repo=該帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
+users.still_has_org=該帳戶仍舊是某些組織的成員,您必須先使其離開或刪除組織。
+users.deletion_success=Account has been deleted successfully!
+
+orgs.org_manage_panel=組織管理面版
+orgs.name=組織名稱
+orgs.teams=團隊數
+orgs.members=成員數
+
+repos.repo_manage_panel=倉庫管理界面
+repos.owner=所有者
+repos.name=倉庫名稱
+repos.private=私有庫
+repos.watches=關註數
+repos.stars=讚好數
+repos.issues=問題數
+
+auths.auth_manage_panel=Authentication Manage Panel
+auths.new=Add New Source
+auths.name=認證名稱
+auths.type=認證類型
+auths.enabled=已啟用
+auths.updated=最後更新時間
+auths.auth_type=Authentication Type
+auths.auth_name=Authentication Name
+auths.domain=域名
+auths.host=主機地址
+auths.port=主機端口
+auths.bind_dn=綁定DN
+auths.bind_password=綁定密碼
+auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
+auths.user_base=User Search Base
+auths.user_dn=User DN
+auths.attribute_name=名子屬性
+auths.attribute_surname=姓氏屬性
+auths.attribute_mail=電子郵箱屬性
+auths.filter=使用者篩選器
+auths.admin_filter=管理者篩選器
+auths.ms_ad_sa=Ms Ad SA
+auths.smtp_auth=SMTP Authentication Type
+auths.smtphost=SMTP 主機地址
+auths.smtpport=SMTP 主機端口
+auths.allowed_domains=Allowed Domains
+auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
+auths.enable_tls=啟用 TLS 加密
+auths.skip_tls_verify=Skip TLS Verify
+auths.pam_service_name=PAM 服務名稱
+auths.enable_auto_register=允許授權用戶自動註冊
+auths.tips=幫助提示
+auths.edit=Edit Authentication Setting
+auths.activated=該授權認證已經啟用
+auths.new_success=New authentication '%s' has been added successfully.
+auths.update_success=Authentication setting has been updated successfully.
+auths.update=Update Authentication Setting
+auths.delete=Delete This Authentication
+auths.delete_auth_title=Authentication Deletion
+auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
+auths.deletion_success=Authentication has been deleted successfully!
+
+config.server_config=服務器配置
+config.app_name=應用名稱
+config.app_ver=應用版本
+config.app_url=應用 URL
+config.domain=應用域名
+config.offline_mode=離線模式
+config.disable_router_log=關閉路由日志
+config.run_user=執行用戶
+config.run_mode=執行模式
+config.repo_root_path=倉庫根目錄
+config.static_file_root_path=靜態文件根目錄
+config.log_file_root_path=日志文件根目錄
+config.script_type=腳本類型
+config.reverse_auth_user=反向代理認證
+config.db_config=數據庫配置
+config.db_type=數據庫類型
+config.db_host=主機地址
+config.db_name=數據庫名稱
+config.db_user=數據庫用戶
+config.db_ssl_mode=SSL 模式
+config.db_ssl_mode_helper=(僅限 "postgres" 使用)
+config.db_path=數據庫路徑
+config.db_path_helper=(for "sqlite3" and "tidb")
+config.service_config=服務配置
+config.register_email_confirm=註冊電子郵件確認
+config.disable_register=關閉註冊功能
+config.show_registration_button=顯示註冊按鈕
+config.require_sign_in_view=強制登錄瀏覽
+config.enable_cache_avatar=開啟緩存頭像
+config.mail_notify=郵件通知提醒
+config.disable_key_size_check=Disable Minimum Key Size Check
+config.enable_captcha=Enable Captcha
+config.active_code_lives=激活用戶連結有效期
+config.reset_password_code_lives=重置密碼連結有效期
+config.webhook_config=Web 鉤子配置
+config.queue_length=隊列長度
+config.deliver_timeout=推送超時
+config.skip_tls_verify=忽略 TLS 驗證
+config.mailer_config=郵件配置
+config.mailer_enabled=啟用服務
+config.mailer_disable_helo=禁用 HELO 操作
+config.mailer_name=發送者名稱
+config.mailer_host=郵件主機地址
+config.mailer_user=發送者帳號
+config.oauth_config=社交帳號配置
+config.oauth_enabled=啟用服務
+config.cache_config=Cache 配置
+config.cache_adapter=Cache 適配器
+config.cache_interval=Cache 周期
+config.cache_conn=Cache 連接字符串
+config.session_config=Session 配置
+config.session_provider=Session 提供者
+config.provider_config=提供者配置
+config.cookie_name=Cookie 名稱
+config.enable_set_cookie=啟用設置 Cookie
+config.gc_interval_time=垃圾收集周期
+config.session_life_time=Session 生命周期
+config.https_only=僅限 HTTPS
+config.cookie_life_time=Cookie 生命周期
+config.picture_config=圖片配置
+config.picture_service=圖片服務
+config.disable_gravatar=禁用 Gravatar 頭像
+config.log_config=日誌配置
+config.log_mode=日誌模式
+
+monitor.cron=Cron 任務
+monitor.name=任務名稱
+monitor.schedule=任務安排
+monitor.next=下次執行時間
+monitor.previous=上次執行時間
+monitor.execute_times=執行次數
+monitor.process=執行中進程
+monitor.desc=進程描述
+monitor.start=開始時間
+monitor.execute_time=已執行時間
+
+notices.system_notice_list=系統提示管理
+notices.type=提示類型
+notices.type_1=倉庫
+notices.desc=描述
+notices.op=操作
+notices.delete_success=系統提示刪除成功!
+
+[action]
+create_repo=創建了倉庫 <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <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>`
+create_pull_request=`created 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=`merged 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_2_commits=查看 2 次提交的內容對比
+
+[tool]
+ago=之前
+from_now=之後
+now=現在
+1s=1 秒%s
+1m=1 分鐘%s
+1h=1 小時%s
+1d=1 天%s
+1w=1 周%s
+1mon=1 月%s
+1y=1 年%s
+seconds=%d 秒%s
+minutes=%d 分鐘%s
+hours=%d 小時%s
+days=%d 天%s
+weeks=%d 周%s
+months=%d 月%s
+years=%d 年%s
+raw_seconds=秒
+raw_minutes=分鐘
+
+[dropzone]
+default_message=拖曳文件到此處或單擊上傳
+invalid_input_type=您不能上傳該類型的文件
+file_too_big=文件大小({{filesize}} MB)超過了最大允許大小({{maxFilesize}} MB)
+remove_file=移除文件
+

+ 1 - 1
config.codekit

@@ -464,7 +464,7 @@
 		"ignore": 0,
 		"ignoreWasSetByUser": 0,
 		"inputAbbreviatedPath": "\/public\/less\/gogs.less",
-		"outputAbbreviatedPath": "\/public\/css\/gogs.min.css",
+		"outputAbbreviatedPath": "\/public\/css\/gogs.css",
 		"outputPathIsOutsideProject": 0,
 		"outputPathIsSetByUser": 1,
 		"outputStyle": 1,

+ 0 - 12
docker-compose.yml

@@ -1,12 +0,0 @@
-web:
-  build: .
-  links:
-    - mysql
-  ports:
-    - "3000:3000"
-
-mysql:
-  image: mysql
-  environment:
-    - MYSQL_ROOT_PASSWORD=gogs
-    - MYSQL_DATABASE=gogs

+ 2 - 0
docker/build.sh

@@ -1,4 +1,6 @@
 #!/bin/sh
+set -x
+set -e
 
 # Set temp environment vars
 export GOPATH=/tmp/go

+ 1 - 0
docker/s6/gogs/setup

@@ -20,3 +20,4 @@ ln -sf /data/gogs/data ./data
 ln -sf /data/git /home/git
 
 chown -R git:git /data /app/gogs ~git/
+chmod 0755 /data /data/gogs ~git/

+ 2 - 1
docker/s6/openssh/setup

@@ -23,4 +23,5 @@ fi
 
 # Set correct right to ssh keys
 chown -R root:root /data/ssh/*
-chmod 600 /data/ssh/*
+chmod 0700 /data/ssh
+chmod 0600 /data/ssh/*

+ 7 - 0
docker/s6/syslogd/run

@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if test -f ./setup; then
+    source ./setup
+fi
+
+exec gosu root /sbin/syslogd -nS -O-

+ 46 - 30
docker/start.sh

@@ -1,40 +1,56 @@
 #!/bin/sh
 
-# Cleanup SOCAT services and s6 event folder
-# On start and on shutdown in case container has been killed
-rm -rf $(find /app/gogs/docker/s6/ -name 'event')
-rm -rf /app/gogs/docker/s6/SOCAT_*
+create_socat_links() {
+    # Bind linked docker container to localhost socket using socat
+    USED_PORT="3000:22"
+    while read NAME ADDR PORT; do
+        if test -z "$NAME$ADDR$PORT"; then
+            continue
+        elif echo $USED_PORT | grep -E "(^|:)$PORT($|:)" > /dev/null; then
+            echo "init:socat  | Can't bind linked container ${NAME} to localhost, port ${PORT} already in use" 1>&2
+        else
+            SERV_FOLDER=/app/gogs/docker/s6/SOCAT_${NAME}_${PORT}
+            mkdir -p ${SERV_FOLDER}
+            CMD="socat -ls TCP4-LISTEN:${PORT},fork,reuseaddr TCP4:${ADDR}:${PORT}"
+            echo -e "#!/bin/sh\nexec $CMD" > ${SERV_FOLDER}/run
+            chmod +x ${SERV_FOLDER}/run
+            USED_PORT="${USED_PORT}:${PORT}"
+            echo "init:socat  | Linked container ${NAME} will be binded to localhost on port ${PORT}" 1>&2
+        fi
+    done << EOT
+    $(env | sed -En 's|(.*)_PORT_([0-9]+)_TCP=tcp://(.*):([0-9]+)|\1 \3 \4|p')
+EOT
+}
 
-# Create VOLUME subfolder
-for f in /data/gogs/data /data/gogs/conf /data/gogs/log /data/git /data/ssh; do
-    if ! test -d $f; then
-        mkdir -p $f
-    fi
-done
+cleanup() {
+    # Cleanup SOCAT services and s6 event folder
+    # On start and on shutdown in case container has been killed
+    rm -rf $(find /app/gogs/docker/s6/ -name 'event')
+    rm -rf /app/gogs/docker/s6/SOCAT_*
+}
 
-# Bind linked docker container to localhost socket using socat
-USED_PORT="3000:22"
-while read NAME ADDR PORT; do
-    if test -z "$NAME$ADDR$PORT"; then
-        continue
-    elif echo $USED_PORT | grep -E "(^|:)$PORT($|:)" > /dev/null; then
-        echo "init:socat | Can't bind linked container ${NAME} to localhost, port ${PORT} already in use" 1>&2
-    else
-        SERV_FOLDER=/app/gogs/docker/s6/SOCAT_${NAME}_${PORT}
-        mkdir -p ${SERV_FOLDER}
-        CMD="socat -ls TCP4-LISTEN:${PORT},fork,reuseaddr TCP4:${ADDR}:${PORT}"
-        echo -e "#!/bin/sh\nexec $CMD" > ${SERV_FOLDER}/run
-        chmod +x ${SERV_FOLDER}/run
-        USED_PORT="${USED_PORT}:${PORT}"
-        echo "init:socat | Linked container ${NAME} will be binded to localhost on port ${PORT}" 1>&2
-    fi
-done << EOT
-$(env | sed -En 's|(.*)_PORT_([0-9]+)_TCP=tcp://(.*):([0-9]+)|\1 \3 \4|p')
-EOT
+create_volume_subfolder() {
+    # Create VOLUME subfolder
+    for f in /data/gogs/data /data/gogs/conf /data/gogs/log /data/git /data/ssh; do
+        if ! test -d $f; then
+            mkdir -p $f
+        fi
+    done
+}
+
+cleanup
+create_volume_subfolder
+
+LINK=$(echo "$SOCAT_LINK" | tr '[:upper:]' '[:lower:]')
+if [ "$LINK" = "false" -o "$LINK" = "0" ]; then
+    echo "init:socat  | Will not try to create socat links as requested" 1>&2
+else
+    create_socat_links
+fi
 
 # Exec CMD or S6 by default if nothing present
 if [ $# -gt 0 ];then
     exec "$@"
 else
-    exec /usr/bin/s6-svscan /app/gogs/docker/s6/
+    exec /bin/s6-svscan /app/gogs/docker/s6/
 fi

+ 2 - 2
gogs.go

@@ -4,7 +4,7 @@
 // Use of this source code is governed by a MIT-style
 // license that can be found in the LICENSE file.
 
-// Gogs(Go Git Service) is a painless self-hosted Git Service written in Go.
+// Gogs (Go Git Service) is a painless self-hosted Git Service.
 package main
 
 import (
@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.6.18.1029 Beta"
+const APP_VER = "0.7.20.1121 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())

+ 32 - 16
models/access.go

@@ -36,19 +36,19 @@ func accessLevel(e Engine, u *User, repo *Repository) (AccessMode, error) {
 		mode = ACCESS_MODE_READ
 	}
 
-	if u != nil {
-		if u.Id == repo.OwnerID {
-			return ACCESS_MODE_OWNER, nil
-		}
+	if u == nil {
+		return mode, nil
+	}
 
-		a := &Access{UserID: u.Id, RepoID: repo.ID}
-		if has, err := e.Get(a); !has || err != nil {
-			return mode, err
-		}
-		return a.Mode, nil
+	if u.Id == repo.OwnerID {
+		return ACCESS_MODE_OWNER, nil
 	}
 
-	return mode, nil
+	a := &Access{UserID: u.Id, RepoID: repo.ID}
+	if has, err := e.Get(a); !has || err != nil {
+		return mode, err
+	}
+	return a.Mode, nil
 }
 
 // AccessLevel returns the Access a user has to a repository. Will return NoneAccess if the
@@ -67,9 +67,8 @@ func HasAccess(u *User, repo *Repository, testMode AccessMode) (bool, error) {
 	return hasAccess(x, u, repo, testMode)
 }
 
-// GetAccessibleRepositories finds all repositories where a user has access to,
-// besides he/she owns.
-func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) {
+// GetRepositoryAccesses finds all repositories with their access mode where a user has access but does not own.
+func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
 	accesses := make([]*Access, 0, 10)
 	if err := x.Find(&accesses, &Access{UserID: u.Id}); err != nil {
 		return nil, err
@@ -80,7 +79,7 @@ func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) {
 		repo, err := GetRepositoryByID(access.RepoID)
 		if err != nil {
 			if IsErrRepoNotExist(err) {
-				log.Error(4, "%v", err)
+				log.Error(4, "GetRepositoryByID: %v", err)
 				continue
 			}
 			return nil, err
@@ -92,11 +91,28 @@ func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) {
 		}
 		repos[repo] = access.Mode
 	}
-
-	// FIXME: should we generate an ordered list here? Random looks weird.
 	return repos, nil
 }
 
+// GetAccessibleRepositories finds all repositories where a user has access but does not own.
+func (u *User) GetAccessibleRepositories() ([]*Repository, error) {
+	accesses := make([]*Access, 0, 10)
+	if err := x.Find(&accesses, &Access{UserID: u.Id}); err != nil {
+		return nil, err
+	}
+
+	if len(accesses) == 0 {
+		return []*Repository{}, nil
+	}
+
+	repoIDs := make([]int64, 0, len(accesses))
+	for _, access := range accesses {
+		repoIDs = append(repoIDs, access.RepoID)
+	}
+	repos := make([]*Repository, 0, len(repoIDs))
+	return repos, x.Where("owner_id != ?", u.Id).In("id", repoIDs).Desc("updated").Find(&repos)
+}
+
 func maxAccessMode(modes ...AccessMode) AccessMode {
 	max := ACCESS_MODE_NONE
 	for _, mode := range modes {

+ 75 - 10
models/action.go

@@ -14,6 +14,7 @@ import (
 	"time"
 	"unicode"
 
+	"github.com/Unknwon/com"
 	"github.com/go-xorm/xorm"
 
 	api "github.com/gogits/go-gogs-client"
@@ -136,6 +137,26 @@ func (a Action) GetIssueInfos() []string {
 	return strings.SplitN(a.Content, "|", 2)
 }
 
+func (a Action) GetIssueTitle() string {
+	index := com.StrTo(a.GetIssueInfos()[0]).MustInt64()
+	issue, err := GetIssueByIndex(a.RepoID, index)
+	if err != nil {
+		log.Error(4, "GetIssueByIndex: %v", err)
+		return "500 when get issue"
+	}
+	return issue.Name
+}
+
+func (a Action) GetIssueContent() string {
+	index := com.StrTo(a.GetIssueInfos()[0]).MustInt64()
+	issue, err := GetIssueByIndex(a.RepoID, index)
+	if err != nil {
+		log.Error(4, "GetIssueByIndex: %v", err)
+		return "500 when get issue"
+	}
+	return issue.Content
+}
+
 func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
 	if err = notifyWatchers(e, &Action{
 		ActUserID:    u.Id,
@@ -147,7 +168,7 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
 		RepoName:     repo.Name,
 		IsPrivate:    repo.IsPrivate,
 	}); err != nil {
-		return fmt.Errorf("notify watchers '%d/%s': %v", u.Id, repo.ID, err)
+		return fmt.Errorf("notify watchers '%d/%d': %v", u.Id, repo.ID, err)
 	}
 
 	log.Trace("action.newRepoAction: %s/%s", u.Name, repo.Name)
@@ -187,8 +208,48 @@ func issueIndexTrimRight(c rune) bool {
 	return !unicode.IsDigit(c)
 }
 
+type PushCommit struct {
+	Sha1        string
+	Message     string
+	AuthorEmail string
+	AuthorName  string
+}
+
+type PushCommits struct {
+	Len        int
+	Commits    []*PushCommit
+	CompareUrl string
+
+	avatars map[string]string
+}
+
+func NewPushCommits() *PushCommits {
+	return &PushCommits{
+		avatars: make(map[string]string),
+	}
+}
+
+// AvatarLink tries to match user in database with e-mail
+// in order to show custom avatar, and falls back to general avatar link.
+func (push *PushCommits) AvatarLink(email string) string {
+	_, ok := push.avatars[email]
+	if !ok {
+		u, err := GetUserByEmail(email)
+		if err != nil {
+			push.avatars[email] = base.AvatarLink(email)
+			if !IsErrUserNotExist(err) {
+				log.Error(4, "GetUserByEmail: %v", err)
+			}
+		} else {
+			push.avatars[email] = u.AvatarLink()
+		}
+	}
+
+	return push.avatars[email]
+}
+
 // updateIssuesCommit checks if issues are manipulated by commit message.
-func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string, commits []*base.PushCommit) error {
+func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string, commits []*PushCommit) error {
 	// Commits are appended in the reverse order.
 	for i := len(commits) - 1; i >= 0; i-- {
 		c := commits[i]
@@ -322,7 +383,7 @@ func CommitRepoAction(
 	repoID int64,
 	repoUserName, repoName string,
 	refFullName string,
-	commit *base.PushCommits,
+	commit *PushCommits,
 	oldCommitID string, newCommitID string) error {
 
 	u, err := GetUserByID(userID)
@@ -337,12 +398,18 @@ func CommitRepoAction(
 		return fmt.Errorf("GetOwner: %v", err)
 	}
 
+	// Change repository bare status and update last updated time.
+	repo.IsBare = false
+	if err = UpdateRepository(repo, false); err != nil {
+		return fmt.Errorf("UpdateRepository: %v", err)
+	}
+
 	isNewBranch := false
 	opType := COMMIT_REPO
 	// Check it's tag push or branch.
 	if strings.HasPrefix(refFullName, "refs/tags/") {
 		opType = PUSH_TAG
-		commit = &base.PushCommits{}
+		commit = &PushCommits{}
 	} else {
 		// if not the first commit, set the compareUrl
 		if !strings.HasPrefix(oldCommitID, "0000000") {
@@ -351,12 +418,10 @@ func CommitRepoAction(
 			isNewBranch = true
 		}
 
-		// Change repository bare status and update last updated time.
-		repo.IsBare = false
-		if err = UpdateRepository(repo, false); err != nil {
-			return fmt.Errorf("UpdateRepository: %v", err)
+		// NOTE: limit to detect latest 100 commits.
+		if len(commit.Commits) > 100 {
+			commit.Commits = commit.Commits[len(commit.Commits)-100:]
 		}
-
 		if err = updateIssuesCommit(u, repo, repoUserName, repoName, commit.Commits); err != nil {
 			log.Error(4, "updateIssuesCommit: %v", err)
 		}
@@ -488,7 +553,7 @@ func transferRepoAction(e Engine, actUser, oldOwner, newOwner *User, repo *Repos
 		IsPrivate:    repo.IsPrivate,
 		Content:      path.Join(oldOwner.LowerName, repo.LowerName),
 	}); err != nil {
-		return fmt.Errorf("notify watchers '%d/%s': %v", actUser.Id, repo.ID, err)
+		return fmt.Errorf("notify watchers '%d/%d': %v", actUser.Id, repo.ID, err)
 	}
 
 	// Remove watch for organization.

+ 98 - 14
models/error.go

@@ -18,7 +18,7 @@ func IsErrNameReserved(err error) bool {
 }
 
 func (err ErrNameReserved) Error() string {
-	return fmt.Sprintf("name is reserved: [name: %s]", err.Name)
+	return fmt.Sprintf("name is reserved [name: %s]", err.Name)
 }
 
 type ErrNamePatternNotAllowed struct {
@@ -31,7 +31,7 @@ func IsErrNamePatternNotAllowed(err error) bool {
 }
 
 func (err ErrNamePatternNotAllowed) Error() string {
-	return fmt.Sprintf("name pattern is not allowed: [pattern: %s]", err.Pattern)
+	return fmt.Sprintf("name pattern is not allowed [pattern: %s]", err.Pattern)
 }
 
 //  ____ ___
@@ -51,7 +51,7 @@ func IsErrUserAlreadyExist(err error) bool {
 }
 
 func (err ErrUserAlreadyExist) Error() string {
-	return fmt.Sprintf("user already exists: [name: %s]", err.Name)
+	return fmt.Sprintf("user already exists [name: %s]", err.Name)
 }
 
 type ErrUserNotExist struct {
@@ -65,7 +65,7 @@ func IsErrUserNotExist(err error) bool {
 }
 
 func (err ErrUserNotExist) Error() string {
-	return fmt.Sprintf("user does not exist: [uid: %d, name: %s]", err.UID, err.Name)
+	return fmt.Sprintf("user does not exist [uid: %d, name: %s]", err.UID, err.Name)
 }
 
 type ErrEmailAlreadyUsed struct {
@@ -78,7 +78,7 @@ func IsErrEmailAlreadyUsed(err error) bool {
 }
 
 func (err ErrEmailAlreadyUsed) Error() string {
-	return fmt.Sprintf("e-mail has been used: [email: %s]", err.Email)
+	return fmt.Sprintf("e-mail has been used [email: %s]", err.Email)
 }
 
 type ErrUserOwnRepos struct {
@@ -91,7 +91,7 @@ func IsErrUserOwnRepos(err error) bool {
 }
 
 func (err ErrUserOwnRepos) Error() string {
-	return fmt.Sprintf("user still has ownership of repositories: [uid: %d]", err.UID)
+	return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
 }
 
 type ErrUserHasOrgs struct {
@@ -104,7 +104,7 @@ func IsErrUserHasOrgs(err error) bool {
 }
 
 func (err ErrUserHasOrgs) Error() string {
-	return fmt.Sprintf("user still has membership of organizations: [uid: %d]", err.UID)
+	return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
 }
 
 // __________     ___.   .__  .__          ____  __.
@@ -114,6 +114,19 @@ func (err ErrUserHasOrgs) Error() string {
 //  |____|   |____/|___  /____/__|\___  > |____|__ \___  > ____|
 //                     \/             \/          \/   \/\/
 
+type ErrKeyUnableVerify struct {
+	Result string
+}
+
+func IsErrKeyUnableVerify(err error) bool {
+	_, ok := err.(ErrKeyUnableVerify)
+	return ok
+}
+
+func (err ErrKeyUnableVerify) Error() string {
+	return fmt.Sprintf("Unable to verify key content [result: %s]", err.Result)
+}
+
 type ErrKeyNotExist struct {
 	ID int64
 }
@@ -124,7 +137,7 @@ func IsErrKeyNotExist(err error) bool {
 }
 
 func (err ErrKeyNotExist) Error() string {
-	return fmt.Sprintf("public key does not exist: [id: %d]", err.ID)
+	return fmt.Sprintf("public key does not exist [id: %d]", err.ID)
 }
 
 type ErrKeyAlreadyExist struct {
@@ -138,7 +151,7 @@ func IsErrKeyAlreadyExist(err error) bool {
 }
 
 func (err ErrKeyAlreadyExist) Error() string {
-	return fmt.Sprintf("public key already exists: [owner_id: %d, content: %s]", err.OwnerID, err.Content)
+	return fmt.Sprintf("public key already exists [owner_id: %d, content: %s]", err.OwnerID, err.Content)
 }
 
 type ErrKeyNameAlreadyUsed struct {
@@ -152,7 +165,22 @@ func IsErrKeyNameAlreadyUsed(err error) bool {
 }
 
 func (err ErrKeyNameAlreadyUsed) Error() string {
-	return fmt.Sprintf("public key already exists: [owner_id: %d, name: %s]", err.OwnerID, err.Name)
+	return fmt.Sprintf("public key already exists [owner_id: %d, name: %s]", err.OwnerID, err.Name)
+}
+
+type ErrDeployKeyNotExist struct {
+	ID     int64
+	KeyID  int64
+	RepoID int64
+}
+
+func IsErrDeployKeyNotExist(err error) bool {
+	_, ok := err.(ErrDeployKeyNotExist)
+	return ok
+}
+
+func (err ErrDeployKeyNotExist) Error() string {
+	return fmt.Sprintf("Deploy key does not exist [id: %d, key_id: %d, repo_id: %d]", err.ID, err.KeyID, err.RepoID)
 }
 
 type ErrDeployKeyAlreadyExist struct {
@@ -166,7 +194,7 @@ func IsErrDeployKeyAlreadyExist(err error) bool {
 }
 
 func (err ErrDeployKeyAlreadyExist) Error() string {
-	return fmt.Sprintf("public key already exists: [key_id: %d, repo_id: %d]", err.KeyID, err.RepoID)
+	return fmt.Sprintf("public key already exists [key_id: %d, repo_id: %d]", err.KeyID, err.RepoID)
 }
 
 type ErrDeployKeyNameAlreadyUsed struct {
@@ -180,7 +208,7 @@ func IsErrDeployKeyNameAlreadyUsed(err error) bool {
 }
 
 func (err ErrDeployKeyNameAlreadyUsed) Error() string {
-	return fmt.Sprintf("public key already exists: [repo_id: %d, name: %s]", err.RepoID, err.Name)
+	return fmt.Sprintf("public key already exists [repo_id: %d, name: %s]", err.RepoID, err.Name)
 }
 
 //    _____                                   ___________     __
@@ -200,7 +228,7 @@ func IsErrAccessTokenNotExist(err error) bool {
 }
 
 func (err ErrAccessTokenNotExist) Error() string {
-	return fmt.Sprintf("access token does not exist: [sha: %s]", err.SHA)
+	return fmt.Sprintf("access token does not exist [sha: %s]", err.SHA)
 }
 
 // ________                            .__                __  .__
@@ -220,7 +248,7 @@ func IsErrLastOrgOwner(err error) bool {
 }
 
 func (err ErrLastOrgOwner) Error() string {
-	return fmt.Sprintf("user is the last member of owner team: [uid: %d]", err.UID)
+	return fmt.Sprintf("user is the last member of owner team [uid: %d]", err.UID)
 }
 
 // __________                           .__  __
@@ -259,6 +287,62 @@ func (err ErrRepoAlreadyExist) Error() string {
 	return fmt.Sprintf("repository already exists [uname: %s, name: %s]", err.Uname, err.Name)
 }
 
+type ErrInvalidCloneAddr struct {
+	IsURLError         bool
+	IsInvalidPath      bool
+	IsPermissionDenied bool
+}
+
+func IsErrInvalidCloneAddr(err error) bool {
+	_, ok := err.(ErrInvalidCloneAddr)
+	return ok
+}
+
+func (err ErrInvalidCloneAddr) Error() string {
+	return fmt.Sprintf("invalid clone address [is_url_error: %v, is_invalid_path: %v, is_permission_denied: %v]",
+		err.IsURLError, err.IsInvalidPath, err.IsPermissionDenied)
+}
+
+type ErrUpdateTaskNotExist struct {
+	UUID string
+}
+
+func IsErrUpdateTaskNotExist(err error) bool {
+	_, ok := err.(ErrUpdateTaskNotExist)
+	return ok
+}
+
+func (err ErrUpdateTaskNotExist) Error() string {
+	return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
+}
+
+type ErrReleaseAlreadyExist struct {
+	TagName string
+}
+
+func IsErrReleaseAlreadyExist(err error) bool {
+	_, ok := err.(ErrReleaseAlreadyExist)
+	return ok
+}
+
+func (err ErrReleaseAlreadyExist) Error() string {
+	return fmt.Sprintf("Release tag already exist [tag_name: %s]", err.TagName)
+}
+
+type ErrReleaseNotExist struct {
+	ID      int64
+	TagName string
+}
+
+func IsErrReleaseNotExist(err error) bool {
+	_, ok := err.(ErrReleaseNotExist)
+	return ok
+}
+
+func (err ErrReleaseNotExist) Error() string {
+	return fmt.Sprintf("Release tag does not exist [id: %d, tag_name: %s]", err.ID, err.TagName)
+}
+
 //  __      __      ___.   .__                   __
 // /  \    /  \ ____\_ |__ |  |__   ____   ____ |  | __
 // \   \/\/   // __ \| __ \|  |  \ /  _ \ /  _ \|  |/ /

+ 28 - 14
models/git_diff.go

@@ -37,6 +37,7 @@ const (
 	DIFF_FILE_ADD = iota + 1
 	DIFF_FILE_CHANGE
 	DIFF_FILE_DEL
+	DIFF_FILE_RENAME
 )
 
 type DiffLine struct {
@@ -57,12 +58,14 @@ type DiffSection struct {
 
 type DiffFile struct {
 	Name               string
+	OldName            string
 	Index              int
 	Addition, Deletion int
 	Type               int
 	IsCreated          bool
 	IsDeleted          bool
 	IsBin              bool
+	IsRenamed          bool
 	Sections           []*DiffSection
 }
 
@@ -94,7 +97,7 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
 	var i int
 	for scanner.Scan() {
 		line := scanner.Text()
-		// fmt.Println(i, line)
+
 		if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") {
 			continue
 		}
@@ -158,17 +161,27 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
 
 		// Get new file.
 		if strings.HasPrefix(line, DIFF_HEAD) {
-			beg := len(DIFF_HEAD)
-			a := line[beg : (len(line)-beg)/2+beg]
+			middle := -1
+
+			// Note: In case file name is surrounded by double quotes (it happens only in git-shell).
+			// e.g. diff --git "a/xxx" "b/xxx"
+			hasQuote := line[len(DIFF_HEAD)] == '"'
+			if hasQuote {
+				middle = strings.Index(line, ` "b/`)
+			} else {
+				middle = strings.Index(line, " b/")
+			}
 
-			// In case file name is surrounded by double quotes(it happens only in git-shell).
-			if a[0] == '"' {
-				a = a[1 : len(a)-1]
-				a = strings.Replace(a, `\"`, `"`, -1)
+			beg := len(DIFF_HEAD)
+			a := line[beg+2 : middle]
+			b := line[middle+3:]
+			if hasQuote {
+				a = string(git.UnescapeChars([]byte(a[1 : len(a)-1])))
+				b = string(git.UnescapeChars([]byte(b[1 : len(b)-1])))
 			}
 
 			curFile = &DiffFile{
-				Name:     a[strings.Index(a, "/")+1:],
+				Name:     a,
 				Index:    len(diff.Files) + 1,
 				Type:     DIFF_FILE_CHANGE,
 				Sections: make([]*DiffSection, 0, 10),
@@ -180,16 +193,17 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
 				switch {
 				case strings.HasPrefix(scanner.Text(), "new file"):
 					curFile.Type = DIFF_FILE_ADD
-					curFile.IsDeleted = false
 					curFile.IsCreated = true
 				case strings.HasPrefix(scanner.Text(), "deleted"):
 					curFile.Type = DIFF_FILE_DEL
-					curFile.IsCreated = false
 					curFile.IsDeleted = true
 				case strings.HasPrefix(scanner.Text(), "index"):
 					curFile.Type = DIFF_FILE_CHANGE
-					curFile.IsCreated = false
-					curFile.IsDeleted = false
+				case strings.HasPrefix(scanner.Text(), "similarity index 100%"):
+					curFile.Type = DIFF_FILE_RENAME
+					curFile.IsRenamed = true
+					curFile.OldName = curFile.Name
+					curFile.Name = b
 				}
 				if curFile.Type > 0 {
 					break
@@ -244,10 +258,10 @@ func GetDiffRange(repoPath, beforeCommitId string, afterCommitId string, maxline
 			cmd = exec.Command("git", "show", afterCommitId)
 		} else {
 			c, _ := commit.Parent(0)
-			cmd = exec.Command("git", "diff", c.Id.String(), afterCommitId)
+			cmd = exec.Command("git", "diff", "-M", c.ID.String(), afterCommitId)
 		}
 	} else {
-		cmd = exec.Command("git", "diff", beforeCommitId, afterCommitId)
+		cmd = exec.Command("git", "diff", "-M", beforeCommitId, afterCommitId)
 	}
 	cmd.Dir = repoPath
 	cmd.Stdout = wr

+ 9 - 13
models/issue.go

@@ -718,32 +718,28 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
 	if opts.AssigneeID > 0 {
 		baseCond += " AND assignee_id=" + com.ToStr(opts.AssigneeID)
 	}
-	if opts.IsPull {
-		baseCond += " AND issue.is_pull=1"
-	} else {
-		baseCond += " AND issue.is_pull=0"
-	}
+	baseCond += " AND issue.is_pull=?"
 
 	switch opts.FilterMode {
 	case FM_ALL, FM_ASSIGN:
-		results, _ := x.Query(queryStr+baseCond, false)
+		results, _ := x.Query(queryStr+baseCond, false, opts.IsPull)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, true)
+		results, _ = x.Query(queryStr+baseCond, true, opts.IsPull)
 		stats.ClosedCount = parseCountResult(results)
 
 	case FM_CREATE:
 		baseCond += " AND poster_id=?"
-		results, _ := x.Query(queryStr+baseCond, false, opts.UserID)
+		results, _ := x.Query(queryStr+baseCond, false, opts.IsPull, opts.UserID)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, true, opts.UserID)
+		results, _ = x.Query(queryStr+baseCond, true, opts.IsPull, opts.UserID)
 		stats.ClosedCount = parseCountResult(results)
 
 	case FM_MENTION:
 		queryStr += " INNER JOIN `issue_user` ON `issue`.id=`issue_user`.issue_id"
 		baseCond += " AND `issue_user`.uid=? AND `issue_user`.is_mentioned=?"
-		results, _ := x.Query(queryStr+baseCond, false, opts.UserID, true)
+		results, _ := x.Query(queryStr+baseCond, false, opts.IsPull, opts.UserID, true)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, true, opts.UserID, true)
+		results, _ = x.Query(queryStr+baseCond, true, opts.IsPull, opts.UserID, true)
 		stats.ClosedCount = parseCountResult(results)
 	}
 	return stats
@@ -1375,8 +1371,8 @@ func ChangeMilestoneAssign(oldMid int64, issue *Issue) (err error) {
 }
 
 // DeleteMilestoneByID deletes a milestone by given ID.
-func DeleteMilestoneByID(mid int64) error {
-	m, err := GetMilestoneByID(mid)
+func DeleteMilestoneByID(id int64) error {
+	m, err := GetMilestoneByID(id)
 	if err != nil {
 		if IsErrMilestoneNotExist(err) {
 			return nil

+ 3 - 4
models/login.go

@@ -225,10 +225,9 @@ func DeleteSource(source *LoginSource) error {
 // |_______ \/_______  /\____|__  /____|
 //         \/        \/         \/
 
-// Query if name/passwd can login against the LDAP directory pool
-// Create a local user if success
-// Return the same LoginUserPlain semantic
-// FIXME: https://github.com/gogits/gogs/issues/672
+// LoginUserLDAPSource queries if name/passwd can login against the LDAP directory pool,
+// and create a local user if success when enabled.
+// It returns the same LoginUserPlain semantic.
 func LoginUserLDAPSource(u *User, name, passwd string, source *LoginSource, autoRegister bool) (*User, error) {
 	cfg := source.Cfg.(*LDAPConfig)
 	directBind := (source.Type == DLDAP)

+ 51 - 2
models/migrations/migrations.go

@@ -11,6 +11,7 @@ import (
 	"io/ioutil"
 	"os"
 	"path"
+	"path/filepath"
 	"strings"
 	"time"
 
@@ -66,6 +67,7 @@ var migrations = []Migration{
 	NewMigration("generate issue-label from issue", issueToIssueLabel),           // V6 -> V7:v0.6.4
 	NewMigration("refactor attachment table", attachmentRefactor),                // V7 -> V8:v0.6.4
 	NewMigration("rename pull request fields", renamePullRequestFields),          // V8 -> V9:v0.6.16
+	NewMigration("clean up migrate repo info", cleanUpMigrateRepoInfo),           // V9 -> V10:v0.6.20
 }
 
 // Migrate database to current version
@@ -454,7 +456,7 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
 
 		pushCommits = new(PushCommits)
 		if err = json.Unmarshal(action["content"], pushCommits); err != nil {
-			return fmt.Errorf("unmarshal action content[%s]: %v", actID, err)
+			return fmt.Errorf("unmarshal action content[%d]: %v", actID, err)
 		}
 
 		infos := strings.Split(pushCommits.CompareUrl, "/")
@@ -465,7 +467,7 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
 
 		p, err := json.Marshal(pushCommits)
 		if err != nil {
-			return fmt.Errorf("marshal action content[%s]: %v", actID, err)
+			return fmt.Errorf("marshal action content[%d]: %v", actID, err)
 		}
 
 		if _, err = sess.Id(actID).Update(&Action{
@@ -653,3 +655,50 @@ func renamePullRequestFields(x *xorm.Engine) (err error) {
 
 	return sess.Commit()
 }
+
+func cleanUpMigrateRepoInfo(x *xorm.Engine) (err error) {
+	type (
+		User struct {
+			ID        int64 `xorm:"pk autoincr"`
+			LowerName string
+		}
+		Repository struct {
+			ID        int64 `xorm:"pk autoincr"`
+			OwnerID   int64
+			LowerName string
+		}
+	)
+
+	repos := make([]*Repository, 0, 25)
+	if err = x.Where("is_mirror=?", false).Find(&repos); err != nil {
+		return fmt.Errorf("select all non-mirror repositories: %v", err)
+	}
+	var user *User
+	for _, repo := range repos {
+		user = &User{ID: repo.OwnerID}
+		has, err := x.Get(user)
+		if err != nil {
+			return fmt.Errorf("get owner of repository[%d - %d]: %v", repo.ID, repo.OwnerID, err)
+		} else if !has {
+			continue
+		}
+
+		configPath := filepath.Join(setting.RepoRootPath, user.LowerName, repo.LowerName+".git/config")
+
+		// In case repository file is somehow missing.
+		if !com.IsFile(configPath) {
+			continue
+		}
+
+		cfg, err := ini.Load(configPath)
+		if err != nil {
+			return fmt.Errorf("open config file: %v", err)
+		}
+		cfg.DeleteSection("remote \"origin\"")
+		if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
+			return fmt.Errorf("save config file: %v", err)
+		}
+	}
+
+	return nil
+}

+ 1 - 1
models/models.go

@@ -90,7 +90,7 @@ func init() {
 		new(Team), new(OrgUser), new(TeamUser), new(TeamRepo),
 		new(Notice), new(EmailAddress))
 
-	gonicNames := []string{"UID", "SSL"}
+	gonicNames := []string{"SSL"}
 	for _, name := range gonicNames {
 		core.LintGonicMapper[name] = true
 	}

+ 75 - 66
models/publickey.go

@@ -13,7 +13,6 @@ import (
 	"io"
 	"io/ioutil"
 	"os"
-	"os/exec"
 	"path"
 	"path/filepath"
 	"strings"
@@ -33,25 +32,8 @@ const (
 	_TPL_PUBLICK_KEY = `command="%s serv key-%d --config='%s'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s` + "\n"
 )
 
-var (
-	ErrKeyUnableVerify = errors.New("Unable to verify public key")
-)
-
 var sshOpLocker = sync.Mutex{}
-
-var (
-	SSHPath string // SSH directory.
-	appPath string // Execution(binary) path.
-)
-
-// exePath returns the executable path.
-func exePath() (string, error) {
-	file, err := exec.LookPath(os.Args[0])
-	if err != nil {
-		return "", err
-	}
-	return filepath.Abs(file)
-}
+var SSHPath string // SSH directory.
 
 // homeDir returns the home directory of current user.
 func homeDir() string {
@@ -63,16 +45,9 @@ func homeDir() string {
 }
 
 func init() {
-	var err error
-
-	if appPath, err = exePath(); err != nil {
-		log.Fatal(4, "fail to get app path: %v\n", err)
-	}
-	appPath = strings.Replace(appPath, "\\", "/", -1)
-
 	// Determine and create .ssh path.
 	SSHPath = filepath.Join(homeDir(), ".ssh")
-	if err = os.MkdirAll(SSHPath, 0700); err != nil {
+	if err := os.MkdirAll(SSHPath, 0700); err != nil {
 		log.Fatal(4, "fail to create '%s': %v", SSHPath, err)
 	}
 }
@@ -114,17 +89,7 @@ func (k *PublicKey) OmitEmail() string {
 
 // GetAuthorizedString generates and returns formatted public key string for authorized_keys file.
 func (key *PublicKey) GetAuthorizedString() string {
-	return fmt.Sprintf(_TPL_PUBLICK_KEY, appPath, key.ID, setting.CustomConf, key.Content)
-}
-
-var minimumKeySizes = map[string]int{
-	"(ED25519)": 256,
-	"(ECDSA)":   256,
-	"(NTRU)":    1087,
-	"(MCE)":     1702,
-	"(McE)":     1702,
-	"(RSA)":     1024,
-	"(DSA)":     1024,
+	return fmt.Sprintf(_TPL_PUBLICK_KEY, setting.AppPath, key.ID, setting.CustomConf, key.Content)
 }
 
 func extractTypeFromBase64Key(key string) (string, error) {
@@ -228,9 +193,9 @@ func CheckPublicKeyString(content string) (_ string, err error) {
 	tmpFile.Close()
 
 	// Check if ssh-keygen recognizes its contents.
-	stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-l", "-f", tmpPath)
+	stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-lf", tmpPath)
 	if err != nil {
-		return "", errors.New("ssh-keygen -l -f: " + stderr)
+		return "", errors.New("ssh-keygen -lf: " + stderr)
 	} else if len(stdout) < 2 {
 		return "", errors.New("ssh-keygen returned not enough output to evaluate the key: " + stdout)
 	}
@@ -242,7 +207,7 @@ func CheckPublicKeyString(content string) (_ string, err error) {
 
 	sshKeygenOutput := strings.Split(stdout, " ")
 	if len(sshKeygenOutput) < 4 {
-		return content, ErrKeyUnableVerify
+		return content, ErrKeyUnableVerify{stdout}
 	}
 
 	// Check if key type and key size match.
@@ -251,9 +216,10 @@ func CheckPublicKeyString(content string) (_ string, err error) {
 		if keySize == 0 {
 			return "", errors.New("cannot get key size of the given key")
 		}
-		keyType := strings.TrimSpace(sshKeygenOutput[len(sshKeygenOutput)-1])
-		if minimumKeySize := minimumKeySizes[keyType]; minimumKeySize == 0 {
-			return "", errors.New("sorry, unrecognized public key type")
+
+		keyType := strings.Trim(sshKeygenOutput[len(sshKeygenOutput)-1], " ()\n")
+		if minimumKeySize := setting.Service.MinimumKeySizes[keyType]; minimumKeySize == 0 {
+			return "", fmt.Errorf("unrecognized public key type: %s", keyType)
 		} else if keySize < minimumKeySize {
 			return "", fmt.Errorf("the minimum accepted size of a public key %s is %d", keyType, minimumKeySize)
 		}
@@ -321,9 +287,9 @@ func addKey(e Engine, key *PublicKey) (err error) {
 	if err = ioutil.WriteFile(tmpPath, []byte(key.Content), 0644); err != nil {
 		return err
 	}
-	stdout, stderr, err := process.Exec("AddPublicKey", "ssh-keygen", "-l", "-f", tmpPath)
+	stdout, stderr, err := process.Exec("AddPublicKey", "ssh-keygen", "-lf", tmpPath)
 	if err != nil {
-		return errors.New("ssh-keygen -l -f: " + stderr)
+		return errors.New("ssh-keygen -lf: " + stderr)
 	} else if len(stdout) < 2 {
 		return errors.New("not enough output for calculating fingerprint: " + stdout)
 	}
@@ -382,6 +348,19 @@ func GetPublicKeyByID(keyID int64) (*PublicKey, error) {
 	return key, nil
 }
 
+// SearchPublicKeyByContent searches content as prefix (leak e-mail part)
+// and returns public key found.
+func SearchPublicKeyByContent(content string) (*PublicKey, error) {
+	key := new(PublicKey)
+	has, err := x.Where("content like ?", content+"%").Get(key)
+	if err != nil {
+		return nil, err
+	} else if !has {
+		return nil, ErrKeyNotExist{}
+	}
+	return key, nil
+}
+
 // ListPublicKeys returns a list of public keys belongs to given user.
 func ListPublicKeys(uid int64) ([]*PublicKey, error) {
 	keys := make([]*PublicKey, 0, 5)
@@ -540,6 +519,7 @@ type DeployKey struct {
 	RepoID            int64 `xorm:"UNIQUE(s) INDEX"`
 	Name              string
 	Fingerprint       string
+	Content           string    `xorm:"-"`
 	Created           time.Time `xorm:"CREATED"`
 	Updated           time.Time // Note: Updated must below Created for AfterSet.
 	HasRecentActivity bool      `xorm:"-"`
@@ -554,6 +534,16 @@ func (k *DeployKey) AfterSet(colName string, _ xorm.Cell) {
 	}
 }
 
+// GetContent gets associated public key content.
+func (k *DeployKey) GetContent() error {
+	pkey, err := GetPublicKeyByID(k.KeyID)
+	if err != nil {
+		return err
+	}
+	k.Content = pkey.Content
+	return nil
+}
+
 func checkDeployKey(e Engine, keyID, repoID int64, name string) error {
 	// Note: We want error detail, not just true or false here.
 	has, err := e.Where("key_id=? AND repo_id=?", keyID, repoID).Get(new(DeployKey))
@@ -574,18 +564,19 @@ func checkDeployKey(e Engine, keyID, repoID int64, name string) error {
 }
 
 // addDeployKey adds new key-repo relation.
-func addDeployKey(e *xorm.Session, keyID, repoID int64, name, fingerprint string) (err error) {
-	if err = checkDeployKey(e, keyID, repoID, name); err != nil {
-		return err
+func addDeployKey(e *xorm.Session, keyID, repoID int64, name, fingerprint string) (*DeployKey, error) {
+	if err := checkDeployKey(e, keyID, repoID, name); err != nil {
+		return nil, err
 	}
 
-	_, err = e.Insert(&DeployKey{
+	key := &DeployKey{
 		KeyID:       keyID,
 		RepoID:      repoID,
 		Name:        name,
 		Fingerprint: fingerprint,
-	})
-	return err
+	}
+	_, err := e.Insert(key)
+	return key, err
 }
 
 // HasDeployKey returns true if public key is a deploy key of given repository.
@@ -595,39 +586,52 @@ func HasDeployKey(keyID, repoID int64) bool {
 }
 
 // AddDeployKey add new deploy key to database and authorized_keys file.
-func AddDeployKey(repoID int64, name, content string) (err error) {
-	if err = checkKeyContent(content); err != nil {
-		return err
+func AddDeployKey(repoID int64, name, content string) (*DeployKey, error) {
+	if err := checkKeyContent(content); err != nil {
+		return nil, err
 	}
 
-	key := &PublicKey{
+	pkey := &PublicKey{
 		Content: content,
 		Mode:    ACCESS_MODE_READ,
 		Type:    KEY_TYPE_DEPLOY,
 	}
-	has, err := x.Get(key)
+	has, err := x.Get(pkey)
 	if err != nil {
-		return err
+		return nil, err
 	}
 
 	sess := x.NewSession()
 	defer sessionRelease(sess)
 	if err = sess.Begin(); err != nil {
-		return err
+		return nil, err
 	}
 
 	// First time use this deploy key.
 	if !has {
-		if err = addKey(sess, key); err != nil {
-			return nil
+		if err = addKey(sess, pkey); err != nil {
+			return nil, fmt.Errorf("addKey: %v", err)
 		}
 	}
 
-	if err = addDeployKey(sess, key.ID, repoID, name, key.Fingerprint); err != nil {
-		return err
+	key, err := addDeployKey(sess, pkey.ID, repoID, name, pkey.Fingerprint)
+	if err != nil {
+		return nil, fmt.Errorf("addDeployKey: %v", err)
 	}
 
-	return sess.Commit()
+	return key, sess.Commit()
+}
+
+// GetDeployKeyByID returns deploy key by given ID.
+func GetDeployKeyByID(id int64) (*DeployKey, error) {
+	key := new(DeployKey)
+	has, err := x.Id(id).Get(key)
+	if err != nil {
+		return nil, err
+	} else if !has {
+		return nil, ErrDeployKeyNotExist{id, 0, 0}
+	}
+	return key, nil
 }
 
 // GetDeployKeyByRepo returns deploy key by given public key ID and repository ID.
@@ -636,8 +640,13 @@ func GetDeployKeyByRepo(keyID, repoID int64) (*DeployKey, error) {
 		KeyID:  keyID,
 		RepoID: repoID,
 	}
-	_, err := x.Get(key)
-	return key, err
+	has, err := x.Get(key)
+	if err != nil {
+		return nil, err
+	} else if !has {
+		return nil, ErrDeployKeyNotExist{0, keyID, repoID}
+	}
+	return key, nil
 }
 
 // UpdateDeployKey updates deploy key information.

+ 50 - 16
models/pull.go

@@ -166,43 +166,49 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
 
 	var stderr string
 	if _, stderr, err = process.ExecTimeout(5*time.Minute,
-		fmt.Sprintf("PullRequest.Merge(git clone): %s", tmpBasePath),
+		fmt.Sprintf("PullRequest.Merge (git clone): %s", tmpBasePath),
 		"git", "clone", baseGitRepo.Path, tmpBasePath); err != nil {
 		return fmt.Errorf("git clone: %s", stderr)
 	}
 
 	// Check out base branch.
 	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
-		fmt.Sprintf("PullRequest.Merge(git checkout): %s", tmpBasePath),
+		fmt.Sprintf("PullRequest.Merge (git checkout): %s", tmpBasePath),
 		"git", "checkout", pr.BaseBranch); err != nil {
 		return fmt.Errorf("git checkout: %s", stderr)
 	}
 
 	// Add head repo remote.
 	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
-		fmt.Sprintf("PullRequest.Merge(git remote add): %s", tmpBasePath),
+		fmt.Sprintf("PullRequest.Merge (git remote add): %s", tmpBasePath),
 		"git", "remote", "add", "head_repo", headRepoPath); err != nil {
-		return fmt.Errorf("git remote add[%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
+		return fmt.Errorf("git remote add [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
 	}
 
 	// Merge commits.
 	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
-		fmt.Sprintf("PullRequest.Merge(git fetch): %s", tmpBasePath),
+		fmt.Sprintf("PullRequest.Merge (git fetch): %s", tmpBasePath),
 		"git", "fetch", "head_repo"); err != nil {
-		return fmt.Errorf("git fetch[%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
+		return fmt.Errorf("git fetch [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
 	}
 
 	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
-		fmt.Sprintf("PullRequest.Merge(git merge): %s", tmpBasePath),
-		"git", "merge", "--no-ff", "-m",
-		fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.HeadUserName, pr.HeadRepo.Name, pr.BaseBranch),
-		"head_repo/"+pr.HeadBranch); err != nil {
-		return fmt.Errorf("git merge[%s]: %s", tmpBasePath, stderr)
+		fmt.Sprintf("PullRequest.Merge (git merge --no-ff --no-commit): %s", tmpBasePath),
+		"git", "merge", "--no-ff", "--no-commit", "head_repo/"+pr.HeadBranch); err != nil {
+		return fmt.Errorf("git merge --no-ff --no-commit [%s]: %v - %s", tmpBasePath, err, stderr)
+	}
+
+	sig := doer.NewGitSig()
+	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
+		fmt.Sprintf("PullRequest.Merge (git merge): %s", tmpBasePath),
+		"git", "commit", fmt.Sprintf("--author='%s <%s>'", sig.Name, sig.Email),
+		"-m", fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.HeadUserName, pr.HeadRepo.Name, pr.BaseBranch)); err != nil {
+		return fmt.Errorf("git commit [%s]: %v - %s", tmpBasePath, err, stderr)
 	}
 
 	// Push back to upstream.
 	if _, stderr, err = process.ExecDir(-1, tmpBasePath,
-		fmt.Sprintf("PullRequest.Merge(git push): %s", tmpBasePath),
+		fmt.Sprintf("PullRequest.Merge (git push): %s", tmpBasePath),
 		"git", "push", baseGitRepo.Path, pr.BaseBranch); err != nil {
 		return fmt.Errorf("git push: %s", stderr)
 	}
@@ -218,6 +224,7 @@ var patchConflicts = []string{
 }
 
 // testPatch checks if patch can be merged to base repository without conflit.
+// FIXME: make a mechanism to clean up stable local copies.
 func (pr *PullRequest) testPatch() (err error) {
 	if pr.BaseRepo == nil {
 		pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID)
@@ -243,14 +250,23 @@ func (pr *PullRequest) testPatch() (err error) {
 		return fmt.Errorf("UpdateLocalCopy: %v", err)
 	}
 
-	pr.Status = PULL_REQUEST_STATUS_CHECKING
+	// Checkout base branch.
 	_, stderr, err := process.ExecDir(-1, pr.BaseRepo.LocalCopyPath(),
+		fmt.Sprintf("PullRequest.Merge(git checkout): %s", pr.BaseRepo.ID),
+		"git", "checkout", pr.BaseBranch)
+	if err != nil {
+		return fmt.Errorf("git checkout: %s", stderr)
+	}
+
+	pr.Status = PULL_REQUEST_STATUS_CHECKING
+	_, stderr, err = process.ExecDir(-1, pr.BaseRepo.LocalCopyPath(),
 		fmt.Sprintf("testPatch(git apply --check): %d", pr.BaseRepo.ID),
 		"git", "apply", "--check", patchPath)
 	if err != nil {
 		for i := range patchConflicts {
 			if strings.Contains(stderr, patchConflicts[i]) {
 				log.Trace("PullRequest[%d].testPatch(apply): has conflit", pr.ID)
+				fmt.Println(stderr)
 				pr.Status = PULL_REQUEST_STATUS_CONFLICT
 				return nil
 			}
@@ -385,16 +401,18 @@ func (pr *PullRequest) UpdateCols(cols ...string) error {
 var PullRequestQueue = NewUniqueQueue(setting.Repository.PullRequestQueueLength)
 
 // UpdatePatch generates and saves a new patch.
-func (pr *PullRequest) UpdatePatch() error {
-	if err := pr.GetHeadRepo(); err != nil {
+func (pr *PullRequest) UpdatePatch() (err error) {
+	if err = pr.GetHeadRepo(); err != nil {
 		return fmt.Errorf("GetHeadRepo: %v", err)
 	} else if pr.HeadRepo == nil {
 		log.Trace("PullRequest[%d].UpdatePatch: ignored cruppted data", pr.ID)
 		return nil
 	}
 
-	if err := pr.GetBaseRepo(); err != nil {
+	if err = pr.GetBaseRepo(); err != nil {
 		return fmt.Errorf("GetBaseRepo: %v", err)
+	} else if err = pr.BaseRepo.GetOwner(); err != nil {
+		return fmt.Errorf("GetOwner: %v", err)
 	}
 
 	headRepoPath, err := pr.HeadRepo.RepoPath()
@@ -407,6 +425,22 @@ func (pr *PullRequest) UpdatePatch() error {
 		return fmt.Errorf("OpenRepository: %v", err)
 	}
 
+	// Add a temporary remote.
+	tmpRemote := com.ToStr(time.Now().UnixNano())
+	if err = headGitRepo.AddRemote(tmpRemote, RepoPath(pr.BaseRepo.Owner.Name, pr.BaseRepo.Name)); err != nil {
+		return fmt.Errorf("AddRemote: %v", err)
+	}
+	defer func() {
+		headGitRepo.RemoveRemote(tmpRemote)
+	}()
+	remoteBranch := "remotes/" + tmpRemote + "/" + pr.BaseBranch
+	pr.MergeBase, err = headGitRepo.GetMergeBase(remoteBranch, pr.HeadBranch)
+	if err != nil {
+		return fmt.Errorf("GetMergeBase: %v", err)
+	} else if err = pr.Update(); err != nil {
+		return fmt.Errorf("Update: %v", err)
+	}
+
 	patch, err := headGitRepo.GetPatch(pr.MergeBase, pr.HeadBranch)
 	if err != nil {
 		return fmt.Errorf("GetPatch: %v", err)

+ 61 - 22
models/release.go

@@ -5,7 +5,7 @@
 package models
 
 import (
-	"errors"
+	"fmt"
 	"sort"
 	"strings"
 	"time"
@@ -13,18 +13,14 @@ import (
 	"github.com/go-xorm/xorm"
 
 	"github.com/gogits/gogs/modules/git"
-)
-
-var (
-	ErrReleaseAlreadyExist = errors.New("Release already exist")
-	ErrReleaseNotExist     = errors.New("Release does not exist")
+	"github.com/gogits/gogs/modules/process"
 )
 
 // Release represents a release of repository.
 type Release struct {
-	Id               int64
-	RepoId           int64
-	PublisherId      int64
+	ID               int64 `xorm:"pk autoincr"`
+	RepoID           int64
+	PublisherID      int64
 	Publisher        *User `xorm:"-"`
 	TagName          string
 	LowerTagName     string
@@ -47,12 +43,12 @@ func (r *Release) AfterSet(colName string, _ xorm.Cell) {
 }
 
 // IsReleaseExist returns true if release with given tag name already exists.
-func IsReleaseExist(repoId int64, tagName string) (bool, error) {
+func IsReleaseExist(repoID int64, tagName string) (bool, error) {
 	if len(tagName) == 0 {
 		return false, nil
 	}
 
-	return x.Get(&Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)})
+	return x.Get(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)})
 }
 
 func createTag(gitRepo *git.Repository, rel *Release) error {
@@ -64,7 +60,7 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
 				return err
 			}
 
-			if err = gitRepo.CreateTag(rel.TagName, commit.Id.String()); err != nil {
+			if err = gitRepo.CreateTag(rel.TagName, commit.ID.String()); err != nil {
 				return err
 			}
 		} else {
@@ -84,11 +80,11 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
 
 // CreateRelease creates a new release of repository.
 func CreateRelease(gitRepo *git.Repository, rel *Release) error {
-	isExist, err := IsReleaseExist(rel.RepoId, rel.TagName)
+	isExist, err := IsReleaseExist(rel.RepoID, rel.TagName)
 	if err != nil {
 		return err
 	} else if isExist {
-		return ErrReleaseAlreadyExist
+		return ErrReleaseAlreadyExist{rel.TagName}
 	}
 
 	if err = createTag(gitRepo, rel); err != nil {
@@ -100,22 +96,35 @@ func CreateRelease(gitRepo *git.Repository, rel *Release) error {
 }
 
 // GetRelease returns release by given ID.
-func GetRelease(repoId int64, tagName string) (*Release, error) {
-	isExist, err := IsReleaseExist(repoId, tagName)
+func GetRelease(repoID int64, tagName string) (*Release, error) {
+	isExist, err := IsReleaseExist(repoID, tagName)
 	if err != nil {
 		return nil, err
 	} else if !isExist {
-		return nil, ErrReleaseNotExist
+		return nil, ErrReleaseNotExist{0, tagName}
 	}
 
-	rel := &Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)}
+	rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}
 	_, err = x.Get(rel)
 	return rel, err
 }
 
-// GetReleasesByRepoId returns a list of releases of repository.
-func GetReleasesByRepoId(repoId int64) (rels []*Release, err error) {
-	err = x.Desc("created").Find(&rels, Release{RepoId: repoId})
+// GetReleaseByID returns release with given ID.
+func GetReleaseByID(id int64) (*Release, error) {
+	rel := new(Release)
+	has, err := x.Id(id).Get(rel)
+	if err != nil {
+		return nil, err
+	} else if !has {
+		return nil, ErrReleaseNotExist{id, ""}
+	}
+
+	return rel, nil
+}
+
+// GetReleasesByRepoID returns a list of releases of repository.
+func GetReleasesByRepoID(repoID int64) (rels []*Release, err error) {
+	err = x.Desc("created").Find(&rels, Release{RepoID: repoID})
 	return rels, err
 }
 
@@ -150,6 +159,36 @@ func UpdateRelease(gitRepo *git.Repository, rel *Release) (err error) {
 	if err = createTag(gitRepo, rel); err != nil {
 		return err
 	}
-	_, err = x.Id(rel.Id).AllCols().Update(rel)
+	_, err = x.Id(rel.ID).AllCols().Update(rel)
 	return err
 }
+
+// DeleteReleaseByID deletes a release and corresponding Git tag by given ID.
+func DeleteReleaseByID(id int64) error {
+	rel, err := GetReleaseByID(id)
+	if err != nil {
+		return fmt.Errorf("GetReleaseByID: %v", err)
+	}
+
+	repo, err := GetRepositoryByID(rel.RepoID)
+	if err != nil {
+		return fmt.Errorf("GetRepositoryByID: %v", err)
+	}
+
+	repoPath, err := repo.RepoPath()
+	if err != nil {
+		return fmt.Errorf("RepoPath: %v", err)
+	}
+
+	_, stderr, err := process.ExecDir(-1, repoPath, fmt.Sprintf("DeleteReleaseByID (git tag -d): %d", rel.ID),
+		"git", "tag", "-d", rel.TagName)
+	if err != nil && !strings.Contains(stderr, "not found") {
+		return fmt.Errorf("git tag -d: %v - %s", err, stderr)
+	}
+
+	if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
+		return fmt.Errorf("Delete: %v", err)
+	}
+
+	return nil
+}

+ 139 - 58
models/repo.go

@@ -17,12 +17,14 @@ import (
 	"regexp"
 	"sort"
 	"strings"
+	"sync"
 	"time"
 	"unicode/utf8"
 
 	"github.com/Unknwon/cae/zip"
 	"github.com/Unknwon/com"
 	"github.com/go-xorm/xorm"
+	"gopkg.in/ini.v1"
 
 	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/bindata"
@@ -48,7 +50,7 @@ var (
 	Gitignores, Licenses, Readmes []string
 
 	// Maximum items per page in forks, watchers and stars of a repo
-	ItemsPerPage = 54
+	ItemsPerPage = 40
 )
 
 func LoadRepoConfig() {
@@ -319,7 +321,7 @@ func (repo *Repository) UpdateLocalCopy() error {
 		}
 	} else {
 		_, stderr, err := process.ExecDir(-1, localPath,
-			fmt.Sprintf("UpdateLocalCopy(git pull): %s", repoPath), "git", "pull")
+			fmt.Sprintf("UpdateLocalCopy(git pull --all): %s", repoPath), "git", "pull", "--all")
 		if err != nil {
 			return fmt.Errorf("git pull: %v - %s", err, stderr)
 		}
@@ -379,11 +381,11 @@ func (repo *Repository) CloneLink() (cl CloneLink, err error) {
 	}
 
 	if setting.SSHPort != 22 {
-		cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSHDomain, setting.SSHPort, repo.Owner.LowerName, repo.LowerName)
+		cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSHDomain, setting.SSHPort, repo.Owner.Name, repo.Name)
 	} else {
-		cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.LowerName, repo.LowerName)
+		cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.Name, repo.Name)
 	}
-	cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.LowerName, repo.LowerName)
+	cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.Name, repo.Name)
 	return cl, nil
 }
 
@@ -537,6 +539,17 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 		return repo, fmt.Errorf("create update hook: %v", err)
 	}
 
+	// Clean up mirror info which prevents "push --all".
+	configPath := filepath.Join(repoPath, "/config")
+	cfg, err := ini.Load(configPath)
+	if err != nil {
+		return repo, fmt.Errorf("open config file: %v", err)
+	}
+	cfg.DeleteSection("remote \"origin\"")
+	if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
+		return repo, fmt.Errorf("save config file: %v", err)
+	}
+
 	// Check if repository is empty.
 	_, stderr, err = com.ExecCmdDir(repoPath, "git", "log", "-1")
 	if err != nil {
@@ -563,20 +576,20 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 func initRepoCommit(tmpPath string, sig *git.Signature) (err error) {
 	var stderr string
 	if _, stderr, err = process.ExecDir(-1,
-		tmpPath, fmt.Sprintf("initRepoCommit(git add): %s", tmpPath),
+		tmpPath, fmt.Sprintf("initRepoCommit (git add): %s", tmpPath),
 		"git", "add", "--all"); err != nil {
 		return fmt.Errorf("git add: %s", stderr)
 	}
 
 	if _, stderr, err = process.ExecDir(-1,
-		tmpPath, fmt.Sprintf("initRepoCommit(git commit): %s", tmpPath),
+		tmpPath, fmt.Sprintf("initRepoCommit (git commit): %s", tmpPath),
 		"git", "commit", fmt.Sprintf("--author='%s <%s>'", sig.Name, sig.Email),
 		"-m", "initial commit"); err != nil {
 		return fmt.Errorf("git commit: %s", stderr)
 	}
 
 	if _, stderr, err = process.ExecDir(-1,
-		tmpPath, fmt.Sprintf("initRepoCommit(git push): %s", tmpPath),
+		tmpPath, fmt.Sprintf("initRepoCommit (git push): %s", tmpPath),
 		"git", "push", "origin", "master"); err != nil {
 		return fmt.Errorf("git push: %s", stderr)
 	}
@@ -587,7 +600,7 @@ func createUpdateHook(repoPath string) error {
 	hookPath := path.Join(repoPath, "hooks/update")
 	os.MkdirAll(path.Dir(hookPath), os.ModePerm)
 	return ioutil.WriteFile(hookPath,
-		[]byte(fmt.Sprintf(_TPL_UPDATE_HOOK, setting.ScriptType, "\""+appPath+"\"", setting.CustomConf)), 0777)
+		[]byte(fmt.Sprintf(_TPL_UPDATE_HOOK, setting.ScriptType, "\""+setting.AppPath+"\"", setting.CustomConf)), 0777)
 }
 
 type CreateRepoOptions struct {
@@ -687,7 +700,7 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
 	// Init bare new repository.
 	os.MkdirAll(repoPath, os.ModePerm)
 	_, stderr, err := process.ExecDir(-1, repoPath,
-		fmt.Sprintf("initRepository(git init --bare): %s", repoPath), "git", "init", "--bare")
+		fmt.Sprintf("initRepository (git init --bare): %s", repoPath), "git", "init", "--bare")
 	if err != nil {
 		return fmt.Errorf("git init --bare: %v - %s", err, stderr)
 	}
@@ -898,9 +911,9 @@ func TransferOwnership(u *User, newOwnerName string, repo *Repository) error {
 	}
 
 	// Remove redundant collaborators.
-	collaborators, err := repo.GetCollaborators()
+	collaborators, err := repo.getCollaborators(sess)
 	if err != nil {
-		return fmt.Errorf("GetCollaborators: %v", err)
+		return fmt.Errorf("getCollaborators: %v", err)
 	}
 
 	// Dummy object.
@@ -936,9 +949,9 @@ func TransferOwnership(u *User, newOwnerName string, repo *Repository) error {
 	}
 
 	if newOwner.IsOrganization() {
-		t, err := newOwner.GetOwnerTeam()
+		t, err := newOwner.getOwnerTeam(sess)
 		if err != nil {
-			return fmt.Errorf("GetOwnerTeam: %v", err)
+			return fmt.Errorf("getOwnerTeam: %v", err)
 		} else if err = t.addRepository(sess, repo); err != nil {
 			return fmt.Errorf("add to owner team: %v", err)
 		}
@@ -1104,7 +1117,7 @@ func DeleteRepository(uid, repoID int64) error {
 		return err
 	} else if _, err = sess.Delete(&Milestone{RepoID: repoID}); err != nil {
 		return err
-	} else if _, err = sess.Delete(&Release{RepoId: repoID}); err != nil {
+	} else if _, err = sess.Delete(&Release{RepoID: repoID}); err != nil {
 		return err
 	} else if _, err = sess.Delete(&Collaboration{RepoID: repoID}); err != nil {
 		return err
@@ -1304,7 +1317,7 @@ func DeleteRepositoryArchives() error {
 			repo := bean.(*Repository)
 			repoPath, err := repo.RepoPath()
 			if err != nil {
-				if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepositoryArchives[%d]: %v", repo.ID, err)); err2 != nil {
+				if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepositoryArchives.RepoPath [%d]: %v", repo.ID, err)); err2 != nil {
 					log.Error(4, "CreateRepositoryNotice: %v", err2)
 				}
 				return nil
@@ -1313,32 +1326,110 @@ func DeleteRepositoryArchives() error {
 		})
 }
 
+// DeleteMissingRepositories deletes all repository records that lost Git files.
+func DeleteMissingRepositories() error {
+	repos := make([]*Repository, 0, 5)
+	if err := x.Where("id > 0").Iterate(new(Repository),
+		func(idx int, bean interface{}) error {
+			repo := bean.(*Repository)
+			repoPath, err := repo.RepoPath()
+			if err != nil {
+				if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepositoryArchives.RepoPath [%d]: %v", repo.ID, err)); err2 != nil {
+					log.Error(4, "CreateRepositoryNotice: %v", err2)
+				}
+				return nil
+			}
+
+			if !com.IsDir(repoPath) {
+				repos = append(repos, repo)
+			}
+			return nil
+		}); err != nil {
+		if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteMissingRepositories: %v", err)); err2 != nil {
+			log.Error(4, "CreateRepositoryNotice: %v", err2)
+		}
+		return nil
+	}
+
+	if len(repos) == 0 {
+		return nil
+	}
+
+	for _, repo := range repos {
+		log.Trace("Deleting %d/%d...", repo.OwnerID, repo.ID)
+		if err := DeleteRepository(repo.OwnerID, repo.ID); err != nil {
+			if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepository [%d]: %v", repo.ID, err)); err2 != nil {
+				log.Error(4, "CreateRepositoryNotice: %v", err2)
+			}
+		}
+	}
+	return nil
+}
+
 // RewriteRepositoryUpdateHook rewrites all repositories' update hook.
 func RewriteRepositoryUpdateHook() error {
 	return x.Where("id > 0").Iterate(new(Repository),
 		func(idx int, bean interface{}) error {
 			repo := bean.(*Repository)
-			if err := repo.GetOwner(); err != nil {
-				return err
+			repoPath, err := repo.RepoPath()
+			if err != nil {
+				if err2 := CreateRepositoryNotice(fmt.Sprintf("RewriteRepositoryUpdateHook[%d]: %v", repo.ID, err)); err2 != nil {
+					log.Error(4, "CreateRepositoryNotice: %v", err2)
+				}
+				return nil
 			}
-			return createUpdateHook(RepoPath(repo.Owner.Name, repo.Name))
+			return createUpdateHook(repoPath)
 		})
 }
 
-var (
-	// Prevent duplicate running tasks.
-	isMirrorUpdating = false
-	isGitFscking     = false
-	isCheckingRepos  = false
+// statusPool represents a pool of status with true/false.
+type statusPool struct {
+	lock sync.RWMutex
+	pool map[string]bool
+}
+
+// Start sets value of given name to true in the pool.
+func (p *statusPool) Start(name string) {
+	p.lock.Lock()
+	defer p.lock.Unlock()
+
+	p.pool[name] = true
+}
+
+// Stop sets value of given name to false in the pool.
+func (p *statusPool) Stop(name string) {
+	p.lock.Lock()
+	defer p.lock.Unlock()
+
+	p.pool[name] = false
+}
+
+// IsRunning checks if value of given name is set to true in the pool.
+func (p *statusPool) IsRunning(name string) bool {
+	p.lock.RLock()
+	defer p.lock.RUnlock()
+
+	return p.pool[name]
+}
+
+// Prevent duplicate running tasks.
+var taskStatusPool = &statusPool{
+	pool: make(map[string]bool),
+}
+
+const (
+	_MIRROR_UPDATE = "mirror_update"
+	_GIT_FSCK      = "git_fsck"
+	_CHECK_REPOs   = "check_repos"
 )
 
 // MirrorUpdate checks and updates mirror repositories.
 func MirrorUpdate() {
-	if isMirrorUpdating {
+	if taskStatusPool.IsRunning(_MIRROR_UPDATE) {
 		return
 	}
-	isMirrorUpdating = true
-	defer func() { isMirrorUpdating = false }()
+	taskStatusPool.Start(_MIRROR_UPDATE)
+	defer taskStatusPool.Stop(_MIRROR_UPDATE)
 
 	log.Trace("Doing: MirrorUpdate")
 
@@ -1386,11 +1477,11 @@ func MirrorUpdate() {
 
 // GitFsck calls 'git fsck' to check repository health.
 func GitFsck() {
-	if isGitFscking {
+	if taskStatusPool.IsRunning(_GIT_FSCK) {
 		return
 	}
-	isGitFscking = true
-	defer func() { isGitFscking = false }()
+	taskStatusPool.Start(_GIT_FSCK)
+	defer taskStatusPool.Stop(_GIT_FSCK)
 
 	log.Trace("Doing: GitFsck")
 
@@ -1455,11 +1546,11 @@ func repoStatsCheck(checker *repoChecker) {
 }
 
 func CheckRepoStats() {
-	if isCheckingRepos {
+	if taskStatusPool.IsRunning(_CHECK_REPOs) {
 		return
 	}
-	isCheckingRepos = true
-	defer func() { isCheckingRepos = false }()
+	taskStatusPool.Start(_CHECK_REPOs)
+	defer taskStatusPool.Stop(_CHECK_REPOs)
 
 	log.Trace("Doing: CheckRepoStats")
 
@@ -1680,25 +1771,21 @@ func WatchRepo(uid, repoId int64, watch bool) (err error) {
 	return watchRepo(x, uid, repoId, watch)
 }
 
-func getWatchers(e Engine, rid int64) ([]*Watch, error) {
+func getWatchers(e Engine, repoID int64) ([]*Watch, error) {
 	watches := make([]*Watch, 0, 10)
-	err := e.Find(&watches, &Watch{RepoID: rid})
-	return watches, err
+	return watches, e.Find(&watches, &Watch{RepoID: repoID})
 }
 
 // GetWatchers returns all watchers of given repository.
-func GetWatchers(rid int64) ([]*Watch, error) {
-	return getWatchers(x, rid)
+func GetWatchers(repoID int64) ([]*Watch, error) {
+	return getWatchers(x, repoID)
 }
 
-// Repository.GetWatchers returns all users watching given repository.
-func (repo *Repository) GetWatchers(offset int) ([]*User, error) {
-	users := make([]*User, 0, 10)
-	offset = (offset - 1) * ItemsPerPage
-
-	err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "watch", "user.id=watch.user_id").Find(&users)
-
-	return users, err
+// Repository.GetWatchers returns range of users watching given repository.
+func (repo *Repository) GetWatchers(page int) ([]*User, error) {
+	users := make([]*User, 0, ItemsPerPage)
+	return users, x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).
+		Where("repo_id=?", repo.ID).Join("LEFT", "watch", "user.id=watch.user_id").Find(&users)
 }
 
 func notifyWatchers(e Engine, act *Action) error {
@@ -1778,13 +1865,10 @@ func IsStaring(uid, repoId int64) bool {
 	return has
 }
 
-func (repo *Repository) GetStars(offset int) ([]*User, error) {
-	users := make([]*User, 0, 10)
-	offset = (offset - 1) * ItemsPerPage
-
-	err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "star", "user.id=star.uid").Find(&users)
-
-	return users, err
+func (repo *Repository) GetStargazers(page int) ([]*User, error) {
+	users := make([]*User, 0, ItemsPerPage)
+	return users, x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).
+		Where("repo_id=?", repo.ID).Join("LEFT", "star", "user.id=star.uid").Find(&users)
 }
 
 // ___________           __
@@ -1856,9 +1940,6 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
 }
 
 func (repo *Repository) GetForks() ([]*Repository, error) {
-	forks := make([]*Repository, 0, 10)
-
-	err := x.Find(&forks, &Repository{ForkID: repo.ID})
-
-	return forks, err
+	forks := make([]*Repository, 0, repo.NumForks)
+	return forks, x.Find(&forks, &Repository{ForkID: repo.ID})
 }

+ 20 - 20
models/update.go

@@ -10,7 +10,6 @@ import (
 	"os/exec"
 	"strings"
 
-	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/git"
 	"github.com/gogits/gogs/modules/log"
 )
@@ -28,6 +27,7 @@ func AddUpdateTask(task *UpdateTask) error {
 	return err
 }
 
+// GetUpdateTaskByUUID returns update task by given UUID.
 func GetUpdateTaskByUUID(uuid string) (*UpdateTask, error) {
 	task := &UpdateTask{
 		UUID: uuid,
@@ -36,7 +36,7 @@ func GetUpdateTaskByUUID(uuid string) (*UpdateTask, error) {
 	if err != nil {
 		return nil, err
 	} else if !has {
-		return nil, fmt.Errorf("task does not exist: %s", uuid)
+		return nil, ErrUpdateTaskNotExist{uuid}
 	}
 	return task, nil
 }
@@ -46,10 +46,10 @@ func DeleteUpdateTaskByUUID(uuid string) error {
 	return err
 }
 
-func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName string, userId int64) error {
-	isNew := strings.HasPrefix(oldCommitId, "0000000")
+func Update(refName, oldCommitID, newCommitID, userName, repoUserName, repoName string, userID int64) error {
+	isNew := strings.HasPrefix(oldCommitID, "0000000")
 	if isNew &&
-		strings.HasPrefix(newCommitId, "0000000") {
+		strings.HasPrefix(newCommitID, "0000000") {
 		return fmt.Errorf("old rev and new rev both 000000")
 	}
 
@@ -59,23 +59,23 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 	gitUpdate.Dir = f
 	gitUpdate.Run()
 
-	isDel := strings.HasPrefix(newCommitId, "0000000")
+	isDel := strings.HasPrefix(newCommitID, "0000000")
 	if isDel {
-		log.GitLogger.Info("del rev", refName, "from", userName+"/"+repoName+".git", "by", userId)
+		log.GitLogger.Info("del rev", refName, "from", userName+"/"+repoName+".git", "by", userID)
 		return nil
 	}
 
-	repo, err := git.OpenRepository(f)
+	gitRepo, err := git.OpenRepository(f)
 	if err != nil {
 		return fmt.Errorf("runUpdate.Open repoId: %v", err)
 	}
 
-	ru, err := GetUserByName(repoUserName)
+	user, err := GetUserByName(repoUserName)
 	if err != nil {
 		return fmt.Errorf("runUpdate.GetUserByName: %v", err)
 	}
 
-	repos, err := GetRepositoryByName(ru.Id, repoName)
+	repo, err := GetRepositoryByName(user.Id, repoName)
 	if err != nil {
 		return fmt.Errorf("runUpdate.GetRepositoryByName userId: %v", err)
 	}
@@ -83,7 +83,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 	// Push tags.
 	if strings.HasPrefix(refName, "refs/tags/") {
 		tagName := git.RefEndName(refName)
-		tag, err := repo.GetTag(tagName)
+		tag, err := gitRepo.GetTag(tagName)
 		if err != nil {
 			log.GitLogger.Fatal(4, "runUpdate.GetTag: %v", err)
 		}
@@ -99,16 +99,16 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 			actEmail = cmt.Committer.Email
 		}
 
-		commit := &base.PushCommits{}
+		commit := &PushCommits{}
 
-		if err = CommitRepoAction(userId, ru.Id, userName, actEmail,
-			repos.ID, repoUserName, repoName, refName, commit, oldCommitId, newCommitId); err != nil {
+		if err = CommitRepoAction(userID, user.Id, userName, actEmail,
+			repo.ID, repoUserName, repoName, refName, commit, oldCommitID, newCommitID); err != nil {
 			log.GitLogger.Fatal(4, "CommitRepoAction: %s/%s:%v", repoUserName, repoName, err)
 		}
 		return err
 	}
 
-	newCommit, err := repo.GetCommit(newCommitId)
+	newCommit, err := gitRepo.GetCommit(newCommitID)
 	if err != nil {
 		return fmt.Errorf("runUpdate GetCommit of newCommitId: %v", err)
 	}
@@ -121,7 +121,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 			return fmt.Errorf("CommitsBefore: %v", err)
 		}
 	} else {
-		l, err = newCommit.CommitsBeforeUntil(oldCommitId)
+		l, err = newCommit.CommitsBeforeUntil(oldCommitID)
 		if err != nil {
 			return fmt.Errorf("CommitsBeforeUntil: %v", err)
 		}
@@ -132,7 +132,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 	}
 
 	// Push commits.
-	commits := make([]*base.PushCommit, 0)
+	commits := make([]*PushCommit, 0)
 	var actEmail string
 	for e := l.Front(); e != nil; e = e.Next() {
 		commit := e.Value.(*git.Commit)
@@ -140,15 +140,15 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 			actEmail = commit.Committer.Email
 		}
 		commits = append(commits,
-			&base.PushCommit{commit.Id.String(),
+			&PushCommit{commit.ID.String(),
 				commit.Message(),
 				commit.Author.Email,
 				commit.Author.Name,
 			})
 	}
 
-	if err = CommitRepoAction(userId, ru.Id, userName, actEmail,
-		repos.ID, repoUserName, repoName, refName, &base.PushCommits{l.Len(), commits, ""}, oldCommitId, newCommitId); err != nil {
+	if err = CommitRepoAction(userID, user.Id, userName, actEmail,
+		repo.ID, repoUserName, repoName, refName, &PushCommits{l.Len(), commits, "", nil}, oldCommitID, newCommitID); err != nil {
 		return fmt.Errorf("runUpdate.models.CommitRepoAction: %s/%s:%v", repoUserName, repoName, err)
 	}
 	return nil

+ 41 - 15
models/user.go

@@ -14,6 +14,7 @@ import (
 	"image"
 	"image/jpeg"
 	_ "image/jpeg"
+	"image/png"
 	"os"
 	"path"
 	"path/filepath"
@@ -75,9 +76,10 @@ type User struct {
 	LastRepoVisibility bool
 
 	// Permissions.
-	IsActive     bool
-	IsAdmin      bool
-	AllowGitHook bool
+	IsActive         bool
+	IsAdmin          bool
+	AllowGitHook     bool
+	AllowImportLocal bool // Allow migrate repository by local path
 
 	// Avatar.
 	Avatar          string `xorm:"VARCHAR(2048) NOT NULL"`
@@ -107,6 +109,22 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
 	}
 }
 
+// HasForkedRepo checks if user has already forked a repository with given ID.
+func (u *User) HasForkedRepo(repoID int64) bool {
+	_, has := HasForkedRepo(u.Id, repoID)
+	return has
+}
+
+// CanEditGitHook returns true if user can edit Git hooks.
+func (u *User) CanEditGitHook() bool {
+	return u.IsAdmin || u.AllowGitHook
+}
+
+// CanImportLocal returns true if user can migrate repository by local path.
+func (u *User) CanImportLocal() bool {
+	return u.IsAdmin || u.AllowImportLocal
+}
+
 // EmailAdresses is the list of all email addresses of a user. Can contain the
 // primary email address, but is not obligatory
 type EmailAddress struct {
@@ -242,14 +260,12 @@ func (u *User) ValidatePassword(passwd string) bool {
 // UploadAvatar saves custom avatar for user.
 // FIXME: split uploads to different subdirs in case we have massive users.
 func (u *User) UploadAvatar(data []byte) error {
-	u.UseCustomAvatar = true
-
 	img, _, err := image.Decode(bytes.NewReader(data))
 	if err != nil {
-		return err
+		return fmt.Errorf("Decode: %v", err)
 	}
 
-	m := resize.Resize(234, 234, img, resize.NearestNeighbor)
+	m := resize.Resize(290, 290, img, resize.NearestNeighbor)
 
 	sess := x.NewSession()
 	defer sessionRelease(sess)
@@ -257,19 +273,20 @@ func (u *User) UploadAvatar(data []byte) error {
 		return err
 	}
 
-	if _, err = sess.Id(u.Id).AllCols().Update(u); err != nil {
-		return err
+	u.UseCustomAvatar = true
+	if err = updateUser(sess, u); err != nil {
+		return fmt.Errorf("updateUser: %v", err)
 	}
 
 	os.MkdirAll(setting.AvatarUploadPath, os.ModePerm)
 	fw, err := os.Create(u.CustomAvatarPath())
 	if err != nil {
-		return err
+		return fmt.Errorf("Create: %v", err)
 	}
 	defer fw.Close()
 
-	if err = jpeg.Encode(fw, m, nil); err != nil {
-		return err
+	if err = png.Encode(fw, m); err != nil {
+		return fmt.Errorf("Encode: %v", err)
 	}
 
 	return sess.Commit()
@@ -356,6 +373,15 @@ func (u *User) DisplayName() string {
 	return u.Name
 }
 
+// ShortName returns shorted user name with given maximum length,
+// it adds "..." at the end if user name has more length than maximum.
+func (u *User) ShortName(length int) string {
+	if len(u.Name) < length {
+		return u.Name
+	}
+	return u.Name[:length] + "..."
+}
+
 // IsUserExist checks if given user name exist,
 // the user name should be noncased unique.
 // If uid is presented, then check will rule out that one,
@@ -717,9 +743,9 @@ func UserPath(userName string) string {
 	return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
 }
 
-func GetUserByKeyId(keyId int64) (*User, error) {
+func GetUserByKeyID(keyID int64) (*User, error) {
 	user := new(User)
-	has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyId).Get(user)
+	has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyID).Get(user)
 	if err != nil {
 		return nil, err
 	} else if !has {
@@ -980,7 +1006,7 @@ func GetUserByEmail(email string) (*User, error) {
 		return GetUserByID(emailAddress.UID)
 	}
 
-	return nil, ErrUserNotExist{0, "email"}
+	return nil, ErrUserNotExist{0, email}
 }
 
 // SearchUserByName returns given number of users whose name contains keyword.

+ 2 - 2
models/webhook.go

@@ -178,8 +178,8 @@ func GetActiveWebhooksByRepoID(repoID int64) (ws []*Webhook, err error) {
 	return ws, err
 }
 
-// GetWebhooksByRepoId returns all webhooks of repository.
-func GetWebhooksByRepoId(repoID int64) (ws []*Webhook, err error) {
+// GetWebhooksByRepoID returns all webhooks of repository.
+func GetWebhooksByRepoID(repoID int64) (ws []*Webhook, err error) {
 	err = x.Find(&ws, &Webhook{RepoID: repoID})
 	return ws, err
 }

+ 11 - 10
modules/auth/admin.go

@@ -24,16 +24,17 @@ func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors)
 }
 
 type AdminEditUserForm struct {
-	LoginType    string `binding:"Required"`
-	LoginName    string
-	FullName     string `binding:"MaxSize(100)"`
-	Email        string `binding:"Required;Email;MaxSize(254)"`
-	Password     string `binding:"MaxSize(255)"`
-	Website      string `binding:"MaxSize(50)"`
-	Location     string `binding:"MaxSize(50)"`
-	Active       bool
-	Admin        bool
-	AllowGitHook bool
+	LoginType        string `binding:"Required"`
+	LoginName        string
+	FullName         string `binding:"MaxSize(100)"`
+	Email            string `binding:"Required;Email;MaxSize(254)"`
+	Password         string `binding:"MaxSize(255)"`
+	Website          string `binding:"MaxSize(50)"`
+	Location         string `binding:"MaxSize(50)"`
+	Active           bool
+	Admin            bool
+	AllowGitHook     bool
+	AllowImportLocal bool
 }
 
 func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {

+ 1 - 1
modules/auth/ldap/ldap.go

@@ -130,7 +130,7 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str
 
 	l, err := ldapDial(ls)
 	if err != nil {
-		log.Error(4, "LDAP Connect error, %s:%v", ls.Host, err)
+		log.Error(4, "LDAP Connect error (%s): %v", ls.Host, err)
 		ls.Enabled = false
 		return "", "", "", false, false
 	}

+ 2 - 2
modules/auth/org.go

@@ -17,7 +17,7 @@ import (
 //         \/     /_____/     \/     \/         \/     \/                    \/
 
 type CreateOrgForm struct {
-	OrgName string `binding:"Required;AlphaDashDot;MaxSize(30)" locale:"org.org_name_holder"`
+	OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"`
 }
 
 func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
@@ -25,7 +25,7 @@ func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) bind
 }
 
 type UpdateOrgSettingForm struct {
-	Name        string `binding:"Required;AlphaDashDot;MaxSize(30)" locale:"org.org_name_holder"`
+	Name        string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"`
 	FullName    string `binding:"MaxSize(100)"`
 	Description string `binding:"MaxSize(255)"`
 	Website     string `binding:"Url;MaxSize(100)"`

+ 41 - 7
modules/auth/repo_form.go

@@ -5,8 +5,14 @@
 package auth
 
 import (
+	"net/url"
+	"strings"
+
+	"github.com/Unknwon/com"
 	"github.com/go-macaron/binding"
 	"gopkg.in/macaron.v1"
+
+	"github.com/gogits/gogs/models"
 )
 
 // _______________________________________    _________.______________________ _______________.___.
@@ -37,8 +43,8 @@ type MigrateRepoForm struct {
 	AuthPassword string `json:"auth_password"`
 	Uid          int64  `json:"uid" binding:"Required"`
 	RepoName     string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
-	Private      bool   `json:"mirror"`
-	Mirror       bool   `json:"private"`
+	Mirror       bool   `json:"mirror"`
+	Private      bool   `json:"private"`
 	Description  string `json:"description" binding:"MaxSize(255)"`
 }
 
@@ -46,6 +52,34 @@ func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) bi
 	return validate(errs, ctx.Data, f, ctx.Locale)
 }
 
+// ParseRemoteAddr checks if given remote address is valid,
+// and returns composed URL with needed username and passowrd.
+// It also checks if given user has permission when remote address
+// is actually a local path.
+func (f MigrateRepoForm) ParseRemoteAddr(user *models.User) (string, error) {
+	remoteAddr := f.CloneAddr
+
+	// Remote address can be HTTP/HTTPS/Git URL or local path.
+	if strings.HasPrefix(remoteAddr, "http://") ||
+		strings.HasPrefix(remoteAddr, "https://") ||
+		strings.HasPrefix(remoteAddr, "git://") {
+		u, err := url.Parse(remoteAddr)
+		if err != nil {
+			return "", models.ErrInvalidCloneAddr{IsURLError: true}
+		}
+		if len(f.AuthUsername)+len(f.AuthPassword) > 0 {
+			u.User = url.UserPassword(f.AuthUsername, f.AuthPassword)
+		}
+		remoteAddr = u.String()
+	} else if !user.CanImportLocal() {
+		return "", models.ErrInvalidCloneAddr{IsPermissionDenied: true}
+	} else if !com.IsDir(remoteAddr) {
+		return "", models.ErrInvalidCloneAddr{IsInvalidPath: true}
+	}
+
+	return remoteAddr, nil
+}
+
 type RepoSettingForm struct {
 	RepoName    string `binding:"Required;AlphaDashDot;MaxSize(100)"`
 	Description string `binding:"MaxSize(255)"`
@@ -181,12 +215,12 @@ func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) bi
 //         \/     \/          \/     \/     \/     \/
 
 type NewReleaseForm struct {
-	TagName    string `form:"tag_name" binding:"Required"`
+	TagName    string `binding:"Required"`
 	Target     string `form:"tag_target" binding:"Required"`
-	Title      string `form:"title" binding:"Required"`
-	Content    string `form:"content" binding:"Required"`
-	Draft      string `form:"draft"`
-	Prerelease bool   `form:"prerelease"`
+	Title      string `binding:"Required"`
+	Content    string
+	Draft      string
+	Prerelease bool
 }
 
 func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {

+ 5 - 3
modules/avatar/avatar.go

@@ -39,6 +39,8 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
+//FIXME: remove cache module
+
 var gravatarSource string
 
 func UpdateGravatarSource() {
@@ -102,7 +104,7 @@ func New(hash string, cacheDir string) *Avatar {
 		expireDuration: time.Minute * 10,
 		reqParams: url.Values{
 			"d":    {"retro"},
-			"size": {"200"},
+			"size": {"290"},
 			"r":    {"pg"}}.Encode(),
 		imagePath: filepath.Join(cacheDir, hash+".image"), //maybe png or jpeg
 	}
@@ -153,7 +155,7 @@ func (this *Avatar) Encode(wr io.Writer, size int) (err error) {
 	if img, err = decodeImageFile(imgPath); err != nil {
 		return
 	}
-	m := resize.Resize(uint(size), 0, img, resize.NearestNeighbor)
+	m := resize.Resize(uint(size), 0, img, resize.Lanczos3)
 	return jpeg.Encode(wr, m, nil)
 }
 
@@ -192,7 +194,7 @@ func (this *service) mustInt(r *http.Request, defaultValue int, keys ...string)
 func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	urlPath := r.URL.Path
 	hash := urlPath[strings.LastIndex(urlPath, "/")+1:]
-	size := this.mustInt(r, 80, "s", "size") // default size = 80*80
+	size := this.mustInt(r, 290, "s", "size") // default size = 290*290
 
 	avatar := New(hash, this.cacheDir)
 	avatar.AlterImage = this.altImage

+ 19 - 0
modules/base/base.go

@@ -4,6 +4,12 @@
 
 package base
 
+import (
+	"os"
+	"os/exec"
+	"path/filepath"
+)
+
 const DOC_URL = "https://github.com/gogits/go-gogs-client/wiki"
 
 type (
@@ -11,3 +17,16 @@ type (
 )
 
 var GoGetMetas = make(map[string]bool)
+
+// ExecPath returns the executable path.
+func ExecPath() (string, error) {
+	file, err := exec.LookPath(os.Args[0])
+	if err != nil {
+		return "", err
+	}
+	p, err := filepath.Abs(file)
+	if err != nil {
+		return "", err
+	}
+	return p, nil
+}

+ 72 - 5
modules/base/markdown.go

@@ -14,6 +14,7 @@ import (
 	"regexp"
 	"strings"
 
+	"github.com/Unknwon/com"
 	"github.com/russross/blackfriday"
 	"golang.org/x/net/html"
 
@@ -99,12 +100,33 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte,
 	options.Renderer.Link(out, link, title, content)
 }
 
+var (
+	svgSuffix         = []byte(".svg")
+	svgSuffixWithMark = []byte(".svg?")
+)
+
 func (options *CustomRender) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) {
-	if len(link) > 0 && !isLink(link) {
-		link = []byte(path.Join(strings.Replace(options.urlPrefix, "/src/", "/raw/", 1), string(link)))
+	prefix := strings.Replace(options.urlPrefix, "/src/", "/raw/", 1)
+	if len(link) > 0 {
+		if isLink(link) {
+			// External link with .svg suffix usually means CI status.
+			if bytes.HasSuffix(link, svgSuffix) || bytes.Contains(link, svgSuffixWithMark) {
+				options.Renderer.Image(out, link, title, alt)
+				return
+			}
+		} else {
+			if link[0] != '/' {
+				prefix += "/"
+			}
+			link = []byte(prefix + string(link))
+		}
 	}
 
+	out.WriteString(`<a href="`)
+	out.Write(link)
+	out.WriteString(`">`)
 	options.Renderer.Image(out, link, title, alt)
+	out.WriteString("</a>")
 }
 
 var (
@@ -159,7 +181,21 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte {
 	return rawBytes
 }
 
+func cutoutVerbosePrefix(prefix string) string {
+	count := 0
+	for i := 0; i < len(prefix); i++ {
+		if prefix[i] == '/' {
+			count++
+		}
+		if count >= 3 {
+			return prefix[:i]
+		}
+	}
+	return prefix
+}
+
 func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte {
+	urlPrefix = cutoutVerbosePrefix(urlPrefix)
 	ms := issueIndexPattern.FindAll(rawBytes, -1)
 	for _, m := range ms {
 		var space string
@@ -209,11 +245,21 @@ func RenderRawMarkdown(body []byte, urlPrefix string) []byte {
 	return body
 }
 
+var (
+	leftAngleBracket  = []byte("</")
+	rightAngleBracket = []byte(">")
+)
+
+var noEndTags = []string{"img", "input", "br", "hr"}
+
 // PostProcessMarkdown treats different types of HTML differently,
 // and only renders special links for plain text blocks.
 func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte {
+	startTags := make([]string, 0, 5)
 	var buf bytes.Buffer
 	tokenizer := html.NewTokenizer(bytes.NewReader(rawHtml))
+
+OUTER_LOOP:
 	for html.ErrorToken != tokenizer.Next() {
 		token := tokenizer.Token()
 		switch token.Type {
@@ -225,17 +271,38 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte {
 			tagName := token.Data
 			// If this is an excluded tag, we skip processing all output until a close tag is encountered.
 			if strings.EqualFold("a", tagName) || strings.EqualFold("code", tagName) || strings.EqualFold("pre", tagName) {
+				stackNum := 1
 				for html.ErrorToken != tokenizer.Next() {
 					token = tokenizer.Token()
+
 					// Copy the token to the output verbatim
 					buf.WriteString(token.String())
-					// If this is the close tag, we are done
-					if html.EndTagToken == token.Type && strings.EqualFold(tagName, token.Data) {
-						break
+
+					if token.Type == html.StartTagToken {
+						stackNum++
+					}
+
+					// If this is the close tag to the outer-most, we are done
+					if token.Type == html.EndTagToken && strings.EqualFold(tagName, token.Data) {
+						stackNum--
+
+						if stackNum == 0 {
+							break
+						}
 					}
 				}
+				continue OUTER_LOOP
+			}
+
+			if !com.IsSliceContainsStr(noEndTags, token.Data) {
+				startTags = append(startTags, token.Data)
 			}
 
+		case html.EndTagToken:
+			buf.Write(leftAngleBracket)
+			buf.WriteString(startTags[len(startTags)-1])
+			buf.Write(rightAngleBracket)
+			startTags = startTags[:len(startTags)-1]
 		default:
 			buf.WriteString(token.String())
 		}

+ 18 - 0
modules/base/tool.go

@@ -23,6 +23,8 @@ import (
 	"github.com/Unknwon/i18n"
 	"github.com/microcosm-cc/bluemonday"
 
+	"github.com/gogits/chardet"
+
 	"github.com/gogits/gogs/modules/avatar"
 	"github.com/gogits/gogs/modules/setting"
 )
@@ -43,6 +45,22 @@ func EncodeSha1(str string) string {
 	return hex.EncodeToString(h.Sum(nil))
 }
 
+func ShortSha(sha1 string) string {
+	if len(sha1) == 40 {
+		return sha1[:10]
+	}
+	return sha1
+}
+
+func DetectEncoding(content []byte) (string, error) {
+	detector := chardet.NewTextDetector()
+	result, err := detector.DetectBest(content)
+	if result.Charset != "UTF-8" && len(setting.Repository.AnsiCharset) > 0 {
+		return setting.Repository.AnsiCharset, err
+	}
+	return result.Charset, err
+}
+
 func BasicAuthDecode(encoded string) (string, string, error) {
 	s, err := base64.StdEncoding.DecodeString(encoded)
 	if err != nil {

文件差异内容过多而无法显示
+ 0 - 0
modules/bindata/bindata.go


+ 1 - 1
modules/cron/parser_test.go

@@ -111,7 +111,7 @@ func TestSpecSchedule(t *testing.T) {
 			t.Error(err)
 		}
 		if !reflect.DeepEqual(actual, c.expected) {
-			t.Errorf("%s => (expected) %b != %b (actual)", c.expr, c.expected, actual)
+			t.Errorf("%s => (expected) %v != %v (actual)", c.expr, c.expected, actual)
 		}
 	}
 }

+ 0 - 615
modules/crypto/ssh/agent/client.go

@@ -1,615 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-  Package agent implements a client to an ssh-agent daemon.
-
-References:
-  [PROTOCOL.agent]:    http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.agent?rev=HEAD
-*/
-package agent
-
-import (
-	"bytes"
-	"crypto/dsa"
-	"crypto/ecdsa"
-	"crypto/elliptic"
-	"crypto/rsa"
-	"encoding/base64"
-	"encoding/binary"
-	"errors"
-	"fmt"
-	"io"
-	"math/big"
-	"sync"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-// Agent represents the capabilities of an ssh-agent.
-type Agent interface {
-	// List returns the identities known to the agent.
-	List() ([]*Key, error)
-
-	// Sign has the agent sign the data using a protocol 2 key as defined
-	// in [PROTOCOL.agent] section 2.6.2.
-	Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error)
-
-	// Add adds a private key to the agent.
-	Add(key AddedKey) error
-
-	// Remove removes all identities with the given public key.
-	Remove(key ssh.PublicKey) error
-
-	// RemoveAll removes all identities.
-	RemoveAll() error
-
-	// Lock locks the agent. Sign and Remove will fail, and List will empty an empty list.
-	Lock(passphrase []byte) error
-
-	// Unlock undoes the effect of Lock
-	Unlock(passphrase []byte) error
-
-	// Signers returns signers for all the known keys.
-	Signers() ([]ssh.Signer, error)
-}
-
-// AddedKey describes an SSH key to be added to an Agent.
-type AddedKey struct {
-	// PrivateKey must be a *rsa.PrivateKey, *dsa.PrivateKey or
-	// *ecdsa.PrivateKey, which will be inserted into the agent.
-	PrivateKey interface{}
-	// Certificate, if not nil, is communicated to the agent and will be
-	// stored with the key.
-	Certificate *ssh.Certificate
-	// Comment is an optional, free-form string.
-	Comment string
-	// LifetimeSecs, if not zero, is the number of seconds that the
-	// agent will store the key for.
-	LifetimeSecs uint32
-	// ConfirmBeforeUse, if true, requests that the agent confirm with the
-	// user before each use of this key.
-	ConfirmBeforeUse bool
-}
-
-// See [PROTOCOL.agent], section 3.
-const (
-	agentRequestV1Identities = 1
-
-	// 3.2 Requests from client to agent for protocol 2 key operations
-	agentAddIdentity         = 17
-	agentRemoveIdentity      = 18
-	agentRemoveAllIdentities = 19
-	agentAddIdConstrained    = 25
-
-	// 3.3 Key-type independent requests from client to agent
-	agentAddSmartcardKey            = 20
-	agentRemoveSmartcardKey         = 21
-	agentLock                       = 22
-	agentUnlock                     = 23
-	agentAddSmartcardKeyConstrained = 26
-
-	// 3.7 Key constraint identifiers
-	agentConstrainLifetime = 1
-	agentConstrainConfirm  = 2
-)
-
-// maxAgentResponseBytes is the maximum agent reply size that is accepted. This
-// is a sanity check, not a limit in the spec.
-const maxAgentResponseBytes = 16 << 20
-
-// Agent messages:
-// These structures mirror the wire format of the corresponding ssh agent
-// messages found in [PROTOCOL.agent].
-
-// 3.4 Generic replies from agent to client
-const agentFailure = 5
-
-type failureAgentMsg struct{}
-
-const agentSuccess = 6
-
-type successAgentMsg struct{}
-
-// See [PROTOCOL.agent], section 2.5.2.
-const agentRequestIdentities = 11
-
-type requestIdentitiesAgentMsg struct{}
-
-// See [PROTOCOL.agent], section 2.5.2.
-const agentIdentitiesAnswer = 12
-
-type identitiesAnswerAgentMsg struct {
-	NumKeys uint32 `sshtype:"12"`
-	Keys    []byte `ssh:"rest"`
-}
-
-// See [PROTOCOL.agent], section 2.6.2.
-const agentSignRequest = 13
-
-type signRequestAgentMsg struct {
-	KeyBlob []byte `sshtype:"13"`
-	Data    []byte
-	Flags   uint32
-}
-
-// See [PROTOCOL.agent], section 2.6.2.
-
-// 3.6 Replies from agent to client for protocol 2 key operations
-const agentSignResponse = 14
-
-type signResponseAgentMsg struct {
-	SigBlob []byte `sshtype:"14"`
-}
-
-type publicKey struct {
-	Format string
-	Rest   []byte `ssh:"rest"`
-}
-
-// Key represents a protocol 2 public key as defined in
-// [PROTOCOL.agent], section 2.5.2.
-type Key struct {
-	Format  string
-	Blob    []byte
-	Comment string
-}
-
-func clientErr(err error) error {
-	return fmt.Errorf("agent: client error: %v", err)
-}
-
-// String returns the storage form of an agent key with the format, base64
-// encoded serialized key, and the comment if it is not empty.
-func (k *Key) String() string {
-	s := string(k.Format) + " " + base64.StdEncoding.EncodeToString(k.Blob)
-
-	if k.Comment != "" {
-		s += " " + k.Comment
-	}
-
-	return s
-}
-
-// Type returns the public key type.
-func (k *Key) Type() string {
-	return k.Format
-}
-
-// Marshal returns key blob to satisfy the ssh.PublicKey interface.
-func (k *Key) Marshal() []byte {
-	return k.Blob
-}
-
-// Verify satisfies the ssh.PublicKey interface, but is not
-// implemented for agent keys.
-func (k *Key) Verify(data []byte, sig *ssh.Signature) error {
-	return errors.New("agent: agent key does not know how to verify")
-}
-
-type wireKey struct {
-	Format string
-	Rest   []byte `ssh:"rest"`
-}
-
-func parseKey(in []byte) (out *Key, rest []byte, err error) {
-	var record struct {
-		Blob    []byte
-		Comment string
-		Rest    []byte `ssh:"rest"`
-	}
-
-	if err := ssh.Unmarshal(in, &record); err != nil {
-		return nil, nil, err
-	}
-
-	var wk wireKey
-	if err := ssh.Unmarshal(record.Blob, &wk); err != nil {
-		return nil, nil, err
-	}
-
-	return &Key{
-		Format:  wk.Format,
-		Blob:    record.Blob,
-		Comment: record.Comment,
-	}, record.Rest, nil
-}
-
-// client is a client for an ssh-agent process.
-type client struct {
-	// conn is typically a *net.UnixConn
-	conn io.ReadWriter
-	// mu is used to prevent concurrent access to the agent
-	mu sync.Mutex
-}
-
-// NewClient returns an Agent that talks to an ssh-agent process over
-// the given connection.
-func NewClient(rw io.ReadWriter) Agent {
-	return &client{conn: rw}
-}
-
-// call sends an RPC to the agent. On success, the reply is
-// unmarshaled into reply and replyType is set to the first byte of
-// the reply, which contains the type of the message.
-func (c *client) call(req []byte) (reply interface{}, err error) {
-	c.mu.Lock()
-	defer c.mu.Unlock()
-
-	msg := make([]byte, 4+len(req))
-	binary.BigEndian.PutUint32(msg, uint32(len(req)))
-	copy(msg[4:], req)
-	if _, err = c.conn.Write(msg); err != nil {
-		return nil, clientErr(err)
-	}
-
-	var respSizeBuf [4]byte
-	if _, err = io.ReadFull(c.conn, respSizeBuf[:]); err != nil {
-		return nil, clientErr(err)
-	}
-	respSize := binary.BigEndian.Uint32(respSizeBuf[:])
-	if respSize > maxAgentResponseBytes {
-		return nil, clientErr(err)
-	}
-
-	buf := make([]byte, respSize)
-	if _, err = io.ReadFull(c.conn, buf); err != nil {
-		return nil, clientErr(err)
-	}
-	reply, err = unmarshal(buf)
-	if err != nil {
-		return nil, clientErr(err)
-	}
-	return reply, err
-}
-
-func (c *client) simpleCall(req []byte) error {
-	resp, err := c.call(req)
-	if err != nil {
-		return err
-	}
-	if _, ok := resp.(*successAgentMsg); ok {
-		return nil
-	}
-	return errors.New("agent: failure")
-}
-
-func (c *client) RemoveAll() error {
-	return c.simpleCall([]byte{agentRemoveAllIdentities})
-}
-
-func (c *client) Remove(key ssh.PublicKey) error {
-	req := ssh.Marshal(&agentRemoveIdentityMsg{
-		KeyBlob: key.Marshal(),
-	})
-	return c.simpleCall(req)
-}
-
-func (c *client) Lock(passphrase []byte) error {
-	req := ssh.Marshal(&agentLockMsg{
-		Passphrase: passphrase,
-	})
-	return c.simpleCall(req)
-}
-
-func (c *client) Unlock(passphrase []byte) error {
-	req := ssh.Marshal(&agentUnlockMsg{
-		Passphrase: passphrase,
-	})
-	return c.simpleCall(req)
-}
-
-// List returns the identities known to the agent.
-func (c *client) List() ([]*Key, error) {
-	// see [PROTOCOL.agent] section 2.5.2.
-	req := []byte{agentRequestIdentities}
-
-	msg, err := c.call(req)
-	if err != nil {
-		return nil, err
-	}
-
-	switch msg := msg.(type) {
-	case *identitiesAnswerAgentMsg:
-		if msg.NumKeys > maxAgentResponseBytes/8 {
-			return nil, errors.New("agent: too many keys in agent reply")
-		}
-		keys := make([]*Key, msg.NumKeys)
-		data := msg.Keys
-		for i := uint32(0); i < msg.NumKeys; i++ {
-			var key *Key
-			var err error
-			if key, data, err = parseKey(data); err != nil {
-				return nil, err
-			}
-			keys[i] = key
-		}
-		return keys, nil
-	case *failureAgentMsg:
-		return nil, errors.New("agent: failed to list keys")
-	}
-	panic("unreachable")
-}
-
-// Sign has the agent sign the data using a protocol 2 key as defined
-// in [PROTOCOL.agent] section 2.6.2.
-func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
-	req := ssh.Marshal(signRequestAgentMsg{
-		KeyBlob: key.Marshal(),
-		Data:    data,
-	})
-
-	msg, err := c.call(req)
-	if err != nil {
-		return nil, err
-	}
-
-	switch msg := msg.(type) {
-	case *signResponseAgentMsg:
-		var sig ssh.Signature
-		if err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil {
-			return nil, err
-		}
-
-		return &sig, nil
-	case *failureAgentMsg:
-		return nil, errors.New("agent: failed to sign challenge")
-	}
-	panic("unreachable")
-}
-
-// unmarshal parses an agent message in packet, returning the parsed
-// form and the message type of packet.
-func unmarshal(packet []byte) (interface{}, error) {
-	if len(packet) < 1 {
-		return nil, errors.New("agent: empty packet")
-	}
-	var msg interface{}
-	switch packet[0] {
-	case agentFailure:
-		return new(failureAgentMsg), nil
-	case agentSuccess:
-		return new(successAgentMsg), nil
-	case agentIdentitiesAnswer:
-		msg = new(identitiesAnswerAgentMsg)
-	case agentSignResponse:
-		msg = new(signResponseAgentMsg)
-	default:
-		return nil, fmt.Errorf("agent: unknown type tag %d", packet[0])
-	}
-	if err := ssh.Unmarshal(packet, msg); err != nil {
-		return nil, err
-	}
-	return msg, nil
-}
-
-type rsaKeyMsg struct {
-	Type        string `sshtype:"17"`
-	N           *big.Int
-	E           *big.Int
-	D           *big.Int
-	Iqmp        *big.Int // IQMP = Inverse Q Mod P
-	P           *big.Int
-	Q           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-type dsaKeyMsg struct {
-	Type        string `sshtype:"17"`
-	P           *big.Int
-	Q           *big.Int
-	G           *big.Int
-	Y           *big.Int
-	X           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-type ecdsaKeyMsg struct {
-	Type        string `sshtype:"17"`
-	Curve       string
-	KeyBytes    []byte
-	D           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-// Insert adds a private key to the agent.
-func (c *client) insertKey(s interface{}, comment string, constraints []byte) error {
-	var req []byte
-	switch k := s.(type) {
-	case *rsa.PrivateKey:
-		if len(k.Primes) != 2 {
-			return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes))
-		}
-		k.Precompute()
-		req = ssh.Marshal(rsaKeyMsg{
-			Type:        ssh.KeyAlgoRSA,
-			N:           k.N,
-			E:           big.NewInt(int64(k.E)),
-			D:           k.D,
-			Iqmp:        k.Precomputed.Qinv,
-			P:           k.Primes[0],
-			Q:           k.Primes[1],
-			Comments:    comment,
-			Constraints: constraints,
-		})
-	case *dsa.PrivateKey:
-		req = ssh.Marshal(dsaKeyMsg{
-			Type:        ssh.KeyAlgoDSA,
-			P:           k.P,
-			Q:           k.Q,
-			G:           k.G,
-			Y:           k.Y,
-			X:           k.X,
-			Comments:    comment,
-			Constraints: constraints,
-		})
-	case *ecdsa.PrivateKey:
-		nistID := fmt.Sprintf("nistp%d", k.Params().BitSize)
-		req = ssh.Marshal(ecdsaKeyMsg{
-			Type:        "ecdsa-sha2-" + nistID,
-			Curve:       nistID,
-			KeyBytes:    elliptic.Marshal(k.Curve, k.X, k.Y),
-			D:           k.D,
-			Comments:    comment,
-			Constraints: constraints,
-		})
-	default:
-		return fmt.Errorf("agent: unsupported key type %T", s)
-	}
-
-	// if constraints are present then the message type needs to be changed.
-	if len(constraints) != 0 {
-		req[0] = agentAddIdConstrained
-	}
-
-	resp, err := c.call(req)
-	if err != nil {
-		return err
-	}
-	if _, ok := resp.(*successAgentMsg); ok {
-		return nil
-	}
-	return errors.New("agent: failure")
-}
-
-type rsaCertMsg struct {
-	Type        string `sshtype:"17"`
-	CertBytes   []byte
-	D           *big.Int
-	Iqmp        *big.Int // IQMP = Inverse Q Mod P
-	P           *big.Int
-	Q           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-type dsaCertMsg struct {
-	Type        string `sshtype:"17"`
-	CertBytes   []byte
-	X           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-type ecdsaCertMsg struct {
-	Type        string `sshtype:"17"`
-	CertBytes   []byte
-	D           *big.Int
-	Comments    string
-	Constraints []byte `ssh:"rest"`
-}
-
-// Insert adds a private key to the agent. If a certificate is given,
-// that certificate is added instead as public key.
-func (c *client) Add(key AddedKey) error {
-	var constraints []byte
-
-	if secs := key.LifetimeSecs; secs != 0 {
-		constraints = append(constraints, agentConstrainLifetime)
-
-		var secsBytes [4]byte
-		binary.BigEndian.PutUint32(secsBytes[:], secs)
-		constraints = append(constraints, secsBytes[:]...)
-	}
-
-	if key.ConfirmBeforeUse {
-		constraints = append(constraints, agentConstrainConfirm)
-	}
-
-	if cert := key.Certificate; cert == nil {
-		return c.insertKey(key.PrivateKey, key.Comment, constraints)
-	} else {
-		return c.insertCert(key.PrivateKey, cert, key.Comment, constraints)
-	}
-}
-
-func (c *client) insertCert(s interface{}, cert *ssh.Certificate, comment string, constraints []byte) error {
-	var req []byte
-	switch k := s.(type) {
-	case *rsa.PrivateKey:
-		if len(k.Primes) != 2 {
-			return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes))
-		}
-		k.Precompute()
-		req = ssh.Marshal(rsaCertMsg{
-			Type:        cert.Type(),
-			CertBytes:   cert.Marshal(),
-			D:           k.D,
-			Iqmp:        k.Precomputed.Qinv,
-			P:           k.Primes[0],
-			Q:           k.Primes[1],
-			Comments:    comment,
-			Constraints: constraints,
-		})
-	case *dsa.PrivateKey:
-		req = ssh.Marshal(dsaCertMsg{
-			Type:      cert.Type(),
-			CertBytes: cert.Marshal(),
-			X:         k.X,
-			Comments:  comment,
-		})
-	case *ecdsa.PrivateKey:
-		req = ssh.Marshal(ecdsaCertMsg{
-			Type:      cert.Type(),
-			CertBytes: cert.Marshal(),
-			D:         k.D,
-			Comments:  comment,
-		})
-	default:
-		return fmt.Errorf("agent: unsupported key type %T", s)
-	}
-
-	// if constraints are present then the message type needs to be changed.
-	if len(constraints) != 0 {
-		req[0] = agentAddIdConstrained
-	}
-
-	signer, err := ssh.NewSignerFromKey(s)
-	if err != nil {
-		return err
-	}
-	if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 {
-		return errors.New("agent: signer and cert have different public key")
-	}
-
-	resp, err := c.call(req)
-	if err != nil {
-		return err
-	}
-	if _, ok := resp.(*successAgentMsg); ok {
-		return nil
-	}
-	return errors.New("agent: failure")
-}
-
-// Signers provides a callback for client authentication.
-func (c *client) Signers() ([]ssh.Signer, error) {
-	keys, err := c.List()
-	if err != nil {
-		return nil, err
-	}
-
-	var result []ssh.Signer
-	for _, k := range keys {
-		result = append(result, &agentKeyringSigner{c, k})
-	}
-	return result, nil
-}
-
-type agentKeyringSigner struct {
-	agent *client
-	pub   ssh.PublicKey
-}
-
-func (s *agentKeyringSigner) PublicKey() ssh.PublicKey {
-	return s.pub
-}
-
-func (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, error) {
-	// The agent has its own entropy source, so the rand argument is ignored.
-	return s.agent.Sign(s.pub, data)
-}

+ 0 - 287
modules/crypto/ssh/agent/client_test.go

@@ -1,287 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package agent
-
-import (
-	"bytes"
-	"crypto/rand"
-	"errors"
-	"net"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"strconv"
-	"testing"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-// startAgent executes ssh-agent, and returns a Agent interface to it.
-func startAgent(t *testing.T) (client Agent, socket string, cleanup func()) {
-	if testing.Short() {
-		// ssh-agent is not always available, and the key
-		// types supported vary by platform.
-		t.Skip("skipping test due to -short")
-	}
-
-	bin, err := exec.LookPath("ssh-agent")
-	if err != nil {
-		t.Skip("could not find ssh-agent")
-	}
-
-	cmd := exec.Command(bin, "-s")
-	out, err := cmd.Output()
-	if err != nil {
-		t.Fatalf("cmd.Output: %v", err)
-	}
-
-	/* Output looks like:
-
-		   SSH_AUTH_SOCK=/tmp/ssh-P65gpcqArqvH/agent.15541; export SSH_AUTH_SOCK;
-	           SSH_AGENT_PID=15542; export SSH_AGENT_PID;
-	           echo Agent pid 15542;
-	*/
-	fields := bytes.Split(out, []byte(";"))
-	line := bytes.SplitN(fields[0], []byte("="), 2)
-	line[0] = bytes.TrimLeft(line[0], "\n")
-	if string(line[0]) != "SSH_AUTH_SOCK" {
-		t.Fatalf("could not find key SSH_AUTH_SOCK in %q", fields[0])
-	}
-	socket = string(line[1])
-
-	line = bytes.SplitN(fields[2], []byte("="), 2)
-	line[0] = bytes.TrimLeft(line[0], "\n")
-	if string(line[0]) != "SSH_AGENT_PID" {
-		t.Fatalf("could not find key SSH_AGENT_PID in %q", fields[2])
-	}
-	pidStr := line[1]
-	pid, err := strconv.Atoi(string(pidStr))
-	if err != nil {
-		t.Fatalf("Atoi(%q): %v", pidStr, err)
-	}
-
-	conn, err := net.Dial("unix", string(socket))
-	if err != nil {
-		t.Fatalf("net.Dial: %v", err)
-	}
-
-	ac := NewClient(conn)
-	return ac, socket, func() {
-		proc, _ := os.FindProcess(pid)
-		if proc != nil {
-			proc.Kill()
-		}
-		conn.Close()
-		os.RemoveAll(filepath.Dir(socket))
-	}
-}
-
-func testAgent(t *testing.T, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) {
-	agent, _, cleanup := startAgent(t)
-	defer cleanup()
-
-	testAgentInterface(t, agent, key, cert, lifetimeSecs)
-}
-
-func testAgentInterface(t *testing.T, agent Agent, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) {
-	signer, err := ssh.NewSignerFromKey(key)
-	if err != nil {
-		t.Fatalf("NewSignerFromKey(%T): %v", key, err)
-	}
-	// The agent should start up empty.
-	if keys, err := agent.List(); err != nil {
-		t.Fatalf("RequestIdentities: %v", err)
-	} else if len(keys) > 0 {
-		t.Fatalf("got %d keys, want 0: %v", len(keys), keys)
-	}
-
-	// Attempt to insert the key, with certificate if specified.
-	var pubKey ssh.PublicKey
-	if cert != nil {
-		err = agent.Add(AddedKey{
-			PrivateKey:   key,
-			Certificate:  cert,
-			Comment:      "comment",
-			LifetimeSecs: lifetimeSecs,
-		})
-		pubKey = cert
-	} else {
-		err = agent.Add(AddedKey{PrivateKey: key, Comment: "comment", LifetimeSecs: lifetimeSecs})
-		pubKey = signer.PublicKey()
-	}
-	if err != nil {
-		t.Fatalf("insert(%T): %v", key, err)
-	}
-
-	// Did the key get inserted successfully?
-	if keys, err := agent.List(); err != nil {
-		t.Fatalf("List: %v", err)
-	} else if len(keys) != 1 {
-		t.Fatalf("got %v, want 1 key", keys)
-	} else if keys[0].Comment != "comment" {
-		t.Fatalf("key comment: got %v, want %v", keys[0].Comment, "comment")
-	} else if !bytes.Equal(keys[0].Blob, pubKey.Marshal()) {
-		t.Fatalf("key mismatch")
-	}
-
-	// Can the agent make a valid signature?
-	data := []byte("hello")
-	sig, err := agent.Sign(pubKey, data)
-	if err != nil {
-		t.Fatalf("Sign(%s): %v", pubKey.Type(), err)
-	}
-
-	if err := pubKey.Verify(data, sig); err != nil {
-		t.Fatalf("Verify(%s): %v", pubKey.Type(), err)
-	}
-}
-
-func TestAgent(t *testing.T) {
-	for _, keyType := range []string{"rsa", "dsa", "ecdsa"} {
-		testAgent(t, testPrivateKeys[keyType], nil, 0)
-	}
-}
-
-func TestCert(t *testing.T) {
-	cert := &ssh.Certificate{
-		Key:         testPublicKeys["rsa"],
-		ValidBefore: ssh.CertTimeInfinity,
-		CertType:    ssh.UserCert,
-	}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-
-	testAgent(t, testPrivateKeys["rsa"], cert, 0)
-}
-
-func TestConstraints(t *testing.T) {
-	testAgent(t, testPrivateKeys["rsa"], nil, 3600 /* lifetime in seconds */)
-}
-
-// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and
-// therefore is buffered (net.Pipe deadlocks if both sides start with
-// a write.)
-func netPipe() (net.Conn, net.Conn, error) {
-	listener, err := net.Listen("tcp", "127.0.0.1:0")
-	if err != nil {
-		return nil, nil, err
-	}
-	defer listener.Close()
-	c1, err := net.Dial("tcp", listener.Addr().String())
-	if err != nil {
-		return nil, nil, err
-	}
-
-	c2, err := listener.Accept()
-	if err != nil {
-		c1.Close()
-		return nil, nil, err
-	}
-
-	return c1, c2, nil
-}
-
-func TestAuth(t *testing.T) {
-	a, b, err := netPipe()
-	if err != nil {
-		t.Fatalf("netPipe: %v", err)
-	}
-
-	defer a.Close()
-	defer b.Close()
-
-	agent, _, cleanup := startAgent(t)
-	defer cleanup()
-
-	if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment"}); err != nil {
-		t.Errorf("Add: %v", err)
-	}
-
-	serverConf := ssh.ServerConfig{}
-	serverConf.AddHostKey(testSigners["rsa"])
-	serverConf.PublicKeyCallback = func(c ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
-		if bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) {
-			return nil, nil
-		}
-
-		return nil, errors.New("pubkey rejected")
-	}
-
-	go func() {
-		conn, _, _, err := ssh.NewServerConn(a, &serverConf)
-		if err != nil {
-			t.Fatalf("Server: %v", err)
-		}
-		conn.Close()
-	}()
-
-	conf := ssh.ClientConfig{}
-	conf.Auth = append(conf.Auth, ssh.PublicKeysCallback(agent.Signers))
-	conn, _, _, err := ssh.NewClientConn(b, "", &conf)
-	if err != nil {
-		t.Fatalf("NewClientConn: %v", err)
-	}
-	conn.Close()
-}
-
-func TestLockClient(t *testing.T) {
-	agent, _, cleanup := startAgent(t)
-	defer cleanup()
-	testLockAgent(agent, t)
-}
-
-func testLockAgent(agent Agent, t *testing.T) {
-	if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment 1"}); err != nil {
-		t.Errorf("Add: %v", err)
-	}
-	if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["dsa"], Comment: "comment dsa"}); err != nil {
-		t.Errorf("Add: %v", err)
-	}
-	if keys, err := agent.List(); err != nil {
-		t.Errorf("List: %v", err)
-	} else if len(keys) != 2 {
-		t.Errorf("Want 2 keys, got %v", keys)
-	}
-
-	passphrase := []byte("secret")
-	if err := agent.Lock(passphrase); err != nil {
-		t.Errorf("Lock: %v", err)
-	}
-
-	if keys, err := agent.List(); err != nil {
-		t.Errorf("List: %v", err)
-	} else if len(keys) != 0 {
-		t.Errorf("Want 0 keys, got %v", keys)
-	}
-
-	signer, _ := ssh.NewSignerFromKey(testPrivateKeys["rsa"])
-	if _, err := agent.Sign(signer.PublicKey(), []byte("hello")); err == nil {
-		t.Fatalf("Sign did not fail")
-	}
-
-	if err := agent.Remove(signer.PublicKey()); err == nil {
-		t.Fatalf("Remove did not fail")
-	}
-
-	if err := agent.RemoveAll(); err == nil {
-		t.Fatalf("RemoveAll did not fail")
-	}
-
-	if err := agent.Unlock(nil); err == nil {
-		t.Errorf("Unlock with wrong passphrase succeeded")
-	}
-	if err := agent.Unlock(passphrase); err != nil {
-		t.Errorf("Unlock: %v", err)
-	}
-
-	if err := agent.Remove(signer.PublicKey()); err != nil {
-		t.Fatalf("Remove: %v", err)
-	}
-
-	if keys, err := agent.List(); err != nil {
-		t.Errorf("List: %v", err)
-	} else if len(keys) != 1 {
-		t.Errorf("Want 1 keys, got %v", keys)
-	}
-}

+ 0 - 103
modules/crypto/ssh/agent/forward.go

@@ -1,103 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package agent
-
-import (
-	"errors"
-	"io"
-	"net"
-	"sync"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-// RequestAgentForwarding sets up agent forwarding for the session.
-// ForwardToAgent or ForwardToRemote should be called to route
-// the authentication requests.
-func RequestAgentForwarding(session *ssh.Session) error {
-	ok, err := session.SendRequest("auth-agent-req@openssh.com", true, nil)
-	if err != nil {
-		return err
-	}
-	if !ok {
-		return errors.New("forwarding request denied")
-	}
-	return nil
-}
-
-// ForwardToAgent routes authentication requests to the given keyring.
-func ForwardToAgent(client *ssh.Client, keyring Agent) error {
-	channels := client.HandleChannelOpen(channelType)
-	if channels == nil {
-		return errors.New("agent: already have handler for " + channelType)
-	}
-
-	go func() {
-		for ch := range channels {
-			channel, reqs, err := ch.Accept()
-			if err != nil {
-				continue
-			}
-			go ssh.DiscardRequests(reqs)
-			go func() {
-				ServeAgent(keyring, channel)
-				channel.Close()
-			}()
-		}
-	}()
-	return nil
-}
-
-const channelType = "auth-agent@openssh.com"
-
-// ForwardToRemote routes authentication requests to the ssh-agent
-// process serving on the given unix socket.
-func ForwardToRemote(client *ssh.Client, addr string) error {
-	channels := client.HandleChannelOpen(channelType)
-	if channels == nil {
-		return errors.New("agent: already have handler for " + channelType)
-	}
-	conn, err := net.Dial("unix", addr)
-	if err != nil {
-		return err
-	}
-	conn.Close()
-
-	go func() {
-		for ch := range channels {
-			channel, reqs, err := ch.Accept()
-			if err != nil {
-				continue
-			}
-			go ssh.DiscardRequests(reqs)
-			go forwardUnixSocket(channel, addr)
-		}
-	}()
-	return nil
-}
-
-func forwardUnixSocket(channel ssh.Channel, addr string) {
-	conn, err := net.Dial("unix", addr)
-	if err != nil {
-		return
-	}
-
-	var wg sync.WaitGroup
-	wg.Add(2)
-	go func() {
-		io.Copy(conn, channel)
-		conn.(*net.UnixConn).CloseWrite()
-		wg.Done()
-	}()
-	go func() {
-		io.Copy(channel, conn)
-		channel.CloseWrite()
-		wg.Done()
-	}()
-
-	wg.Wait()
-	conn.Close()
-	channel.Close()
-}

+ 0 - 184
modules/crypto/ssh/agent/keyring.go

@@ -1,184 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package agent
-
-import (
-	"bytes"
-	"crypto/rand"
-	"crypto/subtle"
-	"errors"
-	"fmt"
-	"sync"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-type privKey struct {
-	signer  ssh.Signer
-	comment string
-}
-
-type keyring struct {
-	mu   sync.Mutex
-	keys []privKey
-
-	locked     bool
-	passphrase []byte
-}
-
-var errLocked = errors.New("agent: locked")
-
-// NewKeyring returns an Agent that holds keys in memory.  It is safe
-// for concurrent use by multiple goroutines.
-func NewKeyring() Agent {
-	return &keyring{}
-}
-
-// RemoveAll removes all identities.
-func (r *keyring) RemoveAll() error {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return errLocked
-	}
-
-	r.keys = nil
-	return nil
-}
-
-// Remove removes all identities with the given public key.
-func (r *keyring) Remove(key ssh.PublicKey) error {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return errLocked
-	}
-
-	want := key.Marshal()
-	found := false
-	for i := 0; i < len(r.keys); {
-		if bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) {
-			found = true
-			r.keys[i] = r.keys[len(r.keys)-1]
-			r.keys = r.keys[len(r.keys)-1:]
-			continue
-		} else {
-			i++
-		}
-	}
-
-	if !found {
-		return errors.New("agent: key not found")
-	}
-	return nil
-}
-
-// Lock locks the agent. Sign and Remove will fail, and List will empty an empty list.
-func (r *keyring) Lock(passphrase []byte) error {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return errLocked
-	}
-
-	r.locked = true
-	r.passphrase = passphrase
-	return nil
-}
-
-// Unlock undoes the effect of Lock
-func (r *keyring) Unlock(passphrase []byte) error {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if !r.locked {
-		return errors.New("agent: not locked")
-	}
-	if len(passphrase) != len(r.passphrase) || 1 != subtle.ConstantTimeCompare(passphrase, r.passphrase) {
-		return fmt.Errorf("agent: incorrect passphrase")
-	}
-
-	r.locked = false
-	r.passphrase = nil
-	return nil
-}
-
-// List returns the identities known to the agent.
-func (r *keyring) List() ([]*Key, error) {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		// section 2.7: locked agents return empty.
-		return nil, nil
-	}
-
-	var ids []*Key
-	for _, k := range r.keys {
-		pub := k.signer.PublicKey()
-		ids = append(ids, &Key{
-			Format:  pub.Type(),
-			Blob:    pub.Marshal(),
-			Comment: k.comment})
-	}
-	return ids, nil
-}
-
-// Insert adds a private key to the keyring. If a certificate
-// is given, that certificate is added as public key. Note that
-// any constraints given are ignored.
-func (r *keyring) Add(key AddedKey) error {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return errLocked
-	}
-	signer, err := ssh.NewSignerFromKey(key.PrivateKey)
-
-	if err != nil {
-		return err
-	}
-
-	if cert := key.Certificate; cert != nil {
-		signer, err = ssh.NewCertSigner(cert, signer)
-		if err != nil {
-			return err
-		}
-	}
-
-	r.keys = append(r.keys, privKey{signer, key.Comment})
-
-	return nil
-}
-
-// Sign returns a signature for the data.
-func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return nil, errLocked
-	}
-
-	wanted := key.Marshal()
-	for _, k := range r.keys {
-		if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) {
-			return k.signer.Sign(rand.Reader, data)
-		}
-	}
-	return nil, errors.New("not found")
-}
-
-// Signers returns signers for all the known keys.
-func (r *keyring) Signers() ([]ssh.Signer, error) {
-	r.mu.Lock()
-	defer r.mu.Unlock()
-	if r.locked {
-		return nil, errLocked
-	}
-
-	s := make([]ssh.Signer, 0, len(r.keys))
-	for _, k := range r.keys {
-		s = append(s, k.signer)
-	}
-	return s, nil
-}

+ 0 - 209
modules/crypto/ssh/agent/server.go

@@ -1,209 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package agent
-
-import (
-	"crypto/rsa"
-	"encoding/binary"
-	"fmt"
-	"io"
-	"log"
-	"math/big"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-// Server wraps an Agent and uses it to implement the agent side of
-// the SSH-agent, wire protocol.
-type server struct {
-	agent Agent
-}
-
-func (s *server) processRequestBytes(reqData []byte) []byte {
-	rep, err := s.processRequest(reqData)
-	if err != nil {
-		if err != errLocked {
-			// TODO(hanwen): provide better logging interface?
-			log.Printf("agent %d: %v", reqData[0], err)
-		}
-		return []byte{agentFailure}
-	}
-
-	if err == nil && rep == nil {
-		return []byte{agentSuccess}
-	}
-
-	return ssh.Marshal(rep)
-}
-
-func marshalKey(k *Key) []byte {
-	var record struct {
-		Blob    []byte
-		Comment string
-	}
-	record.Blob = k.Marshal()
-	record.Comment = k.Comment
-
-	return ssh.Marshal(&record)
-}
-
-type agentV1IdentityMsg struct {
-	Numkeys uint32 `sshtype:"2"`
-}
-
-type agentRemoveIdentityMsg struct {
-	KeyBlob []byte `sshtype:"18"`
-}
-
-type agentLockMsg struct {
-	Passphrase []byte `sshtype:"22"`
-}
-
-type agentUnlockMsg struct {
-	Passphrase []byte `sshtype:"23"`
-}
-
-func (s *server) processRequest(data []byte) (interface{}, error) {
-	switch data[0] {
-	case agentRequestV1Identities:
-		return &agentV1IdentityMsg{0}, nil
-	case agentRemoveIdentity:
-		var req agentRemoveIdentityMsg
-		if err := ssh.Unmarshal(data, &req); err != nil {
-			return nil, err
-		}
-
-		var wk wireKey
-		if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {
-			return nil, err
-		}
-
-		return nil, s.agent.Remove(&Key{Format: wk.Format, Blob: req.KeyBlob})
-
-	case agentRemoveAllIdentities:
-		return nil, s.agent.RemoveAll()
-
-	case agentLock:
-		var req agentLockMsg
-		if err := ssh.Unmarshal(data, &req); err != nil {
-			return nil, err
-		}
-
-		return nil, s.agent.Lock(req.Passphrase)
-
-	case agentUnlock:
-		var req agentLockMsg
-		if err := ssh.Unmarshal(data, &req); err != nil {
-			return nil, err
-		}
-		return nil, s.agent.Unlock(req.Passphrase)
-
-	case agentSignRequest:
-		var req signRequestAgentMsg
-		if err := ssh.Unmarshal(data, &req); err != nil {
-			return nil, err
-		}
-
-		var wk wireKey
-		if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {
-			return nil, err
-		}
-
-		k := &Key{
-			Format: wk.Format,
-			Blob:   req.KeyBlob,
-		}
-
-		sig, err := s.agent.Sign(k, req.Data) //  TODO(hanwen): flags.
-		if err != nil {
-			return nil, err
-		}
-		return &signResponseAgentMsg{SigBlob: ssh.Marshal(sig)}, nil
-	case agentRequestIdentities:
-		keys, err := s.agent.List()
-		if err != nil {
-			return nil, err
-		}
-
-		rep := identitiesAnswerAgentMsg{
-			NumKeys: uint32(len(keys)),
-		}
-		for _, k := range keys {
-			rep.Keys = append(rep.Keys, marshalKey(k)...)
-		}
-		return rep, nil
-	case agentAddIdentity:
-		return nil, s.insertIdentity(data)
-	}
-
-	return nil, fmt.Errorf("unknown opcode %d", data[0])
-}
-
-func (s *server) insertIdentity(req []byte) error {
-	var record struct {
-		Type string `sshtype:"17"`
-		Rest []byte `ssh:"rest"`
-	}
-	if err := ssh.Unmarshal(req, &record); err != nil {
-		return err
-	}
-
-	switch record.Type {
-	case ssh.KeyAlgoRSA:
-		var k rsaKeyMsg
-		if err := ssh.Unmarshal(req, &k); err != nil {
-			return err
-		}
-
-		priv := rsa.PrivateKey{
-			PublicKey: rsa.PublicKey{
-				E: int(k.E.Int64()),
-				N: k.N,
-			},
-			D:      k.D,
-			Primes: []*big.Int{k.P, k.Q},
-		}
-		priv.Precompute()
-
-		return s.agent.Add(AddedKey{PrivateKey: &priv, Comment: k.Comments})
-	}
-	return fmt.Errorf("not implemented: %s", record.Type)
-}
-
-// ServeAgent serves the agent protocol on the given connection. It
-// returns when an I/O error occurs.
-func ServeAgent(agent Agent, c io.ReadWriter) error {
-	s := &server{agent}
-
-	var length [4]byte
-	for {
-		if _, err := io.ReadFull(c, length[:]); err != nil {
-			return err
-		}
-		l := binary.BigEndian.Uint32(length[:])
-		if l > maxAgentResponseBytes {
-			// We also cap requests.
-			return fmt.Errorf("agent: request too large: %d", l)
-		}
-
-		req := make([]byte, l)
-		if _, err := io.ReadFull(c, req); err != nil {
-			return err
-		}
-
-		repData := s.processRequestBytes(req)
-		if len(repData) > maxAgentResponseBytes {
-			return fmt.Errorf("agent: reply too large: %d bytes", len(repData))
-		}
-
-		binary.BigEndian.PutUint32(length[:], uint32(len(repData)))
-		if _, err := c.Write(length[:]); err != nil {
-			return err
-		}
-		if _, err := c.Write(repData); err != nil {
-			return err
-		}
-	}
-}

+ 0 - 77
modules/crypto/ssh/agent/server_test.go

@@ -1,77 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package agent
-
-import (
-	"testing"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-)
-
-func TestServer(t *testing.T) {
-	c1, c2, err := netPipe()
-	if err != nil {
-		t.Fatalf("netPipe: %v", err)
-	}
-	defer c1.Close()
-	defer c2.Close()
-	client := NewClient(c1)
-
-	go ServeAgent(NewKeyring(), c2)
-
-	testAgentInterface(t, client, testPrivateKeys["rsa"], nil, 0)
-}
-
-func TestLockServer(t *testing.T) {
-	testLockAgent(NewKeyring(), t)
-}
-
-func TestSetupForwardAgent(t *testing.T) {
-	a, b, err := netPipe()
-	if err != nil {
-		t.Fatalf("netPipe: %v", err)
-	}
-
-	defer a.Close()
-	defer b.Close()
-
-	_, socket, cleanup := startAgent(t)
-	defer cleanup()
-
-	serverConf := ssh.ServerConfig{
-		NoClientAuth: true,
-	}
-	serverConf.AddHostKey(testSigners["rsa"])
-	incoming := make(chan *ssh.ServerConn, 1)
-	go func() {
-		conn, _, _, err := ssh.NewServerConn(a, &serverConf)
-		if err != nil {
-			t.Fatalf("Server: %v", err)
-		}
-		incoming <- conn
-	}()
-
-	conf := ssh.ClientConfig{}
-	conn, chans, reqs, err := ssh.NewClientConn(b, "", &conf)
-	if err != nil {
-		t.Fatalf("NewClientConn: %v", err)
-	}
-	client := ssh.NewClient(conn, chans, reqs)
-
-	if err := ForwardToRemote(client, socket); err != nil {
-		t.Fatalf("SetupForwardAgent: %v", err)
-	}
-
-	server := <-incoming
-	ch, reqs, err := server.OpenChannel(channelType, nil)
-	if err != nil {
-		t.Fatalf("OpenChannel(%q): %v", channelType, err)
-	}
-	go ssh.DiscardRequests(reqs)
-
-	agentClient := NewClient(ch)
-	testAgentInterface(t, agentClient, testPrivateKeys["rsa"], nil, 0)
-	conn.Close()
-}

+ 0 - 64
modules/crypto/ssh/agent/testdata_test.go

@@ -1,64 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// IMPLEMENTOR NOTE: To avoid a package loop, this file is in three places:
-// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three
-// instances.
-
-package agent
-
-import (
-	"crypto/rand"
-	"fmt"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-	"github.com/gogits/gogs/modules/crypto/ssh/testdata"
-)
-
-var (
-	testPrivateKeys map[string]interface{}
-	testSigners     map[string]ssh.Signer
-	testPublicKeys  map[string]ssh.PublicKey
-)
-
-func init() {
-	var err error
-
-	n := len(testdata.PEMBytes)
-	testPrivateKeys = make(map[string]interface{}, n)
-	testSigners = make(map[string]ssh.Signer, n)
-	testPublicKeys = make(map[string]ssh.PublicKey, n)
-	for t, k := range testdata.PEMBytes {
-		testPrivateKeys[t], err = ssh.ParseRawPrivateKey(k)
-		if err != nil {
-			panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err))
-		}
-		testSigners[t], err = ssh.NewSignerFromKey(testPrivateKeys[t])
-		if err != nil {
-			panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err))
-		}
-		testPublicKeys[t] = testSigners[t].PublicKey()
-	}
-
-	// Create a cert and sign it for use in tests.
-	testCert := &ssh.Certificate{
-		Nonce:           []byte{},                       // To pass reflect.DeepEqual after marshal & parse, this must be non-nil
-		ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage
-		ValidAfter:      0,                              // unix epoch
-		ValidBefore:     ssh.CertTimeInfinity,           // The end of currently representable time.
-		Reserved:        []byte{},                       // To pass reflect.DeepEqual after marshal & parse, this must be non-nil
-		Key:             testPublicKeys["ecdsa"],
-		SignatureKey:    testPublicKeys["rsa"],
-		Permissions: ssh.Permissions{
-			CriticalOptions: map[string]string{},
-			Extensions:      map[string]string{},
-		},
-	}
-	testCert.SignCert(rand.Reader, testSigners["rsa"])
-	testPrivateKeys["cert"] = testPrivateKeys["ecdsa"]
-	testSigners["cert"], err = ssh.NewCertSigner(testCert, testSigners["ecdsa"])
-	if err != nil {
-		panic(fmt.Sprintf("Unable to create certificate signer: %v", err))
-	}
-}

+ 0 - 122
modules/crypto/ssh/benchmark_test.go

@@ -1,122 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"errors"
-	"io"
-	"net"
-	"testing"
-)
-
-type server struct {
-	*ServerConn
-	chans <-chan NewChannel
-}
-
-func newServer(c net.Conn, conf *ServerConfig) (*server, error) {
-	sconn, chans, reqs, err := NewServerConn(c, conf)
-	if err != nil {
-		return nil, err
-	}
-	go DiscardRequests(reqs)
-	return &server{sconn, chans}, nil
-}
-
-func (s *server) Accept() (NewChannel, error) {
-	n, ok := <-s.chans
-	if !ok {
-		return nil, io.EOF
-	}
-	return n, nil
-}
-
-func sshPipe() (Conn, *server, error) {
-	c1, c2, err := netPipe()
-	if err != nil {
-		return nil, nil, err
-	}
-
-	clientConf := ClientConfig{
-		User: "user",
-	}
-	serverConf := ServerConfig{
-		NoClientAuth: true,
-	}
-	serverConf.AddHostKey(testSigners["ecdsa"])
-	done := make(chan *server, 1)
-	go func() {
-		server, err := newServer(c2, &serverConf)
-		if err != nil {
-			done <- nil
-		}
-		done <- server
-	}()
-
-	client, _, reqs, err := NewClientConn(c1, "", &clientConf)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	server := <-done
-	if server == nil {
-		return nil, nil, errors.New("server handshake failed.")
-	}
-	go DiscardRequests(reqs)
-
-	return client, server, nil
-}
-
-func BenchmarkEndToEnd(b *testing.B) {
-	b.StopTimer()
-
-	client, server, err := sshPipe()
-	if err != nil {
-		b.Fatalf("sshPipe: %v", err)
-	}
-
-	defer client.Close()
-	defer server.Close()
-
-	size := (1 << 20)
-	input := make([]byte, size)
-	output := make([]byte, size)
-	b.SetBytes(int64(size))
-	done := make(chan int, 1)
-
-	go func() {
-		newCh, err := server.Accept()
-		if err != nil {
-			b.Fatalf("Client: %v", err)
-		}
-		ch, incoming, err := newCh.Accept()
-		go DiscardRequests(incoming)
-		for i := 0; i < b.N; i++ {
-			if _, err := io.ReadFull(ch, output); err != nil {
-				b.Fatalf("ReadFull: %v", err)
-			}
-		}
-		ch.Close()
-		done <- 1
-	}()
-
-	ch, in, err := client.OpenChannel("speed", nil)
-	if err != nil {
-		b.Fatalf("OpenChannel: %v", err)
-	}
-	go DiscardRequests(in)
-
-	b.ResetTimer()
-	b.StartTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err := ch.Write(input); err != nil {
-			b.Fatalf("WriteFull: %v", err)
-		}
-	}
-	ch.Close()
-	b.StopTimer()
-
-	<-done
-}

+ 0 - 98
modules/crypto/ssh/buffer.go

@@ -1,98 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"io"
-	"sync"
-)
-
-// buffer provides a linked list buffer for data exchange
-// between producer and consumer. Theoretically the buffer is
-// of unlimited capacity as it does no allocation of its own.
-type buffer struct {
-	// protects concurrent access to head, tail and closed
-	*sync.Cond
-
-	head *element // the buffer that will be read first
-	tail *element // the buffer that will be read last
-
-	closed bool
-}
-
-// An element represents a single link in a linked list.
-type element struct {
-	buf  []byte
-	next *element
-}
-
-// newBuffer returns an empty buffer that is not closed.
-func newBuffer() *buffer {
-	e := new(element)
-	b := &buffer{
-		Cond: newCond(),
-		head: e,
-		tail: e,
-	}
-	return b
-}
-
-// write makes buf available for Read to receive.
-// buf must not be modified after the call to write.
-func (b *buffer) write(buf []byte) {
-	b.Cond.L.Lock()
-	e := &element{buf: buf}
-	b.tail.next = e
-	b.tail = e
-	b.Cond.Signal()
-	b.Cond.L.Unlock()
-}
-
-// eof closes the buffer. Reads from the buffer once all
-// the data has been consumed will receive os.EOF.
-func (b *buffer) eof() error {
-	b.Cond.L.Lock()
-	b.closed = true
-	b.Cond.Signal()
-	b.Cond.L.Unlock()
-	return nil
-}
-
-// Read reads data from the internal buffer in buf.  Reads will block
-// if no data is available, or until the buffer is closed.
-func (b *buffer) Read(buf []byte) (n int, err error) {
-	b.Cond.L.Lock()
-	defer b.Cond.L.Unlock()
-
-	for len(buf) > 0 {
-		// if there is data in b.head, copy it
-		if len(b.head.buf) > 0 {
-			r := copy(buf, b.head.buf)
-			buf, b.head.buf = buf[r:], b.head.buf[r:]
-			n += r
-			continue
-		}
-		// if there is a next buffer, make it the head
-		if len(b.head.buf) == 0 && b.head != b.tail {
-			b.head = b.head.next
-			continue
-		}
-
-		// if at least one byte has been copied, return
-		if n > 0 {
-			break
-		}
-
-		// if nothing was read, and there is nothing outstanding
-		// check to see if the buffer is closed.
-		if b.closed {
-			err = io.EOF
-			break
-		}
-		// out of buffers, wait for producer
-		b.Cond.Wait()
-	}
-	return
-}

+ 0 - 87
modules/crypto/ssh/buffer_test.go

@@ -1,87 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"io"
-	"testing"
-)
-
-var alphabet = []byte("abcdefghijklmnopqrstuvwxyz")
-
-func TestBufferReadwrite(t *testing.T) {
-	b := newBuffer()
-	b.write(alphabet[:10])
-	r, _ := b.Read(make([]byte, 10))
-	if r != 10 {
-		t.Fatalf("Expected written == read == 10, written: 10, read %d", r)
-	}
-
-	b = newBuffer()
-	b.write(alphabet[:5])
-	r, _ = b.Read(make([]byte, 10))
-	if r != 5 {
-		t.Fatalf("Expected written == read == 5, written: 5, read %d", r)
-	}
-
-	b = newBuffer()
-	b.write(alphabet[:10])
-	r, _ = b.Read(make([]byte, 5))
-	if r != 5 {
-		t.Fatalf("Expected written == 10, read == 5, written: 10, read %d", r)
-	}
-
-	b = newBuffer()
-	b.write(alphabet[:5])
-	b.write(alphabet[5:15])
-	r, _ = b.Read(make([]byte, 10))
-	r2, _ := b.Read(make([]byte, 10))
-	if r != 10 || r2 != 5 || 15 != r+r2 {
-		t.Fatal("Expected written == read == 15")
-	}
-}
-
-func TestBufferClose(t *testing.T) {
-	b := newBuffer()
-	b.write(alphabet[:10])
-	b.eof()
-	_, err := b.Read(make([]byte, 5))
-	if err != nil {
-		t.Fatal("expected read of 5 to not return EOF")
-	}
-	b = newBuffer()
-	b.write(alphabet[:10])
-	b.eof()
-	r, err := b.Read(make([]byte, 5))
-	r2, err2 := b.Read(make([]byte, 10))
-	if r != 5 || r2 != 5 || err != nil || err2 != nil {
-		t.Fatal("expected reads of 5 and 5")
-	}
-
-	b = newBuffer()
-	b.write(alphabet[:10])
-	b.eof()
-	r, err = b.Read(make([]byte, 5))
-	r2, err2 = b.Read(make([]byte, 10))
-	r3, err3 := b.Read(make([]byte, 10))
-	if r != 5 || r2 != 5 || r3 != 0 || err != nil || err2 != nil || err3 != io.EOF {
-		t.Fatal("expected reads of 5 and 5 and 0, with EOF")
-	}
-
-	b = newBuffer()
-	b.write(make([]byte, 5))
-	b.write(make([]byte, 10))
-	b.eof()
-	r, err = b.Read(make([]byte, 9))
-	r2, err2 = b.Read(make([]byte, 3))
-	r3, err3 = b.Read(make([]byte, 3))
-	r4, err4 := b.Read(make([]byte, 10))
-	if err != nil || err2 != nil || err3 != nil || err4 != io.EOF {
-		t.Fatalf("Expected EOF on forth read only, err=%v, err2=%v, err3=%v, err4=%v", err, err2, err3, err4)
-	}
-	if r != 9 || r2 != 3 || r3 != 3 || r4 != 0 {
-		t.Fatal("Expected written == read == 15", r, r2, r3, r4)
-	}
-}

+ 0 - 501
modules/crypto/ssh/certs.go

@@ -1,501 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"io"
-	"net"
-	"sort"
-	"time"
-)
-
-// These constants from [PROTOCOL.certkeys] represent the algorithm names
-// for certificate types supported by this package.
-const (
-	CertAlgoRSAv01      = "ssh-rsa-cert-v01@openssh.com"
-	CertAlgoDSAv01      = "ssh-dss-cert-v01@openssh.com"
-	CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com"
-	CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com"
-	CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com"
-)
-
-// Certificate types distinguish between host and user
-// certificates. The values can be set in the CertType field of
-// Certificate.
-const (
-	UserCert = 1
-	HostCert = 2
-)
-
-// Signature represents a cryptographic signature.
-type Signature struct {
-	Format string
-	Blob   []byte
-}
-
-// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that
-// a certificate does not expire.
-const CertTimeInfinity = 1<<64 - 1
-
-// An Certificate represents an OpenSSH certificate as defined in
-// [PROTOCOL.certkeys]?rev=1.8.
-type Certificate struct {
-	Nonce           []byte
-	Key             PublicKey
-	Serial          uint64
-	CertType        uint32
-	KeyId           string
-	ValidPrincipals []string
-	ValidAfter      uint64
-	ValidBefore     uint64
-	Permissions
-	Reserved     []byte
-	SignatureKey PublicKey
-	Signature    *Signature
-}
-
-// genericCertData holds the key-independent part of the certificate data.
-// Overall, certificates contain an nonce, public key fields and
-// key-independent fields.
-type genericCertData struct {
-	Serial          uint64
-	CertType        uint32
-	KeyId           string
-	ValidPrincipals []byte
-	ValidAfter      uint64
-	ValidBefore     uint64
-	CriticalOptions []byte
-	Extensions      []byte
-	Reserved        []byte
-	SignatureKey    []byte
-	Signature       []byte
-}
-
-func marshalStringList(namelist []string) []byte {
-	var to []byte
-	for _, name := range namelist {
-		s := struct{ N string }{name}
-		to = append(to, Marshal(&s)...)
-	}
-	return to
-}
-
-type optionsTuple struct {
-	Key   string
-	Value []byte
-}
-
-type optionsTupleValue struct {
-	Value string
-}
-
-// serialize a map of critical options or extensions
-// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
-// we need two length prefixes for a non-empty string value
-func marshalTuples(tups map[string]string) []byte {
-	keys := make([]string, 0, len(tups))
-	for key := range tups {
-		keys = append(keys, key)
-	}
-	sort.Strings(keys)
-
-	var ret []byte
-	for _, key := range keys {
-		s := optionsTuple{Key: key}
-		if value := tups[key]; len(value) > 0 {
-			s.Value = Marshal(&optionsTupleValue{value})
-		}
-		ret = append(ret, Marshal(&s)...)
-	}
-	return ret
-}
-
-// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
-// we need two length prefixes for a non-empty option value
-func parseTuples(in []byte) (map[string]string, error) {
-	tups := map[string]string{}
-	var lastKey string
-	var haveLastKey bool
-
-	for len(in) > 0 {
-		var key, val, extra []byte
-		var ok bool
-
-		if key, in, ok = parseString(in); !ok {
-			return nil, errShortRead
-		}
-		keyStr := string(key)
-		// according to [PROTOCOL.certkeys], the names must be in
-		// lexical order.
-		if haveLastKey && keyStr <= lastKey {
-			return nil, fmt.Errorf("ssh: certificate options are not in lexical order")
-		}
-		lastKey, haveLastKey = keyStr, true
-		// the next field is a data field, which if non-empty has a string embedded
-		if val, in, ok = parseString(in); !ok {
-			return nil, errShortRead
-		}
-		if len(val) > 0 {
-			val, extra, ok = parseString(val)
-			if !ok {
-				return nil, errShortRead
-			}
-			if len(extra) > 0 {
-				return nil, fmt.Errorf("ssh: unexpected trailing data after certificate option value")
-			}
-			tups[keyStr] = string(val)
-		} else {
-			tups[keyStr] = ""
-		}
-	}
-	return tups, nil
-}
-
-func parseCert(in []byte, privAlgo string) (*Certificate, error) {
-	nonce, rest, ok := parseString(in)
-	if !ok {
-		return nil, errShortRead
-	}
-
-	key, rest, err := parsePubKey(rest, privAlgo)
-	if err != nil {
-		return nil, err
-	}
-
-	var g genericCertData
-	if err := Unmarshal(rest, &g); err != nil {
-		return nil, err
-	}
-
-	c := &Certificate{
-		Nonce:       nonce,
-		Key:         key,
-		Serial:      g.Serial,
-		CertType:    g.CertType,
-		KeyId:       g.KeyId,
-		ValidAfter:  g.ValidAfter,
-		ValidBefore: g.ValidBefore,
-	}
-
-	for principals := g.ValidPrincipals; len(principals) > 0; {
-		principal, rest, ok := parseString(principals)
-		if !ok {
-			return nil, errShortRead
-		}
-		c.ValidPrincipals = append(c.ValidPrincipals, string(principal))
-		principals = rest
-	}
-
-	c.CriticalOptions, err = parseTuples(g.CriticalOptions)
-	if err != nil {
-		return nil, err
-	}
-	c.Extensions, err = parseTuples(g.Extensions)
-	if err != nil {
-		return nil, err
-	}
-	c.Reserved = g.Reserved
-	k, err := ParsePublicKey(g.SignatureKey)
-	if err != nil {
-		return nil, err
-	}
-
-	c.SignatureKey = k
-	c.Signature, rest, ok = parseSignatureBody(g.Signature)
-	if !ok || len(rest) > 0 {
-		return nil, errors.New("ssh: signature parse error")
-	}
-
-	return c, nil
-}
-
-type openSSHCertSigner struct {
-	pub    *Certificate
-	signer Signer
-}
-
-// NewCertSigner returns a Signer that signs with the given Certificate, whose
-// private key is held by signer. It returns an error if the public key in cert
-// doesn't match the key used by signer.
-func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) {
-	if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 {
-		return nil, errors.New("ssh: signer and cert have different public key")
-	}
-
-	return &openSSHCertSigner{cert, signer}, nil
-}
-
-func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
-	return s.signer.Sign(rand, data)
-}
-
-func (s *openSSHCertSigner) PublicKey() PublicKey {
-	return s.pub
-}
-
-const sourceAddressCriticalOption = "source-address"
-
-// CertChecker does the work of verifying a certificate. Its methods
-// can be plugged into ClientConfig.HostKeyCallback and
-// ServerConfig.PublicKeyCallback. For the CertChecker to work,
-// minimally, the IsAuthority callback should be set.
-type CertChecker struct {
-	// SupportedCriticalOptions lists the CriticalOptions that the
-	// server application layer understands. These are only used
-	// for user certificates.
-	SupportedCriticalOptions []string
-
-	// IsAuthority should return true if the key is recognized as
-	// an authority. This allows for certificates to be signed by other
-	// certificates.
-	IsAuthority func(auth PublicKey) bool
-
-	// Clock is used for verifying time stamps. If nil, time.Now
-	// is used.
-	Clock func() time.Time
-
-	// UserKeyFallback is called when CertChecker.Authenticate encounters a
-	// public key that is not a certificate. It must implement validation
-	// of user keys or else, if nil, all such keys are rejected.
-	UserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)
-
-	// HostKeyFallback is called when CertChecker.CheckHostKey encounters a
-	// public key that is not a certificate. It must implement host key
-	// validation or else, if nil, all such keys are rejected.
-	HostKeyFallback func(addr string, remote net.Addr, key PublicKey) error
-
-	// IsRevoked is called for each certificate so that revocation checking
-	// can be implemented. It should return true if the given certificate
-	// is revoked and false otherwise. If nil, no certificates are
-	// considered to have been revoked.
-	IsRevoked func(cert *Certificate) bool
-}
-
-// CheckHostKey checks a host key certificate. This method can be
-// plugged into ClientConfig.HostKeyCallback.
-func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error {
-	cert, ok := key.(*Certificate)
-	if !ok {
-		if c.HostKeyFallback != nil {
-			return c.HostKeyFallback(addr, remote, key)
-		}
-		return errors.New("ssh: non-certificate host key")
-	}
-	if cert.CertType != HostCert {
-		return fmt.Errorf("ssh: certificate presented as a host key has type %d", cert.CertType)
-	}
-
-	return c.CheckCert(addr, cert)
-}
-
-// Authenticate checks a user certificate. Authenticate can be used as
-// a value for ServerConfig.PublicKeyCallback.
-func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) {
-	cert, ok := pubKey.(*Certificate)
-	if !ok {
-		if c.UserKeyFallback != nil {
-			return c.UserKeyFallback(conn, pubKey)
-		}
-		return nil, errors.New("ssh: normal key pairs not accepted")
-	}
-
-	if cert.CertType != UserCert {
-		return nil, fmt.Errorf("ssh: cert has type %d", cert.CertType)
-	}
-
-	if err := c.CheckCert(conn.User(), cert); err != nil {
-		return nil, err
-	}
-
-	return &cert.Permissions, nil
-}
-
-// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and
-// the signature of the certificate.
-func (c *CertChecker) CheckCert(principal string, cert *Certificate) error {
-	if c.IsRevoked != nil && c.IsRevoked(cert) {
-		return fmt.Errorf("ssh: certicate serial %d revoked", cert.Serial)
-	}
-
-	for opt, _ := range cert.CriticalOptions {
-		// sourceAddressCriticalOption will be enforced by
-		// serverAuthenticate
-		if opt == sourceAddressCriticalOption {
-			continue
-		}
-
-		found := false
-		for _, supp := range c.SupportedCriticalOptions {
-			if supp == opt {
-				found = true
-				break
-			}
-		}
-		if !found {
-			return fmt.Errorf("ssh: unsupported critical option %q in certificate", opt)
-		}
-	}
-
-	if len(cert.ValidPrincipals) > 0 {
-		// By default, certs are valid for all users/hosts.
-		found := false
-		for _, p := range cert.ValidPrincipals {
-			if p == principal {
-				found = true
-				break
-			}
-		}
-		if !found {
-			return fmt.Errorf("ssh: principal %q not in the set of valid principals for given certificate: %q", principal, cert.ValidPrincipals)
-		}
-	}
-
-	if !c.IsAuthority(cert.SignatureKey) {
-		return fmt.Errorf("ssh: certificate signed by unrecognized authority")
-	}
-
-	clock := c.Clock
-	if clock == nil {
-		clock = time.Now
-	}
-
-	unixNow := clock().Unix()
-	if after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) {
-		return fmt.Errorf("ssh: cert is not yet valid")
-	}
-	if before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) {
-		return fmt.Errorf("ssh: cert has expired")
-	}
-	if err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil {
-		return fmt.Errorf("ssh: certificate signature does not verify")
-	}
-
-	return nil
-}
-
-// SignCert sets c.SignatureKey to the authority's public key and stores a
-// Signature, by authority, in the certificate.
-func (c *Certificate) SignCert(rand io.Reader, authority Signer) error {
-	c.Nonce = make([]byte, 32)
-	if _, err := io.ReadFull(rand, c.Nonce); err != nil {
-		return err
-	}
-	c.SignatureKey = authority.PublicKey()
-
-	sig, err := authority.Sign(rand, c.bytesForSigning())
-	if err != nil {
-		return err
-	}
-	c.Signature = sig
-	return nil
-}
-
-var certAlgoNames = map[string]string{
-	KeyAlgoRSA:      CertAlgoRSAv01,
-	KeyAlgoDSA:      CertAlgoDSAv01,
-	KeyAlgoECDSA256: CertAlgoECDSA256v01,
-	KeyAlgoECDSA384: CertAlgoECDSA384v01,
-	KeyAlgoECDSA521: CertAlgoECDSA521v01,
-}
-
-// certToPrivAlgo returns the underlying algorithm for a certificate algorithm.
-// Panics if a non-certificate algorithm is passed.
-func certToPrivAlgo(algo string) string {
-	for privAlgo, pubAlgo := range certAlgoNames {
-		if pubAlgo == algo {
-			return privAlgo
-		}
-	}
-	panic("unknown cert algorithm")
-}
-
-func (cert *Certificate) bytesForSigning() []byte {
-	c2 := *cert
-	c2.Signature = nil
-	out := c2.Marshal()
-	// Drop trailing signature length.
-	return out[:len(out)-4]
-}
-
-// Marshal serializes c into OpenSSH's wire format. It is part of the
-// PublicKey interface.
-func (c *Certificate) Marshal() []byte {
-	generic := genericCertData{
-		Serial:          c.Serial,
-		CertType:        c.CertType,
-		KeyId:           c.KeyId,
-		ValidPrincipals: marshalStringList(c.ValidPrincipals),
-		ValidAfter:      uint64(c.ValidAfter),
-		ValidBefore:     uint64(c.ValidBefore),
-		CriticalOptions: marshalTuples(c.CriticalOptions),
-		Extensions:      marshalTuples(c.Extensions),
-		Reserved:        c.Reserved,
-		SignatureKey:    c.SignatureKey.Marshal(),
-	}
-	if c.Signature != nil {
-		generic.Signature = Marshal(c.Signature)
-	}
-	genericBytes := Marshal(&generic)
-	keyBytes := c.Key.Marshal()
-	_, keyBytes, _ = parseString(keyBytes)
-	prefix := Marshal(&struct {
-		Name  string
-		Nonce []byte
-		Key   []byte `ssh:"rest"`
-	}{c.Type(), c.Nonce, keyBytes})
-
-	result := make([]byte, 0, len(prefix)+len(genericBytes))
-	result = append(result, prefix...)
-	result = append(result, genericBytes...)
-	return result
-}
-
-// Type returns the key name. It is part of the PublicKey interface.
-func (c *Certificate) Type() string {
-	algo, ok := certAlgoNames[c.Key.Type()]
-	if !ok {
-		panic("unknown cert key type")
-	}
-	return algo
-}
-
-// Verify verifies a signature against the certificate's public
-// key. It is part of the PublicKey interface.
-func (c *Certificate) Verify(data []byte, sig *Signature) error {
-	return c.Key.Verify(data, sig)
-}
-
-func parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) {
-	format, in, ok := parseString(in)
-	if !ok {
-		return
-	}
-
-	out = &Signature{
-		Format: string(format),
-	}
-
-	if out.Blob, in, ok = parseString(in); !ok {
-		return
-	}
-
-	return out, in, ok
-}
-
-func parseSignature(in []byte) (out *Signature, rest []byte, ok bool) {
-	sigBytes, rest, ok := parseString(in)
-	if !ok {
-		return
-	}
-
-	out, trailing, ok := parseSignatureBody(sigBytes)
-	if !ok || len(trailing) > 0 {
-		return nil, nil, false
-	}
-	return
-}

+ 0 - 216
modules/crypto/ssh/certs_test.go

@@ -1,216 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto/rand"
-	"reflect"
-	"testing"
-	"time"
-)
-
-// Cert generated by ssh-keygen 6.0p1 Debian-4.
-// % ssh-keygen -s ca-key -I test user-key
-const exampleSSHCert = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgb1srW/W3ZDjYAO45xLYAwzHBDLsJ4Ux6ICFIkTjb1LEAAAADAQABAAAAYQCkoR51poH0wE8w72cqSB8Sszx+vAhzcMdCO0wqHTj7UNENHWEXGrU0E0UQekD7U+yhkhtoyjbPOVIP7hNa6aRk/ezdh/iUnCIt4Jt1v3Z1h1P+hA4QuYFMHNB+rmjPwAcAAAAAAAAAAAAAAAEAAAAEdGVzdAAAAAAAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAHcAAAAHc3NoLXJzYQAAAAMBAAEAAABhANFS2kaktpSGc+CcmEKPyw9mJC4nZKxHKTgLVZeaGbFZOvJTNzBspQHdy7Q1uKSfktxpgjZnksiu/tFF9ngyY2KFoc+U88ya95IZUycBGCUbBQ8+bhDtw/icdDGQD5WnUwAAAG8AAAAHc3NoLXJzYQAAAGC8Y9Z2LQKhIhxf52773XaWrXdxP0t3GBVo4A10vUWiYoAGepr6rQIoGGXFxT4B9Gp+nEBJjOwKDXPrAevow0T9ca8gZN+0ykbhSrXLE5Ao48rqr3zP4O1/9P7e6gp0gw8=`
-
-func TestParseCert(t *testing.T) {
-	authKeyBytes := []byte(exampleSSHCert)
-
-	key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes)
-	if err != nil {
-		t.Fatalf("ParseAuthorizedKey: %v", err)
-	}
-	if len(rest) > 0 {
-		t.Errorf("rest: got %q, want empty", rest)
-	}
-
-	if _, ok := key.(*Certificate); !ok {
-		t.Fatalf("got %v (%T), want *Certificate", key, key)
-	}
-
-	marshaled := MarshalAuthorizedKey(key)
-	// Before comparison, remove the trailing newline that
-	// MarshalAuthorizedKey adds.
-	marshaled = marshaled[:len(marshaled)-1]
-	if !bytes.Equal(authKeyBytes, marshaled) {
-		t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes)
-	}
-}
-
-// Cert generated by ssh-keygen OpenSSH_6.8p1 OS X 10.10.3
-// % ssh-keygen -s ca -I testcert -O source-address=192.168.1.0/24 -O force-command=/bin/sleep user.pub
-// user.pub key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMN
-// Critical Options:
-//         force-command /bin/sleep
-//         source-address 192.168.1.0/24
-// Extensions:
-//         permit-X11-forwarding
-//         permit-agent-forwarding
-//         permit-port-forwarding
-//         permit-pty
-//         permit-user-rc
-const exampleSSHCertWithOptions = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgDyysCJY0XrO1n03EeRRoITnTPdjENFmWDs9X58PP3VUAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMNAAAAAAAAAAAAAAABAAAACHRlc3RjZXJ0AAAAAAAAAAAAAAAA//////////8AAABLAAAADWZvcmNlLWNvbW1hbmQAAAAOAAAACi9iaW4vc2xlZXAAAAAOc291cmNlLWFkZHJlc3MAAAASAAAADjE5Mi4xNjguMS4wLzI0AAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAABFwAAAAdzc2gtcnNhAAAAAwEAAQAAAQEAwU+c5ui5A8+J/CFpjW8wCa52bEODA808WWQDCSuTG/eMXNf59v9Y8Pk0F1E9dGCosSNyVcB/hacUrc6He+i97+HJCyKavBsE6GDxrjRyxYqAlfcOXi/IVmaUGiO8OQ39d4GHrjToInKvExSUeleQyH4Y4/e27T/pILAqPFL3fyrvMLT5qU9QyIt6zIpa7GBP5+urouNavMprV3zsfIqNBbWypinOQAw823a5wN+zwXnhZrgQiHZ/USG09Y6k98y1dTVz8YHlQVR4D3lpTAsKDKJ5hCH9WU4fdf+lU8OyNGaJ/vz0XNqxcToe1l4numLTnaoSuH89pHryjqurB7lJKwAAAQ8AAAAHc3NoLXJzYQAAAQCaHvUIoPL1zWUHIXLvu96/HU1s/i4CAW2IIEuGgxCUCiFj6vyTyYtgxQxcmbfZf6eaITlS6XJZa7Qq4iaFZh75C1DXTX8labXhRSD4E2t//AIP9MC1rtQC5xo6FmbQ+BoKcDskr+mNACcbRSxs3IL3bwCfWDnIw2WbVox9ZdcthJKk4UoCW4ix4QwdHw7zlddlz++fGEEVhmTbll1SUkycGApPFBsAYRTMupUJcYPIeReBI/m8XfkoMk99bV8ZJQTAd7OekHY2/48Ff53jLmyDjP7kNw1F8OaPtkFs6dGJXta4krmaekPy87j+35In5hFj7yoOqvSbmYUkeX70/GGQ`
-
-func TestParseCertWithOptions(t *testing.T) {
-	opts := map[string]string{
-		"source-address": "192.168.1.0/24",
-		"force-command":  "/bin/sleep",
-	}
-	exts := map[string]string{
-		"permit-X11-forwarding":   "",
-		"permit-agent-forwarding": "",
-		"permit-port-forwarding":  "",
-		"permit-pty":              "",
-		"permit-user-rc":          "",
-	}
-	authKeyBytes := []byte(exampleSSHCertWithOptions)
-
-	key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes)
-	if err != nil {
-		t.Fatalf("ParseAuthorizedKey: %v", err)
-	}
-	if len(rest) > 0 {
-		t.Errorf("rest: got %q, want empty", rest)
-	}
-	cert, ok := key.(*Certificate)
-	if !ok {
-		t.Fatalf("got %v (%T), want *Certificate", key, key)
-	}
-	if !reflect.DeepEqual(cert.CriticalOptions, opts) {
-		t.Errorf("unexpected critical options - got %v, want %v", cert.CriticalOptions, opts)
-	}
-	if !reflect.DeepEqual(cert.Extensions, exts) {
-		t.Errorf("unexpected Extensions - got %v, want %v", cert.Extensions, exts)
-	}
-	marshaled := MarshalAuthorizedKey(key)
-	// Before comparison, remove the trailing newline that
-	// MarshalAuthorizedKey adds.
-	marshaled = marshaled[:len(marshaled)-1]
-	if !bytes.Equal(authKeyBytes, marshaled) {
-		t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes)
-	}
-}
-
-func TestValidateCert(t *testing.T) {
-	key, _, _, _, err := ParseAuthorizedKey([]byte(exampleSSHCert))
-	if err != nil {
-		t.Fatalf("ParseAuthorizedKey: %v", err)
-	}
-	validCert, ok := key.(*Certificate)
-	if !ok {
-		t.Fatalf("got %v (%T), want *Certificate", key, key)
-	}
-	checker := CertChecker{}
-	checker.IsAuthority = func(k PublicKey) bool {
-		return bytes.Equal(k.Marshal(), validCert.SignatureKey.Marshal())
-	}
-
-	if err := checker.CheckCert("user", validCert); err != nil {
-		t.Errorf("Unable to validate certificate: %v", err)
-	}
-	invalidCert := &Certificate{
-		Key:          testPublicKeys["rsa"],
-		SignatureKey: testPublicKeys["ecdsa"],
-		ValidBefore:  CertTimeInfinity,
-		Signature:    &Signature{},
-	}
-	if err := checker.CheckCert("user", invalidCert); err == nil {
-		t.Error("Invalid cert signature passed validation")
-	}
-}
-
-func TestValidateCertTime(t *testing.T) {
-	cert := Certificate{
-		ValidPrincipals: []string{"user"},
-		Key:             testPublicKeys["rsa"],
-		ValidAfter:      50,
-		ValidBefore:     100,
-	}
-
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-
-	for ts, ok := range map[int64]bool{
-		25:  false,
-		50:  true,
-		99:  true,
-		100: false,
-		125: false,
-	} {
-		checker := CertChecker{
-			Clock: func() time.Time { return time.Unix(ts, 0) },
-		}
-		checker.IsAuthority = func(k PublicKey) bool {
-			return bytes.Equal(k.Marshal(),
-				testPublicKeys["ecdsa"].Marshal())
-		}
-
-		if v := checker.CheckCert("user", &cert); (v == nil) != ok {
-			t.Errorf("Authenticate(%d): %v", ts, v)
-		}
-	}
-}
-
-// TODO(hanwen): tests for
-//
-// host keys:
-// * fallbacks
-
-func TestHostKeyCert(t *testing.T) {
-	cert := &Certificate{
-		ValidPrincipals: []string{"hostname", "hostname.domain"},
-		Key:             testPublicKeys["rsa"],
-		ValidBefore:     CertTimeInfinity,
-		CertType:        HostCert,
-	}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-
-	checker := &CertChecker{
-		IsAuthority: func(p PublicKey) bool {
-			return bytes.Equal(testPublicKeys["ecdsa"].Marshal(), p.Marshal())
-		},
-	}
-
-	certSigner, err := NewCertSigner(cert, testSigners["rsa"])
-	if err != nil {
-		t.Errorf("NewCertSigner: %v", err)
-	}
-
-	for _, name := range []string{"hostname", "otherhost"} {
-		c1, c2, err := netPipe()
-		if err != nil {
-			t.Fatalf("netPipe: %v", err)
-		}
-		defer c1.Close()
-		defer c2.Close()
-
-		errc := make(chan error)
-
-		go func() {
-			conf := ServerConfig{
-				NoClientAuth: true,
-			}
-			conf.AddHostKey(certSigner)
-			_, _, _, err := NewServerConn(c1, &conf)
-			errc <- err
-		}()
-
-		config := &ClientConfig{
-			User:            "user",
-			HostKeyCallback: checker.CheckHostKey,
-		}
-		_, _, _, err = NewClientConn(c2, name, config)
-
-		succeed := name == "hostname"
-		if (err == nil) != succeed {
-			t.Fatalf("NewClientConn(%q): %v", name, err)
-		}
-
-		err = <-errc
-		if (err == nil) != succeed {
-			t.Fatalf("NewServerConn(%q): %v", name, err)
-		}
-	}
-}

+ 0 - 631
modules/crypto/ssh/channel.go

@@ -1,631 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"encoding/binary"
-	"errors"
-	"fmt"
-	"io"
-	"log"
-	"sync"
-)
-
-const (
-	minPacketLength = 9
-	// channelMaxPacket contains the maximum number of bytes that will be
-	// sent in a single packet. As per RFC 4253, section 6.1, 32k is also
-	// the minimum.
-	channelMaxPacket = 1 << 15
-	// We follow OpenSSH here.
-	channelWindowSize = 64 * channelMaxPacket
-)
-
-// NewChannel represents an incoming request to a channel. It must either be
-// accepted for use by calling Accept, or rejected by calling Reject.
-type NewChannel interface {
-	// Accept accepts the channel creation request. It returns the Channel
-	// and a Go channel containing SSH requests. The Go channel must be
-	// serviced otherwise the Channel will hang.
-	Accept() (Channel, <-chan *Request, error)
-
-	// Reject rejects the channel creation request. After calling
-	// this, no other methods on the Channel may be called.
-	Reject(reason RejectionReason, message string) error
-
-	// ChannelType returns the type of the channel, as supplied by the
-	// client.
-	ChannelType() string
-
-	// ExtraData returns the arbitrary payload for this channel, as supplied
-	// by the client. This data is specific to the channel type.
-	ExtraData() []byte
-}
-
-// A Channel is an ordered, reliable, flow-controlled, duplex stream
-// that is multiplexed over an SSH connection.
-type Channel interface {
-	// Read reads up to len(data) bytes from the channel.
-	Read(data []byte) (int, error)
-
-	// Write writes len(data) bytes to the channel.
-	Write(data []byte) (int, error)
-
-	// Close signals end of channel use. No data may be sent after this
-	// call.
-	Close() error
-
-	// CloseWrite signals the end of sending in-band
-	// data. Requests may still be sent, and the other side may
-	// still send data
-	CloseWrite() error
-
-	// SendRequest sends a channel request.  If wantReply is true,
-	// it will wait for a reply and return the result as a
-	// boolean, otherwise the return value will be false. Channel
-	// requests are out-of-band messages so they may be sent even
-	// if the data stream is closed or blocked by flow control.
-	SendRequest(name string, wantReply bool, payload []byte) (bool, error)
-
-	// Stderr returns an io.ReadWriter that writes to this channel
-	// with the extended data type set to stderr. Stderr may
-	// safely be read and written from a different goroutine than
-	// Read and Write respectively.
-	Stderr() io.ReadWriter
-}
-
-// Request is a request sent outside of the normal stream of
-// data. Requests can either be specific to an SSH channel, or they
-// can be global.
-type Request struct {
-	Type      string
-	WantReply bool
-	Payload   []byte
-
-	ch  *channel
-	mux *mux
-}
-
-// Reply sends a response to a request. It must be called for all requests
-// where WantReply is true and is a no-op otherwise. The payload argument is
-// ignored for replies to channel-specific requests.
-func (r *Request) Reply(ok bool, payload []byte) error {
-	if !r.WantReply {
-		return nil
-	}
-
-	if r.ch == nil {
-		return r.mux.ackRequest(ok, payload)
-	}
-
-	return r.ch.ackRequest(ok)
-}
-
-// RejectionReason is an enumeration used when rejecting channel creation
-// requests. See RFC 4254, section 5.1.
-type RejectionReason uint32
-
-const (
-	Prohibited RejectionReason = iota + 1
-	ConnectionFailed
-	UnknownChannelType
-	ResourceShortage
-)
-
-// String converts the rejection reason to human readable form.
-func (r RejectionReason) String() string {
-	switch r {
-	case Prohibited:
-		return "administratively prohibited"
-	case ConnectionFailed:
-		return "connect failed"
-	case UnknownChannelType:
-		return "unknown channel type"
-	case ResourceShortage:
-		return "resource shortage"
-	}
-	return fmt.Sprintf("unknown reason %d", int(r))
-}
-
-func min(a uint32, b int) uint32 {
-	if a < uint32(b) {
-		return a
-	}
-	return uint32(b)
-}
-
-type channelDirection uint8
-
-const (
-	channelInbound channelDirection = iota
-	channelOutbound
-)
-
-// channel is an implementation of the Channel interface that works
-// with the mux class.
-type channel struct {
-	// R/O after creation
-	chanType          string
-	extraData         []byte
-	localId, remoteId uint32
-
-	// maxIncomingPayload and maxRemotePayload are the maximum
-	// payload sizes of normal and extended data packets for
-	// receiving and sending, respectively. The wire packet will
-	// be 9 or 13 bytes larger (excluding encryption overhead).
-	maxIncomingPayload uint32
-	maxRemotePayload   uint32
-
-	mux *mux
-
-	// decided is set to true if an accept or reject message has been sent
-	// (for outbound channels) or received (for inbound channels).
-	decided bool
-
-	// direction contains either channelOutbound, for channels created
-	// locally, or channelInbound, for channels created by the peer.
-	direction channelDirection
-
-	// Pending internal channel messages.
-	msg chan interface{}
-
-	// Since requests have no ID, there can be only one request
-	// with WantReply=true outstanding.  This lock is held by a
-	// goroutine that has such an outgoing request pending.
-	sentRequestMu sync.Mutex
-
-	incomingRequests chan *Request
-
-	sentEOF bool
-
-	// thread-safe data
-	remoteWin  window
-	pending    *buffer
-	extPending *buffer
-
-	// windowMu protects myWindow, the flow-control window.
-	windowMu sync.Mutex
-	myWindow uint32
-
-	// writeMu serializes calls to mux.conn.writePacket() and
-	// protects sentClose and packetPool. This mutex must be
-	// different from windowMu, as writePacket can block if there
-	// is a key exchange pending.
-	writeMu   sync.Mutex
-	sentClose bool
-
-	// packetPool has a buffer for each extended channel ID to
-	// save allocations during writes.
-	packetPool map[uint32][]byte
-}
-
-// writePacket sends a packet. If the packet is a channel close, it updates
-// sentClose. This method takes the lock c.writeMu.
-func (c *channel) writePacket(packet []byte) error {
-	c.writeMu.Lock()
-	if c.sentClose {
-		c.writeMu.Unlock()
-		return io.EOF
-	}
-	c.sentClose = (packet[0] == msgChannelClose)
-	err := c.mux.conn.writePacket(packet)
-	c.writeMu.Unlock()
-	return err
-}
-
-func (c *channel) sendMessage(msg interface{}) error {
-	if debugMux {
-		log.Printf("send %d: %#v", c.mux.chanList.offset, msg)
-	}
-
-	p := Marshal(msg)
-	binary.BigEndian.PutUint32(p[1:], c.remoteId)
-	return c.writePacket(p)
-}
-
-// WriteExtended writes data to a specific extended stream. These streams are
-// used, for example, for stderr.
-func (c *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) {
-	if c.sentEOF {
-		return 0, io.EOF
-	}
-	// 1 byte message type, 4 bytes remoteId, 4 bytes data length
-	opCode := byte(msgChannelData)
-	headerLength := uint32(9)
-	if extendedCode > 0 {
-		headerLength += 4
-		opCode = msgChannelExtendedData
-	}
-
-	c.writeMu.Lock()
-	packet := c.packetPool[extendedCode]
-	// We don't remove the buffer from packetPool, so
-	// WriteExtended calls from different goroutines will be
-	// flagged as errors by the race detector.
-	c.writeMu.Unlock()
-
-	for len(data) > 0 {
-		space := min(c.maxRemotePayload, len(data))
-		if space, err = c.remoteWin.reserve(space); err != nil {
-			return n, err
-		}
-		if want := headerLength + space; uint32(cap(packet)) < want {
-			packet = make([]byte, want)
-		} else {
-			packet = packet[:want]
-		}
-
-		todo := data[:space]
-
-		packet[0] = opCode
-		binary.BigEndian.PutUint32(packet[1:], c.remoteId)
-		if extendedCode > 0 {
-			binary.BigEndian.PutUint32(packet[5:], uint32(extendedCode))
-		}
-		binary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo)))
-		copy(packet[headerLength:], todo)
-		if err = c.writePacket(packet); err != nil {
-			return n, err
-		}
-
-		n += len(todo)
-		data = data[len(todo):]
-	}
-
-	c.writeMu.Lock()
-	c.packetPool[extendedCode] = packet
-	c.writeMu.Unlock()
-
-	return n, err
-}
-
-func (c *channel) handleData(packet []byte) error {
-	headerLen := 9
-	isExtendedData := packet[0] == msgChannelExtendedData
-	if isExtendedData {
-		headerLen = 13
-	}
-	if len(packet) < headerLen {
-		// malformed data packet
-		return parseError(packet[0])
-	}
-
-	var extended uint32
-	if isExtendedData {
-		extended = binary.BigEndian.Uint32(packet[5:])
-	}
-
-	length := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen])
-	if length == 0 {
-		return nil
-	}
-	if length > c.maxIncomingPayload {
-		// TODO(hanwen): should send Disconnect?
-		return errors.New("ssh: incoming packet exceeds maximum payload size")
-	}
-
-	data := packet[headerLen:]
-	if length != uint32(len(data)) {
-		return errors.New("ssh: wrong packet length")
-	}
-
-	c.windowMu.Lock()
-	if c.myWindow < length {
-		c.windowMu.Unlock()
-		// TODO(hanwen): should send Disconnect with reason?
-		return errors.New("ssh: remote side wrote too much")
-	}
-	c.myWindow -= length
-	c.windowMu.Unlock()
-
-	if extended == 1 {
-		c.extPending.write(data)
-	} else if extended > 0 {
-		// discard other extended data.
-	} else {
-		c.pending.write(data)
-	}
-	return nil
-}
-
-func (c *channel) adjustWindow(n uint32) error {
-	c.windowMu.Lock()
-	// Since myWindow is managed on our side, and can never exceed
-	// the initial window setting, we don't worry about overflow.
-	c.myWindow += uint32(n)
-	c.windowMu.Unlock()
-	return c.sendMessage(windowAdjustMsg{
-		AdditionalBytes: uint32(n),
-	})
-}
-
-func (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) {
-	switch extended {
-	case 1:
-		n, err = c.extPending.Read(data)
-	case 0:
-		n, err = c.pending.Read(data)
-	default:
-		return 0, fmt.Errorf("ssh: extended code %d unimplemented", extended)
-	}
-
-	if n > 0 {
-		err = c.adjustWindow(uint32(n))
-		// sendWindowAdjust can return io.EOF if the remote
-		// peer has closed the connection, however we want to
-		// defer forwarding io.EOF to the caller of Read until
-		// the buffer has been drained.
-		if n > 0 && err == io.EOF {
-			err = nil
-		}
-	}
-
-	return n, err
-}
-
-func (c *channel) close() {
-	c.pending.eof()
-	c.extPending.eof()
-	close(c.msg)
-	close(c.incomingRequests)
-	c.writeMu.Lock()
-	// This is not necesary for a normal channel teardown, but if
-	// there was another error, it is.
-	c.sentClose = true
-	c.writeMu.Unlock()
-	// Unblock writers.
-	c.remoteWin.close()
-}
-
-// responseMessageReceived is called when a success or failure message is
-// received on a channel to check that such a message is reasonable for the
-// given channel.
-func (c *channel) responseMessageReceived() error {
-	if c.direction == channelInbound {
-		return errors.New("ssh: channel response message received on inbound channel")
-	}
-	if c.decided {
-		return errors.New("ssh: duplicate response received for channel")
-	}
-	c.decided = true
-	return nil
-}
-
-func (c *channel) handlePacket(packet []byte) error {
-	switch packet[0] {
-	case msgChannelData, msgChannelExtendedData:
-		return c.handleData(packet)
-	case msgChannelClose:
-		c.sendMessage(channelCloseMsg{PeersId: c.remoteId})
-		c.mux.chanList.remove(c.localId)
-		c.close()
-		return nil
-	case msgChannelEOF:
-		// RFC 4254 is mute on how EOF affects dataExt messages but
-		// it is logical to signal EOF at the same time.
-		c.extPending.eof()
-		c.pending.eof()
-		return nil
-	}
-
-	decoded, err := decode(packet)
-	if err != nil {
-		return err
-	}
-
-	switch msg := decoded.(type) {
-	case *channelOpenFailureMsg:
-		if err := c.responseMessageReceived(); err != nil {
-			return err
-		}
-		c.mux.chanList.remove(msg.PeersId)
-		c.msg <- msg
-	case *channelOpenConfirmMsg:
-		if err := c.responseMessageReceived(); err != nil {
-			return err
-		}
-		if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {
-			return fmt.Errorf("ssh: invalid MaxPacketSize %d from peer", msg.MaxPacketSize)
-		}
-		c.remoteId = msg.MyId
-		c.maxRemotePayload = msg.MaxPacketSize
-		c.remoteWin.add(msg.MyWindow)
-		c.msg <- msg
-	case *windowAdjustMsg:
-		if !c.remoteWin.add(msg.AdditionalBytes) {
-			return fmt.Errorf("ssh: invalid window update for %d bytes", msg.AdditionalBytes)
-		}
-	case *channelRequestMsg:
-		req := Request{
-			Type:      msg.Request,
-			WantReply: msg.WantReply,
-			Payload:   msg.RequestSpecificData,
-			ch:        c,
-		}
-
-		c.incomingRequests <- &req
-	default:
-		c.msg <- msg
-	}
-	return nil
-}
-
-func (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel {
-	ch := &channel{
-		remoteWin:        window{Cond: newCond()},
-		myWindow:         channelWindowSize,
-		pending:          newBuffer(),
-		extPending:       newBuffer(),
-		direction:        direction,
-		incomingRequests: make(chan *Request, 16),
-		msg:              make(chan interface{}, 16),
-		chanType:         chanType,
-		extraData:        extraData,
-		mux:              m,
-		packetPool:       make(map[uint32][]byte),
-	}
-	ch.localId = m.chanList.add(ch)
-	return ch
-}
-
-var errUndecided = errors.New("ssh: must Accept or Reject channel")
-var errDecidedAlready = errors.New("ssh: can call Accept or Reject only once")
-
-type extChannel struct {
-	code uint32
-	ch   *channel
-}
-
-func (e *extChannel) Write(data []byte) (n int, err error) {
-	return e.ch.WriteExtended(data, e.code)
-}
-
-func (e *extChannel) Read(data []byte) (n int, err error) {
-	return e.ch.ReadExtended(data, e.code)
-}
-
-func (c *channel) Accept() (Channel, <-chan *Request, error) {
-	if c.decided {
-		return nil, nil, errDecidedAlready
-	}
-	c.maxIncomingPayload = channelMaxPacket
-	confirm := channelOpenConfirmMsg{
-		PeersId:       c.remoteId,
-		MyId:          c.localId,
-		MyWindow:      c.myWindow,
-		MaxPacketSize: c.maxIncomingPayload,
-	}
-	c.decided = true
-	if err := c.sendMessage(confirm); err != nil {
-		return nil, nil, err
-	}
-
-	return c, c.incomingRequests, nil
-}
-
-func (ch *channel) Reject(reason RejectionReason, message string) error {
-	if ch.decided {
-		return errDecidedAlready
-	}
-	reject := channelOpenFailureMsg{
-		PeersId:  ch.remoteId,
-		Reason:   reason,
-		Message:  message,
-		Language: "en",
-	}
-	ch.decided = true
-	return ch.sendMessage(reject)
-}
-
-func (ch *channel) Read(data []byte) (int, error) {
-	if !ch.decided {
-		return 0, errUndecided
-	}
-	return ch.ReadExtended(data, 0)
-}
-
-func (ch *channel) Write(data []byte) (int, error) {
-	if !ch.decided {
-		return 0, errUndecided
-	}
-	return ch.WriteExtended(data, 0)
-}
-
-func (ch *channel) CloseWrite() error {
-	if !ch.decided {
-		return errUndecided
-	}
-	ch.sentEOF = true
-	return ch.sendMessage(channelEOFMsg{
-		PeersId: ch.remoteId})
-}
-
-func (ch *channel) Close() error {
-	if !ch.decided {
-		return errUndecided
-	}
-
-	return ch.sendMessage(channelCloseMsg{
-		PeersId: ch.remoteId})
-}
-
-// Extended returns an io.ReadWriter that sends and receives data on the given,
-// SSH extended stream. Such streams are used, for example, for stderr.
-func (ch *channel) Extended(code uint32) io.ReadWriter {
-	if !ch.decided {
-		return nil
-	}
-	return &extChannel{code, ch}
-}
-
-func (ch *channel) Stderr() io.ReadWriter {
-	return ch.Extended(1)
-}
-
-func (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {
-	if !ch.decided {
-		return false, errUndecided
-	}
-
-	if wantReply {
-		ch.sentRequestMu.Lock()
-		defer ch.sentRequestMu.Unlock()
-	}
-
-	msg := channelRequestMsg{
-		PeersId:             ch.remoteId,
-		Request:             name,
-		WantReply:           wantReply,
-		RequestSpecificData: payload,
-	}
-
-	if err := ch.sendMessage(msg); err != nil {
-		return false, err
-	}
-
-	if wantReply {
-		m, ok := (<-ch.msg)
-		if !ok {
-			return false, io.EOF
-		}
-		switch m.(type) {
-		case *channelRequestFailureMsg:
-			return false, nil
-		case *channelRequestSuccessMsg:
-			return true, nil
-		default:
-			return false, fmt.Errorf("ssh: unexpected response to channel request: %#v", m)
-		}
-	}
-
-	return false, nil
-}
-
-// ackRequest either sends an ack or nack to the channel request.
-func (ch *channel) ackRequest(ok bool) error {
-	if !ch.decided {
-		return errUndecided
-	}
-
-	var msg interface{}
-	if !ok {
-		msg = channelRequestFailureMsg{
-			PeersId: ch.remoteId,
-		}
-	} else {
-		msg = channelRequestSuccessMsg{
-			PeersId: ch.remoteId,
-		}
-	}
-	return ch.sendMessage(msg)
-}
-
-func (ch *channel) ChannelType() string {
-	return ch.chanType
-}
-
-func (ch *channel) ExtraData() []byte {
-	return ch.extraData
-}

+ 0 - 549
modules/crypto/ssh/cipher.go

@@ -1,549 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"crypto/aes"
-	"crypto/cipher"
-	"crypto/rc4"
-	"crypto/subtle"
-	"encoding/binary"
-	"errors"
-	"fmt"
-	"hash"
-	"io"
-	"io/ioutil"
-)
-
-const (
-	packetSizeMultiple = 16 // TODO(huin) this should be determined by the cipher.
-
-	// RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations
-	// MUST be able to process (plus a few more kilobytes for padding and mac). The RFC
-	// indicates implementations SHOULD be able to handle larger packet sizes, but then
-	// waffles on about reasonable limits.
-	//
-	// OpenSSH caps their maxPacket at 256kB so we choose to do
-	// the same. maxPacket is also used to ensure that uint32
-	// length fields do not overflow, so it should remain well
-	// below 4G.
-	maxPacket = 256 * 1024
-)
-
-// noneCipher implements cipher.Stream and provides no encryption. It is used
-// by the transport before the first key-exchange.
-type noneCipher struct{}
-
-func (c noneCipher) XORKeyStream(dst, src []byte) {
-	copy(dst, src)
-}
-
-func newAESCTR(key, iv []byte) (cipher.Stream, error) {
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return nil, err
-	}
-	return cipher.NewCTR(c, iv), nil
-}
-
-func newRC4(key, iv []byte) (cipher.Stream, error) {
-	return rc4.NewCipher(key)
-}
-
-type streamCipherMode struct {
-	keySize    int
-	ivSize     int
-	skip       int
-	createFunc func(key, iv []byte) (cipher.Stream, error)
-}
-
-func (c *streamCipherMode) createStream(key, iv []byte) (cipher.Stream, error) {
-	if len(key) < c.keySize {
-		panic("ssh: key length too small for cipher")
-	}
-	if len(iv) < c.ivSize {
-		panic("ssh: iv too small for cipher")
-	}
-
-	stream, err := c.createFunc(key[:c.keySize], iv[:c.ivSize])
-	if err != nil {
-		return nil, err
-	}
-
-	var streamDump []byte
-	if c.skip > 0 {
-		streamDump = make([]byte, 512)
-	}
-
-	for remainingToDump := c.skip; remainingToDump > 0; {
-		dumpThisTime := remainingToDump
-		if dumpThisTime > len(streamDump) {
-			dumpThisTime = len(streamDump)
-		}
-		stream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime])
-		remainingToDump -= dumpThisTime
-	}
-
-	return stream, nil
-}
-
-// cipherModes documents properties of supported ciphers. Ciphers not included
-// are not supported and will not be negotiated, even if explicitly requested in
-// ClientConfig.Crypto.Ciphers.
-var cipherModes = map[string]*streamCipherMode{
-	// Ciphers from RFC4344, which introduced many CTR-based ciphers. Algorithms
-	// are defined in the order specified in the RFC.
-	"aes128-ctr": {16, aes.BlockSize, 0, newAESCTR},
-	"aes192-ctr": {24, aes.BlockSize, 0, newAESCTR},
-	"aes256-ctr": {32, aes.BlockSize, 0, newAESCTR},
-
-	// Ciphers from RFC4345, which introduces security-improved arcfour ciphers.
-	// They are defined in the order specified in the RFC.
-	"arcfour128": {16, 0, 1536, newRC4},
-	"arcfour256": {32, 0, 1536, newRC4},
-
-	// Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol.
-	// Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and
-	// RC4) has problems with weak keys, and should be used with caution."
-	// RFC4345 introduces improved versions of Arcfour.
-	"arcfour": {16, 0, 0, newRC4},
-
-	// AES-GCM is not a stream cipher, so it is constructed with a
-	// special case. If we add any more non-stream ciphers, we
-	// should invest a cleaner way to do this.
-	gcmCipherID: {16, 12, 0, nil},
-
-	// insecure cipher, see http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf
-	// uncomment below to enable it.
-	// aes128cbcID: {16, aes.BlockSize, 0, nil},
-}
-
-// prefixLen is the length of the packet prefix that contains the packet length
-// and number of padding bytes.
-const prefixLen = 5
-
-// streamPacketCipher is a packetCipher using a stream cipher.
-type streamPacketCipher struct {
-	mac    hash.Hash
-	cipher cipher.Stream
-
-	// The following members are to avoid per-packet allocations.
-	prefix      [prefixLen]byte
-	seqNumBytes [4]byte
-	padding     [2 * packetSizeMultiple]byte
-	packetData  []byte
-	macResult   []byte
-}
-
-// readPacket reads and decrypt a single packet from the reader argument.
-func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {
-	if _, err := io.ReadFull(r, s.prefix[:]); err != nil {
-		return nil, err
-	}
-
-	s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
-	length := binary.BigEndian.Uint32(s.prefix[0:4])
-	paddingLength := uint32(s.prefix[4])
-
-	var macSize uint32
-	if s.mac != nil {
-		s.mac.Reset()
-		binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
-		s.mac.Write(s.seqNumBytes[:])
-		s.mac.Write(s.prefix[:])
-		macSize = uint32(s.mac.Size())
-	}
-
-	if length <= paddingLength+1 {
-		return nil, errors.New("ssh: invalid packet length, packet too small")
-	}
-
-	if length > maxPacket {
-		return nil, errors.New("ssh: invalid packet length, packet too large")
-	}
-
-	// the maxPacket check above ensures that length-1+macSize
-	// does not overflow.
-	if uint32(cap(s.packetData)) < length-1+macSize {
-		s.packetData = make([]byte, length-1+macSize)
-	} else {
-		s.packetData = s.packetData[:length-1+macSize]
-	}
-
-	if _, err := io.ReadFull(r, s.packetData); err != nil {
-		return nil, err
-	}
-	mac := s.packetData[length-1:]
-	data := s.packetData[:length-1]
-	s.cipher.XORKeyStream(data, data)
-
-	if s.mac != nil {
-		s.mac.Write(data)
-		s.macResult = s.mac.Sum(s.macResult[:0])
-		if subtle.ConstantTimeCompare(s.macResult, mac) != 1 {
-			return nil, errors.New("ssh: MAC failure")
-		}
-	}
-
-	return s.packetData[:length-paddingLength-1], nil
-}
-
-// writePacket encrypts and sends a packet of data to the writer argument
-func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
-	if len(packet) > maxPacket {
-		return errors.New("ssh: packet too large")
-	}
-
-	paddingLength := packetSizeMultiple - (prefixLen+len(packet))%packetSizeMultiple
-	if paddingLength < 4 {
-		paddingLength += packetSizeMultiple
-	}
-
-	length := len(packet) + 1 + paddingLength
-	binary.BigEndian.PutUint32(s.prefix[:], uint32(length))
-	s.prefix[4] = byte(paddingLength)
-	padding := s.padding[:paddingLength]
-	if _, err := io.ReadFull(rand, padding); err != nil {
-		return err
-	}
-
-	if s.mac != nil {
-		s.mac.Reset()
-		binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
-		s.mac.Write(s.seqNumBytes[:])
-		s.mac.Write(s.prefix[:])
-		s.mac.Write(packet)
-		s.mac.Write(padding)
-	}
-
-	s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
-	s.cipher.XORKeyStream(packet, packet)
-	s.cipher.XORKeyStream(padding, padding)
-
-	if _, err := w.Write(s.prefix[:]); err != nil {
-		return err
-	}
-	if _, err := w.Write(packet); err != nil {
-		return err
-	}
-	if _, err := w.Write(padding); err != nil {
-		return err
-	}
-
-	if s.mac != nil {
-		s.macResult = s.mac.Sum(s.macResult[:0])
-		if _, err := w.Write(s.macResult); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-type gcmCipher struct {
-	aead   cipher.AEAD
-	prefix [4]byte
-	iv     []byte
-	buf    []byte
-}
-
-func newGCMCipher(iv, key, macKey []byte) (packetCipher, error) {
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return nil, err
-	}
-
-	aead, err := cipher.NewGCM(c)
-	if err != nil {
-		return nil, err
-	}
-
-	return &gcmCipher{
-		aead: aead,
-		iv:   iv,
-	}, nil
-}
-
-const gcmTagSize = 16
-
-func (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
-	// Pad out to multiple of 16 bytes. This is different from the
-	// stream cipher because that encrypts the length too.
-	padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple)
-	if padding < 4 {
-		padding += packetSizeMultiple
-	}
-
-	length := uint32(len(packet) + int(padding) + 1)
-	binary.BigEndian.PutUint32(c.prefix[:], length)
-	if _, err := w.Write(c.prefix[:]); err != nil {
-		return err
-	}
-
-	if cap(c.buf) < int(length) {
-		c.buf = make([]byte, length)
-	} else {
-		c.buf = c.buf[:length]
-	}
-
-	c.buf[0] = padding
-	copy(c.buf[1:], packet)
-	if _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil {
-		return err
-	}
-	c.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:])
-	if _, err := w.Write(c.buf); err != nil {
-		return err
-	}
-	c.incIV()
-
-	return nil
-}
-
-func (c *gcmCipher) incIV() {
-	for i := 4 + 7; i >= 4; i-- {
-		c.iv[i]++
-		if c.iv[i] != 0 {
-			break
-		}
-	}
-}
-
-func (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {
-	if _, err := io.ReadFull(r, c.prefix[:]); err != nil {
-		return nil, err
-	}
-	length := binary.BigEndian.Uint32(c.prefix[:])
-	if length > maxPacket {
-		return nil, errors.New("ssh: max packet length exceeded.")
-	}
-
-	if cap(c.buf) < int(length+gcmTagSize) {
-		c.buf = make([]byte, length+gcmTagSize)
-	} else {
-		c.buf = c.buf[:length+gcmTagSize]
-	}
-
-	if _, err := io.ReadFull(r, c.buf); err != nil {
-		return nil, err
-	}
-
-	plain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:])
-	if err != nil {
-		return nil, err
-	}
-	c.incIV()
-
-	padding := plain[0]
-	if padding < 4 || padding >= 20 {
-		return nil, fmt.Errorf("ssh: illegal padding %d", padding)
-	}
-
-	if int(padding+1) >= len(plain) {
-		return nil, fmt.Errorf("ssh: padding %d too large", padding)
-	}
-	plain = plain[1 : length-uint32(padding)]
-	return plain, nil
-}
-
-// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1
-type cbcCipher struct {
-	mac       hash.Hash
-	macSize   uint32
-	decrypter cipher.BlockMode
-	encrypter cipher.BlockMode
-
-	// The following members are to avoid per-packet allocations.
-	seqNumBytes [4]byte
-	packetData  []byte
-	macResult   []byte
-
-	// Amount of data we should still read to hide which
-	// verification error triggered.
-	oracleCamouflage uint32
-}
-
-func newAESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return nil, err
-	}
-
-	cbc := &cbcCipher{
-		mac:        macModes[algs.MAC].new(macKey),
-		decrypter:  cipher.NewCBCDecrypter(c, iv),
-		encrypter:  cipher.NewCBCEncrypter(c, iv),
-		packetData: make([]byte, 1024),
-	}
-	if cbc.mac != nil {
-		cbc.macSize = uint32(cbc.mac.Size())
-	}
-
-	return cbc, nil
-}
-
-func maxUInt32(a, b int) uint32 {
-	if a > b {
-		return uint32(a)
-	}
-	return uint32(b)
-}
-
-const (
-	cbcMinPacketSizeMultiple = 8
-	cbcMinPacketSize         = 16
-	cbcMinPaddingSize        = 4
-)
-
-// cbcError represents a verification error that may leak information.
-type cbcError string
-
-func (e cbcError) Error() string { return string(e) }
-
-func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {
-	p, err := c.readPacketLeaky(seqNum, r)
-	if err != nil {
-		if _, ok := err.(cbcError); ok {
-			// Verification error: read a fixed amount of
-			// data, to make distinguishing between
-			// failing MAC and failing length check more
-			// difficult.
-			io.CopyN(ioutil.Discard, r, int64(c.oracleCamouflage))
-		}
-	}
-	return p, err
-}
-
-func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) {
-	blockSize := c.decrypter.BlockSize()
-
-	// Read the header, which will include some of the subsequent data in the
-	// case of block ciphers - this is copied back to the payload later.
-	// How many bytes of payload/padding will be read with this first read.
-	firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize)
-	firstBlock := c.packetData[:firstBlockLength]
-	if _, err := io.ReadFull(r, firstBlock); err != nil {
-		return nil, err
-	}
-
-	c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength
-
-	c.decrypter.CryptBlocks(firstBlock, firstBlock)
-	length := binary.BigEndian.Uint32(firstBlock[:4])
-	if length > maxPacket {
-		return nil, cbcError("ssh: packet too large")
-	}
-	if length+4 < maxUInt32(cbcMinPacketSize, blockSize) {
-		// The minimum size of a packet is 16 (or the cipher block size, whichever
-		// is larger) bytes.
-		return nil, cbcError("ssh: packet too small")
-	}
-	// The length of the packet (including the length field but not the MAC) must
-	// be a multiple of the block size or 8, whichever is larger.
-	if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 {
-		return nil, cbcError("ssh: invalid packet length multiple")
-	}
-
-	paddingLength := uint32(firstBlock[4])
-	if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 {
-		return nil, cbcError("ssh: invalid packet length")
-	}
-
-	// Positions within the c.packetData buffer:
-	macStart := 4 + length
-	paddingStart := macStart - paddingLength
-
-	// Entire packet size, starting before length, ending at end of mac.
-	entirePacketSize := macStart + c.macSize
-
-	// Ensure c.packetData is large enough for the entire packet data.
-	if uint32(cap(c.packetData)) < entirePacketSize {
-		// Still need to upsize and copy, but this should be rare at runtime, only
-		// on upsizing the packetData buffer.
-		c.packetData = make([]byte, entirePacketSize)
-		copy(c.packetData, firstBlock)
-	} else {
-		c.packetData = c.packetData[:entirePacketSize]
-	}
-
-	if n, err := io.ReadFull(r, c.packetData[firstBlockLength:]); err != nil {
-		return nil, err
-	} else {
-		c.oracleCamouflage -= uint32(n)
-	}
-
-	remainingCrypted := c.packetData[firstBlockLength:macStart]
-	c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted)
-
-	mac := c.packetData[macStart:]
-	if c.mac != nil {
-		c.mac.Reset()
-		binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
-		c.mac.Write(c.seqNumBytes[:])
-		c.mac.Write(c.packetData[:macStart])
-		c.macResult = c.mac.Sum(c.macResult[:0])
-		if subtle.ConstantTimeCompare(c.macResult, mac) != 1 {
-			return nil, cbcError("ssh: MAC failure")
-		}
-	}
-
-	return c.packetData[prefixLen:paddingStart], nil
-}
-
-func (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
-	effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize())
-
-	// Length of encrypted portion of the packet (header, payload, padding).
-	// Enforce minimum padding and packet size.
-	encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize)
-	// Enforce block size.
-	encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize
-
-	length := encLength - 4
-	paddingLength := int(length) - (1 + len(packet))
-
-	// Overall buffer contains: header, payload, padding, mac.
-	// Space for the MAC is reserved in the capacity but not the slice length.
-	bufferSize := encLength + c.macSize
-	if uint32(cap(c.packetData)) < bufferSize {
-		c.packetData = make([]byte, encLength, bufferSize)
-	} else {
-		c.packetData = c.packetData[:encLength]
-	}
-
-	p := c.packetData
-
-	// Packet header.
-	binary.BigEndian.PutUint32(p, length)
-	p = p[4:]
-	p[0] = byte(paddingLength)
-
-	// Payload.
-	p = p[1:]
-	copy(p, packet)
-
-	// Padding.
-	p = p[len(packet):]
-	if _, err := io.ReadFull(rand, p); err != nil {
-		return err
-	}
-
-	if c.mac != nil {
-		c.mac.Reset()
-		binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
-		c.mac.Write(c.seqNumBytes[:])
-		c.mac.Write(c.packetData)
-		// The MAC is now appended into the capacity reserved for it earlier.
-		c.packetData = c.mac.Sum(c.packetData)
-	}
-
-	c.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength])
-
-	if _, err := w.Write(c.packetData); err != nil {
-		return err
-	}
-
-	return nil
-}

+ 0 - 127
modules/crypto/ssh/cipher_test.go

@@ -1,127 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto"
-	"crypto/aes"
-	"crypto/rand"
-	"testing"
-)
-
-func TestDefaultCiphersExist(t *testing.T) {
-	for _, cipherAlgo := range supportedCiphers {
-		if _, ok := cipherModes[cipherAlgo]; !ok {
-			t.Errorf("default cipher %q is unknown", cipherAlgo)
-		}
-	}
-}
-
-func TestPacketCiphers(t *testing.T) {
-	// Still test aes128cbc cipher althought it's commented out.
-	cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil}
-	defer delete(cipherModes, aes128cbcID)
-
-	for cipher := range cipherModes {
-		kr := &kexResult{Hash: crypto.SHA1}
-		algs := directionAlgorithms{
-			Cipher:      cipher,
-			MAC:         "hmac-sha1",
-			Compression: "none",
-		}
-		client, err := newPacketCipher(clientKeys, algs, kr)
-		if err != nil {
-			t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
-			continue
-		}
-		server, err := newPacketCipher(clientKeys, algs, kr)
-		if err != nil {
-			t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
-			continue
-		}
-
-		want := "bla bla"
-		input := []byte(want)
-		buf := &bytes.Buffer{}
-		if err := client.writePacket(0, buf, rand.Reader, input); err != nil {
-			t.Errorf("writePacket(%q): %v", cipher, err)
-			continue
-		}
-
-		packet, err := server.readPacket(0, buf)
-		if err != nil {
-			t.Errorf("readPacket(%q): %v", cipher, err)
-			continue
-		}
-
-		if string(packet) != want {
-			t.Errorf("roundtrip(%q): got %q, want %q", cipher, packet, want)
-		}
-	}
-}
-
-func TestCBCOracleCounterMeasure(t *testing.T) {
-	cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil}
-	defer delete(cipherModes, aes128cbcID)
-
-	kr := &kexResult{Hash: crypto.SHA1}
-	algs := directionAlgorithms{
-		Cipher:      aes128cbcID,
-		MAC:         "hmac-sha1",
-		Compression: "none",
-	}
-	client, err := newPacketCipher(clientKeys, algs, kr)
-	if err != nil {
-		t.Fatalf("newPacketCipher(client): %v", err)
-	}
-
-	want := "bla bla"
-	input := []byte(want)
-	buf := &bytes.Buffer{}
-	if err := client.writePacket(0, buf, rand.Reader, input); err != nil {
-		t.Errorf("writePacket: %v", err)
-	}
-
-	packetSize := buf.Len()
-	buf.Write(make([]byte, 2*maxPacket))
-
-	// We corrupt each byte, but this usually will only test the
-	// 'packet too large' or 'MAC failure' cases.
-	lastRead := -1
-	for i := 0; i < packetSize; i++ {
-		server, err := newPacketCipher(clientKeys, algs, kr)
-		if err != nil {
-			t.Fatalf("newPacketCipher(client): %v", err)
-		}
-
-		fresh := &bytes.Buffer{}
-		fresh.Write(buf.Bytes())
-		fresh.Bytes()[i] ^= 0x01
-
-		before := fresh.Len()
-		_, err = server.readPacket(0, fresh)
-		if err == nil {
-			t.Errorf("corrupt byte %d: readPacket succeeded ", i)
-			continue
-		}
-		if _, ok := err.(cbcError); !ok {
-			t.Errorf("corrupt byte %d: got %v (%T), want cbcError", i, err, err)
-			continue
-		}
-
-		after := fresh.Len()
-		bytesRead := before - after
-		if bytesRead < maxPacket {
-			t.Errorf("corrupt byte %d: read %d bytes, want more than %d", i, bytesRead, maxPacket)
-			continue
-		}
-
-		if i > 0 && bytesRead != lastRead {
-			t.Errorf("corrupt byte %d: read %d bytes, want %d bytes read", i, bytesRead, lastRead)
-		}
-		lastRead = bytesRead
-	}
-}

+ 0 - 213
modules/crypto/ssh/client.go

@@ -1,213 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"errors"
-	"fmt"
-	"net"
-	"sync"
-)
-
-// Client implements a traditional SSH client that supports shells,
-// subprocesses, port forwarding and tunneled dialing.
-type Client struct {
-	Conn
-
-	forwards        forwardList // forwarded tcpip connections from the remote side
-	mu              sync.Mutex
-	channelHandlers map[string]chan NewChannel
-}
-
-// HandleChannelOpen returns a channel on which NewChannel requests
-// for the given type are sent. If the type already is being handled,
-// nil is returned. The channel is closed when the connection is closed.
-func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel {
-	c.mu.Lock()
-	defer c.mu.Unlock()
-	if c.channelHandlers == nil {
-		// The SSH channel has been closed.
-		c := make(chan NewChannel)
-		close(c)
-		return c
-	}
-
-	ch := c.channelHandlers[channelType]
-	if ch != nil {
-		return nil
-	}
-
-	ch = make(chan NewChannel, 16)
-	c.channelHandlers[channelType] = ch
-	return ch
-}
-
-// NewClient creates a Client on top of the given connection.
-func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client {
-	conn := &Client{
-		Conn:            c,
-		channelHandlers: make(map[string]chan NewChannel, 1),
-	}
-
-	go conn.handleGlobalRequests(reqs)
-	go conn.handleChannelOpens(chans)
-	go func() {
-		conn.Wait()
-		conn.forwards.closeAll()
-	}()
-	go conn.forwards.handleChannels(conn.HandleChannelOpen("forwarded-tcpip"))
-	return conn
-}
-
-// NewClientConn establishes an authenticated SSH connection using c
-// as the underlying transport.  The Request and NewChannel channels
-// must be serviced or the connection will hang.
-func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) {
-	fullConf := *config
-	fullConf.SetDefaults()
-	conn := &connection{
-		sshConn: sshConn{conn: c},
-	}
-
-	if err := conn.clientHandshake(addr, &fullConf); err != nil {
-		c.Close()
-		return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", err)
-	}
-	conn.mux = newMux(conn.transport)
-	return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil
-}
-
-// clientHandshake performs the client side key exchange. See RFC 4253 Section
-// 7.
-func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error {
-	if config.ClientVersion != "" {
-		c.clientVersion = []byte(config.ClientVersion)
-	} else {
-		c.clientVersion = []byte(packageVersion)
-	}
-	var err error
-	c.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion)
-	if err != nil {
-		return err
-	}
-
-	c.transport = newClientTransport(
-		newTransport(c.sshConn.conn, config.Rand, true /* is client */),
-		c.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr())
-	if err := c.transport.requestKeyChange(); err != nil {
-		return err
-	}
-
-	if packet, err := c.transport.readPacket(); err != nil {
-		return err
-	} else if packet[0] != msgNewKeys {
-		return unexpectedMessageError(msgNewKeys, packet[0])
-	}
-
-	// We just did the key change, so the session ID is established.
-	c.sessionID = c.transport.getSessionID()
-
-	return c.clientAuthenticate(config)
-}
-
-// verifyHostKeySignature verifies the host key obtained in the key
-// exchange.
-func verifyHostKeySignature(hostKey PublicKey, result *kexResult) error {
-	sig, rest, ok := parseSignatureBody(result.Signature)
-	if len(rest) > 0 || !ok {
-		return errors.New("ssh: signature parse error")
-	}
-
-	return hostKey.Verify(result.H, sig)
-}
-
-// NewSession opens a new Session for this client. (A session is a remote
-// execution of a program.)
-func (c *Client) NewSession() (*Session, error) {
-	ch, in, err := c.OpenChannel("session", nil)
-	if err != nil {
-		return nil, err
-	}
-	return newSession(ch, in)
-}
-
-func (c *Client) handleGlobalRequests(incoming <-chan *Request) {
-	for r := range incoming {
-		// This handles keepalive messages and matches
-		// the behaviour of OpenSSH.
-		r.Reply(false, nil)
-	}
-}
-
-// handleChannelOpens channel open messages from the remote side.
-func (c *Client) handleChannelOpens(in <-chan NewChannel) {
-	for ch := range in {
-		c.mu.Lock()
-		handler := c.channelHandlers[ch.ChannelType()]
-		c.mu.Unlock()
-
-		if handler != nil {
-			handler <- ch
-		} else {
-			ch.Reject(UnknownChannelType, fmt.Sprintf("unknown channel type: %v", ch.ChannelType()))
-		}
-	}
-
-	c.mu.Lock()
-	for _, ch := range c.channelHandlers {
-		close(ch)
-	}
-	c.channelHandlers = nil
-	c.mu.Unlock()
-}
-
-// Dial starts a client connection to the given SSH server. It is a
-// convenience function that connects to the given network address,
-// initiates the SSH handshake, and then sets up a Client.  For access
-// to incoming channels and requests, use net.Dial with NewClientConn
-// instead.
-func Dial(network, addr string, config *ClientConfig) (*Client, error) {
-	conn, err := net.Dial(network, addr)
-	if err != nil {
-		return nil, err
-	}
-	c, chans, reqs, err := NewClientConn(conn, addr, config)
-	if err != nil {
-		return nil, err
-	}
-	return NewClient(c, chans, reqs), nil
-}
-
-// A ClientConfig structure is used to configure a Client. It must not be
-// modified after having been passed to an SSH function.
-type ClientConfig struct {
-	// Config contains configuration that is shared between clients and
-	// servers.
-	Config
-
-	// User contains the username to authenticate as.
-	User string
-
-	// Auth contains possible authentication methods to use with the
-	// server. Only the first instance of a particular RFC 4252 method will
-	// be used during authentication.
-	Auth []AuthMethod
-
-	// HostKeyCallback, if not nil, is called during the cryptographic
-	// handshake to validate the server's host key. A nil HostKeyCallback
-	// implies that all host keys are accepted.
-	HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error
-
-	// ClientVersion contains the version identification string that will
-	// be used for the connection. If empty, a reasonable default is used.
-	ClientVersion string
-
-	// HostKeyAlgorithms lists the key types that the client will
-	// accept from the server as host key, in order of
-	// preference. If empty, a reasonable default is used. Any
-	// string returned from PublicKey.Type method may be used, or
-	// any of the CertAlgoXxxx and KeyAlgoXxxx constants.
-	HostKeyAlgorithms []string
-}

+ 0 - 441
modules/crypto/ssh/client_auth.go

@@ -1,441 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"io"
-)
-
-// clientAuthenticate authenticates with the remote server. See RFC 4252.
-func (c *connection) clientAuthenticate(config *ClientConfig) error {
-	// initiate user auth session
-	if err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil {
-		return err
-	}
-	packet, err := c.transport.readPacket()
-	if err != nil {
-		return err
-	}
-	var serviceAccept serviceAcceptMsg
-	if err := Unmarshal(packet, &serviceAccept); err != nil {
-		return err
-	}
-
-	// during the authentication phase the client first attempts the "none" method
-	// then any untried methods suggested by the server.
-	tried := make(map[string]bool)
-	var lastMethods []string
-	for auth := AuthMethod(new(noneAuth)); auth != nil; {
-		ok, methods, err := auth.auth(c.transport.getSessionID(), config.User, c.transport, config.Rand)
-		if err != nil {
-			return err
-		}
-		if ok {
-			// success
-			return nil
-		}
-		tried[auth.method()] = true
-		if methods == nil {
-			methods = lastMethods
-		}
-		lastMethods = methods
-
-		auth = nil
-
-	findNext:
-		for _, a := range config.Auth {
-			candidateMethod := a.method()
-			if tried[candidateMethod] {
-				continue
-			}
-			for _, meth := range methods {
-				if meth == candidateMethod {
-					auth = a
-					break findNext
-				}
-			}
-		}
-	}
-	return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", keys(tried))
-}
-
-func keys(m map[string]bool) []string {
-	s := make([]string, 0, len(m))
-
-	for key := range m {
-		s = append(s, key)
-	}
-	return s
-}
-
-// An AuthMethod represents an instance of an RFC 4252 authentication method.
-type AuthMethod interface {
-	// auth authenticates user over transport t.
-	// Returns true if authentication is successful.
-	// If authentication is not successful, a []string of alternative
-	// method names is returned. If the slice is nil, it will be ignored
-	// and the previous set of possible methods will be reused.
-	auth(session []byte, user string, p packetConn, rand io.Reader) (bool, []string, error)
-
-	// method returns the RFC 4252 method name.
-	method() string
-}
-
-// "none" authentication, RFC 4252 section 5.2.
-type noneAuth int
-
-func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {
-	if err := c.writePacket(Marshal(&userAuthRequestMsg{
-		User:    user,
-		Service: serviceSSH,
-		Method:  "none",
-	})); err != nil {
-		return false, nil, err
-	}
-
-	return handleAuthResponse(c)
-}
-
-func (n *noneAuth) method() string {
-	return "none"
-}
-
-// passwordCallback is an AuthMethod that fetches the password through
-// a function call, e.g. by prompting the user.
-type passwordCallback func() (password string, err error)
-
-func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {
-	type passwordAuthMsg struct {
-		User     string `sshtype:"50"`
-		Service  string
-		Method   string
-		Reply    bool
-		Password string
-	}
-
-	pw, err := cb()
-	// REVIEW NOTE: is there a need to support skipping a password attempt?
-	// The program may only find out that the user doesn't have a password
-	// when prompting.
-	if err != nil {
-		return false, nil, err
-	}
-
-	if err := c.writePacket(Marshal(&passwordAuthMsg{
-		User:     user,
-		Service:  serviceSSH,
-		Method:   cb.method(),
-		Reply:    false,
-		Password: pw,
-	})); err != nil {
-		return false, nil, err
-	}
-
-	return handleAuthResponse(c)
-}
-
-func (cb passwordCallback) method() string {
-	return "password"
-}
-
-// Password returns an AuthMethod using the given password.
-func Password(secret string) AuthMethod {
-	return passwordCallback(func() (string, error) { return secret, nil })
-}
-
-// PasswordCallback returns an AuthMethod that uses a callback for
-// fetching a password.
-func PasswordCallback(prompt func() (secret string, err error)) AuthMethod {
-	return passwordCallback(prompt)
-}
-
-type publickeyAuthMsg struct {
-	User    string `sshtype:"50"`
-	Service string
-	Method  string
-	// HasSig indicates to the receiver packet that the auth request is signed and
-	// should be used for authentication of the request.
-	HasSig   bool
-	Algoname string
-	PubKey   []byte
-	// Sig is tagged with "rest" so Marshal will exclude it during
-	// validateKey
-	Sig []byte `ssh:"rest"`
-}
-
-// publicKeyCallback is an AuthMethod that uses a set of key
-// pairs for authentication.
-type publicKeyCallback func() ([]Signer, error)
-
-func (cb publicKeyCallback) method() string {
-	return "publickey"
-}
-
-func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {
-	// Authentication is performed in two stages. The first stage sends an
-	// enquiry to test if each key is acceptable to the remote. The second
-	// stage attempts to authenticate with the valid keys obtained in the
-	// first stage.
-
-	signers, err := cb()
-	if err != nil {
-		return false, nil, err
-	}
-	var validKeys []Signer
-	for _, signer := range signers {
-		if ok, err := validateKey(signer.PublicKey(), user, c); ok {
-			validKeys = append(validKeys, signer)
-		} else {
-			if err != nil {
-				return false, nil, err
-			}
-		}
-	}
-
-	// methods that may continue if this auth is not successful.
-	var methods []string
-	for _, signer := range validKeys {
-		pub := signer.PublicKey()
-
-		pubKey := pub.Marshal()
-		sign, err := signer.Sign(rand, buildDataSignedForAuth(session, userAuthRequestMsg{
-			User:    user,
-			Service: serviceSSH,
-			Method:  cb.method(),
-		}, []byte(pub.Type()), pubKey))
-		if err != nil {
-			return false, nil, err
-		}
-
-		// manually wrap the serialized signature in a string
-		s := Marshal(sign)
-		sig := make([]byte, stringLength(len(s)))
-		marshalString(sig, s)
-		msg := publickeyAuthMsg{
-			User:     user,
-			Service:  serviceSSH,
-			Method:   cb.method(),
-			HasSig:   true,
-			Algoname: pub.Type(),
-			PubKey:   pubKey,
-			Sig:      sig,
-		}
-		p := Marshal(&msg)
-		if err := c.writePacket(p); err != nil {
-			return false, nil, err
-		}
-		var success bool
-		success, methods, err = handleAuthResponse(c)
-		if err != nil {
-			return false, nil, err
-		}
-		if success {
-			return success, methods, err
-		}
-	}
-	return false, methods, nil
-}
-
-// validateKey validates the key provided is acceptable to the server.
-func validateKey(key PublicKey, user string, c packetConn) (bool, error) {
-	pubKey := key.Marshal()
-	msg := publickeyAuthMsg{
-		User:     user,
-		Service:  serviceSSH,
-		Method:   "publickey",
-		HasSig:   false,
-		Algoname: key.Type(),
-		PubKey:   pubKey,
-	}
-	if err := c.writePacket(Marshal(&msg)); err != nil {
-		return false, err
-	}
-
-	return confirmKeyAck(key, c)
-}
-
-func confirmKeyAck(key PublicKey, c packetConn) (bool, error) {
-	pubKey := key.Marshal()
-	algoname := key.Type()
-
-	for {
-		packet, err := c.readPacket()
-		if err != nil {
-			return false, err
-		}
-		switch packet[0] {
-		case msgUserAuthBanner:
-			// TODO(gpaul): add callback to present the banner to the user
-		case msgUserAuthPubKeyOk:
-			var msg userAuthPubKeyOkMsg
-			if err := Unmarshal(packet, &msg); err != nil {
-				return false, err
-			}
-			if msg.Algo != algoname || !bytes.Equal(msg.PubKey, pubKey) {
-				return false, nil
-			}
-			return true, nil
-		case msgUserAuthFailure:
-			return false, nil
-		default:
-			return false, unexpectedMessageError(msgUserAuthSuccess, packet[0])
-		}
-	}
-}
-
-// PublicKeys returns an AuthMethod that uses the given key
-// pairs.
-func PublicKeys(signers ...Signer) AuthMethod {
-	return publicKeyCallback(func() ([]Signer, error) { return signers, nil })
-}
-
-// PublicKeysCallback returns an AuthMethod that runs the given
-// function to obtain a list of key pairs.
-func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod {
-	return publicKeyCallback(getSigners)
-}
-
-// handleAuthResponse returns whether the preceding authentication request succeeded
-// along with a list of remaining authentication methods to try next and
-// an error if an unexpected response was received.
-func handleAuthResponse(c packetConn) (bool, []string, error) {
-	for {
-		packet, err := c.readPacket()
-		if err != nil {
-			return false, nil, err
-		}
-
-		switch packet[0] {
-		case msgUserAuthBanner:
-			// TODO: add callback to present the banner to the user
-		case msgUserAuthFailure:
-			var msg userAuthFailureMsg
-			if err := Unmarshal(packet, &msg); err != nil {
-				return false, nil, err
-			}
-			return false, msg.Methods, nil
-		case msgUserAuthSuccess:
-			return true, nil, nil
-		case msgDisconnect:
-			return false, nil, io.EOF
-		default:
-			return false, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])
-		}
-	}
-}
-
-// KeyboardInteractiveChallenge should print questions, optionally
-// disabling echoing (e.g. for passwords), and return all the answers.
-// Challenge may be called multiple times in a single session. After
-// successful authentication, the server may send a challenge with no
-// questions, for which the user and instruction messages should be
-// printed.  RFC 4256 section 3.3 details how the UI should behave for
-// both CLI and GUI environments.
-type KeyboardInteractiveChallenge func(user, instruction string, questions []string, echos []bool) (answers []string, err error)
-
-// KeyboardInteractive returns a AuthMethod using a prompt/response
-// sequence controlled by the server.
-func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod {
-	return challenge
-}
-
-func (cb KeyboardInteractiveChallenge) method() string {
-	return "keyboard-interactive"
-}
-
-func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {
-	type initiateMsg struct {
-		User       string `sshtype:"50"`
-		Service    string
-		Method     string
-		Language   string
-		Submethods string
-	}
-
-	if err := c.writePacket(Marshal(&initiateMsg{
-		User:    user,
-		Service: serviceSSH,
-		Method:  "keyboard-interactive",
-	})); err != nil {
-		return false, nil, err
-	}
-
-	for {
-		packet, err := c.readPacket()
-		if err != nil {
-			return false, nil, err
-		}
-
-		// like handleAuthResponse, but with less options.
-		switch packet[0] {
-		case msgUserAuthBanner:
-			// TODO: Print banners during userauth.
-			continue
-		case msgUserAuthInfoRequest:
-			// OK
-		case msgUserAuthFailure:
-			var msg userAuthFailureMsg
-			if err := Unmarshal(packet, &msg); err != nil {
-				return false, nil, err
-			}
-			return false, msg.Methods, nil
-		case msgUserAuthSuccess:
-			return true, nil, nil
-		default:
-			return false, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])
-		}
-
-		var msg userAuthInfoRequestMsg
-		if err := Unmarshal(packet, &msg); err != nil {
-			return false, nil, err
-		}
-
-		// Manually unpack the prompt/echo pairs.
-		rest := msg.Prompts
-		var prompts []string
-		var echos []bool
-		for i := 0; i < int(msg.NumPrompts); i++ {
-			prompt, r, ok := parseString(rest)
-			if !ok || len(r) == 0 {
-				return false, nil, errors.New("ssh: prompt format error")
-			}
-			prompts = append(prompts, string(prompt))
-			echos = append(echos, r[0] != 0)
-			rest = r[1:]
-		}
-
-		if len(rest) != 0 {
-			return false, nil, errors.New("ssh: extra data following keyboard-interactive pairs")
-		}
-
-		answers, err := cb(msg.User, msg.Instruction, prompts, echos)
-		if err != nil {
-			return false, nil, err
-		}
-
-		if len(answers) != len(prompts) {
-			return false, nil, errors.New("ssh: not enough answers from keyboard-interactive callback")
-		}
-		responseLength := 1 + 4
-		for _, a := range answers {
-			responseLength += stringLength(len(a))
-		}
-		serialized := make([]byte, responseLength)
-		p := serialized
-		p[0] = msgUserAuthInfoResponse
-		p = p[1:]
-		p = marshalUint32(p, uint32(len(answers)))
-		for _, a := range answers {
-			p = marshalString(p, []byte(a))
-		}
-
-		if err := c.writePacket(serialized); err != nil {
-			return false, nil, err
-		}
-	}
-}

+ 0 - 393
modules/crypto/ssh/client_auth_test.go

@@ -1,393 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto/rand"
-	"errors"
-	"fmt"
-	"strings"
-	"testing"
-)
-
-type keyboardInteractive map[string]string
-
-func (cr keyboardInteractive) Challenge(user string, instruction string, questions []string, echos []bool) ([]string, error) {
-	var answers []string
-	for _, q := range questions {
-		answers = append(answers, cr[q])
-	}
-	return answers, nil
-}
-
-// reused internally by tests
-var clientPassword = "tiger"
-
-// tryAuth runs a handshake with a given config against an SSH server
-// with config serverConfig
-func tryAuth(t *testing.T, config *ClientConfig) error {
-	c1, c2, err := netPipe()
-	if err != nil {
-		t.Fatalf("netPipe: %v", err)
-	}
-	defer c1.Close()
-	defer c2.Close()
-
-	certChecker := CertChecker{
-		IsAuthority: func(k PublicKey) bool {
-			return bytes.Equal(k.Marshal(), testPublicKeys["ecdsa"].Marshal())
-		},
-		UserKeyFallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) {
-			if conn.User() == "testuser" && bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) {
-				return nil, nil
-			}
-
-			return nil, fmt.Errorf("pubkey for %q not acceptable", conn.User())
-		},
-		IsRevoked: func(c *Certificate) bool {
-			return c.Serial == 666
-		},
-	}
-
-	serverConfig := &ServerConfig{
-		PasswordCallback: func(conn ConnMetadata, pass []byte) (*Permissions, error) {
-			if conn.User() == "testuser" && string(pass) == clientPassword {
-				return nil, nil
-			}
-			return nil, errors.New("password auth failed")
-		},
-		PublicKeyCallback: certChecker.Authenticate,
-		KeyboardInteractiveCallback: func(conn ConnMetadata, challenge KeyboardInteractiveChallenge) (*Permissions, error) {
-			ans, err := challenge("user",
-				"instruction",
-				[]string{"question1", "question2"},
-				[]bool{true, true})
-			if err != nil {
-				return nil, err
-			}
-			ok := conn.User() == "testuser" && ans[0] == "answer1" && ans[1] == "answer2"
-			if ok {
-				challenge("user", "motd", nil, nil)
-				return nil, nil
-			}
-			return nil, errors.New("keyboard-interactive failed")
-		},
-		AuthLogCallback: func(conn ConnMetadata, method string, err error) {
-			t.Logf("user %q, method %q: %v", conn.User(), method, err)
-		},
-	}
-	serverConfig.AddHostKey(testSigners["rsa"])
-
-	go newServer(c1, serverConfig)
-	_, _, _, err = NewClientConn(c2, "", config)
-	return err
-}
-
-func TestClientAuthPublicKey(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(testSigners["rsa"]),
-		},
-	}
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("unable to dial remote side: %s", err)
-	}
-}
-
-func TestAuthMethodPassword(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			Password(clientPassword),
-		},
-	}
-
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("unable to dial remote side: %s", err)
-	}
-}
-
-func TestAuthMethodFallback(t *testing.T) {
-	var passwordCalled bool
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(testSigners["rsa"]),
-			PasswordCallback(
-				func() (string, error) {
-					passwordCalled = true
-					return "WRONG", nil
-				}),
-		},
-	}
-
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("unable to dial remote side: %s", err)
-	}
-
-	if passwordCalled {
-		t.Errorf("password auth tried before public-key auth.")
-	}
-}
-
-func TestAuthMethodWrongPassword(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			Password("wrong"),
-			PublicKeys(testSigners["rsa"]),
-		},
-	}
-
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("unable to dial remote side: %s", err)
-	}
-}
-
-func TestAuthMethodKeyboardInteractive(t *testing.T) {
-	answers := keyboardInteractive(map[string]string{
-		"question1": "answer1",
-		"question2": "answer2",
-	})
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			KeyboardInteractive(answers.Challenge),
-		},
-	}
-
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("unable to dial remote side: %s", err)
-	}
-}
-
-func TestAuthMethodWrongKeyboardInteractive(t *testing.T) {
-	answers := keyboardInteractive(map[string]string{
-		"question1": "answer1",
-		"question2": "WRONG",
-	})
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			KeyboardInteractive(answers.Challenge),
-		},
-	}
-
-	if err := tryAuth(t, config); err == nil {
-		t.Fatalf("wrong answers should not have authenticated with KeyboardInteractive")
-	}
-}
-
-// the mock server will only authenticate ssh-rsa keys
-func TestAuthMethodInvalidPublicKey(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(testSigners["dsa"]),
-		},
-	}
-
-	if err := tryAuth(t, config); err == nil {
-		t.Fatalf("dsa private key should not have authenticated with rsa public key")
-	}
-}
-
-// the client should authenticate with the second key
-func TestAuthMethodRSAandDSA(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(testSigners["dsa"], testSigners["rsa"]),
-		},
-	}
-	if err := tryAuth(t, config); err != nil {
-		t.Fatalf("client could not authenticate with rsa key: %v", err)
-	}
-}
-
-func TestClientHMAC(t *testing.T) {
-	for _, mac := range supportedMACs {
-		config := &ClientConfig{
-			User: "testuser",
-			Auth: []AuthMethod{
-				PublicKeys(testSigners["rsa"]),
-			},
-			Config: Config{
-				MACs: []string{mac},
-			},
-		}
-		if err := tryAuth(t, config); err != nil {
-			t.Fatalf("client could not authenticate with mac algo %s: %v", mac, err)
-		}
-	}
-}
-
-// issue 4285.
-func TestClientUnsupportedCipher(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(),
-		},
-		Config: Config{
-			Ciphers: []string{"aes128-cbc"}, // not currently supported
-		},
-	}
-	if err := tryAuth(t, config); err == nil {
-		t.Errorf("expected no ciphers in common")
-	}
-}
-
-func TestClientUnsupportedKex(t *testing.T) {
-	config := &ClientConfig{
-		User: "testuser",
-		Auth: []AuthMethod{
-			PublicKeys(),
-		},
-		Config: Config{
-			KeyExchanges: []string{"diffie-hellman-group-exchange-sha256"}, // not currently supported
-		},
-	}
-	if err := tryAuth(t, config); err == nil || !strings.Contains(err.Error(), "common algorithm") {
-		t.Errorf("got %v, expected 'common algorithm'", err)
-	}
-}
-
-func TestClientLoginCert(t *testing.T) {
-	cert := &Certificate{
-		Key:         testPublicKeys["rsa"],
-		ValidBefore: CertTimeInfinity,
-		CertType:    UserCert,
-	}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	certSigner, err := NewCertSigner(cert, testSigners["rsa"])
-	if err != nil {
-		t.Fatalf("NewCertSigner: %v", err)
-	}
-
-	clientConfig := &ClientConfig{
-		User: "user",
-	}
-	clientConfig.Auth = append(clientConfig.Auth, PublicKeys(certSigner))
-
-	t.Log("should succeed")
-	if err := tryAuth(t, clientConfig); err != nil {
-		t.Errorf("cert login failed: %v", err)
-	}
-
-	t.Log("corrupted signature")
-	cert.Signature.Blob[0]++
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login passed with corrupted sig")
-	}
-
-	t.Log("revoked")
-	cert.Serial = 666
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("revoked cert login succeeded")
-	}
-	cert.Serial = 1
-
-	t.Log("sign with wrong key")
-	cert.SignCert(rand.Reader, testSigners["dsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login passed with non-authoritive key")
-	}
-
-	t.Log("host cert")
-	cert.CertType = HostCert
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login passed with wrong type")
-	}
-	cert.CertType = UserCert
-
-	t.Log("principal specified")
-	cert.ValidPrincipals = []string{"user"}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err != nil {
-		t.Errorf("cert login failed: %v", err)
-	}
-
-	t.Log("wrong principal specified")
-	cert.ValidPrincipals = []string{"fred"}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login passed with wrong principal")
-	}
-	cert.ValidPrincipals = nil
-
-	t.Log("added critical option")
-	cert.CriticalOptions = map[string]string{"root-access": "yes"}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login passed with unrecognized critical option")
-	}
-
-	t.Log("allowed source address")
-	cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42/24"}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err != nil {
-		t.Errorf("cert login with source-address failed: %v", err)
-	}
-
-	t.Log("disallowed source address")
-	cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42"}
-	cert.SignCert(rand.Reader, testSigners["ecdsa"])
-	if err := tryAuth(t, clientConfig); err == nil {
-		t.Errorf("cert login with source-address succeeded")
-	}
-}
-
-func testPermissionsPassing(withPermissions bool, t *testing.T) {
-	serverConfig := &ServerConfig{
-		PublicKeyCallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) {
-			if conn.User() == "nopermissions" {
-				return nil, nil
-			} else {
-				return &Permissions{}, nil
-			}
-		},
-	}
-	serverConfig.AddHostKey(testSigners["rsa"])
-
-	clientConfig := &ClientConfig{
-		Auth: []AuthMethod{
-			PublicKeys(testSigners["rsa"]),
-		},
-	}
-	if withPermissions {
-		clientConfig.User = "permissions"
-	} else {
-		clientConfig.User = "nopermissions"
-	}
-
-	c1, c2, err := netPipe()
-	if err != nil {
-		t.Fatalf("netPipe: %v", err)
-	}
-	defer c1.Close()
-	defer c2.Close()
-
-	go NewClientConn(c2, "", clientConfig)
-	serverConn, err := newServer(c1, serverConfig)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if p := serverConn.Permissions; (p != nil) != withPermissions {
-		t.Fatalf("withPermissions is %t, but Permissions object is %#v", withPermissions, p)
-	}
-}
-
-func TestPermissionsPassing(t *testing.T) {
-	testPermissionsPassing(true, t)
-}
-
-func TestNoPermissionsPassing(t *testing.T) {
-	testPermissionsPassing(false, t)
-}

+ 0 - 39
modules/crypto/ssh/client_test.go

@@ -1,39 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"net"
-	"testing"
-)
-
-func testClientVersion(t *testing.T, config *ClientConfig, expected string) {
-	clientConn, serverConn := net.Pipe()
-	defer clientConn.Close()
-	receivedVersion := make(chan string, 1)
-	go func() {
-		version, err := readVersion(serverConn)
-		if err != nil {
-			receivedVersion <- ""
-		} else {
-			receivedVersion <- string(version)
-		}
-		serverConn.Close()
-	}()
-	NewClientConn(clientConn, "", config)
-	actual := <-receivedVersion
-	if actual != expected {
-		t.Fatalf("got %s; want %s", actual, expected)
-	}
-}
-
-func TestCustomClientVersion(t *testing.T) {
-	version := "Test-Client-Version-0.0"
-	testClientVersion(t, &ClientConfig{ClientVersion: version}, version)
-}
-
-func TestDefaultClientVersion(t *testing.T) {
-	testClientVersion(t, &ClientConfig{}, packageVersion)
-}

+ 0 - 354
modules/crypto/ssh/common.go

@@ -1,354 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"crypto"
-	"crypto/rand"
-	"fmt"
-	"io"
-	"sync"
-
-	_ "crypto/sha1"
-	_ "crypto/sha256"
-	_ "crypto/sha512"
-)
-
-// These are string constants in the SSH protocol.
-const (
-	compressionNone = "none"
-	serviceUserAuth = "ssh-userauth"
-	serviceSSH      = "ssh-connection"
-)
-
-// supportedCiphers specifies the supported ciphers in preference order.
-var supportedCiphers = []string{
-	"aes128-ctr", "aes192-ctr", "aes256-ctr",
-	"aes128-gcm@openssh.com",
-	"arcfour256", "arcfour128",
-}
-
-// supportedKexAlgos specifies the supported key-exchange algorithms in
-// preference order.
-var supportedKexAlgos = []string{
-	kexAlgoCurve25519SHA256,
-	// P384 and P521 are not constant-time yet, but since we don't
-	// reuse ephemeral keys, using them for ECDH should be OK.
-	kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,
-	kexAlgoDH14SHA1, kexAlgoDH1SHA1,
-}
-
-// supportedKexAlgos specifies the supported host-key algorithms (i.e. methods
-// of authenticating servers) in preference order.
-var supportedHostKeyAlgos = []string{
-	CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,
-	CertAlgoECDSA384v01, CertAlgoECDSA521v01,
-
-	KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,
-	KeyAlgoRSA, KeyAlgoDSA,
-}
-
-// supportedMACs specifies a default set of MAC algorithms in preference order.
-// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed
-// because they have reached the end of their useful life.
-var supportedMACs = []string{
-	"hmac-sha2-256", "hmac-sha1", "hmac-sha1-96",
-}
-
-var supportedCompressions = []string{compressionNone}
-
-// hashFuncs keeps the mapping of supported algorithms to their respective
-// hashes needed for signature verification.
-var hashFuncs = map[string]crypto.Hash{
-	KeyAlgoRSA:          crypto.SHA1,
-	KeyAlgoDSA:          crypto.SHA1,
-	KeyAlgoECDSA256:     crypto.SHA256,
-	KeyAlgoECDSA384:     crypto.SHA384,
-	KeyAlgoECDSA521:     crypto.SHA512,
-	CertAlgoRSAv01:      crypto.SHA1,
-	CertAlgoDSAv01:      crypto.SHA1,
-	CertAlgoECDSA256v01: crypto.SHA256,
-	CertAlgoECDSA384v01: crypto.SHA384,
-	CertAlgoECDSA521v01: crypto.SHA512,
-}
-
-// unexpectedMessageError results when the SSH message that we received didn't
-// match what we wanted.
-func unexpectedMessageError(expected, got uint8) error {
-	return fmt.Errorf("ssh: unexpected message type %d (expected %d)", got, expected)
-}
-
-// parseError results from a malformed SSH message.
-func parseError(tag uint8) error {
-	return fmt.Errorf("ssh: parse error in message type %d", tag)
-}
-
-func findCommon(what string, client []string, server []string) (common string, err error) {
-	for _, c := range client {
-		for _, s := range server {
-			if c == s {
-				return c, nil
-			}
-		}
-	}
-	return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server)
-}
-
-type directionAlgorithms struct {
-	Cipher      string
-	MAC         string
-	Compression string
-}
-
-type algorithms struct {
-	kex     string
-	hostKey string
-	w       directionAlgorithms
-	r       directionAlgorithms
-}
-
-func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) {
-	result := &algorithms{}
-
-	result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos)
-	if err != nil {
-		return
-	}
-
-	result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos)
-	if err != nil {
-		return
-	}
-
-	result.w.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer)
-	if err != nil {
-		return
-	}
-
-	result.r.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient)
-	if err != nil {
-		return
-	}
-
-	result.w.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer)
-	if err != nil {
-		return
-	}
-
-	result.r.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient)
-	if err != nil {
-		return
-	}
-
-	result.w.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer)
-	if err != nil {
-		return
-	}
-
-	result.r.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient)
-	if err != nil {
-		return
-	}
-
-	return result, nil
-}
-
-// If rekeythreshold is too small, we can't make any progress sending
-// stuff.
-const minRekeyThreshold uint64 = 256
-
-// Config contains configuration data common to both ServerConfig and
-// ClientConfig.
-type Config struct {
-	// Rand provides the source of entropy for cryptographic
-	// primitives. If Rand is nil, the cryptographic random reader
-	// in package crypto/rand will be used.
-	Rand io.Reader
-
-	// The maximum number of bytes sent or received after which a
-	// new key is negotiated. It must be at least 256. If
-	// unspecified, 1 gigabyte is used.
-	RekeyThreshold uint64
-
-	// The allowed key exchanges algorithms. If unspecified then a
-	// default set of algorithms is used.
-	KeyExchanges []string
-
-	// The allowed cipher algorithms. If unspecified then a sensible
-	// default is used.
-	Ciphers []string
-
-	// The allowed MAC algorithms. If unspecified then a sensible default
-	// is used.
-	MACs []string
-}
-
-// SetDefaults sets sensible values for unset fields in config. This is
-// exported for testing: Configs passed to SSH functions are copied and have
-// default values set automatically.
-func (c *Config) SetDefaults() {
-	if c.Rand == nil {
-		c.Rand = rand.Reader
-	}
-	if c.Ciphers == nil {
-		c.Ciphers = supportedCiphers
-	}
-	var ciphers []string
-	for _, c := range c.Ciphers {
-		if cipherModes[c] != nil {
-			// reject the cipher if we have no cipherModes definition
-			ciphers = append(ciphers, c)
-		}
-	}
-	c.Ciphers = ciphers
-
-	if c.KeyExchanges == nil {
-		c.KeyExchanges = supportedKexAlgos
-	}
-
-	if c.MACs == nil {
-		c.MACs = supportedMACs
-	}
-
-	if c.RekeyThreshold == 0 {
-		// RFC 4253, section 9 suggests rekeying after 1G.
-		c.RekeyThreshold = 1 << 30
-	}
-	if c.RekeyThreshold < minRekeyThreshold {
-		c.RekeyThreshold = minRekeyThreshold
-	}
-}
-
-// buildDataSignedForAuth returns the data that is signed in order to prove
-// possession of a private key. See RFC 4252, section 7.
-func buildDataSignedForAuth(sessionId []byte, req userAuthRequestMsg, algo, pubKey []byte) []byte {
-	data := struct {
-		Session []byte
-		Type    byte
-		User    string
-		Service string
-		Method  string
-		Sign    bool
-		Algo    []byte
-		PubKey  []byte
-	}{
-		sessionId,
-		msgUserAuthRequest,
-		req.User,
-		req.Service,
-		req.Method,
-		true,
-		algo,
-		pubKey,
-	}
-	return Marshal(data)
-}
-
-func appendU16(buf []byte, n uint16) []byte {
-	return append(buf, byte(n>>8), byte(n))
-}
-
-func appendU32(buf []byte, n uint32) []byte {
-	return append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
-}
-
-func appendU64(buf []byte, n uint64) []byte {
-	return append(buf,
-		byte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32),
-		byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
-}
-
-func appendInt(buf []byte, n int) []byte {
-	return appendU32(buf, uint32(n))
-}
-
-func appendString(buf []byte, s string) []byte {
-	buf = appendU32(buf, uint32(len(s)))
-	buf = append(buf, s...)
-	return buf
-}
-
-func appendBool(buf []byte, b bool) []byte {
-	if b {
-		return append(buf, 1)
-	}
-	return append(buf, 0)
-}
-
-// newCond is a helper to hide the fact that there is no usable zero
-// value for sync.Cond.
-func newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) }
-
-// window represents the buffer available to clients
-// wishing to write to a channel.
-type window struct {
-	*sync.Cond
-	win          uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1
-	writeWaiters int
-	closed       bool
-}
-
-// add adds win to the amount of window available
-// for consumers.
-func (w *window) add(win uint32) bool {
-	// a zero sized window adjust is a noop.
-	if win == 0 {
-		return true
-	}
-	w.L.Lock()
-	if w.win+win < win {
-		w.L.Unlock()
-		return false
-	}
-	w.win += win
-	// It is unusual that multiple goroutines would be attempting to reserve
-	// window space, but not guaranteed. Use broadcast to notify all waiters
-	// that additional window is available.
-	w.Broadcast()
-	w.L.Unlock()
-	return true
-}
-
-// close sets the window to closed, so all reservations fail
-// immediately.
-func (w *window) close() {
-	w.L.Lock()
-	w.closed = true
-	w.Broadcast()
-	w.L.Unlock()
-}
-
-// reserve reserves win from the available window capacity.
-// If no capacity remains, reserve will block. reserve may
-// return less than requested.
-func (w *window) reserve(win uint32) (uint32, error) {
-	var err error
-	w.L.Lock()
-	w.writeWaiters++
-	w.Broadcast()
-	for w.win == 0 && !w.closed {
-		w.Wait()
-	}
-	w.writeWaiters--
-	if w.win < win {
-		win = w.win
-	}
-	w.win -= win
-	if w.closed {
-		err = io.EOF
-	}
-	w.L.Unlock()
-	return win, err
-}
-
-// waitWriterBlocked waits until some goroutine is blocked for further
-// writes. It is used in tests only.
-func (w *window) waitWriterBlocked() {
-	w.Cond.L.Lock()
-	for w.writeWaiters == 0 {
-		w.Cond.Wait()
-	}
-	w.Cond.L.Unlock()
-}

+ 0 - 144
modules/crypto/ssh/connection.go

@@ -1,144 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"fmt"
-	"net"
-)
-
-// OpenChannelError is returned if the other side rejects an
-// OpenChannel request.
-type OpenChannelError struct {
-	Reason  RejectionReason
-	Message string
-}
-
-func (e *OpenChannelError) Error() string {
-	return fmt.Sprintf("ssh: rejected: %s (%s)", e.Reason, e.Message)
-}
-
-// ConnMetadata holds metadata for the connection.
-type ConnMetadata interface {
-	// User returns the user ID for this connection.
-	// It is empty if no authentication is used.
-	User() string
-
-	// SessionID returns the sesson hash, also denoted by H.
-	SessionID() []byte
-
-	// ClientVersion returns the client's version string as hashed
-	// into the session ID.
-	ClientVersion() []byte
-
-	// ServerVersion returns the server's version string as hashed
-	// into the session ID.
-	ServerVersion() []byte
-
-	// RemoteAddr returns the remote address for this connection.
-	RemoteAddr() net.Addr
-
-	// LocalAddr returns the local address for this connection.
-	LocalAddr() net.Addr
-}
-
-// Conn represents an SSH connection for both server and client roles.
-// Conn is the basis for implementing an application layer, such
-// as ClientConn, which implements the traditional shell access for
-// clients.
-type Conn interface {
-	ConnMetadata
-
-	// SendRequest sends a global request, and returns the
-	// reply. If wantReply is true, it returns the response status
-	// and payload. See also RFC4254, section 4.
-	SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error)
-
-	// OpenChannel tries to open an channel. If the request is
-	// rejected, it returns *OpenChannelError. On success it returns
-	// the SSH Channel and a Go channel for incoming, out-of-band
-	// requests. The Go channel must be serviced, or the
-	// connection will hang.
-	OpenChannel(name string, data []byte) (Channel, <-chan *Request, error)
-
-	// Close closes the underlying network connection
-	Close() error
-
-	// Wait blocks until the connection has shut down, and returns the
-	// error causing the shutdown.
-	Wait() error
-
-	// TODO(hanwen): consider exposing:
-	//   RequestKeyChange
-	//   Disconnect
-}
-
-// DiscardRequests consumes and rejects all requests from the
-// passed-in channel.
-func DiscardRequests(in <-chan *Request) {
-	for req := range in {
-		if req.WantReply {
-			req.Reply(false, nil)
-		}
-	}
-}
-
-// A connection represents an incoming connection.
-type connection struct {
-	transport *handshakeTransport
-	sshConn
-
-	// The connection protocol.
-	*mux
-}
-
-func (c *connection) Close() error {
-	return c.sshConn.conn.Close()
-}
-
-// sshconn provides net.Conn metadata, but disallows direct reads and
-// writes.
-type sshConn struct {
-	conn net.Conn
-
-	user          string
-	sessionID     []byte
-	clientVersion []byte
-	serverVersion []byte
-}
-
-func dup(src []byte) []byte {
-	dst := make([]byte, len(src))
-	copy(dst, src)
-	return dst
-}
-
-func (c *sshConn) User() string {
-	return c.user
-}
-
-func (c *sshConn) RemoteAddr() net.Addr {
-	return c.conn.RemoteAddr()
-}
-
-func (c *sshConn) Close() error {
-	return c.conn.Close()
-}
-
-func (c *sshConn) LocalAddr() net.Addr {
-	return c.conn.LocalAddr()
-}
-
-func (c *sshConn) SessionID() []byte {
-	return dup(c.sessionID)
-}
-
-func (c *sshConn) ClientVersion() []byte {
-	return dup(c.clientVersion)
-}
-
-func (c *sshConn) ServerVersion() []byte {
-	return dup(c.serverVersion)
-}

+ 0 - 18
modules/crypto/ssh/doc.go

@@ -1,18 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-Package ssh implements an SSH client and server.
-
-SSH is a transport security protocol, an authentication protocol and a
-family of application protocols. The most typical application level
-protocol is a remote shell and this is specifically implemented.  However,
-the multiplexed nature of SSH is exposed to users that wish to support
-others.
-
-References:
-  [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD
-  [SSH-PARAMETERS]:    http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1
-*/
-package ssh

+ 0 - 211
modules/crypto/ssh/example_test.go

@@ -1,211 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh_test
-
-import (
-	"bytes"
-	"fmt"
-	"io/ioutil"
-	"log"
-	"net"
-	"net/http"
-
-	"github.com/gogits/gogs/modules/crypto/ssh"
-	"github.com/gogits/gogs/modules/crypto/ssh/terminal"
-)
-
-func ExampleNewServerConn() {
-	// An SSH server is represented by a ServerConfig, which holds
-	// certificate details and handles authentication of ServerConns.
-	config := &ssh.ServerConfig{
-		PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {
-			// Should use constant-time compare (or better, salt+hash) in
-			// a production setting.
-			if c.User() == "testuser" && string(pass) == "tiger" {
-				return nil, nil
-			}
-			return nil, fmt.Errorf("password rejected for %q", c.User())
-		},
-	}
-
-	privateBytes, err := ioutil.ReadFile("id_rsa")
-	if err != nil {
-		panic("Failed to load private key")
-	}
-
-	private, err := ssh.ParsePrivateKey(privateBytes)
-	if err != nil {
-		panic("Failed to parse private key")
-	}
-
-	config.AddHostKey(private)
-
-	// Once a ServerConfig has been configured, connections can be
-	// accepted.
-	listener, err := net.Listen("tcp", "0.0.0.0:2022")
-	if err != nil {
-		panic("failed to listen for connection")
-	}
-	nConn, err := listener.Accept()
-	if err != nil {
-		panic("failed to accept incoming connection")
-	}
-
-	// Before use, a handshake must be performed on the incoming
-	// net.Conn.
-	_, chans, reqs, err := ssh.NewServerConn(nConn, config)
-	if err != nil {
-		panic("failed to handshake")
-	}
-	// The incoming Request channel must be serviced.
-	go ssh.DiscardRequests(reqs)
-
-	// Service the incoming Channel channel.
-	for newChannel := range chans {
-		// Channels have a type, depending on the application level
-		// protocol intended. In the case of a shell, the type is
-		// "session" and ServerShell may be used to present a simple
-		// terminal interface.
-		if newChannel.ChannelType() != "session" {
-			newChannel.Reject(ssh.UnknownChannelType, "unknown channel type")
-			continue
-		}
-		channel, requests, err := newChannel.Accept()
-		if err != nil {
-			panic("could not accept channel.")
-		}
-
-		// Sessions have out-of-band requests such as "shell",
-		// "pty-req" and "env".  Here we handle only the
-		// "shell" request.
-		go func(in <-chan *ssh.Request) {
-			for req := range in {
-				ok := false
-				switch req.Type {
-				case "shell":
-					ok = true
-					if len(req.Payload) > 0 {
-						// We don't accept any
-						// commands, only the
-						// default shell.
-						ok = false
-					}
-				}
-				req.Reply(ok, nil)
-			}
-		}(requests)
-
-		term := terminal.NewTerminal(channel, "> ")
-
-		go func() {
-			defer channel.Close()
-			for {
-				line, err := term.ReadLine()
-				if err != nil {
-					break
-				}
-				fmt.Println(line)
-			}
-		}()
-	}
-}
-
-func ExampleDial() {
-	// An SSH client is represented with a ClientConn. Currently only
-	// the "password" authentication method is supported.
-	//
-	// To authenticate with the remote server you must pass at least one
-	// implementation of AuthMethod via the Auth field in ClientConfig.
-	config := &ssh.ClientConfig{
-		User: "username",
-		Auth: []ssh.AuthMethod{
-			ssh.Password("yourpassword"),
-		},
-	}
-	client, err := ssh.Dial("tcp", "yourserver.com:22", config)
-	if err != nil {
-		panic("Failed to dial: " + err.Error())
-	}
-
-	// Each ClientConn can support multiple interactive sessions,
-	// represented by a Session.
-	session, err := client.NewSession()
-	if err != nil {
-		panic("Failed to create session: " + err.Error())
-	}
-	defer session.Close()
-
-	// Once a Session is created, you can execute a single command on
-	// the remote side using the Run method.
-	var b bytes.Buffer
-	session.Stdout = &b
-	if err := session.Run("/usr/bin/whoami"); err != nil {
-		panic("Failed to run: " + err.Error())
-	}
-	fmt.Println(b.String())
-}
-
-func ExampleClient_Listen() {
-	config := &ssh.ClientConfig{
-		User: "username",
-		Auth: []ssh.AuthMethod{
-			ssh.Password("password"),
-		},
-	}
-	// Dial your ssh server.
-	conn, err := ssh.Dial("tcp", "localhost:22", config)
-	if err != nil {
-		log.Fatalf("unable to connect: %s", err)
-	}
-	defer conn.Close()
-
-	// Request the remote side to open port 8080 on all interfaces.
-	l, err := conn.Listen("tcp", "0.0.0.0:8080")
-	if err != nil {
-		log.Fatalf("unable to register tcp forward: %v", err)
-	}
-	defer l.Close()
-
-	// Serve HTTP with your SSH server acting as a reverse proxy.
-	http.Serve(l, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
-		fmt.Fprintf(resp, "Hello world!\n")
-	}))
-}
-
-func ExampleSession_RequestPty() {
-	// Create client config
-	config := &ssh.ClientConfig{
-		User: "username",
-		Auth: []ssh.AuthMethod{
-			ssh.Password("password"),
-		},
-	}
-	// Connect to ssh server
-	conn, err := ssh.Dial("tcp", "localhost:22", config)
-	if err != nil {
-		log.Fatalf("unable to connect: %s", err)
-	}
-	defer conn.Close()
-	// Create a session
-	session, err := conn.NewSession()
-	if err != nil {
-		log.Fatalf("unable to create session: %s", err)
-	}
-	defer session.Close()
-	// Set up terminal modes
-	modes := ssh.TerminalModes{
-		ssh.ECHO:          0,     // disable echoing
-		ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
-		ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
-	}
-	// Request pseudo terminal
-	if err := session.RequestPty("xterm", 80, 40, modes); err != nil {
-		log.Fatalf("request for pseudo terminal failed: %s", err)
-	}
-	// Start remote shell
-	if err := session.Shell(); err != nil {
-		log.Fatalf("failed to start shell: %s", err)
-	}
-}

+ 0 - 412
modules/crypto/ssh/handshake.go

@@ -1,412 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"crypto/rand"
-	"errors"
-	"fmt"
-	"io"
-	"log"
-	"net"
-	"sync"
-)
-
-// debugHandshake, if set, prints messages sent and received.  Key
-// exchange messages are printed as if DH were used, so the debug
-// messages are wrong when using ECDH.
-const debugHandshake = false
-
-// keyingTransport is a packet based transport that supports key
-// changes. It need not be thread-safe. It should pass through
-// msgNewKeys in both directions.
-type keyingTransport interface {
-	packetConn
-
-	// prepareKeyChange sets up a key change. The key change for a
-	// direction will be effected if a msgNewKeys message is sent
-	// or received.
-	prepareKeyChange(*algorithms, *kexResult) error
-
-	// getSessionID returns the session ID. prepareKeyChange must
-	// have been called once.
-	getSessionID() []byte
-}
-
-// rekeyingTransport is the interface of handshakeTransport that we
-// (internally) expose to ClientConn and ServerConn.
-type rekeyingTransport interface {
-	packetConn
-
-	// requestKeyChange asks the remote side to change keys. All
-	// writes are blocked until the key change succeeds, which is
-	// signaled by reading a msgNewKeys.
-	requestKeyChange() error
-
-	// getSessionID returns the session ID. This is only valid
-	// after the first key change has completed.
-	getSessionID() []byte
-}
-
-// handshakeTransport implements rekeying on top of a keyingTransport
-// and offers a thread-safe writePacket() interface.
-type handshakeTransport struct {
-	conn   keyingTransport
-	config *Config
-
-	serverVersion []byte
-	clientVersion []byte
-
-	// hostKeys is non-empty if we are the server. In that case,
-	// it contains all host keys that can be used to sign the
-	// connection.
-	hostKeys []Signer
-
-	// hostKeyAlgorithms is non-empty if we are the client. In that case,
-	// we accept these key types from the server as host key.
-	hostKeyAlgorithms []string
-
-	// On read error, incoming is closed, and readError is set.
-	incoming  chan []byte
-	readError error
-
-	// data for host key checking
-	hostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error
-	dialAddress     string
-	remoteAddr      net.Addr
-
-	readSinceKex uint64
-
-	// Protects the writing side of the connection
-	mu              sync.Mutex
-	cond            *sync.Cond
-	sentInitPacket  []byte
-	sentInitMsg     *kexInitMsg
-	writtenSinceKex uint64
-	writeError      error
-}
-
-func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport {
-	t := &handshakeTransport{
-		conn:          conn,
-		serverVersion: serverVersion,
-		clientVersion: clientVersion,
-		incoming:      make(chan []byte, 16),
-		config:        config,
-	}
-	t.cond = sync.NewCond(&t.mu)
-	return t
-}
-
-func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport {
-	t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)
-	t.dialAddress = dialAddr
-	t.remoteAddr = addr
-	t.hostKeyCallback = config.HostKeyCallback
-	if config.HostKeyAlgorithms != nil {
-		t.hostKeyAlgorithms = config.HostKeyAlgorithms
-	} else {
-		t.hostKeyAlgorithms = supportedHostKeyAlgos
-	}
-	go t.readLoop()
-	return t
-}
-
-func newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport {
-	t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)
-	t.hostKeys = config.hostKeys
-	go t.readLoop()
-	return t
-}
-
-func (t *handshakeTransport) getSessionID() []byte {
-	return t.conn.getSessionID()
-}
-
-func (t *handshakeTransport) id() string {
-	if len(t.hostKeys) > 0 {
-		return "server"
-	}
-	return "client"
-}
-
-func (t *handshakeTransport) readPacket() ([]byte, error) {
-	p, ok := <-t.incoming
-	if !ok {
-		return nil, t.readError
-	}
-	return p, nil
-}
-
-func (t *handshakeTransport) readLoop() {
-	for {
-		p, err := t.readOnePacket()
-		if err != nil {
-			t.readError = err
-			close(t.incoming)
-			break
-		}
-		if p[0] == msgIgnore || p[0] == msgDebug {
-			continue
-		}
-		t.incoming <- p
-	}
-
-	// If we can't read, declare the writing part dead too.
-	t.mu.Lock()
-	defer t.mu.Unlock()
-	if t.writeError == nil {
-		t.writeError = t.readError
-	}
-	t.cond.Broadcast()
-}
-
-func (t *handshakeTransport) readOnePacket() ([]byte, error) {
-	if t.readSinceKex > t.config.RekeyThreshold {
-		if err := t.requestKeyChange(); err != nil {
-			return nil, err
-		}
-	}
-
-	p, err := t.conn.readPacket()
-	if err != nil {
-		return nil, err
-	}
-
-	t.readSinceKex += uint64(len(p))
-	if debugHandshake {
-		msg, err := decode(p)
-		log.Printf("%s got %T %v (%v)", t.id(), msg, msg, err)
-	}
-	if p[0] != msgKexInit {
-		return p, nil
-	}
-	err = t.enterKeyExchange(p)
-
-	t.mu.Lock()
-	if err != nil {
-		// drop connection
-		t.conn.Close()
-		t.writeError = err
-	}
-
-	if debugHandshake {
-		log.Printf("%s exited key exchange, err %v", t.id(), err)
-	}
-
-	// Unblock writers.
-	t.sentInitMsg = nil
-	t.sentInitPacket = nil
-	t.cond.Broadcast()
-	t.writtenSinceKex = 0
-	t.mu.Unlock()
-
-	if err != nil {
-		return nil, err
-	}
-
-	t.readSinceKex = 0
-	return []byte{msgNewKeys}, nil
-}
-
-// sendKexInit sends a key change message, and returns the message
-// that was sent. After initiating the key change, all writes will be
-// blocked until the change is done, and a failed key change will
-// close the underlying transport. This function is safe for
-// concurrent use by multiple goroutines.
-func (t *handshakeTransport) sendKexInit() (*kexInitMsg, []byte, error) {
-	t.mu.Lock()
-	defer t.mu.Unlock()
-	return t.sendKexInitLocked()
-}
-
-func (t *handshakeTransport) requestKeyChange() error {
-	_, _, err := t.sendKexInit()
-	return err
-}
-
-// sendKexInitLocked sends a key change message. t.mu must be locked
-// while this happens.
-func (t *handshakeTransport) sendKexInitLocked() (*kexInitMsg, []byte, error) {
-	// kexInits may be sent either in response to the other side,
-	// or because our side wants to initiate a key change, so we
-	// may have already sent a kexInit. In that case, don't send a
-	// second kexInit.
-	if t.sentInitMsg != nil {
-		return t.sentInitMsg, t.sentInitPacket, nil
-	}
-	msg := &kexInitMsg{
-		KexAlgos:                t.config.KeyExchanges,
-		CiphersClientServer:     t.config.Ciphers,
-		CiphersServerClient:     t.config.Ciphers,
-		MACsClientServer:        t.config.MACs,
-		MACsServerClient:        t.config.MACs,
-		CompressionClientServer: supportedCompressions,
-		CompressionServerClient: supportedCompressions,
-	}
-	io.ReadFull(rand.Reader, msg.Cookie[:])
-
-	if len(t.hostKeys) > 0 {
-		for _, k := range t.hostKeys {
-			msg.ServerHostKeyAlgos = append(
-				msg.ServerHostKeyAlgos, k.PublicKey().Type())
-		}
-	} else {
-		msg.ServerHostKeyAlgos = t.hostKeyAlgorithms
-	}
-	packet := Marshal(msg)
-
-	// writePacket destroys the contents, so save a copy.
-	packetCopy := make([]byte, len(packet))
-	copy(packetCopy, packet)
-
-	if err := t.conn.writePacket(packetCopy); err != nil {
-		return nil, nil, err
-	}
-
-	t.sentInitMsg = msg
-	t.sentInitPacket = packet
-	return msg, packet, nil
-}
-
-func (t *handshakeTransport) writePacket(p []byte) error {
-	t.mu.Lock()
-	defer t.mu.Unlock()
-
-	if t.writtenSinceKex > t.config.RekeyThreshold {
-		t.sendKexInitLocked()
-	}
-	for t.sentInitMsg != nil && t.writeError == nil {
-		t.cond.Wait()
-	}
-	if t.writeError != nil {
-		return t.writeError
-	}
-	t.writtenSinceKex += uint64(len(p))
-
-	switch p[0] {
-	case msgKexInit:
-		return errors.New("ssh: only handshakeTransport can send kexInit")
-	case msgNewKeys:
-		return errors.New("ssh: only handshakeTransport can send newKeys")
-	default:
-		return t.conn.writePacket(p)
-	}
-}
-
-func (t *handshakeTransport) Close() error {
-	return t.conn.Close()
-}
-
-// enterKeyExchange runs the key exchange.
-func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {
-	if debugHandshake {
-		log.Printf("%s entered key exchange", t.id())
-	}
-	myInit, myInitPacket, err := t.sendKexInit()
-	if err != nil {
-		return err
-	}
-
-	otherInit := &kexInitMsg{}
-	if err := Unmarshal(otherInitPacket, otherInit); err != nil {
-		return err
-	}
-
-	magics := handshakeMagics{
-		clientVersion: t.clientVersion,
-		serverVersion: t.serverVersion,
-		clientKexInit: otherInitPacket,
-		serverKexInit: myInitPacket,
-	}
-
-	clientInit := otherInit
-	serverInit := myInit
-	if len(t.hostKeys) == 0 {
-		clientInit = myInit
-		serverInit = otherInit
-
-		magics.clientKexInit = myInitPacket
-		magics.serverKexInit = otherInitPacket
-	}
-
-	algs, err := findAgreedAlgorithms(clientInit, serverInit)
-	if err != nil {
-		return err
-	}
-
-	// We don't send FirstKexFollows, but we handle receiving it.
-	if otherInit.FirstKexFollows && algs.kex != otherInit.KexAlgos[0] {
-		// other side sent a kex message for the wrong algorithm,
-		// which we have to ignore.
-		if _, err := t.conn.readPacket(); err != nil {
-			return err
-		}
-	}
-
-	kex, ok := kexAlgoMap[algs.kex]
-	if !ok {
-		return fmt.Errorf("ssh: unexpected key exchange algorithm %v", algs.kex)
-	}
-
-	var result *kexResult
-	if len(t.hostKeys) > 0 {
-		result, err = t.server(kex, algs, &magics)
-	} else {
-		result, err = t.client(kex, algs, &magics)
-	}
-
-	if err != nil {
-		return err
-	}
-
-	t.conn.prepareKeyChange(algs, result)
-	if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil {
-		return err
-	}
-	if packet, err := t.conn.readPacket(); err != nil {
-		return err
-	} else if packet[0] != msgNewKeys {
-		return unexpectedMessageError(msgNewKeys, packet[0])
-	}
-	return nil
-}
-
-func (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) {
-	var hostKey Signer
-	for _, k := range t.hostKeys {
-		if algs.hostKey == k.PublicKey().Type() {
-			hostKey = k
-		}
-	}
-
-	r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey)
-	return r, err
-}
-
-func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) {
-	result, err := kex.Client(t.conn, t.config.Rand, magics)
-	if err != nil {
-		return nil, err
-	}
-
-	hostKey, err := ParsePublicKey(result.HostKey)
-	if err != nil {
-		return nil, err
-	}
-
-	if err := verifyHostKeySignature(hostKey, result); err != nil {
-		return nil, err
-	}
-
-	if t.hostKeyCallback != nil {
-		err = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey)
-		if err != nil {
-			return nil, err
-		}
-	}
-
-	return result, nil
-}

+ 0 - 415
modules/crypto/ssh/handshake_test.go

@@ -1,415 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto/rand"
-	"errors"
-	"fmt"
-	"net"
-	"runtime"
-	"strings"
-	"sync"
-	"testing"
-)
-
-type testChecker struct {
-	calls []string
-}
-
-func (t *testChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error {
-	if dialAddr == "bad" {
-		return fmt.Errorf("dialAddr is bad")
-	}
-
-	if tcpAddr, ok := addr.(*net.TCPAddr); !ok || tcpAddr == nil {
-		return fmt.Errorf("testChecker: got %T want *net.TCPAddr", addr)
-	}
-
-	t.calls = append(t.calls, fmt.Sprintf("%s %v %s %x", dialAddr, addr, key.Type(), key.Marshal()))
-
-	return nil
-}
-
-// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and
-// therefore is buffered (net.Pipe deadlocks if both sides start with
-// a write.)
-func netPipe() (net.Conn, net.Conn, error) {
-	listener, err := net.Listen("tcp", "127.0.0.1:0")
-	if err != nil {
-		return nil, nil, err
-	}
-	defer listener.Close()
-	c1, err := net.Dial("tcp", listener.Addr().String())
-	if err != nil {
-		return nil, nil, err
-	}
-
-	c2, err := listener.Accept()
-	if err != nil {
-		c1.Close()
-		return nil, nil, err
-	}
-
-	return c1, c2, nil
-}
-
-func handshakePair(clientConf *ClientConfig, addr string) (client *handshakeTransport, server *handshakeTransport, err error) {
-	a, b, err := netPipe()
-	if err != nil {
-		return nil, nil, err
-	}
-
-	trC := newTransport(a, rand.Reader, true)
-	trS := newTransport(b, rand.Reader, false)
-	clientConf.SetDefaults()
-
-	v := []byte("version")
-	client = newClientTransport(trC, v, v, clientConf, addr, a.RemoteAddr())
-
-	serverConf := &ServerConfig{}
-	serverConf.AddHostKey(testSigners["ecdsa"])
-	serverConf.AddHostKey(testSigners["rsa"])
-	serverConf.SetDefaults()
-	server = newServerTransport(trS, v, v, serverConf)
-
-	return client, server, nil
-}
-
-func TestHandshakeBasic(t *testing.T) {
-	if runtime.GOOS == "plan9" {
-		t.Skip("see golang.org/issue/7237")
-	}
-	checker := &testChecker{}
-	trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr")
-	if err != nil {
-		t.Fatalf("handshakePair: %v", err)
-	}
-
-	defer trC.Close()
-	defer trS.Close()
-
-	go func() {
-		// Client writes a bunch of stuff, and does a key
-		// change in the middle. This should not confuse the
-		// handshake in progress
-		for i := 0; i < 10; i++ {
-			p := []byte{msgRequestSuccess, byte(i)}
-			if err := trC.writePacket(p); err != nil {
-				t.Fatalf("sendPacket: %v", err)
-			}
-			if i == 5 {
-				// halfway through, we request a key change.
-				_, _, err := trC.sendKexInit()
-				if err != nil {
-					t.Fatalf("sendKexInit: %v", err)
-				}
-			}
-		}
-		trC.Close()
-	}()
-
-	// Server checks that client messages come in cleanly
-	i := 0
-	for {
-		p, err := trS.readPacket()
-		if err != nil {
-			break
-		}
-		if p[0] == msgNewKeys {
-			continue
-		}
-		want := []byte{msgRequestSuccess, byte(i)}
-		if bytes.Compare(p, want) != 0 {
-			t.Errorf("message %d: got %q, want %q", i, p, want)
-		}
-		i++
-	}
-	if i != 10 {
-		t.Errorf("received %d messages, want 10.", i)
-	}
-
-	// If all went well, we registered exactly 1 key change.
-	if len(checker.calls) != 1 {
-		t.Fatalf("got %d host key checks, want 1", len(checker.calls))
-	}
-
-	pub := testSigners["ecdsa"].PublicKey()
-	want := fmt.Sprintf("%s %v %s %x", "addr", trC.remoteAddr, pub.Type(), pub.Marshal())
-	if want != checker.calls[0] {
-		t.Errorf("got %q want %q for host key check", checker.calls[0], want)
-	}
-}
-
-func TestHandshakeError(t *testing.T) {
-	checker := &testChecker{}
-	trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "bad")
-	if err != nil {
-		t.Fatalf("handshakePair: %v", err)
-	}
-	defer trC.Close()
-	defer trS.Close()
-
-	// send a packet
-	packet := []byte{msgRequestSuccess, 42}
-	if err := trC.writePacket(packet); err != nil {
-		t.Errorf("writePacket: %v", err)
-	}
-
-	// Now request a key change.
-	_, _, err = trC.sendKexInit()
-	if err != nil {
-		t.Errorf("sendKexInit: %v", err)
-	}
-
-	// the key change will fail, and afterwards we can't write.
-	if err := trC.writePacket([]byte{msgRequestSuccess, 43}); err == nil {
-		t.Errorf("writePacket after botched rekey succeeded.")
-	}
-
-	readback, err := trS.readPacket()
-	if err != nil {
-		t.Fatalf("server closed too soon: %v", err)
-	}
-	if bytes.Compare(readback, packet) != 0 {
-		t.Errorf("got %q want %q", readback, packet)
-	}
-	readback, err = trS.readPacket()
-	if err == nil {
-		t.Errorf("got a message %q after failed key change", readback)
-	}
-}
-
-func TestHandshakeTwice(t *testing.T) {
-	checker := &testChecker{}
-	trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr")
-	if err != nil {
-		t.Fatalf("handshakePair: %v", err)
-	}
-
-	defer trC.Close()
-	defer trS.Close()
-
-	// send a packet
-	packet := make([]byte, 5)
-	packet[0] = msgRequestSuccess
-	if err := trC.writePacket(packet); err != nil {
-		t.Errorf("writePacket: %v", err)
-	}
-
-	// Now request a key change.
-	_, _, err = trC.sendKexInit()
-	if err != nil {
-		t.Errorf("sendKexInit: %v", err)
-	}
-
-	// Send another packet. Use a fresh one, since writePacket destroys.
-	packet = make([]byte, 5)
-	packet[0] = msgRequestSuccess
-	if err := trC.writePacket(packet); err != nil {
-		t.Errorf("writePacket: %v", err)
-	}
-
-	// 2nd key change.
-	_, _, err = trC.sendKexInit()
-	if err != nil {
-		t.Errorf("sendKexInit: %v", err)
-	}
-
-	packet = make([]byte, 5)
-	packet[0] = msgRequestSuccess
-	if err := trC.writePacket(packet); err != nil {
-		t.Errorf("writePacket: %v", err)
-	}
-
-	packet = make([]byte, 5)
-	packet[0] = msgRequestSuccess
-	for i := 0; i < 5; i++ {
-		msg, err := trS.readPacket()
-		if err != nil {
-			t.Fatalf("server closed too soon: %v", err)
-		}
-		if msg[0] == msgNewKeys {
-			continue
-		}
-
-		if bytes.Compare(msg, packet) != 0 {
-			t.Errorf("packet %d: got %q want %q", i, msg, packet)
-		}
-	}
-	if len(checker.calls) != 2 {
-		t.Errorf("got %d key changes, want 2", len(checker.calls))
-	}
-}
-
-func TestHandshakeAutoRekeyWrite(t *testing.T) {
-	checker := &testChecker{}
-	clientConf := &ClientConfig{HostKeyCallback: checker.Check}
-	clientConf.RekeyThreshold = 500
-	trC, trS, err := handshakePair(clientConf, "addr")
-	if err != nil {
-		t.Fatalf("handshakePair: %v", err)
-	}
-	defer trC.Close()
-	defer trS.Close()
-
-	for i := 0; i < 5; i++ {
-		packet := make([]byte, 251)
-		packet[0] = msgRequestSuccess
-		if err := trC.writePacket(packet); err != nil {
-			t.Errorf("writePacket: %v", err)
-		}
-	}
-
-	j := 0
-	for ; j < 5; j++ {
-		_, err := trS.readPacket()
-		if err != nil {
-			break
-		}
-	}
-
-	if j != 5 {
-		t.Errorf("got %d, want 5 messages", j)
-	}
-
-	if len(checker.calls) != 2 {
-		t.Errorf("got %d key changes, wanted 2", len(checker.calls))
-	}
-}
-
-type syncChecker struct {
-	called chan int
-}
-
-func (t *syncChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error {
-	t.called <- 1
-	return nil
-}
-
-func TestHandshakeAutoRekeyRead(t *testing.T) {
-	sync := &syncChecker{make(chan int, 2)}
-	clientConf := &ClientConfig{
-		HostKeyCallback: sync.Check,
-	}
-	clientConf.RekeyThreshold = 500
-
-	trC, trS, err := handshakePair(clientConf, "addr")
-	if err != nil {
-		t.Fatalf("handshakePair: %v", err)
-	}
-	defer trC.Close()
-	defer trS.Close()
-
-	packet := make([]byte, 501)
-	packet[0] = msgRequestSuccess
-	if err := trS.writePacket(packet); err != nil {
-		t.Fatalf("writePacket: %v", err)
-	}
-	// While we read out the packet, a key change will be
-	// initiated.
-	if _, err := trC.readPacket(); err != nil {
-		t.Fatalf("readPacket(client): %v", err)
-	}
-
-	<-sync.called
-}
-
-// errorKeyingTransport generates errors after a given number of
-// read/write operations.
-type errorKeyingTransport struct {
-	packetConn
-	readLeft, writeLeft int
-}
-
-func (n *errorKeyingTransport) prepareKeyChange(*algorithms, *kexResult) error {
-	return nil
-}
-func (n *errorKeyingTransport) getSessionID() []byte {
-	return nil
-}
-
-func (n *errorKeyingTransport) writePacket(packet []byte) error {
-	if n.writeLeft == 0 {
-		n.Close()
-		return errors.New("barf")
-	}
-
-	n.writeLeft--
-	return n.packetConn.writePacket(packet)
-}
-
-func (n *errorKeyingTransport) readPacket() ([]byte, error) {
-	if n.readLeft == 0 {
-		n.Close()
-		return nil, errors.New("barf")
-	}
-
-	n.readLeft--
-	return n.packetConn.readPacket()
-}
-
-func TestHandshakeErrorHandlingRead(t *testing.T) {
-	for i := 0; i < 20; i++ {
-		testHandshakeErrorHandlingN(t, i, -1)
-	}
-}
-
-func TestHandshakeErrorHandlingWrite(t *testing.T) {
-	for i := 0; i < 20; i++ {
-		testHandshakeErrorHandlingN(t, -1, i)
-	}
-}
-
-// testHandshakeErrorHandlingN runs handshakes, injecting errors. If
-// handshakeTransport deadlocks, the go runtime will detect it and
-// panic.
-func testHandshakeErrorHandlingN(t *testing.T, readLimit, writeLimit int) {
-	msg := Marshal(&serviceRequestMsg{strings.Repeat("x", int(minRekeyThreshold)/4)})
-
-	a, b := memPipe()
-	defer a.Close()
-	defer b.Close()
-
-	key := testSigners["ecdsa"]
-	serverConf := Config{RekeyThreshold: minRekeyThreshold}
-	serverConf.SetDefaults()
-	serverConn := newHandshakeTransport(&errorKeyingTransport{a, readLimit, writeLimit}, &serverConf, []byte{'a'}, []byte{'b'})
-	serverConn.hostKeys = []Signer{key}
-	go serverConn.readLoop()
-
-	clientConf := Config{RekeyThreshold: 10 * minRekeyThreshold}
-	clientConf.SetDefaults()
-	clientConn := newHandshakeTransport(&errorKeyingTransport{b, -1, -1}, &clientConf, []byte{'a'}, []byte{'b'})
-	clientConn.hostKeyAlgorithms = []string{key.PublicKey().Type()}
-	go clientConn.readLoop()
-
-	var wg sync.WaitGroup
-	wg.Add(4)
-
-	for _, hs := range []packetConn{serverConn, clientConn} {
-		go func(c packetConn) {
-			for {
-				err := c.writePacket(msg)
-				if err != nil {
-					break
-				}
-			}
-			wg.Done()
-		}(hs)
-		go func(c packetConn) {
-			for {
-				_, err := c.readPacket()
-				if err != nil {
-					break
-				}
-			}
-			wg.Done()
-		}(hs)
-	}
-
-	wg.Wait()
-}

+ 0 - 526
modules/crypto/ssh/kex.go

@@ -1,526 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"crypto"
-	"crypto/ecdsa"
-	"crypto/elliptic"
-	"crypto/subtle"
-	"crypto/rand"
-	"errors"
-	"io"
-	"math/big"
-
-	"golang.org/x/crypto/curve25519"
-)
-
-const (
-	kexAlgoDH1SHA1          = "diffie-hellman-group1-sha1"
-	kexAlgoDH14SHA1         = "diffie-hellman-group14-sha1"
-	kexAlgoECDH256          = "ecdh-sha2-nistp256"
-	kexAlgoECDH384          = "ecdh-sha2-nistp384"
-	kexAlgoECDH521          = "ecdh-sha2-nistp521"
-	kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org"
-)
-
-// kexResult captures the outcome of a key exchange.
-type kexResult struct {
-	// Session hash. See also RFC 4253, section 8.
-	H []byte
-
-	// Shared secret. See also RFC 4253, section 8.
-	K []byte
-
-	// Host key as hashed into H.
-	HostKey []byte
-
-	// Signature of H.
-	Signature []byte
-
-	// A cryptographic hash function that matches the security
-	// level of the key exchange algorithm. It is used for
-	// calculating H, and for deriving keys from H and K.
-	Hash crypto.Hash
-
-	// The session ID, which is the first H computed. This is used
-	// to signal data inside transport.
-	SessionID []byte
-}
-
-// handshakeMagics contains data that is always included in the
-// session hash.
-type handshakeMagics struct {
-	clientVersion, serverVersion []byte
-	clientKexInit, serverKexInit []byte
-}
-
-func (m *handshakeMagics) write(w io.Writer) {
-	writeString(w, m.clientVersion)
-	writeString(w, m.serverVersion)
-	writeString(w, m.clientKexInit)
-	writeString(w, m.serverKexInit)
-}
-
-// kexAlgorithm abstracts different key exchange algorithms.
-type kexAlgorithm interface {
-	// Server runs server-side key agreement, signing the result
-	// with a hostkey.
-	Server(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) (*kexResult, error)
-
-	// Client runs the client-side key agreement. Caller is
-	// responsible for verifying the host key signature.
-	Client(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error)
-}
-
-// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement.
-type dhGroup struct {
-	g, p *big.Int
-}
-
-func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) {
-	if theirPublic.Sign() <= 0 || theirPublic.Cmp(group.p) >= 0 {
-		return nil, errors.New("ssh: DH parameter out of bounds")
-	}
-	return new(big.Int).Exp(theirPublic, myPrivate, group.p), nil
-}
-
-func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
-	hashFunc := crypto.SHA1
-
-	x, err := rand.Int(randSource, group.p)
-	if err != nil {
-		return nil, err
-	}
-	X := new(big.Int).Exp(group.g, x, group.p)
-	kexDHInit := kexDHInitMsg{
-		X: X,
-	}
-	if err := c.writePacket(Marshal(&kexDHInit)); err != nil {
-		return nil, err
-	}
-
-	packet, err := c.readPacket()
-	if err != nil {
-		return nil, err
-	}
-
-	var kexDHReply kexDHReplyMsg
-	if err = Unmarshal(packet, &kexDHReply); err != nil {
-		return nil, err
-	}
-
-	kInt, err := group.diffieHellman(kexDHReply.Y, x)
-	if err != nil {
-		return nil, err
-	}
-
-	h := hashFunc.New()
-	magics.write(h)
-	writeString(h, kexDHReply.HostKey)
-	writeInt(h, X)
-	writeInt(h, kexDHReply.Y)
-	K := make([]byte, intLength(kInt))
-	marshalInt(K, kInt)
-	h.Write(K)
-
-	return &kexResult{
-		H:         h.Sum(nil),
-		K:         K,
-		HostKey:   kexDHReply.HostKey,
-		Signature: kexDHReply.Signature,
-		Hash:      crypto.SHA1,
-	}, nil
-}
-
-func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
-	hashFunc := crypto.SHA1
-	packet, err := c.readPacket()
-	if err != nil {
-		return
-	}
-	var kexDHInit kexDHInitMsg
-	if err = Unmarshal(packet, &kexDHInit); err != nil {
-		return
-	}
-
-	y, err := rand.Int(randSource, group.p)
-	if err != nil {
-		return
-	}
-
-	Y := new(big.Int).Exp(group.g, y, group.p)
-	kInt, err := group.diffieHellman(kexDHInit.X, y)
-	if err != nil {
-		return nil, err
-	}
-
-	hostKeyBytes := priv.PublicKey().Marshal()
-
-	h := hashFunc.New()
-	magics.write(h)
-	writeString(h, hostKeyBytes)
-	writeInt(h, kexDHInit.X)
-	writeInt(h, Y)
-
-	K := make([]byte, intLength(kInt))
-	marshalInt(K, kInt)
-	h.Write(K)
-
-	H := h.Sum(nil)
-
-	// H is already a hash, but the hostkey signing will apply its
-	// own key-specific hash algorithm.
-	sig, err := signAndMarshal(priv, randSource, H)
-	if err != nil {
-		return nil, err
-	}
-
-	kexDHReply := kexDHReplyMsg{
-		HostKey:   hostKeyBytes,
-		Y:         Y,
-		Signature: sig,
-	}
-	packet = Marshal(&kexDHReply)
-
-	err = c.writePacket(packet)
-	return &kexResult{
-		H:         H,
-		K:         K,
-		HostKey:   hostKeyBytes,
-		Signature: sig,
-		Hash:      crypto.SHA1,
-	}, nil
-}
-
-// ecdh performs Elliptic Curve Diffie-Hellman key exchange as
-// described in RFC 5656, section 4.
-type ecdh struct {
-	curve elliptic.Curve
-}
-
-func (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {
-	ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
-	if err != nil {
-		return nil, err
-	}
-
-	kexInit := kexECDHInitMsg{
-		ClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y),
-	}
-
-	serialized := Marshal(&kexInit)
-	if err := c.writePacket(serialized); err != nil {
-		return nil, err
-	}
-
-	packet, err := c.readPacket()
-	if err != nil {
-		return nil, err
-	}
-
-	var reply kexECDHReplyMsg
-	if err = Unmarshal(packet, &reply); err != nil {
-		return nil, err
-	}
-
-	x, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey)
-	if err != nil {
-		return nil, err
-	}
-
-	// generate shared secret
-	secret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes())
-
-	h := ecHash(kex.curve).New()
-	magics.write(h)
-	writeString(h, reply.HostKey)
-	writeString(h, kexInit.ClientPubKey)
-	writeString(h, reply.EphemeralPubKey)
-	K := make([]byte, intLength(secret))
-	marshalInt(K, secret)
-	h.Write(K)
-
-	return &kexResult{
-		H:         h.Sum(nil),
-		K:         K,
-		HostKey:   reply.HostKey,
-		Signature: reply.Signature,
-		Hash:      ecHash(kex.curve),
-	}, nil
-}
-
-// unmarshalECKey parses and checks an EC key.
-func unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) {
-	x, y = elliptic.Unmarshal(curve, pubkey)
-	if x == nil {
-		return nil, nil, errors.New("ssh: elliptic.Unmarshal failure")
-	}
-	if !validateECPublicKey(curve, x, y) {
-		return nil, nil, errors.New("ssh: public key not on curve")
-	}
-	return x, y, nil
-}
-
-// validateECPublicKey checks that the point is a valid public key for
-// the given curve. See [SEC1], 3.2.2
-func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool {
-	if x.Sign() == 0 && y.Sign() == 0 {
-		return false
-	}
-
-	if x.Cmp(curve.Params().P) >= 0 {
-		return false
-	}
-
-	if y.Cmp(curve.Params().P) >= 0 {
-		return false
-	}
-
-	if !curve.IsOnCurve(x, y) {
-		return false
-	}
-
-	// We don't check if N * PubKey == 0, since
-	//
-	// - the NIST curves have cofactor = 1, so this is implicit.
-	// (We don't foresee an implementation that supports non NIST
-	// curves)
-	//
-	// - for ephemeral keys, we don't need to worry about small
-	// subgroup attacks.
-	return true
-}
-
-func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
-	packet, err := c.readPacket()
-	if err != nil {
-		return nil, err
-	}
-
-	var kexECDHInit kexECDHInitMsg
-	if err = Unmarshal(packet, &kexECDHInit); err != nil {
-		return nil, err
-	}
-
-	clientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey)
-	if err != nil {
-		return nil, err
-	}
-
-	// We could cache this key across multiple users/multiple
-	// connection attempts, but the benefit is small. OpenSSH
-	// generates a new key for each incoming connection.
-	ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
-	if err != nil {
-		return nil, err
-	}
-
-	hostKeyBytes := priv.PublicKey().Marshal()
-
-	serializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y)
-
-	// generate shared secret
-	secret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes())
-
-	h := ecHash(kex.curve).New()
-	magics.write(h)
-	writeString(h, hostKeyBytes)
-	writeString(h, kexECDHInit.ClientPubKey)
-	writeString(h, serializedEphKey)
-
-	K := make([]byte, intLength(secret))
-	marshalInt(K, secret)
-	h.Write(K)
-
-	H := h.Sum(nil)
-
-	// H is already a hash, but the hostkey signing will apply its
-	// own key-specific hash algorithm.
-	sig, err := signAndMarshal(priv, rand, H)
-	if err != nil {
-		return nil, err
-	}
-
-	reply := kexECDHReplyMsg{
-		EphemeralPubKey: serializedEphKey,
-		HostKey:         hostKeyBytes,
-		Signature:       sig,
-	}
-
-	serialized := Marshal(&reply)
-	if err := c.writePacket(serialized); err != nil {
-		return nil, err
-	}
-
-	return &kexResult{
-		H:         H,
-		K:         K,
-		HostKey:   reply.HostKey,
-		Signature: sig,
-		Hash:      ecHash(kex.curve),
-	}, nil
-}
-
-var kexAlgoMap = map[string]kexAlgorithm{}
-
-func init() {
-	// This is the group called diffie-hellman-group1-sha1 in RFC
-	// 4253 and Oakley Group 2 in RFC 2409.
-	p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16)
-	kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{
-		g: new(big.Int).SetInt64(2),
-		p: p,
-	}
-
-	// This is the group called diffie-hellman-group14-sha1 in RFC
-	// 4253 and Oakley Group 14 in RFC 3526.
-	p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16)
-
-	kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{
-		g: new(big.Int).SetInt64(2),
-		p: p,
-	}
-
-	kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}
-	kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}
-	kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}
-	kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}
-}
-
-// curve25519sha256 implements the curve25519-sha256@libssh.org key
-// agreement protocol, as described in
-// https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt
-type curve25519sha256 struct{}
-
-type curve25519KeyPair struct {
-	priv [32]byte
-	pub  [32]byte
-}
-
-func (kp *curve25519KeyPair) generate(rand io.Reader) error {
-	if _, err := io.ReadFull(rand, kp.priv[:]); err != nil {
-		return err
-	}
-	curve25519.ScalarBaseMult(&kp.pub, &kp.priv)
-	return nil
-}
-
-// curve25519Zeros is just an array of 32 zero bytes so that we have something
-// convenient to compare against in order to reject curve25519 points with the
-// wrong order.
-var curve25519Zeros [32]byte
-
-func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {
-	var kp curve25519KeyPair
-	if err := kp.generate(rand); err != nil {
-		return nil, err
-	}
-	if err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil {
-		return nil, err
-	}
-
-	packet, err := c.readPacket()
-	if err != nil {
-		return nil, err
-	}
-
-	var reply kexECDHReplyMsg
-	if err = Unmarshal(packet, &reply); err != nil {
-		return nil, err
-	}
-	if len(reply.EphemeralPubKey) != 32 {
-		return nil, errors.New("ssh: peer's curve25519 public value has wrong length")
-	}
-
-	var servPub, secret [32]byte
-	copy(servPub[:], reply.EphemeralPubKey)
-	curve25519.ScalarMult(&secret, &kp.priv, &servPub)
-	if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-		return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
-	}
-
-	h := crypto.SHA256.New()
-	magics.write(h)
-	writeString(h, reply.HostKey)
-	writeString(h, kp.pub[:])
-	writeString(h, reply.EphemeralPubKey)
-
-	kInt := new(big.Int).SetBytes(secret[:])
-	K := make([]byte, intLength(kInt))
-	marshalInt(K, kInt)
-	h.Write(K)
-
-	return &kexResult{
-		H:         h.Sum(nil),
-		K:         K,
-		HostKey:   reply.HostKey,
-		Signature: reply.Signature,
-		Hash:      crypto.SHA256,
-	}, nil
-}
-
-func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
-	packet, err := c.readPacket()
-	if err != nil {
-		return
-	}
-	var kexInit kexECDHInitMsg
-	if err = Unmarshal(packet, &kexInit); err != nil {
-		return
-	}
-
-	if len(kexInit.ClientPubKey) != 32 {
-		return nil, errors.New("ssh: peer's curve25519 public value has wrong length")
-	}
-
-	var kp curve25519KeyPair
-	if err := kp.generate(rand); err != nil {
-		return nil, err
-	}
-
-	var clientPub, secret [32]byte
-	copy(clientPub[:], kexInit.ClientPubKey)
-	curve25519.ScalarMult(&secret, &kp.priv, &clientPub)
-	if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-		return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
-	}
-
-	hostKeyBytes := priv.PublicKey().Marshal()
-
-	h := crypto.SHA256.New()
-	magics.write(h)
-	writeString(h, hostKeyBytes)
-	writeString(h, kexInit.ClientPubKey)
-	writeString(h, kp.pub[:])
-
-	kInt := new(big.Int).SetBytes(secret[:])
-	K := make([]byte, intLength(kInt))
-	marshalInt(K, kInt)
-	h.Write(K)
-
-	H := h.Sum(nil)
-
-	sig, err := signAndMarshal(priv, rand, H)
-	if err != nil {
-		return nil, err
-	}
-
-	reply := kexECDHReplyMsg{
-		EphemeralPubKey: kp.pub[:],
-		HostKey:         hostKeyBytes,
-		Signature:       sig,
-	}
-	if err := c.writePacket(Marshal(&reply)); err != nil {
-		return nil, err
-	}
-	return &kexResult{
-		H:         H,
-		K:         K,
-		HostKey:   hostKeyBytes,
-		Signature: sig,
-		Hash:      crypto.SHA256,
-	}, nil
-}

+ 0 - 50
modules/crypto/ssh/kex_test.go

@@ -1,50 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-// Key exchange tests.
-
-import (
-	"crypto/rand"
-	"reflect"
-	"testing"
-)
-
-func TestKexes(t *testing.T) {
-	type kexResultErr struct {
-		result *kexResult
-		err    error
-	}
-
-	for name, kex := range kexAlgoMap {
-		a, b := memPipe()
-
-		s := make(chan kexResultErr, 1)
-		c := make(chan kexResultErr, 1)
-		var magics handshakeMagics
-		go func() {
-			r, e := kex.Client(a, rand.Reader, &magics)
-			a.Close()
-			c <- kexResultErr{r, e}
-		}()
-		go func() {
-			r, e := kex.Server(b, rand.Reader, &magics, testSigners["ecdsa"])
-			b.Close()
-			s <- kexResultErr{r, e}
-		}()
-
-		clientRes := <-c
-		serverRes := <-s
-		if clientRes.err != nil {
-			t.Errorf("client: %v", clientRes.err)
-		}
-		if serverRes.err != nil {
-			t.Errorf("server: %v", serverRes.err)
-		}
-		if !reflect.DeepEqual(clientRes.result, serverRes.result) {
-			t.Errorf("kex %q: mismatch %#v, %#v", name, clientRes.result, serverRes.result)
-		}
-	}
-}

+ 0 - 628
modules/crypto/ssh/keys.go

@@ -1,628 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto"
-	"crypto/dsa"
-	"crypto/ecdsa"
-	"crypto/elliptic"
-	"crypto/rsa"
-	"crypto/x509"
-	"encoding/asn1"
-	"encoding/base64"
-	"encoding/pem"
-	"errors"
-	"fmt"
-	"io"
-	"math/big"
-)
-
-// These constants represent the algorithm names for key types supported by this
-// package.
-const (
-	KeyAlgoRSA      = "ssh-rsa"
-	KeyAlgoDSA      = "ssh-dss"
-	KeyAlgoECDSA256 = "ecdsa-sha2-nistp256"
-	KeyAlgoECDSA384 = "ecdsa-sha2-nistp384"
-	KeyAlgoECDSA521 = "ecdsa-sha2-nistp521"
-)
-
-// parsePubKey parses a public key of the given algorithm.
-// Use ParsePublicKey for keys with prepended algorithm.
-func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) {
-	switch algo {
-	case KeyAlgoRSA:
-		return parseRSA(in)
-	case KeyAlgoDSA:
-		return parseDSA(in)
-	case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:
-		return parseECDSA(in)
-	case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01:
-		cert, err := parseCert(in, certToPrivAlgo(algo))
-		if err != nil {
-			return nil, nil, err
-		}
-		return cert, nil, nil
-	}
-	return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", err)
-}
-
-// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format
-// (see sshd(8) manual page) once the options and key type fields have been
-// removed.
-func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) {
-	in = bytes.TrimSpace(in)
-
-	i := bytes.IndexAny(in, " \t")
-	if i == -1 {
-		i = len(in)
-	}
-	base64Key := in[:i]
-
-	key := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key)))
-	n, err := base64.StdEncoding.Decode(key, base64Key)
-	if err != nil {
-		return nil, "", err
-	}
-	key = key[:n]
-	out, err = ParsePublicKey(key)
-	if err != nil {
-		return nil, "", err
-	}
-	comment = string(bytes.TrimSpace(in[i:]))
-	return out, comment, nil
-}
-
-// ParseAuthorizedKeys parses a public key from an authorized_keys
-// file used in OpenSSH according to the sshd(8) manual page.
-func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) {
-	for len(in) > 0 {
-		end := bytes.IndexByte(in, '\n')
-		if end != -1 {
-			rest = in[end+1:]
-			in = in[:end]
-		} else {
-			rest = nil
-		}
-
-		end = bytes.IndexByte(in, '\r')
-		if end != -1 {
-			in = in[:end]
-		}
-
-		in = bytes.TrimSpace(in)
-		if len(in) == 0 || in[0] == '#' {
-			in = rest
-			continue
-		}
-
-		i := bytes.IndexAny(in, " \t")
-		if i == -1 {
-			in = rest
-			continue
-		}
-
-		if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
-			return out, comment, options, rest, nil
-		}
-
-		// No key type recognised. Maybe there's an options field at
-		// the beginning.
-		var b byte
-		inQuote := false
-		var candidateOptions []string
-		optionStart := 0
-		for i, b = range in {
-			isEnd := !inQuote && (b == ' ' || b == '\t')
-			if (b == ',' && !inQuote) || isEnd {
-				if i-optionStart > 0 {
-					candidateOptions = append(candidateOptions, string(in[optionStart:i]))
-				}
-				optionStart = i + 1
-			}
-			if isEnd {
-				break
-			}
-			if b == '"' && (i == 0 || (i > 0 && in[i-1] != '\\')) {
-				inQuote = !inQuote
-			}
-		}
-		for i < len(in) && (in[i] == ' ' || in[i] == '\t') {
-			i++
-		}
-		if i == len(in) {
-			// Invalid line: unmatched quote
-			in = rest
-			continue
-		}
-
-		in = in[i:]
-		i = bytes.IndexAny(in, " \t")
-		if i == -1 {
-			in = rest
-			continue
-		}
-
-		if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
-			options = candidateOptions
-			return out, comment, options, rest, nil
-		}
-
-		in = rest
-		continue
-	}
-
-	return nil, "", nil, nil, errors.New("ssh: no key found")
-}
-
-// ParsePublicKey parses an SSH public key formatted for use in
-// the SSH wire protocol according to RFC 4253, section 6.6.
-func ParsePublicKey(in []byte) (out PublicKey, err error) {
-	algo, in, ok := parseString(in)
-	if !ok {
-		return nil, errShortRead
-	}
-	var rest []byte
-	out, rest, err = parsePubKey(in, string(algo))
-	if len(rest) > 0 {
-		return nil, errors.New("ssh: trailing junk in public key")
-	}
-
-	return out, err
-}
-
-// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH
-// authorized_keys file. The return value ends with newline.
-func MarshalAuthorizedKey(key PublicKey) []byte {
-	b := &bytes.Buffer{}
-	b.WriteString(key.Type())
-	b.WriteByte(' ')
-	e := base64.NewEncoder(base64.StdEncoding, b)
-	e.Write(key.Marshal())
-	e.Close()
-	b.WriteByte('\n')
-	return b.Bytes()
-}
-
-// PublicKey is an abstraction of different types of public keys.
-type PublicKey interface {
-	// Type returns the key's type, e.g. "ssh-rsa".
-	Type() string
-
-	// Marshal returns the serialized key data in SSH wire format,
-	// with the name prefix.
-	Marshal() []byte
-
-	// Verify that sig is a signature on the given data using this
-	// key. This function will hash the data appropriately first.
-	Verify(data []byte, sig *Signature) error
-}
-
-// A Signer can create signatures that verify against a public key.
-type Signer interface {
-	// PublicKey returns an associated PublicKey instance.
-	PublicKey() PublicKey
-
-	// Sign returns raw signature for the given data. This method
-	// will apply the hash specified for the keytype to the data.
-	Sign(rand io.Reader, data []byte) (*Signature, error)
-}
-
-type rsaPublicKey rsa.PublicKey
-
-func (r *rsaPublicKey) Type() string {
-	return "ssh-rsa"
-}
-
-// parseRSA parses an RSA key according to RFC 4253, section 6.6.
-func parseRSA(in []byte) (out PublicKey, rest []byte, err error) {
-	var w struct {
-		E    *big.Int
-		N    *big.Int
-		Rest []byte `ssh:"rest"`
-	}
-	if err := Unmarshal(in, &w); err != nil {
-		return nil, nil, err
-	}
-
-	if w.E.BitLen() > 24 {
-		return nil, nil, errors.New("ssh: exponent too large")
-	}
-	e := w.E.Int64()
-	if e < 3 || e&1 == 0 {
-		return nil, nil, errors.New("ssh: incorrect exponent")
-	}
-
-	var key rsa.PublicKey
-	key.E = int(e)
-	key.N = w.N
-	return (*rsaPublicKey)(&key), w.Rest, nil
-}
-
-func (r *rsaPublicKey) Marshal() []byte {
-	e := new(big.Int).SetInt64(int64(r.E))
-	wirekey := struct {
-		Name string
-		E    *big.Int
-		N    *big.Int
-	}{
-		KeyAlgoRSA,
-		e,
-		r.N,
-	}
-	return Marshal(&wirekey)
-}
-
-func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {
-	if sig.Format != r.Type() {
-		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type())
-	}
-	h := crypto.SHA1.New()
-	h.Write(data)
-	digest := h.Sum(nil)
-	return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob)
-}
-
-type rsaPrivateKey struct {
-	*rsa.PrivateKey
-}
-
-func (r *rsaPrivateKey) PublicKey() PublicKey {
-	return (*rsaPublicKey)(&r.PrivateKey.PublicKey)
-}
-
-func (r *rsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
-	h := crypto.SHA1.New()
-	h.Write(data)
-	digest := h.Sum(nil)
-	blob, err := rsa.SignPKCS1v15(rand, r.PrivateKey, crypto.SHA1, digest)
-	if err != nil {
-		return nil, err
-	}
-	return &Signature{
-		Format: r.PublicKey().Type(),
-		Blob:   blob,
-	}, nil
-}
-
-type dsaPublicKey dsa.PublicKey
-
-func (r *dsaPublicKey) Type() string {
-	return "ssh-dss"
-}
-
-// parseDSA parses an DSA key according to RFC 4253, section 6.6.
-func parseDSA(in []byte) (out PublicKey, rest []byte, err error) {
-	var w struct {
-		P, Q, G, Y *big.Int
-		Rest       []byte `ssh:"rest"`
-	}
-	if err := Unmarshal(in, &w); err != nil {
-		return nil, nil, err
-	}
-
-	key := &dsaPublicKey{
-		Parameters: dsa.Parameters{
-			P: w.P,
-			Q: w.Q,
-			G: w.G,
-		},
-		Y: w.Y,
-	}
-	return key, w.Rest, nil
-}
-
-func (k *dsaPublicKey) Marshal() []byte {
-	w := struct {
-		Name       string
-		P, Q, G, Y *big.Int
-	}{
-		k.Type(),
-		k.P,
-		k.Q,
-		k.G,
-		k.Y,
-	}
-
-	return Marshal(&w)
-}
-
-func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {
-	if sig.Format != k.Type() {
-		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
-	}
-	h := crypto.SHA1.New()
-	h.Write(data)
-	digest := h.Sum(nil)
-
-	// Per RFC 4253, section 6.6,
-	// The value for 'dss_signature_blob' is encoded as a string containing
-	// r, followed by s (which are 160-bit integers, without lengths or
-	// padding, unsigned, and in network byte order).
-	// For DSS purposes, sig.Blob should be exactly 40 bytes in length.
-	if len(sig.Blob) != 40 {
-		return errors.New("ssh: DSA signature parse error")
-	}
-	r := new(big.Int).SetBytes(sig.Blob[:20])
-	s := new(big.Int).SetBytes(sig.Blob[20:])
-	if dsa.Verify((*dsa.PublicKey)(k), digest, r, s) {
-		return nil
-	}
-	return errors.New("ssh: signature did not verify")
-}
-
-type dsaPrivateKey struct {
-	*dsa.PrivateKey
-}
-
-func (k *dsaPrivateKey) PublicKey() PublicKey {
-	return (*dsaPublicKey)(&k.PrivateKey.PublicKey)
-}
-
-func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
-	h := crypto.SHA1.New()
-	h.Write(data)
-	digest := h.Sum(nil)
-	r, s, err := dsa.Sign(rand, k.PrivateKey, digest)
-	if err != nil {
-		return nil, err
-	}
-
-	sig := make([]byte, 40)
-	rb := r.Bytes()
-	sb := s.Bytes()
-
-	copy(sig[20-len(rb):20], rb)
-	copy(sig[40-len(sb):], sb)
-
-	return &Signature{
-		Format: k.PublicKey().Type(),
-		Blob:   sig,
-	}, nil
-}
-
-type ecdsaPublicKey ecdsa.PublicKey
-
-func (key *ecdsaPublicKey) Type() string {
-	return "ecdsa-sha2-" + key.nistID()
-}
-
-func (key *ecdsaPublicKey) nistID() string {
-	switch key.Params().BitSize {
-	case 256:
-		return "nistp256"
-	case 384:
-		return "nistp384"
-	case 521:
-		return "nistp521"
-	}
-	panic("ssh: unsupported ecdsa key size")
-}
-
-func supportedEllipticCurve(curve elliptic.Curve) bool {
-	return curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521()
-}
-
-// ecHash returns the hash to match the given elliptic curve, see RFC
-// 5656, section 6.2.1
-func ecHash(curve elliptic.Curve) crypto.Hash {
-	bitSize := curve.Params().BitSize
-	switch {
-	case bitSize <= 256:
-		return crypto.SHA256
-	case bitSize <= 384:
-		return crypto.SHA384
-	}
-	return crypto.SHA512
-}
-
-// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1.
-func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) {
-	var w struct {
-		Curve    string
-		KeyBytes []byte
-		Rest     []byte `ssh:"rest"`
-	}
-
-	if err := Unmarshal(in, &w); err != nil {
-		return nil, nil, err
-	}
-
-	key := new(ecdsa.PublicKey)
-
-	switch w.Curve {
-	case "nistp256":
-		key.Curve = elliptic.P256()
-	case "nistp384":
-		key.Curve = elliptic.P384()
-	case "nistp521":
-		key.Curve = elliptic.P521()
-	default:
-		return nil, nil, errors.New("ssh: unsupported curve")
-	}
-
-	key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)
-	if key.X == nil || key.Y == nil {
-		return nil, nil, errors.New("ssh: invalid curve point")
-	}
-	return (*ecdsaPublicKey)(key), w.Rest, nil
-}
-
-func (key *ecdsaPublicKey) Marshal() []byte {
-	// See RFC 5656, section 3.1.
-	keyBytes := elliptic.Marshal(key.Curve, key.X, key.Y)
-	w := struct {
-		Name string
-		ID   string
-		Key  []byte
-	}{
-		key.Type(),
-		key.nistID(),
-		keyBytes,
-	}
-
-	return Marshal(&w)
-}
-
-func (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {
-	if sig.Format != key.Type() {
-		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, key.Type())
-	}
-
-	h := ecHash(key.Curve).New()
-	h.Write(data)
-	digest := h.Sum(nil)
-
-	// Per RFC 5656, section 3.1.2,
-	// The ecdsa_signature_blob value has the following specific encoding:
-	//    mpint    r
-	//    mpint    s
-	var ecSig struct {
-		R *big.Int
-		S *big.Int
-	}
-
-	if err := Unmarshal(sig.Blob, &ecSig); err != nil {
-		return err
-	}
-
-	if ecdsa.Verify((*ecdsa.PublicKey)(key), digest, ecSig.R, ecSig.S) {
-		return nil
-	}
-	return errors.New("ssh: signature did not verify")
-}
-
-type ecdsaPrivateKey struct {
-	*ecdsa.PrivateKey
-}
-
-func (k *ecdsaPrivateKey) PublicKey() PublicKey {
-	return (*ecdsaPublicKey)(&k.PrivateKey.PublicKey)
-}
-
-func (k *ecdsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
-	h := ecHash(k.PrivateKey.PublicKey.Curve).New()
-	h.Write(data)
-	digest := h.Sum(nil)
-	r, s, err := ecdsa.Sign(rand, k.PrivateKey, digest)
-	if err != nil {
-		return nil, err
-	}
-
-	sig := make([]byte, intLength(r)+intLength(s))
-	rest := marshalInt(sig, r)
-	marshalInt(rest, s)
-	return &Signature{
-		Format: k.PublicKey().Type(),
-		Blob:   sig,
-	}, nil
-}
-
-// NewSignerFromKey takes a pointer to rsa, dsa or ecdsa PrivateKey
-// returns a corresponding Signer instance. EC keys should use P256,
-// P384 or P521.
-func NewSignerFromKey(k interface{}) (Signer, error) {
-	var sshKey Signer
-	switch t := k.(type) {
-	case *rsa.PrivateKey:
-		sshKey = &rsaPrivateKey{t}
-	case *dsa.PrivateKey:
-		sshKey = &dsaPrivateKey{t}
-	case *ecdsa.PrivateKey:
-		if !supportedEllipticCurve(t.Curve) {
-			return nil, errors.New("ssh: only P256, P384 and P521 EC keys are supported.")
-		}
-
-		sshKey = &ecdsaPrivateKey{t}
-	default:
-		return nil, fmt.Errorf("ssh: unsupported key type %T", k)
-	}
-	return sshKey, nil
-}
-
-// NewPublicKey takes a pointer to rsa, dsa or ecdsa PublicKey
-// and returns a corresponding ssh PublicKey instance. EC keys should use P256, P384 or P521.
-func NewPublicKey(k interface{}) (PublicKey, error) {
-	var sshKey PublicKey
-	switch t := k.(type) {
-	case *rsa.PublicKey:
-		sshKey = (*rsaPublicKey)(t)
-	case *ecdsa.PublicKey:
-		if !supportedEllipticCurve(t.Curve) {
-			return nil, errors.New("ssh: only P256, P384 and P521 EC keys are supported.")
-		}
-		sshKey = (*ecdsaPublicKey)(t)
-	case *dsa.PublicKey:
-		sshKey = (*dsaPublicKey)(t)
-	default:
-		return nil, fmt.Errorf("ssh: unsupported key type %T", k)
-	}
-	return sshKey, nil
-}
-
-// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports
-// the same keys as ParseRawPrivateKey.
-func ParsePrivateKey(pemBytes []byte) (Signer, error) {
-	key, err := ParseRawPrivateKey(pemBytes)
-	if err != nil {
-		return nil, err
-	}
-
-	return NewSignerFromKey(key)
-}
-
-// ParseRawPrivateKey returns a private key from a PEM encoded private key. It
-// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys.
-func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {
-	block, _ := pem.Decode(pemBytes)
-	if block == nil {
-		return nil, errors.New("ssh: no key found")
-	}
-
-	switch block.Type {
-	case "RSA PRIVATE KEY":
-		return x509.ParsePKCS1PrivateKey(block.Bytes)
-	case "EC PRIVATE KEY":
-		return x509.ParseECPrivateKey(block.Bytes)
-	case "DSA PRIVATE KEY":
-		return ParseDSAPrivateKey(block.Bytes)
-	default:
-		return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type)
-	}
-}
-
-// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as
-// specified by the OpenSSL DSA man page.
-func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {
-	var k struct {
-		Version int
-		P       *big.Int
-		Q       *big.Int
-		G       *big.Int
-		Priv    *big.Int
-		Pub     *big.Int
-	}
-	rest, err := asn1.Unmarshal(der, &k)
-	if err != nil {
-		return nil, errors.New("ssh: failed to parse DSA key: " + err.Error())
-	}
-	if len(rest) > 0 {
-		return nil, errors.New("ssh: garbage after DSA key")
-	}
-
-	return &dsa.PrivateKey{
-		PublicKey: dsa.PublicKey{
-			Parameters: dsa.Parameters{
-				P: k.P,
-				Q: k.Q,
-				G: k.G,
-			},
-			Y: k.Priv,
-		},
-		X: k.Pub,
-	}, nil
-}

+ 0 - 306
modules/crypto/ssh/keys_test.go

@@ -1,306 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"crypto/dsa"
-	"crypto/ecdsa"
-	"crypto/elliptic"
-	"crypto/rand"
-	"crypto/rsa"
-	"encoding/base64"
-	"fmt"
-	"reflect"
-	"strings"
-	"testing"
-
-	"github.com/gogits/gogs/modules/crypto/ssh/testdata"
-)
-
-func rawKey(pub PublicKey) interface{} {
-	switch k := pub.(type) {
-	case *rsaPublicKey:
-		return (*rsa.PublicKey)(k)
-	case *dsaPublicKey:
-		return (*dsa.PublicKey)(k)
-	case *ecdsaPublicKey:
-		return (*ecdsa.PublicKey)(k)
-	case *Certificate:
-		return k
-	}
-	panic("unknown key type")
-}
-
-func TestKeyMarshalParse(t *testing.T) {
-	for _, priv := range testSigners {
-		pub := priv.PublicKey()
-		roundtrip, err := ParsePublicKey(pub.Marshal())
-		if err != nil {
-			t.Errorf("ParsePublicKey(%T): %v", pub, err)
-		}
-
-		k1 := rawKey(pub)
-		k2 := rawKey(roundtrip)
-
-		if !reflect.DeepEqual(k1, k2) {
-			t.Errorf("got %#v in roundtrip, want %#v", k2, k1)
-		}
-	}
-}
-
-func TestUnsupportedCurves(t *testing.T) {
-	raw, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
-	if err != nil {
-		t.Fatalf("GenerateKey: %v", err)
-	}
-
-	if _, err = NewSignerFromKey(raw); err == nil || !strings.Contains(err.Error(), "only P256") {
-		t.Fatalf("NewPrivateKey should not succeed with P224, got: %v", err)
-	}
-
-	if _, err = NewPublicKey(&raw.PublicKey); err == nil || !strings.Contains(err.Error(), "only P256") {
-		t.Fatalf("NewPublicKey should not succeed with P224, got: %v", err)
-	}
-}
-
-func TestNewPublicKey(t *testing.T) {
-	for _, k := range testSigners {
-		raw := rawKey(k.PublicKey())
-		// Skip certificates, as NewPublicKey does not support them.
-		if _, ok := raw.(*Certificate); ok {
-			continue
-		}
-		pub, err := NewPublicKey(raw)
-		if err != nil {
-			t.Errorf("NewPublicKey(%#v): %v", raw, err)
-		}
-		if !reflect.DeepEqual(k.PublicKey(), pub) {
-			t.Errorf("NewPublicKey(%#v) = %#v, want %#v", raw, pub, k.PublicKey())
-		}
-	}
-}
-
-func TestKeySignVerify(t *testing.T) {
-	for _, priv := range testSigners {
-		pub := priv.PublicKey()
-
-		data := []byte("sign me")
-		sig, err := priv.Sign(rand.Reader, data)
-		if err != nil {
-			t.Fatalf("Sign(%T): %v", priv, err)
-		}
-
-		if err := pub.Verify(data, sig); err != nil {
-			t.Errorf("publicKey.Verify(%T): %v", priv, err)
-		}
-		sig.Blob[5]++
-		if err := pub.Verify(data, sig); err == nil {
-			t.Errorf("publicKey.Verify on broken sig did not fail")
-		}
-	}
-}
-
-func TestParseRSAPrivateKey(t *testing.T) {
-	key := testPrivateKeys["rsa"]
-
-	rsa, ok := key.(*rsa.PrivateKey)
-	if !ok {
-		t.Fatalf("got %T, want *rsa.PrivateKey", rsa)
-	}
-
-	if err := rsa.Validate(); err != nil {
-		t.Errorf("Validate: %v", err)
-	}
-}
-
-func TestParseECPrivateKey(t *testing.T) {
-	key := testPrivateKeys["ecdsa"]
-
-	ecKey, ok := key.(*ecdsa.PrivateKey)
-	if !ok {
-		t.Fatalf("got %T, want *ecdsa.PrivateKey", ecKey)
-	}
-
-	if !validateECPublicKey(ecKey.Curve, ecKey.X, ecKey.Y) {
-		t.Fatalf("public key does not validate.")
-	}
-}
-
-func TestParseDSA(t *testing.T) {
-	// We actually exercise the ParsePrivateKey codepath here, as opposed to
-	// using the ParseRawPrivateKey+NewSignerFromKey path that testdata_test.go
-	// uses.
-	s, err := ParsePrivateKey(testdata.PEMBytes["dsa"])
-	if err != nil {
-		t.Fatalf("ParsePrivateKey returned error: %s", err)
-	}
-
-	data := []byte("sign me")
-	sig, err := s.Sign(rand.Reader, data)
-	if err != nil {
-		t.Fatalf("dsa.Sign: %v", err)
-	}
-
-	if err := s.PublicKey().Verify(data, sig); err != nil {
-		t.Errorf("Verify failed: %v", err)
-	}
-}
-
-// Tests for authorized_keys parsing.
-
-// getTestKey returns a public key, and its base64 encoding.
-func getTestKey() (PublicKey, string) {
-	k := testPublicKeys["rsa"]
-
-	b := &bytes.Buffer{}
-	e := base64.NewEncoder(base64.StdEncoding, b)
-	e.Write(k.Marshal())
-	e.Close()
-
-	return k, b.String()
-}
-
-func TestMarshalParsePublicKey(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	line := fmt.Sprintf("%s %s user@host", pub.Type(), pubSerialized)
-
-	authKeys := MarshalAuthorizedKey(pub)
-	actualFields := strings.Fields(string(authKeys))
-	if len(actualFields) == 0 {
-		t.Fatalf("failed authKeys: %v", authKeys)
-	}
-
-	// drop the comment
-	expectedFields := strings.Fields(line)[0:2]
-
-	if !reflect.DeepEqual(actualFields, expectedFields) {
-		t.Errorf("got %v, expected %v", actualFields, expectedFields)
-	}
-
-	actPub, _, _, _, err := ParseAuthorizedKey([]byte(line))
-	if err != nil {
-		t.Fatalf("cannot parse %v: %v", line, err)
-	}
-	if !reflect.DeepEqual(actPub, pub) {
-		t.Errorf("got %v, expected %v", actPub, pub)
-	}
-}
-
-type authResult struct {
-	pubKey   PublicKey
-	options  []string
-	comments string
-	rest     string
-	ok       bool
-}
-
-func testAuthorizedKeys(t *testing.T, authKeys []byte, expected []authResult) {
-	rest := authKeys
-	var values []authResult
-	for len(rest) > 0 {
-		var r authResult
-		var err error
-		r.pubKey, r.comments, r.options, rest, err = ParseAuthorizedKey(rest)
-		r.ok = (err == nil)
-		t.Log(err)
-		r.rest = string(rest)
-		values = append(values, r)
-	}
-
-	if !reflect.DeepEqual(values, expected) {
-		t.Errorf("got %#v, expected %#v", values, expected)
-	}
-}
-
-func TestAuthorizedKeyBasic(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	line := "ssh-rsa " + pubSerialized + " user@host"
-	testAuthorizedKeys(t, []byte(line),
-		[]authResult{
-			{pub, nil, "user@host", "", true},
-		})
-}
-
-func TestAuth(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	authWithOptions := []string{
-		`# comments to ignore before any keys...`,
-		``,
-		`env="HOME=/home/root",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`,
-		`# comments to ignore, along with a blank line`,
-		``,
-		`env="HOME=/home/root2" ssh-rsa ` + pubSerialized + ` user2@host2`,
-		``,
-		`# more comments, plus a invalid entry`,
-		`ssh-rsa data-that-will-not-parse user@host3`,
-	}
-	for _, eol := range []string{"\n", "\r\n"} {
-		authOptions := strings.Join(authWithOptions, eol)
-		rest2 := strings.Join(authWithOptions[3:], eol)
-		rest3 := strings.Join(authWithOptions[6:], eol)
-		testAuthorizedKeys(t, []byte(authOptions), []authResult{
-			{pub, []string{`env="HOME=/home/root"`, "no-port-forwarding"}, "user@host", rest2, true},
-			{pub, []string{`env="HOME=/home/root2"`}, "user2@host2", rest3, true},
-			{nil, nil, "", "", false},
-		})
-	}
-}
-
-func TestAuthWithQuotedSpaceInEnv(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	authWithQuotedSpaceInEnv := []byte(`env="HOME=/home/root dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`)
-	testAuthorizedKeys(t, []byte(authWithQuotedSpaceInEnv), []authResult{
-		{pub, []string{`env="HOME=/home/root dir"`, "no-port-forwarding"}, "user@host", "", true},
-	})
-}
-
-func TestAuthWithQuotedCommaInEnv(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	authWithQuotedCommaInEnv := []byte(`env="HOME=/home/root,dir",no-port-forwarding ssh-rsa ` + pubSerialized + `   user@host`)
-	testAuthorizedKeys(t, []byte(authWithQuotedCommaInEnv), []authResult{
-		{pub, []string{`env="HOME=/home/root,dir"`, "no-port-forwarding"}, "user@host", "", true},
-	})
-}
-
-func TestAuthWithQuotedQuoteInEnv(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	authWithQuotedQuoteInEnv := []byte(`env="HOME=/home/\"root dir",no-port-forwarding` + "\t" + `ssh-rsa` + "\t" + pubSerialized + `   user@host`)
-	authWithDoubleQuotedQuote := []byte(`no-port-forwarding,env="HOME=/home/ \"root dir\"" ssh-rsa ` + pubSerialized + "\t" + `user@host`)
-	testAuthorizedKeys(t, []byte(authWithQuotedQuoteInEnv), []authResult{
-		{pub, []string{`env="HOME=/home/\"root dir"`, "no-port-forwarding"}, "user@host", "", true},
-	})
-
-	testAuthorizedKeys(t, []byte(authWithDoubleQuotedQuote), []authResult{
-		{pub, []string{"no-port-forwarding", `env="HOME=/home/ \"root dir\""`}, "user@host", "", true},
-	})
-}
-
-func TestAuthWithInvalidSpace(t *testing.T) {
-	_, pubSerialized := getTestKey()
-	authWithInvalidSpace := []byte(`env="HOME=/home/root dir", no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host
-#more to follow but still no valid keys`)
-	testAuthorizedKeys(t, []byte(authWithInvalidSpace), []authResult{
-		{nil, nil, "", "", false},
-	})
-}
-
-func TestAuthWithMissingQuote(t *testing.T) {
-	pub, pubSerialized := getTestKey()
-	authWithMissingQuote := []byte(`env="HOME=/home/root,no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host
-env="HOME=/home/root",shared-control ssh-rsa ` + pubSerialized + ` user@host`)
-
-	testAuthorizedKeys(t, []byte(authWithMissingQuote), []authResult{
-		{pub, []string{`env="HOME=/home/root"`, `shared-control`}, "user@host", "", true},
-	})
-}
-
-func TestInvalidEntry(t *testing.T) {
-	authInvalid := []byte(`ssh-rsa`)
-	_, _, _, _, err := ParseAuthorizedKey(authInvalid)
-	if err == nil {
-		t.Errorf("got valid entry for %q", authInvalid)
-	}
-}

+ 0 - 57
modules/crypto/ssh/mac.go

@@ -1,57 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-// Message authentication support
-
-import (
-	"crypto/hmac"
-	"crypto/sha1"
-	"crypto/sha256"
-	"hash"
-)
-
-type macMode struct {
-	keySize int
-	new     func(key []byte) hash.Hash
-}
-
-// truncatingMAC wraps around a hash.Hash and truncates the output digest to
-// a given size.
-type truncatingMAC struct {
-	length int
-	hmac   hash.Hash
-}
-
-func (t truncatingMAC) Write(data []byte) (int, error) {
-	return t.hmac.Write(data)
-}
-
-func (t truncatingMAC) Sum(in []byte) []byte {
-	out := t.hmac.Sum(in)
-	return out[:len(in)+t.length]
-}
-
-func (t truncatingMAC) Reset() {
-	t.hmac.Reset()
-}
-
-func (t truncatingMAC) Size() int {
-	return t.length
-}
-
-func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }
-
-var macModes = map[string]*macMode{
-	"hmac-sha2-256": {32, func(key []byte) hash.Hash {
-		return hmac.New(sha256.New, key)
-	}},
-	"hmac-sha1": {20, func(key []byte) hash.Hash {
-		return hmac.New(sha1.New, key)
-	}},
-	"hmac-sha1-96": {20, func(key []byte) hash.Hash {
-		return truncatingMAC{12, hmac.New(sha1.New, key)}
-	}},
-}

+ 0 - 110
modules/crypto/ssh/mempipe_test.go

@@ -1,110 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"io"
-	"sync"
-	"testing"
-)
-
-// An in-memory packetConn. It is safe to call Close and writePacket
-// from different goroutines.
-type memTransport struct {
-	eof     bool
-	pending [][]byte
-	write   *memTransport
-	sync.Mutex
-	*sync.Cond
-}
-
-func (t *memTransport) readPacket() ([]byte, error) {
-	t.Lock()
-	defer t.Unlock()
-	for {
-		if len(t.pending) > 0 {
-			r := t.pending[0]
-			t.pending = t.pending[1:]
-			return r, nil
-		}
-		if t.eof {
-			return nil, io.EOF
-		}
-		t.Cond.Wait()
-	}
-}
-
-func (t *memTransport) closeSelf() error {
-	t.Lock()
-	defer t.Unlock()
-	if t.eof {
-		return io.EOF
-	}
-	t.eof = true
-	t.Cond.Broadcast()
-	return nil
-}
-
-func (t *memTransport) Close() error {
-	err := t.write.closeSelf()
-	t.closeSelf()
-	return err
-}
-
-func (t *memTransport) writePacket(p []byte) error {
-	t.write.Lock()
-	defer t.write.Unlock()
-	if t.write.eof {
-		return io.EOF
-	}
-	c := make([]byte, len(p))
-	copy(c, p)
-	t.write.pending = append(t.write.pending, c)
-	t.write.Cond.Signal()
-	return nil
-}
-
-func memPipe() (a, b packetConn) {
-	t1 := memTransport{}
-	t2 := memTransport{}
-	t1.write = &t2
-	t2.write = &t1
-	t1.Cond = sync.NewCond(&t1.Mutex)
-	t2.Cond = sync.NewCond(&t2.Mutex)
-	return &t1, &t2
-}
-
-func TestMemPipe(t *testing.T) {
-	a, b := memPipe()
-	if err := a.writePacket([]byte{42}); err != nil {
-		t.Fatalf("writePacket: %v", err)
-	}
-	if err := a.Close(); err != nil {
-		t.Fatal("Close: ", err)
-	}
-	p, err := b.readPacket()
-	if err != nil {
-		t.Fatal("readPacket: ", err)
-	}
-	if len(p) != 1 || p[0] != 42 {
-		t.Fatalf("got %v, want {42}", p)
-	}
-	p, err = b.readPacket()
-	if err != io.EOF {
-		t.Fatalf("got %v, %v, want EOF", p, err)
-	}
-}
-
-func TestDoubleClose(t *testing.T) {
-	a, _ := memPipe()
-	err := a.Close()
-	if err != nil {
-		t.Errorf("Close: %v", err)
-	}
-	err = a.Close()
-	if err != io.EOF {
-		t.Errorf("expect EOF on double close.")
-	}
-}

+ 0 - 725
modules/crypto/ssh/messages.go

@@ -1,725 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"encoding/binary"
-	"errors"
-	"fmt"
-	"io"
-	"math/big"
-	"reflect"
-	"strconv"
-)
-
-// These are SSH message type numbers. They are scattered around several
-// documents but many were taken from [SSH-PARAMETERS].
-const (
-	msgIgnore        = 2
-	msgUnimplemented = 3
-	msgDebug         = 4
-	msgNewKeys       = 21
-
-	// Standard authentication messages
-	msgUserAuthSuccess = 52
-	msgUserAuthBanner  = 53
-)
-
-// SSH messages:
-//
-// These structures mirror the wire format of the corresponding SSH messages.
-// They are marshaled using reflection with the marshal and unmarshal functions
-// in this file. The only wrinkle is that a final member of type []byte with a
-// ssh tag of "rest" receives the remainder of a packet when unmarshaling.
-
-// See RFC 4253, section 11.1.
-const msgDisconnect = 1
-
-// disconnectMsg is the message that signals a disconnect. It is also
-// the error type returned from mux.Wait()
-type disconnectMsg struct {
-	Reason   uint32 `sshtype:"1"`
-	Message  string
-	Language string
-}
-
-func (d *disconnectMsg) Error() string {
-	return fmt.Sprintf("ssh: disconnect reason %d: %s", d.Reason, d.Message)
-}
-
-// See RFC 4253, section 7.1.
-const msgKexInit = 20
-
-type kexInitMsg struct {
-	Cookie                  [16]byte `sshtype:"20"`
-	KexAlgos                []string
-	ServerHostKeyAlgos      []string
-	CiphersClientServer     []string
-	CiphersServerClient     []string
-	MACsClientServer        []string
-	MACsServerClient        []string
-	CompressionClientServer []string
-	CompressionServerClient []string
-	LanguagesClientServer   []string
-	LanguagesServerClient   []string
-	FirstKexFollows         bool
-	Reserved                uint32
-}
-
-// See RFC 4253, section 8.
-
-// Diffie-Helman
-const msgKexDHInit = 30
-
-type kexDHInitMsg struct {
-	X *big.Int `sshtype:"30"`
-}
-
-const msgKexECDHInit = 30
-
-type kexECDHInitMsg struct {
-	ClientPubKey []byte `sshtype:"30"`
-}
-
-const msgKexECDHReply = 31
-
-type kexECDHReplyMsg struct {
-	HostKey         []byte `sshtype:"31"`
-	EphemeralPubKey []byte
-	Signature       []byte
-}
-
-const msgKexDHReply = 31
-
-type kexDHReplyMsg struct {
-	HostKey   []byte `sshtype:"31"`
-	Y         *big.Int
-	Signature []byte
-}
-
-// See RFC 4253, section 10.
-const msgServiceRequest = 5
-
-type serviceRequestMsg struct {
-	Service string `sshtype:"5"`
-}
-
-// See RFC 4253, section 10.
-const msgServiceAccept = 6
-
-type serviceAcceptMsg struct {
-	Service string `sshtype:"6"`
-}
-
-// See RFC 4252, section 5.
-const msgUserAuthRequest = 50
-
-type userAuthRequestMsg struct {
-	User    string `sshtype:"50"`
-	Service string
-	Method  string
-	Payload []byte `ssh:"rest"`
-}
-
-// See RFC 4252, section 5.1
-const msgUserAuthFailure = 51
-
-type userAuthFailureMsg struct {
-	Methods        []string `sshtype:"51"`
-	PartialSuccess bool
-}
-
-// See RFC 4256, section 3.2
-const msgUserAuthInfoRequest = 60
-const msgUserAuthInfoResponse = 61
-
-type userAuthInfoRequestMsg struct {
-	User               string `sshtype:"60"`
-	Instruction        string
-	DeprecatedLanguage string
-	NumPrompts         uint32
-	Prompts            []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.1.
-const msgChannelOpen = 90
-
-type channelOpenMsg struct {
-	ChanType         string `sshtype:"90"`
-	PeersId          uint32
-	PeersWindow      uint32
-	MaxPacketSize    uint32
-	TypeSpecificData []byte `ssh:"rest"`
-}
-
-const msgChannelExtendedData = 95
-const msgChannelData = 94
-
-// See RFC 4254, section 5.1.
-const msgChannelOpenConfirm = 91
-
-type channelOpenConfirmMsg struct {
-	PeersId          uint32 `sshtype:"91"`
-	MyId             uint32
-	MyWindow         uint32
-	MaxPacketSize    uint32
-	TypeSpecificData []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.1.
-const msgChannelOpenFailure = 92
-
-type channelOpenFailureMsg struct {
-	PeersId  uint32 `sshtype:"92"`
-	Reason   RejectionReason
-	Message  string
-	Language string
-}
-
-const msgChannelRequest = 98
-
-type channelRequestMsg struct {
-	PeersId             uint32 `sshtype:"98"`
-	Request             string
-	WantReply           bool
-	RequestSpecificData []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.4.
-const msgChannelSuccess = 99
-
-type channelRequestSuccessMsg struct {
-	PeersId uint32 `sshtype:"99"`
-}
-
-// See RFC 4254, section 5.4.
-const msgChannelFailure = 100
-
-type channelRequestFailureMsg struct {
-	PeersId uint32 `sshtype:"100"`
-}
-
-// See RFC 4254, section 5.3
-const msgChannelClose = 97
-
-type channelCloseMsg struct {
-	PeersId uint32 `sshtype:"97"`
-}
-
-// See RFC 4254, section 5.3
-const msgChannelEOF = 96
-
-type channelEOFMsg struct {
-	PeersId uint32 `sshtype:"96"`
-}
-
-// See RFC 4254, section 4
-const msgGlobalRequest = 80
-
-type globalRequestMsg struct {
-	Type      string `sshtype:"80"`
-	WantReply bool
-	Data      []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 4
-const msgRequestSuccess = 81
-
-type globalRequestSuccessMsg struct {
-	Data []byte `ssh:"rest" sshtype:"81"`
-}
-
-// See RFC 4254, section 4
-const msgRequestFailure = 82
-
-type globalRequestFailureMsg struct {
-	Data []byte `ssh:"rest" sshtype:"82"`
-}
-
-// See RFC 4254, section 5.2
-const msgChannelWindowAdjust = 93
-
-type windowAdjustMsg struct {
-	PeersId         uint32 `sshtype:"93"`
-	AdditionalBytes uint32
-}
-
-// See RFC 4252, section 7
-const msgUserAuthPubKeyOk = 60
-
-type userAuthPubKeyOkMsg struct {
-	Algo   string `sshtype:"60"`
-	PubKey []byte
-}
-
-// typeTag returns the type byte for the given type. The type should
-// be struct.
-func typeTag(structType reflect.Type) byte {
-	var tag byte
-	var tagStr string
-	tagStr = structType.Field(0).Tag.Get("sshtype")
-	i, err := strconv.Atoi(tagStr)
-	if err == nil {
-		tag = byte(i)
-	}
-	return tag
-}
-
-func fieldError(t reflect.Type, field int, problem string) error {
-	if problem != "" {
-		problem = ": " + problem
-	}
-	return fmt.Errorf("ssh: unmarshal error for field %s of type %s%s", t.Field(field).Name, t.Name(), problem)
-}
-
-var errShortRead = errors.New("ssh: short read")
-
-// Unmarshal parses data in SSH wire format into a structure. The out
-// argument should be a pointer to struct. If the first member of the
-// struct has the "sshtype" tag set to a number in decimal, the packet
-// must start that number.  In case of error, Unmarshal returns a
-// ParseError or UnexpectedMessageError.
-func Unmarshal(data []byte, out interface{}) error {
-	v := reflect.ValueOf(out).Elem()
-	structType := v.Type()
-	expectedType := typeTag(structType)
-	if len(data) == 0 {
-		return parseError(expectedType)
-	}
-	if expectedType > 0 {
-		if data[0] != expectedType {
-			return unexpectedMessageError(expectedType, data[0])
-		}
-		data = data[1:]
-	}
-
-	var ok bool
-	for i := 0; i < v.NumField(); i++ {
-		field := v.Field(i)
-		t := field.Type()
-		switch t.Kind() {
-		case reflect.Bool:
-			if len(data) < 1 {
-				return errShortRead
-			}
-			field.SetBool(data[0] != 0)
-			data = data[1:]
-		case reflect.Array:
-			if t.Elem().Kind() != reflect.Uint8 {
-				return fieldError(structType, i, "array of unsupported type")
-			}
-			if len(data) < t.Len() {
-				return errShortRead
-			}
-			for j, n := 0, t.Len(); j < n; j++ {
-				field.Index(j).Set(reflect.ValueOf(data[j]))
-			}
-			data = data[t.Len():]
-		case reflect.Uint64:
-			var u64 uint64
-			if u64, data, ok = parseUint64(data); !ok {
-				return errShortRead
-			}
-			field.SetUint(u64)
-		case reflect.Uint32:
-			var u32 uint32
-			if u32, data, ok = parseUint32(data); !ok {
-				return errShortRead
-			}
-			field.SetUint(uint64(u32))
-		case reflect.Uint8:
-			if len(data) < 1 {
-				return errShortRead
-			}
-			field.SetUint(uint64(data[0]))
-			data = data[1:]
-		case reflect.String:
-			var s []byte
-			if s, data, ok = parseString(data); !ok {
-				return fieldError(structType, i, "")
-			}
-			field.SetString(string(s))
-		case reflect.Slice:
-			switch t.Elem().Kind() {
-			case reflect.Uint8:
-				if structType.Field(i).Tag.Get("ssh") == "rest" {
-					field.Set(reflect.ValueOf(data))
-					data = nil
-				} else {
-					var s []byte
-					if s, data, ok = parseString(data); !ok {
-						return errShortRead
-					}
-					field.Set(reflect.ValueOf(s))
-				}
-			case reflect.String:
-				var nl []string
-				if nl, data, ok = parseNameList(data); !ok {
-					return errShortRead
-				}
-				field.Set(reflect.ValueOf(nl))
-			default:
-				return fieldError(structType, i, "slice of unsupported type")
-			}
-		case reflect.Ptr:
-			if t == bigIntType {
-				var n *big.Int
-				if n, data, ok = parseInt(data); !ok {
-					return errShortRead
-				}
-				field.Set(reflect.ValueOf(n))
-			} else {
-				return fieldError(structType, i, "pointer to unsupported type")
-			}
-		default:
-			return fieldError(structType, i, "unsupported type")
-		}
-	}
-
-	if len(data) != 0 {
-		return parseError(expectedType)
-	}
-
-	return nil
-}
-
-// Marshal serializes the message in msg to SSH wire format.  The msg
-// argument should be a struct or pointer to struct. If the first
-// member has the "sshtype" tag set to a number in decimal, that
-// number is prepended to the result. If the last of member has the
-// "ssh" tag set to "rest", its contents are appended to the output.
-func Marshal(msg interface{}) []byte {
-	out := make([]byte, 0, 64)
-	return marshalStruct(out, msg)
-}
-
-func marshalStruct(out []byte, msg interface{}) []byte {
-	v := reflect.Indirect(reflect.ValueOf(msg))
-	msgType := typeTag(v.Type())
-	if msgType > 0 {
-		out = append(out, msgType)
-	}
-
-	for i, n := 0, v.NumField(); i < n; i++ {
-		field := v.Field(i)
-		switch t := field.Type(); t.Kind() {
-		case reflect.Bool:
-			var v uint8
-			if field.Bool() {
-				v = 1
-			}
-			out = append(out, v)
-		case reflect.Array:
-			if t.Elem().Kind() != reflect.Uint8 {
-				panic(fmt.Sprintf("array of non-uint8 in field %d: %T", i, field.Interface()))
-			}
-			for j, l := 0, t.Len(); j < l; j++ {
-				out = append(out, uint8(field.Index(j).Uint()))
-			}
-		case reflect.Uint32:
-			out = appendU32(out, uint32(field.Uint()))
-		case reflect.Uint64:
-			out = appendU64(out, uint64(field.Uint()))
-		case reflect.Uint8:
-			out = append(out, uint8(field.Uint()))
-		case reflect.String:
-			s := field.String()
-			out = appendInt(out, len(s))
-			out = append(out, s...)
-		case reflect.Slice:
-			switch t.Elem().Kind() {
-			case reflect.Uint8:
-				if v.Type().Field(i).Tag.Get("ssh") != "rest" {
-					out = appendInt(out, field.Len())
-				}
-				out = append(out, field.Bytes()...)
-			case reflect.String:
-				offset := len(out)
-				out = appendU32(out, 0)
-				if n := field.Len(); n > 0 {
-					for j := 0; j < n; j++ {
-						f := field.Index(j)
-						if j != 0 {
-							out = append(out, ',')
-						}
-						out = append(out, f.String()...)
-					}
-					// overwrite length value
-					binary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4))
-				}
-			default:
-				panic(fmt.Sprintf("slice of unknown type in field %d: %T", i, field.Interface()))
-			}
-		case reflect.Ptr:
-			if t == bigIntType {
-				var n *big.Int
-				nValue := reflect.ValueOf(&n)
-				nValue.Elem().Set(field)
-				needed := intLength(n)
-				oldLength := len(out)
-
-				if cap(out)-len(out) < needed {
-					newOut := make([]byte, len(out), 2*(len(out)+needed))
-					copy(newOut, out)
-					out = newOut
-				}
-				out = out[:oldLength+needed]
-				marshalInt(out[oldLength:], n)
-			} else {
-				panic(fmt.Sprintf("pointer to unknown type in field %d: %T", i, field.Interface()))
-			}
-		}
-	}
-
-	return out
-}
-
-var bigOne = big.NewInt(1)
-
-func parseString(in []byte) (out, rest []byte, ok bool) {
-	if len(in) < 4 {
-		return
-	}
-	length := binary.BigEndian.Uint32(in)
-	in = in[4:]
-	if uint32(len(in)) < length {
-		return
-	}
-	out = in[:length]
-	rest = in[length:]
-	ok = true
-	return
-}
-
-var (
-	comma         = []byte{','}
-	emptyNameList = []string{}
-)
-
-func parseNameList(in []byte) (out []string, rest []byte, ok bool) {
-	contents, rest, ok := parseString(in)
-	if !ok {
-		return
-	}
-	if len(contents) == 0 {
-		out = emptyNameList
-		return
-	}
-	parts := bytes.Split(contents, comma)
-	out = make([]string, len(parts))
-	for i, part := range parts {
-		out[i] = string(part)
-	}
-	return
-}
-
-func parseInt(in []byte) (out *big.Int, rest []byte, ok bool) {
-	contents, rest, ok := parseString(in)
-	if !ok {
-		return
-	}
-	out = new(big.Int)
-
-	if len(contents) > 0 && contents[0]&0x80 == 0x80 {
-		// This is a negative number
-		notBytes := make([]byte, len(contents))
-		for i := range notBytes {
-			notBytes[i] = ^contents[i]
-		}
-		out.SetBytes(notBytes)
-		out.Add(out, bigOne)
-		out.Neg(out)
-	} else {
-		// Positive number
-		out.SetBytes(contents)
-	}
-	ok = true
-	return
-}
-
-func parseUint32(in []byte) (uint32, []byte, bool) {
-	if len(in) < 4 {
-		return 0, nil, false
-	}
-	return binary.BigEndian.Uint32(in), in[4:], true
-}
-
-func parseUint64(in []byte) (uint64, []byte, bool) {
-	if len(in) < 8 {
-		return 0, nil, false
-	}
-	return binary.BigEndian.Uint64(in), in[8:], true
-}
-
-func intLength(n *big.Int) int {
-	length := 4 /* length bytes */
-	if n.Sign() < 0 {
-		nMinus1 := new(big.Int).Neg(n)
-		nMinus1.Sub(nMinus1, bigOne)
-		bitLen := nMinus1.BitLen()
-		if bitLen%8 == 0 {
-			// The number will need 0xff padding
-			length++
-		}
-		length += (bitLen + 7) / 8
-	} else if n.Sign() == 0 {
-		// A zero is the zero length string
-	} else {
-		bitLen := n.BitLen()
-		if bitLen%8 == 0 {
-			// The number will need 0x00 padding
-			length++
-		}
-		length += (bitLen + 7) / 8
-	}
-
-	return length
-}
-
-func marshalUint32(to []byte, n uint32) []byte {
-	binary.BigEndian.PutUint32(to, n)
-	return to[4:]
-}
-
-func marshalUint64(to []byte, n uint64) []byte {
-	binary.BigEndian.PutUint64(to, n)
-	return to[8:]
-}
-
-func marshalInt(to []byte, n *big.Int) []byte {
-	lengthBytes := to
-	to = to[4:]
-	length := 0
-
-	if n.Sign() < 0 {
-		// A negative number has to be converted to two's-complement
-		// form. So we'll subtract 1 and invert. If the
-		// most-significant-bit isn't set then we'll need to pad the
-		// beginning with 0xff in order to keep the number negative.
-		nMinus1 := new(big.Int).Neg(n)
-		nMinus1.Sub(nMinus1, bigOne)
-		bytes := nMinus1.Bytes()
-		for i := range bytes {
-			bytes[i] ^= 0xff
-		}
-		if len(bytes) == 0 || bytes[0]&0x80 == 0 {
-			to[0] = 0xff
-			to = to[1:]
-			length++
-		}
-		nBytes := copy(to, bytes)
-		to = to[nBytes:]
-		length += nBytes
-	} else if n.Sign() == 0 {
-		// A zero is the zero length string
-	} else {
-		bytes := n.Bytes()
-		if len(bytes) > 0 && bytes[0]&0x80 != 0 {
-			// We'll have to pad this with a 0x00 in order to
-			// stop it looking like a negative number.
-			to[0] = 0
-			to = to[1:]
-			length++
-		}
-		nBytes := copy(to, bytes)
-		to = to[nBytes:]
-		length += nBytes
-	}
-
-	lengthBytes[0] = byte(length >> 24)
-	lengthBytes[1] = byte(length >> 16)
-	lengthBytes[2] = byte(length >> 8)
-	lengthBytes[3] = byte(length)
-	return to
-}
-
-func writeInt(w io.Writer, n *big.Int) {
-	length := intLength(n)
-	buf := make([]byte, length)
-	marshalInt(buf, n)
-	w.Write(buf)
-}
-
-func writeString(w io.Writer, s []byte) {
-	var lengthBytes [4]byte
-	lengthBytes[0] = byte(len(s) >> 24)
-	lengthBytes[1] = byte(len(s) >> 16)
-	lengthBytes[2] = byte(len(s) >> 8)
-	lengthBytes[3] = byte(len(s))
-	w.Write(lengthBytes[:])
-	w.Write(s)
-}
-
-func stringLength(n int) int {
-	return 4 + n
-}
-
-func marshalString(to []byte, s []byte) []byte {
-	to[0] = byte(len(s) >> 24)
-	to[1] = byte(len(s) >> 16)
-	to[2] = byte(len(s) >> 8)
-	to[3] = byte(len(s))
-	to = to[4:]
-	copy(to, s)
-	return to[len(s):]
-}
-
-var bigIntType = reflect.TypeOf((*big.Int)(nil))
-
-// Decode a packet into its corresponding message.
-func decode(packet []byte) (interface{}, error) {
-	var msg interface{}
-	switch packet[0] {
-	case msgDisconnect:
-		msg = new(disconnectMsg)
-	case msgServiceRequest:
-		msg = new(serviceRequestMsg)
-	case msgServiceAccept:
-		msg = new(serviceAcceptMsg)
-	case msgKexInit:
-		msg = new(kexInitMsg)
-	case msgKexDHInit:
-		msg = new(kexDHInitMsg)
-	case msgKexDHReply:
-		msg = new(kexDHReplyMsg)
-	case msgUserAuthRequest:
-		msg = new(userAuthRequestMsg)
-	case msgUserAuthFailure:
-		msg = new(userAuthFailureMsg)
-	case msgUserAuthPubKeyOk:
-		msg = new(userAuthPubKeyOkMsg)
-	case msgGlobalRequest:
-		msg = new(globalRequestMsg)
-	case msgRequestSuccess:
-		msg = new(globalRequestSuccessMsg)
-	case msgRequestFailure:
-		msg = new(globalRequestFailureMsg)
-	case msgChannelOpen:
-		msg = new(channelOpenMsg)
-	case msgChannelOpenConfirm:
-		msg = new(channelOpenConfirmMsg)
-	case msgChannelOpenFailure:
-		msg = new(channelOpenFailureMsg)
-	case msgChannelWindowAdjust:
-		msg = new(windowAdjustMsg)
-	case msgChannelEOF:
-		msg = new(channelEOFMsg)
-	case msgChannelClose:
-		msg = new(channelCloseMsg)
-	case msgChannelRequest:
-		msg = new(channelRequestMsg)
-	case msgChannelSuccess:
-		msg = new(channelRequestSuccessMsg)
-	case msgChannelFailure:
-		msg = new(channelRequestFailureMsg)
-	default:
-		return nil, unexpectedMessageError(0, packet[0])
-	}
-	if err := Unmarshal(packet, msg); err != nil {
-		return nil, err
-	}
-	return msg, nil
-}

+ 0 - 254
modules/crypto/ssh/messages_test.go

@@ -1,254 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"math/big"
-	"math/rand"
-	"reflect"
-	"testing"
-	"testing/quick"
-)
-
-var intLengthTests = []struct {
-	val, length int
-}{
-	{0, 4 + 0},
-	{1, 4 + 1},
-	{127, 4 + 1},
-	{128, 4 + 2},
-	{-1, 4 + 1},
-}
-
-func TestIntLength(t *testing.T) {
-	for _, test := range intLengthTests {
-		v := new(big.Int).SetInt64(int64(test.val))
-		length := intLength(v)
-		if length != test.length {
-			t.Errorf("For %d, got length %d but expected %d", test.val, length, test.length)
-		}
-	}
-}
-
-type msgAllTypes struct {
-	Bool    bool `sshtype:"21"`
-	Array   [16]byte
-	Uint64  uint64
-	Uint32  uint32
-	Uint8   uint8
-	String  string
-	Strings []string
-	Bytes   []byte
-	Int     *big.Int
-	Rest    []byte `ssh:"rest"`
-}
-
-func (t *msgAllTypes) Generate(rand *rand.Rand, size int) reflect.Value {
-	m := &msgAllTypes{}
-	m.Bool = rand.Intn(2) == 1
-	randomBytes(m.Array[:], rand)
-	m.Uint64 = uint64(rand.Int63n(1<<63 - 1))
-	m.Uint32 = uint32(rand.Intn((1 << 31) - 1))
-	m.Uint8 = uint8(rand.Intn(1 << 8))
-	m.String = string(m.Array[:])
-	m.Strings = randomNameList(rand)
-	m.Bytes = m.Array[:]
-	m.Int = randomInt(rand)
-	m.Rest = m.Array[:]
-	return reflect.ValueOf(m)
-}
-
-func TestMarshalUnmarshal(t *testing.T) {
-	rand := rand.New(rand.NewSource(0))
-	iface := &msgAllTypes{}
-	ty := reflect.ValueOf(iface).Type()
-
-	n := 100
-	if testing.Short() {
-		n = 5
-	}
-	for j := 0; j < n; j++ {
-		v, ok := quick.Value(ty, rand)
-		if !ok {
-			t.Errorf("failed to create value")
-			break
-		}
-
-		m1 := v.Elem().Interface()
-		m2 := iface
-
-		marshaled := Marshal(m1)
-		if err := Unmarshal(marshaled, m2); err != nil {
-			t.Errorf("Unmarshal %#v: %s", m1, err)
-			break
-		}
-
-		if !reflect.DeepEqual(v.Interface(), m2) {
-			t.Errorf("got: %#v\nwant:%#v\n%x", m2, m1, marshaled)
-			break
-		}
-	}
-}
-
-func TestUnmarshalEmptyPacket(t *testing.T) {
-	var b []byte
-	var m channelRequestSuccessMsg
-	if err := Unmarshal(b, &m); err == nil {
-		t.Fatalf("unmarshal of empty slice succeeded")
-	}
-}
-
-func TestUnmarshalUnexpectedPacket(t *testing.T) {
-	type S struct {
-		I uint32 `sshtype:"43"`
-		S string
-		B bool
-	}
-
-	s := S{11, "hello", true}
-	packet := Marshal(s)
-	packet[0] = 42
-	roundtrip := S{}
-	err := Unmarshal(packet, &roundtrip)
-	if err == nil {
-		t.Fatal("expected error, not nil")
-	}
-}
-
-func TestMarshalPtr(t *testing.T) {
-	s := struct {
-		S string
-	}{"hello"}
-
-	m1 := Marshal(s)
-	m2 := Marshal(&s)
-	if !bytes.Equal(m1, m2) {
-		t.Errorf("got %q, want %q for marshaled pointer", m2, m1)
-	}
-}
-
-func TestBareMarshalUnmarshal(t *testing.T) {
-	type S struct {
-		I uint32
-		S string
-		B bool
-	}
-
-	s := S{42, "hello", true}
-	packet := Marshal(s)
-	roundtrip := S{}
-	Unmarshal(packet, &roundtrip)
-
-	if !reflect.DeepEqual(s, roundtrip) {
-		t.Errorf("got %#v, want %#v", roundtrip, s)
-	}
-}
-
-func TestBareMarshal(t *testing.T) {
-	type S2 struct {
-		I uint32
-	}
-	s := S2{42}
-	packet := Marshal(s)
-	i, rest, ok := parseUint32(packet)
-	if len(rest) > 0 || !ok {
-		t.Errorf("parseInt(%q): parse error", packet)
-	}
-	if i != s.I {
-		t.Errorf("got %d, want %d", i, s.I)
-	}
-}
-
-func TestUnmarshalShortKexInitPacket(t *testing.T) {
-	// This used to panic.
-	// Issue 11348
-	packet := []byte{0x14, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff}
-	kim := &kexInitMsg{}
-	if err := Unmarshal(packet, kim); err == nil {
-		t.Error("truncated packet unmarshaled without error")
-	}
-}
-
-func randomBytes(out []byte, rand *rand.Rand) {
-	for i := 0; i < len(out); i++ {
-		out[i] = byte(rand.Int31())
-	}
-}
-
-func randomNameList(rand *rand.Rand) []string {
-	ret := make([]string, rand.Int31()&15)
-	for i := range ret {
-		s := make([]byte, 1+(rand.Int31()&15))
-		for j := range s {
-			s[j] = 'a' + uint8(rand.Int31()&15)
-		}
-		ret[i] = string(s)
-	}
-	return ret
-}
-
-func randomInt(rand *rand.Rand) *big.Int {
-	return new(big.Int).SetInt64(int64(int32(rand.Uint32())))
-}
-
-func (*kexInitMsg) Generate(rand *rand.Rand, size int) reflect.Value {
-	ki := &kexInitMsg{}
-	randomBytes(ki.Cookie[:], rand)
-	ki.KexAlgos = randomNameList(rand)
-	ki.ServerHostKeyAlgos = randomNameList(rand)
-	ki.CiphersClientServer = randomNameList(rand)
-	ki.CiphersServerClient = randomNameList(rand)
-	ki.MACsClientServer = randomNameList(rand)
-	ki.MACsServerClient = randomNameList(rand)
-	ki.CompressionClientServer = randomNameList(rand)
-	ki.CompressionServerClient = randomNameList(rand)
-	ki.LanguagesClientServer = randomNameList(rand)
-	ki.LanguagesServerClient = randomNameList(rand)
-	if rand.Int31()&1 == 1 {
-		ki.FirstKexFollows = true
-	}
-	return reflect.ValueOf(ki)
-}
-
-func (*kexDHInitMsg) Generate(rand *rand.Rand, size int) reflect.Value {
-	dhi := &kexDHInitMsg{}
-	dhi.X = randomInt(rand)
-	return reflect.ValueOf(dhi)
-}
-
-var (
-	_kexInitMsg   = new(kexInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface()
-	_kexDHInitMsg = new(kexDHInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface()
-
-	_kexInit   = Marshal(_kexInitMsg)
-	_kexDHInit = Marshal(_kexDHInitMsg)
-)
-
-func BenchmarkMarshalKexInitMsg(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		Marshal(_kexInitMsg)
-	}
-}
-
-func BenchmarkUnmarshalKexInitMsg(b *testing.B) {
-	m := new(kexInitMsg)
-	for i := 0; i < b.N; i++ {
-		Unmarshal(_kexInit, m)
-	}
-}
-
-func BenchmarkMarshalKexDHInitMsg(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		Marshal(_kexDHInitMsg)
-	}
-}
-
-func BenchmarkUnmarshalKexDHInitMsg(b *testing.B) {
-	m := new(kexDHInitMsg)
-	for i := 0; i < b.N; i++ {
-		Unmarshal(_kexDHInit, m)
-	}
-}

+ 0 - 356
modules/crypto/ssh/mux.go

@@ -1,356 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"encoding/binary"
-	"fmt"
-	"io"
-	"log"
-	"sync"
-	"sync/atomic"
-)
-
-// debugMux, if set, causes messages in the connection protocol to be
-// logged.
-const debugMux = false
-
-// chanList is a thread safe channel list.
-type chanList struct {
-	// protects concurrent access to chans
-	sync.Mutex
-
-	// chans are indexed by the local id of the channel, which the
-	// other side should send in the PeersId field.
-	chans []*channel
-
-	// This is a debugging aid: it offsets all IDs by this
-	// amount. This helps distinguish otherwise identical
-	// server/client muxes
-	offset uint32
-}
-
-// Assigns a channel ID to the given channel.
-func (c *chanList) add(ch *channel) uint32 {
-	c.Lock()
-	defer c.Unlock()
-	for i := range c.chans {
-		if c.chans[i] == nil {
-			c.chans[i] = ch
-			return uint32(i) + c.offset
-		}
-	}
-	c.chans = append(c.chans, ch)
-	return uint32(len(c.chans)-1) + c.offset
-}
-
-// getChan returns the channel for the given ID.
-func (c *chanList) getChan(id uint32) *channel {
-	id -= c.offset
-
-	c.Lock()
-	defer c.Unlock()
-	if id < uint32(len(c.chans)) {
-		return c.chans[id]
-	}
-	return nil
-}
-
-func (c *chanList) remove(id uint32) {
-	id -= c.offset
-	c.Lock()
-	if id < uint32(len(c.chans)) {
-		c.chans[id] = nil
-	}
-	c.Unlock()
-}
-
-// dropAll forgets all channels it knows, returning them in a slice.
-func (c *chanList) dropAll() []*channel {
-	c.Lock()
-	defer c.Unlock()
-	var r []*channel
-
-	for _, ch := range c.chans {
-		if ch == nil {
-			continue
-		}
-		r = append(r, ch)
-	}
-	c.chans = nil
-	return r
-}
-
-// mux represents the state for the SSH connection protocol, which
-// multiplexes many channels onto a single packet transport.
-type mux struct {
-	conn     packetConn
-	chanList chanList
-
-	incomingChannels chan NewChannel
-
-	globalSentMu     sync.Mutex
-	globalResponses  chan interface{}
-	incomingRequests chan *Request
-
-	errCond *sync.Cond
-	err     error
-}
-
-// When debugging, each new chanList instantiation has a different
-// offset.
-var globalOff uint32
-
-func (m *mux) Wait() error {
-	m.errCond.L.Lock()
-	defer m.errCond.L.Unlock()
-	for m.err == nil {
-		m.errCond.Wait()
-	}
-	return m.err
-}
-
-// newMux returns a mux that runs over the given connection.
-func newMux(p packetConn) *mux {
-	m := &mux{
-		conn:             p,
-		incomingChannels: make(chan NewChannel, 16),
-		globalResponses:  make(chan interface{}, 1),
-		incomingRequests: make(chan *Request, 16),
-		errCond:          newCond(),
-	}
-	if debugMux {
-		m.chanList.offset = atomic.AddUint32(&globalOff, 1)
-	}
-
-	go m.loop()
-	return m
-}
-
-func (m *mux) sendMessage(msg interface{}) error {
-	p := Marshal(msg)
-	return m.conn.writePacket(p)
-}
-
-func (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) {
-	if wantReply {
-		m.globalSentMu.Lock()
-		defer m.globalSentMu.Unlock()
-	}
-
-	if err := m.sendMessage(globalRequestMsg{
-		Type:      name,
-		WantReply: wantReply,
-		Data:      payload,
-	}); err != nil {
-		return false, nil, err
-	}
-
-	if !wantReply {
-		return false, nil, nil
-	}
-
-	msg, ok := <-m.globalResponses
-	if !ok {
-		return false, nil, io.EOF
-	}
-	switch msg := msg.(type) {
-	case *globalRequestFailureMsg:
-		return false, msg.Data, nil
-	case *globalRequestSuccessMsg:
-		return true, msg.Data, nil
-	default:
-		return false, nil, fmt.Errorf("ssh: unexpected response to request: %#v", msg)
-	}
-}
-
-// ackRequest must be called after processing a global request that
-// has WantReply set.
-func (m *mux) ackRequest(ok bool, data []byte) error {
-	if ok {
-		return m.sendMessage(globalRequestSuccessMsg{Data: data})
-	}
-	return m.sendMessage(globalRequestFailureMsg{Data: data})
-}
-
-// TODO(hanwen): Disconnect is a transport layer message. We should
-// probably send and receive Disconnect somewhere in the transport
-// code.
-
-// Disconnect sends a disconnect message.
-func (m *mux) Disconnect(reason uint32, message string) error {
-	return m.sendMessage(disconnectMsg{
-		Reason:  reason,
-		Message: message,
-	})
-}
-
-func (m *mux) Close() error {
-	return m.conn.Close()
-}
-
-// loop runs the connection machine. It will process packets until an
-// error is encountered. To synchronize on loop exit, use mux.Wait.
-func (m *mux) loop() {
-	var err error
-	for err == nil {
-		err = m.onePacket()
-	}
-
-	for _, ch := range m.chanList.dropAll() {
-		ch.close()
-	}
-
-	close(m.incomingChannels)
-	close(m.incomingRequests)
-	close(m.globalResponses)
-
-	m.conn.Close()
-
-	m.errCond.L.Lock()
-	m.err = err
-	m.errCond.Broadcast()
-	m.errCond.L.Unlock()
-
-	if debugMux {
-		log.Println("loop exit", err)
-	}
-}
-
-// onePacket reads and processes one packet.
-func (m *mux) onePacket() error {
-	packet, err := m.conn.readPacket()
-	if err != nil {
-		return err
-	}
-
-	if debugMux {
-		if packet[0] == msgChannelData || packet[0] == msgChannelExtendedData {
-			log.Printf("decoding(%d): data packet - %d bytes", m.chanList.offset, len(packet))
-		} else {
-			p, _ := decode(packet)
-			log.Printf("decoding(%d): %d %#v - %d bytes", m.chanList.offset, packet[0], p, len(packet))
-		}
-	}
-
-	switch packet[0] {
-	case msgNewKeys:
-		// Ignore notification of key change.
-		return nil
-	case msgDisconnect:
-		return m.handleDisconnect(packet)
-	case msgChannelOpen:
-		return m.handleChannelOpen(packet)
-	case msgGlobalRequest, msgRequestSuccess, msgRequestFailure:
-		return m.handleGlobalPacket(packet)
-	}
-
-	// assume a channel packet.
-	if len(packet) < 5 {
-		return parseError(packet[0])
-	}
-	id := binary.BigEndian.Uint32(packet[1:])
-	ch := m.chanList.getChan(id)
-	if ch == nil {
-		return fmt.Errorf("ssh: invalid channel %d", id)
-	}
-
-	return ch.handlePacket(packet)
-}
-
-func (m *mux) handleDisconnect(packet []byte) error {
-	var d disconnectMsg
-	if err := Unmarshal(packet, &d); err != nil {
-		return err
-	}
-
-	if debugMux {
-		log.Printf("caught disconnect: %v", d)
-	}
-	return &d
-}
-
-func (m *mux) handleGlobalPacket(packet []byte) error {
-	msg, err := decode(packet)
-	if err != nil {
-		return err
-	}
-
-	switch msg := msg.(type) {
-	case *globalRequestMsg:
-		m.incomingRequests <- &Request{
-			Type:      msg.Type,
-			WantReply: msg.WantReply,
-			Payload:   msg.Data,
-			mux:       m,
-		}
-	case *globalRequestSuccessMsg, *globalRequestFailureMsg:
-		m.globalResponses <- msg
-	default:
-		panic(fmt.Sprintf("not a global message %#v", msg))
-	}
-
-	return nil
-}
-
-// handleChannelOpen schedules a channel to be Accept()ed.
-func (m *mux) handleChannelOpen(packet []byte) error {
-	var msg channelOpenMsg
-	if err := Unmarshal(packet, &msg); err != nil {
-		return err
-	}
-
-	if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {
-		failMsg := channelOpenFailureMsg{
-			PeersId:  msg.PeersId,
-			Reason:   ConnectionFailed,
-			Message:  "invalid request",
-			Language: "en_US.UTF-8",
-		}
-		return m.sendMessage(failMsg)
-	}
-
-	c := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData)
-	c.remoteId = msg.PeersId
-	c.maxRemotePayload = msg.MaxPacketSize
-	c.remoteWin.add(msg.PeersWindow)
-	m.incomingChannels <- c
-	return nil
-}
-
-func (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) {
-	ch, err := m.openChannel(chanType, extra)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	return ch, ch.incomingRequests, nil
-}
-
-func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {
-	ch := m.newChannel(chanType, channelOutbound, extra)
-
-	ch.maxIncomingPayload = channelMaxPacket
-
-	open := channelOpenMsg{
-		ChanType:         chanType,
-		PeersWindow:      ch.myWindow,
-		MaxPacketSize:    ch.maxIncomingPayload,
-		TypeSpecificData: extra,
-		PeersId:          ch.localId,
-	}
-	if err := m.sendMessage(open); err != nil {
-		return nil, err
-	}
-
-	switch msg := (<-ch.msg).(type) {
-	case *channelOpenConfirmMsg:
-		return ch, nil
-	case *channelOpenFailureMsg:
-		return nil, &OpenChannelError{msg.Reason, msg.Message}
-	default:
-		return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg)
-	}
-}

+ 0 - 525
modules/crypto/ssh/mux_test.go

@@ -1,525 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"io"
-	"io/ioutil"
-	"sync"
-	"testing"
-)
-
-func muxPair() (*mux, *mux) {
-	a, b := memPipe()
-
-	s := newMux(a)
-	c := newMux(b)
-
-	return s, c
-}
-
-// Returns both ends of a channel, and the mux for the the 2nd
-// channel.
-func channelPair(t *testing.T) (*channel, *channel, *mux) {
-	c, s := muxPair()
-
-	res := make(chan *channel, 1)
-	go func() {
-		newCh, ok := <-s.incomingChannels
-		if !ok {
-			t.Fatalf("No incoming channel")
-		}
-		if newCh.ChannelType() != "chan" {
-			t.Fatalf("got type %q want chan", newCh.ChannelType())
-		}
-		ch, _, err := newCh.Accept()
-		if err != nil {
-			t.Fatalf("Accept %v", err)
-		}
-		res <- ch.(*channel)
-	}()
-
-	ch, err := c.openChannel("chan", nil)
-	if err != nil {
-		t.Fatalf("OpenChannel: %v", err)
-	}
-
-	return <-res, ch, c
-}
-
-// Test that stderr and stdout can be addressed from different
-// goroutines. This is intended for use with the race detector.
-func TestMuxChannelExtendedThreadSafety(t *testing.T) {
-	writer, reader, mux := channelPair(t)
-	defer writer.Close()
-	defer reader.Close()
-	defer mux.Close()
-
-	var wr, rd sync.WaitGroup
-	magic := "hello world"
-
-	wr.Add(2)
-	go func() {
-		io.WriteString(writer, magic)
-		wr.Done()
-	}()
-	go func() {
-		io.WriteString(writer.Stderr(), magic)
-		wr.Done()
-	}()
-
-	rd.Add(2)
-	go func() {
-		c, err := ioutil.ReadAll(reader)
-		if string(c) != magic {
-			t.Fatalf("stdout read got %q, want %q (error %s)", c, magic, err)
-		}
-		rd.Done()
-	}()
-	go func() {
-		c, err := ioutil.ReadAll(reader.Stderr())
-		if string(c) != magic {
-			t.Fatalf("stderr read got %q, want %q (error %s)", c, magic, err)
-		}
-		rd.Done()
-	}()
-
-	wr.Wait()
-	writer.CloseWrite()
-	rd.Wait()
-}
-
-func TestMuxReadWrite(t *testing.T) {
-	s, c, mux := channelPair(t)
-	defer s.Close()
-	defer c.Close()
-	defer mux.Close()
-
-	magic := "hello world"
-	magicExt := "hello stderr"
-	go func() {
-		_, err := s.Write([]byte(magic))
-		if err != nil {
-			t.Fatalf("Write: %v", err)
-		}
-		_, err = s.Extended(1).Write([]byte(magicExt))
-		if err != nil {
-			t.Fatalf("Write: %v", err)
-		}
-		err = s.Close()
-		if err != nil {
-			t.Fatalf("Close: %v", err)
-		}
-	}()
-
-	var buf [1024]byte
-	n, err := c.Read(buf[:])
-	if err != nil {
-		t.Fatalf("server Read: %v", err)
-	}
-	got := string(buf[:n])
-	if got != magic {
-		t.Fatalf("server: got %q want %q", got, magic)
-	}
-
-	n, err = c.Extended(1).Read(buf[:])
-	if err != nil {
-		t.Fatalf("server Read: %v", err)
-	}
-
-	got = string(buf[:n])
-	if got != magicExt {
-		t.Fatalf("server: got %q want %q", got, magic)
-	}
-}
-
-func TestMuxChannelOverflow(t *testing.T) {
-	reader, writer, mux := channelPair(t)
-	defer reader.Close()
-	defer writer.Close()
-	defer mux.Close()
-
-	wDone := make(chan int, 1)
-	go func() {
-		if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil {
-			t.Errorf("could not fill window: %v", err)
-		}
-		writer.Write(make([]byte, 1))
-		wDone <- 1
-	}()
-	writer.remoteWin.waitWriterBlocked()
-
-	// Send 1 byte.
-	packet := make([]byte, 1+4+4+1)
-	packet[0] = msgChannelData
-	marshalUint32(packet[1:], writer.remoteId)
-	marshalUint32(packet[5:], uint32(1))
-	packet[9] = 42
-
-	if err := writer.mux.conn.writePacket(packet); err != nil {
-		t.Errorf("could not send packet")
-	}
-	if _, err := reader.SendRequest("hello", true, nil); err == nil {
-		t.Errorf("SendRequest succeeded.")
-	}
-	<-wDone
-}
-
-func TestMuxChannelCloseWriteUnblock(t *testing.T) {
-	reader, writer, mux := channelPair(t)
-	defer reader.Close()
-	defer writer.Close()
-	defer mux.Close()
-
-	wDone := make(chan int, 1)
-	go func() {
-		if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil {
-			t.Errorf("could not fill window: %v", err)
-		}
-		if _, err := writer.Write(make([]byte, 1)); err != io.EOF {
-			t.Errorf("got %v, want EOF for unblock write", err)
-		}
-		wDone <- 1
-	}()
-
-	writer.remoteWin.waitWriterBlocked()
-	reader.Close()
-	<-wDone
-}
-
-func TestMuxConnectionCloseWriteUnblock(t *testing.T) {
-	reader, writer, mux := channelPair(t)
-	defer reader.Close()
-	defer writer.Close()
-	defer mux.Close()
-
-	wDone := make(chan int, 1)
-	go func() {
-		if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil {
-			t.Errorf("could not fill window: %v", err)
-		}
-		if _, err := writer.Write(make([]byte, 1)); err != io.EOF {
-			t.Errorf("got %v, want EOF for unblock write", err)
-		}
-		wDone <- 1
-	}()
-
-	writer.remoteWin.waitWriterBlocked()
-	mux.Close()
-	<-wDone
-}
-
-func TestMuxReject(t *testing.T) {
-	client, server := muxPair()
-	defer server.Close()
-	defer client.Close()
-
-	go func() {
-		ch, ok := <-server.incomingChannels
-		if !ok {
-			t.Fatalf("Accept")
-		}
-		if ch.ChannelType() != "ch" || string(ch.ExtraData()) != "extra" {
-			t.Fatalf("unexpected channel: %q, %q", ch.ChannelType(), ch.ExtraData())
-		}
-		ch.Reject(RejectionReason(42), "message")
-	}()
-
-	ch, err := client.openChannel("ch", []byte("extra"))
-	if ch != nil {
-		t.Fatal("openChannel not rejected")
-	}
-
-	ocf, ok := err.(*OpenChannelError)
-	if !ok {
-		t.Errorf("got %#v want *OpenChannelError", err)
-	} else if ocf.Reason != 42 || ocf.Message != "message" {
-		t.Errorf("got %#v, want {Reason: 42, Message: %q}", ocf, "message")
-	}
-
-	want := "ssh: rejected: unknown reason 42 (message)"
-	if err.Error() != want {
-		t.Errorf("got %q, want %q", err.Error(), want)
-	}
-}
-
-func TestMuxChannelRequest(t *testing.T) {
-	client, server, mux := channelPair(t)
-	defer server.Close()
-	defer client.Close()
-	defer mux.Close()
-
-	var received int
-	var wg sync.WaitGroup
-	wg.Add(1)
-	go func() {
-		for r := range server.incomingRequests {
-			received++
-			r.Reply(r.Type == "yes", nil)
-		}
-		wg.Done()
-	}()
-	_, err := client.SendRequest("yes", false, nil)
-	if err != nil {
-		t.Fatalf("SendRequest: %v", err)
-	}
-	ok, err := client.SendRequest("yes", true, nil)
-	if err != nil {
-		t.Fatalf("SendRequest: %v", err)
-	}
-
-	if !ok {
-		t.Errorf("SendRequest(yes): %v", ok)
-
-	}
-
-	ok, err = client.SendRequest("no", true, nil)
-	if err != nil {
-		t.Fatalf("SendRequest: %v", err)
-	}
-	if ok {
-		t.Errorf("SendRequest(no): %v", ok)
-
-	}
-
-	client.Close()
-	wg.Wait()
-
-	if received != 3 {
-		t.Errorf("got %d requests, want %d", received, 3)
-	}
-}
-
-func TestMuxGlobalRequest(t *testing.T) {
-	clientMux, serverMux := muxPair()
-	defer serverMux.Close()
-	defer clientMux.Close()
-
-	var seen bool
-	go func() {
-		for r := range serverMux.incomingRequests {
-			seen = seen || r.Type == "peek"
-			if r.WantReply {
-				err := r.Reply(r.Type == "yes",
-					append([]byte(r.Type), r.Payload...))
-				if err != nil {
-					t.Errorf("AckRequest: %v", err)
-				}
-			}
-		}
-	}()
-
-	_, _, err := clientMux.SendRequest("peek", false, nil)
-	if err != nil {
-		t.Errorf("SendRequest: %v", err)
-	}
-
-	ok, data, err := clientMux.SendRequest("yes", true, []byte("a"))
-	if !ok || string(data) != "yesa" || err != nil {
-		t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v",
-			ok, data, err)
-	}
-	if ok, data, err := clientMux.SendRequest("yes", true, []byte("a")); !ok || string(data) != "yesa" || err != nil {
-		t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v",
-			ok, data, err)
-	}
-
-	if ok, data, err := clientMux.SendRequest("no", true, []byte("a")); ok || string(data) != "noa" || err != nil {
-		t.Errorf("SendRequest(\"no\", true, \"a\"): %v %v %v",
-			ok, data, err)
-	}
-
-	clientMux.Disconnect(0, "")
-	if !seen {
-		t.Errorf("never saw 'peek' request")
-	}
-}
-
-func TestMuxGlobalRequestUnblock(t *testing.T) {
-	clientMux, serverMux := muxPair()
-	defer serverMux.Close()
-	defer clientMux.Close()
-
-	result := make(chan error, 1)
-	go func() {
-		_, _, err := clientMux.SendRequest("hello", true, nil)
-		result <- err
-	}()
-
-	<-serverMux.incomingRequests
-	serverMux.conn.Close()
-	err := <-result
-
-	if err != io.EOF {
-		t.Errorf("want EOF, got %v", io.EOF)
-	}
-}
-
-func TestMuxChannelRequestUnblock(t *testing.T) {
-	a, b, connB := channelPair(t)
-	defer a.Close()
-	defer b.Close()
-	defer connB.Close()
-
-	result := make(chan error, 1)
-	go func() {
-		_, err := a.SendRequest("hello", true, nil)
-		result <- err
-	}()
-
-	<-b.incomingRequests
-	connB.conn.Close()
-	err := <-result
-
-	if err != io.EOF {
-		t.Errorf("want EOF, got %v", err)
-	}
-}
-
-func TestMuxDisconnect(t *testing.T) {
-	a, b := muxPair()
-	defer a.Close()
-	defer b.Close()
-
-	go func() {
-		for r := range b.incomingRequests {
-			r.Reply(true, nil)
-		}
-	}()
-
-	a.Disconnect(42, "whatever")
-	ok, _, err := a.SendRequest("hello", true, nil)
-	if ok || err == nil {
-		t.Errorf("got reply after disconnecting")
-	}
-	err = b.Wait()
-	if d, ok := err.(*disconnectMsg); !ok || d.Reason != 42 {
-		t.Errorf("got %#v, want disconnectMsg{Reason:42}", err)
-	}
-}
-
-func TestMuxCloseChannel(t *testing.T) {
-	r, w, mux := channelPair(t)
-	defer mux.Close()
-	defer r.Close()
-	defer w.Close()
-
-	result := make(chan error, 1)
-	go func() {
-		var b [1024]byte
-		_, err := r.Read(b[:])
-		result <- err
-	}()
-	if err := w.Close(); err != nil {
-		t.Errorf("w.Close: %v", err)
-	}
-
-	if _, err := w.Write([]byte("hello")); err != io.EOF {
-		t.Errorf("got err %v, want io.EOF after Close", err)
-	}
-
-	if err := <-result; err != io.EOF {
-		t.Errorf("got %v (%T), want io.EOF", err, err)
-	}
-}
-
-func TestMuxCloseWriteChannel(t *testing.T) {
-	r, w, mux := channelPair(t)
-	defer mux.Close()
-
-	result := make(chan error, 1)
-	go func() {
-		var b [1024]byte
-		_, err := r.Read(b[:])
-		result <- err
-	}()
-	if err := w.CloseWrite(); err != nil {
-		t.Errorf("w.CloseWrite: %v", err)
-	}
-
-	if _, err := w.Write([]byte("hello")); err != io.EOF {
-		t.Errorf("got err %v, want io.EOF after CloseWrite", err)
-	}
-
-	if err := <-result; err != io.EOF {
-		t.Errorf("got %v (%T), want io.EOF", err, err)
-	}
-}
-
-func TestMuxInvalidRecord(t *testing.T) {
-	a, b := muxPair()
-	defer a.Close()
-	defer b.Close()
-
-	packet := make([]byte, 1+4+4+1)
-	packet[0] = msgChannelData
-	marshalUint32(packet[1:], 29348723 /* invalid channel id */)
-	marshalUint32(packet[5:], 1)
-	packet[9] = 42
-
-	a.conn.writePacket(packet)
-	go a.SendRequest("hello", false, nil)
-	// 'a' wrote an invalid packet, so 'b' has exited.
-	req, ok := <-b.incomingRequests
-	if ok {
-		t.Errorf("got request %#v after receiving invalid packet", req)
-	}
-}
-
-func TestZeroWindowAdjust(t *testing.T) {
-	a, b, mux := channelPair(t)
-	defer a.Close()
-	defer b.Close()
-	defer mux.Close()
-
-	go func() {
-		io.WriteString(a, "hello")
-		// bogus adjust.
-		a.sendMessage(windowAdjustMsg{})
-		io.WriteString(a, "world")
-		a.Close()
-	}()
-
-	want := "helloworld"
-	c, _ := ioutil.ReadAll(b)
-	if string(c) != want {
-		t.Errorf("got %q want %q", c, want)
-	}
-}
-
-func TestMuxMaxPacketSize(t *testing.T) {
-	a, b, mux := channelPair(t)
-	defer a.Close()
-	defer b.Close()
-	defer mux.Close()
-
-	large := make([]byte, a.maxRemotePayload+1)
-	packet := make([]byte, 1+4+4+1+len(large))
-	packet[0] = msgChannelData
-	marshalUint32(packet[1:], a.remoteId)
-	marshalUint32(packet[5:], uint32(len(large)))
-	packet[9] = 42
-
-	if err := a.mux.conn.writePacket(packet); err != nil {
-		t.Errorf("could not send packet")
-	}
-
-	go a.SendRequest("hello", false, nil)
-
-	_, ok := <-b.incomingRequests
-	if ok {
-		t.Errorf("connection still alive after receiving large packet.")
-	}
-}
-
-// Don't ship code with debug=true.
-func TestDebug(t *testing.T) {
-	if debugMux {
-		t.Error("mux debug switched on")
-	}
-	if debugHandshake {
-		t.Error("handshake debug switched on")
-	}
-}

+ 0 - 493
modules/crypto/ssh/server.go

@@ -1,493 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"io"
-	"net"
-)
-
-// The Permissions type holds fine-grained permissions that are
-// specific to a user or a specific authentication method for a
-// user. Permissions, except for "source-address", must be enforced in
-// the server application layer, after successful authentication. The
-// Permissions are passed on in ServerConn so a server implementation
-// can honor them.
-type Permissions struct {
-	// Critical options restrict default permissions. Common
-	// restrictions are "source-address" and "force-command". If
-	// the server cannot enforce the restriction, or does not
-	// recognize it, the user should not authenticate.
-	CriticalOptions map[string]string
-
-	// Extensions are extra functionality that the server may
-	// offer on authenticated connections. Common extensions are
-	// "permit-agent-forwarding", "permit-X11-forwarding". Lack of
-	// support for an extension does not preclude authenticating a
-	// user.
-	Extensions map[string]string
-}
-
-// ServerConfig holds server specific configuration data.
-type ServerConfig struct {
-	// Config contains configuration shared between client and server.
-	Config
-
-	hostKeys []Signer
-
-	// NoClientAuth is true if clients are allowed to connect without
-	// authenticating.
-	NoClientAuth bool
-
-	// PasswordCallback, if non-nil, is called when a user
-	// attempts to authenticate using a password.
-	PasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error)
-
-	// PublicKeyCallback, if non-nil, is called when a client attempts public
-	// key authentication. It must return true if the given public key is
-	// valid for the given user. For example, see CertChecker.Authenticate.
-	PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)
-
-	// KeyboardInteractiveCallback, if non-nil, is called when
-	// keyboard-interactive authentication is selected (RFC
-	// 4256). The client object's Challenge function should be
-	// used to query the user. The callback may offer multiple
-	// Challenge rounds. To avoid information leaks, the client
-	// should be presented a challenge even if the user is
-	// unknown.
-	KeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error)
-
-	// AuthLogCallback, if non-nil, is called to log all authentication
-	// attempts.
-	AuthLogCallback func(conn ConnMetadata, method string, err error)
-
-	// ServerVersion is the version identification string to
-	// announce in the public handshake.
-	// If empty, a reasonable default is used.
-	ServerVersion string
-}
-
-// AddHostKey adds a private key as a host key. If an existing host
-// key exists with the same algorithm, it is overwritten. Each server
-// config must have at least one host key.
-func (s *ServerConfig) AddHostKey(key Signer) {
-	for i, k := range s.hostKeys {
-		if k.PublicKey().Type() == key.PublicKey().Type() {
-			s.hostKeys[i] = key
-			return
-		}
-	}
-
-	s.hostKeys = append(s.hostKeys, key)
-}
-
-// cachedPubKey contains the results of querying whether a public key is
-// acceptable for a user.
-type cachedPubKey struct {
-	user       string
-	pubKeyData []byte
-	result     error
-	perms      *Permissions
-}
-
-const maxCachedPubKeys = 16
-
-// pubKeyCache caches tests for public keys.  Since SSH clients
-// will query whether a public key is acceptable before attempting to
-// authenticate with it, we end up with duplicate queries for public
-// key validity.  The cache only applies to a single ServerConn.
-type pubKeyCache struct {
-	keys []cachedPubKey
-}
-
-// get returns the result for a given user/algo/key tuple.
-func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {
-	for _, k := range c.keys {
-		if k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) {
-			return k, true
-		}
-	}
-	return cachedPubKey{}, false
-}
-
-// add adds the given tuple to the cache.
-func (c *pubKeyCache) add(candidate cachedPubKey) {
-	if len(c.keys) < maxCachedPubKeys {
-		c.keys = append(c.keys, candidate)
-	}
-}
-
-// ServerConn is an authenticated SSH connection, as seen from the
-// server
-type ServerConn struct {
-	Conn
-
-	// If the succeeding authentication callback returned a
-	// non-nil Permissions pointer, it is stored here.
-	Permissions *Permissions
-}
-
-// NewServerConn starts a new SSH server with c as the underlying
-// transport.  It starts with a handshake and, if the handshake is
-// unsuccessful, it closes the connection and returns an error.  The
-// Request and NewChannel channels must be serviced, or the connection
-// will hang.
-func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) {
-	fullConf := *config
-	fullConf.SetDefaults()
-	s := &connection{
-		sshConn: sshConn{conn: c},
-	}
-	perms, err := s.serverHandshake(&fullConf)
-	if err != nil {
-		c.Close()
-		return nil, nil, nil, err
-	}
-	return &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil
-}
-
-// signAndMarshal signs the data with the appropriate algorithm,
-// and serializes the result in SSH wire format.
-func signAndMarshal(k Signer, rand io.Reader, data []byte) ([]byte, error) {
-	sig, err := k.Sign(rand, data)
-	if err != nil {
-		return nil, err
-	}
-
-	return Marshal(sig), nil
-}
-
-// handshake performs key exchange and user authentication.
-func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) {
-	if len(config.hostKeys) == 0 {
-		return nil, errors.New("ssh: server has no host keys")
-	}
-
-	if !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil && config.KeyboardInteractiveCallback == nil {
-		return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false")
-	}
-
-	if config.ServerVersion != "" {
-		s.serverVersion = []byte(config.ServerVersion)
-	} else {
-		s.serverVersion = []byte(packageVersion)
-	}
-	var err error
-	s.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion)
-	if err != nil {
-		return nil, err
-	}
-
-	tr := newTransport(s.sshConn.conn, config.Rand, false /* not client */)
-	s.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config)
-
-	if err := s.transport.requestKeyChange(); err != nil {
-		return nil, err
-	}
-
-	if packet, err := s.transport.readPacket(); err != nil {
-		return nil, err
-	} else if packet[0] != msgNewKeys {
-		return nil, unexpectedMessageError(msgNewKeys, packet[0])
-	}
-
-	// We just did the key change, so the session ID is established.
-	s.sessionID = s.transport.getSessionID()
-
-	var packet []byte
-	if packet, err = s.transport.readPacket(); err != nil {
-		return nil, err
-	}
-
-	var serviceRequest serviceRequestMsg
-	if err = Unmarshal(packet, &serviceRequest); err != nil {
-		return nil, err
-	}
-	if serviceRequest.Service != serviceUserAuth {
-		return nil, errors.New("ssh: requested service '" + serviceRequest.Service + "' before authenticating")
-	}
-	serviceAccept := serviceAcceptMsg{
-		Service: serviceUserAuth,
-	}
-	if err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil {
-		return nil, err
-	}
-
-	perms, err := s.serverAuthenticate(config)
-	if err != nil {
-		return nil, err
-	}
-	s.mux = newMux(s.transport)
-	return perms, err
-}
-
-func isAcceptableAlgo(algo string) bool {
-	switch algo {
-	case KeyAlgoRSA, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,
-		CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01:
-		return true
-	}
-	return false
-}
-
-func checkSourceAddress(addr net.Addr, sourceAddr string) error {
-	if addr == nil {
-		return errors.New("ssh: no address known for client, but source-address match required")
-	}
-
-	tcpAddr, ok := addr.(*net.TCPAddr)
-	if !ok {
-		return fmt.Errorf("ssh: remote address %v is not an TCP address when checking source-address match", addr)
-	}
-
-	if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {
-		if bytes.Equal(allowedIP, tcpAddr.IP) {
-			return nil
-		}
-	} else {
-		_, ipNet, err := net.ParseCIDR(sourceAddr)
-		if err != nil {
-			return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err)
-		}
-
-		if ipNet.Contains(tcpAddr.IP) {
-			return nil
-		}
-	}
-
-	return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr)
-}
-
-func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) {
-	var err error
-	var cache pubKeyCache
-	var perms *Permissions
-
-userAuthLoop:
-	for {
-		var userAuthReq userAuthRequestMsg
-		if packet, err := s.transport.readPacket(); err != nil {
-			return nil, err
-		} else if err = Unmarshal(packet, &userAuthReq); err != nil {
-			return nil, err
-		}
-
-		if userAuthReq.Service != serviceSSH {
-			return nil, errors.New("ssh: client attempted to negotiate for unknown service: " + userAuthReq.Service)
-		}
-
-		s.user = userAuthReq.User
-		perms = nil
-		authErr := errors.New("no auth passed yet")
-
-		switch userAuthReq.Method {
-		case "none":
-			if config.NoClientAuth {
-				s.user = ""
-				authErr = nil
-			}
-		case "password":
-			if config.PasswordCallback == nil {
-				authErr = errors.New("ssh: password auth not configured")
-				break
-			}
-			payload := userAuthReq.Payload
-			if len(payload) < 1 || payload[0] != 0 {
-				return nil, parseError(msgUserAuthRequest)
-			}
-			payload = payload[1:]
-			password, payload, ok := parseString(payload)
-			if !ok || len(payload) > 0 {
-				return nil, parseError(msgUserAuthRequest)
-			}
-
-			perms, authErr = config.PasswordCallback(s, password)
-		case "keyboard-interactive":
-			if config.KeyboardInteractiveCallback == nil {
-				authErr = errors.New("ssh: keyboard-interactive auth not configubred")
-				break
-			}
-
-			prompter := &sshClientKeyboardInteractive{s}
-			perms, authErr = config.KeyboardInteractiveCallback(s, prompter.Challenge)
-		case "publickey":
-			if config.PublicKeyCallback == nil {
-				authErr = errors.New("ssh: publickey auth not configured")
-				break
-			}
-			payload := userAuthReq.Payload
-			if len(payload) < 1 {
-				return nil, parseError(msgUserAuthRequest)
-			}
-			isQuery := payload[0] == 0
-			payload = payload[1:]
-			algoBytes, payload, ok := parseString(payload)
-			if !ok {
-				return nil, parseError(msgUserAuthRequest)
-			}
-			algo := string(algoBytes)
-			if !isAcceptableAlgo(algo) {
-				authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo)
-				break
-			}
-
-			pubKeyData, payload, ok := parseString(payload)
-			if !ok {
-				return nil, parseError(msgUserAuthRequest)
-			}
-
-			pubKey, err := ParsePublicKey(pubKeyData)
-			if err != nil {
-				return nil, err
-			}
-
-			candidate, ok := cache.get(s.user, pubKeyData)
-			if !ok {
-				candidate.user = s.user
-				candidate.pubKeyData = pubKeyData
-				candidate.perms, candidate.result = config.PublicKeyCallback(s, pubKey)
-				if candidate.result == nil && candidate.perms != nil && candidate.perms.CriticalOptions != nil && candidate.perms.CriticalOptions[sourceAddressCriticalOption] != "" {
-					candidate.result = checkSourceAddress(
-						s.RemoteAddr(),
-						candidate.perms.CriticalOptions[sourceAddressCriticalOption])
-				}
-				cache.add(candidate)
-			}
-
-			if isQuery {
-				// The client can query if the given public key
-				// would be okay.
-				if len(payload) > 0 {
-					return nil, parseError(msgUserAuthRequest)
-				}
-
-				if candidate.result == nil {
-					okMsg := userAuthPubKeyOkMsg{
-						Algo:   algo,
-						PubKey: pubKeyData,
-					}
-					if err = s.transport.writePacket(Marshal(&okMsg)); err != nil {
-						return nil, err
-					}
-					continue userAuthLoop
-				}
-				authErr = candidate.result
-			} else {
-				sig, payload, ok := parseSignature(payload)
-				if !ok || len(payload) > 0 {
-					return nil, parseError(msgUserAuthRequest)
-				}
-				// Ensure the public key algo and signature algo
-				// are supported.  Compare the private key
-				// algorithm name that corresponds to algo with
-				// sig.Format.  This is usually the same, but
-				// for certs, the names differ.
-				if !isAcceptableAlgo(sig.Format) {
-					break
-				}
-				signedData := buildDataSignedForAuth(s.transport.getSessionID(), userAuthReq, algoBytes, pubKeyData)
-
-				if err := pubKey.Verify(signedData, sig); err != nil {
-					return nil, err
-				}
-
-				authErr = candidate.result
-				perms = candidate.perms
-			}
-		default:
-			authErr = fmt.Errorf("ssh: unknown method %q", userAuthReq.Method)
-		}
-
-		if config.AuthLogCallback != nil {
-			config.AuthLogCallback(s, userAuthReq.Method, authErr)
-		}
-
-		if authErr == nil {
-			break userAuthLoop
-		}
-
-		var failureMsg userAuthFailureMsg
-		if config.PasswordCallback != nil {
-			failureMsg.Methods = append(failureMsg.Methods, "password")
-		}
-		if config.PublicKeyCallback != nil {
-			failureMsg.Methods = append(failureMsg.Methods, "publickey")
-		}
-		if config.KeyboardInteractiveCallback != nil {
-			failureMsg.Methods = append(failureMsg.Methods, "keyboard-interactive")
-		}
-
-		if len(failureMsg.Methods) == 0 {
-			return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false")
-		}
-
-		if err = s.transport.writePacket(Marshal(&failureMsg)); err != nil {
-			return nil, err
-		}
-	}
-
-	if err = s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil {
-		return nil, err
-	}
-	return perms, nil
-}
-
-// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by
-// asking the client on the other side of a ServerConn.
-type sshClientKeyboardInteractive struct {
-	*connection
-}
-
-func (c *sshClientKeyboardInteractive) Challenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) {
-	if len(questions) != len(echos) {
-		return nil, errors.New("ssh: echos and questions must have equal length")
-	}
-
-	var prompts []byte
-	for i := range questions {
-		prompts = appendString(prompts, questions[i])
-		prompts = appendBool(prompts, echos[i])
-	}
-
-	if err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{
-		Instruction: instruction,
-		NumPrompts:  uint32(len(questions)),
-		Prompts:     prompts,
-	})); err != nil {
-		return nil, err
-	}
-
-	packet, err := c.transport.readPacket()
-	if err != nil {
-		return nil, err
-	}
-	if packet[0] != msgUserAuthInfoResponse {
-		return nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0])
-	}
-	packet = packet[1:]
-
-	n, packet, ok := parseUint32(packet)
-	if !ok || int(n) != len(questions) {
-		return nil, parseError(msgUserAuthInfoResponse)
-	}
-
-	for i := uint32(0); i < n; i++ {
-		ans, rest, ok := parseString(packet)
-		if !ok {
-			return nil, parseError(msgUserAuthInfoResponse)
-		}
-
-		answers = append(answers, string(ans))
-		packet = rest
-	}
-	if len(packet) != 0 {
-		return nil, errors.New("ssh: junk at end of message")
-	}
-
-	return answers, nil
-}

+ 0 - 605
modules/crypto/ssh/session.go

@@ -1,605 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-// Session implements an interactive session described in
-// "RFC 4254, section 6".
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"sync"
-)
-
-type Signal string
-
-// POSIX signals as listed in RFC 4254 Section 6.10.
-const (
-	SIGABRT Signal = "ABRT"
-	SIGALRM Signal = "ALRM"
-	SIGFPE  Signal = "FPE"
-	SIGHUP  Signal = "HUP"
-	SIGILL  Signal = "ILL"
-	SIGINT  Signal = "INT"
-	SIGKILL Signal = "KILL"
-	SIGPIPE Signal = "PIPE"
-	SIGQUIT Signal = "QUIT"
-	SIGSEGV Signal = "SEGV"
-	SIGTERM Signal = "TERM"
-	SIGUSR1 Signal = "USR1"
-	SIGUSR2 Signal = "USR2"
-)
-
-var signals = map[Signal]int{
-	SIGABRT: 6,
-	SIGALRM: 14,
-	SIGFPE:  8,
-	SIGHUP:  1,
-	SIGILL:  4,
-	SIGINT:  2,
-	SIGKILL: 9,
-	SIGPIPE: 13,
-	SIGQUIT: 3,
-	SIGSEGV: 11,
-	SIGTERM: 15,
-}
-
-type TerminalModes map[uint8]uint32
-
-// POSIX terminal mode flags as listed in RFC 4254 Section 8.
-const (
-	tty_OP_END    = 0
-	VINTR         = 1
-	VQUIT         = 2
-	VERASE        = 3
-	VKILL         = 4
-	VEOF          = 5
-	VEOL          = 6
-	VEOL2         = 7
-	VSTART        = 8
-	VSTOP         = 9
-	VSUSP         = 10
-	VDSUSP        = 11
-	VREPRINT      = 12
-	VWERASE       = 13
-	VLNEXT        = 14
-	VFLUSH        = 15
-	VSWTCH        = 16
-	VSTATUS       = 17
-	VDISCARD      = 18
-	IGNPAR        = 30
-	PARMRK        = 31
-	INPCK         = 32
-	ISTRIP        = 33
-	INLCR         = 34
-	IGNCR         = 35
-	ICRNL         = 36
-	IUCLC         = 37
-	IXON          = 38
-	IXANY         = 39
-	IXOFF         = 40
-	IMAXBEL       = 41
-	ISIG          = 50
-	ICANON        = 51
-	XCASE         = 52
-	ECHO          = 53
-	ECHOE         = 54
-	ECHOK         = 55
-	ECHONL        = 56
-	NOFLSH        = 57
-	TOSTOP        = 58
-	IEXTEN        = 59
-	ECHOCTL       = 60
-	ECHOKE        = 61
-	PENDIN        = 62
-	OPOST         = 70
-	OLCUC         = 71
-	ONLCR         = 72
-	OCRNL         = 73
-	ONOCR         = 74
-	ONLRET        = 75
-	CS7           = 90
-	CS8           = 91
-	PARENB        = 92
-	PARODD        = 93
-	TTY_OP_ISPEED = 128
-	TTY_OP_OSPEED = 129
-)
-
-// A Session represents a connection to a remote command or shell.
-type Session struct {
-	// Stdin specifies the remote process's standard input.
-	// If Stdin is nil, the remote process reads from an empty
-	// bytes.Buffer.
-	Stdin io.Reader
-
-	// Stdout and Stderr specify the remote process's standard
-	// output and error.
-	//
-	// If either is nil, Run connects the corresponding file
-	// descriptor to an instance of ioutil.Discard. There is a
-	// fixed amount of buffering that is shared for the two streams.
-	// If either blocks it may eventually cause the remote
-	// command to block.
-	Stdout io.Writer
-	Stderr io.Writer
-
-	ch        Channel // the channel backing this session
-	started   bool    // true once Start, Run or Shell is invoked.
-	copyFuncs []func() error
-	errors    chan error // one send per copyFunc
-
-	// true if pipe method is active
-	stdinpipe, stdoutpipe, stderrpipe bool
-
-	// stdinPipeWriter is non-nil if StdinPipe has not been called
-	// and Stdin was specified by the user; it is the write end of
-	// a pipe connecting Session.Stdin to the stdin channel.
-	stdinPipeWriter io.WriteCloser
-
-	exitStatus chan error
-}
-
-// SendRequest sends an out-of-band channel request on the SSH channel
-// underlying the session.
-func (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {
-	return s.ch.SendRequest(name, wantReply, payload)
-}
-
-func (s *Session) Close() error {
-	return s.ch.Close()
-}
-
-// RFC 4254 Section 6.4.
-type setenvRequest struct {
-	Name  string
-	Value string
-}
-
-// Setenv sets an environment variable that will be applied to any
-// command executed by Shell or Run.
-func (s *Session) Setenv(name, value string) error {
-	msg := setenvRequest{
-		Name:  name,
-		Value: value,
-	}
-	ok, err := s.ch.SendRequest("env", true, Marshal(&msg))
-	if err == nil && !ok {
-		err = errors.New("ssh: setenv failed")
-	}
-	return err
-}
-
-// RFC 4254 Section 6.2.
-type ptyRequestMsg struct {
-	Term     string
-	Columns  uint32
-	Rows     uint32
-	Width    uint32
-	Height   uint32
-	Modelist string
-}
-
-// RequestPty requests the association of a pty with the session on the remote host.
-func (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error {
-	var tm []byte
-	for k, v := range termmodes {
-		kv := struct {
-			Key byte
-			Val uint32
-		}{k, v}
-
-		tm = append(tm, Marshal(&kv)...)
-	}
-	tm = append(tm, tty_OP_END)
-	req := ptyRequestMsg{
-		Term:     term,
-		Columns:  uint32(w),
-		Rows:     uint32(h),
-		Width:    uint32(w * 8),
-		Height:   uint32(h * 8),
-		Modelist: string(tm),
-	}
-	ok, err := s.ch.SendRequest("pty-req", true, Marshal(&req))
-	if err == nil && !ok {
-		err = errors.New("ssh: pty-req failed")
-	}
-	return err
-}
-
-// RFC 4254 Section 6.5.
-type subsystemRequestMsg struct {
-	Subsystem string
-}
-
-// RequestSubsystem requests the association of a subsystem with the session on the remote host.
-// A subsystem is a predefined command that runs in the background when the ssh session is initiated
-func (s *Session) RequestSubsystem(subsystem string) error {
-	msg := subsystemRequestMsg{
-		Subsystem: subsystem,
-	}
-	ok, err := s.ch.SendRequest("subsystem", true, Marshal(&msg))
-	if err == nil && !ok {
-		err = errors.New("ssh: subsystem request failed")
-	}
-	return err
-}
-
-// RFC 4254 Section 6.9.
-type signalMsg struct {
-	Signal string
-}
-
-// Signal sends the given signal to the remote process.
-// sig is one of the SIG* constants.
-func (s *Session) Signal(sig Signal) error {
-	msg := signalMsg{
-		Signal: string(sig),
-	}
-
-	_, err := s.ch.SendRequest("signal", false, Marshal(&msg))
-	return err
-}
-
-// RFC 4254 Section 6.5.
-type execMsg struct {
-	Command string
-}
-
-// Start runs cmd on the remote host. Typically, the remote
-// server passes cmd to the shell for interpretation.
-// A Session only accepts one call to Run, Start or Shell.
-func (s *Session) Start(cmd string) error {
-	if s.started {
-		return errors.New("ssh: session already started")
-	}
-	req := execMsg{
-		Command: cmd,
-	}
-
-	ok, err := s.ch.SendRequest("exec", true, Marshal(&req))
-	if err == nil && !ok {
-		err = fmt.Errorf("ssh: command %v failed", cmd)
-	}
-	if err != nil {
-		return err
-	}
-	return s.start()
-}
-
-// Run runs cmd on the remote host. Typically, the remote
-// server passes cmd to the shell for interpretation.
-// A Session only accepts one call to Run, Start, Shell, Output,
-// or CombinedOutput.
-//
-// The returned error is nil if the command runs, has no problems
-// copying stdin, stdout, and stderr, and exits with a zero exit
-// status.
-//
-// If the command fails to run or doesn't complete successfully, the
-// error is of type *ExitError. Other error types may be
-// returned for I/O problems.
-func (s *Session) Run(cmd string) error {
-	err := s.Start(cmd)
-	if err != nil {
-		return err
-	}
-	return s.Wait()
-}
-
-// Output runs cmd on the remote host and returns its standard output.
-func (s *Session) Output(cmd string) ([]byte, error) {
-	if s.Stdout != nil {
-		return nil, errors.New("ssh: Stdout already set")
-	}
-	var b bytes.Buffer
-	s.Stdout = &b
-	err := s.Run(cmd)
-	return b.Bytes(), err
-}
-
-type singleWriter struct {
-	b  bytes.Buffer
-	mu sync.Mutex
-}
-
-func (w *singleWriter) Write(p []byte) (int, error) {
-	w.mu.Lock()
-	defer w.mu.Unlock()
-	return w.b.Write(p)
-}
-
-// CombinedOutput runs cmd on the remote host and returns its combined
-// standard output and standard error.
-func (s *Session) CombinedOutput(cmd string) ([]byte, error) {
-	if s.Stdout != nil {
-		return nil, errors.New("ssh: Stdout already set")
-	}
-	if s.Stderr != nil {
-		return nil, errors.New("ssh: Stderr already set")
-	}
-	var b singleWriter
-	s.Stdout = &b
-	s.Stderr = &b
-	err := s.Run(cmd)
-	return b.b.Bytes(), err
-}
-
-// Shell starts a login shell on the remote host. A Session only
-// accepts one call to Run, Start, Shell, Output, or CombinedOutput.
-func (s *Session) Shell() error {
-	if s.started {
-		return errors.New("ssh: session already started")
-	}
-
-	ok, err := s.ch.SendRequest("shell", true, nil)
-	if err == nil && !ok {
-		return fmt.Errorf("ssh: cound not start shell")
-	}
-	if err != nil {
-		return err
-	}
-	return s.start()
-}
-
-func (s *Session) start() error {
-	s.started = true
-
-	type F func(*Session)
-	for _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} {
-		setupFd(s)
-	}
-
-	s.errors = make(chan error, len(s.copyFuncs))
-	for _, fn := range s.copyFuncs {
-		go func(fn func() error) {
-			s.errors <- fn()
-		}(fn)
-	}
-	return nil
-}
-
-// Wait waits for the remote command to exit.
-//
-// The returned error is nil if the command runs, has no problems
-// copying stdin, stdout, and stderr, and exits with a zero exit
-// status.
-//
-// If the command fails to run or doesn't complete successfully, the
-// error is of type *ExitError. Other error types may be
-// returned for I/O problems.
-func (s *Session) Wait() error {
-	if !s.started {
-		return errors.New("ssh: session not started")
-	}
-	waitErr := <-s.exitStatus
-
-	if s.stdinPipeWriter != nil {
-		s.stdinPipeWriter.Close()
-	}
-	var copyError error
-	for _ = range s.copyFuncs {
-		if err := <-s.errors; err != nil && copyError == nil {
-			copyError = err
-		}
-	}
-	if waitErr != nil {
-		return waitErr
-	}
-	return copyError
-}
-
-func (s *Session) wait(reqs <-chan *Request) error {
-	wm := Waitmsg{status: -1}
-	// Wait for msg channel to be closed before returning.
-	for msg := range reqs {
-		switch msg.Type {
-		case "exit-status":
-			d := msg.Payload
-			wm.status = int(d[0])<<24 | int(d[1])<<16 | int(d[2])<<8 | int(d[3])
-		case "exit-signal":
-			var sigval struct {
-				Signal     string
-				CoreDumped bool
-				Error      string
-				Lang       string
-			}
-			if err := Unmarshal(msg.Payload, &sigval); err != nil {
-				return err
-			}
-
-			// Must sanitize strings?
-			wm.signal = sigval.Signal
-			wm.msg = sigval.Error
-			wm.lang = sigval.Lang
-		default:
-			// This handles keepalives and matches
-			// OpenSSH's behaviour.
-			if msg.WantReply {
-				msg.Reply(false, nil)
-			}
-		}
-	}
-	if wm.status == 0 {
-		return nil
-	}
-	if wm.status == -1 {
-		// exit-status was never sent from server
-		if wm.signal == "" {
-			return errors.New("wait: remote command exited without exit status or exit signal")
-		}
-		wm.status = 128
-		if _, ok := signals[Signal(wm.signal)]; ok {
-			wm.status += signals[Signal(wm.signal)]
-		}
-	}
-	return &ExitError{wm}
-}
-
-func (s *Session) stdin() {
-	if s.stdinpipe {
-		return
-	}
-	var stdin io.Reader
-	if s.Stdin == nil {
-		stdin = new(bytes.Buffer)
-	} else {
-		r, w := io.Pipe()
-		go func() {
-			_, err := io.Copy(w, s.Stdin)
-			w.CloseWithError(err)
-		}()
-		stdin, s.stdinPipeWriter = r, w
-	}
-	s.copyFuncs = append(s.copyFuncs, func() error {
-		_, err := io.Copy(s.ch, stdin)
-		if err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF {
-			err = err1
-		}
-		return err
-	})
-}
-
-func (s *Session) stdout() {
-	if s.stdoutpipe {
-		return
-	}
-	if s.Stdout == nil {
-		s.Stdout = ioutil.Discard
-	}
-	s.copyFuncs = append(s.copyFuncs, func() error {
-		_, err := io.Copy(s.Stdout, s.ch)
-		return err
-	})
-}
-
-func (s *Session) stderr() {
-	if s.stderrpipe {
-		return
-	}
-	if s.Stderr == nil {
-		s.Stderr = ioutil.Discard
-	}
-	s.copyFuncs = append(s.copyFuncs, func() error {
-		_, err := io.Copy(s.Stderr, s.ch.Stderr())
-		return err
-	})
-}
-
-// sessionStdin reroutes Close to CloseWrite.
-type sessionStdin struct {
-	io.Writer
-	ch Channel
-}
-
-func (s *sessionStdin) Close() error {
-	return s.ch.CloseWrite()
-}
-
-// StdinPipe returns a pipe that will be connected to the
-// remote command's standard input when the command starts.
-func (s *Session) StdinPipe() (io.WriteCloser, error) {
-	if s.Stdin != nil {
-		return nil, errors.New("ssh: Stdin already set")
-	}
-	if s.started {
-		return nil, errors.New("ssh: StdinPipe after process started")
-	}
-	s.stdinpipe = true
-	return &sessionStdin{s.ch, s.ch}, nil
-}
-
-// StdoutPipe returns a pipe that will be connected to the
-// remote command's standard output when the command starts.
-// There is a fixed amount of buffering that is shared between
-// stdout and stderr streams. If the StdoutPipe reader is
-// not serviced fast enough it may eventually cause the
-// remote command to block.
-func (s *Session) StdoutPipe() (io.Reader, error) {
-	if s.Stdout != nil {
-		return nil, errors.New("ssh: Stdout already set")
-	}
-	if s.started {
-		return nil, errors.New("ssh: StdoutPipe after process started")
-	}
-	s.stdoutpipe = true
-	return s.ch, nil
-}
-
-// StderrPipe returns a pipe that will be connected to the
-// remote command's standard error when the command starts.
-// There is a fixed amount of buffering that is shared between
-// stdout and stderr streams. If the StderrPipe reader is
-// not serviced fast enough it may eventually cause the
-// remote command to block.
-func (s *Session) StderrPipe() (io.Reader, error) {
-	if s.Stderr != nil {
-		return nil, errors.New("ssh: Stderr already set")
-	}
-	if s.started {
-		return nil, errors.New("ssh: StderrPipe after process started")
-	}
-	s.stderrpipe = true
-	return s.ch.Stderr(), nil
-}
-
-// newSession returns a new interactive session on the remote host.
-func newSession(ch Channel, reqs <-chan *Request) (*Session, error) {
-	s := &Session{
-		ch: ch,
-	}
-	s.exitStatus = make(chan error, 1)
-	go func() {
-		s.exitStatus <- s.wait(reqs)
-	}()
-
-	return s, nil
-}
-
-// An ExitError reports unsuccessful completion of a remote command.
-type ExitError struct {
-	Waitmsg
-}
-
-func (e *ExitError) Error() string {
-	return e.Waitmsg.String()
-}
-
-// Waitmsg stores the information about an exited remote command
-// as reported by Wait.
-type Waitmsg struct {
-	status int
-	signal string
-	msg    string
-	lang   string
-}
-
-// ExitStatus returns the exit status of the remote command.
-func (w Waitmsg) ExitStatus() int {
-	return w.status
-}
-
-// Signal returns the exit signal of the remote command if
-// it was terminated violently.
-func (w Waitmsg) Signal() string {
-	return w.signal
-}
-
-// Msg returns the exit message given by the remote command
-func (w Waitmsg) Msg() string {
-	return w.msg
-}
-
-// Lang returns the language tag. See RFC 3066
-func (w Waitmsg) Lang() string {
-	return w.lang
-}
-
-func (w Waitmsg) String() string {
-	return fmt.Sprintf("Process exited with: %v. Reason was: %v (%v)", w.status, w.msg, w.signal)
-}

部分文件因为文件数量过多而无法显示