Compare commits

..

191 Commits

Author SHA1 Message Date
Unknwon
b752fe6808 MISC: bump version 2017-11-19 13:29:06 -05:00
Unknwon
114677b747 bindata: update 2017-11-19 12:49:46 -05:00
无闻
9362b9fdfe cmd/hook: fix custom hook cannot be executed on Windows (#4255)
This solution still requires the server installed git-bash.
2017-11-18 21:45:29 -05:00
Unknwon
f48921c256 README: update numer of language supported
[CI SKIP]
2017-11-18 01:51:43 -05:00
Unknwon
51e0eef11e locale: sync from Crowdin 2017-11-18 01:27:56 -05:00
Ross Williams
925c2a2ca2 docker: symlink fixes (#4747)
* Prevent circular links (symlinks) from being created:
	* /data/gogs/log/log -> /data/gogs/log
	* /data/gogs/data/data -> /data/gogs/data
	* /data/git/git -> /data/git
2017-11-18 00:50:07 -05:00
Yen Chi Hsuan
f1465b6847 locale: fix the language name for zh_TW (#4807) 2017-11-18 00:48:07 -05:00
Ryan Chang
5260d70b19 templates: fix typo in repo/home.tmpl (#4845) 2017-11-18 00:47:48 -05:00
33MHz
339fd9c5a4 locale: fix English grammar for delete repository dialog (#4862)
* fix typo in en-US delete dialog

* fix typo in en-GB delete dialog

* improve en-GB delete dialog language

* improve en-US delete dialog language
2017-11-18 00:47:20 -05:00
Unknwon
0f14b92bce MISC: minor fixes in webhook 2017-11-18 00:38:46 -05:00
Unknwon
43d6ad5fda pull: fix after commit ID is not latest commit in the base branch (#4442) 2017-11-18 00:38:06 -05:00
Unknwon
667c40c3de css: fix minor table issue 2017-11-17 00:12:59 -05:00
Unknwon
3b8b8a2ee3 pull_request: able to ignore whitespace when check conflict (#4834) 2017-11-16 22:22:38 -05:00
Unknwon
6f04ee879c auth/ldap: allow placeholder %s for BindDN (#2526) 2017-11-16 19:32:33 -05:00
Unknwon
e1e76d3f88 admin/config: add UI for [http] section (#3987) 2017-11-16 19:03:46 -05:00
Unknwon
221aa8968a CI: add go 1.9.x 2017-11-16 18:44:54 -05:00
Unknwon
86931f546f repo: fix go-get meta tags (#4832)
The first part in go-import should be the root import path. It
included subpath when 'go get' with a subpath and was not correct.
2017-11-16 18:43:03 -05:00
Unknwon
ae40bb00b3 vendor: update github.com/gogits/git-module (#4855) 2017-11-16 13:13:28 -05:00
Unknwon
3dd93f5533 vendor: update github.com/gogits/git-module 2017-11-16 00:04:07 -05:00
Unknwon
181dc5d75e editor: remove out of sync branch before checkout again
If a branch was deleted from server, sometimes it is not reflected
on local copy. Therefore, we need to remove the branch with same
name if it is out of sync and then checkout to correct version.
2017-11-16 00:03:35 -05:00
Mohammad Gholami
ae4c4708ad locale: update TRANSLATORS (#4866)
Crowdin contributor
2017-11-15 23:45:24 -05:00
Unknwon
34c2e52bd5 repo/pull: allow rebase before merging (#4805) 2017-11-15 23:28:31 -05:00
mharinder
5cd1fdeb9e pull: add an option to use rebase for merging pull requests
For DVCS, either merge or rebase works for getting new code in a pull
request in the main branch.

The rebase workflow produces a linear history which is cleaner, and
more bisect-able.

This commit adds a repo-level option to enable the rebase workflow. Once
enabled, "Merge Pull Request" will be replaced by
"Rebase and Merge Pull Request" which does exactly what the user wants.
It's unlikely a project wants a mixed-use of both rebase and merge
workflows, therefore the feature is not implemented as a drop-down
button like what GitHub does
(https://github.com/blog/2243-rebase-and-merge-pull-requests).
2017-11-15 23:28:23 -05:00
Unknwon
dbe6de313e public: update Semantic UI 2.2.10 -> 2.2.13 2017-11-15 21:59:47 -05:00
Anton Antonov
77c77fbd42 api: add endpoint /api/v1/user/orgs (#4835)
* Add API endpoint /api/v1/user/orgs

The difference between this endpoint and
/api/v1/admin/users/<username>/orgs,
is that here you're creating a repo with the `user`
that corresponds to the API token you're using.

* Extract duplicate API org creation
2017-11-13 22:27:30 -05:00
Unknwon
9b4054f1fc locale: sync from Crowdin 2017-11-05 23:59:12 -05:00
Unknwon
af3911b833 MISC: update README and migration comment 2017-10-22 19:29:29 -04:00
Unknwon
4258bf3d54 user/auth: fix page not redirect after login 2017-10-22 19:29:17 -04:00
Unknwon
4d1d66d906 Bump version 2017-10-15 00:12:52 -04:00
Unknwon
b727e0be71 SECURITY: fix branch name persistent XSS
Reported by Carl Hattenfels.
2017-10-15 00:07:46 -04:00
Unknwon
ea313d0c1e SECURITY: HTML injection in user search API
Reported by Tim Hawes.
2017-10-14 23:53:20 -04:00
Unknwon
c1507eda45 locale: sync from Crowdin 2017-10-14 04:19:24 -04:00
Robert Beal
ce7496aec9 docker: allow setting UID and GID when running a container (#4776)
* Allow setting the UID and GID when running a docker container via shadow

* Disable password login via usermod (fix leaving user in insecure state)
2017-10-13 16:26:39 -04:00
Josef Kemetmüller
b16c12f67b cmd/admin: add subcommands for all admin dashboard actions (#4813) 2017-10-10 17:02:44 -04:00
Unknwon
1b24e6ed76 locale: sync from Crowdin 2017-09-25 20:29:10 -04:00
Athurg Feng
52f3833811 Add Dingtalk webhook support (#4773)
* Add dingtalk webhook into html template

* Add Dingtalk's icon

* Insert dingtalk into repo's webhook page template

* Insert dingtalk into org's webhook page

* Add dingtalk into default webhook config

* Add locale string for add_dingtalk_hook_desc

* Update bindata

* Add dingtalk webhook form validator

* Add dingtalk hook task

* Add dingtalk hook create handler

* Add dingtalk hook edit handler

* Add dingtalk router

* Add dingtalk webhook task skeleton

* Add markdown link formatter

* Add Dingtalk ActionCard create wrapper

* Add support for dingtalk create event payload

* Add support for dingtalk delete event payload

* Add support for dingtalk fork event payload

* Add support for dingtalk push event payload

* Add support for dingtalk issue event payload

* Add support for dingtalk issue comment payload

* Add support for dingtalk pull event payload

* Add support for dingtalk release event payload
2017-09-21 14:32:48 -04:00
Unknwon
b1100b5e34 locale: sync from Crowdin 2017-08-15 18:20:28 -04:00
Sb
ab2c6cb008 models: fix #4692 and typo in comments (#4695) 2017-08-13 02:11:48 -04:00
Unknwon
f2c3f4a944 locale: sync from Crowdin 2017-07-30 02:45:13 -04:00
Unknwon
6bc11c4450 hook: fix email not sent after push (#4430)
Turns out mail service was not initialized at all, also mail must
be sent in sync in hook mode before program exits.
2017-07-27 16:53:02 -04:00
Unknwon
643c85e9c8 routes/home: minor code improve 2017-07-18 22:09:57 -04:00
Unknwon
ee9950ec2f explore: fix total repository number and page number do not match (#4441)
Because in the final repository list we use Distinct to remove
duplicates, but didn't do so when count total number of repositories.
2017-07-18 22:07:40 -04:00
Unknwon
dc10594d7b repo: fix cannot fork repository (#4572)
Should not load attributes if repository not found in HasForkedRepo.
2017-07-18 12:56:23 -04:00
Unknwon
e02fac4968 repo: fix panic on pull request submit (#4572) 2017-07-14 18:51:23 -04:00
Julian Xhokaxhiu
5a88546a80 docker: enable Automated builds for rpi (#4431)
* Enable Automated builds for rpi

* Rename the file to fit only for Docker Hub

* Update the binary to v2.9.0+resin1

* Restore default status

* Commit as new file

In order to avoid breaking native builds
2017-07-14 18:04:19 -04:00
Unknwon
f67d6bbca3 repo/diff: fix line number in split view template (#4584) 2017-07-14 17:02:45 -04:00
Unknwon
c970c4ee41 css: not include line numbers in diff selection (#4584)
Changed template file in order to make CSS work properly.
2017-07-14 16:50:49 -04:00
Unknwon
3a6623104f Makefile: correct errors 2017-07-14 16:48:55 -04:00
Unknwon
b18a2bdcd3 locale: sync from Crowdin 2017-07-14 16:48:41 -04:00
Unknwon
d09eaef542 locale: sync from Crowdin 2017-07-09 21:38:11 -04:00
Unknwon
13cca8a66a models/comment: remove unused SQL parameter (#4586) 2017-06-27 20:39:59 -04:00
Unknwon
8ed2330d6e issue_comment: fix pg syntax ambiguous (#4586)
Also handle error related to time parsing.
2017-06-27 20:21:36 -04:00
Andy Hochhaus
261237745f api: fix ListIssueComments API (#4587) 2017-06-27 19:59:41 -04:00
Unknwon
c9d76a381b css: update less (#4584) 2017-06-27 15:21:14 -04:00
Einar
2961afe8fb css: not include line numbers in diff selection (#4584) 2017-06-27 15:08:19 -04:00
Unknwon
ea03bee1b9 locale: sync from Crowdin 2017-06-27 14:45:10 -04:00
Unknwon
d1a96c2543 cmd/restore: skip non existent directories in backup archive (#4413) 2017-06-25 01:16:32 -04:00
Unknwon
11b1498a6e api/repo: load attributes when listing user repositories (#4565) 2017-06-21 17:41:18 -04:00
Unknwon
f59500a90b locale: sync from Crowdin 2017-06-20 00:10:10 -04:00
Credomane Evonguard
3df25fadfa scripts: fix LSB init scripts so gogs starts when using mysql/postgresql for database (#4561) 2017-06-14 20:37:32 -04:00
Unknwon
0e6a6bf880 Refactoring: remove sessionRelease()
XORM supports automatic roll back in session Close() already.
2017-06-11 03:06:36 -04:00
Unknwon
e1f01305d8 vendor: update github.com/go-macaron/binding (#4428) 2017-06-11 02:59:49 -04:00
Unknwon
23b83cb736 pkg/process: fix potential race condition
Following conditions were not protected:
1. Use and increase next pid
2. Append and remove process from the list
2017-06-11 02:28:08 -04:00
Unknwon
e16196124e setting: disable SSH minimum key size check when not eligible (#4507) 2017-06-11 02:06:26 -04:00
Unknwon
ab2197bc75 random: some code simplify 2017-06-11 00:56:31 -04:00
Unknwon
a887e475e3 repo: change action visibility when repository visibility changed (#4414) 2017-06-11 00:43:56 -04:00
Unknwon
4400d2fdd9 Refactoring: rename package routers -> routes 2017-06-11 00:34:14 -04:00
Unknwon
6197a7639a locale: sync from Crowdin 2017-06-10 01:43:18 -04:00
Unknwon
91f65cedc8 repo/view: trim Windows line ending when display content (#4546) 2017-06-09 20:05:04 -04:00
Unknwon
7b85ee4954 vendor: update github.com/gogits/git-module (#4475) 2017-06-08 16:56:09 -04:00
Unknwon
1af01f5e30 restore: create data directory before restoring data files (#4413) 2017-06-08 16:26:56 -04:00
Unknwon
3efc0d8681 repo: load base repository for loadAttributes 2017-06-08 16:18:04 -04:00
Unknwon
09f2cbfb18 api/repo: response full API format for search results (#4522) 2017-06-08 15:53:19 -04:00
Unknwon
88791089ed locale: sync from Crowdin 2017-06-08 14:11:25 -04:00
Unknwon
089eb1a099 Change required version to Go 1.6 2017-06-07 21:44:18 -04:00
Unknwon
b40dc550ed vendor: update github.com/go-xorm/* (#4419) 2017-06-07 01:19:32 -04:00
Unknwon
c210984b40 repo: improve relative path detection (#4366) 2017-06-06 16:06:28 -04:00
Unknwon
455dc072ba repo: use BranchLink instead of TreeLink (#4366) 2017-06-06 15:50:12 -04:00
Unknwon
a851b77ac9 markup: able to display image from IPython notebook (#4366) 2017-06-06 15:41:27 -04:00
Simon Dann
e9a2b72ddb models/repo: modify keyword search to include description for #4287 (#4548)
* Modified repository keyword search to include description for #4287

* Replacing Where with And for #4548
2017-06-06 06:23:42 -04:00
Unknwon
c0be055541 api/repo: fix admin migrate repo for non-org users (#4479) 2017-06-05 17:11:57 -04:00
无闻
51d7f1264b api: GitHub compliance (#4549)
* Add undocumented endpoint for /repositories/:id

* GitHub API Compliance
2017-06-05 15:34:11 -04:00
Unknwon
3359b942b3 vendor: update github.com/gogits/git-module 2017-06-05 13:35:13 -04:00
Unknwon
2155ef0208 README: add GitPitch 2017-06-05 00:59:08 -04:00
Unknwon
36d6450977 repo/pull: detect case when no merge base found (#4434) 2017-06-05 00:10:53 -04:00
Unknwon
02a576a6a0 locale: update translations 2017-06-04 14:55:55 -04:00
Unknwon
2478b87432 Refactoring: rename ctx -> c 2017-06-03 07:26:09 -04:00
Unknwon
e33c714073 repo: always response go-get meta when requested (#1878) 2017-06-03 06:54:06 -04:00
Unknwon
f4d61ac6d2 templates: fix version 2017-06-03 06:52:45 -04:00
Unknwon
5c10eff67f bindata: regenerate 2017-06-03 06:51:16 -04:00
Unknwon
239dd978ff repo: support go get subpkg (#1878) 2017-06-03 06:50:09 -04:00
Unknwon
af4cf463f5 css: fix fluid container for spilt diff view 2017-06-03 04:34:01 -04:00
Peter Mescalchin
21c1b8d834 conf: rename attachment toggle from ENABLE to ENABLED (#4474) 2017-06-03 03:02:55 -04:00
Unknwon
16913ba814 css: start using fixing width container
Get rid of responsive issue.

Also fixes #4527.
2017-06-03 02:58:54 -04:00
Unknwon
6bb9c442b2 issue: fix updated_unix is not updated for new comments (#4462) 2017-06-02 17:30:15 -04:00
Unknwon
c407921644 orgmode: recover panic from third-party package 2017-06-02 17:19:06 -04:00
Unknwon
a1411c36de vendor: update github.com/gogits/go-gogs-client 2017-06-02 14:26:43 -04:00
Unknwon
c69fa18434 repo: expose more fields to API format (#4484) 2017-06-02 14:26:34 -04:00
Unknwon
4cb01fe332 locale: add Hungarian 2017-06-01 23:41:58 -04:00
Lilian Besson
612a7e76f1 cmd/admin: fix typo Preform → Perform (#4540)
Just an English typo in the command line help.
2017-05-31 07:10:42 -04:00
Simon Dann
bf060387af ui: fix emoji not rendered in commits table (#4440) 2017-05-29 23:46:43 -04:00
Unknwon
0778d7de80 vendor: update github.com/msteinert/pam (#4216) 2017-05-29 23:43:40 -04:00
Jonas Östanbäck
9085c3b73d repo/download: fix for downloading zero bytes files. (#4436)
Allocated buffer served to client and not properly truncated to
number of bytes read.

Signed-off-by: Jonas Östanbäck <jonas.ostanback@gmail.com>
2017-05-29 23:28:38 -04:00
BartWillems
306ba917ea conf: made the default webhook timeout duration longer. (#4423)
A 5 seconds timeout is too low and can cause random timeouts in certain setups.
2017-05-29 23:27:02 -04:00
Richard Bukovansky
1a3a303f8d locale: better explenation for team membership and granted access (#4417)
As discussed here https://crowdin.com/translate/gogs/1/enus-cs#378 I'm suggesting this update.
2017-05-29 23:25:21 -04:00
Pablo Saavedra
5906268917 models/org_team: getUserTeams uses includes always -1 in the IN statement (#4412)
Ensure that the IN clause contains one value at least. The idea is avoid a
syntax error in the SQL sentence and rollbacks in the transactions.
For example:

    ERROR:  syntax error at or near ")"
    LINE 1: ...RE ... and team.id IN ();

We will always add the -1 value in the IN list.
2017-05-29 23:24:37 -04:00
Unknwon
a1d411a018 ldap: minor fix for PR #4398 2017-05-29 23:18:34 -04:00
aboron
dbb7e5464b ldap: add check for group membership (#4398)
* Add standard LDAP group membership checking.

* Fix formatting, typo, grammer, and syntax errors

* Debugging done.
Gave up on locale file edits.
2017-05-29 22:33:50 -04:00
Unknwon
11ad64f6cb backup: use datetime string as default archive name
Because unix timestamp is not very human readable.
2017-05-29 16:51:30 -04:00
Unknwon
4e87e62d5c models/repo_collaboration: cannot change permissions of collaborators (#4512) 2017-05-29 16:33:18 -04:00
Unknwon
a5bd095c30 locale: add en-GB 2017-05-25 12:53:28 -04:00
Unknwon
b17995a332 restore: reset table sequences for PostgreSQL (#4357) 2017-05-21 04:37:37 -04:00
Unknwon
ce6e8ed8fe models: remove redundant tags for primary keys 2017-05-21 04:36:41 -04:00
Jon Lundy
1755025e7f models/login_source: add check for user for create/update on LDAP (#4405)
* Add check for user for create/update

* Update login_source.go

* Update login_source.go
2017-05-21 02:14:28 -04:00
Gibheer
1a4ba4c390 models/ssh_key: don't run ssh-keygen check if disabled (#4519)
* don't load key when key size should not be checked

This makes it possible for users with incompatible ssh-keygen versions
to just disable the check completely without running into errors.

* add proper ed25519 constant

The x/crypto/ssh library has support for ed25519 now, so it is possible
to support it.
2017-05-20 08:41:57 -04:00
spacetourist
0a6ceabb9b Allow configurable HTTPS SSL/TLS version(#4451) 2017-05-20 08:31:25 -04:00
Unknwon
d71a8fece8 feature/org-mode: fix compile error 2017-05-17 18:50:14 -04:00
Unknwon
5202b7da48 vendor: add github.com/chaseadamsio/goorgeous 2017-05-17 18:46:23 -04:00
Unknwon
1b5a418fd3 modules/markup: initial support for org-mode (#4373) 2017-05-17 18:46:23 -04:00
Unknwon
a11044f789 locale: sync from Crowdin 2017-05-17 18:37:25 -04:00
Benjamin
4b2bf41381 locale: added missing word and fixed a typo (#4490) 2017-05-17 18:31:02 -04:00
rouzier
07d5badfed cmd/update: fix typo (#4492) 2017-05-17 18:30:19 -04:00
peter zhang
10ee2e0dad vendor: update xorm version for fix git clone error build with golang 1.8.1 (#4460) 2017-04-26 19:47:16 -04:00
Unknwon
6500aafcb8 install: validate port in SMTP host address (#2243) 2017-04-07 23:23:39 -04:00
Unknwon
6ebdf91b32 templates/repo: fix README.ipynb not rendered (#4367) 2017-04-07 22:33:19 -04:00
Unknwon
91cd350b63 repo/editor: fix wrong context for subdirectory (#4368) 2017-04-07 21:44:55 -04:00
Unknwon
6ea9642d64 js: remove Preview, Full Screen and Side-by-side buttons for repository file editing (#4402) 2017-04-07 18:46:03 -04:00
Unknwon
65277e47c5 api/repo: add Mirror field (#4392) 2017-04-07 18:15:23 -04:00
Unknwon
9e3c83372f api/repo: improve migration error handling 2017-04-07 16:00:25 -04:00
Unknwon
809db853fa locale: fix zh-CN 2017-04-07 15:41:54 -04:00
Unknwon
62a20b8a2d repo/wiki: improve UI 2017-04-07 15:30:08 -04:00
Unknwon
d0612be402 user/setting: improve UI 2017-04-07 15:08:53 -04:00
Unknwon
5f8ec0dc8b templates/repo: improve symlink file icon in list view (#4237) 2017-04-07 13:51:10 -04:00
Unknwon
fda4b1106e user/setting: simplify code 2017-04-07 00:49:30 -04:00
Unknwon
ac43eab51f Refactoring: rename Signed -> Logged 2017-04-06 23:48:49 -04:00
Unknwon
8d0417497b modes/mirror: make Updated unchanged if no new commits fetched (#4341)
After sync mirror, get latest commit date and compare to current
repository updated time, only update it if the commit date is newer.
2017-04-06 20:58:57 -04:00
Unknwon
90b9f7e08c pkg/setting: rename {AppUrl, AppSubUrl} -> {AppURL, AppSubURL} 2017-04-06 17:27:57 -04:00
Unknwon
2c404daca6 pkg/context: rename {CsrfToken, CsrfTokenHtml} -> {CSRFToken, CSRFTokenHTML} 2017-04-06 17:20:38 -04:00
Unknwon
0e271799f2 Refactoring: rename and simplify pkg/tool functions 2017-04-06 17:13:53 -04:00
Unknwon
3c0de17133 js: set cursor to the end of autofocus input string 2017-04-06 17:00:12 -04:00
Unknwon
bd1f2ccaf8 user/settings/security: add token description about 2FA 2017-04-06 16:27:31 -04:00
Unknwon
ec491b023f api/repo: fix nil error panic 2017-04-06 01:37:01 -04:00
Unknwon
f191bff0b9 api/repo: check user type of owner for migration
Report by MiaoWoo.
2017-04-06 01:20:20 -04:00
Unknwon
1a04da864f vendor: add github.com/boombuler/barcode/utils 2017-04-06 00:15:39 -04:00
Unknwon
c8c975c99b vendor: add packages for 2fa 2017-04-06 00:14:39 -04:00
Unknwon
a617d52374 2fa: initial support (#945) 2017-04-06 00:14:30 -04:00
Unknwon
624474386a templates/repo/branches: fix links for mirror repository
Also added new pull request button for stale branches.
2017-04-05 17:59:22 -04:00
Unknwon
e0a787b5ee Update locales 2017-04-05 13:26:53 -04:00
Unknwon
63598688e4 pkg/markup: init default sanitizer.policy
App would panic if user has validation error on installation and
the sanitizer is not yet built. Therefore we need a minimal valid
object for sanitizer at start.
2017-04-05 13:12:05 -04:00
Unknwon
497cdc9250 user/setting: reorder navbar 2017-04-05 09:27:42 -04:00
Unknwon
edaf14f2b6 Refactoring: remove tool.TplName 2017-04-05 09:17:21 -04:00
Unknwon
6fbb984ebf Refactoring: rename pkg/base -> pkg/tool 2017-04-05 09:05:40 -04:00
Unknwon
ba151eda0a css: improve fonts under Windows 2017-04-04 21:05:01 -04:00
Unknwon
c05717a5f0 models/mirror: feed git.IsRepoURLAccessible with raw mirror address 2017-04-04 20:42:18 -04:00
Unknwon
5a488b6517 models/mirror: unescape credentials at read (#4014)
If we save credentials already escaped, 'url.QueryEscape' still
escapes it and makes the credentials become incorrect.
2017-04-04 20:21:35 -04:00
Unknwon
ae1d50d19a models/mirror: escape credentials before write mirror address (#4014)
Special characters such as '@', ';', '#' and ':' could occur in
password portion of credentials, which breaks the interpretation
and saves 'config' file in with extra characters that are not
recognized by Git (due to INI library).
2017-04-04 19:40:46 -04:00
Unknwon
fe25effe7c repo/http: fix client is not informed to provide credentials
When Git client has cached credentials for a site, missing response
header 'WWW-Authenticate: Basic realm="."' will result in Git client
does not prompt user to input credentials again but plain error
message and halts push/pull process.
2017-04-04 19:36:30 -04:00
Unknwon
d05395fe90 Refactoring: rename modules -> pkg
Reasons to change:

1. Shorter than 'modules'
2. More generally used by other Go projects
3. Corresponds to the naming of '$GOPATH/pkg' directory
2017-04-04 19:29:59 -04:00
Unknwon
37b10666de modules/context: add *Context. ServerError method
Also use constants from net/http to replace raw integers.
2017-04-04 19:25:05 -04:00
Unknwon
41c8e87be8 repo/commit: improve error detection
Response 404 not 500 for raw diff if object does not exist.
2017-04-04 02:01:29 -04:00
Unknwon
55afc1ad21 models/repo_diff: move core functions to gogits/git-module 2017-04-04 01:45:57 -04:00
Unknwon
16c6ca72cd css: fix font of .ui.label.button style 2017-04-04 01:19:47 -04:00
Unknwon
b873ec2bce templates/repo/branches: hide pull request button if not allowed (#4377) 2017-04-03 22:24:21 -04:00
Unknwon
1bc805bb4b public: update Semantic UI 2.2.7 -> 2.2.10
[CI SKIP]
2017-04-03 22:20:17 -04:00
Unknwon
348c75c91b issue: response wrong type of comment from AJAX 2017-04-03 20:06:15 -04:00
Unknwon
76ebdb265b css: update fonts
[CI SKIP]
2017-04-03 18:20:49 -04:00
Unknwon
88ae3510ff Prepare release 2017-04-03 16:26:43 -04:00
Unknwon
c07899701a vendor: update github.com/gogits/git-module 2017-04-03 15:09:53 -04:00
Unknwon
ab42671c63 repo: handle git.ErrUnsupportedVersion error type 2017-04-01 17:56:55 -04:00
Unknwon
b3ac33cbcf vendor: update github.com/gogits/git-module 2017-04-01 17:50:11 -04:00
Unknwon
3b94162803 modules/setting: set default session GC interval to 3600s 2017-03-31 23:55:42 -04:00
Unknwon
52aade232d modes: fix test compile error 2017-03-31 18:28:08 -04:00
Unknwon
3a9276307c modules/markup: move common functions to markup.go 2017-03-31 17:46:57 -04:00
Unknwon
ca6326c937 modules/base: move file-related functions to file.go 2017-03-31 17:20:05 -04:00
Unknwon
8da16ac302 modules/markup: rename Markdown render fucntions
The unified function 'Markdown' accepts both string or []byte type
input and renders to HTML with []byte type.
2017-03-31 16:37:30 -04:00
Unknwon
761bb3cf53 modules/markup: protect sanitizer from possible modification
Only expose public APIs for 'Sanitize' and 'SanitizeBytes' to
eliminate unintentional modifications to sanitizer policy. Also
use 'sync.Once' to make sure multiple calls of 'NewSanitizer' is
safe (although should never happen, but this is a better way).
2017-03-31 16:19:10 -04:00
Unknwon
c1c269d9ef modules: rename markdown -> markup
To further support more markup languages (e.g. Org-mode, AsciiDoc,
reStructuredText), the name 'markdown' is inappropriate.

This is the first step towards more markup language support.
2017-03-31 15:29:43 -04:00
Unknwon
9edac05e05 templates/repo: improve README icon and font 2017-03-31 15:11:40 -04:00
Unknwon
9c1620d49c css: font-family fixes for Chinese 2017-03-31 14:13:25 -04:00
John Behm
65bb6eb284 locale: update TRANSLATORS (#4372)
* Update TRANSLATORS

* Update TRANSLATORS
2017-03-31 12:37:46 -04:00
Unknwon
aff55ff105 vendor: update github.com/go-macaron/captcha
[CI SKIP]
2017-03-30 12:35:43 -04:00
Unknwon
4a67bb5806 migrations.v17: skip if table not exist 2017-03-30 11:37:27 -04:00
Unknwon
1afafde3b3 user/setting: preserve user input with validation error (#1123) 2017-03-30 01:03:44 -04:00
Unknwon
ab634ce61a cmd/web: fix routes requires sign in (#4359)
Redirect user to sign in page when visit private repository with
public issues if user want to post comment or create new issue.
2017-03-30 00:34:20 -04:00
Unknwon
9d06ebd01a markdown: improve filter of class attribute for code blocks
Only allow HighlightJS specific classes.

Reported by ChALkeR.
2017-03-29 19:52:53 -04:00
Kyle McCullough
09723ec0e5 migration.v17: handle mysql error (#4361) 2017-03-29 19:02:07 -04:00
Hassan Amouhzi
864761c2d0 js: use jQuery .find() (#4343) 2017-03-28 17:36:48 -04:00
Unknwon
abe7f7bc36 migration.v17: add nil error check 2017-03-28 16:38:16 -04:00
Unknwon
717bcc4ad8 migration/v17: skip if protect_branch_whitelist table not exist (#4355) 2017-03-28 11:20:58 -04:00
Unknwon
11ffdac3f8 org/dashboard: fix wrong repository count (#4351)
Should not include count for inaccessible repositories.
2017-03-28 11:16:29 -04:00
David Beitey
cf7d5d0c56 docker: fix heading in README.md (#4353)
The unicode non-breaking space character was breaking the heading format; this switches that character for an ASCII space.
2017-03-28 07:50:36 -04:00
472 changed files with 37452 additions and 22979 deletions

View File

@@ -7,12 +7,14 @@ watch_all = true
watch_dirs = [
"$WORKDIR/cmd",
"$WORKDIR/models",
"$WORKDIR/modules",
"$WORKDIR/routers"
"$WORKDIR/pkg",
"$WORKDIR/routes"
]
watch_exts = [".go"]
ignore_files = [".+_test.go"]
build_delay = 1500
interrupt_timout = 1
graceful_kill = true
cmds = [
["make", "build-dev"], # TAGS=sqlite cert pam tidb
["./gogs", "web"]

9
.gitattributes vendored
View File

@@ -1,11 +1,10 @@
public/conf/gitignore/* linguist-vendored
public/conf/license/* linguist-vendored
conf/gitignore/* linguist-vendored
conf/license/* linguist-vendored
public/assets/* linguist-vendored
public/plugins/* linguist-vendored
public/plugins/* linguist-vendored
public/css/themes/* linguist-vendored
public/css/github.min.css linguist-vendored
public/css/semantic-2.2.7.min.css linguist-vendored
public/css/semantic-2.2.10.min.css linguist-vendored
public/js/libs/* linguist-vendored
public/js/jquery-1.11.3.min.js linguist-vendored
public/js/semantic-2.2.7.min.js linguist-vendored
public/js/semantic-2.2.10.min.js linguist-vendored

View File

@@ -1,9 +1,9 @@
language: go
go:
- 1.5.x
- 1.6.x
- 1.7.x
- 1.8.x
- 1.9.x
- master
before_install:

View File

@@ -3,20 +3,34 @@ FROM alpine:3.5
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-amd64 /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
&& echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories \
&& apk --no-cache --no-progress add \
bash \
ca-certificates \
curl \
git \
linux-pam \
openssh \
s6 \
shadow \
socat \
tzdata
ENV GOGS_CUSTOM /data/gogs
COPY . /app/gogs/build
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
COPY docker /app/gogs/docker
COPY templates /app/gogs/templates
COPY public /app/gogs/public
WORKDIR /app/gogs/build
COPY . .
RUN ./docker/build-go.sh \
&& ./docker/build.sh \
&& ./docker/finalize.sh
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000

View File

@@ -3,20 +3,34 @@ FROM aarch64/alpine:3.5
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-arm64 /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
&& echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories \
&& apk --no-cache --no-progress add \
bash \
ca-certificates \
curl \
git \
linux-pam \
openssh \
s6 \
shadow \
socat \
tzdata
ENV GOGS_CUSTOM /data/gogs
COPY . /app/gogs/build
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
COPY docker /app/gogs/docker
COPY templates /app/gogs/templates
COPY public /app/gogs/public
WORKDIR /app/gogs/build
COPY . .
RUN ./docker/build-go.sh \
&& ./docker/build.sh \
&& ./docker/finalize.sh
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000

View File

@@ -3,20 +3,34 @@ FROM armhf/alpine:3.5
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-armhf /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
&& echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories \
&& apk --no-cache --no-progress add \
bash \
ca-certificates \
curl \
git \
linux-pam \
openssh \
s6 \
shadow \
socat \
tzdata
ENV GOGS_CUSTOM /data/gogs
COPY . /app/gogs/build
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
COPY docker /app/gogs/docker
COPY templates /app/gogs/templates
COPY public /app/gogs/public
WORKDIR /app/gogs/build
COPY . .
RUN ./docker/build-go.sh \
&& ./docker/build.sh \
&& ./docker/finalize.sh
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000

58
Dockerfile.rpihub Normal file
View File

@@ -0,0 +1,58 @@
FROM armhf/alpine:3.5
ENV GOGS_CUSTOM /data/gogs
ENV QEMU_EXECVE 1
# For cross compile on dockerhub
################################
COPY ./docker/armhf/qemu-arm-static /usr/bin/
COPY ./docker/armhf/resin-xbuild /usr/bin/
RUN [ "/usr/bin/qemu-arm-static", "/bin/sh", "-c", "ln -s resin-xbuild /usr/bin/cross-build-start; ln -s resin-xbuild /usr/bin/cross-build-end; ln /bin/sh /bin/sh.real" ]
RUN [ "cross-build-start" ]
# Prepare the container
#######################
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-armhf /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories \
&& apk --no-cache --no-progress add \
bash \
ca-certificates \
curl \
git \
linux-pam \
openssh \
s6 \
shadow \
socat \
tzdata
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
COPY docker /app/gogs/docker
COPY templates /app/gogs/templates
COPY public /app/gogs/public
WORKDIR /app/gogs/build
COPY . .
RUN ./docker/build-go.sh \
&& ./docker/build.sh \
&& ./docker/finalize.sh
# For cross compile on dockerhub
################################
RUN [ "cross-build-end" ]
# Configure Docker Container
############################
VOLUME ["/data"]
EXPOSE 22 3000
ENTRYPOINT ["/app/gogs/docker/start.sh"]
CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"]

View File

@@ -1,9 +1,9 @@
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)"
LDFLAGS += -X "github.com/gogits/gogs/pkg/setting.BuildTime=$(shell date -u '+%Y-%m-%d %I:%M:%S %Z')"
LDFLAGS += -X "github.com/gogits/gogs/pkg/setting.BuildGitHash=$(shell git rev-parse HEAD)"
DATA_FILES := $(shell find conf | sed 's/ /\\ /g')
LESS_FILES := $(wildcard public/less/gogs.less public/less/_*.less)
GENERATED := modules/bindata/bindata.go public/css/gogs.css
GENERATED := pkg/bindata/bindata.go public/css/gogs.css
OS := $(shell uname)
@@ -25,9 +25,12 @@ check: test
dist: release
web: build
./gogs web
govet:
$(GOVET) gogs.go
$(GOVET) models modules routers
$(GOVET) models pkg routes
build: $(GENERATED)
go install $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
@@ -50,9 +53,9 @@ pack:
release: build pack
bindata: modules/bindata/bindata.go
bindata: pkg/bindata/bindata.go
modules/bindata/bindata.go: $(DATA_FILES)
pkg/bindata/bindata.go: $(DATA_FILES)
go-bindata -o=$@ -ignore="\\.DS_Store|README.md|TRANSLATORS" -pkg=bindata conf/...
less: public/css/gogs.css
@@ -70,11 +73,11 @@ test:
go test -cover -race ./...
fixme:
grep -rnw "FIXME" cmd routers models modules
grep -rnw "FIXME" cmd routers models pkg
todo:
grep -rnw "TODO" cmd routers models modules
grep -rnw "TODO" cmd routers models pkg
# Legacy code should be remove by the time of release
legacy:
grep -rnw "LEGACY" cmd routers models modules
grep -rnw "LEGACY" cmd routes models pkg

View File

@@ -1,4 +1,4 @@
Gogs [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs) [![Build status](https://ci.appveyor.com/api/projects/status/b9uu5ejl933e2wlt/branch/master?svg=true)](https://ci.appveyor.com/project/Unknwon/gogs/branch/master) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/gogs/localized.svg)](https://crowdin.com/project/gogs) [![Sourcegraph](https://sourcegraph.com/github.com/gogits/gogs/-/badge.svg)](https://sourcegraph.com/github.com/gogits/gogs?badge) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/gogits/gogs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Gogs [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs) [![Build status](https://ci.appveyor.com/api/projects/status/b9uu5ejl933e2wlt/branch/master?svg=true)](https://ci.appveyor.com/project/Unknwon/gogs/branch/master) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/gogs/localized.svg)](https://crowdin.com/project/gogs)
=====================
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)
@@ -47,11 +47,12 @@ The goal of this project is to make the easiest, fastest, and most painless way
- Migrate and mirror repository and its wiki
- Web editor for repository files and wiki
- Jupyter Notebook
- Two-factor authentication
- Gravatar and Federated avatar with custom source
- Mail service
- Administration panel
- Supports MySQL, PostgreSQL, SQLite3, MSSQL and [TiDB](https://github.com/pingcap/tidb) (experimental)
- Multi-language support ([23 languages](https://crowdin.com/project/gogs))
- Supports MySQL, PostgreSQL, SQLite3, MSSQL and [TiDB](https://github.com/pingcap/tidb) (via MySQL protocol)
- Multi-language support ([26 languages](https://crowdin.com/project/gogs))
## Hardware Requirements
@@ -113,6 +114,7 @@ There are 5 ways to install Gogs:
- [Kanboard](http://kanboard.net/plugin/gogs-webhook) (Project Management)
- [BearyChat](https://bearychat.com/) (Team Communication)
- [HiWork](http://www.hiwork.cc/) (Team Communication)
- [GitPitch](https://gitpitch.com/) (Markdown Presentations)
### Product Support

View File

@@ -9,7 +9,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
## 项目概览
- 有关基本用法和变更日志,请通过 [使用手册](https://gogs.io/docs/intro/) 查看。
- 有关基本用法和变更日志,请通过 [使用手册](https://gogs.io/docs/intro) 查看。
- 想要先睹为快?直接去 [在线体验](https://try.gogs.io/gogs/gogs) 。
- 使用过程中遇到问题?尝试从 [故障排查](https://gogs.io/docs/intro/troubleshooting.html) 页面或 [用户论坛](https://discuss.gogs.io/) 获取帮助。
- 希望帮助多国语言界面的翻译吗?请立即访问 [详情页面](https://gogs.io/docs/features/i18n.html)
@@ -29,10 +29,11 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
- 支持在线编辑仓库文件和 Wiki
- 支持自定义源的 Gravatar 和 Federated Avatar
- 支持 Jupyter Notebook
- 支持两步验证登录
- 支持邮件服务
- 支持后台管理面板
- 支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 [TiDB](https://github.com/pingcap/tidb)实验性支持) 数据库
- 支持多语言本地化([23 种语言]([more](https://crowdin.com/project/gogs))
- 支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 [TiDB](https://github.com/pingcap/tidb)通过 MySQL 协议)数据库
- 支持多语言本地化([26 种语言]([more](https://crowdin.com/project/gogs))
## 硬件要求
@@ -82,6 +83,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
- [Kanboard](http://kanboard.net/plugin/gogs-webhook)(项目管理)
- [BearyChat](https://bearychat.com/)(团队交流)
- [HiWork](http://www.hiwork.cc/)(团队交流)
- [GitPitch](https://gitpitch.com/)Markdown 演示)
### 产品支持

View File

@@ -6,21 +6,30 @@ package cmd
import (
"fmt"
"reflect"
"runtime"
"github.com/urfave/cli"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
var (
Admin = cli.Command{
Name: "admin",
Usage: "Preform admin operations on command line",
Usage: "Perform admin operations on command line",
Description: `Allow using internal logic of Gogs without hacking into the source code
to make automatic initialization process more smoothly`,
Subcommands: []cli.Command{
subcmdCreateUser,
subcmdDeleteInactivateUsers,
subcmdDeleteRepositoryArchives,
subcmdDeleteMissingRepositories,
subcmdGitGcRepos,
subcmdRewriteAllPublicKeys,
subcmdSyncRepositoryHooks,
subcmdReinitMissingRepositories,
},
}
@@ -36,6 +45,90 @@ to make automatic initialization process more smoothly`,
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdDeleteInactivateUsers = cli.Command{
Name: "delete-inactive-users",
Usage: "Delete all inactive accounts",
Action: adminDashboardOperation(
models.DeleteInactivateUsers,
"All inactivate accounts have been deleted successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdDeleteRepositoryArchives = cli.Command{
Name: "delete-repository-archives",
Usage: "Delete all repositories archives",
Action: adminDashboardOperation(
models.DeleteRepositoryArchives,
"All repositories archives have been deleted successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdDeleteMissingRepositories = cli.Command{
Name: "delete-missing-repositories",
Usage: "Delete all repository records that lost Git files",
Action: adminDashboardOperation(
models.DeleteMissingRepositories,
"All repositories archives have been deleted successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdGitGcRepos = cli.Command{
Name: "collect-garbage",
Usage: "Do garbage collection on repositories",
Action: adminDashboardOperation(
models.GitGcRepos,
"All repositories have done garbage collection successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdRewriteAllPublicKeys = cli.Command{
Name: "rewrite-public-keys",
Usage: "Rewrite '.ssh/authorized_keys' file (caution: non-Gogs keys will be lost)",
Action: adminDashboardOperation(
models.RewriteAllPublicKeys,
"All public keys have been rewritten successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdSyncRepositoryHooks = cli.Command{
Name: "resync-hooks",
Usage: "Resync pre-receive, update and post-receive hooks",
Action: adminDashboardOperation(
models.SyncRepositoryHooks,
"All repositories' pre-receive, update and post-receive hooks have been resynced successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
subcmdReinitMissingRepositories = cli.Command{
Name: "reinit-missing-repositories",
Usage: "Reinitialize all repository records that lost Git files",
Action: adminDashboardOperation(
models.ReinitMissingRepositories,
"All repository records that lost Git files have been reinitialized successfully",
),
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
)
func runCreateUser(c *cli.Context) error {
@@ -68,3 +161,23 @@ func runCreateUser(c *cli.Context) error {
fmt.Printf("New user '%s' has been successfully created!\n", c.String("name"))
return nil
}
func adminDashboardOperation(operation func() error, successMessage string) func(*cli.Context) error {
return func(c *cli.Context) error {
if c.IsSet("config") {
setting.CustomConf = c.String("config")
}
setting.NewContext()
models.LoadConfigs()
models.SetEngine()
if err := operation(); err != nil {
functionName := runtime.FuncForPC(reflect.ValueOf(operation).Pointer()).Name()
return fmt.Errorf("%s: %v", functionName, err)
}
fmt.Printf("%s\n", successMessage)
return nil
}
}

View File

@@ -18,7 +18,7 @@ import (
"gopkg.in/ini.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
var Backup = cli.Command{
@@ -33,7 +33,7 @@ portable among all supported database engines.`,
boolFlag("verbose, v", "Show process details"),
stringFlag("tempdir, t", os.TempDir(), "Temporary directory path"),
stringFlag("target", "./", "Target directory path to save backup archive"),
stringFlag("archive-name", fmt.Sprintf("gogs-backup-%d.zip", time.Now().Unix()), "Name of backup archive"),
stringFlag("archive-name", fmt.Sprintf("gogs-backup-%s.zip", time.Now().Format("20060102150405")), "Name of backup archive"),
boolFlag("database-only", "Only dump database"),
boolFlag("exclude-repos", "Exclude repositories"),
},

View File

@@ -11,6 +11,7 @@ import (
"fmt"
"os"
"os/exec"
"path"
"path/filepath"
"strings"
@@ -21,9 +22,11 @@ import (
"github.com/gogits/git-module"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/httplib"
"github.com/gogits/gogs/modules/setting"
http "github.com/gogits/gogs/routers/repo"
"github.com/gogits/gogs/pkg/httplib"
"github.com/gogits/gogs/pkg/mailer"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/template"
http "github.com/gogits/gogs/routes/repo"
)
var (
@@ -124,7 +127,7 @@ func runHookPreReceive(c *cli.Context) error {
}
// Check force push
output, err := git.NewCommand("rev-list", oldCommitID, "^"+newCommitID).
output, err := git.NewCommand("rev-list", "--max-count=1", oldCommitID, "^"+newCommitID).
RunInDir(models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME)))
if err != nil {
fail("Internal error", "Fail to detect force push: %v", err)
@@ -138,7 +141,12 @@ func runHookPreReceive(c *cli.Context) error {
return nil
}
hookCmd := exec.Command(customHooksPath)
var hookCmd *exec.Cmd
if setting.IsWindows {
hookCmd = exec.Command("bash.exe", "custom_hooks/pre-receive")
} else {
hookCmd = exec.Command(customHooksPath)
}
hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME))
hookCmd.Stdout = os.Stdout
hookCmd.Stdin = buf
@@ -167,7 +175,12 @@ func runHookUpdate(c *cli.Context) error {
return nil
}
hookCmd := exec.Command(customHooksPath, args...)
var hookCmd *exec.Cmd
if setting.IsWindows {
hookCmd = exec.Command("bash.exe", append([]string{"custom_hooks/update"}, args...)...)
} else {
hookCmd = exec.Command(customHooksPath, args...)
}
hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME))
hookCmd.Stdout = os.Stdout
hookCmd.Stdin = os.Stdin
@@ -184,6 +197,13 @@ func runHookPostReceive(c *cli.Context) error {
}
setup(c, "hooks/post-receive.log", true)
// Post-receive hook does more than just gather Git information,
// so we need to setup additional services for email notifications.
setting.NewPostReceiveHookServices()
mailer.NewContext()
mailer.InitMailRender(path.Join(setting.StaticRootPath, "templates/mail"),
path.Join(setting.CustomPath, "templates/mail"), template.NewFuncMap())
isWiki := strings.Contains(os.Getenv(http.ENV_REPO_CUSTOM_HOOKS_PATH), ".wiki.git/")
buf := bytes.NewBuffer(nil)
@@ -240,7 +260,12 @@ func runHookPostReceive(c *cli.Context) error {
return nil
}
hookCmd := exec.Command(customHooksPath)
var hookCmd *exec.Cmd
if setting.IsWindows {
hookCmd = exec.Command("bash.exe", "custom_hooks/post-receive")
} else {
hookCmd = exec.Command(customHooksPath)
}
hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME))
hookCmd.Stdout = os.Stdout
hookCmd.Stdin = buf

View File

@@ -15,7 +15,7 @@ import (
"github.com/Unknwon/com"
"github.com/urfave/cli"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
var (

View File

@@ -16,7 +16,7 @@ import (
"gopkg.in/ini.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
var Restore = cli.Command{
@@ -24,10 +24,10 @@ var Restore = cli.Command{
Usage: "Restore files and database from backup",
Description: `Restore imports all related files and database from a backup archive.
The backup version must lower or equal to current Gogs version. You can also import
backup from other database engines, which is useful for database migrating.
backup from other database engines, which is useful for database migrating.
If corresponding files or database tables are not presented in the archive, they will
be skipped and remian unchanged.`,
If corresponding files or database tables are not presented in the archive, they will
be skipped and remain unchanged.`,
Action: runRestore,
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
@@ -83,7 +83,7 @@ func runRestore(c *cli.Context) error {
// Database
dbDir := path.Join(archivePath, "db")
if err = models.ImportDatabase(dbDir); err != nil {
if err = models.ImportDatabase(dbDir, c.Bool("verbose")); err != nil {
log.Fatal(0, "Fail to import database: %v", err)
}
@@ -101,14 +101,21 @@ func runRestore(c *cli.Context) error {
// Data files
if !c.Bool("database-only") {
os.MkdirAll(setting.AppDataPath, os.ModePerm)
for _, dir := range []string{"attachments", "avatars"} {
// Skip if backup archive does not have corresponding data
srcPath := path.Join(archivePath, "data", dir)
if !com.IsDir(srcPath) {
continue
}
dirPath := path.Join(setting.AppDataPath, dir)
if com.IsExist(dirPath) {
if err = os.Rename(dirPath, dirPath+".bak"); err != nil {
log.Fatal(0, "Fail to backup current 'data': %v", err)
}
}
if err = os.Rename(path.Join(archivePath, "data", dir), dirPath); err != nil {
if err = os.Rename(srcPath, dirPath); err != nil {
log.Fatal(0, "Fail to import 'data': %v", err)
}
}

View File

@@ -18,8 +18,8 @@ import (
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/setting"
http "github.com/gogits/gogs/routers/repo"
"github.com/gogits/gogs/pkg/setting"
http "github.com/gogits/gogs/routes/repo"
)
const (

View File

@@ -30,19 +30,19 @@ import (
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/bindata"
"github.com/gogits/gogs/modules/context"
"github.com/gogits/gogs/modules/form"
"github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/template"
"github.com/gogits/gogs/routers"
"github.com/gogits/gogs/routers/admin"
apiv1 "github.com/gogits/gogs/routers/api/v1"
"github.com/gogits/gogs/routers/dev"
"github.com/gogits/gogs/routers/org"
"github.com/gogits/gogs/routers/repo"
"github.com/gogits/gogs/routers/user"
"github.com/gogits/gogs/pkg/bindata"
"github.com/gogits/gogs/pkg/context"
"github.com/gogits/gogs/pkg/form"
"github.com/gogits/gogs/pkg/mailer"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/template"
"github.com/gogits/gogs/routes"
"github.com/gogits/gogs/routes/admin"
apiv1 "github.com/gogits/gogs/routes/api/v1"
"github.com/gogits/gogs/routes/dev"
"github.com/gogits/gogs/routes/org"
"github.com/gogits/gogs/routes/repo"
"github.com/gogits/gogs/routes/user"
)
var Web = cli.Command{
@@ -85,7 +85,7 @@ func newMacaron() *macaron.Macaron {
m.Use(gzip.Gziper())
}
if setting.Protocol == setting.SCHEME_FCGI {
m.SetURLPrefix(setting.AppSubUrl)
m.SetURLPrefix(setting.AppSubURL)
}
m.Use(macaron.Static(
path.Join(setting.StaticRootPath, "public"),
@@ -120,7 +120,7 @@ func newMacaron() *macaron.Macaron {
localFiles[name] = bindata.MustAsset("conf/locale/" + name)
}
m.Use(i18n.I18n(i18n.Options{
SubURL: setting.AppSubUrl,
SubURL: setting.AppSubURL,
Files: localFiles,
CustomDirectory: path.Join(setting.CustomPath, "conf/locale"),
Langs: setting.Langs,
@@ -134,7 +134,7 @@ func newMacaron() *macaron.Macaron {
Interval: setting.CacheInterval,
}))
m.Use(captcha.Captchaer(captcha.Options{
SubURL: setting.AppSubUrl,
SubURL: setting.AppSubURL,
}))
m.Use(session.Sessioner(setting.SessionConfig))
m.Use(csrf.Csrfer(csrf.Options{
@@ -142,7 +142,7 @@ func newMacaron() *macaron.Macaron {
Cookie: setting.CSRFCookieName,
SetCookie: true,
Header: "X-Csrf-Token",
CookiePath: setting.AppSubUrl,
CookiePath: setting.AppSubURL,
}))
m.Use(toolbox.Toolboxer(m, toolbox.Options{
HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{
@@ -156,11 +156,11 @@ func newMacaron() *macaron.Macaron {
return m
}
func runWeb(ctx *cli.Context) error {
if ctx.IsSet("config") {
setting.CustomConf = ctx.String("config")
func runWeb(c *cli.Context) error {
if c.IsSet("config") {
setting.CustomConf = c.String("config")
}
routers.GlobalInit()
routes.GlobalInit()
checkVersion()
m := newMacaron()
@@ -175,23 +175,28 @@ func runWeb(ctx *cli.Context) error {
// FIXME: not all routes need go through same middlewares.
// Especially some AJAX requests, we can reduce middleware number to improve performance.
// Routers.
m.Get("/", ignSignIn, routers.Home)
m.Get("/", ignSignIn, routes.Home)
m.Group("/explore", func() {
m.Get("", func(ctx *context.Context) {
ctx.Redirect(setting.AppSubUrl + "/explore/repos")
m.Get("", func(c *context.Context) {
c.Redirect(setting.AppSubURL + "/explore/repos")
})
m.Get("/repos", routers.ExploreRepos)
m.Get("/users", routers.ExploreUsers)
m.Get("/organizations", routers.ExploreOrganizations)
m.Get("/repos", routes.ExploreRepos)
m.Get("/users", routes.ExploreUsers)
m.Get("/organizations", routes.ExploreOrganizations)
}, ignSignIn)
m.Combo("/install", routers.InstallInit).Get(routers.Install).
Post(bindIgnErr(form.Install{}), routers.InstallPost)
m.Combo("/install", routes.InstallInit).Get(routes.Install).
Post(bindIgnErr(form.Install{}), routes.InstallPost)
m.Get("/^:type(issues|pulls)$", reqSignIn, user.Issues)
// ***** START: User *****
m.Group("/user", func() {
m.Get("/login", user.SignIn)
m.Post("/login", bindIgnErr(form.SignIn{}), user.SignInPost)
m.Group("/login", func() {
m.Combo("").Get(user.Login).
Post(bindIgnErr(form.SignIn{}), user.LoginPost)
m.Combo("/two_factor").Get(user.LoginTwoFactor).Post(user.LoginTwoFactorPost)
m.Combo("/two_factor_recovery_code").Get(user.LoginTwoFactorRecoveryCode).Post(user.LoginTwoFactorRecoveryCodePost)
})
m.Get("/sign_up", user.SignUp)
m.Post("/sign_up", bindIgnErr(form.Register{}), user.SignUpPost)
m.Get("/reset_password", user.ResetPasswd)
@@ -212,25 +217,31 @@ func runWeb(ctx *cli.Context) error {
m.Combo("/ssh").Get(user.SettingsSSHKeys).
Post(bindIgnErr(form.AddSSHKey{}), user.SettingsSSHKeysPost)
m.Post("/ssh/delete", user.DeleteSSHKey)
m.Combo("/applications").Get(user.SettingsApplications).
Post(bindIgnErr(form.NewAccessToken{}), user.SettingsApplicationsPost)
m.Post("/applications/delete", user.SettingsDeleteApplication)
m.Group("/organizations", func() {
m.Get("", user.SettingsOrganizations)
m.Post("/leave", user.SettingsLeaveOrganization)
m.Group("/security", func() {
m.Get("", user.SettingsSecurity)
m.Combo("/two_factor_enable").Get(user.SettingsTwoFactorEnable).
Post(user.SettingsTwoFactorEnablePost)
m.Combo("/two_factor_recovery_codes").Get(user.SettingsTwoFactorRecoveryCodes).
Post(user.SettingsTwoFactorRecoveryCodesPost)
m.Post("/two_factor_disable", user.SettingsTwoFactorDisable)
})
m.Group("/repositories", func() {
m.Get("", user.SettingsRepos)
m.Post("/leave", user.SettingsLeaveRepo)
})
m.Group("/organizations", func() {
m.Get("", user.SettingsOrganizations)
m.Post("/leave", user.SettingsLeaveOrganization)
})
m.Combo("/applications").Get(user.SettingsApplications).
Post(bindIgnErr(form.NewAccessToken{}), user.SettingsApplicationsPost)
m.Post("/applications/delete", user.SettingsDeleteApplication)
m.Route("/delete", "GET,POST", user.SettingsDelete)
}, reqSignIn, func(ctx *context.Context) {
ctx.Data["PageIsUserSettings"] = true
}, reqSignIn, func(c *context.Context) {
c.Data["PageIsUserSettings"] = true
})
m.Group("/user", func() {
// r.Get("/feeds", binding.Bind(form.Feeds{}), user.Feeds)
m.Any("/activate", user.Activate)
m.Any("/activate_email", user.ActivateEmail)
m.Get("/email2user", user.Email2User)
@@ -289,28 +300,28 @@ func runWeb(ctx *cli.Context) error {
m.Get("/stars", user.Stars)
})
m.Get("/attachments/:uuid", func(ctx *context.Context) {
attach, err := models.GetAttachmentByUUID(ctx.Params(":uuid"))
m.Get("/attachments/:uuid", func(c *context.Context) {
attach, err := models.GetAttachmentByUUID(c.Params(":uuid"))
if err != nil {
ctx.NotFoundOrServerError("GetAttachmentByUUID", models.IsErrAttachmentNotExist, err)
c.NotFoundOrServerError("GetAttachmentByUUID", models.IsErrAttachmentNotExist, err)
return
} else if !com.IsFile(attach.LocalPath()) {
ctx.NotFound()
c.NotFound()
return
}
fr, err := os.Open(attach.LocalPath())
if err != nil {
ctx.Handle(500, "Open", err)
c.Handle(500, "Open", err)
return
}
defer fr.Close()
ctx.Header().Set("Cache-Control", "public,max-age=86400")
c.Header().Set("Cache-Control", "public,max-age=86400")
fmt.Println("attach.Name:", attach.Name)
ctx.Header().Set("Content-Disposition", fmt.Sprintf(`inline; filename="%s"`, attach.Name))
if err = repo.ServeData(ctx, attach.Name, fr); err != nil {
ctx.Handle(500, "ServeData", err)
c.Header().Set("Content-Disposition", fmt.Sprintf(`inline; filename="%s"`, attach.Name))
if err = repo.ServeData(c, attach.Name, fr); err != nil {
c.Handle(500, "ServeData", err)
return
}
})
@@ -334,9 +345,9 @@ func runWeb(ctx *cli.Context) error {
m.Group("", func() {
m.Get("/create", org.Create)
m.Post("/create", bindIgnErr(form.CreateOrg{}), org.CreatePost)
}, func(ctx *context.Context) {
if !ctx.User.CanCreateOrganization() {
ctx.NotFound()
}, func(c *context.Context) {
if !c.User.CanCreateOrganization() {
c.NotFound()
}
})
@@ -376,10 +387,12 @@ func runWeb(ctx *cli.Context) error {
m.Post("/gogs/new", bindIgnErr(form.NewWebhook{}), repo.WebHooksNewPost)
m.Post("/slack/new", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksNewPost)
m.Post("/discord/new", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksNewPost)
m.Post("/dingtalk/new", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksNewPost)
m.Get("/:id", repo.WebHooksEdit)
m.Post("/gogs/:id", bindIgnErr(form.NewWebhook{}), repo.WebHooksEditPost)
m.Post("/slack/:id", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksEditPost)
m.Post("/discord/:id", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksEditPost)
m.Post("/dingtalk/:id", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksEditPost)
})
m.Route("/delete", "GET,POST", org.SettingsDelete)
@@ -414,9 +427,9 @@ func runWeb(ctx *cli.Context) error {
m.Post("/default_branch", repo.UpdateDefaultBranch)
m.Combo("/*").Get(repo.SettingsProtectedBranch).
Post(bindIgnErr(form.ProtectBranch{}), repo.SettingsProtectedBranchPost)
}, func(ctx *context.Context) {
if ctx.Repo.Repository.IsMirror {
ctx.NotFound()
}, func(c *context.Context) {
if c.Repo.Repository.IsMirror {
c.NotFound()
return
}
})
@@ -428,9 +441,11 @@ func runWeb(ctx *cli.Context) error {
m.Post("/gogs/new", bindIgnErr(form.NewWebhook{}), repo.WebHooksNewPost)
m.Post("/slack/new", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksNewPost)
m.Post("/discord/new", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksNewPost)
m.Post("/dingtalk/new", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksNewPost)
m.Post("/gogs/:id", bindIgnErr(form.NewWebhook{}), repo.WebHooksEditPost)
m.Post("/slack/:id", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksEditPost)
m.Post("/discord/:id", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksEditPost)
m.Post("/dingtalk/:id", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksEditPost)
m.Group("/:id", func() {
m.Get("", repo.WebHooksEdit)
@@ -451,8 +466,8 @@ func runWeb(ctx *cli.Context) error {
m.Post("/delete", repo.DeleteDeployKey)
})
}, func(ctx *context.Context) {
ctx.Data["PageIsSettings"] = true
}, func(c *context.Context) {
c.Data["PageIsSettings"] = true
})
}, reqSignIn, context.RepoAssignment(), reqRepoAdmin, context.RepoRef())
@@ -460,7 +475,10 @@ func runWeb(ctx *cli.Context) error {
m.Group("/:username/:reponame", func() {
m.Get("/issues", repo.RetrieveLabels, repo.Issues)
m.Get("/issues/:index", repo.ViewIssue)
m.Get("/labels/", repo.RetrieveLabels, repo.Labels)
m.Get("/milestones", repo.Milestones)
}, ignSignIn, context.RepoAssignment(true))
m.Group("/:username/:reponame", func() {
// FIXME: should use different URLs but mostly same logic for comments of issue and pull reuqest.
// So they can apply their own enable/disable logic on routers.
m.Group("/issues", func() {
@@ -477,10 +495,7 @@ func runWeb(ctx *cli.Context) error {
m.Post("", repo.UpdateCommentContent)
m.Post("/delete", repo.DeleteComment)
})
m.Get("/labels/", repo.RetrieveLabels, repo.Labels)
m.Get("/milestones", repo.Milestones)
}, ignSignIn, context.RepoAssignment(true))
}, reqSignIn, context.RepoAssignment(true))
m.Group("/:username/:reponame", func() {
m.Group("/wiki", func() {
m.Get("/?:page", repo.Wiki)
@@ -519,11 +534,11 @@ func runWeb(ctx *cli.Context) error {
m.Post("/delete", repo.DeleteRelease)
m.Get("/edit/*", repo.EditRelease)
m.Post("/edit/*", bindIgnErr(form.EditRelease{}), repo.EditReleasePost)
}, repo.MustBeNotBare, reqRepoWriter, func(ctx *context.Context) {
ctx.Data["PageIsViewFiles"] = true
}, repo.MustBeNotBare, reqRepoWriter, func(c *context.Context) {
c.Data["PageIsViewFiles"] = true
})
// FIXME: Should use ctx.Repo.PullRequest to unify template, currently we have inconsistent URL
// FIXME: Should use c.Repo.PullRequest to unify template, currently we have inconsistent URL
// for PR in same repository. After select branch on the page, the URL contains redundant head user name.
// e.g. /org1/test-repo/compare/master...org1:develop
// which should be /org1/test-repo/compare/master...develop
@@ -544,19 +559,19 @@ func runWeb(ctx *cli.Context) error {
Post(bindIgnErr(form.UploadRepoFile{}), repo.UploadFilePost)
m.Post("/upload-file", repo.UploadFileToServer)
m.Post("/upload-remove", bindIgnErr(form.RemoveUploadFile{}), repo.RemoveUploadFileFromServer)
}, func(ctx *context.Context) {
}, func(c *context.Context) {
if !setting.Repository.Upload.Enabled {
ctx.NotFound()
c.NotFound()
return
}
})
}, repo.MustBeNotBare, reqRepoWriter, context.RepoRef(), func(ctx *context.Context) {
if !ctx.Repo.CanEnableEditor() {
ctx.NotFound()
}, repo.MustBeNotBare, reqRepoWriter, context.RepoRef(), func(c *context.Context) {
if !c.Repo.CanEnableEditor() {
c.NotFound()
return
}
ctx.Data["PageIsViewFiles"] = true
c.Data["PageIsViewFiles"] = true
})
}, reqSignIn, context.RepoAssignment())
@@ -571,8 +586,8 @@ func runWeb(ctx *cli.Context) error {
m.Get("", repo.Branches)
m.Get("/all", repo.AllBranches)
m.Post("/delete/*", reqSignIn, reqRepoWriter, repo.DeleteBranchPost)
}, repo.MustBeNotBare, func(ctx *context.Context) {
ctx.Data["PageIsViewFiles"] = true
}, repo.MustBeNotBare, func(c *context.Context) {
c.Data["PageIsViewFiles"] = true
})
m.Group("/wiki", func() {
@@ -631,21 +646,21 @@ func runWeb(ctx *cli.Context) error {
}, ignSignIn)
// robots.txt
m.Get("/robots.txt", func(ctx *context.Context) {
m.Get("/robots.txt", func(c *context.Context) {
if setting.HasRobotsTxt {
ctx.ServeFileContent(path.Join(setting.CustomPath, "robots.txt"))
c.ServeFileContent(path.Join(setting.CustomPath, "robots.txt"))
} else {
ctx.Error(404)
c.NotFound()
}
})
// Not found handler.
m.NotFound(routers.NotFound)
m.NotFound(routes.NotFound)
// Flag for port number in case first time run conflict.
if ctx.IsSet("port") {
setting.AppUrl = strings.Replace(setting.AppUrl, setting.HTTPPort, ctx.String("port"), 1)
setting.HTTPPort = ctx.String("port")
if c.IsSet("port") {
setting.AppURL = strings.Replace(setting.AppURL, setting.HTTPPort, c.String("port"), 1)
setting.HTTPPort = c.String("port")
}
var listenAddr string
@@ -654,15 +669,28 @@ func runWeb(ctx *cli.Context) error {
} else {
listenAddr = fmt.Sprintf("%s:%s", setting.HTTPAddr, setting.HTTPPort)
}
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubUrl)
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
var err error
switch setting.Protocol {
case setting.SCHEME_HTTP:
err = http.ListenAndServe(listenAddr, m)
case setting.SCHEME_HTTPS:
var tlsMinVersion uint16
switch setting.TLSMinVersion {
case "SSL30":
tlsMinVersion = tls.VersionSSL30
case "TLS12":
tlsMinVersion = tls.VersionTLS12
case "TLS11":
tlsMinVersion = tls.VersionTLS11
case "TLS10":
fallthrough
default:
tlsMinVersion = tls.VersionTLS10
}
server := &http.Server{Addr: listenAddr, TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS10,
MinVersion: tlsMinVersion,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
PreferServerCipherSuites: true,
CipherSuites: []uint16{

View File

@@ -56,6 +56,9 @@ DISABLE_ROUTER_LOG = false
; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes
CERT_FILE = custom/https/cert.pem
KEY_FILE = custom/https/key.pem
; Allowed TLS version values: SSL30, TLS10, TLS11, TLS12
TLS_MIN_VERSION = TLS10
; Upper level of template and static file path
; default is the path where Gogs is executed
STATIC_ROOT_PATH =
@@ -148,7 +151,7 @@ ANGLED_QUOTES = true
[http]
; Value for Access-Control-Allow-Origin header, default is not to present
ACCESS_CONTROL_ALLOW_ORIGIN =
ACCESS_CONTROL_ALLOW_ORIGIN =
; Define allowed algorithms and their minimum key length (use -1 to disable a type)
[ssh.minimum_key_sizes]
@@ -206,12 +209,12 @@ ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
ENABLE_CAPTCHA = true
[webhook]
; Types are enabled for users to use, can be "gogs", "slack", "discord"
TYPES = gogs, slack, discord
; Types are enabled for users to use, can be "gogs", "slack", "discord", "dingtalk"
TYPES = gogs, slack, discord, dingtalk
; Hook task queue length, increase if webhook shooting starts hanging
QUEUE_LENGTH = 1000
; Deliver timeout in seconds
DELIVER_TIMEOUT = 5
DELIVER_TIMEOUT = 15
; Allow insecure certification
SKIP_TLS_VERIFY = false
; Number of history information in each page
@@ -271,8 +274,8 @@ COOKIE_NAME = i_like_gogits
COOKIE_SECURE = false
; Enable set cookie, default is true
ENABLE_SET_COOKIE = true
; Session GC time interval, default is 86400
GC_INTERVAL_TIME = 86400
; Session GC time interval, default is 3600
GC_INTERVAL_TIME = 3600
; Session life time, default is 86400
SESSION_LIFE_TIME = 86400
; Cookie name for CSRF
@@ -294,7 +297,7 @@ ENABLE_FEDERATED_AVATAR = true
; Attachment settings for issues
[attachment]
; Whether attachments are enabled. Defaults to `true`
ENABLE = true
ENABLED = true
; Path for attachments. Defaults to `data/attachments`
PATH = data/attachments
; One or more allowed types, e.g. image/jpeg|image/png
@@ -346,7 +349,7 @@ MAX_DAYS = 7
; leave empty to inherit
LEVEL =
; Webhook URL
URL =
URL =
[log.xorm]
; Enable file rotation
@@ -450,8 +453,8 @@ NEWS_FEED_PAGING_NUM = 20
COMMITS_PAGING_NUM = 30
[i18n]
LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR,gl-ES,uk-UA
NAMES = English,简体中文,繁體中文(香港),繁體中文(台湾,Deutsch,français,Nederlands,latviešu,русский,日本語,español,português do Brasil,polski,български,italiano,suomi,Türkçe,čeština,српски,svenska,한국어,galego,українська
LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR,gl-ES,uk-UA,en-GB,hu-HU,sk-SK
NAMES = English,简体中文,繁體中文(香港),繁體中文(臺灣,Deutsch,français,Nederlands,latviešu,русский,日本語,español,português do Brasil,polski,български,italiano,suomi,Türkçe,čeština,српски,svenska,한국어,galego,українська,English (United Kingdom),Magyar,slovenský
; Used for datetimepicker
[i18n.datelang]

View File

@@ -42,6 +42,7 @@ Ilya Makarov
Jamie Mansfield <dev AT jamierocks DOT uk>
Javier Ortiz Bultron <javier DOT ortiz DOT 78 AT gmail DOT com>
Jean THOMAS <contact AT tibounise DOT com>
John Behm <jxsl13 AT googlemail DOT com>
Jonas De Kegel <jonasgithub [AT] gmail [DOT] com>
Joubert RedRat <me+github AT redrat DOT com DOT br>
Juraj Bubniak <contact AT jbub DOT eu>
@@ -56,6 +57,7 @@ Marvin Menzerath <github AT marvin-menzerath DOT de>
Michael Härtl <haertl DOT mike AT gmail DOT com>
Miguel de la Cruz <miguel AT mcrx DOT me>
Mikhail Burdin <xdshot9000 AT gmail DOT com>
Mohammad Gholami <gholami DOT mohammad DOT mgh AT gmail DOT com>
Morten Sørensen <klim8d AT gmail DOT com>
Muhammad Fawwaz Orabi <mfawwaz93 AT gmail DOT com>
Nakao Takamasa <at.mattenn AT gmail DOT com>

View File

@@ -48,7 +48,7 @@ cancel=Отказ
install=Инсталация
title=Стъпки за инсталиране при първоначално стартиране
docker_helper=Ако Gogs е стартиран в Docker контейнер, моля прочетете <a target="_blank" href="%s">нашите указания</a> внимателно, преди да правите промени по настройките на тази страница!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs изисква MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Настройки на базата данни
db_type=Тип на база данни
host=Сървър
@@ -58,8 +58,8 @@ db_name=Име на база данни
db_helper=Моля, използвайте INNODB engine с utf8_general_ci кодиране на знаци за MySQL.
ssl_mode=Режим SSL
path=Път
sqlite_helper=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Път към файл на SQLite3 база от данни. <br>Моля използвайте абсолютен път, когато стартирате gogs като услуга.
err_empty_db_path=Пътят към SQLite3 базата от данни не може да бъде празен.
no_admin_and_disable_registration=Невъзможно изключване на регистрациите без предварително да е създаден поне един административен профил.
err_empty_admin_password=Паролата на администратор не може да е празна.
@@ -74,16 +74,16 @@ domain=Домейн
domain_helper=Тази настройка влияе на URL адреса за клониране чрез SSH.
ssh_port=SSH порт
ssh_port_helper=Номер на порт на SSH сървъра. Оставете празно за да изключите достъп през SSH.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Използване на вграден SSH сървър
use_builtin_ssh_server_popup=Стартиране на вграден SSH сървър за Git операции, различен от системния SSH демон.
http_port=HTTP порт
http_port_helper=Порт, на който приложението ще слуша.
app_url=URL адрес на приложението
app_url_helper=Този настройка променя HTTP/HTTPS адреса за клониране, а понякога и адреса на ел. поща.
log_root_path=Път към журналите
log_root_path_helper=Директория в която се записват журналите.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Включване на конзолен режим
enable_console_mode_popup=Изписване на логовете в конзолата, в допълнение към файловият режим.
optional_title=Опционални настройки
email_title=Настройки на пощенска услуга
@@ -119,6 +119,7 @@ sqlite3_not_available=Вашата версия не поддържа SQLite3,
invalid_db_setting=Настройките на базата данни са некоректни: %v
invalid_repo_path=Основният път към хранилищата е невалиден: %v
run_user_not_match=Потребителският контекст на приложението не е на текущия потребител: %s -> %s
smtp_host_missing_port=Липсва порт в зададения SMTP адрес.
invalid_smtp_from=Невалидно поле От: %v
save_config_failed=Неуспешно запазване на конфигурация: %v
invalid_admin_setting=Настройките на профил на администратора са невалидни: %v
@@ -168,6 +169,14 @@ reset_password_helper=Щракнете тук, за да нулирате пар
password_too_short=Размерът на паролата не може да бъде по-малък от 6 знака.
non_local_account=Нелокални потребители не могат да сменят паролата си през Gogs.
login_two_factor=Two-factor Authentication
login_two_factor_passcode=Парола за удостоверяване
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recovery Code
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Този код за възстановяване вече е бил използван или не е валиден.
[mail]
activate_account=Моля активирайте Вашия профил
activate_email=Провери адрес на ел. поща
@@ -255,12 +264,11 @@ profile=Профил
password=Парола
avatar=Аватар
ssh_keys=SSH ключове
social=Социални профили
applications=Приложения
security=Сигурност
repos=Хранилища
orgs=Организации
repos=Repositories
applications=Приложения
delete=Изтрий профил
uid=UID
public_profile=Публичен профил
profile_desc=Вашият адрес на ел. поща е публичен и ще бъде използван за всички свързани с профила Ви уведомления и всички уеб базирани операции, направени чрез сайта.
@@ -326,10 +334,30 @@ no_activity=Няма скорошна дейност
key_state_desc=Този ключ е използван през последните 7 дни
token_state_desc=Този API ключ е използван през последните 7 дни
manage_social=Управление на свързани профили в социалните мрежи
social_desc=Това е списък на свързани профили в социалните мрежи. Премахнете всички, които не разпознавате.
unbind=Освобождаване
unbind_success=Социалния профил е освободен.
two_factor=Two-factor Authentication
two_factor_status=Статус:
two_factor_on=Вкл.
two_factor_off=Изкл.
two_factor_enable=Активиране
two_factor_disable=Деактивиране
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=След това въведете паролата:
two_factor_verify=Потвърждаване
two_factor_invalid_passcode=Въведената парола е невалидна! Моля опитайте отново.
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Ново генериране на кодове за възстановяване
two_factor_regenerate_recovery_codes_error=Неуспешно генериране на кодове за възстановяване: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Управление на индивидуални API ключове за достъп
generate_new_token=Генериране на нов API ключ
@@ -347,10 +375,10 @@ orgs.none=Не сте член на никоя организация.
orgs.leave_title=Напусни организация
orgs.leave_desc=Ще загубите достъп до всички хранилища и екипи, след като напуснете организацията. Желаете ли да продължите?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave=Напускане
repos.leave_title=Напускане на хранилище
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave_success=Вие успешно напуснахте хранилище "%s"!
delete_account=Изтриване на собствения профил
delete_prompt=Тази операция ще изтрие Вашия профил завинаги и тя <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
@@ -422,7 +450,7 @@ quick_guide=Бърз справочник
clone_this_repo=Клонирай хранилището
create_new_repo_command=Създай ново хранилище чрез командния ред
push_exist_repo=Предай съществуващо хранилище през командния ред
bare_message=This repository does not have any content yet.
bare_message=Това хранилище все още не съдържа нищо.
files=Файлове
branch=Клон
@@ -435,7 +463,7 @@ pulls=Заявки за сливане
labels=Етикети
milestones=Етапи
commits=Ревизии
git_branches=Branches
git_branches=Клонове
releases=Версии
file_raw=Директен файл
file_history=История
@@ -444,12 +472,12 @@ file_permalink=Постоянна връзка
file_too_large=Този файл е твърде голям за да се визуализира
video_not_supported_in_browser=Вашият браузър не поддържа HTML5 видео тагове.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Преглед
branches.active_branches=Активни клонове
branches.stale_branches=Застинали клонове
branches.all=Всички клонове
branches.updated_by=Актуализирани %[1]s от %[2]s
branches.change_default_branch=Промяна на клон по подразбиране
editor.new_file=Нов файл
editor.upload_file=Качи файл
@@ -588,6 +616,7 @@ pulls.compare_compare=сравни
pulls.filter_branch=Филтър по клон
pulls.no_results=Няма резултати.
pulls.nothing_to_compare=Няма нищо за сравняване, защото родителският клон и върхът са еднакви.
pulls.nothing_merge_base=Няма нищо за сравняване, защото двата клона имат напълно различна история.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=Проверката за конфликт все още е в
pulls.can_auto_merge_desc=Може да се извърши обединяване на тази заявка за сливане.
pulls.cannot_auto_merge_desc=Не може да се извърши обединяване, защото съществуват конфликти между ревизиите.
pulls.cannot_auto_merge_helper=Моля, използвайте инструменти на командния ред за да разрешите конфликтите.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Обедини заявка за сливане
pulls.open_unmerged_pull_exists=`Невъзможно повторно отваряне, защото вече съществува заявка за сливане (#%d) от същото хранилище със същата информация за обединяване, която чака да бъде извършена`
pulls.delete_branch=Изтрий клон
@@ -657,27 +688,28 @@ settings.collaboration.admin=За администрация
settings.collaboration.write=За писане
settings.collaboration.read=За четене
settings.collaboration.undefined=Недефинирано
settings.branches=Branches
settings.branches=Клонове
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch=Клон по подразбиране
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_unsupported=Промяна на клон по подразбиране не се поддържа от тази версия на Git сървъра.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches=Защитени клонове
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.choose_a_branch=Choose a branch...
settings.branch_protection=Branch Protection
settings.choose_a_branch=Избор на клон...
settings.branch_protection=Защита на клон
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
settings.protect_this_branch=Protect this branch
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
settings.protect_require_pull_request=Require pull request instead direct pushing
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers=Списък на всички, които могат да изпращат към този клон
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_users=Потребители, които могат да изпращат към този клон
settings.protect_whitelist_search_users=Търсене на потребители
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.protect_whitelist_search_teams=Търсене на екипи
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.hooks=Уеб-куки
settings.githooks=Git куки
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Цифров
settings.tracker_issue_style.alphanumeric=Символен
settings.tracker_url_format_desc=Можете да използвате текстови маркери <code>{user} {repo} {index}</code> за потребителско име, име на хранилище и индекс на задача съответно.
settings.pulls_desc=Включва заявки за сливане за да може да се приемат външни доработки
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Опасна зона
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=Новият притежател вече има хранилище със същото име. Изберете друго име.
@@ -777,8 +811,8 @@ settings.event_send_everything=При <strong>всички</strong> събити
settings.event_choose=Нека избера от какво имам нужда.
settings.event_create=Създаване
settings.event_create_desc=Създаване на клон или маркер
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_delete=Изтриване
settings.event_delete_desc=Изтрит клон или етикет
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_push=Предаване
@@ -800,7 +834,8 @@ settings.delete_webhook=Изтрий уеб-куката
settings.recent_deliveries=Последни изпращания
settings.hook_type=Тип на куката
settings.add_slack_hook_desc=Добавяне на интеграция със <a href="%s">Slack</a> във Вашето хранилище.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_discord_hook_desc=Добавяне на интеграция с <a href="%s">Discord</a> към хранилището.
settings.add_dingtalk_hook_desc=Добавяне на интеграция с <a href="%s">Dingtalk</a> към хранилището.
settings.slack_token=API ключ
settings.slack_domain=Домейн
settings.slack_channel=Канал
@@ -883,7 +918,7 @@ team_permission_desc=Какво ниво на достъп трябва да и
form.name_reserved=Името на организацията '%s' е запазено.
form.name_pattern_not_allowed=Име на организацията от вида '%s' не е разрешено.
form.team_name_reserved=Team name '%s' is reserved.
form.team_name_reserved=Име на екип "%s" е запазено.
settings=Настройки
settings.options=Опции
@@ -1050,7 +1085,7 @@ repos.private=Частно
repos.watches=Наблюдавания
repos.stars=Харесвания
repos.issues=Задачи
repos.size=Size
repos.size=Размер
auths.auth_manage_panel=Управление на удостоверявания
auths.new=Добави нов начин на удостоверяване
@@ -1065,15 +1100,21 @@ auths.domain=Домейн
auths.host=Сървър
auths.port=Порт
auths.bind_dn=Име (DN) за свръзка
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Парола за свръзка
auths.bind_password_helper=Внимание: Тази парола се запазва некриптирана. Моля използвайте потребител, който няма административен достъп.
auths.user_base=Базов OU за търсене
auths.user_dn=Име (DN) на потребител
auths.attribute_username=Атрибут за име
auths.attribute_username_placeholder=Оставете празно за да използва потребителското име от форма за вписване.
auths.attribute_name=Атрибут за име
auths.attribute_name=First Name Attribute
auths.attribute_surname=Атрибут за фамилия
auths.attribute_mail=Атрибут за ел. поща
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Извличане на атрибути от контекста на име (DN) за свръзка
auths.filter=Филтър за потребител
auths.admin_filter=Филтър за администратор
@@ -1100,6 +1141,7 @@ auths.still_in_used=Това удостоверяване все още се и
auths.deletion_success=Удостоверяването е изтрито успешно!
auths.login_source_exist=Източник за валидация на потребители "%s" вече съществува.
config.not_set=(not set)
config.server_config=Сървърни настройки
config.app_name=Име на приложението
config.app_ver=Версия на приложението
@@ -1126,16 +1168,19 @@ config.ssh_keygen_path=Път до генератор ('ssh-keygen')
config.ssh_minimum_key_size_check=Проверка за минимален размер на ключове
config.ssh_minimum_key_sizes=Минимален размер на ключове
config.repo_config=Repository Configuration
config.repo_config=Конфигурация на хранилище
config.repo_root_path=Основен път към хранилища
config.script_type=Тип на скрипта
config.repo_force_private=Force Private
config.max_creation_limit=Max Creation Limit
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.preferred_licenses=Предпочитани лицензи
config.disable_http_git=Забраняване на HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Настройки на базата данни
config.db_type=Тип
config.db_host=Сървър
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Време за отказ при сливане
config.git_gc_timeout=Време за отказ при GC
config.log_config=Конфигурация на журнал
config.log_mode=Mode
config.log_options=Options
config.log_mode=Режим
config.log_options=Настройки
monitor.cron=Cron задачи
monitor.name=Име
@@ -1251,10 +1296,10 @@ create_pull_request=`създаде заявка за сливане <a href="%s
close_pull_request=`затвори заявка за сливане <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`повторно отвори заявка за сливане <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`обедини заявка за сливане <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=създаде клон <a href="%[1]s/src/%[2]s"> %[3]s</a> % <a href="%[1]s">[4]s</a>
delete_branch=изтри клон <code>%[2]s</code> % <a href="%[1]s">[3]s</a>
push_tag=предаде маркер <a href="%s/src/%s">%[2]s</a> към <a href="%[1]s">[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=изтри етикет <code>%[2]s</code> % <a href="%[1]s">[3]s</a>
[tool]
ago=преди

View File

@@ -18,15 +18,15 @@ user_profile_and_more=Uživatelský profil a další
signed_in_as=Přihlášen jako
username=Uživatelské jméno
email=E-Mail
email=E-mail
password=Heslo
re_type=Znovu zadat
captcha=CAPTCHA
repository=Repozitář
repository=Repositář
organization=Organizace
mirror=Zrcadlo
new_repo=Nový repozitář
new_repo=Nový repositář
new_migrate=Nové přenesení
new_mirror=Nové zrcadlo
new_fork=Nový repositář rozštěpení
@@ -39,14 +39,14 @@ your_profile=Váš profil
your_settings=Vaše nastavení
activities=Aktivity
pull_requests=Požadavky na natažení
pull_requests=Pull Requesty
issues=Úkoly
cancel=Zrušit
[install]
install=Instalace
title=Kroky instalace pro první běh
title=Kroky instalace pro první spuštění
docker_helper=Spouštíte-li Gogs uvnitř Dockeru, přečtěte si prosím pečlivě <a target="_blank" href="%s">návod</a>, než něco změníte na této stránce!
requite_db_desc=Gogs vyžaduje MySQL, PostgreSQL, SQLite3, MSSQL nebo TiDB.
db_title=Nastavení databáze
@@ -55,8 +55,8 @@ host=Server
user=Uživatel
password=Heslo
db_name=Název databáze
db_helper=Prosíme, pro MySQL použijte INNODB engine se znakovou sadou utf8_general_ci.
ssl_mode=SSL Mód
db_helper=Prosím, pro MySQL použijte INNODB engine se znakovou sadou utf8_general_ci.
ssl_mode=SSL režim
path=Cesta
sqlite_helper=Cesta k SQLite3 databázi. <br>Prosím, použijte absolutní cestu, pokud startujete Gogs jako službu.
err_empty_db_path=Cesta k SQLite3 databázi nemůže být prázdná.
@@ -72,7 +72,7 @@ run_user=Účet pro spouštění
run_user_helper=Tento uživatel musí mít přístup do kořenového adresáře repositářů a právo spustit Gogs.
domain=Doména
domain_helper=Toto ovlivňuje URL klonů skrze SSH.
ssh_port=Port SSH
ssh_port=SSH port
ssh_port_helper=Číslo portu, které používá váš SSH server. Nechte jej prázdné pro vypnutí používání SSH.
use_builtin_ssh_server=Použít vestavěný SSH server
use_builtin_ssh_server_popup=Pro Git operace spustit vestavěný SSH server, aby byl rozpoznán od systémové SSH služby.
@@ -81,9 +81,9 @@ http_port_helper=Číslo portu, na kterém aplikace naslouchá.
app_url=URL aplikace
app_url_helper=Toto ovlivňuje URL klonů skrze HTTP/HTTPS a odkazů v e-mailech.
log_root_path=Adresář systémových záznamů
log_root_path_helper=Adresář, kam se budou zapisovat systémové záznamy.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
log_root_path_helper=Adresář, kam se budou zapisovat soubory se systémovými záznamy.
enable_console_mode=Povolit režim konzole
enable_console_mode_popup=Mimo zápisu do souboru vytisknout systémové záznamy i do konzole.
optional_title=Dodatečná nastavení
email_title=Nastavení e-mailové služby
@@ -101,8 +101,8 @@ disable_gravatar=Vypnout službu Gravatar
disable_gravatar_popup=Vypnout službu Gravatar a ostatní zdroje. Všechny ikony uživatelů budou nahrány uživateli nebo výchozí.
federated_avatar_lookup=Povolit vyhledání ikon uživatelů z veřejných zdrojů
federated_avatar_lookup_popup=Povolit vyhledání ikon uživatelů z veřejných zdrojů pro využití služeb založených na libravatar.
disable_registration=Vypnout možnost se zaregistrovat
disable_registration_popup=Vypnout možnost registrace, pouze správce může vytvořit účty.
disable_registration=Vypnout možnost uživatelské registrace
disable_registration_popup=Vypnout možnost uživatelské zaregistrovat, pouze správce může vytvořit účty.
enable_captcha=Povolit službu CAPTCHA
enable_captcha_popup=Vyžadovat správně zadaný text CAPTCHA při registraci.
require_sign_in_view=Povolit nutnost přihlášení pro zobrazení stránek
@@ -115,15 +115,16 @@ confirm_password=Potvrdit heslo
admin_email=E-mailová adresa správce
install_gogs=Nainstalovat Gogs
test_git_failed=Chyba při testu příkazu 'git': %v
sqlite3_not_available=Vaše verze vydání Gogs nepodporuje SQLite3, prosíme stáhněte si oficiální binární balíček z %s, ne gobuild verzi.
sqlite3_not_available=Vaše verze vydání Gogs nepodporuje SQLite3, prosím stáhněte si oficiální binární balíček z %s, ne gobuild verzi.
invalid_db_setting=Nastavení databáze není správné: %v
invalid_repo_path=Kořenový adresář repositáře není správný: %v
run_user_not_match=Uživatel pro spuštění není aktuální uživatel: %s -> %s
invalid_smtp_from=Hodnota položky SMTP server není zadána správně: %v
smtp_host_missing_port=V adrese SMTP serveru chybí číslo portu.
invalid_smtp_from=Hodnota položky SMTP Od: není zadána správně: %v
save_config_failed=Uložení konfigurace se nezdařilo: %v
invalid_admin_setting=Nastavení účtu správce není správné: %v
install_success=Vítejte! Jsme rádi, že jste si vybrali Gogs. Bavte se a opatrujte se.
invalid_log_root_path=Kořenový adresář systémových záznamů není správný: %v
invalid_log_root_path=Kořenový adresář souborů systémových záznamů není správný: %v
[home]
uname_holder=Uživatelské jméno nebo e-mailová adresa
@@ -148,31 +149,39 @@ search=Vyhledat
create_new_account=Vytvořit nový účet
register_hepler_msg=Již máte účet? Přihlašte se!
social_register_hepler_msg=Již máte účet? Připojte se!
disable_register_prompt=Omlouváme se, ale registrace jsou vypnuty. Prosíme, spojte se správcem systému.
disable_register_mail=Omlouváme se, potvrzovací registrační e-maily byly vypnuty.
disable_register_prompt=Omlouváme se, ale registrace jsou vypnuty. Kontaktujte správce systému.
disable_register_mail=Omlouváme se, ale e-mailové služby jsou vypnuté. Kontaktujte správce systému.
remember_me=Zapamatovat si mne
forgot_password=Zapomenuté heslo
forget_password=Zapomněli jste heslo?
sign_up_now=Potřebujete účet? Zaregistrujte se.
confirmation_mail_sent_prompt=Nový potvrzovací e-mail byl zaslán na <b>%s</b>, prosíme, zkontrolujte si vaši doručenou poštu během následující %d hodin pro dokončení registračního procesu.
confirmation_mail_sent_prompt=Na adresu <b>%s</b> byl zaslán nový potvrzovací e-mail. Zkontrolujte prosím vaši doručenou poštu během následujících %d hodin pro dokončení registračního procesu.
active_your_account=Aktivujte si váš účet
prohibit_login=Přihlášení zakázáno
prohibit_login_desc=Vašemu účtu je zakázáno se přihlásit, kontaktujte prosím správce webu.
resent_limit_prompt=Omlouváme se, ale před chvílí jste požádal o aktivační e-mail. Prosíme, počkejte 3 minuty a pak to zkuste znovu.
has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (<b>%s</b>). Pokud jste nedostali e-mail pro potvrzení nebo potřebujete zaslat nový, klikněte prosím na tlačítku níže.
resend_mail=Klikněte zde pro odeslání aktivačního e-mailu
send_reset_mail=Klikněte zde pro znovuposlání e-mailu pro změnu vašeho hesla
prohibit_login_desc=Vašemu účtu je zakázáno se přihlásit, kontaktujte prosím správce serveru.
resent_limit_prompt=Omlouváme se, ale před chvílí jste požádal o zaslání aktivačního e-mailu. Počkejte prosím 3 minuty a pak to zkuste znovu.
has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (<b>%s</b>). Pokud jste nedostali potvrzovací e-mail nebo potřebujete zaslat nový, klikněte prosím na tlačítko níže.
resend_mail=Klikněte zde pro opakované odeslání aktivačního e-mailu
send_reset_mail=Klikněte zde pro (opakované) odeslání e-mailu pro obnovu vašeho hesla
reset_password=Obnova vašeho hesla
invalid_code=Omlouváme se, ale kód potvrzení vašeho účtu vypršel nebo není správný.
invalid_code=Omlouváme se, ale kód z vašeho potvrzovacího e-mailu už vypršel nebo není správný.
reset_password_helper=Klikněte zde pro obnovu vašeho hesla
password_too_short=Délka hesla musí být minimálně 6 znaků.
non_local_account=Externí účty nemohou měnit hesla přes Gogs.
login_two_factor=Dvoufaktorové ověření
login_two_factor_passcode=Přístupový kód ověření
login_two_factor_enter_recovery_code=Zadejte obnovovací kód dvoufaktorového ověření
login_two_factor_recovery=Obnovení dvoufaktorového ověření
login_two_factor_recovery_code=Obnovovací kód
login_two_factor_enter_passcode=Zadejte přístupový kód dvoufaktorového ověření
login_two_factor_invalid_recovery_code=Obnovovací kód již byl použit nebo není platný.
[mail]
activate_account=Prosíme, aktivujte si váš účet
activate_account=Prosím, aktivujte si váš účet
activate_email=Ověřte vaši e-mailovou adresu
reset_password=Obnova vašeho hesla
register_success=Vítejte, registrace vašeho účtu se zdařila
register_success=Vítejte, váš účet byl zaregistrován
register_notify=Vítejte
[modal]
@@ -186,7 +195,7 @@ RepoName=Název repositáře
Email=E-mailová adresa
Password=Heslo
Retype=Zadejte znovu heslo
SSHTitle=Název klíče SSH
SSHTitle=Název SSH klíče
HttpsUrl=HTTPS URL
PayloadUrl=URL nákladu
TeamName=Název týmu
@@ -201,18 +210,18 @@ TreeName=Cesta k souboru
Content=Obsah
require_error=` nemůže být prázdný.`
alpha_dash_error=` musí být pouze písmena, číslice či znaky - a _ .`
alpha_dash_dot_error=` musí být pouze písmena, číslice, tečka či znaky - a _ .`
alpha_dash_dot_slash_error=` musí být validní písmena, čísla nebo pomlčka, podtržítko či tečka, čárka a nebo lomítka.`
size_error=` musí být minimálně velikosti %s.`
alpha_dash_error=` smí obsahovat pouze písmena, číslice, pomlčku a podtržítko.`
alpha_dash_dot_error=` smí obsahovat pouze písmena, číslice, tečku, čárku, pomlčku a podtržítko.`
alpha_dash_dot_slash_error=` smí obsahovat pouze písmena, číslice, tečku, čárku, pomlčku, podtržítko a lomítko.`
size_error=` musí mít velikost %s.`
min_size_error=` musí obsahovat nejméně %s znaků.`
max_size_error=` musí obsahovat maximálně %s znaků.`
email_error=` není správná e-mailová adresa.`
url_error=` není správná URL.`
email_error=` není platná e-mailová adresa.`
url_error=` není platná URL.`
include_error=` musí obsahovat řetězec '%s'.`
unknown_error=Neznámá chyba:
captcha_incorrect=Zadaná CAPTCHA se neshoduje.
password_not_match=Heslo a znovu zadané heslo nejsou shod.
password_not_match=Heslo a jeho potvrzení se neshodují.
username_been_taken=Uživatelské jméno je již obsazeno.
repo_name_been_taken=Název repositáře je již obsazen.
@@ -224,21 +233,21 @@ enterred_invalid_repo_name=Ujistěte se, prosím, že zadaný název repositář
enterred_invalid_owner_name=Ujistěte se, prosím, že jméno vlastníka je zadáno správně.
enterred_invalid_password=Ujistěte se, prosím, že zadané heslo je správné.
user_not_exist=Zadaný uživatel neexistuje.
last_org_owner=Odstranění posledního uživatele z týmu vlastníka není dovoleno, neboť vždy musí v každé organizaci existovat jeden vlastník.
last_org_owner=Odstranění posledního uživatele z týmu vlastníků není dovoleno, protože každá organizace musí mít alespoň jednoho vlastníka.
invalid_ssh_key=Omlouváme se, ale není možné ověřit váš klíč SSH: %s
unable_verify_ssh_key=Gogs nemohl ověřit váš klíč SSH, ale předpokládáme, že je platný, nicméně zkontrolujte jej prosím.
invalid_ssh_key=Omlouváme se, ale váš SSH klíč není možné ověřit: %s
unable_verify_ssh_key=Gogs nemohl ověřit váš SSH klíč, ale budeme předpokládat, že je platný. Přesto ho prosím zkontrolujte.
auth_failed=Ověření selhalo: %v
still_own_repo=Váš účet stále vlastní minimálně jeden repositář. Musíte je nejdříve smazat nebo předat.
still_has_org=Váš účet je stále členem minimálně jedné organizace. Je nutné ji nejdříve opustit nebo smazat vaše členství.
still_own_repo=Váš účet stále vlastní nějaké repositáře. Nejdříve je musíte smazat nebo někomu předat.
still_has_org=Váš účet je stále členem nějaké organizace. Je nutné ji nejdříve opustit nebo se vzdát členství.
org_still_own_repo=Tato organizace stále vlastní repositáře, musíte je nejdříve smazat nebo předat.
target_branch_not_exist=Cílová větev neexistuje.
[user]
change_avatar=Změnit vaši uživatelskou ikonu
join_on=Připojil se dne
join_on=Zaregistroval se dne
repositories=Repositáře
activity=Veřejná aktivita
followers=Sledující
@@ -254,13 +263,12 @@ form.name_pattern_not_allowed=Vzor uživatelského jména '%s' není povolen.
profile=Profil
password=Heslo
avatar=Uživatelská ikona
ssh_keys=Klíče SSH
social=Sociální účty
applications=Aplikace
ssh_keys=SSH klíče
security=Bezpečnost
repos=Repositáře
orgs=Organizace
repos=Repositories
applications=Aplikace
delete=Smazat účet
uid=UID
public_profile=Veřejný profil
profile_desc=Vaše e-mailová adresa je veřejná a bude použita pro upozornění vztahující se k vašemu účtu a jakékoliv operaci, která se provede pomocí systému.
@@ -269,7 +277,7 @@ full_name=Celé jméno
website=Web
location=Místo
update_profile=Změnit profil
update_profile_success=Váš profil byl úspěšně změněn.
update_profile_success=Váš profil byl změněn.
change_username=Uživatelské jméno změněno
change_username_prompt=Tato změna ovlivní vztah odkazů k vašemu účtu.
continue=Pokračovat
@@ -287,9 +295,9 @@ update_avatar_success=Nastavení vaší ikony uživatele bylo změněno.
change_password=Změna hesla
old_password=Stávající heslo
new_password=Nové heslo
retype_new_password=Zadat znovu heslo
retype_new_password=Zadat znovu nové heslo
password_incorrect=Zadané heslo není správné.
change_password_success=Vaše heslo bylo úspěšně změněno. Nyní se můžete přihlásit pomocí tohoto nového hesla.
change_password_success=Vaše heslo bylo změněno. Nyní se můžete přihlásit pomocí tohoto nového hesla.
password_change_disabled=Uživatelé, kteří jsou ověřováni jinak než lokálně, si nemohou změnit heslo.
emails=E-mailová adresa
@@ -300,36 +308,56 @@ primary_email=Nastavit jako hlavní
delete_email=Smazat
email_deletion=Smazání e-mailové adresy
email_deletion_desc=Smazání této e-mailové adresy odstraní návazné informace z vašeho účtu. Chcete pokračovat?
email_deletion_success=E-mailová adresa byla úspěšně smazána!
email_deletion_success=E-mailová adresa byla smazána!
add_new_email=Přidat novou e-mailovou adresu
add_email=Přidat e-mailovou adresu
add_email_confirmation_sent=Nový e-mail pro potvrzení byl odeslán na adresu '%s', prosíme zkontrolujte si vaši doručenou poštu během následujících %d hodin pro dokončení procesu potvrzení.
add_email_success=Vaše nová e-mailová adresa byla úspěšně přidána.
add_email_confirmation_sent=Nový potvrzovací e-mail byl odeslán na adresu '%s', prosím zkontrolujte si vaši doručenou poštu během následujících %d hodin pro dokončení procesu potvrzení.
add_email_success=Vaše nová e-mailová adresa byla přidána.
manage_ssh_keys=Správa klíčů SSH
manage_ssh_keys=Správa SSH klíčů
add_key=Přidat klíč
ssh_desc=Toto je seznam klíčů SSH vašeho účtu. Jelikož tyto samotné klíče umožňují přístup k vašim repositářům, je velmi důležité, abyste je rozpoznal.
ssh_helper=<strong>Nevíte jak?</strong> Podívejte se do příručky GitHubu na to <a href="%s">vytvoření vlastních klíčů SSH</a> nebo vyřešte <a href="%s">bežné problémy</a>, se kterými se můžete potkat při použití SSH.
add_new_key=Přidat klíč SSH
ssh_desc=Toto je seznam SSH klíčů vašeho účtu. Tyto klíče umožňují plný přístup k vašim repositářům, proto je velmi důležité, abyste jste si byli jistí, že jsou skutečně vaše.
ssh_helper=<strong>Nevíte jak?</strong> Podívejte se do příručky GitHubu jak si <a href="%s">vytvořit vlastní SSH klíč</a>, nebo na <a href="%s">řešení častých problémů</a>, na které můžete narazit při používání SSH.
add_new_key=Přidat SSH klíč
ssh_key_been_used=Obsah veřejného klíče byl použit.
ssh_key_name_used=Veřejný klíč se stejným jménem již existuje.
key_name=Název klíče
key_content=Obsah
add_key_success=Nový klíč SSH '%s' byl úspěšně přidán!
add_key_success=Byl přidán nový SSH klíč '%s'!
delete_key=Smazat
ssh_key_deletion=Smazání klíče SSH
ssh_key_deletion_desc=Smazání tohoto klíče SSH odstraní přístup k vašemu účtu. Chcete pokračovat?
ssh_key_deletion_success=Klíč SSH byl úspěšně smazán!
add_on=Přidáno dne
last_used=Naposledy použito dne
ssh_key_deletion=Smazání SSH klíče
ssh_key_deletion_desc=Smazání tohoto SSH klíče odstraní všechny související přístupy k vašemu účtu. Chcete pokračovat?
ssh_key_deletion_success=SSH klíč úspěšně odstraněn!
add_on=Přidán dne
last_used=Naposledy použit dne
no_activity=Žádná aktuální aktivita
key_state_desc=Tento klíč je používán posledních 7 dní
token_state_desc=Tato poukázka je používána posledních 7 dní
manage_social=Správa propojených sociálních účtů
social_desc=Toto je seznam propojených sociálních účtů. Odpojte kterékoliv připojení, které nepoznáváte.
unbind=Odpojit
unbind_success=Sociální účet byl odpojen.
two_factor=Dvoufaktorové ověření
two_factor_status=Stav:
two_factor_on=Zapnuto
two_factor_off=Vypnuto
two_factor_enable=Povoleno
two_factor_disable=Zakázáno
two_factor_view_recovery_codes=Uložte <a href="%s%s">vaše obnovovací kódy</a> na bezpečném místě. Můžete je použít jako přístupové kódy v případě, kdy ztratíte přístup k vaší ověřovací aplikaci.
two_factor_http=Již nebudete mít možnost použít vaše přihlašovací údaje pro operace přes HTTP/HTTPS. Prosíme, vytvořte a používejte <a href="%[1]s%[2]s">osobní přístupové poukázky</a> jako vaše přístupové údaje, např. <code>%[3]s</code>.
two_factor_enable_title=Povolit dvoufaktorové ověřování
two_factor_scan_qr=Prosím, použijte vaši ověřovací aplikaci pro naskenování tohoto obrázku:
two_factor_or_enter_secret=Nebo zadejte tajný kód:
two_factor_then_enter_passcode=Pak zadejte přístupový kód:
two_factor_verify=Ověřit
two_factor_invalid_passcode=Zadaný přístupový kód není platný, prosím, zkuste to znova!
two_factor_enable_error=Povolení dvoufaktorového ověření selhalo: %v
two_factor_enable_success=Dvoufaktorové ověření bylo pro váš účet povoleno!
two_factor_recovery_codes_title=Obnovovací kódy dvoufaktorového ověření
two_factor_recovery_codes_desc=Obnovovací kódy se používají, když dočasně ztratíte přístup k vaší ověřovací aplikaci. Každý obnovovací kód může být použit pouze jednou, <b>prosím, uchovejte tyto kódy na bezpečném míste</b>.
two_factor_regenerate_recovery_codes=Vygenerovat znovu obnovovací kódy
two_factor_regenerate_recovery_codes_error=Vygenerování obnovovacích kódů selhalo: %v
two_factor_regenerate_recovery_codes_success=Nové obnovovací kódy byly vygenerovány!
two_factor_disable_title=Zakázat dvoufaktorové ověření
two_factor_disable_desc=Úroveň zabezpečení vaše účtu se s vypnutím dvoufaktorového ověření sníží. Chcete pokračovat?
two_factor_disable_success=Dvoufaktorové ověření bylo zakázáno!
manage_access_token=Správa osobních přístupových poukázek
generate_new_token=Vygenerovat novou poukázku
@@ -337,20 +365,20 @@ tokens_desc=Poukázky, které jste vygeneroval, mohou být použity pro přístu
new_token_desc=Každá poukázka má úplný přístup k vašemu účtu.
token_name=Název poukázky
generate_token=Vygenerovat poukázku
generate_token_succees=Vaše přístupová poukázka byl úspěšně vygenerován. Nyní si ji zkopírujte, neboť později to již nebude možné!
generate_token_succees=Vaše přístupová poukázka byl vygenerována. Nyní si ji zkopírujte, neboť později to již nebude možné!
delete_token=Smazat
access_token_deletion=Smazání osobní přístupové poukázky
access_token_deletion_desc=Smazáním této osobní přístupové poukázky odstraní všechen návazný přístup aplikace. Chcete pokračovat?
delete_token_success=Osobní přístupová poukázka byla úspěšně odstraněna! Nezapomeňte také změnit nastavení vaší aplikace.
access_token_deletion_desc=Smazáním této osobní přístupové poukázky odstraní všechen související přístup aplikace. Chcete pokračovat?
delete_token_success=Osobní přístupová poukázka byla odstraněna! Nezapomeňte také změnit nastavení vaší aplikace.
orgs.none=Nejste členem žádné organizace.
orgs.leave_title=Opustit organizaci
orgs.leave_desc=Opuštěním organizace ztratíte přístup do všech repositářů a k týmům. Chcete pokračovat?
orgs.leave_desc=Opuštěním organizace ztratíte přístup do všech jejích repositářů a k jejích týmům. Chcete pokračovat?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Opustit
repos.leave_title=Opustit repositář
repos.leave_desc=Potom, co opustíte repositář, ztratíte k němu přístup. Chcete pokračovat?
repos.leave_success=Opustil jste repositář '%s'!
delete_account=Smazat váš účet
delete_prompt=Tato operace permanentně smaže váš účet a tato změna <strong>nemůže</strong> být vrácena!
@@ -377,11 +405,11 @@ license=Licence
license_helper=Vyberte licenční soubor
readme=Soubor README
readme_helper=Vyberte šablonu souboru README
auto_init=Inicializovat tento repositář s vybranými soubory a šablonou
auto_init=Založit tento repositář s vybranými soubory a šablonou
create_repo=Vytvořit repositář
default_branch=Výchozí větev
mirror_prune=Vyčistit
mirror_prune_desc=Odstranit vzdálené odkazy, které již ve vzdáleném repozitáři neexistují
mirror_prune_desc=Odstranit odkazy sledování vzdálených větví, které již ve vzdáleném repositáři neexistují
mirror_interval=Odstup zrcadlení (hodina)
mirror_address=Adresa zrcadla
mirror_address_desc=Prosím, přidejte do adresy potřebné přihlašovací údaje.
@@ -400,7 +428,7 @@ migrate_type_helper=Tento repositář bude <span class="text blue">zrcadlem</spa
migrate_repo=Přenést repositář
migrate.clone_address=Naklonovat adresu
migrate.clone_address_desc=Toto může být HTTP/HTTPS/GIT URL.
migrate.clone_address_desc_import_local=Máte povoleno přenést repositář z lokální cesty serveru.
migrate.clone_address_desc_import_local=Máte povoleno přenést repositář pomocí lokální cesty na serveru.
migrate.permission_denied=Není vám dovoleno importovat místní repositáře.
migrate.invalid_local_path=Neplatná místní cesta, buď neexistuje nebo není adresářem.
migrate.failed=Přenesení selhalo: %v
@@ -422,7 +450,7 @@ quick_guide=Krátká příručka
clone_this_repo=Naklonovat tento repositář
create_new_repo_command=Vytvořit nový repositář v příkazové řádce
push_exist_repo=Odeslat existující repositář z příkazové řádky
bare_message=This repository does not have any content yet.
bare_message=Tento repositář ještě nemá obsah.
files=Soubory
branch=Větev
@@ -431,9 +459,9 @@ filter_branch_and_tag=Filtr pro větev nebo značku
branches=Větve
tags=Značky
issues=Úkoly
pulls=Požadavky na natažení
pulls=Pull Requesty
labels=Štítky
milestones=Milník
milestones=Milníky
commits=Revize
git_branches=Větve
releases=Vydání
@@ -459,35 +487,35 @@ editor.cannot_edit_non_text_files=Netextové soubory není možné upravovat
editor.edit_this_file=Upravit tento soubor
editor.must_be_on_a_branch=Musíte mít zvolenu větev pro úpravu či návrh změn tohoto souboru
editor.fork_before_edit=Musíte provést rozštěpení repositáře před úpravou souboru
editor.delete_this_file=Odstranit tento soubor
editor.delete_this_file=Smazat tento soubor
editor.must_have_write_access=Musíte mít přístup pro zápis pro dělání či navrhování změn tohoto souboru
editor.file_delete_success=Soubor '%s' byl úspěšně odstraněn!
editor.file_delete_success=Soubor '%s' byl smazán!
editor.name_your_file=Pojmenujte váš soubor...
editor.filename_help=Pro vložení adresáře prostě napište jméno a přidejte /. K odstranění adresáře běžte na začátek pole a stiskněte backspace.
editor.or=nebo
editor.cancel_lower=zrušit
editor.commit_changes=Uložit změny revize
editor.commit_changes=Zapsat změny revize
editor.add_tmpl=Přidat '%s/<nazev_souboru>'
editor.add=Přidat '%s'
editor.update=Změnit "%s"
editor.delete=Smazat '%s'
editor.commit_message_desc=Přidat dobrovolný rozšířený popis...
editor.commit_directly_to_this_branch=Uložte změny revize přímo do větve <strong class="branch-name">%s</strong>.
editor.commit_directly_to_this_branch=Zapište změny revize přímo do větve <strong class="branch-name">%s</strong>.
editor.create_new_branch=Vytvořit <strong>novou větev</strong> pro tuto revizi a vytvořit požadavek na natažení.
editor.new_branch_name_desc=Nový název větve...
editor.cancel=Zrušit
editor.filename_cannot_be_empty=Název souboru nemůže být prázdný.
editor.branch_already_exists=Repositář větev '%s' již obsahuje.
editor.directory_is_a_file=Položka '%s' v nadřazené cestě je v tomto repozitáři soubor, ne adresář.
editor.directory_is_a_file=Položka '%s' v nadřazené cestě je v tomto repositáři soubor, ne adresář.
editor.file_is_a_symlink=Soubor '%s' je symbolický odkaz a nemůže být změněn pomocí webového editoru.
editor.filename_is_a_directory=Jméno souboru '%s' koliduje v tomto repozitáři se jménem adresáře.
editor.file_editing_no_longer_exists=Soubor '%s', který upravujete, již neexistuje v tomto repozitáři.
editor.file_changed_while_editing=Obsah souboru se změnil od začátku úprav. <a target="_blank" href="%s"> Klepnutím sem</a> zobrazíte, co se změnilo, nebo <strong>stiskněte potvrdit znovu</strong> pro přepsání změn.
editor.file_already_exists=Soubor '%s' již existuje v tomto repozitáři.
editor.filename_is_a_directory=Jméno souboru '%s' v tomto repositáři koliduje se jménem adresáře.
editor.file_editing_no_longer_exists=Soubor '%s', který upravujete, již v tomto repositáři neexistuje.
editor.file_changed_while_editing=Obsah souboru se změnil od začátku úprav. <a target="_blank" href="%s">Klepnutím sem</a> zobrazíte, co se změnilo, nebo <strong>stiskněte Znovu zapsat změny</strong> pro přepsání změn.
editor.file_already_exists=Soubor '%s' již v tomto repositáři existuje.
editor.no_changes_to_show=Žádné změny k zobrazení.
editor.fail_to_update_file=Vytvoření nebo změna souboru '%s' skončilo chybou: %v
editor.fail_to_update_file=Vytvoření nebo změna souboru '%s' skončila chybou: %v
editor.add_subdir=Přidat podadresář...
editor.unable_to_upload_files=Nepodařilo se nahrát soubor '%s'. Chyba: %v
editor.unable_to_upload_files=Nepodařilo se nahrát soubor do '%s'. Chyba: %v
editor.upload_files_to_dir=Nahrát soubory do '%s'
commits.commit_history=Historie revizí
@@ -517,7 +545,7 @@ issues.new_label=Nový štítek
issues.new_label_placeholder=Název štítku...
issues.create_label=Vytvořit štítek
issues.label_templates.title=Nahrát předdefinovanou sadu značek
issues.label_templates.info=Nejsou zadány žádné značky. Pro vytvoření nové klikněte na tlačítko Nová značka nebo použijte předdefinovanou sadu.
issues.label_templates.info=Nejsou zadány žádné značky. Pro vytvoření nové klikněte na tlačítko "Nová značka" nebo použijte předdefinovanou sadu.
issues.label_templates.helper=Vyberte sadu značek
issues.label_templates.use=Použít tuto sadu značek
issues.label_templates.fail_to_load_file=Nepodařilo se nahrát soubor šablony značek '%s': %v
@@ -545,8 +573,8 @@ issues.opened_by=otevřeno %[1]s uživatelem <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=otevřeno %[1]s uživatelem %[2]s
issues.previous=Předchozí
issues.next=Další
issues.open_title=otevřený
issues.closed_title=zavřený
issues.open_title=Otevřený
issues.closed_title=Zavřený
issues.num_comments=%d komentářů
issues.commented_at=`okomentoval <a href="#%s">%s</a>`
issues.delete_comment_confirm=Jste si jist, že chcete smazat tento komentář?
@@ -562,7 +590,7 @@ issues.commit_ref_at=`odkázal na tento úkol z revize <a id="%[1]s" href="#%[1]
issues.poster=Autor
issues.collaborator=Spolupracovník
issues.owner=Vlastník
issues.sign_in_require_desc=<a href="%s">Přihlašte se</a> pro zapojení do konverzace.
issues.sign_in_require_desc=<a href="%s">Přihlaste se</a> pro zapojení do konverzace.
issues.edit=Upravit
issues.cancel=Zrušit
issues.save=Uložit
@@ -575,7 +603,7 @@ issues.label_delete=Smazat
issues.label_modify=Změna štítku
issues.label_deletion=Smazání štítku
issues.label_deletion_desc=Smazání tohoto štítku jej smaže také ze všech návazných úkolech. Chcete pokračovat?
issues.label_deletion_success=Štítek byl úspěšně smazán!
issues.label_deletion_success=Štítek byl smazán!
issues.num_participants=%d účastníků
issues.attachment.open_tab=`Klikněte pro zobrazení "%s" v nové záložce`
issues.attachment.download=`Klikněte pro stažení "%s"`
@@ -583,11 +611,12 @@ issues.attachment.download=`Klikněte pro stažení "%s"`
pulls.new=Nový požadavek na natažení
pulls.compare_changes=Porovnat změny
pulls.compare_changes_desc=Porovnat dvě větve a vytvořit pro změny požadavek na natažení.
pulls.compare_base=základ
pulls.compare_base=základ
pulls.compare_compare=porovnat
pulls.filter_branch=Filtrovat větev
pulls.no_results=Nebyly nalezeny žádné výsledky.
pulls.nothing_to_compare=Není co porovnávat, protože základ a hlavní větve jsou shodné.
pulls.nothing_to_compare=Není co porovnávat, protože základ a hlavní větve jsou shodné.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`Požadavek na natažení mezi těmito větvemi již existuje: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Vytvořit požadavek na natažení
pulls.title_desc=chce sloučit %[1]d revizí z větve <code>%[2]s</code> do větve <code>%[3]s</code>
@@ -595,14 +624,16 @@ pulls.merged_title_desc=sloučil %[1]d revizí z větve <code>%[2]s</code> do v
pulls.tab_conversation=Konverzace
pulls.tab_commits=Revize
pulls.tab_files=Změněné soubory
pulls.reopen_to_merge=Prosíme, otevřete znovu tento požadavek na natažení, aby se provedla operace sloučení.
pulls.reopen_to_merge=Prosím, znovuotevřete tento požadavek na natažení, aby se provedla operace sloučení.
pulls.merged=Sloučený
pulls.has_merged=Tento požadavek na natažení byl úspěšně sloučen!
pulls.has_merged=Tento požadavek na natažení byl sloučen!
pulls.data_broken=Data tohoto požadavku na natažení byla narušena z důvodu smazání informace o rozštěpení.
pulls.is_checking=Kontrola rozporů stále pokračuje, prosíme obnovte za několik okamžiků stránku.
pulls.is_checking=Kontrola rozporů stále pokračuje, prosím obnovte za několik okamžiků stránku.
pulls.can_auto_merge_desc=Tento požadavek na natažení může být automaticky sloučen.
pulls.cannot_auto_merge_desc=Tento požadavek na natažení nemůže být automaticky sloučen, neboť se v něm nachází rozpory.
pulls.cannot_auto_merge_helper=Prosíme proveďte sloučení ručně, aby byly vyřešeny rozpory.
pulls.cannot_auto_merge_helper=Prosím proveďte sloučení ručně, aby byly vyřešeny rozpory.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Sloučit požadavek na natažení
pulls.open_unmerged_pull_exists=`Nemůžete znovuotevřít požadavek na natažení, neboť požadavek na natažení ze stejného repositáře se stejnými informacemi pro sloučení již existuje (#%d) a čeká na sloučení.`
pulls.delete_branch=Smazat větev
@@ -611,8 +642,8 @@ pulls.delete_branch_has_new_commits=Větev nemůže být smazána, neboť po slo
milestones.new=Nový milník
milestones.open_tab=%d otevřených
milestones.close_tab=%d zavřených
milestones.closed=Zavřen dne %s
milestones.no_due_date=Bez lhůty dokončení
milestones.closed=Zavřen %s
milestones.no_due_date=Bez termínu dokončení
milestones.open=Otevřít
milestones.close=Zavřít
milestones.new_subheader=Vytvořte milníky k organizaci vašich úkolů.
@@ -621,20 +652,20 @@ milestones.title=Název
milestones.desc=Popis
milestones.due_date=Termín (volitelný)
milestones.clear=Zrušit
milestones.invalid_due_date_format=Formát data termínu je neplatný, musí být 'yyyy-mm-dd'.
milestones.create_success=Milník '%s' byl úspěšně vytvořen!
milestones.invalid_due_date_format=Formát data termínu je neplatný, musí být 'rrrr-mm-dd'.
milestones.create_success=Milník '%s' byl vytvořen!
milestones.edit=Upravit milník
milestones.edit_subheader=Zadejte lepší popis milníků, aby lidé nebyli zmateni.
milestones.edit_subheader=Zadejte lepší popis milníků pro snazší orientaci ostatních.
milestones.cancel=Zrušit
milestones.modify=Změnit milník
milestones.edit_success=Změny milníku '%s' byly úspěšně uloženy!
milestones.edit_success=Změny milníku '%s' byly uloženy!
milestones.deletion=Smazání milníku
milestones.deletion_desc=Smazání tohoto milníku jej smaže také ze všech návazných úkolech. Chcete pokračovat?
milestones.deletion_success=Milník byl úspěšně smazán!
milestones.deletion_desc=Smazání tohoto milníku jej smaže také ze všech návazných úkolů. Chcete pokračovat?
milestones.deletion_success=Milník byl smazán!
wiki=Wiki
wiki.welcome=Vítejte ve Wiki!
wiki.welcome_desc=Wiki je místo pro vaši společnou dokumentaci projektu a návodů jak jej zlepšit.
wiki.welcome_desc=Wiki je místo pro vaši společnou dokumentaci projektu a návody, jak jej zlepšit.
wiki.create_first_page=Vytvořte první stránku
wiki.page=Stránka
wiki.filter_page=Filtr stránky
@@ -642,7 +673,7 @@ wiki.new_page=Vytvořit novou stránku
wiki.default_commit_message=Napište (volitelnou) poznámku k této změně.
wiki.save_page=Uložit stránku
wiki.last_commit_info=%s upravil tuto stránku %s
wiki.edit_page_button=Změnit stránku
wiki.edit_page_button=Upravit
wiki.new_page_button=Nová stránka
wiki.delete_page_button=Smazat stránku
wiki.delete_page_notice_1=Toto smaže stránku <code>"%s"</code>. Buďte si prosím jisti.
@@ -658,13 +689,14 @@ settings.collaboration.write=Zápis
settings.collaboration.read=Čtení
settings.collaboration.undefined=Neurčeno
settings.branches=Větve
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Nemůžete spravovat větve pro holý repositář. Prosím, odešlete nejdříve nějaký obsah.
settings.default_branch=Výchozí větev
settings.default_branch_desc=Výchozí větev je považována za "základní" větev pro zápisy změn revizí, požadavky na natažení a on-line úpravy.
settings.default_branch_desc=Výchozí větev je považována za "hlavní" větev pro zápisy změn revizí, požadavky na natažení a on-line úpravy.
settings.update=Změnit
settings.update_default_branch_success=Výchozí větev tohoto repositáře byla úspěšně změněna!
settings.update_default_branch_unsupported=Změna výchozí větve není podporována verzí Gitu, která je na serveru.
settings.update_default_branch_success=Výchozí větev tohoto repositáře byla změněna!
settings.protected_branches=Chráněné větve
settings.protected_branches_desc=Ochrana větví před vynuceným odesláním a náhodným smazáním. Schválený seznam uživatelů ukládající zápisy revizí.
settings.protected_branches_desc=Ochrana větví před vynuceným odesláním, náhodným smazáním a uživateli na schváleném seznamu.
settings.choose_a_branch=Vyberte větev...
settings.branch_protection=Ochrana větví
settings.branch_protection_desc=Prosím vyberte možnosti ochrany větve <b>%s</b>.
@@ -678,7 +710,7 @@ settings.protect_whitelist_users=Uživatelé, kteří mohou odesílat do této v
settings.protect_whitelist_search_users=Vyhledat uživatele
settings.protect_whitelist_teams=Týmy, jejichž členové mohou odesílat do této větve
settings.protect_whitelist_search_teams=Vyhledat týmy
settings.update_protect_branch_success=Možnosti ochrany této větve byly úspěšně změněny!
settings.update_protect_branch_success=Možnosti ochrany této větve byly změněny!
settings.hooks=Webové háčky
settings.githooks=Háčky Gitu
settings.basic_settings=Základní nastavení
@@ -691,49 +723,51 @@ settings.change_reponame_prompt=Tato změna ovlivní vztah odkazů k repositář
settings.advanced_settings=Pokročilá nastavení
settings.wiki_desc=Povolit systém Wiki
settings.use_internal_wiki=Použít vestavěný systém Wiki
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Povolit veřejný přístup k wiki, přestože se jedná o soukromý repositář
settings.use_external_wiki=Používat externí Wiki
settings.external_wiki_url=URL externí Wiki
settings.external_wiki_url_desc=Návštěvníci budou při kliknutí na záložku přesměrování na tuto URL.
settings.external_wiki_url_desc=Návštěvníci budou po kliknutí na danou záložku přesměrováni na tuto URL.
settings.issues_desc=Povolit systém úkolů
settings.use_internal_issue_tracker=Povolit věstavěný odlehčený systém úkolů
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Povolit veřejný přístup k úkolům, přestože se jedná o soukromý repositář
settings.use_external_issue_tracker=Použít externí systém úkolů
settings.external_tracker_url=URL externí evidence úkolů
settings.external_tracker_url_desc=Návštěvníci budou po kliknutí na danou záložku přesměrováni na danou adresu.
settings.external_tracker_url_desc=Návštěvníci budou po kliknutí na danou záložku přesměrováni na tuto URL.
settings.tracker_url_format=Formát URL externího systému úkolů
settings.tracker_issue_style=Styl pojmenování externího systému úkolů:
settings.tracker_issue_style=Styl pojmenování úkolů v externím systému úkolů:
settings.tracker_issue_style.numeric=Číselný
settings.tracker_issue_style.alphanumeric=Alfanumerický
settings.tracker_url_format_desc=Můžete použít zástupné výrazy <code>{user} {repo} {index}</code> pro uživatelské jméno, název repositáře a index úkolu.
settings.tracker_url_format_desc=Můžete použít zástupné výrazy <code>{user} {repo} {index}</code> pro uživatelské jméno, název repositáře a číslo úkolu.
settings.pulls_desc=Povolit požadavky na natažení, aby mohly být příspěvky veřejnosti akceptovány
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Nebezpečná zóna
settings.cannot_fork_to_same_owner=Nemůžete rozštěpit repositář jejímu vlastníkovi.
settings.new_owner_has_same_repo=Nový vlastník již repositář se stejným názvem má. Vyberte, prosíme, jiné jméno.
settings.new_owner_has_same_repo=Nový vlastník již repositář se stejným názvem má. Vyberte, prosím, jiné jméno.
settings.convert=Převést na běžný repositář
settings.convert_desc=Můžete převést toto zrcadlo na běžný repositář. Tato změna nemůže být vrácena.
settings.convert_notices_1=- Tato operace převede tento zrcadlový repositář na běžný repositář a tato změna nemůže být vrácena.
settings.convert_confirm=Potvrdit převod
settings.convert_succeed=Repositář byl úspěšně převeden na běžný typ.
settings.convert_succeed=Repositář byl převeden na běžný typ.
settings.transfer=Předat vlastnictví
settings.transfer_desc=Předat tento repositář jinému uživateli nebo organizaci, ve které jste správce.
settings.transfer_notices_1=- Ztratíte přístup, pokud nový vlastník je samostatný uživatel.
settings.transfer_notices_2=- Přístup vám bude zachován, pokud nový vlastník je organizace a vy jste jedním z vlastníků.
settings.transfer_notices_2=- Přístup vám bude zachován, pokud nový vlastník je organizace a vy jste jedním z jejích vlastníků.
settings.transfer_form_title=Zadejte prosím následující informace pro potvrzení operace:
settings.wiki_delete=Smazat data Wiki
settings.wiki_delete_desc=Pokud smažete data Wiki, nebude možné se vrátit. Buďte si, prosím, jist.
settings.wiki_delete_notices_1=- Toto smaže a vypne Wiki pro %s
settings.wiki_deletion_success=Data Wiki tohoto repositáře byla úspěšně smazána.
settings.wiki_deletion_success=Data Wiki tohoto repositáře byla smazána.
settings.delete=Smazat tento repositář
settings.delete_desc=Jakmile smažete repositář, není možné se vrátit. Buďte si, prosím, jist.
settings.delete_notices_1=- Tuto operaci <strong>nelze</strong> zvrátit.
settings.delete_notices_2=Tato operace permanentně smaže vše v tomto repositáři, včetně dat Gitu, úkolů, komentářů a přístupu spolupracovníků.
settings.delete_notices_fork_1=- Po smazání se všechny forky se stanou nezávislé.
settings.deletion_success=Repositář byl úspěšně smazán!
settings.update_settings_success=Možnosti repositáře byly úspěšně změněny.
settings.deletion_success=Repositář byl smazán!
settings.update_settings_success=Možnosti repositáře byly změněny.
settings.transfer_owner=Nový vlastník
settings.make_transfer=Předat
settings.transfer_succeed=Repositář byl úspěšně předán.
settings.transfer_succeed=Repositář byl předán.
settings.confirm_delete=Potvrdit smazání
settings.add_collaborator=Přidat nového spolupracovníka
settings.add_collaborator_success=Nový spolupracovník byl přidán.
@@ -747,12 +781,12 @@ settings.add_webhook=Přidat webový háček
settings.hooks_desc=Webové háčky jsou podobné základním spouštím HTTP POST událostí. Kdykoliv se něco stane v Gogs, bude postaráno o oznámení specifikovanému cílovému serveru. Více se o daném dozvíte v <a target="_blank" href="%s">příručce webových háčků</a>.
settings.webhook_deletion=Smazat webový háček
settings.webhook_deletion_desc=Smazáním tohoto webového háčku dojte také ke smazání veškerých informací o něm a také historie volání. Chcete pokračovat?
settings.webhook_deletion_success=Webový háček byl úspěšně smazán!
settings.webhook_deletion_success=Webový háček byl smazán!
settings.webhook.test_delivery=Test doručitelnosti
settings.webhook.test_delivery_desc=Odeslat falešnou událost doručení odeslání pro test vašeho nastavení webových háčků
settings.webhook.test_delivery_success=Testovací webový háček byl přidán do fronty doručení. Bude to trvat několik sekund, než se ukáže v historii doručení.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Opětovné doručení
settings.webhook.redelivery_success=Úloha háčku '%s' byla znova přidána do doručovací fronty. Zabere to přibližně pár sekund, než bude změněn stav doručení v historii.
settings.webhook.request=Požadavek
settings.webhook.response=Odpověď
settings.webhook.headers=Hlavičky
@@ -764,14 +798,14 @@ settings.githook_name=Název háčku
settings.githook_content=Obsah háčku
settings.update_githook=Změnit háček
settings.add_webhook_desc=Gogs zašle požadavek typu <code>POST</code> na zadanou URL, společně s informacemi o události, která nastala. Můžete také specifikovat, jaký datový formát se má použít po spuštění daného háčku (JSON, x-www-form-urlencoded, XML atp.). Více informací je k nalezení v našem <a target="_blank" href="%s">Návodu na webové háčky</a>.
settings.payload_url=URL obsahu
settings.payload_url=URL nákladu
settings.content_type=Typ obsahu
settings.secret=Tajný klíč
settings.secret_desc=Tajný klíč bude odeslán jako SHA256 HMAC hexadecimální přehled použítím hlavičky <code>X-Gogs-Signature</code>.
settings.secret_desc=Tajný klíč bude odeslán jako SHA256 HMAC hexadecimální přehled nákladu použítím hlavičky <code>X-Gogs-Signature</code>.
settings.slack_username=Uživatelské jméno
settings.slack_icon_url=URL ikony uživatele
settings.slack_color=Barva
settings.event_desc=Kdyby měl být webový háček spouštěn?
settings.event_desc=Kdyby měl být tento webový háček spouštěn?
settings.event_push_only=Jen pouze při události <code>odeslání</code>.
settings.event_send_everything=Potřebuji <strong>vše</strong>.
settings.event_choose=Nech mne vybrat, co potřebuji.
@@ -784,7 +818,7 @@ settings.event_fork_desc=Repositář rozštěpen
settings.event_push=Odeslat
settings.event_push_desc=Odeslání pomocí Gitu do repositáře
settings.event_issues=Úkoly
settings.event_issues_desc=Úkol, který je otevřen, uzavřen, změněn, přiřazen, nepřiřazen, mající změněn štítek, smazán štítek, mající přiřazen milník, nemající přiřazen milník.
settings.event_issues_desc=Úkol, který je otevřen, uzavřen, znovuotevřen, změněn, přiřazen, nepřiřazen, mající změněn štítek, smazán štítek, mající přiřazen milník, nemající přiřazen milník.
settings.event_issue_comment=Komentář k úkolu
settings.event_issue_comment_desc=Komentář k úkolu vytvořen, upraven nebo smazán.
settings.event_pull_request=Požadavek na natažení
@@ -801,22 +835,23 @@ settings.recent_deliveries=Nedávné dodávky
settings.hook_type=Typ háčku
settings.add_slack_hook_desc=Přidat integraci <a href="%s">Slacku</a> do vašeho repositáře.
settings.add_discord_hook_desc=Přidat integraci <a href="%s">Discord</a> do vašeho repositáře.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Poukázka
settings.slack_domain=Doména
settings.slack_channel=Kanál
settings.deploy_keys=Klíče pro nasazení
settings.deploy_keys_helper=<b>Přichycen při činu!</b> Pokud chcete přidat osobní veřejné klíče, zadejte je prosím v <a href="%s%s">nastavení vašeho účtu</a>.
settings.add_deploy_key=Přidat klíč pro nasazení
settings.deploy_key_desc=Klíče pro nasazení mají pouze přístup ke čtení. Nejsou stejné jako osobní klíče SSH.
settings.deploy_key_desc=Klíče pro nasazení mají pouze přístup ke čtení. Nejsou stejné jako osobní SSH klíče.
settings.no_deploy_keys=Žádné klíče pro nasazení nebyly ještě přidány.
settings.title=Název
settings.deploy_key_content=Obsah
settings.key_been_used=Obsah klíče pro nasazení byl použit.
settings.key_name_used=Klíč pro nasazení se stejným jménem již existuje.
settings.add_key_success=Nový klíč pro nasazení '%s' byl úspěšně přidán!
settings.add_key_success=Nový klíč pro nasazení '%s' byl přidán!
settings.deploy_key_deletion=Smazat klíč pro nasazení
settings.deploy_key_deletion_desc=Smazání toho klíče pro nasazení smaže také veškerý k němu svázaný přístup do tohoto repositáře. Chcete pokračovat?
settings.deploy_key_deletion_success=Klíč pro nasazení byl úspěšně smazán!
settings.deploy_key_deletion_success=Klíč pro nasazení byl smazán!
diff.browse_source=Procházet zdrojové kódy
diff.parent=rodič
@@ -824,12 +859,12 @@ diff.commit=revize
diff.data_not_available=Rozdílová data nejsou dostupná.
diff.show_diff_stats=Ukázat statistiku rozdílových dat
diff.show_split_view=Rozdělené zobrazení
diff.show_unified_view=Jednotný pohled
diff.show_unified_view=Jednotné zobrazení
diff.stats_desc=<strong> %d změnil soubory</strong>, kde provedl <strong>%d přidání</strong> a <strong>%d odebrání</strong>
diff.bin=binární
diff.view_file=Zobrazit soubor
diff.file_suppressed=Diff nebyl zobrazen, protože je příliš veli
diff.too_many_files=Některé soubory nejsou zobrazny, neboť je v této revizi změněno mnoho souborů
diff.file_suppressed=Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
diff.too_many_files=Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů
release.releases=Vydání
release.new_release=Nové vydání
@@ -857,7 +892,7 @@ release.edit_release=Upravit vydání
release.delete_release=Smazat toto vydání
release.deletion=Smazání vydání
release.deletion_desc=Smazáním tohoto vydání se také smaže odpovídající značka. Chcete pokračovat?
release.deletion_success=Vydání bylo úspěšně smazáno!
release.deletion_success=Vydání bylo smazáno!
release.tag_name_already_exist=Vydání s touto značkou již existuje.
release.tag_name_invalid=Název značky není platný.
release.downloads=Soubory ke stažení
@@ -891,9 +926,9 @@ settings.full_name=Celé jméno
settings.website=Webové stránky
settings.location=Umístění
settings.update_settings=Změnit nastavení
settings.update_setting_success=Nastavení organizace bylo úspěšně změněno.
settings.update_setting_success=Nastavení organizace bylo změněno.
settings.change_orgname_prompt=Tato změna ovlivní vztah odkazů k organizaci.
settings.update_avatar_success=Nastavení ikony organizace bylo úspěšně změněno.
settings.update_avatar_success=Nastavení ikony organizace bylo změněno.
settings.delete=Smazat organizaci
settings.delete_account=Smazat tuto organizaci
settings.delete_prompt=Organizace bude trvale smazána a tato změna <strong>nemůže</strong> být vrácena!
@@ -932,7 +967,7 @@ teams.delete_team=Smazat tento tým
teams.add_team_member=Přidat člena týmu
teams.delete_team_title=Smazání týmu
teams.delete_team_desc=Jelikož bude tento tým smazán, jeho členové mohou ztratit přístup do některých repositářů. Chcete pokračovat?
teams.delete_team_success=Daný tým byl úspěšně smazán.
teams.delete_team_success=Daný tým byl smazán.
teams.read_permission_desc=Členství v tom týmu poskytuje právo <strong>čtení</strong>: členové mohou číst z a vytvářet klony repositářů týmu.
teams.write_permission_desc=Členství v tom týmu poskytuje právo <strong>zápisu</strong>: členové mohou číst z a odesílat do repositářů týmu.
teams.admin_permission_desc=Členství v tom týmu poskytuje právo <strong>správce</strong>: členové mohou číst z, odesílat do a přidávat spolupracovníky do repositářů týmu.
@@ -940,7 +975,7 @@ teams.repositories=Repositáře týmu
teams.search_repo_placeholder=Hledat repositář...
teams.add_team_repository=Přidat repositář týmu
teams.remove_repo=Odstranit
teams.add_nonexistent_repo=Repositář, který se snažíte přidat, neexistuje. Prosím, nejdříve jej vytvořte.
teams.add_nonexistent_repo=Repositář, který se snažíte přidat, neexistuje. Nejdříve jej vytvořte, prosím.
[admin]
dashboard=Přehled
@@ -962,22 +997,22 @@ dashboard.statistic_info=Databáze Gogs obsahuje <b>%d</b> uživatelů, <b>%d</b
dashboard.operation_name=Název operace
dashboard.operation_switch=Přepnout
dashboard.operation_run=Spustit
dashboard.clean_unbind_oauth=Smazat nepřipojené asociace OAuth2
dashboard.clean_unbind_oauth_success=Všechny nepřipojené asociace OAuth2 byly úspěšně smazány.
dashboard.clean_unbind_oauth=Smazat odpojené asociace OAuth2
dashboard.clean_unbind_oauth_success=Všechny odpojené asociace OAuth2 byly smazány.
dashboard.delete_inactivate_accounts=Smazat všechny neaktivní účty
dashboard.delete_inactivate_accounts_success=Všechny neaktivní účty byly úspěšně smazány.
dashboard.delete_inactivate_accounts_success=Všechny neaktivní účty byly smazány.
dashboard.delete_repo_archives=Smazat všechny archívy repositářů
dashboard.delete_repo_archives_success=Všechny archívy repositářů byly úspěšně smazány.
dashboard.delete_repo_archives_success=Všechny archívy repositářů byly smazány.
dashboard.delete_missing_repos=Smazat všechny záznamy repositářů, které ztratily soubory Gitu
dashboard.delete_missing_repos_success=Všechny repositáře, které ztratily soubory Gity, byly úspěšně smazány.
dashboard.delete_missing_repos_success=Všechny repositáře, které ztratily soubory Gitu, byly smazány.
dashboard.git_gc_repos=Provést úklid GC nad repositáři
dashboard.git_gc_repos_success=Úklid GC nad všemi repositáři byl úspěšně proveden.
dashboard.git_gc_repos_success=Úklid GC nad všemi repositáři byl proveden.
dashboard.resync_all_sshkeys=Přepsat soubor '.ssh/authorized_keys' (upozornění: klíče nevzniklé v Gogs budou ztraceny)
dashboard.resync_all_sshkeys_success=Všechny veřejné klíče byly úspěšně přepsány.
dashboard.resync_all_sshkeys_success=Všechny veřejné klíče byly přepsány.
dashboard.resync_all_hooks=Sesynchronizovat háčky před-získání, změny a po-získání pro všechny repositáře
dashboard.resync_all_hooks_success=Všechny háčky repositáře pro před-získání, změnu a po-získání byly úspěšně sesynchronizovány.
dashboard.resync_all_hooks_success=Všechny háčky repositáře pro před-získání, změnu a po-získání byly sesynchronizovány.
dashboard.reinit_missing_repos=Znovu inicializovat záznamy všech repositářů, které ztratily soubory Gitu
dashboard.reinit_missing_repos_success=Záznamy všech repositářů, které ztratily soubory Gitu, byly znovu úspěšně inicializovány.
dashboard.reinit_missing_repos_success=Záznamy všech repositářů, které ztratily soubory Gitu, byly znovu inicializovány.
dashboard.server_uptime=Doba provozu serveru
dashboard.current_goroutine=Aktuální Goroutines
@@ -1009,7 +1044,7 @@ dashboard.total_gc_pause=Celková pauza GC
dashboard.last_gc_pause=Poslední pauza GC
dashboard.gc_times=Časy GC
users.user_manage_panel=Uživatelský panel
users.user_manage_panel=Panel správy uživatelů
users.new_account=Vytvořit nový účet
users.name=Jméno
users.activated=Aktivován
@@ -1017,13 +1052,13 @@ users.admin=Správce
users.repos=Repositáře
users.created=Vytvořen
users.send_register_notify=Poslat upozornění na registraci uživateli
users.new_success=Nový účet '%s' byl úspěšně vytvořen.
users.new_success=Nový účet '%s' byl vytvořen.
users.edit=Upravit
users.auth_source=Zdroj způsobu ověření
users.local=Místní
users.auth_login_name=Přihlašovací jméno způsobu ověření
users.password_helper=Nechte prázdné, pokud se nemá změnit.
users.update_profile_success=Profil účtu byl úspěšně změněn.
users.update_profile_success=Profil účtu byl změněn.
users.edit_account=Upravit účet
users.max_repo_creation=Limit počtu vytvořených repositářů
users.max_repo_creation_desc=(Nastavte na -1 pro použití výchozího systémového limitu)
@@ -1036,7 +1071,7 @@ users.update_profile=Změnit profil účtu
users.delete_account=Smazat tento účet
users.still_own_repo=Tento účet je stále vlastníkem nejméně jednoho repositáře, je potřeba repositář nejdříve smazat nebo předat.
users.still_has_org=Tento účet je členem minimálně jedné organizace, musíte nejdříve dané organizace opustit nebo je smazat.
users.deletion_success=Účet byl úspěšně smazán!
users.deletion_success=Účet byl smazán!
orgs.org_manage_panel=Panel správy organizací
orgs.name=Název
@@ -1047,7 +1082,7 @@ repos.repo_manage_panel=Panel správy repositářů
repos.owner=Vlastník
repos.name=Název
repos.private=Soukromý
repos.watches=Sledovači
repos.watches=Sledujících
repos.stars=Oblíbení
repos.issues=Úkoly
repos.size=Velikost
@@ -1065,15 +1100,21 @@ auths.domain=Doména
auths.host=Server
auths.port=Port
auths.bind_dn=Připojení DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Heslo připojení
auths.bind_password_helper=Upozornění: Toto heslo je ukládáno nešifrované. Nepoužívejte pro správcovské účty.
auths.user_base=Výchozí místo hledání uživatelů
auths.user_dn=DN uživatele
auths.attribute_username=Uživatelské jméno
auths.attribute_username_placeholder=Zanechat prázdné pro použití hodnoty pole uživatelského jména z přihlašovacího formuláře.
auths.attribute_name=Křestní jméno
auths.attribute_surname=Příjmení
auths.attribute_mail=E-mailová adresa
auths.attribute_username=Atribut uživatelského jména
auths.attribute_username_placeholder=Nechte toto pole prázdné pro použití hodnoty pole uživatelského jména z přihlašovacího formuláře.
auths.attribute_name=Atribut křestního jména
auths.attribute_surname=Atribut příjmení
auths.attribute_mail=Atribut e-mailové adresy
auths.verify_group_membership=Ověřovat členství ve skupině
auths.group_search_base_dn=Základní DN pro vyhledávání skupin
auths.group_filter=Skupinový filtr
auths.group_attribute_contain_user_list=Skupinový atribut, který obsahuje seznam uživatelů
auths.user_attribute_listed_in_group=Atribut uživatele (ve skupině)
auths.attributes_in_bind=Vyzvednout atributy v kontextu Bind DN
auths.filter=Uživatelský filtr
auths.admin_filter=Správcovský filtr
@@ -1090,16 +1131,17 @@ auths.enable_auto_register=Povolit zaregistrování se
auths.tips=Tipy
auths.edit=Upravit nastavení ověřování
auths.activated=Tento způsob ověřování je aktivní
auths.new_success=Nový způsob ověřování '%s' byl úspěšně přidán.
auths.update_success=Nastavení ověřování bylo úspěšně změněno.
auths.new_success=Nový způsob ověřování '%s' byl přidán.
auths.update_success=Nastavení ověřování bylo změněno.
auths.update=Změnit nastavení ověřování
auths.delete=Smazat tento způsob ověřování
auths.delete_auth_title=Smazání způsobu ověřování
auths.delete_auth_desc=Tento způsob ověřování bude smazán, chcete pokračovat?
auths.still_in_used=Tento způsob ověřování je stále používán některými uživateli. Prosím, nejdříve změňte u těchto uživatelů typ ověřování na jiný.
auths.deletion_success=Způsob ověřování byl úspěšně smazán!
auths.deletion_success=Způsob ověřování byl smazán!
auths.login_source_exist=Zdroj přihlášení '%s' již existuje.
config.not_set=(not set)
config.server_config=Nastavení serveru
config.app_name=Název aplikace
config.app_ver=Verze aplikace
@@ -1136,18 +1178,21 @@ config.disable_http_git=Vypnout HTTP Git
config.enable_local_path_migration=Povolit migraci z místní cesty
config.commits_fetch_concurrency=Souběžnost vyzvednutí revizí
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Nastavení databáze
config.db_type=Typ
config.db_host=Server
config.db_name=Název
config.db_user=Uživatel
config.db_ssl_mode=Režim SSL
config.db_ssl_mode=SSL režim
config.db_ssl_mode_helper=(pouze pro 'postgres')
config.db_path=Cesta
config.db_path_helper=(pro "sqlite3" a "tidb")
config.service_config=Nastavení služby
config.register_email_confirm=Vyžadovat potvrzení e-mailem
config.register_email_confirm=Vyžadovat potvrzení e-mailu
config.disable_register=Vypnout registraci
config.show_registration_button=Ukázat tlačítko registrace
config.require_sign_in_view=Vyžadovat zobrazení přihlášení
@@ -1234,13 +1279,13 @@ notices.type=Typ
notices.type_1=Repositář
notices.desc=Popis
notices.op=Op.
notices.delete_success=Systémová upozornění byla úspěšně smazána.
notices.delete_success=Systémová upozornění byla smazána.
[action]
create_repo=vytvořil repositář <a href="%s">%s</a>
fork_repo=rozštěpil repositář do <a href="%s">%s</a>
rename_repo=přejmenoval repositář z <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
commit_repo=odeslal do <a href="%[1]s/src/%[2]s">%[3]s</a> v <a href="%[1]s">%[4]s</a>
commit_repo=odeslal do větve <a href="%[1]s/src/%[2]s">%[3]s</a> v repositáři <a href="%[1]s">%[4]s</a>
compare_commits=Zobrazit porovnání pro tyto %d revize
transfer_repo=předal repositář <code>%s</code> uživateli/organizaci <a href="%s">%s</a>
create_issue=`vytvořil úkol <a href="%s/issues/%s">%s#%[2]s</a>`
@@ -1253,7 +1298,7 @@ reopen_pull_request=`znovuotevřel požadavek na natažení <a href="%s/pulls/%s
merge_pull_request=`sloučil požadavek na natažení <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=vytvořil novou větev <a href="%[1]s/src/%[2]s">%[3]s</a> v <a href="%[1]s">%[4]s</a>
delete_branch=smazal větev <code>%[2]s</code> v <a href="%[1]s">%[3]s</a>
push_tag=odeslal značku <a href="%s/src/%s">%[2]s</a> do <a href="%[1]s">%[3]s</a>
push_tag=odeslal značku <a href="%s/src/%s">%[2]s</a> do repositáře <a href="%[1]s">%[3]s</a>
delete_tag=smazána značka <code>%[2]s</code> v <a href="%[1]s">%[3]s</a>
[tool]

View File

@@ -82,8 +82,8 @@ app_url=Anwendungs-URL
app_url_helper=Dies hat Auswirkung auf die HTTP/HTTPS Klon-URLs und den Inhalt der E-Mails.
log_root_path=Logdateipfad
log_root_path_helper=Verzeichnis in das Logdateien geschrieben werden.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Konsolen-Modus einschalten
enable_console_mode_popup=Zusätzlich zum Datei-Modus, zeige Logs auch in der Konsole.
optional_title=Optionale Einstellungen
email_title=E-Mail-Service Einstellungen
@@ -119,6 +119,7 @@ sqlite3_not_available=Ihre Gogs-Version unterstützt SQLite3 nicht. Bitte laden
invalid_db_setting=Datenbankeinstellungen sind nicht korrekt: %v
invalid_repo_path=Repository Verzeichnis ist ungültig: %v
run_user_not_match=Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
smtp_host_missing_port=In der Adresse des SMTP Host fehlt die Portnummer.
invalid_smtp_from=SMTP Absender Feld ist nicht gültig: %v
save_config_failed=Fehler beim Speichern der Konfiguration: %v
invalid_admin_setting=Admin-Konto Einstellungen sind ungültig: %v
@@ -168,6 +169,14 @@ reset_password_helper=Hier klicken, um das Passwort zurückzusetzen
password_too_short=Das Passwort muss mindenstens 6 Zeichen lang sein.
non_local_account=Nicht-lokale Konten können Passwörter nicht via Gogs ändern.
login_two_factor=Zwei-Faktor-Authentifizierung
login_two_factor_passcode=PIN
login_two_factor_enter_recovery_code=Geben Sie einen Wiederherstellungscode für die Zwei-Faktor-Authentifizierung ein
login_two_factor_recovery=Zwei-Faktor-Wiederherstellung
login_two_factor_recovery_code=Wiederherstellungscode
login_two_factor_enter_passcode=Geben Sie die Zwei-Faktor-Authentifizierungs PIN ein
login_two_factor_invalid_recovery_code=Der Wiederherstellungscode wurde schon benutzt oder ist nicht gültig.
[mail]
activate_account=Bitte aktivieren Sie Ihr Konto
activate_email=Bestätigen Sie Ihre E-Mail-Adresse
@@ -255,12 +264,11 @@ profile=Profil
password=Passwort
avatar=Profilbild
ssh_keys=SSH-Schlüssel
social=Soziale Konten
applications=Anwendungen
orgs=Organisationen
security=Sicherheit
repos=Repositories
orgs=Organisationen
applications=Anwendungen
delete=Konto löschen
uid=Uid
public_profile=Öffentliches Profil
profile_desc=Ihre E-Mail-Adresse ist öffentlich einsehbar und dient dazu, Ihnen Benachrichtigungen bezüglich Ihres Kontos und Aktivitäten auf der Webseite zu schicken.
@@ -326,10 +334,30 @@ 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 entfernen Sie alle Verknüpfungen, die Ihnen nicht bekannt sind.
unbind=Verknüpfung entfernen
unbind_success=Die Verknüpfung zum sozialen Konto wurde entfernt.
two_factor=Zwei-Faktor-Authentifizierung
two_factor_status=Status:
two_factor_on=Ein
two_factor_off=Aus
two_factor_enable=Aktivieren
two_factor_disable=Deaktivieren
two_factor_view_recovery_codes=Betrachten und verwahren Sie <a href="%s%s">Ihre Wiederherstellungscodes</a> an einem sicheren Ort. Sie können diese als Passwort-Code nutzen, auch wenn Sie den Zugriff zu Ihrer Authentifizierungsanwendung verloren haben.
two_factor_http=Für HTTP/HTTPS-Operationen können Sie keine schlichten Benutzernamen und Passwörter mehr nutzen. Bitte erstellen und benutzen Sie ein <a href="%[1]s%[2]s">Persönliches Zugriffs-Token</a> als Ihre Anmeldeinformation, z.B. <code>%[3]s</code>.
two_factor_enable_title=Zwei-Faktor-Authentifizierung aktivieren
two_factor_scan_qr=Bitte benutzen Sie Ihre Authentifizierungsanwendung, um das Bild zu scannen:
two_factor_or_enter_secret=Oder geben Sie Ihren Geheim-Code ein:
two_factor_then_enter_passcode=Geben Sie die PIN ein:
two_factor_verify=Bestätigen
two_factor_invalid_passcode=Die eingegebene PIN ist ungültig. Bitte versuchen Sie es erneut!
two_factor_enable_error=Einschalten der Zwei-Faktor-Authentifizierung ist fehlgeschlagen: %v
two_factor_enable_success=Die Zwei-Faktor-Authentifizierung wurde für Ihr Konto erfolgreich aktiviert!
two_factor_recovery_codes_title=Zwei-Faktor-Authentifizierung-Wiederherstellungscodes
two_factor_recovery_codes_desc=Wiederherstellungscodes sind dazu gedacht, verwendet zu werden, wenn Sie vorübergehend keinen Zugriff zu Ihrer Authentifizierungsanwendung haben. Jeder Wiederherstellungscode kann nur einmal verwendet werden. <b>Bitte bewahren Sie diese Codes an einem sicheren Ort auf</b>.
two_factor_regenerate_recovery_codes=Wiederherstellungscodes neu generieren
two_factor_regenerate_recovery_codes_error=Das erneute Generieren der Wiederherstellungscodes ist fehlgeschlagen: %v
two_factor_regenerate_recovery_codes_success=Die neuen Wiederherstellungscodes wurden erfolgreich generiert!
two_factor_disable_title=Zwei-Faktor-Authentifizierung deaktivieren
two_factor_disable_desc=Das Sicherheitsniveau Ihres Kontos wird deutlich reduziert sein, nachdem die Zwei-Faktor-Authentifizierung deaktiviert wurde. Möchten Sie fortfahren?
two_factor_disable_success=Die Zwei-Faktor-Authentifizierung wurde erfolgreich deaktiviert!
manage_access_token=Verwaltung persönlicher Zugangs-Token
generate_new_token=Neues Token erzeugen
@@ -347,10 +375,10 @@ orgs.none=Sie sind kein Mitglied einer Organisation.
orgs.leave_title=Organisation verlassen
orgs.leave_desc=Sie verlieren den Zugriff auf alle Repositories und Teams nach dem Verlassen der Organisation. Möchten Sie fortfahren?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Verlassen
repos.leave_title=Repository verlassen
repos.leave_desc=Der Zugang zum Repository wird verloren gehen, wenn Sie es verlassen. Möchten Sie fortfahren?
repos.leave_success=Sie haben das Repository '%s' erfolgreich verlassen!
delete_account=Konto löschen
delete_prompt=Diese Aktion wird Ihr Konto dauerhaft löschen und kann <strong>NICHT</strong> rückgängig gemacht werden!
@@ -400,7 +428,7 @@ migrate_type_helper=Dieses Repository wird ein <span class="text blue">Mirror</s
migrate_repo=Repository migrieren
migrate.clone_address=Adresse kopieren
migrate.clone_address_desc=Dies kann eine HTTP/HTTPS/GIT-URL sein.
migrate.clone_address_desc_import_local=Sie dürfen auch eine Repository vom lokalen Serverpfad migrieren.
migrate.clone_address_desc_import_local=Sie dürfen auch ein Repository vom lokalen Serverpfad migrieren.
migrate.permission_denied=Ihnen fehlen die Rechte zum Importieren lokaler Repositories.
migrate.invalid_local_path=Der lokale Pfad ist ungültig, existiert nicht oder ist kein Ordner.
migrate.failed=Fehler bei Migration: %v
@@ -422,7 +450,7 @@ quick_guide=Kurzanleitung
clone_this_repo=Dieses Repository klonen
create_new_repo_command=Erstellen Sie ein neues Repository mittels der Kommandozeile
push_exist_repo=Bestehendes Repository von der Kommandozeile pushen
bare_message=This repository does not have any content yet.
bare_message=Dieses Repository hat noch keinen Inhalt.
files=Dateien
branch=Branch
@@ -588,6 +616,7 @@ pulls.compare_compare=vergleichen
pulls.filter_branch=Branch filtern
pulls.no_results=Keine Ergebnisse verfügbar.
pulls.nothing_to_compare=Es gibt nichts zu vergleichen, da Base- und Head-Branch gleich sind.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`Es existiert bereits ein Pull-Request zwischen diesen beiden Zielen: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Pull-Request erstellen
pulls.title_desc=möchte %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> zusammenführen
@@ -603,6 +632,8 @@ pulls.is_checking=Die Konfliktprüfung läuft noch. Bitte aktualisieren Sie die
pulls.can_auto_merge_desc=Dieser Pull-Request kann automatisch zusammengeführt werden.
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da es Konflikte gibt.
pulls.cannot_auto_merge_helper=Bitte manuell zusammenführen, um die Konflikte zu lösen.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Pull-Request zusammenführen
pulls.open_unmerged_pull_exists=`Sie können diesen Pull-Request nicht wieder öffnen, da bereits ein offener Pull-Request (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Zusammenführen wartet.`
pulls.delete_branch=Zweig löschen
@@ -613,8 +644,8 @@ 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.open=Öffnen
milestones.close=Schließen
milestones.new_subheader=Erstellen Sie Meilensteine, um ihre Issues zu organisieren.
milestones.create=Meilenstein erstellen
milestones.title=Titel
@@ -658,10 +689,11 @@ settings.collaboration.write=Schreibrechte
settings.collaboration.read=Leserechte
settings.collaboration.undefined=Nicht definiert
settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Branches leerer Repositories können nicht verwaltet werden. Bitte erst Datei(en) pushen.
settings.default_branch=Standard-Branch
settings.default_branch_desc=Der Standard-Branch gilt als Basis für Commits, Pull-Requests und Online-Bearbeitung.
settings.update=Aktualisieren
settings.update_default_branch_unsupported=Die Änderung des Standard-Branch wird von der Git-Version auf dem Server nicht unterstützt.
settings.update_default_branch_success=Standard-Branch dieses Repositories wurde erfolgreich aktualisiert!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Schützt Branches vor forcierten Pushes und versehentlichem Löschen. Comitter können freigeschaltet werden.
@@ -691,13 +723,13 @@ settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich
settings.advanced_settings=Erweiterte Einstellungen
settings.wiki_desc=Wiki einschalten
settings.use_internal_wiki=Eingebautes Wiki verwenden
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Erlaube öffentlichen Zugang zum Wiki, auch wenn das Repository privat ist
settings.use_external_wiki=Externes Wiki verwenden
settings.external_wiki_url=Externe Wiki URL
settings.external_wiki_url_desc=Besucher werden auf diese URL umgeleitet, wenn sie auf den Tab klicken.
settings.issues_desc=Issue-Tracker einschalten
settings.use_internal_issue_tracker=Eingebauten Issue-Tracker verwenden
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Erlaube öffentlichen Zugriff auf Issues, auch wenn das Repository privat ist
settings.use_external_issue_tracker=Externes Issue-System verwenden
settings.external_tracker_url=URL eines externen Issue Trackers
settings.external_tracker_url_desc=Besucher werden auf diese URL umgeleitet, wenn sie auf den Tab klicken.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numerisch
settings.tracker_issue_style.alphanumeric=Alphanumerisch
settings.tracker_url_format_desc=Sie können die Platzhalter <code>{user} {repo} {index}</code> für den Benutzernamen, den Namen des Repositories und die Issue-Nummer verwenden.
settings.pulls_desc=Pull-Requests aktivieren, um öffentliche Mitwirkung zu ermöglichen
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Gefahrenzone
settings.cannot_fork_to_same_owner=Besitzer kann das Repository nicht forken.
settings.new_owner_has_same_repo=Der neue Eigentümer hat bereits ein Repository mit dem gleichen Namen. Bitte wählen Sie einen anderen Namen.
@@ -716,12 +750,12 @@ settings.convert_notices_1=- Dieser Vorgang wandelt das Mirror-Repository in ein
settings.convert_confirm=Umwandlung bestätigen
settings.convert_succeed=Das Repository wurde erfolgreich in ein normales Repository umgewandelt.
settings.transfer=Besitz übertragen
settings.transfer_desc=Dieses Repository auf einen anderen Benutzer bzw. eine Organisation in der Sie Admin-Rechte haben übertragen.
settings.transfer_desc=Dieses Repository auf einen anderen Benutzer oder eine Organisation, in der Sie Admin-Rechte haben, übertragen.
settings.transfer_notices_1=- Sie werden keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist.
settings.transfer_notices_2=- Sie werden weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und Sie einer der Besitzer sind.
settings.transfer_form_title=Bitte geben Sie die folgenden Informationen ein, um die Operation zu bestätigen:
settings.wiki_delete=Wiki-Daten löschen
settings.wiki_delete_desc=Das Löschen von Wiki Daten kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.
settings.wiki_delete_desc=Das Löschen von Wiki-Daten kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.
settings.wiki_delete_notices_1=- Dies löscht und deaktiviert das Wiki für %s
settings.wiki_deletion_success=Repository Wiki Daten erfolgreich gelöscht.
settings.delete=Dieses Repository löschen
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Webhook wurde erfolgreich entfernt!
settings.webhook.test_delivery=Senden testen
settings.webhook.test_delivery_desc=Sendet ein simuliertes Push-Ereignis, um die Webhook-Einstellungen zu testen
settings.webhook.test_delivery_success=Test-Webhook wurde zur Auslieferungswarteschlange hinzugefügt. Es kann einige Sekunden dauern, bevor es in der Auslieferungshistorie erscheint.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Erneuter Versand
settings.webhook.redelivery_success=Hook-Task '%s' wurde wieder zur Auslieferungswarteschlange hinzugefügt. Es kann einige Sekunden, bis sich der Auslieferungsstatus in der History aktualisiert hat.
settings.webhook.request=Anfrage
settings.webhook.response=Antwort
settings.webhook.headers=Kopfzeilen
@@ -801,6 +835,7 @@ settings.recent_deliveries=Letzte Zustellungen
settings.hook_type=Hook Typ
settings.add_slack_hook_desc=Fügen Sie <a href="%s">Slack</a>-Integration zu Ihrem Repository hinzu.
settings.add_discord_hook_desc=Fügen Sie <a href="%s">Discord</a>-Integration zu Ihrem Repository hinzu.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Token
settings.slack_domain=Domain
settings.slack_channel=Kanal
@@ -974,7 +1009,7 @@ dashboard.git_gc_repos=Garbage Collection auf Repositories ausführen
dashboard.git_gc_repos_success=Garbage Collection wurde auf allen Repositories erfolgreich ausgeführt.
dashboard.resync_all_sshkeys=Datei '.ssh/authorized_keys' neu anlegen (Achtung: Schlüssel, die nicht zu Gogs gehören gehen verloren)
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositorien
dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositories
dashboard.resync_all_hooks_success=Pre-receive, update und post-receive Hooks aller Repositorien wurden erfolgreich synchronisiert.
dashboard.reinit_missing_repos=Alle Repository-Datensätze mit verloren gegangenen Git-Dateien neu initialisieren
dashboard.reinit_missing_repos_success=Alle Repository-Datensätze, die Git-Dateien verloren haben wurden erfolgreich neu initialisiert.
@@ -1065,15 +1100,21 @@ auths.domain=Domain
auths.host=Host
auths.port=Port
auths.bind_dn=DN binden
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Passwort binden
auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutzen Sie kein Konto mit hoher Berechtigungsstufe.
auths.user_base=Basis für Benutzersuche
auths.user_dn=Benutzer-DN
auths.attribute_username=Attribut Benutzername
auths.attribute_username_placeholder=Leer lassen, um den Wert aus dem Anmeldeformular als Benutzernamen zu verwenden.
auths.attribute_name=Attribut Vorname
auths.attribute_name=Vornamenattribut
auths.attribute_surname=Attribut Nachname
auths.attribute_mail=Attribut E-Mail
auths.verify_group_membership=Überprüfen der Gruppenmitgliedschaft
auths.group_search_base_dn=Gruppensuche Basisdomainname
auths.group_filter=Gruppenfilter
auths.group_attribute_contain_user_list=Gruppenattribut, beinhaltet die Benutzerliste
auths.user_attribute_listed_in_group=Benutzerattribut in der Gruppenliste
auths.attributes_in_bind=Hole Attribute im Bind-Kontext
auths.filter=Benutzerfilter
auths.admin_filter=Admin Filter
@@ -1100,6 +1141,7 @@ auths.still_in_used=Diese Authentifizierung wird noch von einigen Benutzern verw
auths.deletion_success=Authentifizierung wurde erfolgreich gelöscht!
auths.login_source_exist=Login-Quelle '%s' ist bereits vorhanden.
config.not_set=(not set)
config.server_config=Serverkonfiguration
config.app_name=Name der Anwendung
config.app_ver=Anwendungsversion
@@ -1136,6 +1178,9 @@ config.disable_http_git=Deaktiviere HTTP-Git
config.enable_local_path_migration=Erlaube Migration von lokalem Pfad
config.commits_fetch_concurrency=Anzahl gleichzeitiger Commit-/Fetch-Prozesse
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Datenbankkonfiguration
config.db_type=Typ
config.db_host=Host

1330
conf/locale/locale_en-GB.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -119,6 +119,7 @@ sqlite3_not_available = Your release version does not support SQLite3, please do
invalid_db_setting = Database setting is not correct: %v
invalid_repo_path = Repository root path is invalid: %v
run_user_not_match = Run user isn't the current user: %s -> %s
smtp_host_missing_port = SMTP Host is missing port in address.
invalid_smtp_from = SMTP From field is not valid: %v
save_config_failed = Fail to save configuration: %v
invalid_admin_setting = Admin account setting is invalid: %v
@@ -168,6 +169,14 @@ reset_password_helper = Click here to reset your password
password_too_short = Password length cannot be less then 6.
non_local_account = Non-local accounts cannot change passwords through Gogs.
login_two_factor = Two-factor Authentication
login_two_factor_passcode = Authentication Passcode
login_two_factor_enter_recovery_code = Enter a two-factor recovery code
login_two_factor_recovery = Two-factor Recovery
login_two_factor_recovery_code = Recovery Code
login_two_factor_enter_passcode = Enter a two-factor passcode
login_two_factor_invalid_recovery_code = Recovery code has been used or does not valid.
[mail]
activate_account = Please activate your account
activate_email = Verify your email address
@@ -255,12 +264,11 @@ profile = Profile
password = Password
avatar = Avatar
ssh_keys = SSH Keys
social = Social Accounts
applications = Applications
orgs = Organizations
security = Security
repos = Repositories
orgs = Organizations
applications = Applications
delete = Delete Account
uid = Uid
public_profile = Public Profile
profile_desc = Your email address is public and will be used for any account related notifications, and any web based operations made via the site.
@@ -302,7 +310,7 @@ email_deletion = Email Deletion
email_deletion_desc = Deleting this email address will remove related information from your account. Do you want to continue?
email_deletion_success = Email has been deleted successfully!
add_new_email = Add new email address
add_email = Add email
add_email = Add Email
add_email_confirmation_sent = A new confirmation email has been sent to '%s', please check your inbox within the next %d hours to complete the confirmation process.
add_email_success = Your new email address was successfully added.
@@ -326,10 +334,30 @@ no_activity = No recent activity
key_state_desc = This key is used in last 7 days
token_state_desc = This token is used in last 7 days
manage_social = Manage Associated Social Accounts
social_desc = This is a list of associated social accounts. Remove any binding that you do not recognize.
unbind = Unbind
unbind_success = Social account has been unbound.
two_factor = Two-factor Authentication
two_factor_status = Status:
two_factor_on = On
two_factor_off = Off
two_factor_enable = Enable
two_factor_disable = Disable
two_factor_view_recovery_codes = View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http = For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title = Enable Two-factor Authentication
two_factor_scan_qr = Please use your authentication application to scan the image:
two_factor_or_enter_secret = Or enter the secret:
two_factor_then_enter_passcode = Then enter passcode:
two_factor_verify = Verify
two_factor_invalid_passcode = The passcode you entered is not valid, please try again!
two_factor_enable_error = Enable Two-factor authentication failed: %v
two_factor_enable_success = Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title = Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc = Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes = Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error = Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success = New recovery codes has been generated successfully!
two_factor_disable_title = Disable Two-factor Authentication
two_factor_disable_desc = Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success = Two-factor authentication has disabled successfully!
manage_access_token = Manage Personal Access Tokens
generate_new_token = Generate New Token
@@ -588,6 +616,7 @@ 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.nothing_merge_base = There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking = The conflict checking is still in progress, please refresh p
pulls.can_auto_merge_desc = This pull request can be merged automatically.
pulls.cannot_auto_merge_desc = This pull request can't be merged automatically because there are conflicts.
pulls.cannot_auto_merge_helper = Please merge manually in order to resolve the conflicts.
pulls.create_merge_commit = Create a merge commit
pulls.rebase_before_merging = Rebase before merging
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.`
pulls.delete_branch = Delete Branch
@@ -662,6 +693,7 @@ settings.branches_bare = You cannot manage branches for bare repository. Please
settings.default_branch = Default Branch
settings.default_branch_desc = The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update = Update
settings.update_default_branch_unsupported = Change default branch is not supported by the Git version on server.
settings.update_default_branch_success = Default branch of this repository has been updated successfully!
settings.protected_branches = Protected Branches
settings.protected_branches_desc = Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric = Numeric
settings.tracker_issue_style.alphanumeric = Alphanumeric
settings.tracker_url_format_desc = You can use placeholder <code>{user} {repo} {index}</code> for user name, repository name and issue index.
settings.pulls_desc = Enable pull requests to accept public contributions
settings.pulls.ignore_whitespace = Ignore changes in whitespace
settings.pulls.allow_rebase_merge = Allow use rebase to merge commits
settings.danger_zone = Danger Zone
settings.cannot_fork_to_same_owner = You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo = The new owner already has a repository with same name. Please choose another name.
@@ -727,7 +761,7 @@ settings.wiki_deletion_success = Repository wiki data have been erased successfu
settings.delete = Delete This Repository
settings.delete_desc = Once you delete a repository, there is no going back. Please be certain.
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_2 = - This operation will permanently delete everything in this repository, including Git data, issues, comments and collaborator access.
settings.delete_notices_fork_1 = - All forks will become independent after deletion.
settings.deletion_success = Repository has been deleted successfully!
settings.update_settings_success = Repository options has been updated successfully.
@@ -763,7 +797,7 @@ settings.githook_edit_desc = If the hook is inactive, sample content will be pre
settings.githook_name = Hook Name
settings.githook_content = Hook Content
settings.update_githook = Update Hook
settings.add_webhook_desc = Gogs will send a <code>POST</code> request to the URL you specify, along with regarding the event that occured. You can also specify what kind of data format you'd like to get upon triggering the hook (JSON, x-www-form-urlencoded, XML, etc). More information can be found in our <a target="_blank" href="%s">Webhooks Guide</a>.
settings.add_webhook_desc = Gogs will send a <code>POST</code> request to the URL you specify, along with details regarding the event that occurred. You can also specify what kind of data format you'd like to get upon triggering the hook (JSON, x-www-form-urlencoded, XML, etc). More information can be found in our <a target="_blank" href="%s">Webhooks Guide</a>.
settings.payload_url = Payload URL
settings.content_type = Content Type
settings.secret = Secret
@@ -801,6 +835,7 @@ settings.recent_deliveries = Recent Deliveries
settings.hook_type = Hook Type
settings.add_slack_hook_desc = Add <a href="%s">Slack</a> integration to your repository.
settings.add_discord_hook_desc = Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc = Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token = Token
settings.slack_domain = Domain
settings.slack_channel = Channel
@@ -933,9 +968,9 @@ teams.add_team_member = Add Team Member
teams.delete_team_title = Team Deletion
teams.delete_team_desc = As this team will be deleted, members of this team may lose access to some repositories. Do you want to continue?
teams.delete_team_success = Given team has been deleted successfully.
teams.read_permission_desc = This team grants <strong>Read</strong> access: members can view and clone the team's repositories.
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.read_permission_desc = Membership in this team grants <strong>Read</strong> access: members can view and clone the team's repositories.
teams.write_permission_desc = Membership in this team grants <strong>Write</strong> access: members can read from and push to the team's repositories.
teams.admin_permission_desc = Membership in 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
@@ -1065,15 +1100,21 @@ auths.domain = Domain
auths.host = Host
auths.port = Port
auths.bind_dn = Bind DN
auths.bind_dn_helper = You can use '%s' as placeholder for username, e.g. DOM\%s
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_username = Username attribute
auths.attribute_username = Username Attribute
auths.attribute_username_placeholder = Leave empty to use sign-in form field value for user name.
auths.attribute_name = First name attribute
auths.attribute_surname = Surname attribute
auths.attribute_mail = Email attribute
auths.attribute_name = First Name Attribute
auths.attribute_surname = Surname Attribute
auths.attribute_mail = Email Attribute
auths.verify_group_membership = Verify group membership
auths.group_search_base_dn = Group Search Base DN
auths.group_filter = Group Filter
auths.group_attribute_contain_user_list = Group Attribute Containing List of Users
auths.user_attribute_listed_in_group = User Attribute Listed in Group
auths.attributes_in_bind = Fetch attributes in Bind DN context
auths.filter = User Filter
auths.admin_filter = Admin Filter
@@ -1100,6 +1141,7 @@ auths.still_in_used = This authentication is still used by some users, please de
auths.deletion_success = Authentication has been deleted successfully!
auths.login_source_exist = Login source '%s' already exists.
config.not_set = (not set)
config.server_config = Server Configuration
config.app_name = Application Name
config.app_ver = Application Version
@@ -1136,6 +1178,9 @@ config.disable_http_git = Disable HTTP Git
config.enable_local_path_migration = Enable Local Path Migration
config.commits_fetch_concurrency = Commits Fetch Concurrency
config.http_config = HTTP Configuration
config.http_access_control_allow_origin = Access Control Allow Origin
config.db_config = Database Configuration
config.db_type = Type
config.db_host = Host

View File

@@ -75,15 +75,15 @@ 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.
use_builtin_ssh_server=Usar Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server_popup=Iniciar servidor SSH integrado para operaciones con Git para distinguirlo del demonio SSH del sistema.
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.
log_root_path=Ruta del registro
log_root_path_helper=Directorio donde almacenar los registros.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Activar Modo Consola
enable_console_mode_popup=Además del modo archivo, también imprime los registros en consola.
optional_title=Configuración opcional
email_title=Configuración del servicio de correo
@@ -119,6 +119,7 @@ sqlite3_not_available=Tu versión no soporta SQLite3, por favor descarga el bina
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
smtp_host_missing_port=No se ha definido el puerto para el host SMTP.
invalid_smtp_from=El campo SMTP no es válido: %v
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
@@ -168,6 +169,14 @@ 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.
non_local_account=Cuentas que no son locales no pueden cambiar las contraseñas a través de Gogs.
login_two_factor=Autenticación en dos pasos
login_two_factor_passcode=Pin de autenticación
login_two_factor_enter_recovery_code=Introduce un código de recuperación de autenticación en dos pasos
login_two_factor_recovery=Recuperación de autenticación en dos pasos
login_two_factor_recovery_code=Código de recuperación
login_two_factor_enter_passcode=Introduce un Pin de autenticación a dos pasos
login_two_factor_invalid_recovery_code=El código de recuperación ya se ha utilizado o no es válido.
[mail]
activate_account=Por favor, active su cuenta
activate_email=Verifique su correo electrónico
@@ -203,7 +212,7 @@ Content=Contenido
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.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` deben ser caracteres alfanuméricos, guiones(-_), puntos o barras.`
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.`
@@ -255,12 +264,11 @@ profile=Perfil
password=Contraseña
avatar=Avatar
ssh_keys=Claves SSH
social=Redes Sociales
applications=Aplicaciones
security=Seguridad
repos=Repositorios
orgs=Organizaciones
repos=Repositories
applications=Aplicaciones
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.
@@ -326,10 +334,30 @@ 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.
two_factor=Autenticación en dos pasos
two_factor_status=Estado:
two_factor_on=Activado
two_factor_off=Desactivado
two_factor_enable=Activar
two_factor_disable=Desactivar
two_factor_view_recovery_codes=Guarda <a href="%s%s"> tus códigos de recuperación</a> en un lugar seguro. Podrás usarlos como código de acceso si pierdes el acceso a tu aplicación de autenticación.
two_factor_http=Para las operaciones sobre HTTP/HTTPS, no puedes usar un usuario y contraseña. Por favor, cree y utilice <a href="%[1]s%[2]s"> un token de acceso personal</a> como su credencial de acceso, por ejemplo, <code>%[3]s</code>.
two_factor_enable_title=Habilitar autenticaciñon en dos pasos
two_factor_scan_qr=Por favor, use su aplicación de autenticación para escanear la imagen:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Introduce el Pin:
two_factor_verify=Verificar
two_factor_invalid_passcode=¡El Pin que has introducido no es válido, por favor, inténtalo de nuevo!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Deshabilitar autenticación en dos pasos
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=¡La autenticación en dos pasos ha sido deshabilitada satisfactoriamente!
manage_access_token=Gestionar los Tokens de Acceso personales
generate_new_token=Generar nuevo Token
@@ -347,10 +375,10 @@ orgs.none=No eres un miembro de ninguna organización.
orgs.leave_title=Salir de una organización
orgs.leave_desc=Perderá el acceso a todos los repositorios y equipos después dejar la organización. ¿Desea continuar?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Salir
repos.leave_title=Dejar repositorio
repos.leave_desc=Perderás acceso al repositorio cuando salgas. ¿Quieres continuar?
repos.leave_success=¡Has dejado el repositorio '%s' con éxito!
delete_account=Elimina tu cuenta
delete_prompt=La operación eliminará tu cuenta de forma permanente y ¡<strong>NO</strong> se puede deshacer!
@@ -422,7 +450,7 @@ 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
bare_message=This repository does not have any content yet.
bare_message=Este repositorio aun no tiene contenido alguno.
files=Archivos
branch=Rama
@@ -435,7 +463,7 @@ pulls=Pull Requests
labels=Etiquetas
milestones=Milestones
commits=Commits
git_branches=Branches
git_branches=Ramas
releases=Releases
file_raw=Raw
file_history=Histórico
@@ -444,12 +472,12 @@ file_permalink=Permalink
file_too_large=Este archivo es demasiado grande para ser mostrado
video_not_supported_in_browser=Su navegador no soporta el tag video de HTML5.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Resumen
branches.active_branches=Ramas activas
branches.stale_branches=Ramas Viejas
branches.all=Todas las Ramas
branches.updated_by=%[1]s actualizado por %[2]s
branches.change_default_branch=Cambiar la Rama por Defecto
editor.new_file=Nuevo archivo
editor.upload_file=Subir archivo
@@ -490,7 +518,7 @@ editor.add_subdir=Añadir subdirectorio...
editor.unable_to_upload_files=Error al subir archivos a '%s', error: %v
editor.upload_files_to_dir=Subir archivos a '%s'
commits.commit_history=Commit History
commits.commit_history=Historial de Commits
commits.commits=Commits
commits.search=Buscar commits
commits.find=Buscar
@@ -588,6 +616,7 @@ 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.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=Se está procediendo a la búsqueda de conflictos, por favor a
pulls.can_auto_merge_desc=Este Pull Request puede ser fusionado automáticamente.
pulls.cannot_auto_merge_desc=Este Pull Request no puede ser fusionado automáticamente porque hay conflictos.
pulls.cannot_auto_merge_helper=Por favor, fusiona manualmente para resolver los conflictos.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Fusionar Pull Request
pulls.open_unmerged_pull_exists=`Usted no puede realizar la operación de reapertura porque en estos momentos existe una solicitud de pull request (#%d) para el mismo repositorio con la misma información que se encuentra a la espera de aprobación`
pulls.delete_branch=Eliminar la rama
@@ -658,10 +689,11 @@ settings.collaboration.write=Escritura
settings.collaboration.read=Lectura
settings.collaboration.undefined=Indefinido
settings.branches=Ramas
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=No puedes gestionar ramas en un repositorio vacío. Por favor sube algún contenido primero.
settings.default_branch=Rama predeterminada
settings.default_branch_desc=Se considera la rama «base» como la rama por defecto para commits de código, las solicitudes pull y edición en línea.
settings.update=Actualizar
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=¡La Rama por defecto de este repositorio ha sido actualizado con éxito!
settings.protected_branches=Ramas protegidas
settings.protected_branches_desc=Proteger ramas force pushing, de eliminación accidental y lista blanca de committers de código.
@@ -673,11 +705,11 @@ settings.protect_this_branch_desc=Desactivar force pushes y evite la eliminació
settings.protect_require_pull_request=Requiere una solicitud pull, en lugar de un push directo
settings.protect_require_pull_request_desc=Active esta opción para deshabilitar un push directo a esta rama. Los commits tienen que ser empujados a otra rama no protegida y fusionados a esta rama a través de la solicitud pull.
settings.protect_whitelist_committers=Lista blanca de quienes pueden empujar a esta rama
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.protect_whitelist_committers_desc=Añadir personas o equipos a la lista blanca de push directo a esta rama. Los usuarios en esta lista se saltan la comprobación de pull request.
settings.protect_whitelist_users=Usuarios que pueden hacer push a esta rama
settings.protect_whitelist_search_users=Buscar usuarios
settings.protect_whitelist_teams=Equipos cuyos miembros pueden hacer push a esta rama
settings.protect_whitelist_search_teams=Buscar equipos
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.hooks=Webhooks
settings.githooks=Git Hooks
@@ -697,7 +729,7 @@ settings.external_wiki_url=URL externa de la Wiki
settings.external_wiki_url_desc=Los visitantes serán redireccionados a la URL cuando hagan click en la barra.
settings.issues_desc=Habilitar rastreo de incidencias
settings.use_internal_issue_tracker=Usar rastreo de incidencias ligero incluido
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Permitir acceso público a las incidencias cuando el repositorio es privado
settings.use_external_issue_tracker=Usar tracker externo de incidencias
settings.external_tracker_url=URL de seguimiento de problemas externos
settings.external_tracker_url_desc=Los visitantes serán redirigidos a la URL cuando hagan click en la barra.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numérico
settings.tracker_issue_style.alphanumeric=Alfanumérico
settings.tracker_url_format_desc=Puedes usar las plantillas <code>{user} {repo} {index}</code> para el nombre de usuario, nombre del repositorio e índice de la incidencia.
settings.pulls_desc=Habilitar Pull Requests para aceptar contribuciones públicas
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Zona de Peligro
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con el mismo nombre.
@@ -751,7 +785,7 @@ settings.webhook_deletion_success=¡Webhook eliminado con éxito!
settings.webhook.test_delivery=Test de entrega
settings.webhook.test_delivery_desc=Enviar un falso evento Push de entrega para probar tus ajustes de webhook
settings.webhook.test_delivery_success=Probar que los webhook han sido añadidos a la cola de entrega. Esto puede tomar algunos segundos antes de aparecer en el historial de entregas.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery=Reenviar
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.request=Petición
settings.webhook.response=Respuesta
@@ -777,20 +811,20 @@ 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_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_delete=Borrar
settings.event_delete_desc=Rama o etiqueta borrada
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_fork_desc=Repositorio forked
settings.event_push=Push
settings.event_push_desc=Git push a un repositorio
settings.event_issues=Issues
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues=Incidencias
settings.event_issues_desc=Incidencia abierta, cerrada, reabierta, editada, asignada, desasignada, etiqueta actualizada, etiqueta limpiada, hito marcado, o desmarcado,.
settings.event_issue_comment=Comentario de incidencia
settings.event_issue_comment_desc=Comentario de incidencias creado, editado o borrado.
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Pull request abierto, cerrado, reabierto, editado, asignado, desasignado, etiqueta actualizada, etiqueta limpiada, hito marcado, hito desmarcado, o sincronizado.
settings.event_release=Lanzamiento
settings.event_release_desc=Lanzamiento publicado en 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.
@@ -801,6 +835,7 @@ 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.add_discord_hook_desc=Añade integración con <a href="%s">Slack</a> a tu repositorio.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Token
settings.slack_domain=Dominio
settings.slack_channel=Canal
@@ -1050,7 +1085,7 @@ repos.private=Privado
repos.watches=Vigilantes
repos.stars=Estrellas
repos.issues=Incidencias
repos.size=Size
repos.size=Tamaño
auths.auth_manage_panel=Panel de administración de autenticación
auths.new=Añadir nuevo origen
@@ -1065,6 +1100,7 @@ auths.domain=Dominio
auths.host=Host
auths.port=Puerto
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
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
@@ -1074,6 +1110,11 @@ auths.attribute_username_placeholder=Dejar vacío para usar el campo de inicio d
auths.attribute_name=Atributo nombre
auths.attribute_surname=Atributo apellido
auths.attribute_mail=Atributo correo electrónico
auths.verify_group_membership=Verificar pertenencia a grupo
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Filtro de grupo
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Buscar atributos en el contexto del Bind DN
auths.filter=Filtro de usuario
auths.admin_filter=Filtro de aministrador
@@ -1100,6 +1141,7 @@ auths.still_in_used=Este método de autentificación aún es utilizado por algun
auths.deletion_success=¡La autenticación ha sido eliminada con éxito!
auths.login_source_exist=El origen de autenticación '%s' ya existe.
config.not_set=(not set)
config.server_config=Configuración del servidor
config.app_name=Nombre de la Aplicación
config.app_ver=Versión de la Aplicación
@@ -1129,13 +1171,16 @@ config.ssh_minimum_key_sizes=Tamaños de clave mínimos
config.repo_config=Configuración del repositorio
config.repo_root_path=Ruta del Repositorio
config.script_type=Tipo de Script
config.repo_force_private=Force Private
config.repo_force_private=Forzar Privado
config.max_creation_limit=Limite máximo de creación
config.preferred_licenses=Preferred Licenses
config.preferred_licenses=Licencias Preferidas
config.disable_http_git=Desactivar HTTP Git
config.enable_local_path_migration=Activar la migración de la ruta de acceso Local
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Configuración de la Base de Datos
config.db_type=Tipo
config.db_host=Host
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Tiempo de espera de operación de pull
config.git_gc_timeout=Tiempo de espera de operación de GC
config.log_config=Configuración del Log
config.log_mode=Mode
config.log_options=Options
config.log_mode=Modo
config.log_options=Opciones
monitor.cron=Tareas de Cron
monitor.name=Nombre
@@ -1238,7 +1283,7 @@ notices.delete_success=Las notificaciones del sistema han sido eliminadas satisf
[action]
create_repo=creó el repositorio <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=ha hecho un Fork en <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>
compare_commits=Ver comparación de estos %d commits
@@ -1251,10 +1296,10 @@ create_pull_request=`creado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`cerró el pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`reabrió el pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`fusionado pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=nueva rama <a href="%[1]s/src/%[2]s">%[3]s</a> creada en <a href="%[1]s">%[4]s</a>
delete_branch=borrada rama <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
push_tag=hizo push del tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=borrada etiqueta <code>%[2]s</code> en <a href="%[1]s">%[3]s</a>
[tool]
ago=hace

View File

@@ -82,8 +82,8 @@ app_url=Sovellus URL
app_url_helper=Tämä vaikuttaa HTTP/HTTPS klooni URLeihin ja joihinkin sähköposteihin.
log_root_path=Lokin polku
log_root_path_helper=Lokien tallennushakemisto.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Ota käyttöön konsoli tila
enable_console_mode_popup=Tiedosto tilan lisäksi tulosta logit konsoliin.
optional_title=Valinnaiset asetukset
email_title=Sähköposti palvelu asetukset
@@ -119,6 +119,7 @@ sqlite3_not_available=Julkaisu versiosi ei tue SQLite3, ole hyvä ja lataa viral
invalid_db_setting=Tietokanta asetus ei ole oikea: %v
invalid_repo_path=Repo juuri polku on virheellinen: %v
run_user_not_match=Suoritus käyttäjä ei ole nykyinen käyttäjä: %s -> %s
smtp_host_missing_port=SMTP-isännältä puuttuu portin osoite.
invalid_smtp_from=SMTP From kenttä ei ole kelvollinen: %v
save_config_failed=Asetuksien tallennus epäonnistui: %v
invalid_admin_setting=Ylläpito tili asetus virheellinen: %v
@@ -168,6 +169,14 @@ reset_password_helper=Klikkaa tästä nollataksesi salasanasi
password_too_short=Salasanan pituus ei voi olla vähemmän kuin 6 merkkiä.
non_local_account=Vain paikallisten käyttäjätilien salasanan vaihto onnistuu Gogsin kautta.
login_two_factor=Kaksivaiheinen todennus
login_two_factor_passcode=Todennuksen salasana
login_two_factor_enter_recovery_code=Kirjoita kaksivaiheisen todennuksen palautuskoodi
login_two_factor_recovery=Kaksivaiheisen todennuksen palautus
login_two_factor_recovery_code=Palautuskoodi
login_two_factor_enter_passcode=Kirjoita kaksivaiheisen todennuksen salasana
login_two_factor_invalid_recovery_code=Palautuskoodi on käytetty tai ei ole kelvollinen.
[mail]
activate_account=Ole hyvä ja aktivoi tilisi
activate_email=Vahvista sähköpostiosoitteesi
@@ -203,7 +212,7 @@ Content=Sisältö
require_error=` ei voi olla tyhjä.`
alpha_dash_error=` täytyy olla kirjaimia tai numeroita tai väliviiva(-_) merkkejä.`
alpha_dash_dot_error=` täytyy olla kirjaimia tai numeroita tai väliviiva(-_) tai piste merkkejä.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` täytyy olla kirjaimia tai numeroita tai väliviiva(-_) tai piste merkkejä.`
size_error=` täytyy olla kokoa %s.`
min_size_error=` täytyy sisältää vähintään %s merkkiä.`
max_size_error=` täytyy sisältää enintään %s merkkiä.`
@@ -255,12 +264,11 @@ profile=Profiili
password=Salasana
avatar=Profiilikuva
ssh_keys=SSH avaimet
social=Sosiaaliset tilit
applications=Sovellukset
security=Turvallisuus
repos=Repot
orgs=Organisaatiot
repos=Repositories
applications=Sovellukset
delete=Poista tili
uid=Käyttäjä ID
public_profile=Julkinen profiili
profile_desc=Sähköposti osoitteesi on julkinen ja käytetään tiliin liittyviin ilmoituksiin, ja nettipohjaisiin toimintoihin joita on tehty sivujen kautta.
@@ -292,7 +300,7 @@ password_incorrect=Nykyinen salasana ei ole oikea.
change_password_success=Salasanasi on onnistuneesti vaihdettu. Voit nyt kirjautua sisään käyttäen tätä uutta salasanaa.
password_change_disabled=Ei-paikallinen tyyppisten käyttäjien ei sallita vaihtavan salasanaa.
emails=Sähköposti osoitteet
emails=Sähköposti osoite
manage_emails=Hallitse sähköposti osoitteita
email_desc=Ensisijaista sähköpostiosoitettasi käytetään ilmoituksiin ja muihin toimintoihin.
primary=Ensisijainen
@@ -326,10 +334,30 @@ no_activity=Ei viimeaikaista toimintaa
key_state_desc=Tätä avainta on käytetty 7 päivän sisällä
token_state_desc=Tätä pääsymerkkiä on käytetty 7 päivän sisällä
manage_social=Hallitse liitettyjä sosiaalisia tilejä
social_desc=Tämä on luettelo liitetyistä sosiaalisista tileistä. Poista kaikki liitokset joita et tunnista.
unbind=Poista liitos
unbind_success=Sosiaalisen tilin liitos on poistettu.
two_factor=Kaksivaiheinen todennus
two_factor_status=Tila:
two_factor_on=Käytössä
two_factor_off=Pois käytöstä
two_factor_enable=Ota käyttöön
two_factor_disable=Poista käytöstä
two_factor_view_recovery_codes=Katso ja tallenna <a href="%s%s">palautuskoodejasi</a> turvallisessa paikassa. Voit käyttää niitä salasanoina, jos menetän pääsyn todennussovellukseen.
two_factor_http=HTTP/HTTPS toimintoihin et voi enää käyttää pelkkää käyttäjänimeä ja salasanaa. Luo ja käytä <a href="%[1]s%[2]s">henkilökohtaisia pääsymerkkejä</a> tunnuksinasi, esimerkiksi <code>%[3]s</code>.
two_factor_enable_title=Ota käyttöön kaksivaiheinen todennus
two_factor_scan_qr=Käytä todennus sovellustasi lukeaksesi kuvan:
two_factor_or_enter_secret=Tai kirjoita salaisuus:
two_factor_then_enter_passcode=Sitten kirjoita salasana:
two_factor_verify=Vahvista
two_factor_invalid_passcode=Kirjoittamasi salasana ei kelpaa, yritä uudelleen!
two_factor_enable_error=Ota käyttöön kaksivaiheinen todennus epäonnistui: %v
two_factor_enable_success=Kaksivaiheinen todennus on otettu käyttöön tilissäsi menestyksekkäästi!
two_factor_recovery_codes_title=Kaksivaiheinen todennus palautuskoodit
two_factor_recovery_codes_desc=Palautuskoodeja käytetään kun väliaikaisesti menetät pääsyb todennus sovellukseesi. Kukin palautuskoodi voidaan käyttää vain kerran, <b>pidä näitä koodeja turvallisessa paikassa</b>.
two_factor_regenerate_recovery_codes=Uudista palautuskoodit
two_factor_regenerate_recovery_codes_error=Uudista palautuskoodit epäonnistui: %v
two_factor_regenerate_recovery_codes_success=Uusien palautuskoodien luonti onnistui!
two_factor_disable_title=Poista kaksivaiheinen todennus käytöstä
two_factor_disable_desc=Käyttäjätilisi turvallisuustaso vähenee kun poistat käytöstä kaksivaiheisen todennuksen. Haluatko jatkaa?
two_factor_disable_success=Kaksivaiheinen todennus on poistettu käytöstä onnistuneesti!
manage_access_token=Hallitse henkilökohtaisia pääsymerkkejä
generate_new_token=Luo uusi pääsymerkki
@@ -347,10 +375,10 @@ orgs.none=Et ole yhdenkään organisaation jäsen.
orgs.leave_title=Poistu organisaatiosta
orgs.leave_desc=Menetät oikeudet kaikkiin niihin repoihin ja tiimeihin joihin organisaatio on sinulle oikeudet antanut. Haluatko varmasti jatkaa?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Poistu
repos.leave_title=Poistu reposta
repos.leave_desc=Menetät pääsyn repoon kun poistut. Haluatko jatkaa?
repos.leave_success=Olet poistunut reposta '%s' onnistuneesti!
delete_account=Poista tilisi
delete_prompt=Toiminto poistaa tilisi pysyvästi ja tätä <strong>EI VOI</strong> peruuttaa myöhemmin!
@@ -422,7 +450,7 @@ quick_guide=Pikaopas
clone_this_repo=Kloonaa tämä repo
create_new_repo_command=Luo uusi repo komentoriviltä
push_exist_repo=Työnnä olemassaoleva repo komentoriviltä
bare_message=This repository does not have any content yet.
bare_message=Tässä repossa ei ole mitään sisältöä vielä.
files=Tiedostot
branch=Branch
@@ -435,7 +463,7 @@ pulls=Pull-pyynnöt
labels=Tunnisteet
milestones=Merkkipaalut
commits=Commitit
git_branches=Branches
git_branches=Haarat
releases=Julkaisut
file_raw=Raaka
file_history=Historia
@@ -444,12 +472,12 @@ file_permalink=Pysyvä linkki
file_too_large=Tämä tiedosto on liian suuri näytettäväksi
video_not_supported_in_browser=Selaimesi ei tue HTML5 video-tagia.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Yleiskatsaus
branches.active_branches=Aktiiviset haarat
branches.stale_branches=Vanhentuneet haarat
branches.all=Kaikki haarat
branches.updated_by=Päivitetty %[1]s %[2]s
branches.change_default_branch=Muuta oletushaaraa
editor.new_file=Uusi tiedosto
editor.upload_file=Liitä tiedosto
@@ -490,7 +518,7 @@ editor.add_subdir=Lisää alikansio...
editor.unable_to_upload_files=Tiedostojen lataus epäonnistui kansioon '%s' virheellä: %v
editor.upload_files_to_dir=Lataa tiedostoja kansioon '%s'
commits.commit_history=Commit History
commits.commit_history=Commitin historia
commits.commits=Commitit
commits.search=Etsi commiteista
commits.find=Etsi
@@ -588,6 +616,7 @@ pulls.compare_compare=vertaa
pulls.filter_branch=Suodata branch
pulls.no_results=Tuloksia ei löytynyt.
pulls.nothing_to_compare=Ei ole mitään verrattavaa koska base ja head branchit ovat tasoissa.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`On olemassa jo pull pyyntö näiden kohteiden välillä: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Luo Pull-pyyntö
pulls.title_desc=haluaa yhdistää %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code>%[3]s</code>
@@ -603,6 +632,8 @@ pulls.is_checking=Konfliktin tarkistus on yhä meneillään, ole hyvä ja päivi
pulls.can_auto_merge_desc=Tämä pull-pyyntö voidaan yhdistää automaattisesti.
pulls.cannot_auto_merge_desc=Tätä pull-pyyntöä ei voi yhdistää automaattisesti koska on konflikteja.
pulls.cannot_auto_merge_helper=Ole hyvä ja yhdistä manuaalisesti konfliktien ratkaisemiseksi.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Yhdistä Pull-pyyntö
pulls.open_unmerged_pull_exists=`Et voi suorittaa uudelleenavaus toimintoa koska on jo olemassa pull-pyyntö (#%d) samasta reposta samoilla yhdistämistiedoilla ja odottaa yhdistämistä.`
pulls.delete_branch=Poista haara
@@ -658,10 +689,11 @@ settings.collaboration.write=Kirjoita
settings.collaboration.read=Lue
settings.collaboration.undefined=Määrittelemätön
settings.branches=Haarat
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Et voi hallita haaroja tyhjässä repossa. Lisää jotain sisältöä ensin.
settings.default_branch=Oletushaara
settings.default_branch_desc=Oletushaaraa käytetään "pohjahaarana" commiteille, pull-pyynnöille ja sivustolla toteutetuille muokkauksille.
settings.update=Päivitä
settings.update_default_branch_unsupported=Palvelimella oleva Git versio ei tue oletushaaran vaihtamista.
settings.update_default_branch_success=Repositoryn oletushaara päivitetty!
settings.protected_branches=Suojatut haarat
settings.protected_branches_desc=Suojaa haaroja pakotetulta push-operaatiolta, vahinkopoistamisilta ja sallitun listan committereilta.
@@ -673,12 +705,12 @@ settings.protect_this_branch_desc=Kiellä pakoteut push-operaatiot ja estä pois
settings.protect_require_pull_request=Vaadi pull-pyyntö suoran push-operaation sijaan
settings.protect_require_pull_request_desc=Estä suorat push-operaatiot tähän haaraan. Commitit täytyy pushata ei-suojattuun haaraan ja yhdistää tähän haaraan pull-pyynnön kautta.
settings.protect_whitelist_committers=Lista sallituista, jotka voivat pushata tähän haaraan
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.protect_whitelist_committers_desc=Lisää käyttäjiä tai tiimejä sallittuihin jotka saavat pushata tähän haaraan. Sallitut käyttäjät voivat ohittaa vaatimuksen pull requestien tekemisestä.
settings.protect_whitelist_users=Käyttäjät jotka voivat pushata tähän haaraan
settings.protect_whitelist_search_users=Etsi käyttäjiä
settings.protect_whitelist_teams=Tiimit joiden jäsenet voivat pushata tähän haaraan
settings.protect_whitelist_search_teams=Etsi tiimejä
settings.update_protect_branch_success=Tämän haaran suojausasetukset on päivitetty!
settings.hooks=Webkoukut
settings.githooks=Git koukut
settings.basic_settings=Perusasetukset
@@ -691,13 +723,13 @@ settings.change_reponame_prompt=Tämä muutos vaikuttaa siihen miten linkit liit
settings.advanced_settings=Lisäasetukset
settings.wiki_desc=Ota wiki käyttöön
settings.use_internal_wiki=Käytä sisäänrakennettua wikiä
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Salli julkinen pääsy wikiin kun repo on yksityinen
settings.use_external_wiki=Käytä ulkoista wikiä
settings.external_wiki_url=Ulkoinen Wiki URL
settings.external_wiki_url_desc=Vierailijat uudelleenohjataan URL-osoitteeseen kun he klikkaavat välilehteä.
settings.issues_desc=Ota virheenseuranta käyttöön
settings.use_internal_issue_tracker=Käytä sisäänrakennettua kevyttä virheenseurantaa
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Salli julkinen pääsy ongelmiin kun repo on yksityinen
settings.use_external_issue_tracker=Käytä ulkoista vikaseurantaa
settings.external_tracker_url=Ulkoisen virheenseurannan URL
settings.external_tracker_url_desc=Vierailijat ohjataan URL-osoitteeseen kun he klikkaavat välilehteä.
@@ -707,8 +739,10 @@ settings.tracker_issue_style.numeric=Numeerinen
settings.tracker_issue_style.alphanumeric=Aakkosnumeerinen
settings.tracker_url_format_desc=Voit käyttää paikkamerkkiä <code>{user} {repo} {index}</code> käyttäjänimelle, reponimelle ja vikanumerolle.
settings.pulls_desc=Ota käyttöön pull-pyynnöt salliaksesi julkiset koodilahjoitukset
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Vaaravyöhyke
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.cannot_fork_to_same_owner=Et voi forkata repoa alkuperäiselle omistajalleen.
settings.new_owner_has_same_repo=Uudella omistajalla on jo samanniminen repo. Ole hyvä ja valitse toinen nimi.
settings.convert=Muunna tavalliseksi repoksi
settings.convert_desc=Voit muuntaa tämän peilin tavalliseksi repoksi. Tätä ei voi peruuttaa.
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Webkoukku on poistettu onnistuneesti!
settings.webhook.test_delivery=Testitoimitus
settings.webhook.test_delivery_desc=Lähetä väärennetty push toimitusjakelu testataksesi webkoukku asetuksia
settings.webhook.test_delivery_success=Testi webkoukku on lisätty toimitusjonoon. Muutama sekunti voi mennä ennenkuin se näkyy toimitushistoriassa.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Uudelleentoimitus
settings.webhook.redelivery_success=Koukku tehtävä "%s" on lisätty uudelleen toimitusjonoon. Toimitustilan päivittäminen toimitushistoriaan voi kestää muutaman sekunnin.
settings.webhook.request=Pyyntö
settings.webhook.response=Vastaus
settings.webhook.headers=Otsikot
@@ -767,7 +801,7 @@ settings.add_webhook_desc=Gogs lähettää <code>POST</code> requestin määritt
settings.payload_url=Payload URL
settings.content_type=Sisältötyyppi
settings.secret=Salaus
settings.secret_desc=Secret will be sent as SHA256 HMAC hex digest of payload via <code>X-Gogs-Signature</code> header.
settings.secret_desc=Salaisuus lähetetään SHA256 HMAC hex digest payloadina <code>X-Gogs-Signature</code> headerilla.
settings.slack_username=Käyttäjätunnus
settings.slack_icon_url=Kuvakkeen URL
settings.slack_color=Väri
@@ -777,20 +811,20 @@ settings.event_send_everything=Tarvitsen <strong>kaiken</strong>.
settings.event_choose=Haluan valita, mitä tarvitsen.
settings.event_create=Luo
settings.event_create_desc=Branch, tai tagi luotu
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_delete=Poista
settings.event_delete_desc=Branch, tai tagi luotu
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_fork_desc=Repo forkattu
settings.event_push=Push
settings.event_push_desc=Git push repoon
settings.event_issues=Issues
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues=Ongelmat
settings.event_issues_desc=Ongelma avattu, suljettu, uudelleenavattu, muokattu, annettu, anto vedottu, tarra päivitetty, tarra poistettu, merkkipaalutettu, tai poistettu merkkipaalu.
settings.event_issue_comment=Ongelman kommentti
settings.event_issue_comment_desc=Ongelman kommentti luotu, muokattu, tai poistettu.
settings.event_pull_request=Pull-pyyntö
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Pull-pyyntö avattu, suljettu, uudelleenavattu, muokattu, annettu, anto vedottu, tarra päivitetty, tarra poistettu, merkkipaalutettu, poistettu merkkipaalu, tai synkronoitu.
settings.event_release=Julkaisu
settings.event_release_desc=Julkaisu julkaistu repoon.
settings.active=Aktiivinen
settings.active_helper=Yksityiskohdat koskien tapahtumaa joka laukaisi koukun toimitetaan myös.
settings.add_hook_success=Uusi webkoukku on lisätty.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Viimeisimmät toimitukset
settings.hook_type=Koukkutyyppi
settings.add_slack_hook_desc=Lisää <a href="%s">Slack</a> integraatio repoosi.
settings.add_discord_hook_desc=Lisää <a href="%s">Discord</a> integraatio repositoryysi.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Pääsymerkki
settings.slack_domain=Verkkotunnus
settings.slack_channel=Kanava
@@ -1050,7 +1085,7 @@ repos.private=Yksityinen
repos.watches=Tarkkailijat
repos.stars=Äänet
repos.issues=Ongelmat
repos.size=Size
repos.size=Koko
auths.auth_manage_panel=Todennus hallintapaneeli
auths.new=Lisää uusi lähde
@@ -1065,6 +1100,7 @@ auths.domain=Verkkotunnus
auths.host=Isäntä
auths.port=Portti
auths.bind_dn=Liitä DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Liitä salasana
auths.bind_password_helper=Varoitus: Tämä salasana tallennetaan tavallisena tekstinä. Älä käytä korkeasti etuoikeutetulla tilillä.
auths.user_base=Käyttäjä hakuperuste
@@ -1074,6 +1110,11 @@ auths.attribute_username_placeholder=Jätä tyhjäksi käyttääksesi kirjautumi
auths.attribute_name=Etunimen määrite
auths.attribute_surname=Sukunimen määrite
auths.attribute_mail=Sähköposti määrite
auths.verify_group_membership=Varmista ryhmäjäsenyys
auths.group_search_base_dn=Ryhmähaun perusosoite DN
auths.group_filter=Ryhmäsuodatus
auths.group_attribute_contain_user_list=Ryhmän määrite joka sisältää listan käyttäjistä
auths.user_attribute_listed_in_group=Käyttäjän määrite listattuna ryhmässä
auths.attributes_in_bind=Nouda määritteet liitä DN sisällöstä
auths.filter=Käyttäjäsuodatin
auths.admin_filter=Ylläpitosuodatin
@@ -1100,6 +1141,7 @@ auths.still_in_used=Tämä todennus on yhä joidenkin käyttäjien käytössä,
auths.deletion_success=Todennus on poistettu onnistuneesti!
auths.login_source_exist=Kirjautumislähde '%s' on jo olemassa
config.not_set=(not set)
config.server_config=Palvelin asetukset
config.app_name=Sovellus nimi
config.app_ver=Sovellus versio
@@ -1131,10 +1173,13 @@ config.repo_root_path=Repon juuren polku
config.script_type=Komentosarjan tyyppi
config.repo_force_private=Pakota yksityiseksi
config.max_creation_limit=Enimmäis-luontiraja
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.preferred_licenses=Ensisijaiset lisenssit
config.disable_http_git=Poista käytöstä HTTP Git
config.enable_local_path_migration=Ota käyttöön paikallisen polun migraatio
config.commits_fetch_concurrency=Committien noudon samanaikaisuus
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Tietokannan asetukset
config.db_type=Tyyppi
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Pull-operaatio aikakatkaistiin
config.git_gc_timeout=Roskienkeruu aikakatkaistiin
config.log_config=Loki asetukset
config.log_mode=Mode
config.log_options=Options
config.log_mode=Tila
config.log_options=Valinnaiset
monitor.cron=Cron tehtävät
monitor.name=Nimi
@@ -1238,7 +1283,7 @@ notices.delete_success=Järjestelmän ilmoitukset on poistettu onnistuneesti.
[action]
create_repo=luotu repo <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=forkattu repo kohteeseen <a href="%s"> %s</a>
rename_repo=uudelleennimetty repo <code>%[1]s</code> nimelle <a href="%[2]s">%[3]s</a>
commit_repo=pushattu kohteeseen <a href="%[1]s/src/%[2]s">%[3]s</a> paikassa <a href="%[1]s">%[4]s</a>
compare_commits=Näytä vertailu näille %d commiteille
@@ -1251,10 +1296,10 @@ create_pull_request=`luotu pull-pyyntö <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`sulki pull-pyynnön <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`avasi uudelleen pull-pyynnön <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`yhdistetty pull-pyyntö <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=luotu uusi haara <a href="%[1]s/src/%[2]s">%[3]s</a> kohteeseen <a href="%[1]s">%[4]s</a>
delete_branch=poistettu haara <code>%[2]s</code> kohteesta <a href="%[1]s">%[3]s</a>
push_tag=pushattu tagi <a href="%s/src/%s">%[2]s</a> kohteeseen <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=poistettu tagi <code>%[2]s</code> kohteesta <a href="%[1]s">%[3]s</a>
[tool]
ago=sitten

View File

@@ -82,8 +82,8 @@ app_url=URL de l'application
app_url_helper=Cela affecte les doublons d'URL HTTP/HTTPS et le contenu d'e-mail.
log_root_path=Chemin des fichiers log
log_root_path_helper=Répertoire d'écriture des fichiers de log.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Activer le mode Console
enable_console_mode_popup=En plus du mode fichier, également imprimer des journaux à la console.
optional_title=Paramètres facultatifs
email_title=Paramètres du service de messagerie
@@ -119,6 +119,7 @@ sqlite3_not_available=Votre version publiée ne prend pas en charge SQLite3. Veu
invalid_db_setting=Paramètres de base de données incorrects : %v
invalid_repo_path=Chemin vers la racine du dépôt invalide : %v
run_user_not_match=L'utilisateur d'exécution saisi n'est pas l'utilisateur d'exécution actuel : %s -> %s
smtp_host_missing_port=Le numéro de port est manquant dans l'adresse de l'Hôte SMTP.
invalid_smtp_from=Le champ SMTP Provenant de n'est pas valide: %v
save_config_failed=La sauvegarde de la configuration a échoué : %v
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
@@ -149,7 +150,7 @@ create_new_account=Créer un nouveau compte
register_hepler_msg=Déjà enregistré ? Connectez-vous !
social_register_hepler_msg=Déjà enregistré ? 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 e-mail des enregistrements a été désactivée.
disable_register_mail=Désolé, la confirmation par courriel 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é ?
@@ -157,7 +158,7 @@ sign_up_now=Pas de compte ? Inscrivez-vous 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
prohibit_login=Connexion interdite
prohibit_login_desc=Votre compte est interdit de se connecter, contactez ladministrateur du site.
prohibit_login_desc=La connexion avec ce compte est interdite ; contactez l'administrateur du site.
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 e-mail (<b>%s</b>) n'a pas été confirmée. Si vous n'avez reçu aucun mail de confirmation ou souhaitez renouveler l'envoi, cliquez sur le bouton ci-dessous.
resend_mail=Cliquez ici pour renvoyer un mail de confirmation
@@ -168,6 +169,14 @@ 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.
non_local_account=Les comptes non locaux ne peuvent pas changer leur mot de passe via Gogs.
login_two_factor=Authentification en deux étapes
login_two_factor_passcode=Mot de passe d'authentification
login_two_factor_enter_recovery_code=Entrez un code de récupération en deux étapes
login_two_factor_recovery=Récupération en deux étapes
login_two_factor_recovery_code=Code de récupération
login_two_factor_enter_passcode=Entrez un code d'authentification en deux étapes
login_two_factor_invalid_recovery_code=Code de récupération a été utilisé ou n'est pas valide.
[mail]
activate_account=Veuillez activer votre compte
activate_email=Veuillez vérifier votre adresse e-mail
@@ -203,7 +212,7 @@ Content=Contenu
require_error=` ne peut pas être vide.`
alpha_dash_error=` doivent être des caractères alpha, numériques ou tirets (-_) valides.`
alpha_dash_dot_error=` doivent être des caractères alpha, numériques, tirets (-_) valides ou des points.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=doit contenir uniquement des caractères alphanumériques, des tirets (-), des points (.) ou des slash (/)
size_error=` doit être à la taille de %s.`
min_size_error=` %s caractères minimum `
max_size_error=` %s caractères maximum `
@@ -255,12 +264,11 @@ profile=Profil
password=Mot de Passe
avatar=Avatar
ssh_keys=Clés SSH
social=Réseaux Sociaux
applications=Applications
security=Sécurité
repos=Dépôts
orgs=Organisations
repos=Repositories
applications=Applications
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.
@@ -326,10 +334,30 @@ no_activity=Aucune activité récente
key_state_desc=Cette clé a été utilisée durant les 7 derniers jours
token_state_desc=Ce jeton a été utilisé 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é.
two_factor=Authentification en deux étapes
two_factor_status=État :
two_factor_on=Activé
two_factor_off=Désactivé
two_factor_enable=Activer
two_factor_disable=Désactiver
two_factor_view_recovery_codes=Voir et sauvegarder <a href="%s%s">vos codes de récupération</a> dans un endroit sécurisé. Vois pouvez les utiliser comme mot de passe si vous perdez l'accès à l'application d'authentification.
two_factor_http=Vous ne pouvez plus utiliser un nom d'utilisateur et mot de passe en clair pour les opérations en HTTP/HTTPS. Merci de créer et d'utiliser un <a href="%[1]s%[2]s">jeton d'accès personnel</a> comme moyen d'identification, par exemple <code>%[3]s</code>.
two_factor_enable_title=Activer l'authentification en deux étapes
two_factor_scan_qr=Veuillez utiliser votre application d'authentification pour numériser l'image :
two_factor_or_enter_secret=Ou entrez la phrase secrète :
two_factor_then_enter_passcode=Puis entrez le mot de passe :
two_factor_verify=Vérifier
two_factor_invalid_passcode=Le mot de passe que vous avez entré n'est pas valide, veuillez réessayer.
two_factor_enable_error=L'activation de l'authentification en deux étapes a échoué : %v
two_factor_enable_success=L'authentification en deux étapes a été bien été activée pour votre compte.
two_factor_recovery_codes_title=Codes de secours pour l'authentification en deux étapes
two_factor_recovery_codes_desc=Les codes de récupération sont utilisés quand vous perdez temporairement l'accès à votre application d'authentification. Chaque code de récupération ne peut être utilisé qu'une fois, <b>merci de les garder dans un endroit sécurisé</b>.
two_factor_regenerate_recovery_codes=Regénérer les codes de récupération
two_factor_regenerate_recovery_codes_error=La regénération des codes de récupération a échouée : %v
two_factor_regenerate_recovery_codes_success=Les nouveaux codes de récupération ont été générés avec succès !
two_factor_disable_title=Désactiver l'authentification à deux facteurs
two_factor_disable_desc=Le niveau de sécurité de votre compte va baisser après avoir désactiver l'authentification à deux facteurs. Voulez-vous continuer ?
two_factor_disable_success=L'authentification à deux facteurs a été désactivée avec succès !
manage_access_token=Gérer les jetons d'accès personnels
generate_new_token=Générer le nouveau jeton
@@ -347,10 +375,10 @@ orgs.none=Vous n'êtes membre d'aucune organisation.
orgs.leave_title=Quitter une organisation
orgs.leave_desc=Vous perdrez accès à tous les dépôts et équipes après que vous ayez quitté l'organisation. Voulez-vous continuer ?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Quitter
repos.leave_title=Quitter le dépôt
repos.leave_desc=Vous perdrez l'accès à ce dépôt après l'avoir quitté. Voulez-vous continuer ?
repos.leave_success=Vous avez quitté le dépôt '%s' avec succès !
delete_account=Supprimer votre compte
delete_prompt=Votre compte sera définitivement supprimé et cette opération est <strong>irréversible</strong> !
@@ -422,7 +450,7 @@ 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
bare_message=This repository does not have any content yet.
bare_message=Ce dépôt n'a pas de contenu pour l'instant.
files=Fichiers
branch=Branche
@@ -444,11 +472,11 @@ file_permalink=Lien permanent
file_too_large=Ce fichier est trop gros pour être afficher
video_not_supported_in_browser=Votre navigateur ne supporte pas la balise video HTML5.
branches.overview=Overview
branches.overview=Résumé
branches.active_branches=Branches Actives
branches.stale_branches=Stale Branches
branches.stale_branches=Branches stagnantes
branches.all=Toutes les Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.updated_by=Mise à jour %[1]s par %[2]s
branches.change_default_branch=Changer la Branche par Défaut
editor.new_file=Nouveau fichier
@@ -478,16 +506,16 @@ editor.new_branch_name_desc=Nouveau nom de la branche...
editor.cancel=Annuler
editor.filename_cannot_be_empty=Nom de fichier ne peut pas être vide.
editor.branch_already_exists=La branche '%s' existe déjà dans ce dépôt.
editor.directory_is_a_file=L'entrée '%s' dans le chemin daccès parent est un fichier pas un répertoire dans ce dépôt.
editor.directory_is_a_file=L'entrée '%s' dans le chemin d'accès parent est un fichier, pas un répertoire dans ce dépôt.
editor.file_is_a_symlink=Le fichier « %s » est un lien symbolique qui ne peut être modifié depuis l'éditeur web.
editor.filename_is_a_directory=Le nom de fichier '%s' existe déjà dans ce dépot.
editor.file_editing_no_longer_exists=Le fichier '%s' que vous modifiez n'existe plus dans le dépôt.
editor.file_changed_while_editing=Le contenu du fichier à changé depuis que vous avez commencé à l'éditer. <a target="_blank" href="%s">Cliquez ici</a> pour voir ce qui à été modifié ou <strong>appuyez sur commit encore une fois</strong> pour remplacer ces changements.
editor.file_already_exists=La branche '%s' existe déjà dans ce dépôt.
editor.no_changes_to_show=Il ny a aucun changement à afficher.
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec lerreur : %v
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec l'erreur : %v
editor.add_subdir=Ajouter un sous-répertoire...
editor.unable_to_upload_files=Échec lors de l'envoie du fichier '%s' avec lerreur : %v
editor.unable_to_upload_files=Échec lors de l'envoie du fichier '%s' avec l'erreur : %v
editor.upload_files_to_dir=Transférer les fichiers vers '%s'
commits.commit_history=Historique des commits
@@ -588,6 +616,7 @@ pulls.compare_compare=Comparer
pulls.filter_branch=Filtre de branche
pulls.no_results=Aucun résultat trouvé.
pulls.nothing_to_compare=Il n'y a rien de comparable parce que les deux branches sont égales.
pulls.nothing_merge_base=Il n'y a rien à comparer parce que les deux branches ont un historique complètement différent.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=La recherche de conflits est toujours en cours, veuillez rafra
pulls.can_auto_merge_desc=Cette pull request peut être fusionnée automatiquement.
pulls.cannot_auto_merge_desc=Cette pull request ne peut être fusionnée automatiquement à cause de conflits.
pulls.cannot_auto_merge_helper=Fusionner manuellement afin de résoudre les conflits.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
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.`
pulls.delete_branch=Supprimer la branche
@@ -658,10 +689,11 @@ settings.collaboration.write=Écrire
settings.collaboration.read=Lire
settings.collaboration.undefined=Indéfini
settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Vous ne pouvez pas gérer les branches d'un dépôt vide. Merci de publier du contenu dans un premier temps.
settings.default_branch=Branche par défaut
settings.default_branch_desc=La branche par défaut est considérée comme la branche « originale » pour les commits de code, les requêtes de fusion et l'édition en ligne.
settings.update=Actualiser
settings.update_default_branch_unsupported=Le changement de branche par défaut n'est pas supporté par la version de Git sur ce serveur.
settings.update_default_branch_success=La branche par défaut de ce dépôt a bien été mise à jour.
settings.protected_branches=Branches protégées
settings.protected_branches_desc=Protéger les branches du push forcé, de la suppression accidentelle et des publicateurs de code en liste blanche.
@@ -673,7 +705,7 @@ settings.protect_this_branch_desc=Interdire les push forcés et empêcher la sup
settings.protect_require_pull_request=Exiger une requête de fusion plutôt qu'un push immédiat
settings.protect_require_pull_request_desc=Activez cette option pour empêcher la publication immédiate vers cette branche. Les commits devront être publiés vers une autre branche (non protégée) et fusionnée dans cette branche avec une requête de fusion.
settings.protect_whitelist_committers=Liste blanche de personnes pouvant publier sur cette branche
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_committers_desc=Ajouter des personnes ou des équipes à la liste blanche des fusions directes de cette branche. Les utilisateurs dans cette liste blanche passeront outre la nécessité de valider leurs requêtes de fusion.
settings.protect_whitelist_users=Utilisateurs qui peuvent pousser sur cette branche
settings.protect_whitelist_search_users=Rechercher des utilisateurs
settings.protect_whitelist_teams=Les équipes pour lesquelles les membres peuvent pousser sur cette branche
@@ -691,13 +723,13 @@ settings.change_reponame_prompt=Ce changement affectera comment les liens sont r
settings.advanced_settings=Paramètres avancés
settings.wiki_desc=Activer le wiki
settings.use_internal_wiki=Utiliser le wiki interne
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Autoriser l'accès public au wiki quand le dépôt est privé
settings.use_external_wiki=Utiliser un wiki externe
settings.external_wiki_url=URL Wiki externe
settings.external_wiki_url_desc=Les visiteurs seront redirigés vers cette URL lorsqu'ils cliqueront sur l'onglet.
settings.issues_desc=Activer le système de tickets
settings.use_internal_issue_tracker=Utiliser le système simplifié de tickets interne
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Permettre l'accès du public aux tickets lorsque le dépôt est privé
settings.use_external_issue_tracker=Utiliser un bug-tracker externe
settings.external_tracker_url=Adresse de l'issue tracker externe
settings.external_tracker_url_desc=Les visiteurs seront redirigés vers cette URL lorsqu'ils cliqueront sur l'onglet.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numérique
settings.tracker_issue_style.alphanumeric=Alphanumérique
settings.tracker_url_format_desc=Vous pouvez utiliser l'espace réservé <code>{user} {repo} {index}</code> pour le nom d'utilisateur, le nom du dépôt et le numéro de bug.
settings.pulls_desc=Activer les pull requests pour accepter les contributions publiques
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Zone de danger
settings.cannot_fork_to_same_owner=Vous ne pouvez par créer un fork d'un dépot à son propriétaire actuel.
settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi.
@@ -728,7 +762,7 @@ settings.delete=Supprimer ce dépôt
settings.delete_desc=Attention, cette action est action irréversible. Soyez sûr de vous.
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, les tickets, les commentaires et les accès des collaborateurs.
settings.delete_notices_fork_1=-Tous les forks deviendront indépendants après leffacement.
settings.delete_notices_fork_1=-Tous les forks deviendront indépendants après l'effacement.
settings.deletion_success=Le dépôt a été supprimé avec succès!
settings.update_settings_success=Options mises à jour avec succès.
settings.transfer_owner=Nouveau propriétaire
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Le webhook a été supprimé avec succès !
settings.webhook.test_delivery=Tester la version
settings.webhook.test_delivery_desc=Envoyer un faux push pour tester la configuration des webhooks
settings.webhook.test_delivery_success=Le webhook de test a été ajouté à la file d'attente de livraison. L'affichage dans l'historique de livraison peut prendre quelques secondes.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Redistribution
settings.webhook.redelivery_success=La tâche crochet '%s' a été réajoutée à la liste de livraison. La mise à jour de l'état de livraison dans l'historique peut prendre quelques secondes.
settings.webhook.request=Requête
settings.webhook.response=Réponse
settings.webhook.headers=Entêtes 
@@ -780,17 +814,17 @@ settings.event_create_desc=Branche, ou Tag créé
settings.event_delete=Supprimer
settings.event_delete_desc=Branche ou tag supprimé
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_fork_desc=Dépôt dédoublé
settings.event_push=Push
settings.event_push_desc=Git push vers un dépôt
settings.event_issues=Tickets
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues_desc=Ticket ouvert, fermé, réouvert, modifié, assigné, non-assigné, étiquette mise à jour, étiquette nettoyée, jalonnée, ou déjalonnée.
settings.event_issue_comment=Commentaire du ticket
settings.event_issue_comment_desc=Commentaire du ticket créé, modifié, ou supprimé.
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Requête de fusion ouverte, fermée, réouverte, modifiée, assignée, non-assignée, étiquette mise à jour, étiquette nettoyée, jalonnée, déjalonnée, ou synchronisée.
settings.event_release=Version publiée
settings.event_release_desc=Version publiée dans 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é.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Livraisons récentes
settings.hook_type=Type de Hook
settings.add_slack_hook_desc=Intégrer <a href="%s"> Slack</a> à votre dépôt.
settings.add_discord_hook_desc=Ajouter l'intégration de <a href="%s">Discord</a> à votre dépôt.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Jeton
settings.slack_domain=Domaine
settings.slack_channel=Canal
@@ -1050,7 +1085,7 @@ repos.private=Privé
repos.watches=Suivi par
repos.stars=Votes
repos.issues=Tickets
repos.size=Size
repos.size=Taille
auths.auth_manage_panel=Panel d'administration des authentifications
auths.new=Ajouter une nouvelle source d'authentification
@@ -1065,15 +1100,21 @@ auths.domain=Domaine
auths.host=Hôte
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
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_username=Attribut nom d'utilisateur
auths.attribute_username_placeholder=Laisser vide pour utiliser la valeur du formulaire d'authentification comme nom d'utilisateur.
auths.attribute_name=Attribut du prénom
auths.attribute_name=First Name Attribute
auths.attribute_surname=Attribut du nom de famille
auths.attribute_mail=Attribut de l'e-mail
auths.verify_group_membership=Vérifier l'appartenance à un groupe
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Filtre par groupe
auths.group_attribute_contain_user_list=Attribut de groupe contenant la liste des utilisateurs
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Aller chercher les attributs dans le contexte de liaison DN
auths.filter=Filtre utilisateur
auths.admin_filter=Filtre administrateur
@@ -1100,6 +1141,7 @@ auths.still_in_used=Cette authentification est encore utilisée par d'autres uti
auths.deletion_success=L'authentification a été supprimée avec succès !
auths.login_source_exist=La source de connexion « %s » existe déjà.
config.not_set=(not set)
config.server_config=Configuration du Serveur
config.app_name=Nom de l'application
config.app_ver=Version de l'application
@@ -1136,6 +1178,9 @@ config.disable_http_git=Désactiver Git HTTP
config.enable_local_path_migration=Activer la migration de chemin locale
config.commits_fetch_concurrency=Concurrence des récupérations de commits
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Configuration de la Base de Données
config.db_type=Type
config.db_host=Hôte
@@ -1238,7 +1283,7 @@ notices.delete_success=Notifications système supprimées avec succès.
[action]
create_repo=a créé le dépôt <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=a créé sa branche du dépôt vers <a href="%s">%s</a>
rename_repo=a rebaptisé le dépôt de <code>%[1]s</code> vers <a href="%[2]s">%[3]s</a>
commit_repo=a commité dans <a href="%[1]s/src/%[2]s">%[3]s</a> sur <a href="%[1]s">%[4]s</a>
compare_commits=Comparer ces %d commits
@@ -1251,10 +1296,10 @@ create_pull_request=`pull request créée le <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`pull request fermé <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`pull request ré-ouverte <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`pull request fusionné le <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=nouvelle branche créée <a href="%[1]s/src/%[2]s">%[3]s</a> sur <a href="%[1]s">%[4]s</a>
delete_branch=branche supprimée <code>%[2]s</code> sur <a href="%[1]s">%[3]s</a>
push_tag=a soumis le tag <a href="%s/src/%s">%[2]s</a> sur <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=étiquette supprimée <code>%[2]s</code> sur <a href="%[1]s">%[3]s</a>
[tool]
ago=il y a

View File

@@ -119,6 +119,7 @@ sqlite3_not_available=A túa versión non soporta SQLite3, por favor, descarga o
invalid_db_setting=A configuración da base de datos non é correcta: %v
invalid_repo_path=A ruta da raíz do repositorio é inválida: %v
run_user_not_match=A persoa usuaria que está executando a aplicación non é a persoa usuaria actual: %s -> %s
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=O campo From do SMTP non é valido: %v
save_config_failed=Erro ao gardar a configuración: %v
invalid_admin_setting=A configuración da conta de administración é inválida: %v
@@ -168,6 +169,14 @@ reset_password_helper=Prema aquí para restablecer o seu contrasinal
password_too_short=A lonxitude do contrasinal non pode ser menor de 6.
non_local_account=Contas que non son locais non poden cambiar os contrasinais a través de Gogs.
login_two_factor=Two-factor Authentication
login_two_factor_passcode=Authentication Passcode
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recovery Code
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=Por favor, activa a túa conta
activate_email=Verifica o teu correo electrónico
@@ -255,12 +264,11 @@ profile=Perfil
password=Contrasinal
avatar=Avatar
ssh_keys=Claves SSH
social=Redes sociais
applications=Aplicacións
orgs=Organizacións
security=Security
repos=Repositories
orgs=Organizacións
applications=Aplicacións
delete=Eliminar conta
uid=UUID
public_profile=Perfil público
profile_desc=O teu correo electrónico é público e será usado para todas as notificacións relacionadas con calquera conta e calquera operación feita a través da web.
@@ -326,10 +334,30 @@ no_activity=Non hai actividade recente
key_state_desc=Esta clave foi usada nos últimos 7 días
token_state_desc=Token usado nos últimos 7 días
manage_social=Xestionar redes sociais asociadas
social_desc=Esta é unha lista das redes sociais asociadas. Elimina calquera vínculo que non recoñezas.
unbind=Desvincular
unbind_success=A rede social foi desvinculada.
two_factor=Two-factor Authentication
two_factor_status=Status:
two_factor_on=On
two_factor_off=Off
two_factor_enable=Enable
two_factor_disable=Disable
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verify
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Xestionar os tokens de acceso persoais
generate_new_token=Xerar novo token
@@ -588,6 +616,7 @@ pulls.compare_compare=comparar con
pulls.filter_branch=Filtrar rama
pulls.no_results=Sen resultados.
pulls.nothing_to_compare=Nada que comparar. As dúas ramas coinciden.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`Xa existe un pull request entre estas dúas ramas: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Crear Pull Request
pulls.title_desc=desexa fusionar %[1]d achegas de <code>%[2]s</code> en <code>%[3]s</code>
@@ -603,6 +632,8 @@ pulls.is_checking=Estase procedendo á busca de conflitos, por favor, actualice
pulls.can_auto_merge_desc=Este Pull Request pode ser fusionado automaticamente.
pulls.cannot_auto_merge_desc=Este Pull Request non pode ser fusionado automaticamente porque hai conflitos.
pulls.cannot_auto_merge_helper=Por favor, fusiona manualmente para resolver os conflitos.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Fusionar Pull Request
pulls.open_unmerged_pull_exists=`Vostede non pode realizar a operación de reapertura porque nestes momentos existe unha solicitude de pull request (#%d) para o mesmo repositorio coa mesma información que se encontra á espera de aprobación`
pulls.delete_branch=Eliminar branch
@@ -662,6 +693,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numérico
settings.tracker_issue_style.alphanumeric=Alfanumérico
settings.tracker_url_format_desc=Podes usar os modelos <code>{user} {repo} {index}</code> para o nome de usuario, nome do repositorio e índice da incidencia.
settings.pulls_desc=Habilitar Pull Requests para aceptar contribucións públicas
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Zona de perigo
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=O novo propietario ten un repositorio co mesmo nome.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Envíos recentes
settings.hook_type=Tipo de Hook
settings.add_slack_hook_desc=Engade integración con <a href="%s">Slack</a> ao teu repositorio.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Token
settings.slack_domain=Dominio
settings.slack_channel=Canle
@@ -1065,15 +1100,21 @@ auths.domain=Dominio
auths.host=Host
auths.port=Porto
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Contrasinal Bind
auths.bind_password_helper=Advertencia: o contrasinal almacénase como texto plano. Non empregue unha conta con privilexios elevados.
auths.user_base=Base de busca de usuarios
auths.user_dn=DN de persoas usuarias
auths.attribute_username=Atributo de nome de usuario
auths.attribute_username_placeholder=Deixar baleiro para usar o campo de inicio de sesión como nome de usuario.
auths.attribute_name=Atributo nome
auths.attribute_name=First Name Attribute
auths.attribute_surname=Atributo apelido
auths.attribute_mail=Atributo correo electrónico
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Buscar atributos no contexto do Bind DN
auths.filter=Filtro de usuario
auths.admin_filter=Filtro de aministrador
@@ -1100,6 +1141,7 @@ auths.still_in_used=Este método de autentificación aínda é utilizado por alg
auths.deletion_success=A autenticación foi eliminada con éxito!
auths.login_source_exist=Login source '%s' xa existe.
config.not_set=(not set)
config.server_config=Configuración do servidor
config.app_name=Nome da aplicación
config.app_ver=Versión da aplicación
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Configuración da base de datos
config.db_type=Tipo
config.db_host=Host

1330
conf/locale/locale_hu-HU.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -75,15 +75,15 @@ domain_helper=Questo influisce sugli URL per il clonaggio via SSH.
ssh_port=Porta SSH
ssh_port_helper=Numero di porta utilizzato dal server SSH, lasciare vuoto per disabilitare l'integrazione SSH.
use_builtin_ssh_server=Usa il server SSH integrato
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server_popup=Avvia il server SSH integrato per le operazioni Git per distinguerle dal demone SSH di sistema.
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.
log_root_path=Percorso dei log
log_root_path_helper=Directory in cui scrivere i file di log.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Abilita modalità Terminale
enable_console_mode_popup=In aggiunta alla modalità file, invia i log anche al terminale.
optional_title=Impostazioni Facoltative
email_title=Impostazioni E-mail
@@ -119,6 +119,7 @@ sqlite3_not_available=Questa versione non supporta SQLite3, si prega di scaricar
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
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=Campo SMTP From non valido: %v
save_config_failed=Fallito il salvataggio della configurazione: %v
invalid_admin_setting=Impostazioni account Admin non valide: %v
@@ -168,6 +169,14 @@ reset_password_helper=Clicca qui per reimpostare la password
password_too_short=La lunghezza della password non può essere meno 6 caratteri.
non_local_account=Gli account non locali non possono modificare le password tramite Gogs.
login_two_factor=Autenticazione in Due Passaggi
login_two_factor_passcode=Authentication Passcode
login_two_factor_enter_recovery_code=Inserisci il codice di recupero dell'Autenticazione a due Fattori
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recupera il codice
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=Per favore attiva il tuo account
activate_email=Verifica il tuo indirizzo e-mail
@@ -255,12 +264,11 @@ profile=Profilo
password=Password
avatar=Avatar
ssh_keys=Chiavi SSH
social=Account Sociali
applications=Applicazioni
security=Security
repos=Repository
orgs=Organizzazioni
repos=Repositories
applications=Applicazioni
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.
@@ -326,10 +334,30 @@ 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.
two_factor=Autenticazione in Due Passaggi
two_factor_status=Status:
two_factor_on=Attiva
two_factor_off=Off
two_factor_enable=Enable
two_factor_disable=Disattivata
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Abilita l'autenticazione in due passaggi
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verifica
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Gestisci i Token di Accesso Personale
generate_new_token=Genera Nuovo Token
@@ -347,7 +375,7 @@ orgs.none=Non sei membro di alcuna organizzazione.
orgs.leave_title=Abbandona una organizzazione
orgs.leave_desc=Abbandonando l'organizzazione perderai l'accesso a tutti i repository e i gruppi. Confermi?
repos.leave=Leave
repos.leave=Abbandona
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
@@ -577,8 +605,8 @@ 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!
issues.num_participants=%d Partecipanti
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab='Clicca per vedere "%s" in una nuova scheda'
issues.attachment.download=«Clicca qui per scaricare "%s"»
pulls.new=Nuova Pull Request
pulls.compare_changes=Confronta le modifiche
@@ -588,6 +616,7 @@ pulls.compare_compare=confronta
pulls.filter_branch=Filtra branch
pulls.no_results=Nessun risultato trovato.
pulls.nothing_to_compare=Non c'è niente da confrontare perchè i branch base e head uguali.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`E' già presente una pull request tra questi due trargets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Crea Pull Request
pulls.title_desc=vorrebbe unire %[1]d commit da <code>%[2]s</code> a <code>%[3]s</code>
@@ -600,9 +629,11 @@ pulls.merged=Unito
pulls.has_merged=Questo contributo è stato incluso con successo!
pulls.data_broken=I dati di questa pull request si sono rotti causa dell'eliminazione delle informazioni di fork.
pulls.is_checking=Il controllo dei conflitti è ancora in corso, per favore aggiorna pagina tra qualche istante.
pulls.can_auto_merge_desc=La pull request non può essere mergiata automaticamente.
pulls.can_auto_merge_desc=La pull request può essere mergiata automaticamente.
pulls.cannot_auto_merge_desc=Questa pull request non può essere mergiata automaticamente perchè ci sono dei conflitti.
pulls.cannot_auto_merge_helper=Effettua il merge manualmente per risolvere i conflitti.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
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.`
pulls.delete_branch=Delete Branch
@@ -661,9 +692,10 @@ settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update=Aggiorna
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches=Branch protetti
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.choose_a_branch=Choose a branch...
settings.branch_protection=Branch Protection
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numeric
settings.tracker_issue_style.alphanumeric=Alphanumeric
settings.tracker_url_format_desc=You can use placeholder <code>{user} {repo} {index}</code> for user name, repository name and issue index.
settings.pulls_desc=Abilita le pull requests per accettare contributi pubblici
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Zona Pericolosa
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome.
@@ -779,8 +813,8 @@ settings.event_create=Crea
settings.event_create_desc=Branch, o tag creato
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_fork=Forka
settings.event_fork_desc=Repository Forkata
settings.event_push=Push
settings.event_push_desc=Git push in un repository
settings.event_issues=Issues
@@ -801,6 +835,7 @@ settings.recent_deliveries=Recenti Deliveries
settings.hook_type=Tipo di Hook
settings.add_slack_hook_desc=Aggiungi <a href="%s"> Slack</a> integrazione al tuo repository.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Token
settings.slack_domain=Dominio
settings.slack_channel=Canale
@@ -1065,15 +1100,21 @@ auths.domain=Dominio
auths.host=Host
auths.port=Porta
auths.bind_dn=Binda DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Binda Password
auths.bind_password_helper=Attenzione: Questa password è salvata in chiaro. Non usare su un acount con alti privilegi.
auths.user_base=User Search Base
auths.user_dn=DN dell'utente
auths.attribute_username=Attributo username
auths.attribute_username_placeholder=Se vuoto, verrà usato il nome di login dell'accesso.
auths.attribute_name=Attributo Nome
auths.attribute_name=First Name Attribute
auths.attribute_surname=Attributo Cognome
auths.attribute_mail=Attributo Email
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Fetch attributes in Bind DN context
auths.filter=Fitro utente
auths.admin_filter=Filtro Amministratore
@@ -1100,6 +1141,7 @@ auths.still_in_used=Questo meccanismo di autenticazione è ancora attivo per alc
auths.deletion_success=Il meccanismo di autenticazione è stato eliminato!
auths.login_source_exist=La fonte di autenticazione '%s' esiste già.
config.not_set=(not set)
config.server_config=Configurazione Server
config.app_name=Nome Applicazione
config.app_ver=Versione Applicazione
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Configurazione Database
config.db_type=Tipo
config.db_host=Host
@@ -1208,7 +1253,7 @@ config.git_pull_timeout=Timeout per il pull
config.git_gc_timeout=Timeout per le operazioni di GC
config.log_config=Configurazione Log
config.log_mode=Mode
config.log_mode=Modalità
config.log_options=Options
monitor.cron=Incarici di cron

File diff suppressed because it is too large Load Diff

View File

@@ -75,15 +75,15 @@ domain_helper=Git SSH url에 영향을 미칩니다.
ssh_port=SSH 포트
ssh_port_helper=SSH서버가 실행되고 있는 포트를 입력하세요. 비워둘 경우 SSH를 사용하지 않습니다.
use_builtin_ssh_server=내장 SSH 서버 사용
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server_popup=시스템 SSH 디먼과 구별하기 위해 Git 작업을 위한 빌트인 SSH 서버를 시작하세요.
http_port=HTTP 포트
http_port_helper=포트 번호는 애플리케이션에서 열고 있습니다.
app_url=애플리케이션 URL
app_url_helper=이 작업은 HTTP/HTTPS 클론 URL과 이메일의 어딘가에 영향을 미칩니다.
log_root_path=로그 경로
log_root_path_helper=로그 파일을 쓸 디렉터리.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=콘솔 모드 활성화
enable_console_mode_popup=파일 모드 외에 콘솔에 로그를 인쇄하세요.
optional_title=추가설정
email_title=이메일 서비스 설정
@@ -119,6 +119,7 @@ sqlite3_not_available=설치하신 버전은 SQLite3을 지원하지 않으므
invalid_db_setting=데이터베이스 설정이 올바르지 않습니다: %v
invalid_repo_path=저장소 루트 경로가 올바르지 않습니다: %v
run_user_not_match=실행 유저가 현재 유저가 아닙니다: %s -> %s
smtp_host_missing_port=SMTP 호스트 포트가 주소에 없습니다.
invalid_smtp_from=SMTP 보낸 사람 필드가 유효하지 않습니다: %v
save_config_failed=설정을 저장할 수 없습니다: %v
invalid_admin_setting=관리자 계정 설정이 잘못되었습니다: %v
@@ -168,6 +169,14 @@ reset_password_helper=이곳을 눌러 비밀번호를 재설정
password_too_short=비밀번호의 길이는 6글자 미만일 수 없습니다.
non_local_account=Gogs 계정이 아니면 암호를 변경할 수 없습니다.
login_two_factor=2단계 인증
login_two_factor_passcode=인증 패스코드
login_two_factor_enter_recovery_code=2단계 복구 코드를 입력하세요
login_two_factor_recovery=2단계 복구
login_two_factor_recovery_code=복구 코드
login_two_factor_enter_passcode=2단계 패스코드를 입력하세요
login_two_factor_invalid_recovery_code=복구 코드가 사용 중이거나 유효하지 않습니다.
[mail]
activate_account=계정을 활성화하세요
activate_email=이메일 주소 확인
@@ -203,7 +212,7 @@ Content=컨텐츠
require_error=` 비어 있을 수 없습니다.`
alpha_dash_error=`은(는) 숫자, 알파벳, 대시(-_) 문자로만 구성되어야 합니다.`
alpha_dash_dot_error=` 숫자, 알파벳, 점(.), 대시(-_) 문자로만 구성되어야 합니다.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` 은(는) 알파벳, 숫자, 대시(-_), 점, 슬래시로만 구성되어야 합니다.`
size_error=` %s 글자여야 합니다.`
min_size_error=` 최소 %s 글자여야 합니다.`
max_size_error=` %s 글자를 넘을 수 없습니다.`
@@ -255,12 +264,11 @@ profile=프로필
password=비밀번호
avatar=아바타
ssh_keys=SSH 키
social=소셜 계정
applications=애플리케이션
security=보안
repos=저장소
orgs=조직
repos=Repositories
applications=애플리케이션
delete=계정 삭제
uid=Uid
public_profile=공개 프로필
profile_desc=이메일 주소가 공개되며, 사이트를 통해 작업하거나 계정과 관련된 모든 알림에 사용됩니다.
@@ -326,10 +334,30 @@ no_activity=최근 활동 없음
key_state_desc=이 키는 최근 1주일 동안 사용된 적이 있습니다.
token_state_desc=이 토큰은 최근 1주일 동안 사용된 적이 있습니다.
manage_social=SNS계정 관리
social_desc=연결된 SNS계정 리스트입니다. 직접 로그인 하지 않은 계정은 연결을 해제하세요.
unbind=해제
unbind_success=SNS계정이 연결 해제되었습니다.
two_factor=2단계 인증
two_factor_status=상태:
two_factor_on=켜기
two_factor_off=끄기
two_factor_enable=활성화
two_factor_disable=비활성화
two_factor_view_recovery_codes=<a href="%s%s">복구 코드</a>를 안전한 장소에 저장해 두십시오. 인증 애플리케이션에 접근할 수 없을때 사용할 수 있습니다.
two_factor_http=HTTP/HTTPS 작업에 더이상 평문 사용자명과 비밀번호를 사용할 수 없습니다. <a href="%[1]s%[2]s">개인 액세스 토큰</a>을 생성후 사용해 주세요. 예. <code>%[3]s</code>.
two_factor_enable_title=2단계 인증 활성화
two_factor_scan_qr=인증 애플리케이션으로 이 이미지를 스캔하세요:
two_factor_or_enter_secret=또는 이 비밀키를 입력하세요:
two_factor_then_enter_passcode=그리고 코드를 입력하세요:
two_factor_verify=확인
two_factor_invalid_passcode=입력한 코드가 올바르지 않습니다. 다시 시도해 주세요!
two_factor_enable_error=2단계 인증 활성화 실패: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=2단계 인증 비활성화
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=2단계 인증이 성공적으로 비활성화되었습니다!
manage_access_token=개인 액세스 토큰 관리
generate_new_token=새 토큰을 생성
@@ -422,7 +450,7 @@ quick_guide=퀵 가이드
clone_this_repo=이 저장소 복제
create_new_repo_command=커맨드 라인에서 새 저장소 만들기
push_exist_repo=커맨드 라인에서 기존 저장소 푸시하기
bare_message=This repository does not have any content yet.
bare_message=이 저장소에는 아직 내용이 없습니다.
files=파일
branch=브렌치
@@ -435,7 +463,7 @@ pulls=풀 리퀘스트
labels=레이블
milestones=마일스톤
commits=커밋
git_branches=Branches
git_branches=브랜치
releases=릴리즈
file_raw=Raw
file_history=히스토리
@@ -445,11 +473,11 @@ file_too_large=이 파일은 표시하기엔 너무 큽니다.
video_not_supported_in_browser=이 브라우저는 HTML5 비디오 태그를 지원하지 않습니다.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.active_branches=활성 브랜치
branches.stale_branches=오래된 브랜치
branches.all=모든 브랜치
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.change_default_branch=기본 브랜치 변경
editor.new_file=파일 생성
editor.upload_file=파일 업로드
@@ -588,6 +616,7 @@ pulls.compare_compare=비교
pulls.filter_branch=Filter Branch
pulls.no_results=결과 없음
pulls.nothing_to_compare=Base 와 head 브랜치가 동일해서 비교할 게 없습니다.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`이 두 타겟 사이엔 이미 풀 리퀘스트가 있습니다:<a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=풀 리퀘스트 생성
pulls.title_desc=<code>%[2]s</code> 에서 <code>%[3]s</code> 로 %[1]d commits 를 머지하려 합니다
@@ -604,6 +633,8 @@ pulls.is_checking=아직 컨플릭트 여부 체크 중입니다, 잠시 후 이
pulls.can_auto_merge_desc=이 풀리퀘스트는 자동적으로 머지될 수 있습니다.
pulls.cannot_auto_merge_desc=컨플릭이 존재해서 이 풀리퀘스트는 자동을 머지될 수 없습니다.
pulls.cannot_auto_merge_helper=컨플릭을 해결하려면 수동으로 머지해 주십시오.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=풀리퀘스트 머지
pulls.open_unmerged_pull_exists=`같은 리파지토리에서 같은 머지 정보로 만들어진 풀리퀘스트 (#%d) 가 이미 오픈 상태이고 머지를 기다리고 있기 때문에 다시 열기 작업을 할 수 없습니다.`
pulls.delete_branch=브랜치 삭제
@@ -663,6 +694,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=기본 브랜치
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=업데이트
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=이 레포지토리의 기본 브랜치가 성공적으로 설정되었습니다!
settings.protected_branches=보호된 브랜치
settings.protected_branches_desc=보호된 브랜치는 force 푸시, 실수로 인한 코드 삭제를 방지하며 코드 커미터를 화이트리스트 합니다.
@@ -708,8 +740,10 @@ settings.tracker_issue_style.numeric=숫자
settings.tracker_issue_style.alphanumeric=문자 숫자
settings.tracker_url_format_desc=<code>{user} {repo} {index}</code> 사용자 명, 저장소 명, 이슈 인덱스를 사용하여 표시자를 사용할 수 있습니다.
settings.pulls_desc=끌어오기 요청을 공개적으로 기여받을 수 있도록 활성화합니다.
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=위험 설정
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.cannot_fork_to_same_owner=본인 소유의 저장소를 본인 명의로 포크할 수 없습니다.
settings.new_owner_has_same_repo=새로운 소유자가 같은 이름의 저장소를 이미 가지고 있습니다. 다른 이름을 선택해주세요.
settings.convert=일반 리파지토리로 변환
settings.convert_desc=이 미러를 일반 리파지토리로 변환할 수 없습니다. 반대로는 할 수 없습니다.
@@ -778,13 +812,13 @@ settings.event_send_everything=<strong>모든 것</strong>이 필요합니다.
settings.event_choose=필요한 것을 선택해주세요.
settings.event_create=생성
settings.event_create_desc=브랜치 또는 태그를 생성합니다.
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_delete=삭제
settings.event_delete_desc=브랜치나 태그 삭제됨
settings.event_fork=포크
settings.event_fork_desc=Repository forked
settings.event_push=푸시
settings.event_push_desc=깃 저장소로 푸시
settings.event_issues=Issues
settings.event_issues=이슈
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
@@ -802,6 +836,7 @@ settings.recent_deliveries=최근의 Deliveries
settings.hook_type=훅 타입
settings.add_slack_hook_desc=저장소에 <a href="%s">슬랙</a>연동을 추가
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=토큰
settings.slack_domain=도메인
settings.slack_channel=채널
@@ -1066,15 +1101,21 @@ auths.domain=도메인
auths.host=호스트
auths.port=포트
auths.bind_dn=DN 연결
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=비밀번호 연결
auths.bind_password_helper=경고: 이 암호는 일반 텍스트로 저장됩니다. 높은 권한의 계정을 사용하지 마십시오.
auths.user_base=사용자 검색 기준
auths.user_dn=사용자 DN
auths.attribute_username=유저 명 속성
auths.attribute_username_placeholder=사용자 이름에 대한 로그인 폼 필드 값을 사용하려면 비워 둡니다.
auths.attribute_name=이름 속성
auths.attribute_name=First Name Attribute
auths.attribute_surname=성씨 속성
auths.attribute_mail=이메일 속성
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=DN 컨텍스트에서 속성을 가져와 연결합니다.
auths.filter=사용자 필터
auths.admin_filter=관리자 필터
@@ -1101,6 +1142,7 @@ auths.still_in_used=이 인증은 아직 몇몇 사용자들이 사용하고 있
auths.deletion_success=인증이 성공적으로 삭제 되었습니다!
auths.login_source_exist=로그인 소스 '%s'는 이미 존재합니다.
config.not_set=(not set)
config.server_config=서버 설정
config.app_name=애플리케이션 이름
config.app_ver=응용 프로그램 버전
@@ -1137,6 +1179,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=데이터베이스 설정
config.db_type=유형
config.db_host=호스트

View File

@@ -48,7 +48,7 @@ cancel=Atcelt
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 requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs ir nepieciešams MySQL, PostgreSQL, SQLite3, MSSQL vai TiDB.
db_title=Datu bāzes iestatījumi
db_type=Datu bāzes veids
host=Resursdators
@@ -58,8 +58,8 @@ 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=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Faila ceļs uz SQLite3 datu bāzi. <br>Norādiet absolūtu ceļu, kad laižat kā servisu.
err_empty_db_path=SQLite3 datu bāzes ceļš nevar būt tukšs.
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.
@@ -74,16 +74,16 @@ 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.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Izmantot iebūvēto SSH serveri
use_builtin_ssh_server_popup=Startēt iebūvēto SSH serveri Git darbībām, lai atšķirtu no sistēmas SSH servisa.
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.
log_root_path=Žurnalizēšanas direktorija
log_root_path_helper=Direktorija, kurā tiks glabāti žurnāla faili.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Iespējot konsoles režīmu
enable_console_mode_popup=Papildus faila režīmam, papildus rakstīt žurnāla ierakstus konsolē.
optional_title=Neobligātie iestatījumi
email_title=E-pasta pakalpojuma iestatījumi
@@ -119,7 +119,8 @@ sqlite3_not_available=Jūsu versija neatbalsta SQLite3, lūdzu lejupielādējiet
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
invalid_smtp_from=SMTP From field is not valid: %v
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=SMTP sūtītāja lauks ir nekorekts: %v
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!
@@ -141,7 +142,7 @@ issues.in_your_repos=Jūsu repozitorijos
[explore]
repos=Repozitoriji
users=Lietotāji
organizations=Organizations
organizations=Organizācijas
search=Meklēt
[auth]
@@ -168,6 +169,14 @@ reset_password_helper=Nospiediet šeit, lai atjaunotu paroli
password_too_short=Paroles garums nedrīkst būt mazāks par 6.
non_local_account=Tikai lokālie konti var nomainīt savu paroli Gogs.
login_two_factor=Divu faktoru autentifikācija
login_two_factor_passcode=Autentifikācijas kods
login_two_factor_enter_recovery_code=Ievadiet divu faktoru atjaunošanas kodu
login_two_factor_recovery=Divu faktoru atjaunošana
login_two_factor_recovery_code=Atjaunošanas kods
login_two_factor_enter_passcode=Ievadiet divu faktoru kodu
login_two_factor_invalid_recovery_code=Atjaunošanas kods jau ir izmantots vai nav pareizs.
[mail]
activate_account=Lūdzu, aktivizējiet savu kontu
activate_email=Apstipriniet savu e-pasta adresi
@@ -255,12 +264,11 @@ profile=Profils
password=Parole
avatar=Profila attēls
ssh_keys=SSH atslēgas
social=Sociālie konti
applications=Lietotnes
security=Drošība
repos=Repozitoriji
orgs=Organizācijas
repos=Repositories
applications=Lietotnes
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.
@@ -326,10 +334,30 @@ 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.
two_factor=Divu faktoru autentifikācija
two_factor_status=Statuss:
two_factor_on=Ieslēgts
two_factor_off=Izslēgts
two_factor_enable=Iespējot
two_factor_disable=Atspējot
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=HTTP/HTTPS darbībām vairs nav iespējams izmantot tikai lietotāja vārdu un paroli. Izveidojiet un izmantojiet <a href="%[1]s%[2]s">Personīgo piekļuves talonu</a> kā pilnvaru, piemēram, <code>%[3]s</code>.
two_factor_enable_title=Iespējot divu faktoru autentifikāciju
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Vai ievadiet noslēpumu:
two_factor_then_enter_passcode=Pēc tam ievadiet kodu:
two_factor_verify=Pārbaudīt
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Atspējot divu faktoru autentifikāciju
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Pārvaldīt personīgos piekļuves talonus
generate_new_token=Ģenerēt jaunu talonu
@@ -344,13 +372,13 @@ access_token_deletion_desc=Dzēšot personīgo piekļuves talonu, tiks liegta pi
delete_token_success=Personīgās piekļuves talons veiksmīgi izdzēsts! Neaizmirstiet nomainīt uz citu aplikācijās, kas to izmantoja.
orgs.none=You are not a member of any organizations.
orgs.leave_title=Leave organization
orgs.leave_title=Pamest organizāciju
orgs.leave_desc=You will lose access to all repositories and teams after you left the organization. Do you want to continue?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Pamest
repos.leave_title=Pamest repozitoriju
repos.leave_desc=Tiks zaudēta piekļuve repozitorijam, kad būsiet to pametis. Vai patiešām vēlaties turpināt?
repos.leave_success=Repozitorijs '%s' veiksmīgi pamests!
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>!
@@ -379,7 +407,7 @@ 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
default_branch=Noklusētais atzars
mirror_prune=Izmest
mirror_prune_desc=Izdzēst visas ārējās atsauces, kas ārējā repozitorijā vairs neeksistē
mirror_interval=Spoguļošanas intervāls (stundās)
@@ -399,7 +427,7 @@ 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=This can be a HTTP/HTTPS/GIT URL.
migrate.clone_address_desc=Tas var būt HTTP/HTTPS/GIT URL.
migrate.clone_address_desc_import_local=You're also allowed to migrate a repository by local server path.
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.
@@ -424,7 +452,7 @@ create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
bare_message=This repository does not have any content yet.
files=Files
files=Faili
branch=Atzars
tree=Koks
filter_branch_and_tag=Filtrēt atzarus vai tagus
@@ -435,7 +463,7 @@ pulls=Izmaiņu pieprasījumi
labels=Etiķetes
milestones=Atskaites punkti
commits=Revīzijas
git_branches=Branches
git_branches=Atzari
releases=Laidieni
file_raw=Neapstrādāts
file_history=Vēsture
@@ -444,12 +472,12 @@ file_permalink=Patstāvīgā saite
file_too_large=Šis fails ir par lielu, lai to parādītu
video_not_supported_in_browser=Your browser doesn't support HTML5 video tag.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.overview=Pārskats
branches.active_branches=Aktīvie atzari
branches.stale_branches=Pamests atzars
branches.all=Visi atzari
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.change_default_branch=Mainīt noklusēto atzaru
editor.new_file=Jauns fails
editor.upload_file=Augšupielādēt failu
@@ -479,7 +507,7 @@ editor.cancel=Atcelt
editor.filename_cannot_be_empty=Nav ievadīts faila nosaukums.
editor.branch_already_exists=Atzars '%s' šajā repozitorijā jau eksistē.
editor.directory_is_a_file=Ieraksts '%s' vecāka ceļā ir fails nevis direktorija šajā repozitorijā.
editor.file_is_a_symlink=The file '%s' is a symlink that cannot be modified from the web editor.
editor.file_is_a_symlink=Fails '%s" ir norāde, kuru nav iespējams labot no tīmekļa redaktora.
editor.filename_is_a_directory=Faila nosaukums '%s' sakrīt ar direktorijas nosaukumu šajā repozitorijā.
editor.file_editing_no_longer_exists=Fails '%s', ko labojat, vairs neeksistē repozitorijā.
editor.file_changed_while_editing=Faila saturs ir mainījies kopš brīža, kad sākāt to labot. <a target="_blank" href="%s">Nospiediet šeit</a>, lai redzētu kas ir mainījies vai <strong>nospiediet atkārtoti pabeigt revīziju</strong>, lai pārrakstītu izmaiņas.
@@ -490,7 +518,7 @@ editor.add_subdir=Pievienot apakšdirektoriju...
editor.unable_to_upload_files=Neizdevās augšupielādēt failus uz direktoriju '%s', kļūda: %v
editor.upload_files_to_dir=Augšupielādēt failus uz direktoriju '%s'
commits.commit_history=Commit History
commits.commit_history=Revīziju vēsture
commits.commits=Revīzijas
commits.search=Meklēt revīzijas
commits.find=Meklēt
@@ -588,6 +616,7 @@ 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.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,9 +632,11 @@ pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet la
pulls.can_auto_merge_desc=Šo izmaiņu pieprasījumu var automātiski saplūdināt.
pulls.cannot_auto_merge_desc=Šis izmaiņu pieprasījums nevar tikt automātiski saplūdināts konfliktu dēļ.
pulls.cannot_auto_merge_helper=Lūdzu sapludiniet manuāli, lai atrisinātu konfliktus.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
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.`
pulls.delete_branch=Delete Branch
pulls.delete_branch=Dzēst atzaru
pulls.delete_branch_has_new_commits=Branch cannot be deleted because it has new commits after mergence.
milestones.new=Jauns atskaites punkts
@@ -657,27 +688,28 @@ settings.collaboration.admin=Administrators
settings.collaboration.write=Rakstīšanas
settings.collaboration.read=Skatīšanās
settings.collaboration.undefined=Nedefinētas
settings.branches=Branches
settings.branches=Atzari
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.default_branch=Noklusētais atzars
settings.default_branch_desc=Noklusētais atzars tiek uzskatīts par pamata atzaru koda revīzijām, izmaiņu pieprasījumiem un tiešsaistes rediģēšanai.
settings.update=Atjaunot
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches=Aizsargātie atzari
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.choose_a_branch=Choose a branch...
settings.branch_protection=Branch Protection
settings.choose_a_branch=Izvēlēties atzarus...
settings.branch_protection=Atzaru aizsargāšana
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
settings.protect_this_branch=Protect this branch
settings.protect_this_branch=Aizsargāt šo atzaru
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
settings.protect_require_pull_request=Require pull request instead direct pushing
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_users=Lietotāji, kas var nosūtīt izmaiņas uz šo atzaru
settings.protect_whitelist_search_users=Meklēt lietotajus
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.protect_whitelist_search_teams=Meklēt komandas
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.hooks=Tīmekļa āķi
settings.githooks=Git āķi
@@ -691,15 +723,15 @@ settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistīta
settings.advanced_settings=Papildu iestatījumi
settings.wiki_desc=Iespējot vikivietnes
settings.use_internal_wiki=Izmantot iebūvēto vikivietni
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Atļaut publisko piekļuvi vikivietnei, ja repozitorijs ir privāts
settings.use_external_wiki=Izmantot ārējo vikivietni
settings.external_wiki_url=Ārējās Vikivietnes adrese
settings.external_wiki_url_desc=Apmeklētāji tiks novirzīti uz adresi, kad viņi uzklikšķinās uz cilnes.
settings.issues_desc=Iespējot problēmu sekotāju
settings.use_internal_issue_tracker=Izmantot iebūvētu vieglu problēmu sekotāju
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Atļaut publisko piekļuvi problēmām, ja repozitorijs ir privāts
settings.use_external_issue_tracker=Izmantot ārējo problēmu sekotāju
settings.external_tracker_url=External Issue Tracker URL
settings.external_tracker_url=Ārējā problēmu sekotāja URL
settings.external_tracker_url_desc=Visitors will be redirected to URL when they click on the tab.
settings.tracker_url_format=Ārējā problēmu sekotāja adreses formāts
settings.tracker_issue_style=Ārējā problēmu reģistra nosaukumu stils:
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Cipari
settings.tracker_issue_style.alphanumeric=Burti un cipari
settings.tracker_url_format_desc=Jūs varat izmantot <code>{user}{repo}{index}</code> lietotājvārdam, repozitorija nosaukumam un problēmas identifikātoram.
settings.pulls_desc=Iespējot izmaiņu pieprasījumus lai saņemtu publiskus ieguldījumus
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Bīstamā zona
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu.
@@ -777,20 +811,20 @@ 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_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_delete=Dzēst
settings.event_delete_desc=Atzars vai tags izdzēsts
settings.event_fork=Atdalīts
settings.event_fork_desc=Repozitorijs atdalīts
settings.event_push=Izmaiņu nosūtīšana
settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju
settings.event_issues=Issues
settings.event_issues=Problēmas
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment=Problēmas komentārs
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_pull_request=Izmaiņu pieprasījums
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_release=Laidiens
settings.event_release_desc=Laidiens publicēts repozitorijā.
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.
@@ -801,6 +835,7 @@ 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.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Talons
settings.slack_domain=Domēns
settings.slack_channel=Kanāls
@@ -883,7 +918,7 @@ 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.
form.team_name_reserved=Team name '%s' is reserved.
form.team_name_reserved=Komandas vārds '%s' ir rezervēts.
settings=Iestatījumi
settings.options=Opcijas
@@ -1050,7 +1085,7 @@ repos.private=Privāts
repos.watches=Vērošana
repos.stars=Atzīmētās zvaigznītes
repos.issues=Problēmas
repos.size=Size
repos.size=Izmērs
auths.auth_manage_panel=Autentifikācijas pārvaldības panelis
auths.new=Pievienot jaunu avotu
@@ -1065,15 +1100,21 @@ auths.domain=Domēns
auths.host=Resursdators
auths.port=Ports
auths.bind_dn=Saistīšanas DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
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_username=Lietotājvārda atribūts
auths.attribute_username_placeholder=Atstājiet tukšu, lai izmantotu lietotājvārdu ar kuru autorizējaties.
auths.attribute_name=Vārda atribūts
auths.attribute_name=First Name Attribute
auths.attribute_surname=Uzvārda atribūts
auths.attribute_mail=E-pasta atribūts
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Nolasīt atribūtus no saistīšanas DN konteksta
auths.filter=Lietotāju filts
auths.admin_filter=Administratoru filtrs
@@ -1098,8 +1139,9 @@ auths.delete_auth_title=Autentifikācijas dzēšana
auths.delete_auth_desc=Šī autentifikācija tiks dzēsta, vai vēlaties turpināt?
auths.still_in_used=Daži lietotāji joprojām izmanto šo autentifikācijas veidu. Nepieciešams veikt šo lietotāju konvertāciju vai dzēšanu.
auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
auths.login_source_exist=Login source '%s' already exists.
auths.login_source_exist=Pieteikšanās avots '%s' jau eksistē.
config.not_set=(not set)
config.server_config=Servera konfigurācija
config.app_name=Lietotnes nosaukums
config.app_ver=Lietotnes versija
@@ -1109,7 +1151,7 @@ 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.git_version=Git Version
config.git_version=Git versija
config.static_file_root_path=Statisko failu atrašanās vieta
config.log_file_root_path=Žurnalizēšanas failu glabāšanas vieta
config.reverse_auth_user=Reversā lietotāja autentifikācija
@@ -1126,16 +1168,19 @@ config.ssh_keygen_path=Keygen ('ssh-keygen') ceļš
config.ssh_minimum_key_size_check=Minimālā atslēgas lieluma pārbaude
config.ssh_minimum_key_sizes=Minimālais atslēgas lielums
config.repo_config=Repository Configuration
config.repo_config=Repozitorija konfigurācija
config.repo_root_path=Repozitoriju glabāšanas vieta
config.script_type=Skripta veids
config.repo_force_private=Force Private
config.repo_force_private=Piespiedu privāti repozitoriji
config.max_creation_limit=Max Creation Limit
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.disable_http_git=Atspējot HTTP Git
config.enable_local_path_migration=Atļaut migrāciju no lokāla ceļa
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Datu bāzes konfigurācija
config.db_type=Veids
config.db_host=Resursdators
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Izmaiņu saņemšanas darbības noilgums
config.git_gc_timeout=GC darbības noilgums
config.log_config=Žurnalizēšanas konfigurācija
config.log_mode=Mode
config.log_options=Options
config.log_mode=Režīms
config.log_options=Opcijas
monitor.cron=Cron uzdevumi
monitor.name=Nosaukums
@@ -1238,7 +1283,7 @@ notices.delete_success=Sistēmas paziņojumi tika veiksmīgi izdzēstas.
[action]
create_repo=izveidoja repozitoriju <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=atdalīja repozitoriju uz <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>
compare_commits=Salīdzināt šīs %d revīzijas
@@ -1251,10 +1296,10 @@ create_pull_request=`izveidoja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%
close_pull_request=`aizvēra izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`atkārtoti atvēra izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`sapludināja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=izveidoja jaunu atzaru <a href="%[1]s/src/%[2]s">%[3]s</a> repozitorijā <a href="%[1]s">%[4]s</a>
delete_branch=izdzēsa atzaru <code>%[2]s</code> repozitorijā <a href="%[1]s">%[3]s</a>
push_tag=pievienoja tagu <a href="%s/src/%s">%[2]s</a> repozitorijam <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=izdzēsa tagu <code>%[2]s</code> repozitorijā <a href="%[1]s">%[3]s</a>
[tool]
ago=atpakaļ

View File

@@ -48,7 +48,7 @@ cancel=Annuleren
install=Installatie
title=Installatiestappen voor de eerste keer opstarten
docker_helper=Als u gebruik maakt Gogs binnen Docker, lees dan de <a target="_blank" href="%s">richtlijnen</a> voordat u iets veranderen op deze pagina!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs vereist MySQL, PostgreSQL, SQLite3, MSSQL of TiDB.
db_title=Database-instellingen
db_type=Database-type
host=Host
@@ -58,8 +58,8 @@ db_name=Databasenaam
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 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Het pad van de SQLite3-database.<br>Als u Gogs start als een service, geef dan een absoluut pad op.
err_empty_db_path=SQLite3 database pad mag niet leeg zijn.
no_admin_and_disable_registration=Je kunt niet de registratie uit te schakelen zonder een beheerders account.
err_empty_admin_password=Beheerder wachtwoord kan niet leeg zijn.
@@ -74,16 +74,16 @@ 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.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Gebruik de ingebouwde SSH server
use_builtin_ssh_server_popup=Start de ingebouwde SSH server zodat de Git operaties herkenbaar zijn tegenover het systeem SSH Deamon.
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
log_root_path=Log-pad
log_root_path_helper=Directory waar logbestanden opgeslagen worden.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Schakel Console modus in
enable_console_mode_popup=Naast de bestand modus print het ook de logs naar de console.
optional_title=Optionele instellingen
email_title=E-mail service instellingen
@@ -99,8 +99,8 @@ 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.
federated_avatar_lookup=Enable Federated Avatars Lookup
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
federated_avatar_lookup=Federated Avatars zoekopdracht inschakelen
federated_avatar_lookup_popup=Schakel federated avatars zoekopdracht in om de op libravatar gebaseerde leveranciers te gebruiken.
disable_registration=Schakel zelfregistratie uit
disable_registration_popup=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
enable_captcha=Inschakelen Captcha
@@ -119,7 +119,8 @@ sqlite3_not_available=Uw versie biedt geen ondersteuning voor SQLite3, download
invalid_db_setting=Uw database instellingen zijn niet correct: %v
invalid_repo_path=Repositorie basis map is niet correct: %v
run_user_not_match=De uitvoerende gebruiker is niet de huidig gebruiker: %s -> %s
invalid_smtp_from=SMTP From field is not valid: %v
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=SMTP-van-veld is niet geldig: %v
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
@@ -166,7 +167,15 @@ 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.
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Niet lokale accounts mogen hun wachtwoord niet veranderen via Gogs.
login_two_factor=Twee-traps authenticatie
login_two_factor_passcode=Authenticatie wachtwoord
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recovery Code
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=Activeer uw account
@@ -196,7 +205,7 @@ AdminEmail=E-mail beheerder
NewBranchName=Nieuwe branch naam
CommitSummary=Commit samenvatting
CommitMessage=Commit bericht
CommitChoice=Commit choice
CommitChoice=Keuze toepassen
TreeName=Bestandspad
Content=Inhoud
@@ -255,12 +264,11 @@ profile=Profiel
password=Wachtwoord
avatar=Profielfoto
ssh_keys=SSH-sleutels
social=Sociale netwerk-accounts
applications=Toepassingen
orgs=Organisaties
security=Beveiliging
repos=Repositories
orgs=Organisaties
applications=Toepassingen
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.
@@ -326,10 +334,30 @@ 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.
two_factor=Two-factor Authentication
two_factor_status=Status:
two_factor_on=Aan
two_factor_off=Uit
two_factor_enable=Inschakelen
two_factor_disable=Uitschakelen
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verifiëren
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Persoonlijke toegangstokens beheren
generate_new_token=Nieuwe Token genereren
@@ -347,8 +375,8 @@ orgs.none=U bent geen lid van een organisatie.
orgs.leave_title=Een organisatie verlaten
orgs.leave_desc=U verliest toegang tot alle repositories en teams nadat u de organisatie verlaten hebt. Wilt u doorgaan?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave=Verlaat
repos.leave_title=Verlaat repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
@@ -444,7 +472,7 @@ file_permalink=Permalink
file_too_large=Dit bestand is te groot om te worden getoond
video_not_supported_in_browser=Uw browser ondersteunt geen HTML5 video label.
branches.overview=Overview
branches.overview=Overzicht
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
@@ -466,7 +494,7 @@ editor.name_your_file=Bestandsnaam...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=of
editor.cancel_lower=annuleren
editor.commit_changes=Commit Changes
editor.commit_changes=Wijzigingen toepassen
editor.add_tmpl='%s/<filename>' toevoegen
editor.add='%s' toevoegen
editor.update='%s' updaten
@@ -481,7 +509,7 @@ editor.branch_already_exists=Aftakking '%s' bestaat al in deze repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.file_is_a_symlink=The file '%s' is a symlink that cannot be modified from the web editor.
editor.filename_is_a_directory=The filename '%s' is an existing directory in this repository.
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
editor.file_editing_no_longer_exists=Het bestand '%s' die u aan het bewerken bent bestaat niet meer in deze repository.
editor.file_changed_while_editing=File content has been changed since you started editing. <a target="_blank" href="%s">Click here</a> to see what have been changed or <strong>press commit again</strong> to overwrite those changes.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.no_changes_to_show=Er zijn geen wijzigingen om weer te geven.
@@ -588,6 +616,7 @@ 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.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=Controle van conflicten is nog bezig, ververs deze pagina in e
pulls.can_auto_merge_desc=Dit pull-request kan automatisch samengevoegd worden.
pulls.cannot_auto_merge_desc=Dit pull-request kan niet worden gemerged omdat er conflicten zijn.
pulls.cannot_auto_merge_helper=Gelieve beide versies manueel samen te voegen om de conflicten op te lossen.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Samenvoegen van pull verzoek
pulls.open_unmerged_pull_exists=U kan de bewerking 'heropenen' niet uitvoeren omdat er al een pull-aanvraag (#%d) is van dezelfde repository met dezelfde informatie. Voeg deze eerst samen.
pulls.delete_branch=Aftakking verwijderen
@@ -661,7 +692,8 @@ settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update=Bijwerken
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -675,7 +707,7 @@ settings.protect_require_pull_request_desc=Enable this option to disable direct
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_search_users=Doorzoek gebruikers
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Nummeriek
settings.tracker_issue_style.alphanumeric=Alfanummeriek
settings.tracker_url_format_desc=U kan de aanduidingen <code>{user} {repo} {index}</code> gebruiken voor de gebruikersnaam, de naam van de repository en de lijst van open tickets.
settings.pulls_desc=Schakel 'pull request' in om publieke bijdragen te mogelijk te maken
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Gevaren zone
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=De nieuwe eigenaar heeft al een repositorie met deze naam
@@ -777,7 +811,7 @@ 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_delete=Delete
settings.event_delete=Verwijderen
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
@@ -801,6 +835,7 @@ settings.recent_deliveries=Recente bezorgingen
settings.hook_type=Type hook
settings.add_slack_hook_desc=<a href="%s"> toegestane vertraging</a> integratie toevoegen aan uw repository.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Slack token
settings.slack_domain=Slack domein
settings.slack_channel=Slack kanaal
@@ -1065,15 +1100,21 @@ auths.domain=Domein
auths.host=Host
auths.port=Poort
auths.bind_dn=Binden DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Bind wachtwoord
auths.bind_password_helper=Opgelet: Dit wachtwoord wordt opgeslagen als leesbare tekst. Gebruik geen account met verhoogde rechten.
auths.user_base=User Search Base
auths.user_dn=User DN
auths.attribute_username=Gebruikersnaam attribuut
auths.attribute_username_placeholder=Laat leeg om het login veld van het formulier te gebruiken als gebruikersnaam.
auths.attribute_name=Voornaam attribuut
auths.attribute_name=First Name Attribute
auths.attribute_surname=Achternaam attribuut
auths.attribute_mail=E-mail attribuut
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Verkrijg attributes van de Bind DN context
auths.filter=Gebruikersfilter
auths.admin_filter=Beheerdersfilter
@@ -1100,6 +1141,7 @@ auths.still_in_used=This authentication is still used by some users, please dele
auths.deletion_success=Authenticatie is met succes verwijderd!
auths.login_source_exist=Login source '%s' already exists.
config.not_set=(not set)
config.server_config=Serverconfiguratie
config.app_name=Applicatienaam
config.app_ver=Applicatieversie
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Databaseconfiguratie
config.db_type=Type
config.db_host=Host

View File

@@ -40,7 +40,7 @@ your_settings=Twoje ustawienia
activities=Aktywności
pull_requests=Oczekujące zmiany
issues=Problemy
issues=Zagadnienia
cancel=Anuluj
@@ -48,7 +48,7 @@ cancel=Anuluj
install=Instalacja
title=Kroki instalacyjne dla pierwszego uruchomienia
docker_helper=Jeśli używasz Gogs wewnątrz Dockera, proszę przeczytaj <a target="_blank" href="%s">wytyczne</a>, zanim zmienisz coś na tej stronie!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs wymaga bazy MySQL, PostgreSQL, SQLite3 lub TiDB.
db_title=Ustawienia bazy danych
db_type=Typ bazy danych
host=Host
@@ -58,8 +58,8 @@ 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 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Ścieżka do pliku bazy danych SQLite3.<br>Proszę użyć ścieżki bezwzględnej podczas uruchamiania usługi.
err_empty_db_path=Ścieżka do pliku bazy danych SQLite3 nie może być pusta.
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ć puste.
@@ -74,16 +74,16 @@ 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.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Użyj wbudowanego serwera SSH
use_builtin_ssh_server_popup=Uruchom wbudowany serwer SSH dla odróżnienia operacji GIT od systemowego demona 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.
log_root_path=Ścieżka dla logów
log_root_path_helper=Katalog do zapisu logów.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Włącz tryb konsolowy
enable_console_mode_popup=Oprócz zapisywania do pliku wyświetlaj logi także w konsoli.
optional_title=Ustawienia opcjonalne
email_title=Ustawienia serwera e-mail
@@ -99,8 +99,8 @@ 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=Wyłącz Gravatar i niestandardowe źrodła, awatary muszą być przesyłane przez użytkowników.
federated_avatar_lookup=Enable Federated Avatars Lookup
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
federated_avatar_lookup=Włączyć wyszukiwanie avatarów w powiązanych systemach
federated_avatar_lookup_popup=Włączyć wyszukiwanie avatarów w powiązanych systemach opartych na usłudze libravatar.
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
@@ -119,7 +119,8 @@ sqlite3_not_available=Twoje wydanie nie obsługuje SQLite3, proszę pobrać ofic
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
invalid_smtp_from=SMTP From field is not valid: %v
smtp_host_missing_port=W SMTP Host brakuje portu w adresie.
invalid_smtp_from=Pole SMTP OD nie jest prawidłowe: %v
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.
@@ -141,7 +142,7 @@ issues.in_your_repos=W Twoich repozytoriach
[explore]
repos=Repozytoria
users=Użytkownicy
organizations=Organizations
organizations=Organizacje
search=Wyszukiwanie
[auth]
@@ -168,6 +169,14 @@ 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.
non_local_account=Nie lokalne konta nie mogą zmieniać haseł przez Gogs.
login_two_factor=Weryfikacja dwuetapowa
login_two_factor_passcode=Kod uwierzytelniania
login_two_factor_enter_recovery_code=Wprowadź kod odzyskiwania weryfikacji dwuetapowej
login_two_factor_recovery=Dwuetapowe odzyskiwanie kodu
login_two_factor_recovery_code=Kod odzyskiwania
login_two_factor_enter_passcode=Wprowadź hasło dwuetapowe
login_two_factor_invalid_recovery_code=Kod odzyskiwania został już wykorzystany lub nie jest prawidłowy.
[mail]
activate_account=Prosimy aktywować swoje konto
activate_email=Potwierdź swój adres e-mail
@@ -203,7 +212,7 @@ Content=Treść
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.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` musi być alfa/numeryczny lub zawierać daszek, myślnik, kropkę lub ukośnik.`
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.`
@@ -255,12 +264,11 @@ profile=Profil
password=Hasło
avatar=Awatar
ssh_keys=Klucze SSH
social=Konta społecznościowe
applications=Aplikacje
security=Bezpieczeństwo
repos=Repozytoria
orgs=Organizacje
repos=Repositories
applications=Aplikacje
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ę.
@@ -276,7 +284,7 @@ continue=Kontynuuj
cancel=Anuluj
lookup_avatar_by_mail=Wyszukaj Avatar po mailu
federated_avatar_lookup=Federated Avatar Lookup
federated_avatar_lookup=Wyszukiwanie Avatarów w powiązanych systemach
enable_custom_avatar=Włącz niestandardowe awatary
choose_new_avatar=Wybierz nowy avatar
update_avatar=Zaktualizuj ustawienia awatara
@@ -326,10 +334,30 @@ no_activity=Brak aktywności
key_state_desc=Ten klucz został użyty w ciągu ostatnich 7 dni
token_state_desc=Ten token został użyty w ciągu ostatnich 7 dni
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.
two_factor=Weryfikacja dwuetapowa
two_factor_status=Status:
two_factor_on=Włączony
two_factor_off=Wyłączony
two_factor_enable=Włącz
two_factor_disable=Wyłącz
two_factor_view_recovery_codes=Wyświetl i zapisz Twoje <a href="%s%s">kody odzyskiwania</a> w bezpiecznym miejscu. Można użyć ich jako kod dostępu, jeśli stracisz dostęp do aplikacji uwierzytelniania.
two_factor_http=Dla operacji HTTP/HTTPS już nie jest obsługiwana zwykła nazwa użytkownika i hasło. Prosimy o tworzenie i używanie <a href="%[1]s%[2]s"> osobistych tokenów dostępu</a> jako swoich poświadczeń, np.: <code>%[3]s</code>.
two_factor_enable_title=Włącz weryfikację dwuetapową
two_factor_scan_qr=Proszę używać uwierzytelniania aplikacji do skanowania obrazów:
two_factor_or_enter_secret=Lub wprowadź sekret:
two_factor_then_enter_passcode=Następnie wprowadź kod dostępu:
two_factor_verify=Weryfikuj
two_factor_invalid_passcode=Wprowadzony kod nie jest prawidłowy, spróbuj ponownie!
two_factor_enable_error=Włączenie dwuetapowego uwierzytelniania nie powiodło się: %v
two_factor_enable_success=Uwierzytelnianie dwuetapowe Twojego konta zostało włączone pomyślnie!
two_factor_recovery_codes_title=Kody odzyskiwania uwierzytelniania dwuetapowego
two_factor_recovery_codes_desc=Kody odzyskiwania są używane, gdy tymczasowo utracić dostęp do aplikacji uwierzytelniania. Każdy kod odzyskiwania może być tylko używany raz, <b>Proszę zachować te kody w bezpiecznym miejscu</b>.
two_factor_regenerate_recovery_codes=Ponownie wygeneruj kody odzyskiwania
two_factor_regenerate_recovery_codes_error=Ponowne wygenerowanie kodu odzyskiwania nie powiodło się: %v
two_factor_regenerate_recovery_codes_success=Nowy kod odzyskiwania został wygenerowany pomyślnie!
two_factor_disable_title=Wyłącz weryfikację dwuetapową
two_factor_disable_desc=Poziom zabezpieczeń konta zmniejszy się po wyłączeniu uwierzytelnianie dwuetapowego. Czy chcesz kontynuować?
two_factor_disable_success=Uwierzytelnianie dwuetapowe wyłączono pomyślnie!
manage_access_token=Zarządzaj osobistymi tokenami dostępu
generate_new_token=Wygeneruj nowy token
@@ -343,14 +371,14 @@ 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.
orgs.none=You are not a member of any organizations.
orgs.leave_title=Leave organization
orgs.leave_desc=You will lose access to all repositories and teams after you left the organization. Do you want to continue?
orgs.none=Nie jesteś członkiem żadnej organizacji.
orgs.leave_title=Opuść organizację
orgs.leave_desc=Po opuszczeniu organizacji utracisz dostęp do wszystkich repozytoriów i zespołów. Czy chcesz kontynuować?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Opuść
repos.leave_title=Opuść repozytorium
repos.leave_desc=Po opuszczeniu, stracisz dostęp do repozytorium. Czy chcesz kontynuować?
repos.leave_success=Pomyślnie opuściłeś repozytorium '%s'!
delete_account=Usuń swoje konto
delete_prompt=Ta operacja trwale usunie Twoje konto i <strong>NIE MOŻE</strong> zostać cofnięta!
@@ -399,8 +427,8 @@ migrate_type=Typ migracji
migrate_type_helper=To repozytorium będzie <span class="text blue">kopią lustrzaną</span>
migrate_repo=Przenieś repozytorium
migrate.clone_address=Sklonuj adres
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL.
migrate.clone_address_desc_import_local=You're also allowed to migrate a repository by local server path.
migrate.clone_address_desc=URL może być adresem HTTP/HTTPS/GIT.
migrate.clone_address_desc_import_local=Masz także możliwość migracji repozytorium przez ścieżka serwera lokalnego.
migrate.permission_denied=Nie możesz importować lokalnych repozytoriów.
migrate.invalid_local_path=Ścieżka jest niepoprawna. Nie istnieje lub nie jest katalogiem.
migrate.failed=Migracja nie powiodła się: %v
@@ -422,9 +450,9 @@ quick_guide=Skrócona instrukcja
clone_this_repo=Klonuj repozytorium
create_new_repo_command=Utwórz nowe repozytorium z wiersza poleceń
push_exist_repo=Prześlij istniejące repozytorium z wiersza poleceń
bare_message=This repository does not have any content yet.
bare_message=To repozytorium nie ma jeszcze żadnej zawartości.
files=Files
files=Pliki
branch=Gałąź
tree=Drzewo
filter_branch_and_tag=Filtruj gałąź lub tag
@@ -435,21 +463,21 @@ pulls=Oczekujące zmiany
labels=Etykiety
milestones=Kamienie milowe
commits=Commity
git_branches=Branches
git_branches=Gałęzie
releases=Wydania
file_raw=Czysty
file_history=Historia
file_view_raw=Zobacz czysty
file_permalink=Bezpośredni odnośnik
file_too_large=Ten plik jest zbyt duży, aby go wyświetlić
video_not_supported_in_browser=Your browser doesn't support HTML5 video tag.
video_not_supported_in_browser=Twoja przeglądarka nie obsługuje znacznika HTML5 video.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Przegląd
branches.active_branches=Aktywne gałęzie
branches.stale_branches=Stare gałęzie
branches.all=Wszystkie gałęzie
branches.updated_by=Zaktualizowano %[1]s przez %[2]s
branches.change_default_branch=Zmiana domyślnej gałęzi
editor.new_file=Nowy plik
editor.upload_file=Załaduj plik
@@ -478,8 +506,8 @@ editor.new_branch_name_desc=Nazwa nowej gałęzi...
editor.cancel=Anuluj
editor.filename_cannot_be_empty=Nazwa pliku nie może być pusta.
editor.branch_already_exists=Gałąź '%s' już istnieje w tym repozytorium.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.file_is_a_symlink=The file '%s' is a symlink that cannot be modified from the web editor.
editor.directory_is_a_file=Wpis '%s' w ścieżce nadrzędnej jest plikiem a nie katalogiem w tym repozytorium.
editor.file_is_a_symlink=Plik '%s' jest dowiązaniem symbolicznym, które nie mogą być modyfikowane z poziomu przeglądarki internetowej.
editor.filename_is_a_directory=Nazwa '%s' jest istniejącym katalogiem w tym repozytorium.
editor.file_editing_no_longer_exists=Plik '%s' który edytujesz nie istnieje już w tym repozytorium.
editor.file_changed_while_editing=Zawartość pliku została zmieniona od rozpoczęcia edycji. <a target="_blank" href="%s">Kliknij tutaj</a> aby zobaczyć, co zostało zmienione lub <strong>naciśnij commit ponownie</strong> aby nadpisać te zmiany.
@@ -490,7 +518,7 @@ editor.add_subdir=Dodaj podkatalog...
editor.unable_to_upload_files=Wysyłanie plików do '%s' nie powiodło się z błędem: %v
editor.upload_files_to_dir=Prześlij pliki do '%s'
commits.commit_history=Commit History
commits.commit_history=Historia zmian
commits.commits=Commity
commits.search=Przeszukaj commity
commits.find=Szukaj
@@ -588,6 +616,7 @@ pulls.compare_compare=porównaj
pulls.filter_branch=Filtruj branch
pulls.no_results=Nie znaleziono wyników.
pulls.nothing_to_compare=Nie ma nic do porównania, ponieważ gałęzie bazy i head są identyczne.
pulls.nothing_merge_base=Nie ma nic do porównania, ponieważ dwie gałęzie mają zupełnie inną historię.
pulls.has_pull_request=`Istnieje już pull request dla tych dwóch celów: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Utwórz Pull Request
pulls.title_desc=chce scalić %[1]d commity/ów z <code>%[2]s</code> do <code>%[3]s</code>
@@ -603,10 +632,12 @@ pulls.is_checking=Sprawdzanie konfliktów jeszcze trwa, proszę odświeżyć str
pulls.can_auto_merge_desc=Pull request może być automatycznie scalony.
pulls.cannot_auto_merge_desc=Pull request nie może być automatycznie scalony z powodu konfliktów.
pulls.cannot_auto_merge_helper=Proszę scalić ręcznie, aby rozwiązać konflikty.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Scal Pull Request
pulls.open_unmerged_pull_exists=`Nie można otworzyć ponownie ponieważ już istnieje gotowy do scalenia pull request (#%d) z tego samego repozytorium z tymi samymi informacjami.`
pulls.delete_branch=Delete Branch
pulls.delete_branch_has_new_commits=Branch cannot be deleted because it has new commits after mergence.
pulls.delete_branch=Usuń gałąź
pulls.delete_branch_has_new_commits=Gałęzi nie można usunąć ponieważ są nowe zmiany po scaleniu.
milestones.new=Nowy kamień milowy
milestones.open_tab=Otwarte %d
@@ -657,28 +688,29 @@ settings.collaboration.admin=Administrator
settings.collaboration.write=Zapis
settings.collaboration.read=Odczyt
settings.collaboration.undefined=Niezdefiniowany
settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.choose_a_branch=Choose a branch...
settings.branch_protection=Branch Protection
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
settings.protect_this_branch=Protect this branch
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
settings.protect_require_pull_request=Require pull request instead direct pushing
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.branches=Gałęzie
settings.branches_bare=Nie można zarządzać pustym repozytorium bare. Proszę wypchnąć najpierw dowolną zawartość.
settings.default_branch=Domyślna gałąź
settings.default_branch_desc=Domyślna gałąź jest uważana za podstawową gałąź dla wypychania zmian, pull requestów i edycji online.
settings.update=Aktualizuj
settings.update_default_branch_unsupported=Zmiana domyślnej gałęzi nie jest obsługiwana przez wersję Git na serwerze.
settings.update_default_branch_success=Domyślny gałąź repozytorium została pomyślnie zaktualizowana!
settings.protected_branches=Chronione gałęzie
settings.protected_branches_desc=Chroń gałąź z wymuszonego pchania, przypadkowych usunięć i białych listy z prawami zmian w kodzie.
settings.choose_a_branch=Wybierz gałąź...
settings.branch_protection=Ochrona gałęzi
settings.branch_protection_desc=Proszę wybrać opcje zabezpieczeń dla gałęzi <b>%s</b>.
settings.protect_this_branch=Chroń tą gałąź
settings.protect_this_branch_desc=Wyłącz wymuszanie wypchnięć zmian i zabroń usuwania.
settings.protect_require_pull_request=Wymagane utworzenie Pull Requesta zamiast bezpośredniego wypchnięcia
settings.protect_require_pull_request_desc=Włącz tę opcję aby wyłączyć bezpośrednie pchanie do tej gałęzi. Zmiany muszą być wypychane do innej niechronionej gałęzi i scalone z tą gałęzią, za pośrednictwem Pull Requesta.
settings.protect_whitelist_committers=Biała lista, kto może wypychać do tej gałęzi
settings.protect_whitelist_committers_desc=Dodaj osoby lub zespoły do białej listy wypychających, do tej gałęzi. Użytkownicy z białej listy nie będą czekać na zatwierdzenie pull requesta.
settings.protect_whitelist_users=Użytkownicy, którzy mogą popchnąć do tej gałęzi
settings.protect_whitelist_search_users=Szukaj użytkowników
settings.protect_whitelist_teams=Zespoły, których członkowie mogą popchnąć do tej gałęzi
settings.protect_whitelist_search_teams=Szukaj drużyn
settings.update_protect_branch_success=Opcje zabezpieczeń dla tej gałęzi zostały pomyślnie zaktualizowane!
settings.hooks=Webhooki
settings.githooks=Hooki Git
settings.basic_settings=Ustawienia podstawowe
@@ -691,24 +723,26 @@ settings.change_reponame_prompt=Zmiana nazwy repozytorium wpłynie na linki do n
settings.advanced_settings=Ustawienia zaawansowane
settings.wiki_desc=Włącz system wiki
settings.use_internal_wiki=Użyj wbudowanego wiki
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Umożliw publiczny dostęp do wiki, gdy repozytorium jest prywatne
settings.use_external_wiki=Użyj zewnętrznego Wiki
settings.external_wiki_url=Adres URL zewnętrznego Wiki
settings.external_wiki_url_desc=Odwiedzający zostaną przekierowani do adresu URL po kliknięciu zakładki.
settings.issues_desc=Włącz system zgłaszania problemów
settings.use_internal_issue_tracker=Użyj wbudowany lekki system zgłaszania problemów
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Umożliw publiczny dostęp do zagadnień, gdy repozytorium jest prywatne
settings.use_external_issue_tracker=Użyj zewnętrznego systemu zgłaszania problemów
settings.external_tracker_url=External Issue Tracker URL
settings.external_tracker_url_desc=Visitors will be redirected to URL when they click on the tab.
settings.external_tracker_url=URL zewnętrznego trackera zagadnień
settings.external_tracker_url_desc=Odwiedzający zostaną przekierowani do adresu URL po kliknięciu zakładki.
settings.tracker_url_format=Format dla adresu URL zewnętrznego systemu
settings.tracker_issue_style=Styl nazw zewnętrznego systemu zgłaszania problemów:
settings.tracker_issue_style.numeric=Numeryczny
settings.tracker_issue_style.alphanumeric=Alfanumeryczne
settings.tracker_url_format_desc=Symbole zastępcze <code>{user} {repo} {index}</code> mogą być użyte dla nazwy użytkownika, nazwy repozytorium i numeru problemu.
settings.pulls_desc=Włącz obsługę pull request, aby akceptować publiczny wkład
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Strefa niebezpieczeństwa
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.cannot_fork_to_same_owner=Nie można sforkować repozytorium do pierwotnego właściciela.
settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
settings.convert=Konwersja na repozytorium regularne
settings.convert_desc=Możesz przekonwertować ten mirror na repozytorium regularne. Ta czynność nie może być odwrócona.
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Webhook został pomyślnie usunięty!
settings.webhook.test_delivery=Testuj dostawę
settings.webhook.test_delivery_desc=Wyślij fałszywe zdarzenie push aby przetestować ustawienie webhooka
settings.webhook.test_delivery_success=Testowy webhook został dodany do kolejki dostawy. To może zająć kilka sekund, zanim to pojawia się w historii dostawy.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Redystrybucja
settings.webhook.redelivery_success=Zadanie '%s' zostało ponownie dodane do kolejki. Może upłynąć kilka sekund, aby zaktualizować jego status w historii.
settings.webhook.request=Żądanie
settings.webhook.response=Odpowiedź
settings.webhook.headers=Nagłówki
@@ -767,7 +801,7 @@ settings.add_webhook_desc=Wyślemy żądanie <code>POST</code> pod poniższy adr
settings.payload_url=URL do wywołania
settings.content_type=Typ zawartości
settings.secret=Sekret
settings.secret_desc=Secret will be sent as SHA256 HMAC hex digest of payload via <code>X-Gogs-Signature</code> header.
settings.secret_desc=Sekret zostanie wysłany jako SHA256 HMAC hex digest of payload z nagłówkiem <code>X-Gogs-Signature</code>.
settings.slack_username=Użytkownik
settings.slack_icon_url=Adres URL ikony
settings.slack_color=Kolor
@@ -777,20 +811,20 @@ 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=Utworzono gałąź lub tag
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_delete=Usuń
settings.event_delete_desc=Gałąź lub tag usunięty
settings.event_fork=Forkuj
settings.event_fork_desc=Repozytorium zforkowane
settings.event_push=Wypchnięcie
settings.event_push_desc=Wypchnięcie (push) do repozytorium Git
settings.event_issues=Issues
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues=Zagadnienia
settings.event_issues_desc=Zagadnienie otwarte, zamknięte, ponownie otwarte, wyedytowane, przypisane, nieprzypisane, etykieta uaktualniona, etykieta wyczyszczona, kamień milowy, kamień milowy usunięty.
settings.event_issue_comment=Komentarz zagadnienia
settings.event_issue_comment_desc=Komentarz zagadnienia utworzony, wyedytowany lub usunięty.
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Pull request otwarty, zamknięty, ponownie otwarty, edytowany, przypisany, nieprzypisany, etykieta zaktualizowana, etykieta wyczyszczona, kamień milowy, kamień milowy wyczyszczony; lub zsynchronizowany.
settings.event_release=Wydanie
settings.event_release_desc=Wydanie opublikowane w repozytorium.
settings.active=Aktywny
settings.active_helper=Dostarczymy szczegóły zdarzenia, gdy ten webhook zostanie wywołany.
settings.add_hook_success=Nowy webhook został dodany.
@@ -800,12 +834,13 @@ settings.delete_webhook=Usuń webhook
settings.recent_deliveries=Ostatnie wywołania
settings.hook_type=Typ hooka
settings.add_slack_hook_desc=Dodaj integrację ze <a href="%s">Slackiem</a> do Twojego repozytorium.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_discord_hook_desc=Dodaj integrację <a href="%s">Discord</a> do Twojego repozytorium.
settings.add_dingtalk_hook_desc=Dodaj integrację <a href="%s">Dingtalk</a> do Twojego repozytorium.
settings.slack_token=Token
settings.slack_domain=Domena
settings.slack_channel=Kanał
settings.deploy_keys=Klucze wdrożeniowe
settings.deploy_keys_helper=<b>Common Gotcha!</b> If you're looking for adding personal public keys, please add them in your <a href="%s%s">account settings</a>.
settings.deploy_keys_helper=<b>TIP!</b> Jeśli szukasz dodawanie osobistych kluczy publicznych, dodaj je proszę w <a href="%s%s">ustawieniach konta</a>.
settings.add_deploy_key=Dodaj klucz wdrożenia
settings.deploy_key_desc=Klucze wdrożenia pozwalają na dostęp tylko do odczytu. To nie to samo co klucze SSH dla konta osobistego.
settings.no_deploy_keys=Nie dodałeś żadnego klucza wdrożenia.
@@ -883,7 +918,7 @@ 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.
form.team_name_reserved=Team name '%s' is reserved.
form.team_name_reserved=Nazwa zespołu '%s' jest zarezerwowana.
settings=Ustawienia
settings.options=Opcje
@@ -974,8 +1009,8 @@ 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_hooks=Resync pre-receive, update and post-receive hooks of all repositories
dashboard.resync_all_hooks_success=All repositories' pre-receive, update and post-receive hooks have been resynced successfully.
dashboard.resync_all_hooks=Ponowa synchronizacja wpływa na wypychanie, aktualizowanie i odbieranie zmian we wszystkich repozytoriach
dashboard.resync_all_hooks_success=Ponowa synchronizacja została wykonana pomyślnie we wszystkich repozytoriach.
dashboard.reinit_missing_repos=Ponownie inicjalizuj wszystkie repozytoria, które straciły pliki Git
dashboard.reinit_missing_repos_success=Wszystkie repozytoria, które straciły pliki Git, zostały ponownie zainicjować pomyślnie.
@@ -1050,7 +1085,7 @@ repos.private=Prywatne
repos.watches=Obserwujących
repos.stars=Polubienia
repos.issues=Problemy
repos.size=Size
repos.size=Rozmiar
auths.auth_manage_panel=Panel zarządzania uwierzytelnianiem
auths.new=Dodaj nowe źródło
@@ -1065,6 +1100,7 @@ auths.domain=Domena
auths.host=Host
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Hasło Bind
auths.bind_password_helper=Ostrzeżenie: To hasło jest przechowywane w postaci zwykłego tekstu. Nie należy używać wysoko uprzywilejowanego konta.
auths.user_base=Baza wyszukiwania
@@ -1074,6 +1110,11 @@ auths.attribute_username_placeholder=Zostaw puste aby użyć wartości podanej p
auths.attribute_name=Atrybut imienia
auths.attribute_surname=Atrybut nazwiska
auths.attribute_mail=Atrybut e-mail
auths.verify_group_membership=Sprawdź członkostwo w grupie
auths.group_search_base_dn=Grupa wyszukiwania Base DN
auths.group_filter=Filtr grupy
auths.group_attribute_contain_user_list=Atrybut grupy zawierający listę użytkowników
auths.user_attribute_listed_in_group=Atrybut użytkownika wymieniony w grupie
auths.attributes_in_bind=Pobierz atrybuty w kontekście Bind DN
auths.filter=Filtr użytkownika
auths.admin_filter=Filtr administratora
@@ -1098,8 +1139,9 @@ auths.delete_auth_title=Usunięcie uwierzytelnienia
auths.delete_auth_desc=To uwierzytelnienie zostanie usunięte, czy chcesz kontynuować?
auths.still_in_used=Ten rodzaj autentykacji jest wciąż wykorzystywany przez niektórych użytkowników. Usuń lub przekonwertuj użytkowników, aby wykorzystywali inny typ logowania.
auths.deletion_success=Uwierzytelnienie zostało usunięte pomyślnie!
auths.login_source_exist=Login source '%s' already exists.
auths.login_source_exist=Login '%s' już istnieje.
config.not_set=(not set)
config.server_config=Konfiguracja serwera
config.app_name=Nazwa aplikacji
config.app_ver=Wersja aplikacji
@@ -1109,7 +1151,7 @@ config.offline_mode=Tryb offline
config.disable_router_log=Wyłącz dziennik routera
config.run_user=Użytkownik uruchomieniowy
config.run_mode=Tryb uruchamienia
config.git_version=Git Version
config.git_version=Wersja Git
config.static_file_root_path=Ścieżka plików statycznych
config.log_file_root_path=Ścieżka plików dziennika
config.reverse_auth_user=Użytkownik dostarczony przez odwrotne proxy
@@ -1126,15 +1168,18 @@ config.ssh_keygen_path=Ścieżka generatora ('ssh-keygen')
config.ssh_minimum_key_size_check=Sprawdzanie minimalnej długości klucza
config.ssh_minimum_key_sizes=Minimalne rozmiary kluczy
config.repo_config=Repository Configuration
config.repo_config=Konfiguracja repozytorium
config.repo_root_path=Ścieżka repozytoriów
config.script_type=Typ skryptu
config.repo_force_private=Force Private
config.max_creation_limit=Max Creation Limit
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.repo_force_private=Forsuj tryb prywatny
config.max_creation_limit=Maksymalny limit utworzeń
config.preferred_licenses=Preferowane licencje
config.disable_http_git=Wyłącz HTTP Git
config.enable_local_path_migration=Włącz lokalną ścieżkę migracji
config.commits_fetch_concurrency=Pobieraj zmiany w trybie równoległym
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Konfiguracja bazy danych
config.db_type=Typ
@@ -1193,7 +1238,7 @@ 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.enable_federated_avatar=Enable Federated Avatars
config.enable_federated_avatar=Włącz zewnętrzne avatary
config.git_config=Konfiguracja Git
config.git_disable_diff_highlight=Wyłączyć wyróżnianie składni diff
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Limit czasu dla operacji pull
config.git_gc_timeout=Limit czasu odśmiecania pamięci
config.log_config=Konfiguracja dziennika
config.log_mode=Mode
config.log_options=Options
config.log_mode=Tryb
config.log_options=Ustawienia
monitor.cron=Zadania cron
monitor.name=Nazwa
@@ -1238,7 +1283,7 @@ notices.delete_success=Powiadomienia systemowe zostały pomyślnie usunięte.
[action]
create_repo=tworzy repozytorium <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=rozwidlone repozytorium do <a href="%s"> %s</a>
rename_repo=zmienia nazwę repozytorium <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
commit_repo=wypycha do <a href="%[1]s/src/%[2]s">%[3]s</a> w <a href="%[1]s">%[4]s</a>
compare_commits=Zobacz porównanie tych %d commitów
@@ -1251,10 +1296,10 @@ create_pull_request=`tworzy pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`zamknięcie pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`ponowne otwarcie pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`scala pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=stworzył nową gałąź <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=usunął gałąź <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
push_tag=taguje <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=usunięty tag <code>%[2]s</code> % <a href="%[1]s">[3]s</a>
[tool]
ago=temu

View File

@@ -1,7 +1,7 @@
app_desc=Um serviço de Git hospedável e amigável escrito em Go
app_desc=Um serviço de Git auto-hospedado e amigável escrito em Go
home=Página inicial
dashboard=Página Inicial
dashboard=Painel de controle
explore=Explorar
help=Ajuda
sign_in=Entrar
@@ -11,11 +11,11 @@ register=Registrar
website=Site
version=Versão
page=Página
template=Template
template=Modelo
language=Idioma
create_new=Criar...
user_profile_and_more=Perfil do usuário e configurações
signed_in_as=Logado como
user_profile_and_more=Perfil do usuário e mais
signed_in_as=Entrou como
username=Usuário
email=E-mail
@@ -48,7 +48,7 @@ cancel=Cancelar
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 requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=O Gogs requer MySQL, PostgreSQL, SQLite3, MSSQL ou TiDB.
db_title=Configurações de banco de dados
db_type=Tipo de banco de dados
host=Host
@@ -58,8 +58,8 @@ 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=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Caminho para o arquivo de banco de dados SQLite3. <br>Use o caminho absoluto ao iniciar como serviço.
err_empty_db_path=Deve haver um caminho para o banco de dados SQLite3.
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.
@@ -74,16 +74,16 @@ domain=Domínio
domain_helper=Isto afeta URLs para o clone 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.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Usar o servidor SSH embutido
use_builtin_ssh_server_popup=Iniciar o servidor SSH embutido para operações Git, para diferenciar do serviço SSH do sistema.
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 clone via HTTP/HTTPs e também o e-mail.
log_root_path=Caminho do log
log_root_path_helper=Pasta dos arquivos de log.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Ativar o modo de console
enable_console_mode_popup=Além do modo de arquivo, exibir registros (log) no console.
optional_title=Configurações opcionais
email_title=Configurações do serviço de e-mail
@@ -119,6 +119,7 @@ sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o downlo
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
smtp_host_missing_port=O endereço do host SMTP não possui porta.
invalid_smtp_from=O SMTP do campo não é válido: %v
save_config_failed=Falha ao salvar a configuração: %v
invalid_admin_setting=Configuração da conta de administrador está inválida: %v
@@ -168,6 +169,14 @@ reset_password_helper=Clique aqui para redefinir sua senha
password_too_short=O comprimento da senha não pode ser menor que 6.
non_local_account=Não é possível mudar a senha de contas remotas pelo Gogs.
login_two_factor=Autenticação de dois fatores
login_two_factor_passcode=Senha de Autenticação
login_two_factor_enter_recovery_code=Insira um código de recuperação
login_two_factor_recovery=Recuperação de autenticação
login_two_factor_recovery_code=Código de Recuperação
login_two_factor_enter_passcode=Insira uma senha p/ autenticação
login_two_factor_invalid_recovery_code=O código de recuperação já foi usado ou é inválido.
[mail]
activate_account=Por favor, ative sua conta
activate_email=Verifique seu endereço de e-mail
@@ -203,7 +212,7 @@ Content=Conteúdo
require_error=` não pode estar vazio.`
alpha_dash_error=` devem ser caracteres alfanuméricos, hífen (-) ou sublinhado (_).`
alpha_dash_dot_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` apenas alfanuméricos e pontuações (hifens, pontos e barras).`
size_error=`deve ser do tamanho %s.`
min_size_error=` deve conter pelo menos %s caracteres.`
max_size_error=` deve conter no máximo %s caracteres.`
@@ -255,12 +264,11 @@ profile=Perfil
password=Senha
avatar=Avatar
ssh_keys=Chaves SSH
social=Contas sociais
applications=Aplicativos
security=Segurança
repos=Repositórios
orgs=Organizações
repos=Repositories
applications=Aplicativos
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.
@@ -326,10 +334,30 @@ 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.
two_factor=Autenticação de dois fatores
two_factor_status=Estado:
two_factor_on=Ativado
two_factor_off=Desativado
two_factor_enable=Ativar
two_factor_disable=Desativar
two_factor_view_recovery_codes=Consulte e salve <a href="%s%s">seus códigos de recuperação</a> num local seguro. Você poderá usá-los como senha se perder acesso ao seu aplicativo de autenticação.
two_factor_http=Para operações em HTTP/HTTPS, você não poderá mais usar seu nome de usuário e senha. Crie e use um <a href="%[1]s%[2]s">Token de Acesso Pessoal</a> como credencial (p. ex.: <code>%[3]%</code>).
two_factor_enable_title=Ativar autenticação de dois fatores
two_factor_scan_qr=Use o seu aplicativo de autenticação para escanear a imagem:
two_factor_or_enter_secret=Ou informe o segredo:
two_factor_then_enter_passcode=Em seguida digite a senha:
two_factor_verify=Verificar
two_factor_invalid_passcode=A senha inserida é inválida. Tente novamente!
two_factor_enable_error=Falha ao ativar a autenticação de dois fatores: %v
two_factor_enable_success=A autenticação de dois fatores foi ativada para a sua conta com sucesso!
two_factor_recovery_codes_title=Códigos de recup. p/ autenticação de dois fatores
two_factor_recovery_codes_desc=Os códigos de recuperação são usados se você perder acesso ao seu aplicativo de autenticação. Cada código pode ser usado apenas uma vez. <b>Salve-os num lugar seguro.</b>
two_factor_regenerate_recovery_codes=Gerar códigos de recuperação
two_factor_regenerate_recovery_codes_error=Falha ao gerar códigos de recuperação: %v
two_factor_regenerate_recovery_codes_success=Novos códigos de recuperação gerados com sucesso!
two_factor_disable_title=Desativar a autenticação de dois fatores
two_factor_disable_desc=O nível de segurança da sua conta diminuirá após desativar a autenticação de dois fatores. Deseja mesmo continuar?
two_factor_disable_success=A autenticação de dois fatores foi desativada com sucesso!
manage_access_token=Gerenciar tokens de acesso pessoal
generate_new_token=Gerar novo token
@@ -347,10 +375,10 @@ orgs.none=Você não é participante de nenhuma organização.
orgs.leave_title=Deixar uma organização
orgs.leave_desc=Você perderá acesso a todos os repositórios e equipes após deixar a organização. Deseja continuar?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Sair
repos.leave_title=Sair do repositório
repos.leave_desc=Você irá perder acesso ao repositório após sair. Deseja continuar?
repos.leave_success=Você saiu do repositório “%s” com sucesso!
delete_account=Deletar sua conta
delete_prompt=A operação deletará sua conta permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
@@ -422,7 +450,7 @@ 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
bare_message=This repository does not have any content yet.
bare_message=Este repositório ainda não possui conteúdo.
files=Arquivos
branch=Branch
@@ -444,12 +472,12 @@ file_permalink=Link permanente
file_too_large=Este arquivo é muito grande para ser exibido
video_not_supported_in_browser=Seu navegador não suporta a tag de vídeo do HTML5.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Visão geral
branches.active_branches=Branches ativos
branches.stale_branches=Branches obsoletos
branches.all=Todos os branches
branches.updated_by=Atualizado %[1]s por %[2]s
branches.change_default_branch=Modificar branch padrão
editor.new_file=Novo arquivo
editor.upload_file=Enviar arquivo
@@ -490,7 +518,7 @@ editor.add_subdir=Adicionar o subdiretório...
editor.unable_to_upload_files=Houve erro ao fazer upload de arquivos para '%s': %v
editor.upload_files_to_dir=Enviar arquivos para '%s'
commits.commit_history=Commit History
commits.commit_history=Histórico de commits
commits.commits=Commits
commits.search=Pesquisar commits
commits.find=Buscar
@@ -588,6 +616,7 @@ pulls.compare_compare=comparar
pulls.filter_branch=Filtrar branch
pulls.no_results=Nada encontrado.
pulls.nothing_to_compare=Não há nada para comparar porque o branch base e o head estão iguais.
pulls.nothing_merge_base=Não há o que comparar pois os dois branches possuem históricos completamente diferentes.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=A verificação do conflito ainda está em progresso, por favo
pulls.can_auto_merge_desc=O merge deste Pull Pequest pode ser aplicado automaticamente.
pulls.cannot_auto_merge_desc=O merge deste Pull Request não pode ser aplicado automaticamente pois há conflitos.
pulls.cannot_auto_merge_helper=Por favor, aplique o merge manualmente para resolver os conflitos.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Solicitação de merge de Pull Request
pulls.open_unmerged_pull_exists=`Você não pode executar a operação de reabrir porque já existe um Pull request aberto (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.`
pulls.delete_branch=Excluir Branch
@@ -658,27 +689,28 @@ settings.collaboration.write=Escrita
settings.collaboration.read=Leitura
settings.collaboration.undefined=Indefinido
settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.branches_bare=Não é possível gerenciar branches num repositório vazio. Adicione conteúdo primeiro.
settings.default_branch=Branch padrão
settings.default_branch_desc=O branch padrão é considerado branch "base" para commits, pull requests e edição on-line.
settings.update=Atualizar
settings.update_default_branch_unsupported=Mudar o branch padrão não é suportado pela versão do Git no servidor.
settings.update_default_branch_success=O branch padrão deste repositório foi atualizado com sucesso!
settings.protected_branches=Branches protegidos
settings.protected_branches_desc=Proteger branches de push forçado, remoção acidental e committers da lista branca.
settings.choose_a_branch=Selecione um branch...
settings.branch_protection=Proteção de Branch
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
settings.protect_this_branch=Protect this branch
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
settings.protect_require_pull_request=Require pull request instead direct pushing
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.branch_protection_desc=Escolha opções de proteção para o branch <b>%s</b>.
settings.protect_this_branch=Proteger este branch
settings.protect_this_branch_desc=Desabilita pushes forçados e previne remoção.
settings.protect_require_pull_request=Requer pull request ao invés de push direto
settings.protect_require_pull_request_desc=Habilite esta opção para desabilitar push direto para este branch. Os commits precisam sofrer um push para outro branch não protegido e merge para este branch por meio de um pull request.
settings.protect_whitelist_committers=Incluir na lista branca quem pode fazer push para este branch
settings.protect_whitelist_committers_desc=Adicionar pessoas ou equipes para a lista branca de push direto para este branch. Usuários na lista branca contornarão a verificação de necessidade de pull request.
settings.protect_whitelist_users=Usuários que podem realizar push para este branch
settings.protect_whitelist_search_users=Pesquisar usuários
settings.protect_whitelist_teams=Equipes cujos membros podem realizar push para este branch
settings.protect_whitelist_search_teams=Buscar times
settings.update_protect_branch_success=As opções de proteção deste branch foram atualizadas com sucesso!
settings.hooks=Webhooks
settings.githooks=Hooks do Git
settings.basic_settings=Configurações básicas
@@ -691,13 +723,13 @@ settings.change_reponame_prompt=Esta mudança irá afetar os links para este rep
settings.advanced_settings=Configurações avançadas
settings.wiki_desc=Habilitar sistema de wiki
settings.use_internal_wiki=Usar wiki nativa
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Permitir acesso público à wiki quando o repositório for privado
settings.use_external_wiki=Usar wiki externa
settings.external_wiki_url=URL externa da wiki
settings.external_wiki_url_desc=Os visitantes serão redirecionados para a URL ao clicar na aba.
settings.issues_desc=Habilitar issue tracker
settings.use_internal_issue_tracker=Usar o issue tracker nativo
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Permitir acesso público a problemas quando o repositório for privado
settings.use_external_issue_tracker=Usar issue tracker externo
settings.external_tracker_url=URL do Issue Tracker Externo
settings.external_tracker_url_desc=Visitantes serão redirecionados ao URL quando clicarem na aba.
@@ -707,8 +739,10 @@ settings.tracker_issue_style.numeric=Numérico
settings.tracker_issue_style.alphanumeric=Alfanumérico
settings.tracker_url_format_desc=Você pode usar o espaço reservado <code>{user} {repo} {index}</code> para o nome do usuário, índice de nome e a questão do repositório.
settings.pulls_desc=Habilitar Pull Requests para aceitar contribuições públicas
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Zona de perigo
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.cannot_fork_to_same_owner=Não se pode realizar fork de um repositório para seu dono original.
settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
settings.convert=Converter para repositório tradicional
settings.convert_desc=Você pode converter este espelho em um repositório tradicional. Esta ação não pode ser revertida.
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Webhook deletado com sucesso!
settings.webhook.test_delivery=Entrega de teste
settings.webhook.test_delivery_desc=Enviar uma entrega de evento de Push falso para testar suas configurações de webhook
settings.webhook.test_delivery_success=O Webhook de teste foi adicionado para a fila de entrega. Pode demorar alguns segundos antes de ser exibido no histórico de entrega.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Re-entrega
settings.webhook.redelivery_success=A tarefa hook '%s' foi readicionada à fila de entrega. Pode demorar alguns segundos para a situação da entrega no histórico ser atualizada.
settings.webhook.request=Solicitação
settings.webhook.response=Resposta
settings.webhook.headers=Cabeçalhos
@@ -767,7 +801,7 @@ settings.add_webhook_desc=Enviaremos uma solicitação <code>POST</code> para o
settings.payload_url=URL de Payload
settings.content_type=Tipo de conteúdo
settings.secret=Secreto
settings.secret_desc=Secret will be sent as SHA256 HMAC hex digest of payload via <code>X-Gogs-Signature</code> header.
settings.secret_desc=O segredo será enviado como digest hexadecimal SHA256 HMAC do payload via cabeçalho <code>X-Gogs-Signature</code>.
settings.slack_username=Nome de usuário
settings.slack_icon_url=URL do ícone
settings.slack_color=Cor
@@ -777,20 +811,20 @@ 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_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_delete=Apagar
settings.event_delete_desc=Branch ou tag excluído
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_fork_desc=Feito fork do repositório
settings.event_push=Push
settings.event_push_desc=Git push para o repositório
settings.event_issues=Issues
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues=Problemas
settings.event_issues_desc=Problema aberto, fechado, reaberto, editado, atribuído, desatribuído, etiqueta atualizada, etiqueta limpa, milestone definido ou milestone indefinido.
settings.event_issue_comment=Comentário do Problema
settings.event_issue_comment_desc=Comentário do problema criado, editado ou excluído.
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Pull request aberto, fechado, reaberto, editado, atribuído, desatribuído, etiqueta atualizada, etiqueta limpa, milestone definido, milestone indefinido ou sincronizado.
settings.event_release=Lançamento
settings.event_release_desc=Lançamento publicado em um repositório.
settings.active=Ativo
settings.active_helper=Enviaremos detalhes do evento quando este hook for acionado.
settings.add_hook_success=Novos hooks de web foram adicionados.
@@ -800,12 +834,13 @@ settings.delete_webhook=Excluir Webhook
settings.recent_deliveries=Entregas Recentes
settings.hook_type=Tipo de Hook
settings.add_slack_hook_desc=Adicionar <a href="%s">Slack</a> de integração para o seu repositório.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_discord_hook_desc=Adicionar integração do <a href="%s">Discord</a> ao seu repositório.
settings.add_dingtalk_hook_desc=Adicionar integração do <a href="%s">Dingtalk</a> ao seu repositório.
settings.slack_token=Token
settings.slack_domain=Domínio
settings.slack_channel=Canal
settings.deploy_keys=Chaves de Deploy
settings.deploy_keys_helper=<b>Common Gotcha!</b> If you're looking for adding personal public keys, please add them in your <a href="%s%s">account settings</a>.
settings.deploy_keys_helper=<b>Pegadinha Comum!</b> Se estiver buscando adicionar chaves públicas pessoais, faça isto nas suas <a href="%s%s">configurações da conta</a>.
settings.add_deploy_key=Nova chave
settings.deploy_key_desc=Chave de Deploy só tem acesso somente leitura. Não é igual as chaves SSH de conta pessoal.
settings.no_deploy_keys=Você ainda não adicionou nenhuma chave de Deploy.
@@ -883,7 +918,7 @@ 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.
form.team_name_reserved=Team name '%s' is reserved.
form.team_name_reserved=O nome nome de equipe '%s' está reservado.
settings=Configurações
settings.options=Opções
@@ -974,8 +1009,8 @@ 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_hooks=Resync pre-receive, update and post-receive hooks of all repositories
dashboard.resync_all_hooks_success=All repositories' pre-receive, update and post-receive hooks have been resynced successfully.
dashboard.resync_all_hooks=Ressincronizar hooks pre-receive, update e post-receive de todos os repositórios
dashboard.resync_all_hooks_success=Os hooks pre-receive, update e post-receive de todos os repositórios foram ressincronizados com sucesso.
dashboard.reinit_missing_repos=Reinicializar todos os registros de repositório que perderam os arquivos do Git
dashboard.reinit_missing_repos_success=Todos os repositórios que perderam arquivos do Git foram reinicializados com sucesso.
@@ -1050,7 +1085,7 @@ repos.private=Privado
repos.watches=Observadores
repos.stars=Favoritos
repos.issues=Issues
repos.size=Size
repos.size=Tamanho
auths.auth_manage_panel=Painel de gerenciamento da autenticação
auths.new=Adicionar nova fonte
@@ -1065,15 +1100,21 @@ auths.domain=Domínio
auths.host=Host
auths.port=Porta
auths.bind_dn=Vincular DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
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_username=Atributo nome de usuário
auths.attribute_username_placeholder=Deixe vazio para usar o valor do campo de formulário de entrada de nome de usuário.
auths.attribute_name=Atributo primeiro nome
auths.attribute_name=Atributo do Nome
auths.attribute_surname=Atributo sobrenome
auths.attribute_mail=Atributo e-mail
auths.verify_group_membership=Verificar associação a grupo
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Filtro de Grupo
auths.group_attribute_contain_user_list=Atributo do grupo contendo a lista de usuários
auths.user_attribute_listed_in_group=Atributo do usuário listado no grupo
auths.attributes_in_bind=Buscar os atributos no contexto de Bind DN
auths.filter=Filtro de usuário
auths.admin_filter=Filtro de administrador
@@ -1100,6 +1141,7 @@ auths.still_in_used=Esta autenticação ainda é usada por alguns usuários. Por
auths.deletion_success=Autenticação excluída com sucesso!
auths.login_source_exist=A fonte de login '%s" já existe.
config.not_set=(not set)
config.server_config=Configuração do servidor
config.app_name=Nome do aplicativo
config.app_ver=Versão do aplicativo
@@ -1126,16 +1168,19 @@ config.ssh_keygen_path=Caminho do keygen ('ssh-keygen')
config.ssh_minimum_key_size_check=Verificar tamanho mínimo da chave
config.ssh_minimum_key_sizes=Tamanhos mínimos da chave
config.repo_config=Repository Configuration
config.repo_config=Configuração do Repositório
config.repo_root_path=Caminho raiz do repositório
config.script_type=Tipo de script
config.repo_force_private=Force Private
config.max_creation_limit=Max Creation Limit
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.repo_force_private=Forçar Privado
config.max_creation_limit=Limite de Criação
config.preferred_licenses=Licenças Preferidas
config.disable_http_git=Desabilitar Git por HTTP
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Configuração do banco de dados
config.db_type=Tipo
config.db_host=Host
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Timeout para operação de pull
config.git_gc_timeout=Timeout para execução do GC
config.log_config=Configuração de log
config.log_mode=Mode
config.log_options=Options
config.log_mode=Modo
config.log_options=Opções
monitor.cron=Tarefas cron
monitor.name=Nome
@@ -1238,7 +1283,7 @@ notices.delete_success=Avisos do sistema foram excluídos com sucesso.
[action]
create_repo=repositório criado <a href="%s"> %s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_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>
compare_commits=Ver comparação entre esses %d commits
@@ -1251,8 +1296,8 @@ create_pull_request=`criou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
close_pull_request=`fechou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`reabriu o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`mesclou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=criado novo branch <a href="%[1]s/src/%[2]s">%[3]s</a> em <a href="%[1]s">%[4]s</a>
delete_branch=excluído branch <code>%[2]s</code> em <a href="%[1]s">%[3]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>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>

View File

@@ -82,8 +82,8 @@ app_url=URL приложения
app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на адреса в электронной почте.
log_root_path=Путь к журналу
log_root_path_helper=Каталог для записи файлов журнала.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Включите режим консоли
enable_console_mode_popup=В дополнение к файловому режиму, выводить лог в консоль.
optional_title=Расширенные настройки
email_title=Настройки службы электронной почты
@@ -119,6 +119,7 @@ sqlite3_not_available=Ваша версия не поддерживает SQLite
invalid_db_setting=Настройки базы данных не правильные: %v
invalid_repo_path=Недопустимый путь к корню репозитория: %v
run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s
smtp_host_missing_port=Не указан порт в адресе хоста SMTP.
invalid_smtp_from=Поле SMTP From неправильное: %v
save_config_failed=Не удалось сохранить конфигурацию: %v
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
@@ -168,6 +169,14 @@ reset_password_helper=Нажмите здесь, чтобы сбросить с
password_too_short=Длина пароля не менее 6 символов.
non_local_account=Нелокальные аккаунты не могут изменить пароль через Gogs.
login_two_factor=Двухфакторная аутентификация
login_two_factor_passcode=Код проверки подлинности
login_two_factor_enter_recovery_code=Введите код двухфакторной аутентификации
login_two_factor_recovery=Двухфакторная аутентификация
login_two_factor_recovery_code=Код восстановления
login_two_factor_enter_passcode=Введите код двухфакторной аутентификации
login_two_factor_invalid_recovery_code=Код восстановления был использован или не действителен.
[mail]
activate_account=Пожалуйста активируйте свой аккаунт
activate_email=Подтвердите адрес своей электронной почты
@@ -203,7 +212,7 @@ Content=Содержимое
require_error=` не может быть пустым.`
alpha_dash_error=«должен быть допустимым символьным, числовым или dash(-_) значением.»
alpha_dash_dot_error=«должен быть допустимым символьным, числовым или dash(-_) символами, включая точку.»
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=«должен быть допустимым символьным, числовым или dash(-_) символами, включая точку или слэш.»
size_error=` должен быть размер %s.`
min_size_error=«должен содержать по крайней мере %s символов.»
max_size_error=` должен содержать максимум %s символов.`
@@ -255,12 +264,11 @@ profile=Профиль
password=Пароль
avatar=Аватар
ssh_keys=SSH ключи
social=Учетные записи в соцсетях
applications=Приложения
security=Безопасность
repos=Репозитории
orgs=Организации
repos=Repositories
applications=Приложения
delete=Удалить аккаунт
uid=UID
public_profile=Открытый профиль
profile_desc=Адрес вашей электронной почты является публичным и будет использован для любых уведомлений, связанных с аккаунтом, а также для любых действий, совершенных через сайт.
@@ -326,10 +334,30 @@ no_activity=Еще не применялся
key_state_desc=Этот ключ использовался за последние 7 дней
token_state_desc=Этот токен использовался за последние 7 дней
manage_social=Управление привязанными учетными записями в соцсетях
social_desc=Это список привязанных учетных записей в соцсетях. Удаляйте любые неизвестные вам привязки.
unbind=Отвязать
unbind_success=Социальная учетная запись отвязана.
two_factor=Двухфакторная аутентификация
two_factor_status=Статус:
two_factor_on=Включено
two_factor_off=Выключен
two_factor_enable=Включить
two_factor_disable=Выключить
two_factor_view_recovery_codes=Просмотрите и сохранените <a href="%s%s">коды вашего восстановления</a> в надежном месте. Вы можете использовать их в качестве пароля, если потеряете доступ к приложению.
two_factor_http=Для операций HTTP/HTTPS вы больше не сможете использовать просто имя пользователя и пароль. Пожалуйста, создайте и используйте для подписи ваших запросов <a href="%[1]s%[2]s">Персональный ключ доступа</a>, например, <code>%[3]s</code>.
two_factor_enable_title=Включить двухфакторную аутентификацию
two_factor_scan_qr=Пожалуйста, используйте приложения проверки подлинности для сканирования изображения:
two_factor_or_enter_secret=Или введите кодовое слово:
two_factor_then_enter_passcode=Затем введите пароль:
two_factor_verify=Проверить
two_factor_invalid_passcode=Введенные пароли не совпадают; пожалуйста, повторите попытку!
two_factor_enable_error=Ошибка активация двухфакторной аутентификации: %v
two_factor_enable_success=Двухфакторная аутентификация активирована для вашей учетной записи!
two_factor_recovery_codes_title=Коды восстановления для двухфакторная аутентификации
two_factor_recovery_codes_desc=Коды восстановления должны использоваться, когда у вас нет возможности использовать приложение аутентификации. Каждый код восстановления может быть использован один раз, <b>пожалуйста, держите эти коды в надежном месте</b>.
two_factor_regenerate_recovery_codes=Сгенерировать новые коды восстановления
two_factor_regenerate_recovery_codes_error=Ошибка создания новых кодов восстановления: %v
two_factor_regenerate_recovery_codes_success=Новые коды восстановления созданы!
two_factor_disable_title=Отключить двухфакторную аутентификацию
two_factor_disable_desc=Уровень безопасности вашего аккаунта понизится после отключения двухфакторной аутентификации. Вы хотите продолжить?
two_factor_disable_success=Двухфакторная аутентификация выключена!
manage_access_token=Управление Токенами Персонального Доступа
generate_new_token=Создать новый token
@@ -347,10 +375,10 @@ orgs.none=Вы не состоите ни в одной организации.
orgs.leave_title=Покинуть организацию
orgs.leave_desc=Вы потеряете доступ ко всем репозиториям и командам, как только покинете организацию. Вы хотите продолжить?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Выйти
repos.leave_title=Покинуть репозиторий
repos.leave_desc=Вы потеряете доступ к репозиторию, после того, как вы его покинете. Вы хотите продолжить?
repos.leave_success=Вы покинули репозиторий «%s» успешно!
delete_account=Удалить свой аккаунт
delete_prompt=Этим действием вы удалите свою учетную запись навсегда и <strong>НЕ СМОЖЕТЕ</strong> ее вернуть!
@@ -422,7 +450,7 @@ quick_guide=Краткое руководство
clone_this_repo=Клонировать репозиторий
create_new_repo_command=Создать новый репозиторий из командной строки
push_exist_repo=Отправить существующий репозиторий из командной строки
bare_message=This repository does not have any content yet.
bare_message=В репозитории еще нет файлов.
files=Файлы
branch=Ветка
@@ -448,7 +476,7 @@ branches.overview=Обзор
branches.active_branches=Активные ветки
branches.stale_branches=Устаревшие ветки
branches.all=Все ветки
branches.updated_by=Updated %[1]s by %[2]s
branches.updated_by=Обновлено %[1]s %[2]s
branches.change_default_branch=Change Default Branch
editor.new_file=Новый файл
@@ -588,6 +616,7 @@ pulls.compare_compare=сравнить
pulls.filter_branch=Фильтр по ветке
pulls.no_results=Результатов не найдено.
pulls.nothing_to_compare=Нечего сравнивать, родительская и текущая ветка одинаковые.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=Продолжается проверка конфликтов
pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически.
pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически.
pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Слить пулл-реквест
pulls.open_unmerged_pull_exists=`Вы не можете снова открыть, поскольку уже существует запрос на слияние (#%d) из того же репозитория с той же информацией о слиянии и ожидающий слияния. `
pulls.delete_branch=Удалить ветку
@@ -658,10 +689,11 @@ settings.collaboration.write=Запись
settings.collaboration.read=Просмотр
settings.collaboration.undefined=Не определено
settings.branches=Ветки
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Вы не можете управлять ветками для пустого репозитория. Пожалуйста, сначала создайте что-нибудь.
settings.default_branch=Ветка по умолчанию
settings.default_branch_desc=Ветка по-умолчанию считается основной для коммитов, запросов на слияние и онлайн-редактирования.
settings.update=Обновить
settings.update_default_branch_unsupported=Изменение ветки по умолчанию не поддерживается в версии Git на сервере.
settings.update_default_branch_success=Ветка по умолчанию для этого репозитория была успешно изменена!
settings.protected_branches=Защищенные ветки
settings.protected_branches_desc=Защитить ветки от принудительного push, случайного удаления и разрешить изменения только коммитерам из белого списка.
@@ -691,13 +723,13 @@ settings.change_reponame_prompt=Это изменение повлияет на
settings.advanced_settings=Расширенные настройки
settings.wiki_desc=Включить систему Wiki
settings.use_internal_wiki=Использовать встроенную wiki
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Разрешить публичный доступ к wiki-разделу, если репозиторий приватный
settings.use_external_wiki=Использовать внешнюю Wiki
settings.external_wiki_url=URL-адрес внешней Вики
settings.external_wiki_url_desc=Посетители будут перенаправлены на URL-адрес, когда они кликнут по вкладке.
settings.issues_desc=Включить систему отслеживания ошибок
settings.use_internal_issue_tracker=Использовать встроенную легковесную систему отслеживания ошибок
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Разрешить публичный доступ к вопросам, если репозиторий приватный
settings.use_external_issue_tracker=Использовать внешнюю систему отслеживания ошибок
settings.external_tracker_url=URL внешней системы отслеживания ошибок
settings.external_tracker_url_desc=Посетители будут перенаправлены на URL когда они нажмут на вкладку.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Цифровой
settings.tracker_issue_style.alphanumeric=Буквенноцифровой
settings.tracker_url_format_desc=Вы можете использовать шаблон <code>{user} {repo} {index}</code> для имени пользователя, репозитория и номера задачи.
settings.pulls_desc=Включить публичные запросы на слияние
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Опасная зона
settings.cannot_fork_to_same_owner=Вы не можете ответвить репозиторий его же владельцу.
settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием.
@@ -751,8 +785,8 @@ settings.webhook_deletion_success=Веб-хук успешно удален!
settings.webhook.test_delivery=Проверить доставку
settings.webhook.test_delivery_desc=Отправить push для тестирования настройки веб-хуков
settings.webhook.test_delivery_success=Тест веб-хука была добавлен в очередь доставки. Это может занять несколько секунд, прежде чем он отобразится в истории доставки.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery=Повторная доставка
settings.webhook.redelivery_success=Хук задачи «%s» было отправлен в очередь доставки. Обновление статуса в истории может занять некоторое время.
settings.webhook.request=Запрос
settings.webhook.response=Ответ
settings.webhook.headers=Заголовки
@@ -780,15 +814,15 @@ settings.event_create_desc=Ветка или тэг созданы
settings.event_delete=Удалить
settings.event_delete_desc=Ветка или метка удалена
settings.event_fork=Ответвить
settings.event_fork_desc=Repository forked
settings.event_fork_desc=Репозиторий склонирован
settings.event_push=Push
settings.event_push_desc=Push в репозиторий
settings.event_issues=Вопросы
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues_desc=Задача изменена
settings.event_issue_comment=Комментарии в задаче
settings.event_issue_comment_desc=Комментарий создан, изменен или удален.
settings.event_pull_request=Запросы на слияние
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_pull_request_desc=Запрос слияния открыт, закрыт, переоткрыт, изменён, назначен, снят, метка обновлена, метка убрана, добавлен промежуточный этап, убран промежуточный этап или синхронизирован.
settings.event_release=Релиз
settings.event_release_desc=Релиз опубликован в репозитории.
settings.active=Активен
@@ -801,6 +835,7 @@ settings.recent_deliveries=Недавние рассылки
settings.hook_type=Тип перехватчика
settings.add_slack_hook_desc=Добавить интеграцию с <a href="%s">Slack</a> в ваш репозиторий.
settings.add_discord_hook_desc=Добавить интеграцию с <a href="%s">Discord</a> в ваш репозиторий.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Token
settings.slack_domain=Домен
settings.slack_channel=Канал
@@ -1065,15 +1100,21 @@ auths.domain=Домен
auths.host=Хост
auths.port=Порт
auths.bind_dn=Привязать DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Привязать пароль
auths.bind_password_helper=Внимание: Этот пароль сохранен в небезопасном виде. Не используйте высоко-привилегированную учетную запись.
auths.user_base=База для поиска пользователя
auths.user_dn=DN пользователя
auths.attribute_username=Атрибут username
auths.attribute_username_placeholder=Оставьте пустым, чтобы использовать имя пользователя для регистрации.
auths.attribute_name=Имя аттрибута
auths.attribute_name=First Name Attribute
auths.attribute_surname=Фамилия аттрибута
auths.attribute_mail=Электронная почта аттрибута
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Base DN для поиска группы
auths.group_filter=Групповой фильтр
auths.group_attribute_contain_user_list=Атрибут группы, содержащий список пользователей
auths.user_attribute_listed_in_group=Пользовательский атрибут, перечисленный в группе
auths.attributes_in_bind=Извлечение атрибутов в виде Bind DN
auths.filter=Фильтр пользователя
auths.admin_filter=Фильтр администратора
@@ -1100,6 +1141,7 @@ auths.still_in_used=Эта проверка подлинности до сих
auths.deletion_success=Канал аутентификации успешно удален!
auths.login_source_exist=Источник входа '%s' уже существует.
config.not_set=(not set)
config.server_config=Конфигурация сервера
config.app_name=Имя приложения
config.app_ver=Версия приложения
@@ -1136,6 +1178,9 @@ config.disable_http_git=Выключить HTTP Git
config.enable_local_path_migration=Включить миграцию с локального пути
config.commits_fetch_concurrency=Параллельность получения коммитов
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Конфигурация базы данных
config.db_type=Тип
config.db_host=Хост
@@ -1238,7 +1283,7 @@ notices.delete_success=Системное уведомление успешно
[action]
create_repo=создал(а) репозиторий <a href="%s"> %s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_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>
compare_commits=Просмотр сравнение для этих %d коммитов
@@ -1251,10 +1296,10 @@ create_pull_request=`создал запрос на слияние <a href="%s/p
close_pull_request=`закрыл запрос на слияние <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`открыл снова запрос на слияние <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`слил пул реквест <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=создать новую ветку <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=удален бранч <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
push_tag=запушил(а) метку <a href="%s/src/%s">%[2]s</a> в <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=удален тег <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
[tool]
ago=назад

1330
conf/locale/locale_sk-SK.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@ home=Почетна
dashboard=Контролни панел
explore=Преглед
help=Помоћ
sign_in=Пријавите Се
sign_in=Пријавите се
sign_out=Одјава
sign_up=Регистрација
register=Регистрација
@@ -48,18 +48,18 @@ cancel=Откажи
install=Инсталација
title=Инсталационе кораке за првог покретања
docker_helper=Ако покрећете Gogs унутар Docker, молимо прочитајте <a target="_blank" href="%s">ове савете</a> пажљиво пре него што сте било шта променили на овој страници!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs захтева MySQL, PostgreSQL, SQLite3, MSSQL или TiDB.
db_title=Подешавања базе
db_type=Тип базе података
host=Хост
host=Власник
user=Корисник
password=Лозинка
db_name=Име базе података
db_name=Назив базе података
db_helper=За MySQL користите тип табела InnoDB са кодирањем utf8_general_ci.
ssl_mode=Режим SSL
path=Пут
sqlite_helper=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Пут датотеке за базу података SQLite3. <br>Молимо користите апсолутни пут када покренете као сервис.
err_empty_db_path=Пут базе података SQLite3 не може да буде празан.
no_admin_and_disable_registration=Ви не можете онемогућити регистрацију до стварања налог администратора.
err_empty_admin_password=Лозинка администратора не може бити празна.
@@ -74,16 +74,16 @@ domain=Домен
domain_helper=Утиче на URL адресе клониране преко SSH.
ssh_port=SSH порт
ssh_port_helper=Број порта који користи SSH сервер. Оставите празно да бисте онемогућили SSH.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
use_builtin_ssh_server=Користите уграђени SSH Сервер
use_builtin_ssh_server_popup=Покрени уграђени SSH сервер за Git операције да их разликовати од система SSH daemon.
http_port=Порт HTTP
http_port_helper=Број порта преко којој ће апликација слушати.
app_url=URL адреса апликације
app_url_helper=Ова поставка утиче на URL за клонирање преко HTTP/HTTPS протокола и на адресама е-поште.
log_root_path=Пут до журнала
log_root_path_helper=Директоријум где ће бити снимане датотеке журнала.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Омогући конзол начин
enable_console_mode_popup=Поред начин датотеке, пошаљи системске извештаје и конзолу.
optional_title=Напредна подешавања
email_title=Подешавања сервиса е-поште
@@ -119,7 +119,8 @@ sqlite3_not_available=Ваша верзија не подржава SQLite3, м
invalid_db_setting=Подешавања базе података су неправилна: %v
invalid_repo_path=Пут до корена спремишта не неправилно: %v
run_user_not_match=Тренутни корисник није корисник за покретање: %s -> %s
invalid_smtp_from=SMTP From field is not valid: %v
smtp_host_missing_port=У адресу SMTP сервера недостаје порт.
invalid_smtp_from=Поље SMTP From није важећи: %v
save_config_failed=Није могуће сачувати конфигурацију: %v
invalid_admin_setting=Подешавањна администратора су неправилна: %v
install_success=Добродошли! Ми смо срећни што сте изабрали Gogs.
@@ -141,7 +142,7 @@ issues.in_your_repos=У вашим спремиштима
[explore]
repos=Спремишта
users=Корисници
organizations=Organizations
organizations=Организације
search=Претрага
[auth]
@@ -168,6 +169,14 @@ reset_password_helper=Кликните овде да ресетујете ваш
password_too_short=Лозинка неможе бити краћа од 6 карактера.
non_local_account=Нелокални налози не могу да промените лозинку преко Gogs.
login_two_factor=Двострука аутентификација
login_two_factor_passcode=Шифра аутентификације
login_two_factor_enter_recovery_code=Унеси двоструку шифру за опоравак
login_two_factor_recovery=Двоструки опоравак
login_two_factor_recovery_code=Шифра за опоравак
login_two_factor_enter_passcode=Унеси двоструку шифру
login_two_factor_invalid_recovery_code=Шифра за опоравак је већ била коришћена или није више важећа.
[mail]
activate_account=Молимо вас активирајте ваш налог
activate_email=Потврдите вашу адресу е-поште
@@ -187,7 +196,7 @@ Email=Адреса ел. поште
Password=Лозинка
Retype=Поновите лозинку
SSHTitle=Име SSH кључа
HttpsUrl=HTTPS URL адреса
HttpsUrl=HTTPS URL
PayloadUrl=URL адреса за слање
TeamName=Име тима
AuthName=Ауторизацијско име
@@ -203,7 +212,7 @@ Content=Садржај
require_error=` не може бити празно.`
alpha_dash_error=` мора се састојати словима, бројевима или dash(-_) карактера.`
alpha_dash_dot_error=` мора се састојати словима, бројевима, dash(-_) карактера, или тачком.`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` мора да буде слово, број, црта или тачка.`
size_error=` мора бити величине %s.`
min_size_error=` мора да садржи најмање %s карактера.`
max_size_error=` мора да садржи највише %s карактера.`
@@ -255,17 +264,16 @@ profile=Профил
password=Лозинка
avatar=Аватар
ssh_keys=SSH Кључеви
social=Налози на друштвеним мрежама
applications=Апликације
security=Безбедност
repos=Спремишта
orgs=Организације
repos=Repositories
delete=Уклоните налог
uid=Uid
applications=Апликације
delete=Уклоните Hалог
public_profile=Јавни профил
profile_desc=Ваша адреса е-поште је јавна и коришће се за све обавести везане са налогом, као и друге операције почињене кроз Gogs.
password_username_disabled=Нелокални корисници не могу да промене своје кориничко име.
full_name=Име и презиме
full_name=Пуно Име
website=Веб страница
location=Локација
update_profile=Ажурирај профил
@@ -292,7 +300,7 @@ password_incorrect=Тренутна лозинка је нетачна.
change_password_success=Лозинка је успешно промењена. Можете се пријавити са новом лозинком.
password_change_disabled=Нелокални корисници не могу да промене своје лозинке.
emails=Адреса ел. поште
emails=Адреса е-поште
manage_emails=Управљање адресама е-поште
email_desc=Ваша главна адреса ће се користити за обавештења и других операција.
primary=Главно
@@ -326,10 +334,30 @@ no_activity=Нема недавних активности
key_state_desc=Овај кључ је коришћен у задњих 7 дана
token_state_desc=Токен је коришћен у задњих 7 дана
manage_social=Управљање прикључених друштвеним мрежама
social_desc=Ово је списак повезаних друштвених мрежа. Уклоните све непознате.
unbind=Обвежи
unbind_success=Друштвена мрежа је обвежена.
two_factor=Двострука аутентификација
two_factor_status=Стање:
two_factor_on=Укључено
two_factor_off=Искључено
two_factor_enable=Омогући
two_factor_disable=Онемогући
two_factor_view_recovery_codes=Гледајте и сачувајте <a href="%s%s">ваше шифре за опоравак</a> на сигурном месту. Можете да их користите у случају да изгубите приступ до апликације за аутентификацију.
two_factor_http=За HTTP/HTTPS операције, нећете виће моћи да користите корисничко име и лозинку. Молим вас да креирате и користите <a href="%[1]s%[2]s"> лични приступни токен</a> као ваш акредитив, на пример <code>%[3]s</code>.
two_factor_enable_title=Омогући двострука аутентификација
two_factor_scan_qr=Молим вас користите вашу апликацију за аутентификацију за скенирање слику:
two_factor_or_enter_secret=Или унесите тајну шифру:
two_factor_then_enter_passcode=Па унесите шифру:
two_factor_verify=Проверити
two_factor_invalid_passcode=Шифрa коју сте унели није важећа, молим бас пробајте поново!
two_factor_enable_error=Активација двоструке аутентификације није успела: %v
two_factor_enable_success=Двострука аутентификација је успешно активирана за ваш налог!
two_factor_recovery_codes_title=Шифра за опоравак за двоструку аутентификацију
two_factor_recovery_codes_desc=Шифре за опоравак требају када привремено изгубите приступ до апликације за аутентификацију. Свака шифра за опоравак може да се користи само једном, <b>молим вас да сачувате те шифре на сигурном месту</b>.
two_factor_regenerate_recovery_codes=Обновите шифре за опоравак
two_factor_regenerate_recovery_codes_error=Обнова шифри за опоравак није успела: %v
two_factor_regenerate_recovery_codes_success=Нове шифре за опоравак су успешно креиране!
two_factor_disable_title=Онемогући двоструку аутентификацију
two_factor_disable_desc=Ниво безбедности вашег налога биће ниже пошто сте онемогућили двоструку аутентификацију. Да ли желите да наставите?
two_factor_disable_success=Двострука аутентификација је успешно искључена!
manage_access_token=Управљање токенима особном приступу
generate_new_token=Генериши нови токен
@@ -343,14 +371,14 @@ access_token_deletion=Уклоњење токена личног приступ
access_token_deletion_desc=Уклоњење овог токена ће онемогућити сав приступ. Да ли желите да наставите?
delete_token_success=Лични токен је успешно избришен! Не заборавите да ажурирате апликацију.
orgs.none=You are not a member of any organizations.
orgs.leave_title=Leave organization
orgs.leave_desc=You will lose access to all repositories and teams after you left the organization. Do you want to continue?
orgs.none=Нисте члан било које организације.
orgs.leave_title=Напусти организацију
orgs.leave_desc=Изгубићете приступ до свих спремишта и тимова после одласка из организације. Да ли желите да наставите?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave_success=You have left repository '%s' successfully!
repos.leave=Изаћи
repos.leave_title=Напусти српемиште
repos.leave_desc=Изгубићете приступ до спремишта после одласка. Да ли желите да наставите?
repos.leave_success=Успешно сте напустили спремиште '%s'!
delete_account=Уклоните ваш налог
delete_prompt=Операција ће трајно избрисати ваш налог, што се <strong>НЕ може</strong> поввратити!
@@ -399,8 +427,8 @@ migrate_type=Тип миграције
migrate_type_helper=Ово спремиште ће бити <span class="text blue">огледало</span>
migrate_repo=Мигрирајте спремиште
migrate.clone_address=Адреса за клонирање
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL.
migrate.clone_address_desc_import_local=You're also allowed to migrate a repository by local server path.
migrate.clone_address_desc=Могуће је да буде једна HTTP/HTTPS/GIT адреса.
migrate.clone_address_desc_import_local=Можете и да мигрирате спремиште користећи пут на локалном серверу.
migrate.permission_denied=Немате права на увезете локално спремиште.
migrate.invalid_local_path=Невашећи локални пут. Можда не постоји или није директоријум.
migrate.failed=Миграција није успела: %v
@@ -422,9 +450,9 @@ quick_guide=Кратак водич
clone_this_repo=Клонирај спремиште
create_new_repo_command=Направите ново спремиште са командне линије
push_exist_repo=Push постојећe спремиште са командне линије
bare_message=This repository does not have any content yet.
bare_message=Ово спремиште не садржи још било који садржај.
files=Files
files=Датотеке
branch=Грана
tree=Дрво
filter_branch_and_tag=Профилтрирај по грани или ознаци
@@ -435,21 +463,21 @@ pulls=Захтеви за спајање
labels=Лабеле
milestones=Фазе
commits=Комити
git_branches=Branches
git_branches=Гране
releases=Издања
file_raw=Датотека
file_history=Историја
file_view_raw=Прегледај саму датотеку
file_permalink=Пермалинк
file_too_large=Ова датотека је превише веика да би се приказала
video_not_supported_in_browser=Your browser doesn't support HTML5 video tag.
video_not_supported_in_browser=Ваш прегледач не подржава HTML5 видео ознаке.
branches.overview=Overview
branches.active_branches=Active Branches
branches.stale_branches=Stale Branches
branches.all=All Branches
branches.updated_by=Updated %[1]s by %[2]s
branches.change_default_branch=Change Default Branch
branches.overview=Преглед
branches.active_branches=Активне гране
branches.stale_branches=Застареле гране
branches.all=Све гране
branches.updated_by=Ажуриран %[1]s од %[2]s
branches.change_default_branch=Промените подразумевану грану
editor.new_file=Нова датотека
editor.upload_file=Отпреми датотеку
@@ -479,7 +507,7 @@ editor.cancel=Откажи
editor.filename_cannot_be_empty=Име датотеке неможе бити празно.
editor.branch_already_exists=Грана '%s' већ постоји за ово спремиште.
editor.directory_is_a_file='%s' је већ постојећа датотека а не директоријум у спремишту.
editor.file_is_a_symlink=The file '%s' is a symlink that cannot be modified from the web editor.
editor.file_is_a_symlink=Датотека '%s' је једна симболична веза која се не може модификовати из веб-уредника.
editor.filename_is_a_directory='%s' је постојећи директоријум у спремишту.
editor.file_editing_no_longer_exists=Датотека '%s' више не постоји у спремишту.
editor.file_changed_while_editing=Садржај датотеке је промењен од почетка уређивања. <a target="_blank" href="%s">Кликните овде</a> да видите шта је промењено или <strong>опет поднесите комит</strong> да пребришете промене.
@@ -490,10 +518,10 @@ editor.add_subdir=Додај поддиректоријуми...
editor.unable_to_upload_files=Учитање датотеке '%s' није успело са грешкном: %v
editor.upload_files_to_dir=Пошаљи датотеке на '%s'
commits.commit_history=Commit History
commits.commit_history=Историја ревизија
commits.commits=Комити
commits.search=Претражи комите
commits.find=Претражи
commits.find=Пронађи
commits.author=Аутор
commits.message=Порука
commits.date=Датум
@@ -588,6 +616,7 @@ pulls.compare_compare=упореди
pulls.filter_branch=Филтер по грани
pulls.no_results=Нема резултата.
pulls.nothing_to_compare=Нема шта да се упореди, гране су исте.
pulls.nothing_merge_base=Немогуће је упоредити јер двије гране имају потпуно другачију историју.
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>
@@ -603,10 +632,12 @@ pulls.is_checking=Провера још увек у току, молимо ва
pulls.can_auto_merge_desc=Овај захтев за спајање може бити обављен аутоматски.
pulls.cannot_auto_merge_desc=Овај захтев за спајање не може бити обављен аутоматски због сукоба.
pulls.cannot_auto_merge_helper=Молимо вас, обавите спајање ручно да би сте разрешили сукобе.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Обави спајање
pulls.open_unmerged_pull_exists=`Неможете поново отворити јер већ постоји захтев за спајање (#%d) из истог спремишта са истим информацијама о спајању и чека спајање.`
pulls.delete_branch=Delete Branch
pulls.delete_branch_has_new_commits=Branch cannot be deleted because it has new commits after mergence.
pulls.delete_branch=Избришите грану
pulls.delete_branch_has_new_commits=Грана не може да буде избрисана због нових ревизија после уједињења.
milestones.new=Нова фаза
milestones.open_tab=%d отворено
@@ -657,28 +688,29 @@ settings.collaboration.admin=За администратора
settings.collaboration.write=За писање
settings.collaboration.read=Читање
settings.collaboration.undefined=Није дефинисано
settings.branches=Branches
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
settings.choose_a_branch=Choose a branch...
settings.branch_protection=Branch Protection
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
settings.protect_this_branch=Protect this branch
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
settings.protect_require_pull_request=Require pull request instead direct pushing
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
settings.protect_whitelist_committers=Whitelist who can push to this branch
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
settings.protect_whitelist_users=Users who can push to this branch
settings.protect_whitelist_search_users=Search users
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
settings.protect_whitelist_search_teams=Search teams
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
settings.branches=Гране
settings.branches_bare=Не можете да управљате гране за празно спремиште. Молим да прво ставите неке садржаје.
settings.default_branch=Подразумевана грана
settings.default_branch_desc=Подразумевана грана се сматра 'основим' граном за ревизије кода, пул захтеве и онлајн уређивање.
settings.update=Ажурирање
settings.update_default_branch_unsupported=Промена подразумеване гране није подржавана од стране Git верзија сервера.
settings.update_default_branch_success=Подразумевана грана овог спремишта је била успешно ажурирана!
settings.protected_branches=Заштићене гране
settings.protected_branches_desc=Заштита гранe од додира, случајног брисања и команди листе кода.
settings.choose_a_branch=Изаберите Филијалy...
settings.branch_protection=Заштита Филијала
settings.branch_protection_desc=Молимо изаберите заштитне опције за грану <b>%s</b>.
settings.protect_this_branch=Заштити ову филијалy
settings.protect_this_branch_desc=Онемогућите притисак и заштититy од брисања.
settings.protect_require_pull_request=Захтев за повлачењем уместо директног додира
settings.protect_require_pull_request_desc=Омогућите ову опцију да бисте спречили директан додир на ову грану. Обавезно мора бити покренуто у незаштићеној грани затим објединти на ову грану кao захтев за спајање.
settings.protect_whitelist_committers=Whitelist који може да додирне ову грану
settings.protect_whitelist_committers_desc=Додајте људе или тимовe у листу белих исправа за директан приступ овој теми. Корисници из беле листе ће заобићи захтев за повлачење захтева.
settings.protect_whitelist_users=Корисници који могу да додирнy ову грану
settings.protect_whitelist_search_users=Тражи кориснике
settings.protect_whitelist_teams=Тимови кao и њихови чланови могу потакнути овy грану
settings.protect_whitelist_search_teams=Тимови за претрагу
settings.update_protect_branch_success=Заштитна опција за ову грану је успешно ажурирана!
settings.hooks=Webhooks
settings.githooks=Git хуки
settings.basic_settings=Основна подешавања
@@ -691,24 +723,26 @@ settings.change_reponame_prompt=Ова промена ће утицати на
settings.advanced_settings=Напредна подешавања
settings.wiki_desc=Омогући систем вики
settings.use_internal_wiki=Користи уграђен вики
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
settings.allow_public_wiki_desc=Дозволите приступ wiki када је трговина приватна
settings.use_external_wiki=Користи спољни Вики
settings.external_wiki_url=URL адреса спољног Вики
settings.external_wiki_url_desc=Посетиоци ће бити преусмерени URL адреси након што кликну на картицу.
settings.issues_desc=Омогући систем праћења грешака
settings.use_internal_issue_tracker=Користи уграђен систем праћења грешака
settings.allow_public_issues_desc=Allow public access to issues when repository is private
settings.allow_public_issues_desc=Дозволите приступ проблемима када је трговина приватна
settings.use_external_issue_tracker=Користи спољни систем праћења грешака
settings.external_tracker_url=External Issue Tracker URL
settings.external_tracker_url_desc=Visitors will be redirected to URL when they click on the tab.
settings.external_tracker_url=Екстерни проблем Tracker URL
settings.external_tracker_url_desc=Посетиоци ће бити преусмерени на URL када кликну на картицу.
settings.tracker_url_format=Спољни формат везе система за праћење грешака
settings.tracker_issue_style=Стил именовања на спољном систему:
settings.tracker_issue_style.numeric=Нумерично
settings.tracker_issue_style.alphanumeric=Алфанумерично
settings.tracker_url_format_desc=Можете да користите шаблон <code>{user} {repo} {index}</code> за корисничко име, спремишта и задатака.
settings.pulls_desc=Омогући систем захтева за спајање да би сте преузели јавних доприноса
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Опасна зона
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.cannot_fork_to_same_owner=Не можете поделити спремиште власнику.
settings.new_owner_has_same_repo=Нови власник већ има спремиште по истим називом. Молимо вас изаберите друго име.
settings.convert=Претворити у обично спремиште
settings.convert_desc=Можете претворити огледало у обично спремиште, али та операција не може се укинути.
@@ -752,7 +786,7 @@ settings.webhook.test_delivery=Провери испоруку
settings.webhook.test_delivery_desc=Пошаљи push за тестирање подешавања webhook
settings.webhook.test_delivery_success=Тест webhook је додат у месту испоруке. Процес може да потраје неколико секунди пре него што ће показати у историји испоруке.
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.redelivery_success=Hook задатак '%s' је прочитан редоследом испоруке. Може потрајати неколико секунди да ce ажурира статус испоруке у историји.
settings.webhook.request=Захтев
settings.webhook.response=Одговор
settings.webhook.headers=Наслови
@@ -767,7 +801,7 @@ settings.add_webhook_desc=Послаћемо захтев <code>POST</code> на
settings.payload_url=URL адреса за слање
settings.content_type=Тип садржаја
settings.secret=Тајна
settings.secret_desc=Secret will be sent as SHA256 HMAC hex digest of payload via <code>X-Gogs-Signature</code> header.
settings.secret_desc=Тајна ће бити послата као SHA256 HMAC hex digest корисног оптерећења преко <code>X-Gogs-Signature</code> заглавља.
settings.slack_username=Корисничко име
settings.slack_icon_url=URL адреса иконице
settings.slack_color=Боја
@@ -777,20 +811,20 @@ settings.event_send_everything=У <strong>свим</strong> догађајима
settings.event_choose=Изабраћу шта ми је потребно.
settings.event_create=Креирај
settings.event_create_desc=Створена грана или ознака
settings.event_delete=Delete
settings.event_delete_desc=Branch or tag deleted
settings.event_fork=Fork
settings.event_fork_desc=Repository forked
settings.event_delete=Обриши
settings.event_delete_desc=Oбрисана грана или ознака
settings.event_fork=Креирај огранак
settings.event_fork_desc=Спремиште је допуштено
settings.event_push=Push
settings.event_push_desc=Git push у спремиште
settings.event_issues=Issues
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
settings.event_issue_comment=Issue Comment
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
settings.event_issues=Задаци
settings.event_issues_desc=Проблем је отворен, затворен, поново отворен, уређен, додељен, не додељен, етикета је ажурирана, етикета је очишћена, помјерена или демилестирана.
settings.event_issue_comment=Коментар проблема
settings.event_issue_comment_desc=Коментар проблема креиран, уређиван или избришен.
settings.event_pull_request=Захтев за спајање
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, demilestoned, or synchronized.
settings.event_release=Release
settings.event_release_desc=Release published in a repository.
settings.event_pull_request_desc=Захтев за спајање отворенo, затворено, додељено, недодељенo, ознака ажурирана, ознака избрисана, створена прекретница, избрисана прекретница, или синхронизовано.
settings.event_release=Издање
settings.event_release_desc=Издање објављено на спремишту.
settings.active=Активно
settings.active_helper=Детаљи о догађају што је проузроковало hook ће исто бити испоручено.
settings.add_hook_success=Додат је нови webhook.
@@ -800,12 +834,13 @@ settings.delete_webhook=Уклони Webhook
settings.recent_deliveries=Недавне испоруке
settings.hook_type=Тип Hook-а
settings.add_slack_hook_desc=Додавање интеграције <a href="%s">Slack</a> у спремиште.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_discord_hook_desc=Додавати <a href="%s">Discord</a> интеграцију вашем спремишту.
settings.add_dingtalk_hook_desc=Додајте интеграцију <a href="%s">Dingtalk</a> у своје спремиште.
settings.slack_token=Токен
settings.slack_domain=Домен
settings.slack_channel=Канал
settings.deploy_keys=Кључеви за распоређивање
settings.deploy_keys_helper=<b>Common Gotcha!</b> If you're looking for adding personal public keys, please add them in your <a href="%s%s">account settings</a>.
settings.deploy_keys_helper=<b>Common Gotcha!</b> Ако хоћете да додате личне јавне кључеве, молим вас да их додате у <a href="%s%s">поставке вашег налога</a>.
settings.add_deploy_key=Додај кључ за распоређивање
settings.deploy_key_desc=Кључеви за распоређивање имају само приступ за читање. То није исто што и SSH кључеви.
settings.no_deploy_keys=Нисте додали ниједан кључ за распоређивање.
@@ -883,7 +918,7 @@ team_permission_desc=Који ниво приступа треба имати о
form.name_reserved=Име организације '%s' је резервирано.
form.name_pattern_not_allowed=Шаблон имена '%s' није дозвољено.
form.team_name_reserved=Team name '%s' is reserved.
form.team_name_reserved=Име тима '%s' је резервисано.
settings=Подешавања
settings.options=Опције
@@ -974,8 +1009,8 @@ dashboard.git_gc_repos=Изврши cакупљање смећа на спрем
dashboard.git_gc_repos_success=Сва спремишта су успешно извршили cакупљање смећа.
dashboard.resync_all_sshkeys=Препиши '.ssh/authorized_keys' (опрез: не Gogs тастери ће бити изгубљени)
dashboard.resync_all_sshkeys_success=Сви јавни кључеви су успешно преписани.
dashboard.resync_all_hooks=Resync pre-receive, update and post-receive hooks of all repositories
dashboard.resync_all_hooks_success=All repositories' pre-receive, update and post-receive hooks have been resynced successfully.
dashboard.resync_all_hooks=Поново синхронизујте купљенe pre-receive, ажурирањa и post-receive у свим репозиторијумима
dashboard.resync_all_hooks_success=Све спремишта pre-receive, ажурирања и post-receive успешно су ресинкронизованa.
dashboard.reinit_missing_repos=Поново постави све податке са изгубљеним Git датотекама
dashboard.reinit_missing_repos_success=Сви подаци са изгубљеним Git датотекама су успешно поново постављени.
@@ -1050,7 +1085,7 @@ repos.private=Приватно
repos.watches=Watches
repos.stars=Фаворити
repos.issues=Задаци
repos.size=Size
repos.size=Величина
auths.auth_manage_panel=Контролна панела аутентикације
auths.new=Додај нови извор
@@ -1065,15 +1100,21 @@ auths.domain=Домен
auths.host=Хост
auths.port=Порт
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Bind лозинкa
auths.bind_password_helper=Упозорење: Ова лозинка је сачувана у облику нешифрованом текцту. Не користите високо-привилеговану налог.
auths.user_base=База претраживање корисника
auths.user_dn=DN корисника
auths.attribute_username=Атрибут username
auths.attribute_username_placeholder=Оставите празно да бисте користили корисничко име за регистрацију.
auths.attribute_name=Име атрибута
auths.attribute_name=Првo име атрибута
auths.attribute_surname=Презиме атрибута
auths.attribute_mail=Е-маил адреса
auths.verify_group_membership=Потврдите чланство у групи
auths.group_search_base_dn=База DN за претраживање групе
auths.group_filter=Филтер групе
auths.group_attribute_contain_user_list=Група атрибута која садржи листу корисника
auths.user_attribute_listed_in_group=Атрибут прилагођен и наведен у групи
auths.attributes_in_bind=Екстракција атрибута у облику Bind DN
auths.filter=Филтер корисника
auths.admin_filter=Филтер администратора
@@ -1098,8 +1139,9 @@ auths.delete_auth_title=Брисање канала аутентикације
auths.delete_auth_desc=Овај канал аутентикације ће бити избрисан. Да ли желите да наставите?
auths.still_in_used=Овај канал аутентикације још увек се користи од стране неких корисника, уклоните или пребаци ове кориснике у друг врсту аутентикације.
auths.deletion_success=Канал аутентикације успешно избрисан!
auths.login_source_exist=Login source '%s' already exists.
auths.login_source_exist=Улазни извор '%s' већ постоји.
config.not_set=(not set)
config.server_config=Конфигурација сервера
config.app_name=Име апликације
config.app_ver=Верзија апликације
@@ -1126,15 +1168,18 @@ config.ssh_keygen_path=Пут до генератор кључева ('ssh-keyge
config.ssh_minimum_key_size_check=Минимална величина провера кључа
config.ssh_minimum_key_sizes=Минимална величина кључева
config.repo_config=Repository Configuration
config.repo_config=Конфигурација спремишта
config.repo_root_path=Пут до корена спремишта
config.script_type=Врста скрипта
config.repo_force_private=Force Private
config.max_creation_limit=Max Creation Limit
config.preferred_licenses=Preferred Licenses
config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.max_creation_limit=Ограничење максималне креације
config.preferred_licenses=Преференцијалне лиценце
config.disable_http_git=Онемогући HTTP Git
config.enable_local_path_migration=Омогући миграцију локалнe путањe
config.commits_fetch_concurrency=Предузеће Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Конфигурација базе података
config.db_type=Тип
@@ -1208,8 +1253,8 @@ config.git_pull_timeout=Време до отказивања pull операци
config.git_gc_timeout=Време до отказивања cакупљање смећа
config.log_config=Kонфигурација журнала
config.log_mode=Mode
config.log_options=Options
config.log_mode=Режим
config.log_options=Опције
monitor.cron=Cron задаци
monitor.name=Име
@@ -1238,7 +1283,7 @@ notices.delete_success=Системска обавештавања су успе
[action]
create_repo=креира спремиште <a href="%s">%s</a>
fork_repo=forked a repository to <a href="%s">%s</a>
fork_repo=отворио спремиште <a href="%s">%s</a>
rename_repo=преимензје спремиште од <code>%[1]s</code> на <a href="%[2]s">%[3]s</a>
commit_repo=извршује push на <a href="%[1]s/src/%[2]s">%[3]s</a> у <a href="%[1]s">%[4]s</a>
compare_commits=Поређење ових %d комита
@@ -1251,10 +1296,10 @@ create_pull_request=`шаље захтев за спајање <a href="%s/pulls
close_pull_request=`затвара захтев за спајање <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request=`поново отвара захтев за спајање <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`прихваћује захтев за спајање <a href="%s/pulls/%s">%s#%[2]s</a>`
create_branch=created new branch <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=deleted branch <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
create_branch=створи нову филијалy <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
delete_branch=избрисана филијалa <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
push_tag=извршује push са ознаком <a href="%s/src/%s">%[2]s</a> на <a href="%[1]s">%[3]s</a>
delete_tag=deleted tag <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
delete_tag=избрисана ознака <code>%[2]s</code> at <a href="%[1]s">%[3]s</a>
[tool]
ago=пре

View File

@@ -48,7 +48,7 @@ cancel=Avbryt
install=Installation
title=Steg för att installera för första gången
docker_helper=Om du kör Gogs inuti Docker, vänligen läs <a target="_blank" href="%s">Riktninjerna</a> nogrant innan du ändrar någonting på denna sida!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs kräver MySQL, PostgreSQL, SQLite3, MSSQL eller TiDB.
db_title=Databasinställningar
db_type=Databastyp
host=Server
@@ -58,8 +58,8 @@ db_name=Databasens namn
db_helper=Se till att i MySQL använda INNODB med teckenuppsättningen utf8_general_ci.
ssl_mode=SSL-läge
path=Filväg
sqlite_helper=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
sqlite_helper=Sökvägen för SQLite3 databas. <br>Vänligen använd den absoluta sökvägen när du kör som en tjänst.
err_empty_db_path=Sökvägen till SQLite3 databasen får inte vara tom.
no_admin_and_disable_registration=Du kan inte inaktivera registrering utan att skapa ett administratörskonto.
err_empty_admin_password=Administratörslösenordet får ej vara tomt.
@@ -74,7 +74,7 @@ domain=Domän
domain_helper=Detta påverkar SSH klonings webbadresser.
ssh_port=SSH-port
ssh_port_helper=Portnumret som din SSH-server brukar, lämna tomt för att inaktivera SSH-funktionaliteten.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server=Använd inbyggd SSH Server
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
http_port=HTTP Port
http_port_helper=Portnumret vilket applikationen kommer lyssnar på.
@@ -82,8 +82,8 @@ app_url=Applikationsadressen
app_url_helper=Detta påverkar HTTP/HTTPS kloningsadressen och på platser i e-post.
log_root_path=Loggsökväg
log_root_path_helper=Katalog till vilken loggfiler skrivs.
enable_console_mode=Enable Console Mode
enable_console_mode_popup=In addition to file mode, also print logs to console.
enable_console_mode=Aktivera Konsolläge
enable_console_mode_popup=Utöver fil-läge, skriver även ut loggar till konsol.
optional_title=Övriga inställningar
email_title=E-post tjänstens inställningar
@@ -119,7 +119,8 @@ sqlite3_not_available=Din release stödjer ej SQLite3, ladda vänligen ner den o
invalid_db_setting=Databas inställningen är inkorrekt: %v
invalid_repo_path=Utvecklingskatalogens rotsökväg är ogiltig: %v
run_user_not_match=Köranvändaren är inte aktuell användare: %s -> %s
invalid_smtp_from=SMTP From field is not valid: %v
smtp_host_missing_port=SMTP-värden saknar port i adressen.
invalid_smtp_from=SMTP från fält är inte giltigt: %v
save_config_failed=Konfigurationssparningen misslyckades: %v
invalid_admin_setting=Inställningarna för administratörskontot är felaktiga: %v
install_success=Välkommen! Vi är glada att du väljer Gogs, ha kul och ta hand om dig.
@@ -168,6 +169,14 @@ reset_password_helper=Klicka här för att återställa ditt lösenord
password_too_short=Lösenordet får ej vara kortare än 6 tecken.
non_local_account=Icke-lokala konton får inte ändra lösenord genom Gogs.
login_two_factor=Tvåfaktorsautentisering
login_two_factor_passcode=Autentiseringskod
login_two_factor_enter_recovery_code=Ange en tvåfaktorsautentisering återställningskod
login_two_factor_recovery=Tvåfaktorsautentisering Återställning
login_two_factor_recovery_code=Återställningskod
login_two_factor_enter_passcode=Ange en tvåfaktorsautentiserings kod
login_two_factor_invalid_recovery_code=Återställningskoden har använts eller är inte giltig.
[mail]
activate_account=Vänligen aktivera ditt konto
activate_email=Verifiera din epostaddress
@@ -203,7 +212,7 @@ Content=Innehåll
require_error=får inte vara tomt
alpha_dash_error=` får bara innehålla bokstäver, nummer och bindestreck (-_).`
alpha_dash_dot_error=` får bara innehålla bokstäver, nummer, bindestreck (-_) och punkt`
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
alpha_dash_dot_slash_error=` får bara innehålla bokstäver, nummer, bindestreck (-_), punkt eller snedstreck`
size_error=` måste vara av storleken %s`
min_size_error=` måste innehålla minst %s tecken.`
max_size_error=` får inte innehålla mer än %s tecken.`
@@ -255,12 +264,11 @@ profile=Profil
password=Lösenord
avatar=Avatar
ssh_keys=SSH-nycklar
social=Sociala konton
applications=Applikationer
security=Säkerhet
repos=Utvecklingskataloger
orgs=Organisationer
repos=Repositories
applications=Applikationer
delete=Radera konto
uid=Uid
public_profile=Offentlig profil
profile_desc=Din epostaddress är offentlig och kommer att användas för alla kontorelaterade notifieringar och alla webbaserade åtgärder gjorda på sidan.
@@ -326,10 +334,30 @@ no_activity=Ingen nylig aktivitet
key_state_desc=Denna nyckel har använts inom dom senaste 7 dagarna
token_state_desc=Denna token har används inom dom senaste 7 dagarna
manage_social=Hantera länkade sociala konton
social_desc=Detta är en lista över länkade sociala konton. Ta bort alla länkningar som du inte känner igen.
unbind=Ta bort länkning
unbind_success=Socialt konto är inte längre länkat.
two_factor=Tvåfaktorsautentisering
two_factor_status=Status:
two_factor_on=
two_factor_off=Av
two_factor_enable=Aktivera
two_factor_disable=Inaktivera
two_factor_view_recovery_codes=Visa och spara <a href="%s%s">dina återställningskoder</a> på ett säkert ställe. Du kan använda dem som kod om du förlorar åtkomsten till din autentisering applikation.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Avaktivera Tvåfaktorsautentisering
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Ange sedan lösenordet:
two_factor_verify=Verifiera
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Hantera personliga åtkomst-tokens
generate_new_token=Generera Nya Tokens
@@ -588,6 +616,7 @@ pulls.compare_compare=jämför
pulls.filter_branch=Filtrera gren
pulls.no_results=Inga resultat hittades.
pulls.nothing_to_compare=Det finns inget att jämföra eftersom bas och huvudgrenar är lika.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`Det finns redan en pullförfrågan mellan detta två mål: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]s</a>^
pulls.create=Skapa Pullförfrågan
pulls.title_desc=vill sammanfoga %[1]d incheckningar från <code>s[2]s</code> in i <code>%[3]s</code>
@@ -603,6 +632,8 @@ pulls.is_checking=Konfliktkontroll är fortfarande pågågående, vänligen uppd
pulls.can_auto_merge_desc=Denna pull-förfrågan kan sammanfogas automatiskt.
pulls.cannot_auto_merge_desc=Denna pull-förfrågan kan inte sammanfogas automatiskt eftersom det finns konflikter.
pulls.cannot_auto_merge_helper=Vänligen sammanfoga manuellt för att lösa konflikter.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Sammanfoga Pull-förfrågan
pulls.open_unmerged_pull_exists=`Du kan inte utföra återöppningsoperationen eftersom det finns redan en öppen pull-förfrågan (#%d) från samma repo med samma sammanfogningsinformation som väntar på sammanfogning.`
pulls.delete_branch=Ta bort gren
@@ -662,6 +693,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numerisk
settings.tracker_issue_style.alphanumeric=Alfanumerisk
settings.tracker_url_format_desc=Du kan använda platshållaren <code>{user} {repo} {index}</code> för användarnamn, reponamn, och ärendenummer.
settings.pulls_desc=Aktivera pullförfrågningar för att ta emot publika bidrag
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Högrisksområde
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=Den nya ägaren har redan ett repo med det namnet. Vänligen välj ett annat namn.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Färska leveranser
settings.hook_type=Kroktyp
settings.add_slack_hook_desc=Lägg till <a href="%s">Slack</a>-integration till ditt förråd.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Pollett
settings.slack_domain=Domän
settings.slack_channel=Kanal
@@ -1065,15 +1100,21 @@ auths.domain=Domän
auths.host=Värd
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Bind lösenord
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_username=Användarnamnsattribut
auths.attribute_username_placeholder=Leave empty to use sign-in form field value for user name.
auths.attribute_name=Förnamnsattribut
auths.attribute_name=First Name Attribute
auths.attribute_surname=Efternamnsattribut
auths.attribute_mail=E-postattribut
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Fetch attributes in Bind DN context
auths.filter=Användarfilter
auths.admin_filter=Adminfilter
@@ -1100,6 +1141,7 @@ auths.still_in_used=This authentication is still used by some users, please dele
auths.deletion_success=Authentication has been deleted successfully!
auths.login_source_exist=Login source '%s' already exists.
config.not_set=(not set)
config.server_config=Server-konfiguration
config.app_name=Applikationsnamn
config.app_ver=Applikationsversion
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Databaskonfiguration
config.db_type=Typ
config.db_host=Värd

View File

@@ -48,7 +48,7 @@ cancel=İptal
install=Kurulum
title=İlk Kez Çalıştırma İçin Kurulum Adımları
docker_helper=Gogs'u Docker içinde kullanıyorsanız bu sayfada herhangi bir değişiklik yapmadan önce lütfen <a target="_blank" href="%s">kılavuzu</a> dikkatlice okuyunuz!
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
requite_db_desc=Gogs MySQL, PostgreSQL, SQLite3, MSSQL veya TiDB'ye ihtiyaç duyar.
db_title=Veritabanı Ayarları
db_type=Veritabanı Türü
host=Sunucu
@@ -59,7 +59,7 @@ db_helper=Lütfen MySQL için INNODB motorunu utf8_general_ci karakter setiyle k
ssl_mode=SSL Biçimi
path=Yol
sqlite_helper=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
err_empty_db_path=SQLite3 database path cannot be empty.
err_empty_db_path=SQLite3 veritabanının yolu boş olamaz.
no_admin_and_disable_registration=Bir yönetici hesabı oluşturmadan kullanıcı kaydını devre dışı bırakamazsınız.
err_empty_admin_password=Yönetici parolası boş olamaz.
@@ -74,7 +74,7 @@ domain=Alan Adı
domain_helper=Bu, SSH klon bağlantılarını etkiler.
ssh_port=SSH Portu
ssh_port_helper=SSH sunucunuzun portu kullanılıyor, boş bırakın ya da SSH özelliğini devre dışı bırakın.
use_builtin_ssh_server=Use Builtin SSH Server
use_builtin_ssh_server=Yerleşik SSH sunucusu kullanın
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
http_port=HTTP Portu
http_port_helper=Uygulamanın dinleyeceği port.
@@ -82,7 +82,7 @@ app_url=Uygulama Bağlantısı
app_url_helper=Bu, HTTP/HTTPS klon bağlantılarını ve e-postadaki bazı kısımları etkiler.
log_root_path=Günlük Dosyaları Yolu
log_root_path_helper=Günlük dosyalarının yazılacağı dizin.
enable_console_mode=Enable Console Mode
enable_console_mode=Konsol Modunu Etkinleştir
enable_console_mode_popup=In addition to file mode, also print logs to console.
optional_title=İsteğe Bağlı Ayarlar
@@ -119,6 +119,7 @@ sqlite3_not_available=Yayın sürümünüz SQLite3'ü desteklemiyor, lütfen %s'
invalid_db_setting=Veritabanı ayarları geçersiz: %v
invalid_repo_path=Depo kök dizini geçersiz: %v
run_user_not_match=Çalıştırma kullanıcısı geçerli kullanıcı değil: %s -> %s
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=SMTP From field is not valid: %v
save_config_failed=Yapılandırma kaydedilemedi: %v
invalid_admin_setting=Yönetici hesap ayarları geçersiz: %v
@@ -141,7 +142,7 @@ issues.in_your_repos=Depolarınızda
[explore]
repos=Depolar
users=Kullanıcılar
organizations=Organizations
organizations=Organizasyonlar
search=Ara
[auth]
@@ -168,6 +169,14 @@ reset_password_helper=Parolanızı sıfırlamak için buraya tıklayın
password_too_short=Parola uzunluğu 6 karakterden az olamaz.
non_local_account=Yerel olmayan hesapların şifrelerini Gogs aracılığıyla değiştiremezsiniz.
login_two_factor=İki aşamalı doğrulama
login_two_factor_passcode=Authentication Passcode
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Kurtarma kodu
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=Lütfen hesabınızı aktifleştirin
activate_email=E-posta adresinizi doğrulayın
@@ -194,11 +203,11 @@ AuthName=Yetkilendirme adı
AdminEmail=Yönetici e-postası
NewBranchName=New branch name
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
CommitSummary=İşleme özeti
CommitMessage=İşleme mesajı
CommitChoice=İşleme tercihi
TreeName=Dosya yolu
Content=Content
Content=İçerik
require_error=` boş olamaz.`
alpha_dash_error=` sadece karakter, rakam veya çizgi(-_) içermelidir.`
@@ -255,12 +264,11 @@ profile=Profil
password=Parola
avatar=Avatar
ssh_keys=SSH Anahtarları
social=Sosyal Medya Hesapları
applications=Uygulamalar
security=Güvenlik
repos=Depolar
orgs=Organizasyonlar
repos=Repositories
applications=Uygulamalar
delete=Hesabı Sil
uid=Tekil ID
public_profile=Herkese Açık Profil
profile_desc=E-posta adresiniz herkese açıktır ve hesabınızla ilgili bilgilendirmelerde ve web tabanlı operasyonlarda kullanılacaktır.
@@ -326,10 +334,30 @@ no_activity=Yeni aktivite yok
key_state_desc=Bu anahtar son 7 gün içinde kullanıldı
token_state_desc=Bu erişim anahtarı son 7 gün içinde kullanıldı
manage_social=Bağlanmış Sosyal Hesapları Yönet
social_desc=Bu, bağlanmış sosyal hesapların bir listesidir. Tanımadığınız bağlantıyı kaldırın.
unbind=Bağlantıyı Kopar
unbind_success=Sosyal hesabın bağlantısı koparıldı.
two_factor=Two-factor Authentication
two_factor_status=Status:
two_factor_on=ık
two_factor_off=Kapalı
two_factor_enable=Enable
two_factor_disable=Disable
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verify
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=Kişisel Erişim Anahtarlarını Yönet
generate_new_token=Yeni Erişim Anahtarı Üret
@@ -588,6 +616,7 @@ pulls.compare_compare=karşılaştır
pulls.filter_branch=Dal filtrele
pulls.no_results=Sonuç bulunamadı.
pulls.nothing_to_compare=Karşılaştırılacak hiçbir şey yok, çünkü temel ve ana dal aynı.
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
pulls.has_pull_request=`Bu iki hedef için zaten bir değişiklik isteği var: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Değişiklik İsteği Oluştur
pulls.title_desc=<code>%[3]s</code> içindeki <code>%[2]s</code> işlemelerini %[1]d ile birleştirmek istiyor
@@ -603,6 +632,8 @@ pulls.is_checking=Çakışma kontrolü sürüyor. Lütfen birkaç dakika içinde
pulls.can_auto_merge_desc=Bu değişiklik isteği otomatik olarak birleştirilebilir.
pulls.cannot_auto_merge_desc=Çakışmalardan dolayı bu değişiklik isteği otomatik olarak birleştirilemez.
pulls.cannot_auto_merge_helper=Çakışmaları çözmek için lütfen elle birleştirin.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Değişiklik İsteğini Birleştir
pulls.open_unmerged_pull_exists=`Yeniden açma işlemini gerçekleştiremezsiniz. Çünkü zaten aynı depodan, aynı birleştirme bilgisiyle açık olan bir değişiklik isteği var (#%d) ve birleştirme bekliyor.`
pulls.delete_branch=Delete Branch
@@ -662,6 +693,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Sayısal
settings.tracker_issue_style.alphanumeric=Alfanumerik
settings.tracker_url_format_desc=Kullanıcı adı, depo ismi ve hata indeksi için <code>{kullanıcı} {depo} {indeks}</code> tutucusunu kullanabilirsiniz.
settings.pulls_desc=Herkese açık katkıları kabul etmek için değişiklik isteklerini etkinleştirin
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Tehlike Alanı
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=Yeni sahibin aynı isimde başka bir deposu var. Lütfen farklı bir isim seçin.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Son Dağıtımlar
settings.hook_type=İstek Türü
settings.add_slack_hook_desc=Deponuza <a href="%s">Slack</a> entegrasyonunu ekleyin.
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=Erişim Anahtarı
settings.slack_domain=Alan Adı
settings.slack_channel=Kanal
@@ -1065,15 +1100,21 @@ auths.domain=Alan Adı
auths.host=Sunucu
auths.port=Port
auths.bind_dn=Bağlama DN'i
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Bağlama Parolası
auths.bind_password_helper=Uyarı: Bu parola, ham halde bir metin dosyası içerisinde saklanacaktır. Yüksek izinli bir hesap kullanmayın.
auths.user_base=Kullanıcı Arama Tabanı
auths.user_dn=Kullanıcı DN'i
auths.attribute_username=Kullanıcı özelliği
auths.attribute_username_placeholder=Kullanıcı adı için giriş yapma form alanı kullanmak için boş bırakın.
auths.attribute_name=Ad özelliği
auths.attribute_name=First Name Attribute
auths.attribute_surname=Soyad özelliği
auths.attribute_mail=E-posta özelliği
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Bağlı DN tabanındaki özellikleri çek
auths.filter=Kullanıcı Filtresi
auths.admin_filter=Yönetici Filtresi
@@ -1100,6 +1141,7 @@ auths.still_in_used=Bu yetkilendirme hala bazı kullanıcılar tarafından kulla
auths.deletion_success=Yetkilendirme başarıyla silindi!
auths.login_source_exist=Login source '%s' already exists.
config.not_set=(not set)
config.server_config=Sunucu Yapılandırması
config.app_name=Uygulama Adı
config.app_ver=Uygulama Sürümü
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Veritabanı Yapılandırması
config.db_type=Türü
config.db_host=Sunucu

View File

@@ -119,6 +119,7 @@ sqlite3_not_available=Ваша версія не підтримує SQLite3, б
invalid_db_setting=Налаштування бази даних помилкові: %v
invalid_repo_path=Неприпустимий шлях до сховища репозиторіїв: %v
run_user_not_match=Користувач, що здійснює запуск, не відповідає поточному: %s -> %s
smtp_host_missing_port=В адресі SMTP-хосту не вистачає порту.
invalid_smtp_from=Невалідне SMTP поле Від: %v
save_config_failed=Не в змозі зберегти конфігурацію: %v
invalid_admin_setting=Неприпустимі налаштування облікового запису адміністратора: %v
@@ -168,6 +169,14 @@ reset_password_helper=Натисніть тут для скидання паро
password_too_short=Довжина пароля не може бути меншою за 6.
non_local_account=Нелокальні облікові записи не можуть змінити пароль через Gogs.
login_two_factor=Двофакторна автентифікація
login_two_factor_passcode=Код автентифікації
login_two_factor_enter_recovery_code=Введіть двофакторний код відновлення
login_two_factor_recovery=Двофакторне відновлення
login_two_factor_recovery_code=Код відновлення
login_two_factor_enter_passcode=Введіть двофакторний код
login_two_factor_invalid_recovery_code=Код відновлення не валідний, або його вже було використано.
[mail]
activate_account=Будь ласка, активуйте ваш обліковий запис
activate_email=Перевірте свою електронну адресу
@@ -255,12 +264,11 @@ profile=Профіль
password=Пароль
avatar=Аватар
ssh_keys=Ключі SSH
social=Соціальні акаунти
applications=Додатки
orgs=Організації
security=Безпека
repos=Репозиторії
orgs=Організації
applications=Додатки
delete=Видалити обліковий запис
uid=Унікальний ідентифікатор користувача
public_profile=Загальнодоступний профіль
profile_desc=Ваша адреса електронної пошти є публічною і буде використовуватися для будь-яких повідомлень щодо вашого облікового запису і будь-яких веб-операцій, що здійснюються через сайт.
@@ -326,12 +334,32 @@ no_activity=Жодної діяльності
key_state_desc=Цей ключ використовувався в останні 7 днів
token_state_desc=Цей токен використовувався в останні 7 днів
manage_social=Керувати пов'язаними соціальними акаунтами
social_desc=Це список пов'язаних соціальних акаунтів. Видаліть будь-який прив'язок, які ви не визнаєте.
unbind=Відв'язати
unbind_success=Соціальну мережу відключено.
two_factor=Двофакторна автентифікація
two_factor_status=Статус:
two_factor_on=Вкл.
two_factor_off=Викл.
two_factor_enable=Увімкнути
two_factor_disable=Вимкнути
two_factor_view_recovery_codes=Перегляньте й збережіть <a href="%s%s">ваші ключі відновлення</a> у безпечному місці. Ви можете використовувати іх як паролі якщо втратите доступ до вашої програми автентифікації.
two_factor_http=Для HTTP/HTTPS операцій, ви більше не можете використовувати звичайні ім'я та пароль. Будь ласка створіть та використовуйте <a href="%[1]s%[2]s">персональний токен доступу</a> як ваші облікові дані, наприклад <code>%[3]s</code>.
two_factor_enable_title=Увімкнути двофакторну автентифікацію
two_factor_scan_qr=Будь ласка, використовуйте ваш додаток автентифікації для сканування зображення:
two_factor_or_enter_secret=Або введіть секрет:
two_factor_then_enter_passcode=Потім введіть пароль:
two_factor_verify=Перевірити
two_factor_invalid_passcode=Введений пароль не валідний, будь ласка, спробуйте ще раз!
two_factor_enable_error=Увімкнення двофакторної автентифікації не вдалося: %v
two_factor_enable_success=Двофакторну автентифікацію успішно активовано для вашого акаунту!
two_factor_recovery_codes_title=Пароль відновлення для двофакторної автентифікації
two_factor_recovery_codes_desc=Пароль відновлення використовується коли ви тимчасово втрачаєте доступ до вашого додатку автентифікації. Кожен пароль відновлення може бути використаний лише один раз. <b>Будь ласка, тримайте ці паролі у безпечному місці</b>.
two_factor_regenerate_recovery_codes=Перегенерувати паролі відновлення
two_factor_regenerate_recovery_codes_error=Перегенерація паролів відновлення не вдалася: %v
two_factor_regenerate_recovery_codes_success=Нові коди відновлення було успішно сгенеровано!
two_factor_disable_title=Вимкнути двофакторну автентифікацію
two_factor_disable_desc=Рівень безпеки вашого акаунту знизиться після вимикання двофакторної автентифікаціЇ. Бажаєте продовжити?
two_factor_disable_success=Двофакторну автентифікацію було успішно вимкнено!
manage_access_token=Керувати жетони особистого доступу
manage_access_token=Керувати токенами особистого доступу
generate_new_token=Генерувати новий жетон
tokens_desc=Створені вами токени для доступу до Gogs API.
new_token_desc=На даний момент будь-який жетон має повний доступ до вашого облікового запису.
@@ -588,6 +616,7 @@ pulls.compare_compare=compare
pulls.filter_branch=Фільтрувати гілку
pulls.no_results=Результатів не знайдено.
pulls.nothing_to_compare=Нічого порівнювати, бо base та head гілки однакові.
pulls.nothing_merge_base=Нічого порівнювати, бо обидві гілки мають повністю різну історію.
pulls.has_pull_request=`Вже є pull request між ціми двома цілями: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Створити pull request
pulls.title_desc=хоче злити %[1]d комітів з <code>%[2]s</code> до <code>%[3]s</code>
@@ -603,6 +632,8 @@ pulls.is_checking=Перевірка конфліктів продовжуєть
pulls.can_auto_merge_desc=Цей запрос може бути влитий автоматично.
pulls.cannot_auto_merge_desc=Цей запрос не може бути влитий автоматично, тому що він має конфлікти.
pulls.cannot_auto_merge_helper=Будь ласка влийте вручну щоб врегулювати конфлікти.
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=Влити запрос на злиття
pulls.open_unmerged_pull_exists=`Ви не можете перевідкрити, бо вже існує запрос на злиття (#%d) з того самого репозиторію, з тією самою інформацією про злиття, та він очікує на влиття.`
pulls.delete_branch=Видалити гілку
@@ -658,10 +689,11 @@ settings.collaboration.write=Запис
settings.collaboration.read=Читання
settings.collaboration.undefined=Не визначено
settings.branches=Гілки
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
settings.branches_bare=Ви не можете керувати гілками у bare-репозиторії. Спочатку додайте у нього якогось вмісту, будь ласка.
settings.default_branch=Гілка за замовчуванням
settings.default_branch_desc=Гілка за замовчанням вважається базовою для комітів, запросів злиття та онлайн редагувань.
settings.update=Оновлення
settings.update_default_branch_unsupported=Зміна гілки за замувчуванням не підтримується серверною версією Git.
settings.update_default_branch_success=Гілку за замовчуванням цього репозиторію було успішно оновлено!
settings.protected_branches=Захищені гілки
settings.protected_branches_desc=Захистіть гілки від force push, випадкового видалення та коміттерів з білого списку.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Цифровий
settings.tracker_issue_style.alphanumeric=Буквено-цифровий
settings.tracker_url_format_desc=Ви можете використовувати заповнювач <code>{user} {repo} {index}</code> для ім'я користувача, назви репозиторію на номеру проблеми.
settings.pulls_desc=Увімкнути публічні запроси на злиття
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=Небезпечна зона
settings.cannot_fork_to_same_owner=Ви не можете клонувати репозиторій його ж власнику.
settings.new_owner_has_same_repo=Новий власник вже має репозиторій з такою назвою.
@@ -801,6 +835,7 @@ settings.recent_deliveries=Недавні розсилки
settings.hook_type=Тип хуку
settings.add_slack_hook_desc=Додати <a href="%s">Slack</a>-інтеграцію до вашого репозиторію.
settings.add_discord_hook_desc=Додати <a href="%s">Discord</a>-інтеграцію до репозиторію.
settings.add_dingtalk_hook_desc=Додати інтеграцію <a href="%s">Dingtalk</a> до вашого репозиторію.
settings.slack_token=Жетон
settings.slack_domain=Домен
settings.slack_channel=Канал
@@ -1065,6 +1100,7 @@ auths.domain=Домен
auths.host=Хост
auths.port=Порт
auths.bind_dn=Прив'язати DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=Прив'язати пароль
auths.bind_password_helper=Увага: Цей пароль зберігається як звичайний текст. Не використовуйте профіль з високими повноваженнями.
auths.user_base=База пошуку користувачів
@@ -1074,6 +1110,11 @@ auths.attribute_username_placeholder=Залиште порожнім щоб ви
auths.attribute_name=Атрибут імені
auths.attribute_surname=Атрибут прізвища
auths.attribute_mail=Атрибут електронної пошти
auths.verify_group_membership=Верифікувати членство у групі
auths.group_search_base_dn=Базовий DN пошуку групи
auths.group_filter=Фільтр груп
auths.group_attribute_contain_user_list=Атрибут групи зі списком користувачів
auths.user_attribute_listed_in_group=Атрибути користувача що відображені у групі
auths.attributes_in_bind=Отримати атрибути контексту Bind DN
auths.filter=Користувацький фільтр
auths.admin_filter=Фільтр адміністратора
@@ -1100,6 +1141,7 @@ auths.still_in_used=Цю автентифікацію ще використов
auths.deletion_success=Автентивікацію було успішно видалено!
auths.login_source_exist=Джерело входу '%s' вже існує.
config.not_set=(not set)
config.server_config=Конфігурація сервера
config.app_name=Назва програми
config.app_ver=Версія програми
@@ -1136,6 +1178,9 @@ config.disable_http_git=Вимкнути HTTP Git
config.enable_local_path_migration=Увімкнути міграцію з локального шляху
config.commits_fetch_concurrency=Запросити коміти конкурентно
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=Налаштування бази даних
config.db_type=Тип
config.db_host=Хост

View File

@@ -2,7 +2,7 @@ app_desc=一款极易搭建的自助 Git 服务
home=首页
dashboard=控制面板
explore=探索
explore=发现
help=帮助
sign_in=登录
sign_out=退出
@@ -119,6 +119,7 @@ sqlite3_not_available=您所使用的发行版不支持 SQLite3请从 %s 下
invalid_db_setting=数据库设置不正确:%v
invalid_repo_path=仓库根目录设置不正确:%v
run_user_not_match=运行系统用户非当前用户:%s -> %s
smtp_host_missing_port=SMTP 地址缺少端口号。
invalid_smtp_from=SMTP From 字段不合法:%v
save_config_failed=应用配置保存失败:%v
invalid_admin_setting=管理员帐户设置不正确:%v
@@ -168,6 +169,14 @@ reset_password_helper=单击此处重置密码
password_too_short=密码长度不能少于 6 位!
non_local_account=非本地类型的帐户无法通过 Gogs 修改密码。
login_two_factor=两步验证登录
login_two_factor_passcode=动态令牌
login_two_factor_enter_recovery_code=输入两步验证恢复密钥
login_two_factor_recovery=两步验证恢复登录
login_two_factor_recovery_code=恢复密钥
login_two_factor_enter_passcode=输入两步验证动态令牌
login_two_factor_invalid_recovery_code=恢复密钥已经被使用或是无效的
[mail]
activate_account=请激活您的帐户
activate_email=请验证您的邮箱地址
@@ -254,13 +263,12 @@ form.name_pattern_not_allowed=用户名不允许 '%s' 的格式。
profile=个人信息
password=修改密码
avatar=头像设置
ssh_keys=管理 SSH 密钥
social=社交帐号绑定
applications=管理授权应用
orgs=管理组织
repos=管理仓库
ssh_keys=SSH 密钥
security=帐户安全
repos=仓库列表
orgs=组织列表
applications=授权应用
delete=删除帐户
uid=用户 ID
public_profile=公开信息
profile_desc=您的邮箱地址将会被公开,并被用于接收帐户的所有提醒和通知。
@@ -316,7 +324,7 @@ ssh_key_name_used=使用相同名称的公开密钥已经存在!
key_name=密钥名称
key_content=密钥内容
add_key_success=新的 SSH 密钥 '%s' 添加成功!
delete_key=删除
delete_key=删除密钥
ssh_key_deletion=删除 SSH 公钥操作
ssh_key_deletion_desc=删除该 SSH 公钥将删除所有与您帐户相关的访问权限。是否继续?
ssh_key_deletion_success=SSH 公钥删除成功!
@@ -326,10 +334,30 @@ no_activity=没有最近活动
key_state_desc=该密钥在 7 天内被使用过
token_state_desc=该令牌在 7 天内被使用过
manage_social=管理关联社交帐户
social_desc=以下是与您帐户所关联的社交帐号,如果您发现有陌生的关联,请立即解除绑定!
unbind=解除绑定
unbind_success=社交帐号解除绑定成功!
two_factor=两步验证
two_factor_status=当前状态:
two_factor_on=开启
two_factor_off=关闭
two_factor_enable=启用两步验证
two_factor_disable=关闭两步验证
two_factor_view_recovery_codes=查看并备份 <a href="%s%s">恢复密钥</a> 到一个安全的地方,当您无法使用认证应用时可以使用恢复密钥作为临时令牌。
two_factor_http=对于 HTTP/HTTPS 操作,您不再能够使用用户名和密码作为凭据。请创建和使用 <a href="%[1]s%[2]s"> 个人操作令牌</a> 作为您的凭据,如 <code>%[3]s</code>。
two_factor_enable_title=启用两步验证
two_factor_scan_qr=请使用您的认证应用扫描以下二维码︰
two_factor_or_enter_secret=或者直接输入密钥:
two_factor_then_enter_passcode=然后输入动态令牌:
two_factor_verify=验证令牌
two_factor_invalid_passcode=您输入的动态令牌无效,请重试!
two_factor_enable_error=启用两步验证失败:%v
two_factor_enable_success=两步验证登录启用成功!
two_factor_recovery_codes_title=两步验证恢复密钥
two_factor_recovery_codes_desc=当您无法使用认证应用时,可以使用恢复密钥作为临时令牌。每个恢复密钥只能被使用一次,<b>请务必将它们保存在一个安全的地方</b>。
two_factor_regenerate_recovery_codes=重新生成恢复密钥
two_factor_regenerate_recovery_codes_error=重新生成恢复密钥失败:%v
two_factor_regenerate_recovery_codes_success=新的恢复密钥生成成功!
two_factor_disable_title=关闭两步验证
two_factor_disable_desc=关闭两步验证后,您的帐户安全等级将变低。是否继续?
two_factor_disable_success=两步验证登录关闭成功!
manage_access_token=管理个人操作令牌
generate_new_token=生成新的令牌
@@ -541,7 +569,7 @@ issues.filter_sort.recentupdate=最近更新
issues.filter_sort.leastupdate=最少更新
issues.filter_sort.mostcomment=最多评论
issues.filter_sort.leastcomment=最少评论
issues.opened_by=由 <a href="%[2]s">%[3]s</a> %[1]s创建
issues.opened_by=由 <a href="%[2]s">%[3]s</a> %[1]s创建
issues.opened_by_fake=由 %[2]s 于 %[1]s创建
issues.previous=上一页
issues.next=下一页
@@ -588,6 +616,7 @@ pulls.compare_compare=对比分支
pulls.filter_branch=过滤分支
pulls.no_results=未找到结果
pulls.nothing_to_compare=基准和对比分支代码已经同步,无需进行对比。
pulls.nothing_merge_base=由于两个分支各自拥有完全不同的提交历史,因此无法进行比较。
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>
@@ -603,6 +632,8 @@ pulls.is_checking=该合并请求正在进行冲突检查,请稍后再刷新
pulls.can_auto_merge_desc=该合并请求可以进行自动合并操作。
pulls.cannot_auto_merge_desc=该合并请求存在冲突,无法进行自动合并操作。
pulls.cannot_auto_merge_helper=请手动拉取代码变更以解决冲突。
pulls.create_merge_commit=创建一个新的合并提交
pulls.rebase_before_merging=合并前先进行衍合
pulls.merge_pull_request=合并请求
pulls.open_unmerged_pull_exists=`由于已经存在来自相同仓库和合并信息的未合并请求(#%d您无法执行重新开启操作。`
pulls.delete_branch=删除分支
@@ -662,6 +693,7 @@ settings.branches_bare=您无法对空仓库进行分支管理,请先推送一
settings.default_branch=默认分支
settings.default_branch_desc=默认分支是被用于代码提交、合并请求和在线编辑的基准分支。
settings.update=更新
settings.update_default_branch_unsupported=服务器上的 Git 版本不支持修改默认分支。
settings.update_default_branch_success=仓库默认分支更新成功!
settings.protected_branches=保护分支
settings.protected_branches_desc=保护分支不被强制推送、意外删除和限制代码提交白名单。
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=纯数字形式
settings.tracker_issue_style.alphanumeric=英文字母数字组合形式
settings.tracker_url_format_desc=您可以使用 <code>{user} {repo} {index}</code> 分别作为用户名、仓库名和工单索引的占位符。
settings.pulls_desc=启用合并请求以接受社区贡献
settings.pulls.ignore_whitespace=忽略空白符号的更改
settings.pulls.allow_rebase_merge=允许在合并提交时使用衍合
settings.danger_zone=危险操作区
settings.cannot_fork_to_same_owner=您不能派生仓库到其当前的所有者。
settings.new_owner_has_same_repo=新的仓库拥有者已经存在同名仓库!
@@ -801,6 +835,7 @@ settings.recent_deliveries=最近推送记录
settings.hook_type=钩子类型
settings.add_slack_hook_desc=为您的仓库增加 <a href="%s">Slack</a> 集成。
settings.add_discord_hook_desc=为您的仓库增加 <a href="%s">Discord</a> 集成。
settings.add_dingtalk_hook_desc=为您的仓库增加 <a href="%s">钉钉</a> 集成。
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=频道
@@ -1065,6 +1100,7 @@ auths.domain=域名
auths.host=主机地址
auths.port=主机端口
auths.bind_dn=绑定 DN
auths.bind_dn_helper=可以使用 '%s' 作为用户名的占位符例如DOM\%s
auths.bind_password=绑定密码
auths.bind_password_helper=警告:该密码将会以明文的形式保存在数据库中。请不要使用拥有高权限的帐户!
auths.user_base=用户搜索基准
@@ -1074,6 +1110,11 @@ auths.attribute_username_placeholder=留空表示使用用户登录时所使用
auths.attribute_name=名字属性
auths.attribute_surname=姓氏属性
auths.attribute_mail=邮箱属性
auths.verify_group_membership=验证组成员身份
auths.group_search_base_dn=组搜索基准 DN
auths.group_filter=组名称过滤
auths.group_attribute_contain_user_list=包含用户的组属性
auths.user_attribute_listed_in_group=组内用户属性
auths.attributes_in_bind=从 Bind DN 中拉取属性信息
auths.filter=用户过滤规则
auths.admin_filter=管理员过滤规则
@@ -1100,6 +1141,7 @@ auths.still_in_used=此认证仍旧与一些用户有关联,请先删除或者
auths.deletion_success=授权源删除成功!
auths.login_source_exist=登录源 '%s' 已存在。
config.not_set=(未设置)
config.server_config=服务器配置
config.app_name=应用名称
config.app_ver=应用版本
@@ -1136,6 +1178,9 @@ config.disable_http_git=禁用 HTTP Git 操作
config.enable_local_path_migration=启用本地路径迁移
config.commits_fetch_concurrency=代码提交拉取并发量
config.http_config=HTTP 配置
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=数据库配置
config.db_type=数据库类型
config.db_host=主机地址
@@ -1259,7 +1304,7 @@ delete_tag=删除了 <a href="%[1]s">%[3]s</a> 的标签 <code>%[2]s</code>
[tool]
ago=之前
from_now=之后
now=现在
now=刚刚
1s=1 秒%s
1m=1 分钟%s
1h=1 小时%s

View File

@@ -119,6 +119,7 @@ sqlite3_not_available=您所使用的發行版本不支持 SQLite3請從 %s
invalid_db_setting=數據庫設置不正確:%v
invalid_repo_path=倉庫根目錄設置不正確:%v
run_user_not_match=執行系統用戶非當前用戶:%s -> %s
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=SMTP From field is not valid: %v
save_config_failed=應用配置保存失敗:%v
invalid_admin_setting=管理員帳戶設置不正確:%v
@@ -168,6 +169,14 @@ reset_password_helper=單擊此處重置密碼
password_too_short=密碼長度不能少於 6 位!
non_local_account=Non-local accounts cannot change passwords through Gogs.
login_two_factor=Two-factor Authentication
login_two_factor_passcode=Authentication Passcode
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recovery Code
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=請激活您的帳戶
activate_email=請驗證您的郵箱地址
@@ -255,12 +264,11 @@ profile=個人信息
password=修改密碼
avatar=Avatar
ssh_keys=管理 SSH 密鑰
social=社交帳號綁定
applications=管理授權應用
orgs=管理組織
security=Security
repos=Repositories
orgs=管理組織
applications=管理授權應用
delete=刪除帳戶
uid=用戶 ID
public_profile=公開信息
profile_desc=您的郵箱地址將會被公開,並被用於接收帳戶的所有提醒和通知。
@@ -326,10 +334,30 @@ no_activity=沒有最近活動
key_state_desc=該密鑰在 7 天內被使用過
token_state_desc=此token在過去七天內曾經被使用過
manage_social=管理關聯社交帳戶
social_desc=以下是與您帳戶所關聯的社交帳號,如果您發現有陌生的關聯,請立即解除綁定!
unbind=解除綁定
unbind_success=社交帳號解除綁定成功!
two_factor=Two-factor Authentication
two_factor_status=Status:
two_factor_on=On
two_factor_off=Off
two_factor_enable=Enable
two_factor_disable=Disable
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verify
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=管理個人操作令牌
generate_new_token=生成新的令牌
@@ -588,6 +616,7 @@ pulls.compare_compare=對比文件變化
pulls.filter_branch=過濾分支
pulls.no_results=未找到結果
pulls.nothing_to_compare=基準和對比分支代碼已經同步,無需進行對比。
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=該合併請求正在進行衝突檢查,請稍後再刷新
pulls.can_auto_merge_desc=這個拉請求可以自動合併。
pulls.cannot_auto_merge_desc=由於存在衝突,不能自動合併這推送請求。
pulls.cannot_auto_merge_helper=請手動合併來解決衝突。
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=合併請求
pulls.open_unmerged_pull_exists=`由於已經存在來自相同倉庫和合併信息的未合併請求(#%d您無法執行重新開啟操作。`
pulls.delete_branch=Delete Branch
@@ -662,6 +693,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=Default Branch
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
settings.update=Update
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
settings.protected_branches=Protected Branches
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=Numeric
settings.tracker_issue_style.alphanumeric=Alphanumeric
settings.tracker_url_format_desc=您可以使用 <code>{user} {repo} {index}</code> 分別作為用戶名、倉庫名和問題索引的占位符。
settings.pulls_desc=啟用合併請求以接受社區貢獻
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=危險操作區
settings.cannot_fork_to_same_owner=You cannot fork a repository to its original owner.
settings.new_owner_has_same_repo=新的倉庫擁有者已經存在同名倉庫!
@@ -801,6 +835,7 @@ settings.recent_deliveries=最近推送記錄
settings.hook_type=鉤子類型
settings.add_slack_hook_desc=為您的倉庫增加 <a href="%s">Slack</a> 集成。
settings.add_discord_hook_desc=Add <a href="%s">Discord</a> integration to your repository.
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=頻道
@@ -1065,15 +1100,21 @@ auths.domain=域名
auths.host=主機地址
auths.port=主機端口
auths.bind_dn=綁定DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=綁定密碼
auths.bind_password_helper=警告:該密碼將會以明文的形式保存在數據庫中。請不要使用擁有高權限的帳戶!
auths.user_base=用戶搜索基準
auths.user_dn=User DN
auths.attribute_username=用戶名屬性
auths.attribute_username_placeholder=留空表示使用用戶登錄時所使用的用戶名
auths.attribute_name=名子屬性
auths.attribute_name=First Name Attribute
auths.attribute_surname=姓氏屬性
auths.attribute_mail=電子郵箱屬性
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=Fetch attributes in Bind DN context
auths.filter=使用者篩選器
auths.admin_filter=管理者篩選器
@@ -1100,6 +1141,7 @@ auths.still_in_used=This authentication is still used by some users, please dele
auths.deletion_success=認證源刪除成功!
auths.login_source_exist=Login source '%s' already exists.
config.not_set=(not set)
config.server_config=服務器配置
config.app_name=應用名稱
config.app_ver=應用版本
@@ -1136,6 +1178,9 @@ config.disable_http_git=Disable HTTP Git
config.enable_local_path_migration=Enable Local Path Migration
config.commits_fetch_concurrency=Commits Fetch Concurrency
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=數據庫配置
config.db_type=數據庫類型
config.db_host=主機地址

View File

@@ -119,6 +119,7 @@ sqlite3_not_available=您所使用的發行版本不支持 SQLite3請從 %s
invalid_db_setting=資料庫設定不正確: %v
invalid_repo_path=倉庫根目錄設置不正確:%v
run_user_not_match=執行系統用戶非當前用戶:%s -> %s
smtp_host_missing_port=SMTP Host is missing port in address.
invalid_smtp_from=SMTP 寄件者欄位無效﹔%v
save_config_failed=設定儲存失敗:%v
invalid_admin_setting=管理員帳戶設置不正確:%v
@@ -168,6 +169,14 @@ reset_password_helper=單擊此處重置密碼
password_too_short=密碼長度不能少於 6 位!
non_local_account=非本地帳戶無法通過 Gogs 修改密碼。
login_two_factor=Two-factor Authentication
login_two_factor_passcode=Authentication Passcode
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
login_two_factor_recovery=Two-factor Recovery
login_two_factor_recovery_code=Recovery Code
login_two_factor_enter_passcode=Enter a two-factor passcode
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
[mail]
activate_account=請激活您的帳戶
activate_email=請驗證您的郵箱地址
@@ -255,12 +264,11 @@ profile=個人信息
password=修改密碼
avatar=頭像
ssh_keys=管理 SSH 密鑰
social=社交帳號綁定
applications=管理授權應用
orgs=管理組織
security=Security
repos=Repositories
orgs=管理組織
applications=管理授權應用
delete=刪除帳戶
uid=用戶 ID
public_profile=公開信息
profile_desc=您的郵箱地址將會被公開,並被用於接收帳戶的所有提醒和通知。
@@ -326,10 +334,30 @@ no_activity=沒有最近活動
key_state_desc=該密鑰在 7 天內被使用過
token_state_desc=此token在過去七天內曾經被使用過
manage_social=管理關聯社交帳戶
social_desc=以下是與您帳戶所關聯的社交帳號,如果您發現有陌生的關聯,請立即解除綁定!
unbind=解除綁定
unbind_success=社交帳號解除綁定成功!
two_factor=Two-factor Authentication
two_factor_status=Status:
two_factor_on=On
two_factor_off=Off
two_factor_enable=Enable
two_factor_disable=Disable
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
two_factor_enable_title=Enable Two-factor Authentication
two_factor_scan_qr=Please use your authentication application to scan the image:
two_factor_or_enter_secret=Or enter the secret:
two_factor_then_enter_passcode=Then enter passcode:
two_factor_verify=Verify
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
two_factor_enable_error=Enable Two-factor authentication failed: %v
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
two_factor_disable_title=Disable Two-factor Authentication
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
two_factor_disable_success=Two-factor authentication has disabled successfully!
manage_access_token=管理個人操作令牌
generate_new_token=生成新的令牌
@@ -347,9 +375,9 @@ orgs.none=您現在還不是任何組織的成員。
orgs.leave_title=離開組織
orgs.leave_desc=離開組織後,所有與組織相關的倉庫和團隊權限將被取消。是否繼續?
repos.leave=Leave
repos.leave_title=Leave repository
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
repos.leave=離開
repos.leave_title=離開存儲庫
repos.leave_desc=在你離開後,您將無法進入到存儲庫。你想要繼續嗎?
repos.leave_success=You have left repository '%s' successfully!
delete_account=刪除當前帳戶
@@ -588,6 +616,7 @@ pulls.compare_compare=對比文件變化
pulls.filter_branch=過濾分支
pulls.no_results=未找到結果
pulls.nothing_to_compare=基準和對比分支代碼已經同步,無需進行對比。
pulls.nothing_merge_base=There is nothing to compare because two branches have completely different history.
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>
@@ -603,6 +632,8 @@ pulls.is_checking=該合併請求正在進行衝突檢查,請稍後再刷新
pulls.can_auto_merge_desc=這個拉請求可以自動合併。
pulls.cannot_auto_merge_desc=由於存在衝突,不能自動合併這推送請求。
pulls.cannot_auto_merge_helper=請手動合併來解決衝突。
pulls.create_merge_commit=Create a merge commit
pulls.rebase_before_merging=Rebase before merging
pulls.merge_pull_request=合併請求
pulls.open_unmerged_pull_exists=`由於已經存在來自相同倉庫和合併信息的未合併請求(#%d您無法執行重新開啟操作。`
pulls.delete_branch=刪除分支
@@ -662,6 +693,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
settings.default_branch=預設分支
settings.default_branch_desc=預設分支是程式碼 commit、pull requests 及線上編輯的基準分支。
settings.update=更新
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
settings.update_default_branch_success=這個 repository 的預設分支更新成功!
settings.protected_branches=保護分支
settings.protected_branches_desc=保護分支不被強制 Push、意外刪除以及限制 Commit 者白名單
@@ -707,6 +739,8 @@ settings.tracker_issue_style.numeric=數字
settings.tracker_issue_style.alphanumeric=字母及數字
settings.tracker_url_format_desc=您可以使用 <code>{user} {repo} {index}</code> 分別作為用戶名、倉庫名和問題索引的占位符。
settings.pulls_desc=啟用合併請求以接受社區貢獻
settings.pulls.ignore_whitespace=Ignore changes in whitespace
settings.pulls.allow_rebase_merge=Allow use rebase to merge commits
settings.danger_zone=危險操作區
settings.cannot_fork_to_same_owner=你不可以 fork 一個 repository 到它的擁有者。
settings.new_owner_has_same_repo=新的倉庫擁有者已經存在同名倉庫!
@@ -751,7 +785,7 @@ settings.webhook_deletion_success=Web 鉤子刪除成功!
settings.webhook.test_delivery=測試推送
settings.webhook.test_delivery_desc=生成並推送一個模擬的 Push 事件
settings.webhook.test_delivery_success=測試推送已經加入到隊列,請耐心等待數秒再刷新推送記錄。
settings.webhook.redelivery=Redelivery
settings.webhook.redelivery=重新傳送
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
settings.webhook.request=請求內容
settings.webhook.response=響應內容
@@ -801,6 +835,7 @@ settings.recent_deliveries=最近推送記錄
settings.hook_type=鉤子類型
settings.add_slack_hook_desc=為您的倉庫增加 <a href="%s">Slack</a> 集成。
settings.add_discord_hook_desc=Hook <a href="%s">Discord</a> 到你的 repository。
settings.add_dingtalk_hook_desc=Add <a href="%s">Dingtalk</a> integration to your repository.
settings.slack_token=令牌
settings.slack_domain=域名
settings.slack_channel=頻道
@@ -1065,15 +1100,21 @@ auths.domain=域名
auths.host=主機地址
auths.port=主機端口
auths.bind_dn=綁定DN
auths.bind_dn_helper=You can use '%s' as placeholder for username, e.g. DOM\%s
auths.bind_password=綁定密碼
auths.bind_password_helper=警告:該密碼將會以明文的形式保存在數據庫中。請不要使用擁有高權限的帳戶!
auths.user_base=用戶搜索基準
auths.user_dn=User DN
auths.attribute_username=用戶名屬性
auths.attribute_username_placeholder=留空表示使用用戶登錄時所使用的用戶名
auths.attribute_name=名子屬性
auths.attribute_name=歸納名字
auths.attribute_surname=姓氏屬性
auths.attribute_mail=電子郵箱屬性
auths.verify_group_membership=Verify group membership
auths.group_search_base_dn=Group Search Base DN
auths.group_filter=Group Filter
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
auths.user_attribute_listed_in_group=User Attribute Listed in Group
auths.attributes_in_bind=從 Bind DN 中獲取屬性信息
auths.filter=使用者篩選器
auths.admin_filter=管理者篩選器
@@ -1100,6 +1141,7 @@ auths.still_in_used=一些使用者仍然使用此驗證方式,請先刪除或
auths.deletion_success=認證源刪除成功!
auths.login_source_exist=登錄源 '%s' 已存在。
config.not_set=(not set)
config.server_config=服務器配置
config.app_name=應用名稱
config.app_ver=應用版本
@@ -1136,6 +1178,9 @@ config.disable_http_git=停用 HTTP Git
config.enable_local_path_migration=啟用本地路徑遷移
config.commits_fetch_concurrency=同時Fetch Commit數量
config.http_config=HTTP Configuration
config.http_access_control_allow_origin=Access Control Allow Origin
config.db_config=資料庫設定
config.db_type=數據庫類型
config.db_host=主機地址

View File

@@ -73,7 +73,7 @@ Most of settings are obvious and easy to understand, but there are some settings
Full documentation of application settings can be found [here](https://gogs.io/docs/advanced/configuration_cheat_sheet.html).
### Container Options
### Container Options
This container have some options available via environment variables, these options are opt-in features that can help the administration of this container:

3
docker/armhf/build.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
go build -ldflags "-w -s" resin-xbuild.go

BIN
docker/armhf/qemu-arm-static Executable file

Binary file not shown.

BIN
docker/armhf/resin-xbuild Executable file

Binary file not shown.

View File

@@ -0,0 +1,66 @@
package main
import (
"log"
"os"
"os/exec"
"syscall"
)
func crossBuildStart() {
err := os.Remove("/bin/sh")
if err != nil {
log.Fatal(err)
}
err = os.Link("/usr/bin/resin-xbuild", "/bin/sh")
if err != nil {
log.Fatal(err)
}
}
func crossBuildEnd() {
err := os.Remove("/bin/sh")
if err != nil {
log.Fatal(err)
}
err = os.Link("/bin/sh.real", "/bin/sh")
if err != nil {
log.Fatal(err)
}
}
func runShell() error {
cmd := exec.Command("/usr/bin/qemu-arm-static", append([]string{"-0", "/bin/sh", "/bin/sh"}, os.Args[1:]...)...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func main() {
switch os.Args[0] {
case "cross-build-start":
crossBuildStart()
case "cross-build-end":
crossBuildEnd()
case "/bin/sh":
code := 0
crossBuildEnd()
if err := runShell(); err != nil {
code = 1
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
code = status.ExitStatus()
}
}
}
crossBuildStart()
// Hack to bypass apk issues with triggering
code = 0
os.Exit(code)
}
}

View File

@@ -25,5 +25,6 @@ rm -r $GOPATH
apk --no-progress del build-deps
# Create git user for Gogs
adduser -H -D -g 'Gogs Git User' git -h /data/git -s /bin/bash && passwd -u git
addgroup -S git
adduser -G git -H -D -g 'Gogs Git User' git -h /data/git -s /bin/bash && usermod -p '*' git && passwd -u git
echo "export GOGS_CUSTOM=${GOGS_CUSTOM}" >> /etc/profile

View File

@@ -6,9 +6,6 @@ set -e
# Move to final place
mv /app/gogs/build/gogs /app/gogs/
mv /app/gogs/build/templates /app/gogs/
mv /app/gogs/build/public /app/gogs/
mv /app/gogs/build/docker /app/gogs/
# Final cleaning
rm -rf /app/gogs/build
@@ -19,4 +16,4 @@ rm /app/gogs/docker/nsswitch.conf
rm /app/gogs/docker/README.md
rm -rf /tmp/go
rm -rf /usr/local/go
rm -rf /usr/local/go

View File

@@ -13,11 +13,11 @@ fi
cd /app/gogs
# Link volumed data with app data
ln -sf /data/gogs/log ./log
ln -sf /data/gogs/data ./data
ln -sfn /data/gogs/log ./log
ln -sfn /data/gogs/data ./data
# Backward Compatibility with Gogs Container v0.6.15
ln -sf /data/git /home/git
ln -sfn /data/git /home/git
chown -R git:git /data /app/gogs ~git/
chmod 0755 /data /data/gogs ~git/

View File

@@ -38,6 +38,14 @@ create_volume_subfolder() {
done
}
setids() {
PUID=${PUID:-1000}
PGID=${PGID:-1000}
groupmod -o -g "$PGID" git
usermod -o -u "$PUID" git
}
setids
cleanup
create_volume_subfolder

View File

@@ -1,4 +1,4 @@
// +build go1.5
// +build go1.6
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
@@ -13,10 +13,10 @@ import (
"github.com/urfave/cli"
"github.com/gogits/gogs/cmd"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
const APP_VER = "0.10.31.0327 / 0.11 RC"
const APP_VER = "0.11.33.1119"
func init() {
setting.AppVer = APP_VER

View File

@@ -53,7 +53,7 @@ func ParseAccessMode(permission string) AccessMode {
// that is not in this table is the real owner of a repository. In case of an organization
// repository, the members of the owners team are in this table.
type Access struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UserID int64 `xorm:"UNIQUE(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
Mode AccessMode
@@ -112,14 +112,12 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
repo, err := GetRepositoryByID(access.RepoID)
if err != nil {
if errors.IsRepoNotExist(err) {
log.Error(4, "GetRepositoryByID: %v", err)
log.Error(2, "GetRepositoryByID: %v", err)
continue
}
return nil, err
}
if err = repo.GetOwner(); err != nil {
return nil, err
} else if repo.OwnerID == u.ID {
if repo.OwnerID == u.ID {
continue
}
repos[repo] = access.Mode

View File

@@ -21,8 +21,8 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
type ActionType int
@@ -73,12 +73,12 @@ func init() {
// it implemented interface base.Actioner so that can be used in template render.
type Action struct {
ID int64
UserID int64 // Receiver user id.
UserID int64 // Receiver user ID
OpType ActionType
ActUserID int64 // Action user id.
ActUserName string // Action user name.
ActUserID int64 // Doer user ID
ActUserName string // Doer user name
ActAvatar string `xorm:"-"`
RepoID int64
RepoID int64 `xorm:"INDEX"`
RepoUserName string
RepoName string
RefName string
@@ -108,7 +108,7 @@ func (a *Action) GetActUserName() string {
}
func (a *Action) ShortActUserName() string {
return base.EllipsisString(a.ActUserName, 20)
return tool.EllipsisString(a.ActUserName, 20)
}
func (a *Action) GetRepoUserName() string {
@@ -116,7 +116,7 @@ func (a *Action) GetRepoUserName() string {
}
func (a *Action) ShortRepoUserName() string {
return base.EllipsisString(a.RepoUserName, 20)
return tool.EllipsisString(a.RepoUserName, 20)
}
func (a *Action) GetRepoName() string {
@@ -124,7 +124,7 @@ func (a *Action) GetRepoName() string {
}
func (a *Action) ShortRepoName() string {
return base.EllipsisString(a.RepoName, 33)
return tool.EllipsisString(a.RepoName, 33)
}
func (a *Action) GetRepoPath() string {
@@ -136,8 +136,8 @@ func (a *Action) ShortRepoPath() string {
}
func (a *Action) GetRepoLink() string {
if len(setting.AppSubUrl) > 0 {
return path.Join(setting.AppSubUrl, a.GetRepoPath())
if len(setting.AppSubURL) > 0 {
return path.Join(setting.AppSubURL, a.GetRepoPath())
}
return "/" + a.GetRepoPath()
}
@@ -305,7 +305,7 @@ func (push *PushCommits) AvatarLink(email string) string {
if !ok {
u, err := GetUserByEmail(email)
if err != nil {
push.avatars[email] = base.AvatarLink(email)
push.avatars[email] = tool.AvatarLink(email)
if !errors.IsUserNotExist(err) {
log.Error(4, "GetUserByEmail: %v", err)
}
@@ -379,8 +379,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
if ref[0] == '#' {
ref = fmt.Sprintf("%s%s", repo.FullName(), ref)
} else if !strings.Contains(ref, "/") {
// We don't support User#ID syntax yet
// return ErrNotImplemented
// FIXME: We don't support User#ID syntax yet
continue
}
@@ -540,7 +539,7 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
return nil
}
compareURL := setting.AppUrl + opts.Commits.CompareURL
compareURL := setting.AppURL + opts.Commits.CompareURL
if isNewRef {
compareURL = ""
if err = PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{

View File

@@ -15,8 +15,8 @@ import (
"github.com/go-xorm/xorm"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
type NoticeType int
@@ -27,7 +27,7 @@ const (
// Notice represents a system notice for admin.
type Notice struct {
ID int64 `xorm:"pk autoincr"`
ID int64
Type NoticeType
Description string `xorm:"TEXT"`
Created time.Time `xorm:"-"`
@@ -128,6 +128,6 @@ func DeleteNoticesByIDs(ids []int64) error {
if len(ids) == 0 {
return nil
}
_, err := x.Where("id IN (" + strings.Join(base.Int64sToStrings(ids), ",") + ")").Delete(new(Notice))
_, err := x.Where("id IN (" + strings.Join(tool.Int64sToStrings(ids), ",") + ")").Delete(new(Notice))
return err
}

View File

@@ -15,12 +15,12 @@ import (
"github.com/go-xorm/xorm"
gouuid "github.com/satori/go.uuid"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
// Attachment represent a attachment of issue/comment/release.
type Attachment struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UUID string `xorm:"uuid UNIQUE"`
IssueID int64 `xorm:"INDEX"`
CommentID int64

View File

@@ -16,7 +16,7 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/markdown"
"github.com/gogits/gogs/pkg/markup"
)
// CommentType defines whether a comment is just a simple comment, an action (like close) or a reference.
@@ -49,7 +49,7 @@ const (
// Comment represents a comment in commit and issue page.
type Comment struct {
ID int64 `xorm:"pk autoincr"`
ID int64
Type CommentType
PosterID int64
Poster *User `xorm:"-"`
@@ -110,6 +110,12 @@ func (c *Comment) loadAttributes(e Engine) (err error) {
if err != nil {
return fmt.Errorf("getIssueByID [%d]: %v", c.IssueID, err)
}
if c.Issue.Repo == nil {
c.Issue.Repo, err = getRepositoryByID(e, c.Issue.RepoID)
if err != nil {
return fmt.Errorf("getRepositoryByID [%d]: %v", c.Issue.RepoID, err)
}
}
}
if c.Attachments == nil {
@@ -168,7 +174,7 @@ func (c *Comment) EventTag() string {
// mailParticipants sends new comment emails to repository watchers
// and mentioned people.
func (cmt *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue) (err error) {
mentions := markdown.FindAllMentions(cmt.Content)
mentions := markup.FindAllMentions(cmt.Content)
if err = updateIssueMentions(e, cmt.IssueID, mentions); err != nil {
return fmt.Errorf("UpdateIssueMentions [%d]: %v", cmt.IssueID, err)
}
@@ -182,7 +188,7 @@ func (cmt *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue)
issue.Content = fmt.Sprintf("Reopened #%d", issue.Index)
}
if err = mailIssueCommentToParticipants(issue, cmt.Poster, mentions); err != nil {
log.Error(4, "mailIssueCommentToParticipants: %v", err)
log.Error(2, "mailIssueCommentToParticipants: %v", err)
}
return nil
@@ -275,16 +281,19 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
if err != nil {
return nil, err
}
}
if _, err = e.Exec("UPDATE `issue` SET updated_unix = ? WHERE id = ?", time.Now().Unix(), opts.Issue.ID); err != nil {
return nil, fmt.Errorf("update issue 'updated_unix': %v", err)
}
// Notify watchers for whatever action comes in, ignore if no action type.
if act.OpType > 0 {
if err = notifyWatchers(e, act); err != nil {
log.Error(4, "notifyWatchers: %v", err)
log.Error(2, "notifyWatchers: %v", err)
}
if err = comment.mailParticipants(e, act.OpType, opts.Issue); err != nil {
log.Error(4, "MailParticipants: %v", err)
log.Error(2, "MailParticipants: %v", err)
}
}
@@ -320,7 +329,7 @@ type CreateCommentOptions struct {
// CreateComment creates comment of issue or commit.
func CreateComment(opts *CreateCommentOptions) (comment *Comment, err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return nil, err
}
@@ -428,9 +437,9 @@ func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, erro
func getCommentsByRepoIDSince(e Engine, repoID, since int64) ([]*Comment, error) {
comments := make([]*Comment, 0, 10)
sess := e.Where("issue.repo_id = ?", repoID).Join("INNER", "issue", "issue.id = comment.issue_id", repoID).Asc("created_unix")
sess := e.Where("issue.repo_id = ?", repoID).Join("INNER", "issue", "issue.id = comment.issue_id").Asc("comment.created_unix")
if since > 0 {
sess.And("updated_unix >= ?", since)
sess.And("comment.updated_unix >= ?", since)
}
if err := sess.Find(&comments); err != nil {
return nil, err
@@ -494,7 +503,7 @@ func DeleteCommentByID(doer *User, id int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -93,19 +93,6 @@ func (err ErrUserHasOrgs) Error() string {
return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
}
type ErrReachLimitOfRepo struct {
Limit int
}
func IsErrReachLimitOfRepo(err error) bool {
_, ok := err.(ErrReachLimitOfRepo)
return ok
}
func (err ErrReachLimitOfRepo) Error() string {
return fmt.Sprintf("user has reached maximum limit of repositories [limit: %d]", err.Limit)
}
// __ __.__ __ .__
// / \ / \__| | _|__|
// \ \/\/ / | |/ / |

View File

@@ -21,6 +21,19 @@ func (err RepoNotExist) Error() string {
return fmt.Sprintf("repository does not exist [id: %d, user_id: %d, name: %s]", err.ID, err.UserID, err.Name)
}
type ReachLimitOfRepo struct {
Limit int
}
func IsReachLimitOfRepo(err error) bool {
_, ok := err.(ReachLimitOfRepo)
return ok
}
func (err ReachLimitOfRepo) Error() string {
return fmt.Sprintf("user has reached maximum limit of repositories [limit: %d]", err.Limit)
}
type InvalidRepoReference struct {
Ref string
}
@@ -46,3 +59,16 @@ func IsMirrorNotExist(err error) bool {
func (err MirrorNotExist) Error() string {
return fmt.Sprintf("mirror does not exist [repo_id: %d]", err.RepoID)
}
type BranchAlreadyExists struct {
Name string
}
func IsBranchAlreadyExists(err error) bool {
_, ok := err.(BranchAlreadyExists)
return ok
}
func (err BranchAlreadyExists) Error() string {
return fmt.Sprintf("branch already exists [name: %s]", err.Name)
}

View File

@@ -0,0 +1,33 @@
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package errors
import "fmt"
type TwoFactorNotFound struct {
UserID int64
}
func IsTwoFactorNotFound(err error) bool {
_, ok := err.(TwoFactorNotFound)
return ok
}
func (err TwoFactorNotFound) Error() string {
return fmt.Sprintf("two-factor authentication does not found [user_id: %d]", err.UserID)
}
type TwoFactorRecoveryCodeNotFound struct {
Code string
}
func IsTwoFactorRecoveryCodeNotFound(err error) bool {
_, ok := err.(TwoFactorRecoveryCodeNotFound)
return ok
}
func (err TwoFactorRecoveryCodeNotFound) Error() string {
return fmt.Sprintf("two-factor recovery code does not found [code: %s]", err.Code)
}

View File

@@ -5,63 +5,25 @@
package models
import (
"bufio"
"bytes"
"fmt"
"html"
"html/template"
"io"
"io/ioutil"
"os"
"os/exec"
"strings"
"github.com/Unknwon/com"
"github.com/sergi/go-diff/diffmatchpatch"
"golang.org/x/net/html/charset"
"golang.org/x/text/transform"
log "gopkg.in/clog.v1"
"github.com/gogits/git-module"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/template/highlight"
"github.com/gogits/gogs/pkg/tool"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/template/highlight"
)
type DiffLineType uint8
const (
DIFF_LINE_PLAIN DiffLineType = iota + 1
DIFF_LINE_ADD
DIFF_LINE_DEL
DIFF_LINE_SECTION
)
type DiffFileType uint8
const (
DIFF_FILE_ADD DiffFileType = iota + 1
DIFF_FILE_CHANGE
DIFF_FILE_DEL
DIFF_FILE_RENAME
)
type DiffLine struct {
LeftIdx int
RightIdx int
Type DiffLineType
Content string
}
func (d *DiffLine) GetType() int {
return int(d.Type)
}
type DiffSection struct {
Name string
Lines []*DiffLine
*git.DiffSection
}
var (
@@ -70,24 +32,24 @@ var (
codeTagSuffix = []byte("</span>")
)
func diffToHTML(diffs []diffmatchpatch.Diff, lineType DiffLineType) template.HTML {
func diffToHTML(diffs []diffmatchpatch.Diff, lineType git.DiffLineType) template.HTML {
buf := bytes.NewBuffer(nil)
// Reproduce signs which are cutted for inline diff before.
switch lineType {
case DIFF_LINE_ADD:
case git.DIFF_LINE_ADD:
buf.WriteByte('+')
case DIFF_LINE_DEL:
case git.DIFF_LINE_DEL:
buf.WriteByte('-')
}
for i := range diffs {
switch {
case diffs[i].Type == diffmatchpatch.DiffInsert && lineType == DIFF_LINE_ADD:
case diffs[i].Type == diffmatchpatch.DiffInsert && lineType == git.DIFF_LINE_ADD:
buf.Write(addedCodePrefix)
buf.WriteString(html.EscapeString(diffs[i].Text))
buf.Write(codeTagSuffix)
case diffs[i].Type == diffmatchpatch.DiffDelete && lineType == DIFF_LINE_DEL:
case diffs[i].Type == diffmatchpatch.DiffDelete && lineType == git.DIFF_LINE_DEL:
buf.Write(removedCodePrefix)
buf.WriteString(html.EscapeString(diffs[i].Text))
buf.Write(codeTagSuffix)
@@ -99,77 +61,34 @@ func diffToHTML(diffs []diffmatchpatch.Diff, lineType DiffLineType) template.HTM
return template.HTML(buf.Bytes())
}
// get an specific line by type (add or del) and file line number
func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLine {
var (
difference = 0
addCount = 0
delCount = 0
matchDiffLine *DiffLine
)
LOOP:
for _, diffLine := range diffSection.Lines {
switch diffLine.Type {
case DIFF_LINE_ADD:
addCount++
case DIFF_LINE_DEL:
delCount++
default:
if matchDiffLine != nil {
break LOOP
}
difference = diffLine.RightIdx - diffLine.LeftIdx
addCount = 0
delCount = 0
}
switch lineType {
case DIFF_LINE_DEL:
if diffLine.RightIdx == 0 && diffLine.LeftIdx == idx-difference {
matchDiffLine = diffLine
}
case DIFF_LINE_ADD:
if diffLine.LeftIdx == 0 && diffLine.RightIdx == idx+difference {
matchDiffLine = diffLine
}
}
}
if addCount == delCount {
return matchDiffLine
}
return nil
}
var diffMatchPatch = diffmatchpatch.New()
func init() {
diffMatchPatch.DiffEditCost = 100
}
// computes inline diff for the given line
func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) template.HTML {
// ComputedInlineDiffFor computes inline diff for the given line.
func (diffSection *DiffSection) ComputedInlineDiffFor(diffLine *git.DiffLine) template.HTML {
if setting.Git.DisableDiffHighlight {
return template.HTML(html.EscapeString(diffLine.Content[1:]))
}
var (
compareDiffLine *DiffLine
compareDiffLine *git.DiffLine
diff1 string
diff2 string
)
// try to find equivalent diff line. ignore, otherwise
switch diffLine.Type {
case DIFF_LINE_ADD:
compareDiffLine = diffSection.GetLine(DIFF_LINE_DEL, diffLine.RightIdx)
case git.DIFF_LINE_ADD:
compareDiffLine = diffSection.Line(git.DIFF_LINE_DEL, diffLine.RightIdx)
if compareDiffLine == nil {
return template.HTML(html.EscapeString(diffLine.Content))
}
diff1 = compareDiffLine.Content
diff2 = diffLine.Content
case DIFF_LINE_DEL:
compareDiffLine = diffSection.GetLine(DIFF_LINE_ADD, diffLine.LeftIdx)
case git.DIFF_LINE_DEL:
compareDiffLine = diffSection.Line(git.DIFF_LINE_ADD, diffLine.LeftIdx)
if compareDiffLine == nil {
return template.HTML(html.EscapeString(diffLine.Content))
}
@@ -186,336 +105,90 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) tem
}
type DiffFile struct {
Name string
OldName string
Index string // 40-byte SHA, Changed/New: new SHA; Deleted: old SHA
Addition, Deletion int
Type DiffFileType
IsCreated bool
IsDeleted bool
IsBin bool
IsRenamed bool
IsSubmodule bool
Sections []*DiffSection
IsIncomplete bool
*git.DiffFile
Sections []*DiffSection
}
func (diffFile *DiffFile) GetType() int {
return int(diffFile.Type)
}
func (diffFile *DiffFile) GetHighlightClass() string {
func (diffFile *DiffFile) HighlightClass() string {
return highlight.FileNameToHighlightClass(diffFile.Name)
}
type Diff struct {
TotalAddition, TotalDeletion int
Files []*DiffFile
IsIncomplete bool
*git.Diff
Files []*DiffFile
}
func (diff *Diff) NumFiles() int {
return len(diff.Files)
}
const DIFF_HEAD = "diff --git "
// TODO: move this function to gogits/git-module
func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) {
var (
diff = &Diff{Files: make([]*DiffFile, 0)}
curFile *DiffFile
curSection = &DiffSection{
Lines: make([]*DiffLine, 0, 10),
}
leftLine, rightLine int
lineCount int
curFileLinesCount int
)
input := bufio.NewReader(reader)
isEOF := false
for !isEOF {
line, err := input.ReadString('\n')
if err != nil {
if err == io.EOF {
isEOF = true
} else {
return nil, fmt.Errorf("ReadString: %v", err)
}
}
if len(line) > 0 && line[len(line)-1] == '\n' {
// Remove line break.
line = line[:len(line)-1]
}
if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") || len(line) == 0 {
continue
}
curFileLinesCount++
lineCount++
// Diff data too large, we only show the first about maxlines lines
if curFileLinesCount >= maxLines || len(line) >= maxLineCharacteres {
curFile.IsIncomplete = true
}
switch {
case line[0] == ' ':
diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line, LeftIdx: leftLine, RightIdx: rightLine}
leftLine++
rightLine++
curSection.Lines = append(curSection.Lines, diffLine)
continue
case line[0] == '@':
curSection = &DiffSection{}
curFile.Sections = append(curFile.Sections, curSection)
ss := strings.Split(line, "@@")
diffLine := &DiffLine{Type: DIFF_LINE_SECTION, Content: line}
curSection.Lines = append(curSection.Lines, diffLine)
// Parse line number.
ranges := strings.Split(ss[1][1:], " ")
leftLine, _ = com.StrTo(strings.Split(ranges[0], ",")[0][1:]).Int()
if len(ranges) > 1 {
rightLine, _ = com.StrTo(strings.Split(ranges[1], ",")[0]).Int()
} else {
log.Warn("Parse line number failed: %v", line)
rightLine = leftLine
}
continue
case line[0] == '+':
curFile.Addition++
diff.TotalAddition++
diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line, RightIdx: rightLine}
rightLine++
curSection.Lines = append(curSection.Lines, diffLine)
continue
case line[0] == '-':
curFile.Deletion++
diff.TotalDeletion++
diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line, LeftIdx: leftLine}
if leftLine > 0 {
leftLine++
}
curSection.Lines = append(curSection.Lines, diffLine)
case strings.HasPrefix(line, "Binary"):
curFile.IsBin = true
continue
}
// Get new file.
if strings.HasPrefix(line, DIFF_HEAD) {
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/")
}
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,
Type: DIFF_FILE_CHANGE,
Sections: make([]*DiffSection, 0, 10),
}
diff.Files = append(diff.Files, curFile)
if len(diff.Files) >= maxFiles {
diff.IsIncomplete = true
io.Copy(ioutil.Discard, reader)
break
}
curFileLinesCount = 0
// Check file diff type and submodule.
CHECK_TYPE:
for {
line, err := input.ReadString('\n')
if err != nil {
if err == io.EOF {
isEOF = true
} else {
return nil, fmt.Errorf("ReadString: %v", err)
}
}
switch {
case strings.HasPrefix(line, "new file"):
curFile.Type = DIFF_FILE_ADD
curFile.IsCreated = true
curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
case strings.HasPrefix(line, "deleted"):
curFile.Type = DIFF_FILE_DEL
curFile.IsDeleted = true
curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
case strings.HasPrefix(line, "index"):
if curFile.IsDeleted {
curFile.Index = line[6:46]
} else if len(line) >= 88 {
curFile.Index = line[49:88]
} else {
curFile.Index = curFile.Name
}
break CHECK_TYPE
case strings.HasPrefix(line, "similarity index 100%"):
curFile.Type = DIFF_FILE_RENAME
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
curFile.Index = b
break CHECK_TYPE
}
}
}
func NewDiff(gitDiff *git.Diff) *Diff {
diff := &Diff{
Diff: gitDiff,
Files: make([]*DiffFile, gitDiff.NumFiles()),
}
// FIXME: detect encoding while parsing.
var buf bytes.Buffer
for _, f := range diff.Files {
for i := range gitDiff.Files {
buf.Reset()
for _, sec := range f.Sections {
for _, l := range sec.Lines {
buf.WriteString(l.Content)
diff.Files[i] = &DiffFile{
DiffFile: gitDiff.Files[i],
Sections: make([]*DiffSection, gitDiff.Files[i].NumSections()),
}
for j := range gitDiff.Files[i].Sections {
diff.Files[i].Sections[j] = &DiffSection{
DiffSection: gitDiff.Files[i].Sections[j],
}
for k := range diff.Files[i].Sections[j].Lines {
buf.WriteString(diff.Files[i].Sections[j].Lines[k].Content)
buf.WriteString("\n")
}
}
charsetLabel, err := base.DetectEncoding(buf.Bytes())
charsetLabel, err := tool.DetectEncoding(buf.Bytes())
if charsetLabel != "UTF-8" && err == nil {
encoding, _ := charset.Lookup(charsetLabel)
if encoding != nil {
d := encoding.NewDecoder()
for _, sec := range f.Sections {
for _, l := range sec.Lines {
if c, _, err := transform.String(d, l.Content); err == nil {
l.Content = c
for j := range diff.Files[i].Sections {
for k := range diff.Files[i].Sections[j].Lines {
if c, _, err := transform.String(d, diff.Files[i].Sections[j].Lines[k].Content); err == nil {
diff.Files[i].Sections[j].Lines[k].Content = c
}
}
}
}
}
}
return diff, nil
return diff
}
func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) {
done := make(chan error)
var gitDiff *git.Diff
go func() {
gitDiff = git.ParsePatch(done, maxLines, maxLineCharacteres, maxFiles, reader)
}()
if err := <-done; err != nil {
return nil, fmt.Errorf("ParsePatch: %v", err)
}
return NewDiff(gitDiff), nil
}
func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
gitRepo, err := git.OpenRepository(repoPath)
gitDiff, err := git.GetDiffRange(repoPath, beforeCommitID, afterCommitID, maxLines, maxLineCharacteres, maxFiles)
if err != nil {
return nil, err
return nil, fmt.Errorf("GetDiffRange: %v", err)
}
commit, err := gitRepo.GetCommit(afterCommitID)
if err != nil {
return nil, err
}
var cmd *exec.Cmd
// if "after" commit given
if len(beforeCommitID) == 0 {
// First commit of repository.
if commit.ParentCount() == 0 {
cmd = exec.Command("git", "show", "--full-index", afterCommitID)
} else {
c, _ := commit.Parent(0)
cmd = exec.Command("git", "diff", "--full-index", "-M", c.ID.String(), afterCommitID)
}
} else {
cmd = exec.Command("git", "diff", "--full-index", "-M", beforeCommitID, afterCommitID)
}
cmd.Dir = repoPath
cmd.Stderr = os.Stderr
stdout, err := cmd.StdoutPipe()
if err != nil {
return nil, fmt.Errorf("StdoutPipe: %v", err)
}
if err = cmd.Start(); err != nil {
return nil, fmt.Errorf("Start: %v", err)
}
pid := process.Add(fmt.Sprintf("GetDiffRange [repo_path: %s]", repoPath), cmd)
defer process.Remove(pid)
diff, err := ParsePatch(maxLines, maxLineCharacteres, maxFiles, stdout)
if err != nil {
return nil, fmt.Errorf("ParsePatch: %v", err)
}
if err = cmd.Wait(); err != nil {
return nil, fmt.Errorf("Wait: %v", err)
}
return diff, nil
}
type RawDiffType string
const (
RAW_DIFF_NORMAL RawDiffType = "diff"
RAW_DIFF_PATCH RawDiffType = "patch"
)
// GetRawDiff dumps diff results of repository in given commit ID to io.Writer.
// TODO: move this function to gogits/git-module
func GetRawDiff(repoPath, commitID string, diffType RawDiffType, writer io.Writer) error {
repo, err := git.OpenRepository(repoPath)
if err != nil {
return fmt.Errorf("OpenRepository: %v", err)
}
commit, err := repo.GetCommit(commitID)
if err != nil {
return fmt.Errorf("GetCommit: %v", err)
}
var cmd *exec.Cmd
switch diffType {
case RAW_DIFF_NORMAL:
if commit.ParentCount() == 0 {
cmd = exec.Command("git", "show", commitID)
} else {
c, _ := commit.Parent(0)
cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID)
}
case RAW_DIFF_PATCH:
if commit.ParentCount() == 0 {
cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID)
} else {
c, _ := commit.Parent(0)
query := fmt.Sprintf("%s...%s", commitID, c.ID.String())
cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", query)
}
default:
return fmt.Errorf("invalid diffType: %s", diffType)
}
stderr := new(bytes.Buffer)
cmd.Dir = repoPath
cmd.Stdout = writer
cmd.Stderr = stderr
if err = cmd.Run(); err != nil {
return fmt.Errorf("Run: %v - %s", err, stderr)
}
return nil
return NewDiff(gitDiff), nil
}
func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
return GetDiffRange(repoPath, "", commitID, maxLines, maxLineCharacteres, maxFiles)
gitDiff, err := git.GetDiffCommit(repoPath, commitID, maxLines, maxLineCharacteres, maxFiles)
if err != nil {
return nil, fmt.Errorf("GetDiffCommit: %v", err)
}
return NewDiff(gitDiff), nil
}

View File

@@ -1,9 +1,15 @@
// Copyright 2016 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 models
import (
dmp "github.com/sergi/go-diff/diffmatchpatch"
"html/template"
"testing"
"github.com/gogits/git-module"
dmp "github.com/sergi/go-diff/diffmatchpatch"
)
func assertEqual(t *testing.T, s1 string, s2 template.HTML) {
@@ -12,24 +18,24 @@ func assertEqual(t *testing.T, s1 string, s2 template.HTML) {
}
}
func assertLineEqual(t *testing.T, d1 *DiffLine, d2 *DiffLine) {
func assertLineEqual(t *testing.T, d1 *git.DiffLine, d2 *git.DiffLine) {
if d1 != d2 {
t.Errorf("%v should be equal %v", d1, d2)
}
}
func TestDiffToHTML(t *testing.T) {
func Test_diffToHTML(t *testing.T) {
assertEqual(t, "+foo <span class=\"added-code\">bar</span> biz", diffToHTML([]dmp.Diff{
dmp.Diff{dmp.DiffEqual, "foo "},
dmp.Diff{dmp.DiffInsert, "bar"},
dmp.Diff{dmp.DiffDelete, " baz"},
dmp.Diff{dmp.DiffEqual, " biz"},
}, DIFF_LINE_ADD))
}, git.DIFF_LINE_ADD))
assertEqual(t, "-foo <span class=\"removed-code\">bar</span> biz", diffToHTML([]dmp.Diff{
dmp.Diff{dmp.DiffEqual, "foo "},
dmp.Diff{dmp.DiffDelete, "bar"},
dmp.Diff{dmp.DiffInsert, " baz"},
dmp.Diff{dmp.DiffEqual, " biz"},
}, DIFF_LINE_DEL))
}, git.DIFF_LINE_DEL))
}

View File

@@ -16,8 +16,8 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
var (
@@ -26,7 +26,7 @@ var (
// Issue represents an issue or pull request of repository.
type Issue struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64 `xorm:"INDEX UNIQUE(repo_index)"`
Repo *Repository `xorm:"-"`
Index int64 `xorm:"UNIQUE(repo_index)"` // Index in one repository.
@@ -325,7 +325,7 @@ func (issue *Issue) clearLabels(e *xorm.Session) (err error) {
func (issue *Issue) ClearLabels(doer *User) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -370,7 +370,7 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
// ReplaceLabels removes all current labels and add new labels to the issue.
func (issue *Issue) ReplaceLabels(labels []*Label) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -455,7 +455,7 @@ func (i *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository, isCl
// ChangeStatus changes issue status to open or closed.
func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -744,7 +744,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) {
// NewIssue creates new issue with labels and attachments for repository.
func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -1007,7 +1007,7 @@ func GetParticipantsByIssueID(issueID int64) ([]*User, error) {
// IssueUser represents an issue-user relation.
type IssueUser struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UID int64 `xorm:"INDEX"` // User ID.
IssueID int64
RepoID int64 `xorm:"INDEX"`
@@ -1062,7 +1062,7 @@ func newIssueUsers(e *xorm.Session, repo *Repository, issue *Issue) error {
// NewIssueUsers adds new issue-user relations for new issue of repository.
func NewIssueUsers(repo *Repository, issue *Issue) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -1213,7 +1213,7 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
sess := x.Where("issue.repo_id = ?", opts.RepoID).And("is_pull = ?", opts.IsPull)
if len(opts.Labels) > 0 && opts.Labels != "0" {
labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ","))
labelIDs := tool.StringsToInt64s(strings.Split(opts.Labels, ","))
if len(labelIDs) > 0 {
sess.Join("INNER", "issue_label", "issue.id = issue_id").In("label_id", labelIDs)
}
@@ -1391,7 +1391,7 @@ func updateIssueUserByAssignee(e *xorm.Session, issue *Issue) (err error) {
// UpdateIssueUserByAssignee updates issue-user relation for assignee.
func UpdateIssueUserByAssignee(issue *Issue) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -15,7 +15,7 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/pkg/tool"
)
var labelColorPattern = regexp.MustCompile("#([a-fA-F0-9]{6})")
@@ -54,7 +54,7 @@ func GetLabelTemplateFile(name string) ([][2]string, error) {
// Label represents a label of repository for issues.
type Label struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64 `xorm:"INDEX"`
Name string
Color string `xorm:"VARCHAR(7)"`
@@ -68,7 +68,7 @@ func (label *Label) APIFormat() *api.Label {
return &api.Label{
ID: label.ID,
Name: label.Name,
Color: label.Color,
Color: strings.TrimLeft(label.Color, "#"),
}
}
@@ -103,7 +103,28 @@ func NewLabels(labels ...*Label) error {
return err
}
// getLabelOfRepoByID returns a label by ID in given repository.
// getLabelOfRepoByName returns a label by Name in given repository.
// If pass repoID as 0, then ORM will ignore limitation of repository
// and can return arbitrary label with any valid ID.
func getLabelOfRepoByName(e Engine, repoID int64, labelName string) (*Label, error) {
if len(labelName) <= 0 {
return nil, ErrLabelNotExist{0, repoID}
}
l := &Label{
Name: labelName,
RepoID: repoID,
}
has, err := x.Get(l)
if err != nil {
return nil, err
} else if !has {
return nil, ErrLabelNotExist{0, l.RepoID}
}
return l, nil
}
// getLabelInRepoByID returns a label by ID in given repository.
// If pass repoID as 0, then ORM will ignore limitation of repository
// and can return arbitrary label with any valid ID.
func getLabelOfRepoByID(e Engine, repoID, labelID int64) (*Label, error) {
@@ -134,11 +155,16 @@ func GetLabelOfRepoByID(repoID, labelID int64) (*Label, error) {
return getLabelOfRepoByID(x, repoID, labelID)
}
// GetLabelOfRepoByName returns a label by name in given repository.
func GetLabelOfRepoByName(repoID int64, labelName string) (*Label, error) {
return getLabelOfRepoByName(x, repoID, labelName)
}
// GetLabelsInRepoByIDs returns a list of labels by IDs in given repository,
// it silently ignores label IDs that are not belong to the repository.
func GetLabelsInRepoByIDs(repoID int64, labelIDs []int64) ([]*Label, error) {
labels := make([]*Label, 0, len(labelIDs))
return labels, x.Where("repo_id = ?", repoID).In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
return labels, x.Where("repo_id = ?", repoID).In("id", tool.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
}
// GetLabelsByRepoID returns all labels that belong to given repository by ID.
@@ -161,7 +187,7 @@ func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) {
}
labels := make([]*Label, 0, len(labelIDs))
return labels, e.Where("id > 0").In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
return labels, e.Where("id > 0").In("id", tool.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
}
// GetLabelsByIssueID returns all labels that belong to given issue by ID.
@@ -190,7 +216,7 @@ func DeleteLabel(repoID, labelID int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -213,7 +239,7 @@ func DeleteLabel(repoID, labelID int64) error {
// IssueLabel represetns an issue-lable relation.
type IssueLabel struct {
ID int64 `xorm:"pk autoincr"`
ID int64
IssueID int64 `xorm:"UNIQUE(s)"`
LabelID int64 `xorm:"UNIQUE(s)"`
}
@@ -256,7 +282,7 @@ func NewIssueLabel(issue *Issue, label *Label) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -285,7 +311,7 @@ func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label) (err error)
// NewIssueLabels creates a list of issue-label relations.
func NewIssueLabels(issue *Issue, labels []*Label) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -335,7 +361,7 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) {
// DeleteIssueLabel deletes issue-label relation.
func DeleteIssueLabel(issue *Issue, label *Label) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -10,9 +10,9 @@ import (
"github.com/Unknwon/com"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/markdown"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/mailer"
"github.com/gogits/gogs/pkg/markup"
"github.com/gogits/gogs/pkg/setting"
)
func (issue *Issue) MailSubject() string {
@@ -155,20 +155,19 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string)
tos = append(tos, mentions[i])
}
mailer.SendIssueMentionMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), GetUserEmailsByNames(tos))
return nil
}
// MailParticipants sends new issue thread created emails to repository watchers
// and mentioned people.
func (issue *Issue) MailParticipants() (err error) {
mentions := markdown.FindAllMentions(issue.Content)
mentions := markup.FindAllMentions(issue.Content)
if err = updateIssueMentions(x, issue.ID, mentions); err != nil {
return fmt.Errorf("UpdateIssueMentions [%d]: %v", issue.ID, err)
}
if err = mailIssueCommentToParticipants(issue, issue.Poster, mentions); err != nil {
log.Error(4, "mailIssueCommentToParticipants: %v", err)
log.Error(2, "mailIssueCommentToParticipants: %v", err)
}
return nil

View File

@@ -20,8 +20,8 @@ import (
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/auth/ldap"
"github.com/gogits/gogs/modules/auth/pam"
"github.com/gogits/gogs/pkg/auth/ldap"
"github.com/gogits/gogs/pkg/auth/pam"
)
type LoginType int
@@ -103,7 +103,7 @@ func (cfg *PAMConfig) ToDB() ([]byte, error) {
// LoginSource represents an external way for authorizing users.
type LoginSource struct {
ID int64 `xorm:"pk autoincr"`
ID int64
Type LoginType
Name string `xorm:"UNIQUE"`
IsActived bool `xorm:"NOT NULL DEFAULT false"`
@@ -327,6 +327,16 @@ func LoginViaLDAP(user *User, login, password string, source *LoginSource, autoR
IsActive: true,
IsAdmin: isAdmin,
}
ok, err := IsUserExist(0, user.Name)
if err != nil {
return user, err
}
if ok {
return user, UpdateUser(user)
}
return user, CreateUser(user)
}

View File

@@ -13,7 +13,7 @@ import (
"github.com/go-xorm/xorm"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/pkg/tool"
)
const _MIN_DB_VER = 10
@@ -105,7 +105,7 @@ Please save following instructions to somewhere and start working:
Once finished downloading,
1. Extract the archive and to upgrade steps as usual.
2. Run it once. To verify, you should see some migration traces.
2. Run it once. To verify, you should see some migration traces.
3. Once it starts web server successfully, stop it.
4. Now it's time to put back the release archive you originally intent to upgrade.
5. Enjoy!
@@ -153,16 +153,16 @@ func generateOrgRandsAndSalt(x *xorm.Engine) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
for _, org := range orgs {
if org.Rands, err = base.GetRandomString(10); err != nil {
if org.Rands, err = tool.RandomString(10); err != nil {
return err
}
if org.Salt, err = base.GetRandomString(10); err != nil {
if org.Salt, err = tool.RandomString(10); err != nil {
return err
}
if _, err = sess.Id(org.ID).Update(org); err != nil {

View File

@@ -23,7 +23,7 @@ func ldapUseSSLToSecurityProtocol(x *xorm.Engine) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -15,7 +15,7 @@ import (
"github.com/go-xorm/xorm"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
func generateAndMigrateGitHooks(x *xorm.Engine) (err error) {
@@ -67,6 +67,8 @@ func generateAndMigrateGitHooks(x *xorm.Engine) (err error) {
wikiPath := repoBase + ".wiki.git"
log.Trace("[%04d]: %s", idx, repoPath)
// Note: we should not create hookDir here because update hook file should already exists inside this direcotry,
// if this directory does not exist, the current setup is not correct anyway.
hookDir := filepath.Join(repoPath, "hooks")
customHookDir := filepath.Join(repoPath, "custom_hooks")
wikiHookDir := filepath.Join(wikiPath, "hooks")

View File

@@ -14,7 +14,7 @@ import (
"github.com/gogits/git-module"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
func updateRepositorySizes(x *xorm.Engine) (err error) {

View File

@@ -5,10 +5,18 @@
package migrations
import (
"fmt"
"github.com/go-xorm/xorm"
)
func removeInvalidProtectBranchWhitelist(x *xorm.Engine) error {
_, err := x.Exec("DELETE FROM protect_branch_whitelist WHERE protect_branch_id = 0")
exist, err := x.IsTableExist("protect_branch_whitelist")
if err != nil {
return fmt.Errorf("IsTableExist: %v", err)
} else if !exist {
return nil
}
_, err = x.Exec("DELETE FROM protect_branch_whitelist WHERE protect_branch_id = 0")
return err
}

View File

@@ -13,12 +13,12 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
// Milestone represents a milestone of repository.
type Milestone struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64 `xorm:"INDEX"`
Name string
Content string `xorm:"TEXT"`
@@ -115,7 +115,7 @@ func (m *Milestone) CountIssues(isClosed, includePulls bool) int64 {
// NewMilestone creates new milestone of repository.
func NewMilestone(m *Milestone) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -211,7 +211,7 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -254,7 +254,7 @@ func changeMilestoneIssueStats(e *xorm.Session, issue *Issue) error {
// for the milestone associated with the given issue.
func ChangeMilestoneIssueStats(issue *Issue) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -378,7 +378,7 @@ func DeleteMilestoneOfRepoByID(repoID, id int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -6,6 +6,7 @@ package models
import (
"fmt"
"net/url"
"strings"
"time"
@@ -17,16 +18,16 @@ import (
"github.com/gogits/git-module"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/sync"
"github.com/gogits/gogs/pkg/process"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/sync"
)
var MirrorQueue = sync.NewUniqueQueue(setting.Repository.MirrorQueueLength)
// Mirror represents mirror information of a repository.
type Mirror struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64
Repo *Repository `xorm:"-"`
Interval int // Hour.
@@ -70,6 +71,46 @@ func (m *Mirror) ScheduleNextUpdate() {
m.NextUpdate = time.Now().Add(time.Duration(m.Interval) * time.Hour)
}
// findPasswordInMirrorAddress returns start (inclusive) and end index (exclusive)
// of password portion of credentials in given mirror address.
// It returns a boolean value to indicate whether password portion is found.
func findPasswordInMirrorAddress(addr string) (start int, end int, found bool) {
// Find end of credentials (start of path)
end = strings.LastIndex(addr, "@")
if end == -1 {
return -1, -1, false
}
// Find delimiter of credentials (end of username)
start = strings.Index(addr, "://")
if start == -1 {
return -1, -1, false
}
start += 3
delim := strings.Index(addr[start:], ":")
if delim == -1 {
return -1, -1, false
}
delim += 1
if start+delim >= end {
return -1, -1, false // No password portion presented
}
return start + delim, end, true
}
// unescapeMirrorCredentials returns mirror address with unescaped credentials.
func unescapeMirrorCredentials(addr string) string {
start, end, found := findPasswordInMirrorAddress(addr)
if !found {
return addr
}
password, _ := url.QueryUnescape(addr[start:end])
return addr[:start] + password + addr[end:]
}
func (m *Mirror) readAddress() {
if len(m.address) > 0 {
return
@@ -83,10 +124,10 @@ func (m *Mirror) readAddress() {
m.address = cfg.Section("remote \"origin\"").Key("url").Value()
}
// HandleCloneUserCredentials replaces user credentials from HTTP/HTTPS URL
// HandleMirrorCredentials replaces user credentials from HTTP/HTTPS URL
// with placeholder <credentials>.
// It will fail for any other forms of clone addresses.
func HandleCloneUserCredentials(url string, mosaics bool) string {
// It returns original string if protocol is not HTTP/HTTPS.
func HandleMirrorCredentials(url string, mosaics bool) string {
i := strings.Index(url, "@")
if i == -1 {
return url
@@ -104,21 +145,37 @@ func HandleCloneUserCredentials(url string, mosaics bool) string {
// Address returns mirror address from Git repository config without credentials.
func (m *Mirror) Address() string {
m.readAddress()
return HandleCloneUserCredentials(m.address, false)
return HandleMirrorCredentials(m.address, false)
}
// MosaicsAddress returns mirror address from Git repository config with credentials under mosaics.
func (m *Mirror) MosaicsAddress() string {
m.readAddress()
return HandleCloneUserCredentials(m.address, true)
return HandleMirrorCredentials(m.address, true)
}
// FullAddress returns mirror address from Git repository config.
func (m *Mirror) FullAddress() string {
// RawAddress returns raw mirror address directly from Git repository config.
func (m *Mirror) RawAddress() string {
m.readAddress()
return m.address
}
// FullAddress returns mirror address from Git repository config with unescaped credentials.
func (m *Mirror) FullAddress() string {
m.readAddress()
return unescapeMirrorCredentials(m.address)
}
// escapeCredentials returns mirror address with escaped credentials.
func escapeMirrorCredentials(addr string) string {
start, end, found := findPasswordInMirrorAddress(addr)
if !found {
return addr
}
return addr[:start] + url.QueryEscape(addr[start:end]) + addr[end:]
}
// SaveAddress writes new address to Git repository config.
func (m *Mirror) SaveAddress(addr string) error {
configPath := m.Repo.GitConfigPath()
@@ -127,7 +184,7 @@ func (m *Mirror) SaveAddress(addr string) error {
return fmt.Errorf("Load: %v", err)
}
cfg.Section("remote \"origin\"").Key("url").SetValue(addr)
cfg.Section(`remote "origin"`).Key("url").SetValue(escapeMirrorCredentials(addr))
return cfg.SaveToIndent(configPath, "\t")
}
@@ -140,7 +197,7 @@ func (m *Mirror) runSync() bool {
// Do a fast-fail testing against on repository URL to ensure it is accessible under
// good condition to prevent long blocking on URL resolution without syncing anything.
if !git.IsRepoURLAccessible(git.NetworkOptions{
URL: m.FullAddress(),
URL: m.RawAddress(),
Timeout: 10 * time.Second,
}) {
desc := fmt.Sprintf("Source URL of mirror repository '%s' is not accessible: %s", m.Repo.FullName(), m.MosaicsAddress())
@@ -263,9 +320,19 @@ func SyncMirrors() {
continue
}
// Update repository last updated time
if _, err = x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", time.Now().Unix(), m.RepoID); err != nil {
// Get latest commit date and compare to current repository updated time,
// update if latest commit date is newer.
commitDate, err := git.GetLatestCommitDate(m.Repo.RepoPath(), "")
if err != nil {
log.Error(2, "GetLatestCommitDate [%s]: %v", m.RepoID, err)
continue
} else if commitDate.Before(m.Repo.Updated) {
continue
}
if _, err = x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", commitDate.Unix(), m.RepoID); err != nil {
log.Error(2, "Update repository 'updated_unix' [%s]: %v", m.RepoID, err)
continue
}
}
}

74
models/mirror_test.go Normal file
View File

@@ -0,0 +1,74 @@
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func Test_findPasswordInMirrorAddress(t *testing.T) {
Convey("Find password portion in mirror address", t, func() {
testCases := []struct {
addr string
start, end int
found bool
password string
}{
{"http://localhost:3000/user/repo.git", -1, -1, false, ""},
{"http://user@localhost:3000/user/repo.git", -1, -1, false, ""},
{"http://user:@localhost:3000/user/repo.git", -1, -1, false, ""},
{"http://user:password@localhost:3000/user/repo.git", 12, 20, true, "password"},
{"http://username:my%3Asecure%3Bpassword@localhost:3000/user/repo.git", 16, 38, true, "my%3Asecure%3Bpassword"},
{"http://username:my%40secure%23password@localhost:3000/user/repo.git", 16, 38, true, "my%40secure%23password"},
{"http://username:@@localhost:3000/user/repo.git", 16, 17, true, "@"},
}
for _, tc := range testCases {
start, end, found := findPasswordInMirrorAddress(tc.addr)
So(start, ShouldEqual, tc.start)
So(end, ShouldEqual, tc.end)
So(found, ShouldEqual, tc.found)
if found {
So(tc.addr[start:end], ShouldEqual, tc.password)
}
}
})
}
func Test_unescapeMirrorCredentials(t *testing.T) {
Convey("Escape credentials in mirror address", t, func() {
testCases := []string{
"http://localhost:3000/user/repo.git", "http://localhost:3000/user/repo.git",
"http://user@localhost:3000/user/repo.git", "http://user@localhost:3000/user/repo.git",
"http://user:@localhost:3000/user/repo.git", "http://user:@localhost:3000/user/repo.git",
"http://user:password@localhost:3000/user/repo.git", "http://user:password@localhost:3000/user/repo.git",
"http://user:my%3Asecure%3Bpassword@localhost:3000/user/repo.git", "http://user:my:secure;password@localhost:3000/user/repo.git",
"http://user:my%40secure%23password@localhost:3000/user/repo.git", "http://user:my@secure#password@localhost:3000/user/repo.git",
}
for i := 0; i < len(testCases); i += 2 {
So(unescapeMirrorCredentials(testCases[i]), ShouldEqual, testCases[i+1])
}
})
}
func Test_escapeMirrorCredentials(t *testing.T) {
Convey("Escape credentials in mirror address", t, func() {
testCases := []string{
"http://localhost:3000/user/repo.git", "http://localhost:3000/user/repo.git",
"http://user@localhost:3000/user/repo.git", "http://user@localhost:3000/user/repo.git",
"http://user:@localhost:3000/user/repo.git", "http://user:@localhost:3000/user/repo.git",
"http://user:password@localhost:3000/user/repo.git", "http://user:password@localhost:3000/user/repo.git",
"http://user:my:secure;password@localhost:3000/user/repo.git", "http://user:my%3Asecure%3Bpassword@localhost:3000/user/repo.git",
"http://user:my@secure#password@localhost:3000/user/repo.git", "http://user:my%40secure%23password@localhost:3000/user/repo.git",
}
for i := 0; i < len(testCases); i += 2 {
So(escapeMirrorCredentials(testCases[i]), ShouldEqual, testCases[i+1])
}
})
}

View File

@@ -24,10 +24,10 @@ import (
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/models/migrations"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
// Engine represents a xorm engine or session.
// Engine represents a XORM engine or session.
type Engine interface {
Delete(interface{}) (int64, error)
Exec(string, ...interface{}) (sql.Result, error)
@@ -43,13 +43,6 @@ type Engine interface {
Where(interface{}, ...interface{}) *xorm.Session
}
func sessionRelease(sess *xorm.Session) {
if !sess.IsCommitedOrRollbacked {
sess.Rollback()
}
sess.Close()
}
var (
x *xorm.Engine
tables []interface{}
@@ -64,7 +57,7 @@ var (
func init() {
tables = append(tables,
new(User), new(PublicKey), new(AccessToken),
new(User), new(PublicKey), new(AccessToken), new(TwoFactor), new(TwoFactorRecoveryCode),
new(Repository), new(DeployKey), new(Collaboration), new(Access), new(Upload),
new(Watch), new(Star), new(Follow), new(Action),
new(Issue), new(PullRequest), new(Comment), new(Attachment), new(IssueUser),
@@ -302,7 +295,9 @@ func DumpDatabase(dirPath string) (err error) {
}
// ImportDatabase imports data from backup archive.
func ImportDatabase(dirPath string) (err error) {
func ImportDatabase(dirPath string, verbose bool) (err error) {
snakeMapper := core.SnakeMapper{}
// Purposely create a local variable to not modify global variable
tables := append(tables, new(Version))
for _, table := range tables {
@@ -312,6 +307,10 @@ func ImportDatabase(dirPath string) (err error) {
continue
}
if verbose {
log.Trace("Importing table '%s'...", tableName)
}
if err = x.DropTables(table); err != nil {
return fmt.Errorf("fail to drop table '%s': %v", tableName, err)
} else if err = x.Sync2(table); err != nil {
@@ -353,6 +352,15 @@ func ImportDatabase(dirPath string) (err error) {
return fmt.Errorf("fail to insert strcut: %v", err)
}
}
// PostgreSQL needs manually reset table sequence for auto increment keys
if setting.UsePostgreSQL {
rawTableName := snakeMapper.Obj2Table(tableName)
seqName := rawTableName + "_id_seq"
if _, err = x.Exec(fmt.Sprintf(`SELECT setval('%s', COALESCE((SELECT MAX(id)+1 FROM "%s"), 1), false);`, seqName, rawTableName)); err != nil {
return fmt.Errorf("fail to reset table '%s' sequence: %v", rawTableName, err)
}
}
}
return nil
}

View File

@@ -124,7 +124,7 @@ func CreateOrganization(org, owner *User) (err error) {
org.NumMembers = 1
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -208,7 +208,7 @@ func DeleteOrganization(org *User) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -237,7 +237,7 @@ func DeleteOrganization(org *User) (err error) {
// OrgUser represents an organization-user relation.
type OrgUser struct {
ID int64 `xorm:"pk autoincr"`
ID int64
Uid int64 `xorm:"INDEX UNIQUE(s)"`
OrgID int64 `xorm:"INDEX UNIQUE(s)"`
IsPublic bool
@@ -405,7 +405,7 @@ func RemoveOrgUser(orgID, userID int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}

View File

@@ -16,7 +16,7 @@ const OWNER_TEAM = "Owners"
// Team represents a organization team.
type Team struct {
ID int64 `xorm:"pk autoincr"`
ID int64
OrgID int64 `xorm:"INDEX"`
LowerName string
Name string
@@ -139,7 +139,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -199,7 +199,7 @@ func (t *Team) RemoveRepository(repoID int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -321,7 +321,7 @@ func UpdateTeam(t *Team, authChanged bool) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -368,7 +368,7 @@ func DeleteTeam(t *Team) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -406,7 +406,7 @@ func DeleteTeam(t *Team) error {
// TeamUser represents an team-user relation.
type TeamUser struct {
ID int64 `xorm:"pk autoincr"`
ID int64
OrgID int64 `xorm:"INDEX"`
TeamID int64 `xorm:"UNIQUE(s)"`
UID int64 `xorm:"UNIQUE(s)"`
@@ -450,10 +450,11 @@ func getUserTeams(e Engine, orgID, userID int64) ([]*Team, error) {
return nil, err
}
teamIDs := make([]int64, len(teamUsers))
teamIDs := make([]int64, len(teamUsers)+1)
for i := range teamUsers {
teamIDs[i] = teamUsers[i].TeamID
}
teamIDs[len(teamUsers)] = -1
teams := make([]*Team, 0, len(teamIDs))
return teams, e.Where("org_id = ?", orgID).In("id", teamIDs).Find(&teams)
@@ -487,7 +488,7 @@ func AddTeamMember(orgID, teamID, userID int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -591,7 +592,7 @@ func removeTeamMember(e Engine, orgID, teamID, uid int64) error {
// RemoveTeamMember removes member from given team of given organization.
func RemoveTeamMember(orgID, teamID, uid int64) error {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}

View File

@@ -19,9 +19,9 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/sync"
"github.com/gogits/gogs/pkg/process"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/sync"
)
var PullRequestQueue = sync.NewUniqueQueue(setting.Repository.PullRequestQueueLength)
@@ -43,7 +43,7 @@ const (
// PullRequest represents relation between pull request and repositories.
type PullRequest struct {
ID int64 `xorm:"pk autoincr"`
ID int64
Type PullRequestType
Status PullRequestStatus
@@ -183,16 +183,24 @@ func (pr *PullRequest) CanAutoMerge() bool {
return pr.Status == PULL_REQUEST_STATUS_MERGEABLE
}
// MergeStyle represents the approach to merge commits into base branch.
type MergeStyle string
const (
MERGE_STYLE_REGULAR MergeStyle = "create_merge_commit"
MERGE_STYLE_REBASE MergeStyle = "rebase_before_merging"
)
// Merge merges pull request to base repository.
// FIXME: add repoWorkingPull make sure two merges does not happen at same time.
func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error) {
func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle MergeStyle) (err error) {
defer func() {
go HookQueue.Add(pr.BaseRepo.ID)
go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false)
}()
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -233,31 +241,48 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
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),
"git", "fetch", "head_repo"); err != nil {
return fmt.Errorf("git fetch [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
}
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
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)
// Check if merge style is allowed, reset to default style if not
if mergeStyle == MERGE_STYLE_REBASE && !pr.BaseRepo.PullsAllowRebase {
mergeStyle = MERGE_STYLE_REGULAR
}
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)
switch mergeStyle {
case MERGE_STYLE_REGULAR: // Create merge commit
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
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)
}
case MERGE_STYLE_REBASE: // Rebase before merging
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge (git rebase): %s", tmpBasePath),
"git", "rebase", "-q", pr.BaseBranch, "head_repo/"+pr.HeadBranch); err != nil {
return fmt.Errorf("git rebase [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
}
default:
return fmt.Errorf("unknown merge style: %s", mergeStyle)
}
// Push back to upstream.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge (git push): %s", tmpBasePath),
"git", "push", baseGitRepo.Path, pr.BaseBranch); err != nil {
"git", "push", "head_repo", "HEAD:"+pr.BaseBranch); err != nil {
return fmt.Errorf("git push: %s", stderr)
}
@@ -303,7 +328,6 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
return nil
}
// TODO: when squash commits, no need to append merge commit.
// It is possible that head branch is not fully sync with base branch for merge commits,
// so we need to get latest head commit and append merge commit manully
// to avoid strange diff commits produced.
@@ -312,7 +336,9 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
log.Error(2, "GetBranchCommit: %v", err)
return nil
}
l.PushFront(mergeCommit)
if mergeStyle == MERGE_STYLE_REGULAR {
l.PushFront(mergeCommit)
}
commits, err := ListToPushCommits(l).ToApiPayloadCommits(pr.BaseRepo.RepoPath(), pr.BaseRepo.HTMLURL())
if err != nil {
@@ -323,8 +349,8 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
p := &api.PushPayload{
Ref: git.BRANCH_PREFIX + pr.BaseBranch,
Before: pr.MergeBase,
After: pr.MergedCommitID,
CompareURL: setting.AppUrl + pr.BaseRepo.ComposeCompareURL(pr.MergeBase, pr.MergedCommitID),
After: mergeCommit.ID.String(),
CompareURL: setting.AppURL + pr.BaseRepo.ComposeCompareURL(pr.MergeBase, pr.MergedCommitID),
Commits: commits,
Repo: pr.BaseRepo.APIFormat(nil),
Pusher: pr.HeadRepo.MustOwner().APIFormat(),
@@ -367,10 +393,16 @@ func (pr *PullRequest) testPatch() (err error) {
return fmt.Errorf("UpdateLocalCopy [%d]: %v", pr.BaseRepoID, err)
}
args := []string{"apply", "--check"}
if pr.BaseRepo.PullsIgnoreWhitespace {
args = append(args, "--ignore-whitespace")
}
args = append(args, patchPath)
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)
"git", args...)
if err != nil {
log.Trace("PullRequest[%d].testPatch (apply): has conflit\n%s", pr.ID, stderr)
pr.Status = PULL_REQUEST_STATUS_CONFLICT
@@ -382,7 +414,7 @@ func (pr *PullRequest) testPatch() (err error) {
// NewPullRequest creates new pull request with labels for repository.
func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -17,12 +17,12 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/pkg/process"
)
// Release represents a release of repository.
type Release struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64
Repo *Repository `xorm:"-"`
PublisherID int64
@@ -175,7 +175,7 @@ func NewRelease(gitRepo *git.Repository, r *Release, uuids []string) error {
r.LowerTagName = strings.ToLower(r.TagName)
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -289,7 +289,7 @@ func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bo
r.PublisherID = doer.ID
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -27,11 +27,11 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/bindata"
"github.com/gogits/gogs/modules/markdown"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/sync"
"github.com/gogits/gogs/pkg/bindata"
"github.com/gogits/gogs/pkg/markup"
"github.com/gogits/gogs/pkg/process"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/sync"
)
var repoWorkingPool = sync.NewExclusivePool()
@@ -141,7 +141,7 @@ func NewRepoContext() {
// Repository contains information of a repository.
type Repository struct {
ID int64 `xorm:"pk autoincr"`
ID int64
OwnerID int64 `xorm:"UNIQUE(s)"`
Owner *User `xorm:"-"`
LowerName string `xorm:"UNIQUE(s) INDEX NOT NULL"`
@@ -184,6 +184,8 @@ type Repository struct {
ExternalTrackerStyle string
ExternalMetas map[string]string `xorm:"-"`
EnablePulls bool `xorm:"NOT NULL DEFAULT true"`
PullsIgnoreWhitespace bool `xorm:"NOT NULL DEFAULT false"`
PullsAllowRebase bool `xorm:"NOT NULL DEFAULT false"`
IsFork bool `xorm:"NOT NULL DEFAULT false"`
ForkID int64
@@ -219,7 +221,7 @@ func (repo *Repository) AfterSet(colName string, _ xorm.Cell) {
repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
case "external_tracker_style":
if len(repo.ExternalTrackerStyle) == 0 {
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC
repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_NUMERIC
}
case "created_unix":
repo.Created = time.Unix(repo.CreatedUnix, 0).Local()
@@ -279,13 +281,15 @@ func (repo *Repository) FullName() string {
}
func (repo *Repository) HTMLURL() string {
return setting.AppUrl + repo.FullName()
return setting.AppURL + repo.FullName()
}
// This method assumes following fields have been assigned with valid values:
// Required - BaseRepo (if fork)
// Arguments that are allowed to be nil: permission
func (repo *Repository) APIFormat(permission *api.Permission) *api.Repository {
cloneLink := repo.CloneLink()
return &api.Repository{
apiRepo := &api.Repository{
ID: repo.ID,
Owner: repo.Owner.APIFormat(),
Name: repo.Name,
@@ -293,6 +297,9 @@ func (repo *Repository) APIFormat(permission *api.Permission) *api.Repository {
Description: repo.Description,
Private: repo.IsPrivate,
Fork: repo.IsFork,
Empty: repo.IsBare,
Mirror: repo.IsMirror,
Size: repo.Size,
HTMLURL: repo.HTMLURL(),
SSHURL: cloneLink.SSH,
CloneURL: cloneLink.HTTPS,
@@ -306,6 +313,11 @@ func (repo *Repository) APIFormat(permission *api.Permission) *api.Repository {
Updated: repo.Updated,
Permissions: permission,
}
if repo.IsFork {
// FIXME: check precise permission for base repository
apiRepo.Parent = repo.BaseRepo.APIFormat(nil)
}
return apiRepo
}
func (repo *Repository) getOwner(e Engine) (err error) {
@@ -356,10 +368,10 @@ func (repo *Repository) ComposeMetas() map[string]string {
"repo": repo.Name,
}
switch repo.ExternalTrackerStyle {
case markdown.ISSUE_NAME_STYLE_ALPHANUMERIC:
repo.ExternalMetas["style"] = markdown.ISSUE_NAME_STYLE_ALPHANUMERIC
case markup.ISSUE_NAME_STYLE_ALPHANUMERIC:
repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_ALPHANUMERIC
default:
repo.ExternalMetas["style"] = markdown.ISSUE_NAME_STYLE_NUMERIC
repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_NUMERIC
}
}
@@ -458,7 +470,7 @@ func (repo *Repository) RelLink() string {
}
func (repo *Repository) Link() string {
return setting.AppSubUrl + "/" + repo.FullName()
return setting.AppSubURL + "/" + repo.FullName()
}
func (repo *Repository) ComposeCompareURL(oldCommitID, newCommitID string) string {
@@ -597,7 +609,7 @@ type CloneLink struct {
// ComposeHTTPSCloneURL returns HTTPS clone URL based on given owner and repository name.
func ComposeHTTPSCloneURL(owner, repo string) string {
return fmt.Sprintf("%s%s/%s.git", setting.AppUrl, owner, repo)
return fmt.Sprintf("%s%s/%s.git", setting.AppURL, owner, repo)
}
func (repo *Repository) cloneLink(isWiki bool) *CloneLink {
@@ -1013,13 +1025,13 @@ func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err
return fmt.Errorf("newRepoAction: %v", err)
}
return nil
return repo.loadAttributes(e)
}
// CreateRepository creates a repository for given user or organization.
func CreateRepository(doer, owner *User, opts CreateRepoOptions) (_ *Repository, err error) {
if !owner.CanCreateRepo() {
return nil, ErrReachLimitOfRepo{owner.MaxRepoCreation}
return nil, errors.ReachLimitOfRepo{owner.RepoCreationNum()}
}
repo := &Repository{
@@ -1035,7 +1047,7 @@ func CreateRepository(doer, owner *User, opts CreateRepoOptions) (_ *Repository,
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return nil, err
}
@@ -1164,7 +1176,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return fmt.Errorf("sess.Begin: %v", err)
}
@@ -1331,14 +1343,14 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
return fmt.Errorf("getOwner: %v", err)
}
if repo.Owner.IsOrganization() {
// Organization repository need to recalculate access table when visivility is changed.
// Organization repository need to recalculate access table when visivility is changed
if err = repo.recalculateTeamAccesses(e, 0); err != nil {
return fmt.Errorf("recalculateTeamAccesses: %v", err)
}
}
// Create/Remove git-daemon-export-ok for git-daemon...
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`)
// Create/Remove git-daemon-export-ok for git-daemon
daemonExportFile := path.Join(repo.RepoPath(), "git-daemon-export-ok")
if repo.IsPrivate && com.IsExist(daemonExportFile) {
if err = os.Remove(daemonExportFile); err != nil {
log.Error(4, "Failed to remove %s: %v", daemonExportFile, err)
@@ -1361,6 +1373,11 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
return fmt.Errorf("updateRepository[%d]: %v", forkRepos[i].ID, err)
}
}
// Change visibility of generated actions
if _, err = e.Where("repo_id = ?", repo.ID).Cols("is_private").Update(&Action{IsPrivate: repo.IsPrivate}); err != nil {
return fmt.Errorf("change action visibility of repository: %v", err)
}
}
return nil
@@ -1368,7 +1385,7 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -1402,7 +1419,7 @@ func DeleteRepository(uid, repoID int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -1619,7 +1636,7 @@ type SearchRepoOptions struct {
// SearchRepositoryByName takes keyword and part of repository name to search,
// it returns results in given range and number of total results.
func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int64, _ error) {
func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, count int64, err error) {
if opts.Page <= 0 {
opts.Page = 1
}
@@ -1638,15 +1655,14 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int
}
}
if len(opts.Keyword) > 0 {
sess.And("repo.lower_name LIKE ?", "%"+strings.ToLower(opts.Keyword)+"%")
sess.And("repo.lower_name LIKE ? OR repo.description LIKE ?", "%"+strings.ToLower(opts.Keyword)+"%", "%"+strings.ToLower(opts.Keyword)+"%")
}
if opts.OwnerID > 0 {
sess.And("repo.owner_id = ?", opts.OwnerID)
}
var countSess xorm.Session
countSess = *sess
count, err := countSess.Count(new(Repository))
// We need all fields (repo.*) in final list but only ID (repo.id) is good enough for counting.
count, err = sess.Clone().Distinct("repo.id").Count(new(Repository))
if err != nil {
return nil, 0, fmt.Errorf("Count: %v", err)
}
@@ -1985,12 +2001,12 @@ func (repos RepositoryList) loadAttributes(e Engine) error {
}
// Load owners
set := make(map[int64]*User)
userSet := make(map[int64]*User)
for i := range repos {
set[repos[i].OwnerID] = nil
userSet[repos[i].OwnerID] = nil
}
userIDs := make([]int64, 0, len(set))
for userID := range set {
userIDs := make([]int64, 0, len(userSet))
for userID := range userSet {
userIDs = append(userIDs, userID)
}
users := make([]*User, 0, len(userIDs))
@@ -1998,11 +2014,36 @@ func (repos RepositoryList) loadAttributes(e Engine) error {
return fmt.Errorf("find users: %v", err)
}
for i := range users {
set[users[i].ID] = users[i]
userSet[users[i].ID] = users[i]
}
for i := range repos {
repos[i].Owner = set[repos[i].OwnerID]
repos[i].Owner = userSet[repos[i].OwnerID]
}
// Load base repositories
repoSet := make(map[int64]*Repository)
for i := range repos {
if repos[i].IsFork {
repoSet[repos[i].ForkID] = nil
}
}
baseIDs := make([]int64, 0, len(repoSet))
for baseID := range repoSet {
baseIDs = append(baseIDs, baseID)
}
baseRepos := make([]*Repository, 0, len(baseIDs))
if err := e.Where("id > 0").In("id", baseIDs).Find(&baseRepos); err != nil {
return fmt.Errorf("find base repositories: %v", err)
}
for i := range baseRepos {
repoSet[baseRepos[i].ID] = baseRepos[i]
}
for i := range repos {
if repos[i].IsFork {
repos[i].BaseRepo = repoSet[repos[i].ForkID]
}
}
return nil
}
@@ -2054,7 +2095,7 @@ func (repos MirrorRepositoryList) LoadAttributes() error {
// Watch is connection request for receiving repository notification.
type Watch struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UserID int64 `xorm:"UNIQUE(watch)"`
RepoID int64 `xorm:"UNIQUE(watch)"`
}
@@ -2160,7 +2201,7 @@ func NotifyWatchers(act *Action) error {
// \/ \/
type Star struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UID int64 `xorm:"UNIQUE(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
}
@@ -2217,10 +2258,15 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) {
// HasForkedRepo checks if given user has already forked a repository.
// When user has already forked, it returns true along with the repository.
func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) {
func HasForkedRepo(ownerID, repoID int64) (*Repository, bool, error) {
repo := new(Repository)
has, _ := x.Where("owner_id = ? AND fork_id = ?", ownerID, repoID).Get(repo)
return repo, has
has, err := x.Where("owner_id = ? AND fork_id = ?", ownerID, repoID).Get(repo)
if err != nil {
return nil, false, err
} else if !has {
return nil, false, nil
}
return repo, true, repo.LoadAttributes()
}
// ForkRepository creates a fork of target repository under another user domain.
@@ -2238,7 +2284,7 @@ func ForkRepository(doer, owner *User, baseRepo *Repository, name, desc string)
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return nil, err
}

View File

@@ -11,7 +11,7 @@ import (
"github.com/Unknwon/com"
"github.com/gogits/git-module"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/pkg/tool"
)
type Branch struct {
@@ -119,7 +119,7 @@ func IsBranchOfRepoRequirePullRequest(repoID int64, name string) bool {
// If ID is 0, it creates a new record. Otherwise, updates existing record.
func UpdateProtectBranch(protectBranch *ProtectBranch) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -149,10 +149,10 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit
}
hasUsersChanged := false
validUserIDs := base.StringsToInt64s(strings.Split(protectBranch.WhitelistUserIDs, ","))
validUserIDs := tool.StringsToInt64s(strings.Split(protectBranch.WhitelistUserIDs, ","))
if protectBranch.WhitelistUserIDs != whitelistUserIDs {
hasUsersChanged = true
userIDs := base.StringsToInt64s(strings.Split(whitelistUserIDs, ","))
userIDs := tool.StringsToInt64s(strings.Split(whitelistUserIDs, ","))
validUserIDs = make([]int64, 0, len(userIDs))
for _, userID := range userIDs {
has, err := HasAccess(userID, repo, ACCESS_MODE_WRITE)
@@ -165,14 +165,14 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit
validUserIDs = append(validUserIDs, userID)
}
protectBranch.WhitelistUserIDs = strings.Join(base.Int64sToStrings(validUserIDs), ",")
protectBranch.WhitelistUserIDs = strings.Join(tool.Int64sToStrings(validUserIDs), ",")
}
hasTeamsChanged := false
validTeamIDs := base.StringsToInt64s(strings.Split(protectBranch.WhitelistTeamIDs, ","))
validTeamIDs := tool.StringsToInt64s(strings.Split(protectBranch.WhitelistTeamIDs, ","))
if protectBranch.WhitelistTeamIDs != whitelistTeamIDs {
hasTeamsChanged = true
teamIDs := base.StringsToInt64s(strings.Split(whitelistTeamIDs, ","))
teamIDs := tool.StringsToInt64s(strings.Split(whitelistTeamIDs, ","))
teams, err := GetTeamsHaveAccessToRepo(repo.OwnerID, repo.ID, ACCESS_MODE_WRITE)
if err != nil {
return fmt.Errorf("GetTeamsHaveAccessToRepo [org_id: %d, repo_id: %d]: %v", repo.OwnerID, repo.ID, err)
@@ -184,7 +184,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit
}
}
protectBranch.WhitelistTeamIDs = strings.Join(base.Int64sToStrings(validTeamIDs), ",")
protectBranch.WhitelistTeamIDs = strings.Join(tool.Int64sToStrings(validTeamIDs), ",")
}
// Make sure protectBranch.ID is not 0 for whitelists
@@ -228,7 +228,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -14,7 +14,7 @@ import (
// Collaboration represent the relation between an individual and a repository.
type Collaboration struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64 `xorm:"UNIQUE(s) INDEX NOT NULL"`
UserID int64 `xorm:"UNIQUE(s) INDEX NOT NULL"`
Mode AccessMode `xorm:"DEFAULT 2 NOT NULL"`
@@ -67,7 +67,7 @@ func (repo *Repository) AddCollaborator(u *User) error {
collaboration.Mode = ACCESS_MODE_WRITE
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -165,7 +165,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessM
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -174,7 +174,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessM
return fmt.Errorf("update collaboration: %v", err)
}
access := Access{
access := &Access{
UserID: userID,
RepoID: repo.ID,
}
@@ -207,7 +207,7 @@ func DeleteCollaboration(repo *Repository, userID int64) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -21,8 +21,9 @@ import (
git "github.com/gogits/git-module"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/pkg/process"
"github.com/gogits/gogs/pkg/setting"
)
// ___________ .___.__ __ ___________.__.__
@@ -92,13 +93,29 @@ func (repo *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) (
return fmt.Errorf("UpdateLocalCopyBranch [branch: %s]: %v", opts.OldBranch, err)
}
repoPath := repo.RepoPath()
localPath := repo.LocalCopyPath()
if opts.OldBranch != opts.NewBranch {
// Directly return error if new branch already exists in the server
if git.IsBranchExist(repoPath, opts.NewBranch) {
return errors.BranchAlreadyExists{opts.NewBranch}
}
// Otherwise, delete branch from local copy in case out of sync
if git.IsBranchExist(localPath, opts.NewBranch) {
if err = git.DeleteBranch(localPath, opts.NewBranch, git.DeleteBranchOptions{
Force: true,
}); err != nil {
return fmt.Errorf("DeleteBranch [name: %s]: %v", opts.NewBranch, err)
}
}
if err := repo.CheckoutNewBranch(opts.OldBranch, opts.NewBranch); err != nil {
return fmt.Errorf("CheckoutNewBranch [old_branch: %s, new_branch: %s]: %v", opts.OldBranch, opts.NewBranch, err)
}
}
localPath := repo.LocalCopyPath()
oldFilePath := path.Join(localPath, opts.OldTreeName)
filePath := path.Join(localPath, opts.NewTreeName)
os.MkdirAll(path.Dir(filePath), os.ModePerm)
@@ -307,7 +324,7 @@ func (repo *Repository) DeleteRepoFile(doer *User, opts DeleteRepoFileOptions) (
// Upload represent a uploaded file to a repo to be deleted when moved
type Upload struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UUID string `xorm:"uuid UNIQUE"`
Name string
}
@@ -380,7 +397,7 @@ func DeleteUploads(uploads ...*Upload) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -1,11 +1,12 @@
package models_test
import (
. "github.com/gogits/gogs/models"
. "github.com/smartystreets/goconvey/convey"
"testing"
"github.com/gogits/gogs/modules/markdown"
. "github.com/smartystreets/goconvey/convey"
. "github.com/gogits/gogs/models"
"github.com/gogits/gogs/pkg/markup"
)
func TestRepo(t *testing.T) {
@@ -24,7 +25,7 @@ func TestRepo(t *testing.T) {
Convey("It should be nil even if other settings are present", func() {
repo.EnableExternalTracker = false
repo.ExternalTrackerFormat = "http://someurl.com/{user}/{repo}/{issue}"
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC
repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_NUMERIC
So(repo.ComposeMetas(), ShouldEqual, map[string]string(nil))
})
})
@@ -33,17 +34,17 @@ func TestRepo(t *testing.T) {
repo.EnableExternalTracker = true
Convey("It should default to numeric issue style", func() {
metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC)
So(metas["style"], ShouldEqual, markup.ISSUE_NAME_STYLE_NUMERIC)
})
Convey("It should pass through numeric issue style setting", func() {
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC
repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_NUMERIC
metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC)
So(metas["style"], ShouldEqual, markup.ISSUE_NAME_STYLE_NUMERIC)
})
Convey("It should pass through alphanumeric issue style setting", func() {
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_ALPHANUMERIC
repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_ALPHANUMERIC
metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_ALPHANUMERIC)
So(metas["style"], ShouldEqual, markup.ISSUE_NAME_STYLE_ALPHANUMERIC)
})
Convey("It should contain the user name", func() {
metas := repo.ComposeMetas()

View File

@@ -23,9 +23,9 @@ import (
"golang.org/x/crypto/ssh"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/process"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
const (
@@ -43,7 +43,7 @@ const (
// PublicKey represents a user or deploy SSH public key.
type PublicKey struct {
ID int64 `xorm:"pk autoincr"`
ID int64
OwnerID int64 `xorm:"INDEX NOT NULL"`
Name string `xorm:"NOT NULL"`
Fingerprint string `xorm:"NOT NULL"`
@@ -194,11 +194,6 @@ func writeTmpKeyFile(content string) (string, error) {
// SSHKeyGenParsePublicKey extracts key type and length using ssh-keygen.
func SSHKeyGenParsePublicKey(key string) (string, int, error) {
// The ssh-keygen in Windows does not print key type, so no need go further.
if setting.IsWindows {
return "", 0, nil
}
tmpName, err := writeTmpKeyFile(key)
if err != nil {
return "", 0, fmt.Errorf("writeTmpKeyFile: %v", err)
@@ -223,7 +218,6 @@ func SSHKeyGenParsePublicKey(key string) (string, int, error) {
}
// SSHNativeParsePublicKey extracts the key type and length using the golang SSH library.
// NOTE: ed25519 is not supported.
func SSHNativeParsePublicKey(keyLine string) (string, int, error) {
fields := strings.Fields(keyLine)
if len(fields) < 2 {
@@ -272,7 +266,7 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) {
return "ecdsa", 384, nil
case ssh.KeyAlgoECDSA521:
return "ecdsa", 521, nil
case "ssh-ed25519": // TODO: replace with ssh constant when available
case ssh.KeyAlgoED25519:
return "ed25519", 256, nil
}
return "", 0, fmt.Errorf("unsupported key length detection for type: %s", pkey.Type())
@@ -295,9 +289,13 @@ func CheckPublicKeyString(content string) (_ string, err error) {
return "", errors.New("only a single line with a single key please")
}
// remove any unnecessary whitespace now
// Remove any unnecessary whitespace
content = strings.TrimSpace(content)
if !setting.SSH.MinimumKeySizeCheck {
return content, nil
}
var (
fnName string
keyType string
@@ -315,9 +313,6 @@ func CheckPublicKeyString(content string) (_ string, err error) {
}
log.Trace("Key info [native: %v]: %s-%d", setting.SSH.StartBuiltinServer, keyType, length)
if !setting.SSH.MinimumKeySizeCheck {
return content, nil
}
if minLen, found := setting.SSH.MinimumKeySizes[keyType]; found && length >= minLen {
return content, nil
} else if found && length < minLen {
@@ -422,7 +417,7 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return nil, err
}
@@ -484,7 +479,7 @@ func deletePublicKeys(e *xorm.Session, keyIDs ...int64) error {
return nil
}
_, err := e.In("id", strings.Join(base.Int64sToStrings(keyIDs), ",")).Delete(new(PublicKey))
_, err := e.In("id", strings.Join(tool.Int64sToStrings(keyIDs), ",")).Delete(new(PublicKey))
return err
}
@@ -504,7 +499,7 @@ func DeletePublicKey(doer *User, id int64) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -566,7 +561,7 @@ func RewriteAllPublicKeys() error {
// DeployKey represents deploy key information and its relation with repository.
type DeployKey struct {
ID int64 `xorm:"pk autoincr"`
ID int64
KeyID int64 `xorm:"UNIQUE(s) INDEX"`
RepoID int64 `xorm:"UNIQUE(s) INDEX"`
Name string
@@ -668,7 +663,7 @@ func AddDeployKey(repoID int64, name, content string) (*DeployKey, error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return nil, err
}
@@ -746,7 +741,7 @@ func DeleteDeployKey(doer *User, id int64) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -11,7 +11,7 @@ import (
. "github.com/smartystreets/goconvey/convey"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
func init() {

View File

@@ -10,12 +10,12 @@ import (
"github.com/go-xorm/xorm"
gouuid "github.com/satori/go.uuid"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/pkg/tool"
)
// AccessToken represents a personal access token.
type AccessToken struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UID int64 `xorm:"INDEX"`
Name string
Sha1 string `xorm:"UNIQUE VARCHAR(40)"`
@@ -49,7 +49,7 @@ func (t *AccessToken) AfterSet(colName string, _ xorm.Cell) {
// NewAccessToken creates new access token.
func NewAccessToken(t *AccessToken) error {
t.Sha1 = base.EncodeSha1(gouuid.NewV4().String())
t.Sha1 = tool.SHA1(gouuid.NewV4().String())
_, err := x.Insert(t)
return err
}

201
models/two_factor.go Normal file
View File

@@ -0,0 +1,201 @@
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
import (
"encoding/base64"
"fmt"
"strings"
"time"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
"github.com/pquerna/otp/totp"
log "gopkg.in/clog.v1"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
// TwoFactor represents a two-factor authentication token.
type TwoFactor struct {
ID int64
UserID int64 `xorm:"UNIQUE"`
Secret string
Created time.Time `xorm:"-"`
CreatedUnix int64
}
func (t *TwoFactor) BeforeInsert() {
t.CreatedUnix = time.Now().Unix()
}
func (t *TwoFactor) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "created_unix":
t.Created = time.Unix(t.CreatedUnix, 0).Local()
}
}
// ValidateTOTP returns true if given passcode is valid for two-factor authentication token.
// It also returns possible validation error.
func (t *TwoFactor) ValidateTOTP(passcode string) (bool, error) {
secret, err := base64.StdEncoding.DecodeString(t.Secret)
if err != nil {
return false, fmt.Errorf("DecodeString: %v", err)
}
decryptSecret, err := com.AESGCMDecrypt(tool.MD5Bytes(setting.SecretKey), secret)
if err != nil {
return false, fmt.Errorf("AESGCMDecrypt: %v", err)
}
return totp.Validate(passcode, string(decryptSecret)), nil
}
// IsUserEnabledTwoFactor returns true if user has enabled two-factor authentication.
func IsUserEnabledTwoFactor(userID int64) bool {
has, err := x.Where("user_id = ?", userID).Get(new(TwoFactor))
if err != nil {
log.Error(2, "IsUserEnabledTwoFactor [user_id: %d]: %v", userID, err)
}
return has
}
func generateRecoveryCodes(userID int64) ([]*TwoFactorRecoveryCode, error) {
recoveryCodes := make([]*TwoFactorRecoveryCode, 10)
for i := 0; i < 10; i++ {
code, err := tool.RandomString(10)
if err != nil {
return nil, fmt.Errorf("RandomString: %v", err)
}
recoveryCodes[i] = &TwoFactorRecoveryCode{
UserID: userID,
Code: strings.ToLower(code[:5] + "-" + code[5:]),
}
}
return recoveryCodes, nil
}
// NewTwoFactor creates a new two-factor authentication token and recovery codes for given user.
func NewTwoFactor(userID int64, secret string) error {
t := &TwoFactor{
UserID: userID,
}
// Encrypt secret
encryptSecret, err := com.AESGCMEncrypt(tool.MD5Bytes(setting.SecretKey), []byte(secret))
if err != nil {
return fmt.Errorf("AESGCMEncrypt: %v", err)
}
t.Secret = base64.StdEncoding.EncodeToString(encryptSecret)
recoveryCodes, err := generateRecoveryCodes(userID)
if err != nil {
return fmt.Errorf("generateRecoveryCodes: %v", err)
}
sess := x.NewSession()
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
if _, err = sess.Insert(t); err != nil {
return fmt.Errorf("insert two-factor: %v", err)
} else if _, err = sess.Insert(recoveryCodes); err != nil {
return fmt.Errorf("insert recovery codes: %v", err)
}
return sess.Commit()
}
// GetTwoFactorByUserID returns two-factor authentication token of given user.
func GetTwoFactorByUserID(userID int64) (*TwoFactor, error) {
t := new(TwoFactor)
has, err := x.Where("user_id = ?", userID).Get(t)
if err != nil {
return nil, err
} else if !has {
return nil, errors.TwoFactorNotFound{userID}
}
return t, nil
}
// DeleteTwoFactor removes two-factor authentication token and recovery codes of given user.
func DeleteTwoFactor(userID int64) (err error) {
sess := x.NewSession()
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
if _, err = sess.Where("user_id = ?", userID).Delete(new(TwoFactor)); err != nil {
return fmt.Errorf("delete two-factor: %v", err)
} else if err = deleteRecoveryCodesByUserID(sess, userID); err != nil {
return fmt.Errorf("deleteRecoveryCodesByUserID: %v", err)
}
return sess.Commit()
}
// TwoFactorRecoveryCode represents a two-factor authentication recovery code.
type TwoFactorRecoveryCode struct {
ID int64
UserID int64
Code string `xorm:"VARCHAR(11)"`
IsUsed bool
}
// GetRecoveryCodesByUserID returns all recovery codes of given user.
func GetRecoveryCodesByUserID(userID int64) ([]*TwoFactorRecoveryCode, error) {
recoveryCodes := make([]*TwoFactorRecoveryCode, 0, 10)
return recoveryCodes, x.Where("user_id = ?", userID).Find(&recoveryCodes)
}
func deleteRecoveryCodesByUserID(e Engine, userID int64) error {
_, err := e.Where("user_id = ?", userID).Delete(new(TwoFactorRecoveryCode))
return err
}
// RegenerateRecoveryCodes regenerates new set of recovery codes for given user.
func RegenerateRecoveryCodes(userID int64) error {
recoveryCodes, err := generateRecoveryCodes(userID)
if err != nil {
return fmt.Errorf("generateRecoveryCodes: %v", err)
}
sess := x.NewSession()
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
if err = deleteRecoveryCodesByUserID(sess, userID); err != nil {
return fmt.Errorf("deleteRecoveryCodesByUserID: %v", err)
} else if _, err = sess.Insert(recoveryCodes); err != nil {
return fmt.Errorf("insert new recovery codes: %v", err)
}
return sess.Commit()
}
// UseRecoveryCode validates recovery code of given user and marks it is used if valid.
func UseRecoveryCode(userID int64, code string) error {
recoveryCode := new(TwoFactorRecoveryCode)
has, err := x.Where("code = ?", code).And("is_used = ?", false).Get(recoveryCode)
if err != nil {
return fmt.Errorf("get unused code: %v", err)
} else if !has {
return errors.TwoFactorRecoveryCodeNotFound{code}
}
recoveryCode.IsUsed = true
if _, err = x.Id(recoveryCode.ID).Cols("is_used").Update(recoveryCode); err != nil {
return fmt.Errorf("mark code as used: %v", err)
}
return nil
}

View File

@@ -30,9 +30,9 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/avatar"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/avatar"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/tool"
)
type UserType int
@@ -44,7 +44,7 @@ const (
// User represents the object of individual and member of organization.
type User struct {
ID int64 `xorm:"pk autoincr"`
ID int64
LowerName string `xorm:"UNIQUE NOT NULL"`
Name string `xorm:"UNIQUE NOT NULL"`
FullName string
@@ -137,7 +137,7 @@ func (u *User) IsLocal() bool {
// HasForkedRepo checks if user has already forked a repository with given ID.
func (u *User) HasForkedRepo(repoID int64) bool {
_, has := HasForkedRepo(u.ID, repoID)
_, has, _ := HasForkedRepo(u.ID, repoID)
return has
}
@@ -175,23 +175,23 @@ func (u *User) CanImportLocal() bool {
// DashboardLink returns the user dashboard page link.
func (u *User) DashboardLink() string {
if u.IsOrganization() {
return setting.AppSubUrl + "/org/" + u.Name + "/dashboard/"
return setting.AppSubURL + "/org/" + u.Name + "/dashboard/"
}
return setting.AppSubUrl + "/"
return setting.AppSubURL + "/"
}
// HomeLink returns the user or organization home page link.
func (u *User) HomeLink() string {
return setting.AppSubUrl + "/" + u.Name
return setting.AppSubURL + "/" + u.Name
}
func (u *User) HTMLURL() string {
return setting.AppUrl + u.Name
return setting.AppURL + u.Name
}
// GenerateEmailActivateCode generates an activate code based on user information and given e-mail.
func (u *User) GenerateEmailActivateCode(email string) string {
code := base.CreateTimeLimitCode(
code := tool.CreateTimeLimitCode(
com.ToStr(u.ID)+email+u.LowerName+u.Passwd+u.Rands,
setting.Service.ActiveCodeLives, nil)
@@ -242,7 +242,7 @@ func (u *User) GenerateRandomAvatar() error {
// which includes app sub-url as prefix. However, it is possible
// to return full URL if user enables Gravatar-like service.
func (u *User) RelAvatarLink() string {
defaultImgUrl := setting.AppSubUrl + "/img/avatar_default.png"
defaultImgUrl := setting.AppSubURL + "/img/avatar_default.png"
if u.ID == -1 {
return defaultImgUrl
}
@@ -252,7 +252,7 @@ func (u *User) RelAvatarLink() string {
if !com.IsExist(u.CustomAvatarPath()) {
return defaultImgUrl
}
return setting.AppSubUrl + "/avatars/" + com.ToStr(u.ID)
return setting.AppSubURL + "/avatars/" + com.ToStr(u.ID)
case setting.DisableGravatar, setting.OfflineMode:
if !com.IsExist(u.CustomAvatarPath()) {
if err := u.GenerateRandomAvatar(); err != nil {
@@ -260,16 +260,16 @@ func (u *User) RelAvatarLink() string {
}
}
return setting.AppSubUrl + "/avatars/" + com.ToStr(u.ID)
return setting.AppSubURL + "/avatars/" + com.ToStr(u.ID)
}
return base.AvatarLink(u.AvatarEmail)
return tool.AvatarLink(u.AvatarEmail)
}
// AvatarLink returns user avatar absolute link.
func (u *User) AvatarLink() string {
link := u.RelAvatarLink()
if link[0] == '/' && link[1] != '/' {
return setting.AppUrl + strings.TrimPrefix(link, setting.AppSubUrl)[1:]
return setting.AppURL + strings.TrimPrefix(link, setting.AppSubURL)[1:]
}
return link
}
@@ -335,7 +335,7 @@ func (u *User) UploadAvatar(data []byte) error {
m := resize.Resize(avatar.AVATAR_SIZE, avatar.AVATAR_SIZE, img, resize.NearestNeighbor)
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -404,6 +404,11 @@ func (u *User) IsPublicMember(orgId int64) bool {
return IsPublicMembership(orgId, u.ID)
}
// IsEnabledTwoFactor returns true if user has enabled two-factor authentication.
func (u *User) IsEnabledTwoFactor() bool {
return IsUserEnabledTwoFactor(u.ID)
}
func (u *User) getOrganizationCount(e Engine) (int64, error) {
return e.Where("uid=?", u.ID).Count(new(OrgUser))
}
@@ -462,7 +467,7 @@ func (u *User) DisplayName() string {
}
func (u *User) ShortName(length int) string {
return base.EllipsisString(u.Name, length)
return tool.EllipsisString(u.Name, length)
}
// IsMailable checks if a user is elegible
@@ -479,15 +484,15 @@ func IsUserExist(uid int64, name string) (bool, error) {
if len(name) == 0 {
return false, nil
}
return x.Where("id!=?", uid).Get(&User{LowerName: strings.ToLower(name)})
return x.Where("id != ?", uid).Get(&User{LowerName: strings.ToLower(name)})
}
// GetUserSalt returns a ramdom user salt token.
func GetUserSalt() (string, error) {
return base.GetRandomString(10)
return tool.RandomString(10)
}
// NewGhostUser creates and returns a fake user for someone has deleted his/her account.
// NewGhostUser creates and returns a fake user for someone who has deleted his/her account.
func NewGhostUser() *User {
return &User{
ID: -1,
@@ -497,7 +502,7 @@ func NewGhostUser() *User {
}
var (
reservedUsernames = []string{"assets", "css", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatar", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
reservedUsernames = []string{"explore", "create", "assets", "css", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatar", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
reservedUserPatterns = []string{"*.keys"}
)
@@ -553,7 +558,7 @@ func CreateUser(u *User) (err error) {
u.LowerName = strings.ToLower(u.Name)
u.AvatarEmail = u.Email
u.Avatar = base.HashEmail(u.AvatarEmail)
u.Avatar = tool.HashEmail(u.AvatarEmail)
if u.Rands, err = GetUserSalt(); err != nil {
return err
}
@@ -564,7 +569,7 @@ func CreateUser(u *User) (err error) {
u.MaxRepoCreation = -1
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -594,19 +599,21 @@ func Users(page, pageSize int) ([]*User, error) {
return users, x.Limit(pageSize, (page-1)*pageSize).Where("type=0").Asc("id").Find(&users)
}
// get user by erify code
func getVerifyUser(code string) (user *User) {
if len(code) <= base.TimeLimitCodeLength {
// parseUserFromCode returns user by username encoded in code.
// It returns nil if code or username is invalid.
func parseUserFromCode(code string) (user *User) {
if len(code) <= tool.TIME_LIMIT_CODE_LENGTH {
return nil
}
// use tail hex username query user
hexStr := code[base.TimeLimitCodeLength:]
// Use tail hex username to query user
hexStr := code[tool.TIME_LIMIT_CODE_LENGTH:]
if b, err := hex.DecodeString(hexStr); err == nil {
if user, err = GetUserByName(string(b)); user != nil {
return user
} else if !errors.IsUserNotExist(err) {
log.Error(2, "GetUserByName: %v", err)
}
log.Error(4, "user.getVerifyUser: %v", err)
}
return nil
@@ -616,12 +623,12 @@ func getVerifyUser(code string) (user *User) {
func VerifyUserActiveCode(code string) (user *User) {
minutes := setting.Service.ActiveCodeLives
if user = getVerifyUser(code); user != nil {
if user = parseUserFromCode(code); user != nil {
// time limit code
prefix := code[:base.TimeLimitCodeLength]
prefix := code[:tool.TIME_LIMIT_CODE_LENGTH]
data := com.ToStr(user.ID) + user.Email + user.LowerName + user.Passwd + user.Rands
if base.VerifyTimeLimitCode(data, minutes, prefix) {
if tool.VerifyTimeLimitCode(data, minutes, prefix) {
return user
}
}
@@ -632,12 +639,12 @@ func VerifyUserActiveCode(code string) (user *User) {
func VerifyActiveEmailCode(code, email string) *EmailAddress {
minutes := setting.Service.ActiveCodeLives
if user := getVerifyUser(code); user != nil {
if user := parseUserFromCode(code); user != nil {
// time limit code
prefix := code[:base.TimeLimitCodeLength]
prefix := code[:tool.TIME_LIMIT_CODE_LENGTH]
data := com.ToStr(user.ID) + email + user.LowerName + user.Passwd + user.Rands
if base.VerifyTimeLimitCode(data, minutes, prefix) {
if tool.VerifyTimeLimitCode(data, minutes, prefix) {
emailAddress := &EmailAddress{Email: email}
if has, _ := x.Get(emailAddress); has {
return emailAddress
@@ -696,13 +703,13 @@ func updateUser(e Engine, u *User) error {
if len(u.AvatarEmail) == 0 {
u.AvatarEmail = u.Email
}
u.Avatar = base.HashEmail(u.AvatarEmail)
u.Avatar = tool.HashEmail(u.AvatarEmail)
}
u.LowerName = strings.ToLower(u.Name)
u.Location = base.TruncateString(u.Location, 255)
u.Website = base.TruncateString(u.Website, 255)
u.Description = base.TruncateString(u.Description, 255)
u.Location = tool.TruncateString(u.Location, 255)
u.Website = tool.TruncateString(u.Website, 255)
u.Description = tool.TruncateString(u.Description, 255)
_, err := e.Id(u.ID).AllCols().Update(u)
return err
@@ -832,7 +839,7 @@ func deleteUser(e *xorm.Session, u *User) error {
// but issues/comments/pulls will be kept and shown as someone has been deleted.
func DeleteUser(u *User) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -913,7 +920,7 @@ func GetAssigneeByID(repo *Repository, userID int64) (*User, error) {
return GetUserByID(userID)
}
// GetUserByName returns user by given name.
// GetUserByName returns a user by given name.
func GetUserByName(name string) (*User, error) {
if len(name) == 0 {
return nil, errors.UserNotExist{0, name}
@@ -1080,7 +1087,7 @@ func SearchUserByName(opts *SearchUserOptions) (users []*User, _ int64, _ error)
// Follow represents relations of user and his/her followers.
type Follow struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UserID int64 `xorm:"UNIQUE(follow)"`
FollowID int64 `xorm:"UNIQUE(follow)"`
}
@@ -1097,7 +1104,7 @@ func FollowUser(userID, followID int64) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -1123,7 +1130,7 @@ func UnfollowUser(userID, followID int64) (err error) {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -14,7 +14,7 @@ import (
// EmailAdresses is the list of all email addresses of a user. Can contain the
// primary email address, but is not obligatory.
type EmailAddress struct {
ID int64 `xorm:"pk autoincr"`
ID int64
UID int64 `xorm:"INDEX NOT NULL"`
Email string `xorm:"UNIQUE NOT NULL"`
IsActivated bool
@@ -126,7 +126,7 @@ func (email *EmailAddress) Activate() error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -188,7 +188,7 @@ func MakeEmailPrimary(email *EmailAddress) error {
}
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}

View File

@@ -22,9 +22,9 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models/errors"
"github.com/gogits/gogs/modules/httplib"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/sync"
"github.com/gogits/gogs/pkg/httplib"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/sync"
)
var HookQueue = sync.NewUniqueQueue(setting.Webhook.QueueLength)
@@ -92,7 +92,7 @@ const (
// Webhook represents a web hook object.
type Webhook struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64
OrgID int64
URL string `xorm:"url TEXT"`
@@ -294,7 +294,7 @@ func UpdateWebhook(w *Webhook) error {
// ID must be specified and do not assign unnecessary fields.
func deleteWebhook(bean *Webhook) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
@@ -349,12 +349,14 @@ const (
GOGS HookTaskType = iota + 1
SLACK
DISCORD
DINGTALK
)
var hookTaskTypes = map[string]HookTaskType{
"gogs": GOGS,
"slack": SLACK,
"discord": DISCORD,
"gogs": GOGS,
"slack": SLACK,
"discord": DISCORD,
"dingtalk": DINGTALK,
}
// ToHookTaskType returns HookTaskType by given name.
@@ -370,6 +372,8 @@ func (t HookTaskType) Name() string {
return "slack"
case DISCORD:
return "discord"
case DINGTALK:
return "dingtalk"
}
return ""
}
@@ -407,7 +411,7 @@ type HookResponse struct {
// HookTask represents a hook task.
type HookTask struct {
ID int64 `xorm:"pk autoincr"`
ID int64
RepoID int64 `xorm:"INDEX"`
HookID int64
UUID string
@@ -571,6 +575,11 @@ func prepareHookTasks(e Engine, repo *Repository, event HookEventType, p api.Pay
if err != nil {
return fmt.Errorf("GetDiscordPayload: %v", err)
}
case DINGTALK:
payloader, err = GetDingtalkPayload(p, event)
if err != nil {
return fmt.Errorf("GetDingtalkPayload: %v", err)
}
default:
payloader = p
}

260
models/webhook_dingtalk.go Normal file
View File

@@ -0,0 +1,260 @@
// Copyright 2017 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
import (
"encoding/json"
"fmt"
"strings"
"github.com/gogits/git-module"
api "github.com/gogits/go-gogs-client"
)
const (
DingtalkNotificationTitle = "Gogs Notification"
)
//Refer: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1
type DingtalkActionCard struct {
Title string `json:"title"`
Text string `json:"text"`
HideAvatar string `json:"hideAvatar"`
BtnOrientation string `json:"btnOrientation"`
SingleTitle string `json:"singleTitle"`
SingleURL string `json:"singleURL"`
}
//Refer: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1
type DingtalkAtObject struct {
AtMobiles []string `json:"atMobiles"`
IsAtAll bool `json:"isAtAll"`
}
//Refer: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1
type DingtalkPayload struct {
MsgType string `json:"msgtype"`
At DingtalkAtObject `json:"at"`
ActionCard DingtalkActionCard `json:"actionCard"`
}
func (p *DingtalkPayload) JSONPayload() ([]byte, error) {
data, err := json.MarshalIndent(p, "", " ")
if err != nil {
return []byte{}, err
}
return data, nil
}
func NewDingtalkActionCard(singleTitle, singleURL string) DingtalkActionCard {
return DingtalkActionCard{
Title: DingtalkNotificationTitle,
SingleURL: singleURL,
SingleTitle: singleTitle,
}
}
//TODO: add content
func GetDingtalkPayload(p api.Payloader, event HookEventType) (payload *DingtalkPayload, err error) {
switch event {
case HOOK_EVENT_CREATE:
payload, err = getDingtalkCreatePayload(p.(*api.CreatePayload))
case HOOK_EVENT_DELETE:
payload, err = getDingtalkDeletePayload(p.(*api.DeletePayload))
case HOOK_EVENT_FORK:
payload, err = getDingtalkForkPayload(p.(*api.ForkPayload))
case HOOK_EVENT_PUSH:
payload, err = getDingtalkPushPayload(p.(*api.PushPayload))
case HOOK_EVENT_ISSUES:
payload, err = getDingtalkIssuesPayload(p.(*api.IssuesPayload))
case HOOK_EVENT_ISSUE_COMMENT:
payload, err = getDingtalkIssueCommentPayload(p.(*api.IssueCommentPayload))
case HOOK_EVENT_PULL_REQUEST:
payload, err = getDingtalkPullRequestPayload(p.(*api.PullRequestPayload))
case HOOK_EVENT_RELEASE:
payload, err = getDingtalkReleasePayload(p.(*api.ReleasePayload))
}
if err != nil {
return nil, fmt.Errorf("event '%s': %v", event, err)
}
return payload, nil
}
func getDingtalkCreatePayload(p *api.CreatePayload) (*DingtalkPayload, error) {
refName := git.RefEndName(p.Ref)
refType := strings.Title(p.RefType)
actionCard := NewDingtalkActionCard("View "+refType, p.Repo.HTMLURL+"/src/"+refName)
actionCard.Text += "# New " + refType + " Create Event"
actionCard.Text += "\n- Repo: **" + MarkdownLinkFormatter(p.Repo.HTMLURL, p.Repo.Name) + "**"
actionCard.Text += "\n- New " + refType + ": **" + MarkdownLinkFormatter(p.Repo.HTMLURL+"/src/"+refName, refName) + "**"
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkDeletePayload(p *api.DeletePayload) (*DingtalkPayload, error) {
refName := git.RefEndName(p.Ref)
refType := strings.Title(p.RefType)
actionCard := NewDingtalkActionCard("View Repo", p.Repo.HTMLURL)
actionCard.Text += "# " + refType + " Delete Event"
actionCard.Text += "\n- Repo: **" + MarkdownLinkFormatter(p.Repo.HTMLURL, p.Repo.Name) + "**"
actionCard.Text += "\n- " + refType + ": **" + refName + "**"
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkForkPayload(p *api.ForkPayload) (*DingtalkPayload, error) {
actionCard := NewDingtalkActionCard("View Forkee", p.Forkee.HTMLURL)
actionCard.Text += "# Repo Fork Event"
actionCard.Text += "\n- From Repo: **" + MarkdownLinkFormatter(p.Repo.HTMLURL, p.Repo.Name) + "**"
actionCard.Text += "\n- To Repo: **" + MarkdownLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName) + "**"
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkPushPayload(p *api.PushPayload) (*DingtalkPayload, error) {
refName := git.RefEndName(p.Ref)
pusher := p.Pusher.FullName
if pusher == "" {
pusher = p.Pusher.UserName
}
var detail string
for i, commit := range p.Commits {
msg := strings.Split(commit.Message, "\n")[0]
commitLink := MarkdownLinkFormatter(commit.URL, commit.ID[:7])
detail += fmt.Sprintf("> %d. %s %s - %s\n", i, commitLink, commit.Author.Name, msg)
}
actionCard := NewDingtalkActionCard("View Changes", p.CompareURL)
actionCard.Text += "# Repo Push Event"
actionCard.Text += "\n- Repo: **" + MarkdownLinkFormatter(p.Repo.HTMLURL, p.Repo.Name) + "**"
actionCard.Text += "\n- Ref: **" + MarkdownLinkFormatter(p.Repo.HTMLURL+"/src/"+refName, refName) + "**"
actionCard.Text += "\n- Pusher: **" + pusher + "**"
actionCard.Text += "\n## " + fmt.Sprintf("Total %d commits(s)", len(p.Commits))
actionCard.Text += "\n" + detail
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkIssuesPayload(p *api.IssuesPayload) (*DingtalkPayload, error) {
issueName := fmt.Sprintf("#%d %s", p.Index, p.Issue.Title)
issueURL := fmt.Sprintf("%s/issues/%d", p.Repository.HTMLURL, p.Index)
actionCard := NewDingtalkActionCard("View Issue", issueURL)
actionCard.Text += "# Issue Event " + strings.Title(string(p.Action))
actionCard.Text += "\n- Issue: **" + MarkdownLinkFormatter(issueURL, issueName) + "**"
if p.Action == api.HOOK_ISSUE_ASSIGNED {
actionCard.Text += "\n- New Assignee: **" + p.Issue.Assignee.UserName + "**"
} else if p.Action == api.HOOK_ISSUE_MILESTONED {
actionCard.Text += "\n- New Milestone: **" + p.Issue.Milestone.Title + "**"
} else if p.Action == api.HOOK_ISSUE_LABEL_UPDATED {
if len(p.Issue.Labels) > 0 {
labels := make([]string, len(p.Issue.Labels))
for i, label := range p.Issue.Labels {
labels[i] = "**" + label.Name + "**"
}
actionCard.Text += "\n- Labels: " + strings.Join(labels, ",")
} else {
actionCard.Text += "\n- Labels: **empty**"
}
}
if p.Issue.Body != "" {
actionCard.Text += "\n> " + p.Issue.Body
}
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayload, error) {
issueName := fmt.Sprintf("#%d %s", p.Issue.Index, p.Issue.Title)
commentURL := fmt.Sprintf("%s/issues/%d", p.Repository.HTMLURL, p.Issue.Index)
if p.Action != api.HOOK_ISSUE_COMMENT_DELETED {
commentURL += "#" + CommentHashTag(p.Comment.ID)
}
issueURL := fmt.Sprintf("%s/issues/%d", p.Repository.HTMLURL, p.Issue.Index)
actionCard := NewDingtalkActionCard("View Issue Comment", commentURL)
actionCard.Text += "# Issue Comment " + strings.Title(string(p.Action))
actionCard.Text += "\n- Issue: " + MarkdownLinkFormatter(issueURL, issueName)
actionCard.Text += "\n- Comment content: "
actionCard.Text += "\n> " + p.Comment.Body
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload, error) {
title := "# Pull Request " + strings.Title(string(p.Action))
if p.Action == api.HOOK_ISSUE_CLOSED && p.PullRequest.HasMerged {
title = "# Pull Request Merged"
}
pullRequestURL := fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index)
content := "- PR: " + MarkdownLinkFormatter(pullRequestURL, fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title))
if p.Action == api.HOOK_ISSUE_ASSIGNED {
content += "\n- New Assignee: **" + p.PullRequest.Assignee.UserName + "**"
} else if p.Action == api.HOOK_ISSUE_MILESTONED {
content += "\n- New Milestone: *" + p.PullRequest.Milestone.Title + "*"
} else if p.Action == api.HOOK_ISSUE_LABEL_UPDATED {
labels := make([]string, len(p.PullRequest.Labels))
for i, label := range p.PullRequest.Labels {
labels[i] = "**" + label.Name + "**"
}
content += "\n- New Labels: " + strings.Join(labels, ",")
}
actionCard := NewDingtalkActionCard("View Pull Request", pullRequestURL)
actionCard.Text += title + "\n" + content
if p.Action == api.HOOK_ISSUE_OPENED || p.Action == api.HOOK_ISSUE_EDITED {
actionCard.Text += "\n> " + p.PullRequest.Body
}
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error) {
releaseURL := p.Repository.HTMLURL + "/src/" + p.Release.TagName
author := p.Release.Author.FullName
if author == "" {
author = p.Release.Author.UserName
}
actionCard := NewDingtalkActionCard("View Release", releaseURL)
actionCard.Text += "# New Release Published"
actionCard.Text += "\n- Repo: " + MarkdownLinkFormatter(p.Repository.HTMLURL, p.Repository.Name)
actionCard.Text += "\n- Tag: " + MarkdownLinkFormatter(releaseURL, p.Release.TagName)
actionCard.Text += "\n- Author: " + author
actionCard.Text += fmt.Sprintf("\n- Draft?: %t", p.Release.Draft)
actionCard.Text += fmt.Sprintf("\n- Pre Release?: %t", p.Release.Prerelease)
actionCard.Text += "\n- Title: " + p.Release.Name
if p.Release.Body != "" {
actionCard.Text += "\n- Note: " + p.Release.Body
}
return &DingtalkPayload{MsgType: "actionCard", ActionCard: actionCard}, nil
}
//Format link addr and title into markdown style
func MarkdownLinkFormatter(link, text string) string {
return "[" + text + "](" + link + ")"
}

View File

@@ -13,7 +13,7 @@ import (
"github.com/gogits/git-module"
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
type DiscordEmbedFooterObject struct {
@@ -77,7 +77,7 @@ func getDiscordCreatePayload(p *api.CreatePayload) (*DiscordPayload, error) {
return &DiscordPayload{
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
URL: setting.AppURL + p.Sender.UserName,
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
IconURL: p.Sender.AvatarUrl,
@@ -94,7 +94,7 @@ func getDiscordDeletePayload(p *api.DeletePayload) (*DiscordPayload, error) {
return &DiscordPayload{
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
URL: setting.AppURL + p.Sender.UserName,
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
IconURL: p.Sender.AvatarUrl,
@@ -111,7 +111,7 @@ func getDiscordForkPayload(p *api.ForkPayload) (*DiscordPayload, error) {
return &DiscordPayload{
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
URL: setting.AppURL + p.Sender.UserName,
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
IconURL: p.Sender.AvatarUrl,
@@ -159,7 +159,7 @@ func getDiscordPushPayload(p *api.PushPayload, slack *SlackMeta) (*DiscordPayloa
AvatarURL: slack.IconURL,
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
URL: setting.AppURL + p.Sender.UserName,
Color: int(color),
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
@@ -360,7 +360,7 @@ func getDiscordReleasePayload(p *api.ReleasePayload) (*DiscordPayload, error) {
return &DiscordPayload{
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
URL: setting.AppURL + p.Sender.UserName,
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
IconURL: p.Sender.AvatarUrl,

View File

@@ -12,7 +12,7 @@ import (
"github.com/gogits/git-module"
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/pkg/setting"
)
type SlackMeta struct {
@@ -146,7 +146,7 @@ func getSlackPushPayload(p *api.PushPayload, slack *SlackMeta) (*SlackPayload, e
}
func getSlackIssuesPayload(p *api.IssuesPayload, slack *SlackMeta) (*SlackPayload, error) {
senderLink := SlackLinkFormatter(setting.AppUrl+p.Sender.UserName, p.Sender.UserName)
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/issues/%d", p.Repository.HTMLURL, p.Index),
fmt.Sprintf("#%d %s", p.Index, p.Issue.Title))
var text, title, attachmentText string
@@ -164,7 +164,7 @@ func getSlackIssuesPayload(p *api.IssuesPayload, slack *SlackMeta) (*SlackPayloa
attachmentText = SlackTextFormatter(p.Issue.Body)
case api.HOOK_ISSUE_ASSIGNED:
text = fmt.Sprintf("[%s] Issue assigned to %s: %s by %s", p.Repository.FullName,
SlackLinkFormatter(setting.AppUrl+p.Issue.Assignee.UserName, p.Issue.Assignee.UserName),
SlackLinkFormatter(setting.AppURL+p.Issue.Assignee.UserName, p.Issue.Assignee.UserName),
titleLink, senderLink)
case api.HOOK_ISSUE_UNASSIGNED:
text = fmt.Sprintf("[%s] Issue unassigned: %s by %s", p.Repository.FullName, titleLink, senderLink)
@@ -192,7 +192,7 @@ func getSlackIssuesPayload(p *api.IssuesPayload, slack *SlackMeta) (*SlackPayloa
}
func getSlackIssueCommentPayload(p *api.IssueCommentPayload, slack *SlackMeta) (*SlackPayload, error) {
senderLink := SlackLinkFormatter(setting.AppUrl+p.Sender.UserName, p.Sender.UserName)
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)),
fmt.Sprintf("#%d %s", p.Issue.Index, p.Issue.Title))
var text, title, attachmentText string
@@ -226,7 +226,7 @@ func getSlackIssueCommentPayload(p *api.IssueCommentPayload, slack *SlackMeta) (
}
func getSlackPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (*SlackPayload, error) {
senderLink := SlackLinkFormatter(setting.AppUrl+p.Sender.UserName, p.Sender.UserName)
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index),
fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title))
var text, title, attachmentText string
@@ -248,7 +248,7 @@ func getSlackPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (*S
attachmentText = SlackTextFormatter(p.PullRequest.Body)
case api.HOOK_ISSUE_ASSIGNED:
text = fmt.Sprintf("[%s] Pull request assigned to %s: %s by %s", p.Repository.FullName,
SlackLinkFormatter(setting.AppUrl+p.PullRequest.Assignee.UserName, p.PullRequest.Assignee.UserName),
SlackLinkFormatter(setting.AppURL+p.PullRequest.Assignee.UserName, p.PullRequest.Assignee.UserName),
titleLink, senderLink)
case api.HOOK_ISSUE_UNASSIGNED:
text = fmt.Sprintf("[%s] Pull request unassigned: %s by %s", p.Repository.FullName, titleLink, senderLink)

View File

@@ -17,8 +17,8 @@ import (
"github.com/gogits/git-module"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/sync"
"github.com/gogits/gogs/pkg/setting"
"github.com/gogits/gogs/pkg/sync"
)
var wikiWorkingPool = sync.NewExclusivePool()

View File

@@ -1,11 +0,0 @@
// Copyright 2014 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 base
const DOC_URL = "https://github.com/gogits/go-gogs-client/wiki"
type (
TplName string
)

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More