This commit is contained in:
Matthew Richardson 2018-07-04 11:17:42 +01:00
commit b1504caee8
184 changed files with 8948 additions and 2220 deletions

View File

@ -4,7 +4,7 @@ workspace:
clone:
git:
image: plugins/git:1
image: plugins/git:next
depth: 50
tags: true
@ -75,6 +75,7 @@ pipeline:
- make lint
- make fmt-check
- make swagger-check
- make swagger-validate
- make misspell-check
- make test-vendor
- make build
@ -254,6 +255,18 @@ pipeline:
when:
event: [ push, tag ]
gpg-sign:
image: plugins/gpgsign:1
pull: true
secrets: [ gpgsign_key, gpgsign_passphrase ]
detach_sign: true
files:
- dist/release/*
excludes:
- dist/release/*.sha256
when:
event: [ push, tag ]
release:
image: plugins/s3:1
pull: true

View File

@ -4,6 +4,81 @@ This changelog goes through all the changes that have been made in each release
without substantial changes to our git log; to see the highlights of what has
been added to each release, please refer to the [blog](https://blog.gitea.io).
## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-07-04
* SECURITY
* Limit uploaded avatar image-size to 4096px x 3072px by default (#4353)
* Do not allow to reuse TOTP passcode (#3878)
* FEATURE
* Add cli commands to regen hooks & keys (#3979)
* Add support for FIDO U2F (#3971)
* Added user language setting (#3875)
* LDAP Public SSH Keys synchronization (#1844)
* Add topic support (#3711)
* Multiple assignees (#3705)
* Add protected branch whitelists for merging (#3689)
* Global code search support (#3664)
* Add label descriptions (#3662)
* Add issue search via API (#3612)
* Add repository setting to enable/disable health checks (#3607)
* Emoji Autocomplete (#3433)
* Implements generator cli for secrets (#3531)
* ENHANCEMENT
* Add more webhooks support and refactor webhook templates directory (#3929)
* Add new option to allow only OAuth2/OpenID user registration (#3910)
* Add option to use paged LDAP search when synchronizing users (#3895)
* Symlink icons (#1416)
* Improve release page UI (#3693)
* Add admin dashboard option to run health checks (#3606)
* Add branch link in branch list (#3576)
* Reduce sql query times in retrieveFeeds (#3547)
* Option to enable or disable swagger endpoints (#3502)
* Add missing licenses (#3497)
* Reduce repo indexer disk usage (#3452)
* Enable caching on assets and avatars (#3376)
* Add repository search ordered by stars/forks. Forks column in admin repo list (#3969)
* Add Environment Variables to Docker template (#4012)
* LFS: make HTTP auth period configurable (#4035)
* Add config path as an optionial flag when changing pass via CLI (#4184)
* Refactor User Settings sections (#3900)
* Allow square brackets in external issue patterns (#3408)
* Add Attachment API (#3478)
* Add EnableTimetracking option to app settings (#3719)
* Add config option to enable or disable log executed SQL (#3726)
* Shows total tracked time in issue and milestone list (#3341)
* TRANSLATION
* Improve English grammar and consistency (#3614)
* DEPLOYMENT
* Allow Gitea to run as different USER in Docker (#3961)
* Provide compressed release binaries (#3991)
* Sign release binaries (#4188)
## [1.4.3](https://github.com/go-gitea/gitea/releases/tag/v1.4.3) - 2018-06-26
* SECURITY
* HTML-escape plain-text READMEs (#4192) (#4214)
* Fix open redirect vulnerability on login screen (#4312) (#4312)
* BUGFIXES
* Fix broken monitoring page when running processes are shown (#4203) (#4208)
* Fix delete comment bug (#4216) (#4228)
* Delete reactions added to issues and comments when deleting repository (#4232) (#4237)
* Fix wiki URL encoding bug (#4091) (#4254)
* Fix code tab link when viewing tags (#3908) (#4263)
* Fix webhook type conflation (#4285) (#4285)
## [1.4.2](https://github.com/go-gitea/gitea/releases/tag/v1.4.2) - 2018-06-04
* BUGFIXES
* Adjust z-index for floating labels (#3939) (#3950)
* Add missing token validation on application settings page (#3976) #3978
* Webhook and hook_task clean up (#4006)
* Fix webhook bug of response info is not displayed in UI (#4023)
* Fix writer cannot read bare repo guide (#4033) (#4039)
* Don't force due date to current time (#3830) (#4057)
* Fix wiki redirects (#3919) (#4065)
* Fix attachment ENABLED (#4064) (#4066)
* Added deletion of an empty line at the end of file (#4054) (#4074)
* Use ResolveReference instead of path.Join (#4073)
* Fix #4081 Check for leading / in base before removing it (#4083)
* Respository's home page not updated after first push (#4075)
## [1.4.1](https://github.com/go-gitea/gitea/releases/tag/v1.4.1) - 2018-05-03
* BREAKING
* Add "error" as reserved username (#3882) (#3886)

View File

@ -114,7 +114,7 @@ pull request workflow to do that. And, we also use [LGTM](http://lgtm.co)
to ensure every PR is reviewed by at least 2 maintainers.
Please try to make your pull request easy to review for us. And, please read
the *[How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/devel/pull-requests.md#best-practices-for-faster-reviews)* guide;
the *[How to get faster PR reviews](https://github.com/kubernetes/community/blob/261cb0fd089b64002c91e8eddceebf032462ccd6/contributors/guide/pull-requests.md#best-practices-for-faster-reviews)* guide;
it has lots of useful tips for any project you may want to contribute.
Some of the key points:
@ -201,6 +201,10 @@ an advisor has time to code review, we will gladly welcome them back
to the maintainers team. If a maintainer is inactive for more than 3
months and forgets to leave the maintainers team, the owners may move
him or her from the maintainers team to the advisors team.
For security reasons, Maintainers should use 2FA for their accounts and
if possible provide gpg signed commits.
https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/
https://help.github.com/articles/signing-commits-with-gpg/
## Owners
@ -211,6 +215,9 @@ be the main owner, and the other two the assistant owners. When the new
owners have been elected, the old owners will give up ownership to the
newly elected owners. If an owner is unable to do so, the other owners
will assist in ceding ownership to the newly elected owners.
For security reasons, Owners or any account with write access (like a bot)
must use 2FA.
https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/
After the election, the new owners should proactively agree
with our [CONTRIBUTING](CONTRIBUTING.md) requirements in the

View File

@ -58,3 +58,4 @@ CMD ["/bin/s6-svscan", "/etc/s6"]
COPY docker /
COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
RUN ln -s /app/gitea/gitea /usr/local/bin/gitea

4
Gopkg.lock generated
View File

@ -294,7 +294,7 @@
[[projects]]
name = "github.com/go-sql-driver/mysql"
packages = ["."]
revision = "ce924a41eea897745442daaa1739089b0f3f561d"
revision = "d523deb1b23d913de5bdada721a6071e71283618"
[[projects]]
name = "github.com/go-xorm/builder"
@ -873,6 +873,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "036b8c882671cf8d2c5e2fdbe53b1bdfbd39f7ebd7765bd50276c7c4ecf16687"
inputs-digest = "96c83a3502bd50c5ca8e4d9b4145172267630270e587c79b7253156725eeb9b8"
solver-name = "gps-cdcl"
solver-version = 1

View File

@ -40,6 +40,10 @@ ignored = ["google.golang.org/appengine*"]
#version = "0.6.5"
revision = "d4149d1eee0c2c488a74a5863fd9caf13d60fd03"
[[override]]
name = "github.com/go-sql-driver/mysql"
revision = "d523deb1b23d913de5bdada721a6071e71283618"
[[override]]
name = "github.com/gorilla/mux"
revision = "757bef944d0f21880861c2dd9c871ca543023cba"

View File

@ -22,3 +22,5 @@ Peter Žeby <morlinest@gmail.com> (@morlinest)
Matti Ranta <matti@mdranta.net> (@techknowlogick)
Michael Lustfield <mtecknology@debian.org> (@MTecknology)
Jonas Franz <info@jonasfranz.software> (@JonasFranzDEV)
Flynn Lufmons <fluf@warpmail.net> (@flufmonster)
Alexey Terentyev <axifnx@gmail.com> (@axifive)

View File

@ -100,6 +100,13 @@ swagger-check: generate-swagger
exit 1; \
fi;
.PHONY: swagger-validate
swagger-validate:
@hash swagger > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
$(GO) get -u github.com/go-swagger/go-swagger/cmd/swagger; \
fi
swagger validate ./public/swagger.v1.json
.PHONY: errcheck
errcheck:
@hash errcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \

View File

@ -12,13 +12,6 @@
[![Help Contribute to Open Source](https://www.codetriage.com/go-gitea/gitea/badges/users.svg)](https://www.codetriage.com/go-gitea/gitea)
[![Become a backer/sponsor of gitea](https://opencollective.com/gitea/tiers/backer/badge.svg?label=backer&color=brightgreen)](https://opencollective.com/gitea)
| | | |
|:---:|:---:|:---:|
|![Dashboard](https://image.ibb.co/dms6DG/1.png)|![Repository](https://image.ibb.co/m6MSLw/2.png)|![Commits History](https://image.ibb.co/cjrSLw/3.png)|
|![Branches](https://image.ibb.co/e6vbDG/4.png)|![Issues](https://image.ibb.co/bJTJSb/5.png)|![Pull Request View](https://image.ibb.co/e02dSb/6.png)|
|![Releases](https://image.ibb.co/cUzgfw/7.png)|![Activity](https://image.ibb.co/eZgGDG/8.png)|![Wiki](https://image.ibb.co/dYV9YG/9.png)|
|![Diff](https://image.ibb.co/ewA9YG/10.png)|![Organization](https://image.ibb.co/ceOwDG/11.png)|![Profile](https://image.ibb.co/c44Q7b/12.png)|
## Purpose
The goal of this project is to make the easiest, fastest, and most
@ -91,8 +84,24 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
<a href="https://opencollective.com/gitea/sponsor/8/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/gitea/sponsor/9/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/9/avatar.svg"></a>
## FAQ
**How do you pronounce Gitea?**
Gitea is pronounced [/ɡɪti:/](https://youtu.be/EM71-2uDAoY) as in "gi-tea" with a hard g.
## License
This project is licensed under the MIT License.
See the [LICENSE](https://github.com/go-gitea/gitea/blob/master/LICENSE) file
for the full license text.
## Screenshots
Looking for an overview of the interface? Check it out!
| | | |
|:---:|:---:|:---:|
|![Dashboard](https://image.ibb.co/dms6DG/1.png)|![Repository](https://image.ibb.co/m6MSLw/2.png)|![Commits History](https://image.ibb.co/cjrSLw/3.png)|
|![Branches](https://image.ibb.co/e6vbDG/4.png)|![Issues](https://image.ibb.co/bJTJSb/5.png)|![Pull Request View](https://image.ibb.co/e02dSb/6.png)|
|![Releases](https://image.ibb.co/cUzgfw/7.png)|![Activity](https://image.ibb.co/eZgGDG/8.png)|![Wiki](https://image.ibb.co/dYV9YG/9.png)|
|![Diff](https://image.ibb.co/ewA9YG/10.png)|![Organization](https://image.ibb.co/ceOwDG/11.png)|![Profile](https://image.ibb.co/c44Q7b/12.png)|

View File

@ -73,6 +73,11 @@ var (
Value: "",
Usage: "New password to set for user",
},
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
},
}
@ -123,6 +128,10 @@ func runChangePassword(c *cli.Context) error {
return err
}
if c.IsSet("config") {
setting.CustomConf = c.String("config")
}
if err := initDB(); err != nil {
return err
}

View File

@ -24,8 +24,8 @@
# Default values
NAME=gitea
GITEA_HOME=/home/git/gitea
GITEA_PATH=${GITEA_HOME}/$NAME
GITEA_HOME=/var/lib/${NAME}
GITEA_PATH=/usr/local/bin/${NAME}
GITEA_USER=git
SERVICENAME="Gitea - Git with a cup of tea"
LOCKFILE=/var/lock/subsys/gitea
@ -49,11 +49,11 @@ DAEMON_OPTS="--check $NAME"
start() {
cd ${GITEA_HOME}
echo -n "Starting ${SERVICENAME}: "
daemon $DAEMON_OPTS "${GITEA_PATH} web > ${LOGFILE} 2>&1 &"
daemon $DAEMON_OPTS "${GITEA_PATH} web -c /etc/${NAME}/app.ini > ${LOGFILE} 2>&1 &"
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${LOCKFILE}
return $RETVAL
}
@ -63,7 +63,7 @@ stop() {
killproc ${NAME}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${LOCKFILE}
[ $RETVAL = 0 ] && rm -f ${LOCKFILE}
}
case "$1" in

View File

@ -14,17 +14,20 @@
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Git with a cup of tea"
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Gitea - Git with a cup of tea"
NAME=gitea
SERVICEVERBOSE=yes
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
WORKINGDIR=/home/git/gitea
DAEMON=$WORKINGDIR/$NAME
DAEMON_ARGS="web"
WORKINGDIR=/var/lib/$NAME
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="web -c /etc/$NAME/app.ini"
USER=git
USERBIND="setcap cap_net_bind_service=+ep"
USERBIND=""
# If you want to bind Gitea to a port below 1024 uncomment
# the line below
#USERBIND="setcap cap_net_bind_service=+ep"
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"
# Read configuration variable file if it is present
@ -36,7 +39,7 @@ STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"
do_start()
{
$USERBIND $DAEMON
sh -c "USER=$USER start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
sh -c "USER=$USER HOME=/home/$USER GITEA_WORK_DIR=$WORKINGDIR start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
--background --chdir $WORKINGDIR --chuid $USER \\
--exec $DAEMON -- $DAEMON_ARGS"
}

View File

@ -19,9 +19,9 @@ load_rc_config $name
: ${gitea_user:="git"}
: ${gitea_enable:="NO"}
: ${gitea_directory:="/home/git"}
: ${gitea_directory:="/var/lib/gitea"}
command="${gitea_directory}/gitea web"
command="/usr/local/bin/gitea web -c /etc/gitea/app.ini"
procname="$(echo $command |cut -d' ' -f1)"
pidfile="${gitea_directory}/${name}.pid"
@ -33,6 +33,7 @@ gitea_start() {
cd ${gitea_directory}
export USER=${gitea_user}
export HOME=/usr/home/${gitea_user}
export GITEA_WORK_DIR=${gitea_directory}
/usr/sbin/daemon -f -u ${gitea_user} -p ${pidfile} $command
}

View File

@ -1,11 +1,11 @@
#!/sbin/openrc-run
DIR=/home/git/gitea
DIR=/var/lib/gitea
USER=git
start_stop_daemon_args="--user ${USER} --chdir ${DIR}"
command="${DIR}/gitea"
command_args="web"
command="/usr/local/bin/gitea"
command_args="web -c /etc/gitea/app.ini"
command_background=yes
pidfile=/var/run/gitea.pid

View File

@ -2,11 +2,11 @@
#
# $OpenBSD$
daemon="/home/git/gitea/gitea"
daemon="/usr/local/bin/gitea"
daemon_user="git"
daemon_flags="web"
daemon_flags="web -c /etc/gitea/app.ini"
gitea_directory="/home/git/gitea"
gitea_directory="/var/lib/gitea"
rc_bg=YES

View File

@ -0,0 +1,46 @@
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="manifest" name="export">
<service name="gitea" type="service" version="1">
<create_default_instance enabled="false"/>
<dependency name="network" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/milestone/network:default"/>
</dependency>
<dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/system/filesystem/local"/>
</dependency>
<exec_method
type="method"
name="start"
exec="/opt/local/bin/gitea web"
timeout_seconds="60">
<method_context>
<method_credential user="git" group="git" />
<method_environment>
<envvar name='GITEA_WORK_DIR' value='/opt/local/share/gitea'/>
<envvar name='GITEA_CUSTOM' value='/opt/local/etc/gitea'/>
<envvar name='HOME' value='/var/db/gitea'/>
<envvar name='PATH' value='/opt/local/bin:${PATH}'/>
<envvar name='USER' value='git'/>
</method_environment>
</method_context>
</exec_method>
<exec_method type="method" name="stop" exec=":kill" timeout_seconds="60"/>
<property_group name="application" type="application"></property_group>
<property_group name="startd" type="framework">
<propval name="duration" type="astring" value="child"/>
<propval name="ignore_error" type="astring" value="core,signal"/>
</property_group>
<template>
<common_name>
<loctext xml:lang="C">A painless, self-hosted Git service</loctext>
</common_name>
</template>
</service>
</service_bundle>

View File

@ -18,10 +18,10 @@
# Default values
NAME=gitea
GITEA_HOME=/home/git/gitea
GITEA_PATH=${GITEA_HOME}/$NAME
GITEA_HOME=/var/lib/$NAME
GITEA_PATH=/usr/local/bin/$NAME
GITEA_USER=git
SERVICENAME="Git - with a cup of tea"
SERVICENAME="Gitea - Git with a cup of tea"
LOCKFILE=/var/lock/subsys/gitea
LOGPATH=${GITEA_HOME}/log
LOGFILE=${LOGPATH}/error.log
@ -58,7 +58,7 @@ case "$1" in
# return skipped as service is already running
(exit 5)
else
su - ${GITEA_USER} -c "USER=${GITEA_USER} ${GITEA_PATH} web 2>&1 >>${LOGFILE} &"
su - ${GITEA_USER} -c "USER=${GITEA_USER} GITEA_WORK_DIR=${GITEA_HOME} ${GITEA_PATH} web -c /etc/${NAME}/app.ini 2>&1 >>${LOGFILE} &"
fi
# Remember status and be verbose

View File

@ -18,10 +18,10 @@ RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/gitea
ExecStart=/home/git/gitea/gitea web
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###

View File

@ -402,6 +402,10 @@ SESSION_LIFE_TIME = 86400
[picture]
AVATAR_UPLOAD_PATH = data/avatars
; Max Width and Height of uploaded avatars. This is to limit the amount of RAM
; used when resizing the image.
AVATAR_MAX_WIDTH = 4096
AVATAR_MAX_HEIGHT = 3072
; Chinese users can choose "duoshuo"
; or a custom avatar source, like: http://cn.gravatar.com/avatar/
GRAVATAR_SOURCE = gravatar
@ -601,9 +605,9 @@ ko-KR = ko
[U2F]
; Two Factor authentication with security keys
; https://developers.yubico.com/U2F/App_ID.html
APP_ID = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s
APP_ID = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
; Comma seperated list of truisted facets
TRUSTED_FACETS = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s
TRUSTED_FACETS = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
; Extension mapping to highlight class
; e.g. .toml=ini

View File

@ -1,7 +1,5 @@
#!/bin/bash
/usr/sbin/update-ca-certificates
if [ ! -d /data/git/.ssh ]; then
mkdir -p /data/git/.ssh
chmod 700 /data/git/.ssh

View File

@ -4,6 +4,9 @@ RUN_MODE = $RUN_MODE
[repository]
ROOT = /data/git/repositories
[repository.local]
LOCAL_COPY_PATH = /data/gitea/tmp/local-repo
[repository.upload]
TEMP_PATH = /data/gitea/uploads
@ -14,6 +17,7 @@ HTTP_PORT = $HTTP_PORT
ROOT_URL = $ROOT_URL
DISABLE_SSH = $DISABLE_SSH
SSH_PORT = $SSH_PORT
LFS_CONTENT_PATH = /data/git/lfs
[database]
PATH = /data/gitea/gitea.db
@ -23,6 +27,9 @@ NAME = $DB_NAME
USER = $DB_USER
PASSWD = $DB_PASSWD
[indexer]
ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
[session]
PROVIDER_CONFIG = /data/gitea/sessions

View File

@ -0,0 +1,75 @@
---
date: "2018-06-24:00:00+02:00"
title: "API Usage"
slug: "api-usage"
weight: 40
toc: true
draft: false
menu:
sidebar:
parent: "advanced"
name: "API Usage"
weight: 40
identifier: "api-usage"
---
# Gitea API Usage
## Enabling/configuring API access
By default, `ENABLE_SWAGGER_ENDPOINT` is true, and
`MAX_RESPONSE_ITEMS` is set to 50. See [Config Cheat
Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/) for more
information.
## Authentication via the API
Gitea supports these methods of API authentication:
- HTTP basic authentication
- `token=...` parameter in URL query string
- `access_token=...` parameter in URL query string
- `Authorization: token ...` header in HTTP headers
All of these methods accept the same apiKey token type. You can
better understand this by looking at the code -- as of this writing,
Gitea parses queries and headers to find the token in
[modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47).
You can create an apiKey token via your gitea install's web interface:
`Settings | Applications | Generate New Token`.
### More on the `Authorization:` header
For historical reasons, Gitea needs the word `token` included before
the apiKey token in an authorization header, like this:
```
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
```
In a `curl` command, for instance, this would look like:
```
curl -X POST "http://localhost:4000/api/v1/repos/test1/test1/issues" \
-H "accept: application/json" \
-H "Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675" \
-H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i
```
As mentioned above, the token used is the same one you would use in
the `token=` string in a GET request.
## Listing your issued tokens via the API
As mentioned in
[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346),
`/users/:name/tokens` is special and requires you to authenticate
using BasicAuth, as follows:
### Using basic authentication:
```
$ curl --request GET --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/yourusername/tokens
[{"name":"test","sha1":"..."},{"name":"dev","sha1":"..."}]
```

View File

@ -27,594 +27,93 @@ _Symbols used in table:_
* _✘ - unsupported_
<table border="1" cellpadding="4">
<thead>
<tr>
<td>Feature</td>
<td>Gitea</td>
<td>Gogs</td>
<td>GitHub EE</td>
<td>GitLab CE</td>
<td>GitLab EE</td>
<td>BitBucket</td>
</tr>
</thead>
<tbody>
<tr>
<td>Open source and free</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Issue tracker</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Pull/Merge requests</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Squash merging</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Rebase merging</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Pull/Merge request inline comments</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Pull/Merge request approval</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Merge conflict resolution</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Restrict push and merge access to certain users</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Markdown support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Issues and pull/merge requests templates</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Revert specific commits or a merge request</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Labels</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Time tracking</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Multiple assignees for issues</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Related issues</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Confidential issues</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Comment reactions</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Lock Discussion</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Batch issue handling</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Issue Boards</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Create new branches from issues</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Commit graph</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Web code editor</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Branch manager</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Create new branches</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Repository topics</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Repository code search</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Global code search</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Issue search</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Global issue search</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Git LFS 2.0</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Integrated Git-powered wiki</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Static Git-powered pages</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Group Milestones</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Granular user roles (Code, Issues, Wiki etc)</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Cherry-picking changes</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>GPG Signed Commits</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Reject unsigned commits</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Verified Committer</td>
<td></td>
<td></td>
<td>?</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Subgroups: groups within groups</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Custom Git Hooks</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Repository Activity page</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Deploy Tokens</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Repository Tokens with write rights</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Easy upgrade process</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Built-in Container Registry</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>External git mirroring</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>AD / LDAP integration</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Multiple LDAP / AD server support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>LDAP user synchronization</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>OpenId Connect support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>?</td>
</tr>
<tr>
<td>OAuth 2.0 integration (external authorization)</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>?</td>
</tr>
<tr>
<td>Act as OAuth 2.0 provider</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Two factor authentication (2FA)</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>FIDO U2F (2FA)</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Webhook support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Mattermost/Slack integration</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Discord integration</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Built-in CI/CD</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>External CI/CD status display</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Multiple database support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Multiple OS support</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Low resource usage (RAM/CPU)</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
#### General Features
| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|---------|-------|------|-----------|-----------|-----------|-----------|--------------|
| Open source and free | ✓ | ✓ | ✘| ✓ | ✘ | ✘ | ✓ |
| Low resource usage (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
| Multiple database support | ✓ | ✓ | ✘ | | | ✓ | ✓ |
| Multiple OS support | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
| Easy upgrade process | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
| Markdown support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Static Git-powered pages | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Integrated Git-powered wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Deploy Tokens | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Repository Tokens with write rights | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
| Built-in Container Registry | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| External git mirroring | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
| FIDO U2F (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Built-in CI/CD | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Subgroups: groups within groups | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
#### Code management
| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|---------|-------|------|-----------|-----------|-----------|-----------|--------------|
| Repository topics | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Repository code search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Global code search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | | ✓ |
| Group Milestones | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Granular user roles (Code, Issues, Wiki etc) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Verified Committer | ✘ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
| GPG Signed Commits | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Reject unsigned commits | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
| Repository Activity page | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Branch manager | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Create new branches | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Web code editor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Commit graph | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
#### Issue Tracker
| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|---------|-------|------|-----------|-----------|-----------|-----------|--------------|
| Issue tracker | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Issue templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Labels | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Time tracking | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Multiple assignees for issues | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Related issues | ✘ | ✘ | | ✘ | ✓ | ✘ | ✘ |
| Confidential issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Comment reactions | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Lock Discussion | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Batch issue handling | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Issue Boards | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Create new branches from issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| Issue search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Global issue search | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
#### Pull/Merge requests
| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|---------|-------|------|-----------|-----------|-----------|-----------|--------------|
| Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Squash merging | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
| Rebase merging | ✓ | ✓ | ✓ | ✘ | | ✘ | ✓ |
| Pull/Merge request inline comments | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Pull/Merge request approval | ✘ | ✘ | | ✓ | ✓ | ✓ | ✓ |
| Merge conflict resolution | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Restrict push and merge access to certain users | ✓ | ✘ | ✓ | | ✓ | ✓ | ✓ |
| Revert specific commits or a merge request | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Pull/Merge requests templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Cherry-picking changes | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
#### 3rd-party integrations
| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|---------|-------|------|-----------|-----------|-----------|-----------|--------------|
| Webhook support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Custom Git Hooks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| AD / LDAP integration | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Multiple LDAP / AD server support | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
| LDAP user synchronization | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenId Connect support | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
| OAuth 2.0 integration (external authorization) | ✓ | ✘ | | ✓ | ✓ | ? | ✓ |
| Act as OAuth 2.0 provider | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Two factor authentication (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Mattermost/Slack integration | ✓ | ✓ | | ✓ | ✓ | | ✓ |
| Discord integration | ✓ | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ |
| External CI/CD status display | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |

View File

@ -20,8 +20,8 @@ embedded assets. This can be different for older releases. Choose the file match
the destination platform from the [downloads page](https://dl.gitea.io/gitea), copy
the URL and replace the URL within the commands below:
```
wget -O gitea https://dl.gitea.io/gitea/1.3.2/gitea-1.3.2-linux-amd64
```sh
wget -O gitea https://dl.gitea.io/gitea/1.4.2/gitea-1.4.2-linux-amd64
chmod +x gitea
```
@ -34,6 +34,54 @@ location. When launched manually, Gitea can be killed using `Ctrl+C`.
./gitea web
```
## Recommended server configuration
### Prepare environment
Check that git is installed on the server, if it is not install it first.
```sh
git --version
```
Create user to run gitea (ex. `git`)
```sh
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
```
### Create required directory structure
```sh
mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
chown git:git /var/lib/gitea/{data,indexers,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
```
**NOTE:** `/etc/gitea` is temporary set with write rights for user `git` so that Web installer could write configuration file. After installation is done it is recommended to set rights to read-only using:
```
chmod 750 /etc/gitea
chmod 644 /etc/gitea/app.ini
```
### Copy gitea binary to global location
```
cp gitea /usr/local/bin/gitea
```
### Create service file to start gitea automatically
See how to create [Linux service]({{< relref "run-as-service-in-ubuntu.en-us.md" >}})
## Troubleshooting
### Old glibc versions

View File

@ -17,16 +17,13 @@ menu:
## Debian
The only distribution that has any "official" package of Gitea is Debian. This is currently
in Debian's [contrib](https://wiki.debian.org/SourcesList). This is (currently) only available
in Debian testing and unstable (but should be installable/functional on stable).
Although there is a package of Gitea in Debian's [contrib](https://wiki.debian.org/SourcesList),
it is not supported directly by us.
- Edit /etc/apt/sourced.list
- Add "contrib" to "deb http://deb.debian.org/debian unstable main contrib"
- apt-get update
- apt-get install gitea
Unfortunately the package is not maintained anymore and broken because of missing sources.
Please follow the [deployment from binary]({{< relref "from-binary.en-us.md" >}}) guide instead.
For other distributions, see the [deployment from binary]({{< relref "from-binary.en-us.md" >}}) guide.
Should the packages get updated and fixed, we will provide up-to-date installation instructions here.
## Windows

View File

@ -231,7 +231,7 @@ You can configure some of Gitea's settings via environment variables:
* `APP_NAME`: **"Gitea: Git with a cup of tea"**: Application name, used in the page title.
* `RUN_MODE`: **dev**: For performance and other purposes, change this to `prod` when deployed to a production environment.
* `SSH_DOMAIN`: **localhost**: Domain name of this server, used for displayed clone UR in Gitea's UI.
* `SSH_DOMAIN`: **localhost**: Domain name of this server, used for the displayed clone URL in Gitea's UI.
* `SSH_PORT`: **22**: SSH port displayed in clone URL.
* `DISABLE_SSH`: **false**: Disable SSH feature when it's not available.
* `HTTP_PORT`: **3000**: HTTP listen port.
@ -245,6 +245,8 @@ You can configure some of Gitea's settings via environment variables:
* `SECRET_KEY`: **""**: Global secret key. This should be changed. If this has a value and `INSTALL_LOCK` is empty, `INSTALL_LOCK` will automatically set to `true`.
* `DISABLE_REGISTRATION`: **false**: Disable registration, after which only admin can create accounts for users.
* `REQUIRE_SIGNIN_VIEW`: **false**: Enable this to force users to log in to view any page.
* `USER_UID`: **1000**: The UID (Unix user ID) of the user that runs Gitea within the container. Match this to the UID of the owner of the `/data` volume if using host volumes (this is not necessary with named volumes).
* `USER_GID`: **1000**: The GID (Unix group ID) of the user that runs Gitea within the container. Match this to the GID of the owner of the `/data` volume if using host volumes (this is not necessary with named volumes).
# Customization

View File

@ -20,7 +20,7 @@ file can be unpacked and used to restore an instance.
## Backup Command (`dump`)
Switch to the user running gitea: `su git`. Run `./gitea dump` in the gitea installation
Switch to the user running gitea: `su git`. Run `./gitea dump -c /path/to/app.ini` in the gitea installation
directory. There should be some output similar to the following:
```
@ -34,7 +34,8 @@ directory. There should be some output similar to the following:
Inside the `gitea-dump-1482906742.zip` file, will be the following:
* `custom/conf/app.ini` - Server config.
* `custom` - All config or customerize files in `custom/`.
* `data` - Data directory in <GITEA_WORK_DIR>, except sessions if you are using file session. This directory includes `attachments`, `avatars`, `lfs`, `indexers`, sqlite file if you are using sqlite.
* `gitea-db.sql` - SQL dump of database
* `gitea-repo.zip` - Complete copy of the repository directory.
* `log/` - Various logs. They are not needed for a recovery or migration.

View File

@ -0,0 +1,60 @@
---
date: "2018-06-06T09:33:00+08:00"
title: "使用: 备份与恢复"
slug: "backup-and-restore"
weight: 11
toc: true
draft: false
menu:
sidebar:
parent: "usage"
name: "备份与恢复"
weight: 11
identifier: "backup-and-restore"
---
# 备份与恢复
Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个zip压缩文件。该压缩文件可以被用来进行数据恢复。
## 备份命令 (`dump`)
先转到git用户的权限: `su git`. 再Gitea目录运行 `./gitea dump`。一般会显示类似如下的输出:
```
2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
2016/12/27 22:32:09 Dumping local repositories.../home/git/gitea-repositories
2016/12/27 22:32:22 Dumping database...
2016/12/27 22:32:22 Packing dump files...
2016/12/27 22:32:34 Removing tmp work dir: /tmp/gitea-dump-417443001
2016/12/27 22:32:34 Finish dumping in file gitea-dump-1482906742.zip
```
最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容:
* `custom` - 所有保存在 `custom/` 目录下的配置和自定义的文件。
* `data` - 数据目录下的所有内容不包含使用文件session的文件。该目录包含 `attachments`, `avatars`, `lfs`, `indexers`, 如果使用sqlite 还会包含 sqlite 数据库文件。
* `gitea-db.sql` - 数据库dump出来的 SQL。
* `gitea-repo.zip` - Git仓库压缩文件。
* `log/` - Logs文件如果用作迁移不是必须的。
中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。
## Restore Command (`restore`)
当前还没有恢复命令,恢复需要人工进行。主要是把文件和数据库进行恢复。
例如:
```
apt-get install gitea
unzip gitea-dump-1482906742.zip
cd gitea-dump-1482906742
mv custom/conf/app.ini /etc/gitea/conf/app.ini
unzip gitea-repo.zip
mv gitea-repo/* /var/lib/gitea/repositories/
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea/repositories/
mysql -u$USER -p$PASS $DATABASE <gitea-db.sql
# or sqlite3 $DATABASE_PATH <gitea-db.sql
service gitea restart
```

View File

@ -62,6 +62,7 @@ Admin operations:
- Options:
- `--username value`, `-u value`: Username. Required.
- `--password value`, `-p value`: New password. Required.
- `--config path`: Gitea configuration file path. Optional. (default: custom/conf/app.ini).
- Examples:
- `gitea admin change-password --username myname --password asecurepassword`
- `regenerate`

View File

@ -0,0 +1,46 @@
---
date: "2018-06-02T11:00:00+02:00"
title: "Usage: HTTPS setup"
slug: "https-setup"
weight: 12
toc: true
draft: false
menu:
sidebar:
parent: "usage"
name: "HTTPS setup"
weight: 12
identifier: "https-setup"
---
# HTTPS setup to encrypt connections to Gitea
## Using built-in server
Before you enable HTTPS make sure that you have valid SSL/TLS certificates.
You could use self-generated certificates for evaluation and testing. Please run `gitea cert --host [HOST]` to generate a self signed certificate.
To use Gitea's built-in HTTPS support you must change your `app.ini` file:
```ini
[server]
PROTOCOL=https
ROOT_URL = `https://git.example.com:3000/`
HTTP_PORT = 3000
CERT_FILE = cert.pem
KEY_FILE = key.pem
```
To learn more about the config values, please checkout the [Config Cheat Sheet](../config-cheat-sheet#server).
## Using reverse proxy
Setup up your reverse proxy like shown in the [reverse proxy guide](../reverse-proxies).
After that, enable HTTPS by following one of these guides:
* [nginx](https://nginx.org/en/docs/http/configuring_https_servers.html)
* [apache2/httpd](https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html)
* [caddy](https://caddyserver.com/docs/tls)
Note: You connection between your reverse proxy and gitea might be unencrypted. To encrypt it too follow the [built-in server guide](#using-built-in-server) and change
the proxy url to `https://[URL]`.

View File

@ -13,7 +13,7 @@ Make sure to perform a clean build before running tests:
## Run all tests via local drone
```
drone exec --local --build.event "pull_request"
drone exec --local --build-event "pull_request"
```
## Run sqlite integrations tests

View File

@ -67,9 +67,9 @@ func TestAPISearchRepo(t *testing.T) {
expectedResults
}{
{name: "RepositoriesMax50", requestURL: "/api/v1/repos/search?limit=50", expectedResults: expectedResults{
nil: {count: 15},
user: {count: 15},
user2: {count: 15}},
nil: {count: 16},
user: {count: 16},
user2: {count: 16}},
},
{name: "RepositoriesMax10", requestURL: "/api/v1/repos/search?limit=10", expectedResults: expectedResults{
nil: {count: 10},

View File

@ -68,3 +68,25 @@ func TestSettingShowUserEmailProfile(t *testing.T) {
setting.UI.ShowUserEmail = showUserEmail
}
func TestSettingLandingPage(t *testing.T) {
prepareTestEnv(t)
landingPage := setting.LandingPageURL
setting.LandingPageURL = setting.LandingPageHome
req := NewRequest(t, "GET", "/")
MakeRequest(t, req, http.StatusOK)
setting.LandingPageURL = setting.LandingPageExplore
req = NewRequest(t, "GET", "/")
resp := MakeRequest(t, req, http.StatusFound)
assert.Equal(t, "/explore", resp.Header().Get("Location"))
setting.LandingPageURL = setting.LandingPageOrganizations
req = NewRequest(t, "GET", "/")
resp = MakeRequest(t, req, http.StatusFound)
assert.Equal(t, "/explore/organizations", resp.Header().Get("Location"))
setting.LandingPageURL = landingPage
}

View File

@ -22,8 +22,12 @@ func TestAccessLevel(t *testing.T) {
user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository)
repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository)
// A public repository owned by User 2
repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
assert.False(t, repo1.IsPrivate)
// A private repository owned by Org 3
repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
assert.True(t, repo2.IsPrivate)
level, err := AccessLevel(user1.ID, repo1)
assert.NoError(t, err)
@ -47,8 +51,12 @@ func TestHasAccess(t *testing.T) {
user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository)
repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository)
// A public repository owned by User 2
repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
assert.False(t, repo1.IsPrivate)
// A private repository owned by Org 3
repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
assert.True(t, repo2.IsPrivate)
for _, accessMode := range accessModes {
has, err := HasAccess(user1.ID, repo1, accessMode)

View File

@ -102,7 +102,7 @@ func IsErrEmailAlreadyUsed(err error) bool {
}
func (err ErrEmailAlreadyUsed) Error() string {
return fmt.Sprintf("e-mail has been used [email: %s]", err.Email)
return fmt.Sprintf("e-mail already in use [email: %s]", err.Email)
}
// ErrOpenIDAlreadyUsed represents a "OpenIDAlreadyUsed" kind of error.
@ -117,7 +117,7 @@ func IsErrOpenIDAlreadyUsed(err error) bool {
}
func (err ErrOpenIDAlreadyUsed) Error() string {
return fmt.Sprintf("OpenID has been used [oid: %s]", err.OpenID)
return fmt.Sprintf("OpenID already in use [oid: %s]", err.OpenID)
}
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.

View File

@ -351,7 +351,7 @@
is_mirror: true
num_forks: 1
is_fork: false
-
id: 29
fork_id: 27
@ -365,7 +365,7 @@
num_closed_pulls: 0
is_mirror: false
is_fork: true
-
id: 30
fork_id: 28
@ -389,3 +389,14 @@
num_forks: 0
num_issues: 0
is_mirror: false
-
id: 32
owner_id: 3
lower_name: repo21
name: repo21
is_private: false
num_stars: 0
num_forks: 0
num_issues: 0
is_mirror: false

View File

@ -4,9 +4,8 @@
lower_name: owners
name: Owners
authorize: 4 # owner
num_repos: 2
num_repos: 3
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'
-
id: 2
@ -16,7 +15,6 @@
authorize: 2 # write
num_repos: 1
num_members: 2
unit_types: '[1,2,3,4,5,6,7]'
-
id: 3
@ -26,7 +24,6 @@
authorize: 4 # owner
num_repos: 0
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'
-
id: 4
@ -36,7 +33,6 @@
authorize: 4 # owner
num_repos: 0
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'
-
id: 5
@ -46,7 +42,6 @@
authorize: 4 # owner
num_repos: 2
num_members: 2
unit_types: '[1,2,3,4,5,6,7]'
-
id: 6
@ -56,4 +51,3 @@
authorize: 4 # owner
num_repos: 2
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'

View File

@ -33,9 +33,15 @@
org_id: 19
team_id: 6
repo_id: 27
-
id: 7
org_id: 19
team_id: 6
repo_id: 28
repo_id: 28
-
id: 8
org_id: 3
team_id: 1
repo_id: 32

View File

@ -0,0 +1,209 @@
-
id: 1
team_id: 1
type: 1
-
id: 2
team_id: 1
type: 2
-
id: 3
team_id: 1
type: 3
-
id: 4
team_id: 1
type: 4
-
id: 5
team_id: 1
type: 5
-
id: 6
team_id: 1
type: 6
-
id: 7
team_id: 1
type: 7
-
id: 8
team_id: 2
type: 1
-
id: 9
team_id: 2
type: 2
-
id: 10
team_id: 2
type: 3
-
id: 11
team_id: 2
type: 4
-
id: 12
team_id: 2
type: 5
-
id: 13
team_id: 2
type: 6
-
id: 14
team_id: 2
type: 7
-
id: 15
team_id: 3
type: 1
-
id: 16
team_id: 3
type: 2
-
id: 17
team_id: 3
type: 3
-
id: 18
team_id: 3
type: 4
-
id: 19
team_id: 3
type: 5
-
id: 20
team_id: 3
type: 6
-
id: 21
team_id: 3
type: 7
-
id: 22
team_id: 4
type: 1
-
id: 23
team_id: 4
type: 2
-
id: 24
team_id: 4
type: 3
-
id: 25
team_id: 4
type: 4
-
id: 26
team_id: 4
type: 5
-
id: 27
team_id: 4
type: 6
-
id: 28
team_id: 4
type: 7
-
id: 29
team_id: 5
type: 1
-
id: 30
team_id: 5
type: 2
-
id: 31
team_id: 5
type: 3
-
id: 32
team_id: 5
type: 4
-
id: 33
team_id: 5
type: 5
-
id: 34
team_id: 5
type: 6
-
id: 35
team_id: 5
type: 7
-
id: 36
team_id: 6
type: 1
-
id: 37
team_id: 6
type: 2
-
id: 38
team_id: 6
type: 3
-
id: 39
team_id: 6
type: 4
-
id: 40
team_id: 6
type: 5
-
id: 41
team_id: 6
type: 6
-
id: 42
team_id: 6
type: 7

View File

@ -45,7 +45,7 @@
is_admin: false
avatar: avatar3
avatar_email: user3@example.com
num_repos: 2
num_repos: 3
num_members: 2
num_teams: 2

View File

@ -147,6 +147,10 @@ func (c *Comment) AfterLoad(session *xorm.Session) {
// AfterDelete is invoked from XORM after the object is deleted.
func (c *Comment) AfterDelete() {
if c.ID <= 0 {
return
}
_, err := DeleteAttachmentsByComment(c.ID, true)
if err != nil {

View File

@ -71,3 +71,15 @@ func getIssueWatchers(e Engine, issueID int64) (watches []*IssueWatch, err error
Find(&watches)
return
}
func removeIssueWatchersByRepoID(e Engine, userID int64, repoID int64) error {
iw := &IssueWatch{
IsWatching: false,
}
_, err := e.
Join("INNER", "issue", "`issue`.id = `issue_watch`.issue_id AND `issue`.repo_id = ?", repoID).
Cols("is_watching", "updated_unix").
Where("`issue_watch`.user_id = ?", userID).
Update(iw)
return err
}

View File

@ -186,6 +186,12 @@ var migrations = []Migration{
NewMigration("add u2f", addU2FReg),
// v66 -> v67
NewMigration("add login source id column for public_key table", addLoginSourceIDToPublicKeyTable),
// v67 -> v68
NewMigration("remove stale watches", removeStaleWatches),
// v68 -> V69
NewMigration("Reformat and remove incorrect topics", reformatAndRemoveIncorrectTopics),
// v69 -> v70
NewMigration("move team units to team_unit table", moveTeamUnitsToTeamUnitTable),
}
// Migrate database to current version

View File

@ -25,10 +25,15 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) {
Created time.Time `xorm:"-"`
}
type Team struct {
ID int64
UnitTypes []int `xorm:"json"`
}
// Update team unit types
const batchSize = 100
for start := 0; ; start += batchSize {
teams := make([]*models.Team, 0, batchSize)
teams := make([]*Team, 0, batchSize)
if err := x.Limit(batchSize, start).Find(&teams); err != nil {
return err
}
@ -36,7 +41,7 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) {
break
}
for _, team := range teams {
ut := make([]models.UnitType, 0, len(team.UnitTypes))
ut := make([]int, 0, len(team.UnitTypes))
for _, u := range team.UnitTypes {
if u < V16UnitTypeCommits {
ut = append(ut, u)

158
models/migrations/v67.go Normal file
View File

@ -0,0 +1,158 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"code.gitea.io/gitea/modules/setting"
"github.com/go-xorm/xorm"
)
func removeStaleWatches(x *xorm.Engine) error {
type Watch struct {
ID int64
UserID int64
RepoID int64
}
type IssueWatch struct {
ID int64
UserID int64
RepoID int64
IsWatching bool
}
type Repository struct {
ID int64
IsPrivate bool
OwnerID int64
}
type Access struct {
UserID int64
RepoID int64
Mode int
}
const (
// AccessModeNone no access
AccessModeNone int = iota // 0
// AccessModeRead read access
AccessModeRead // 1
)
accessLevel := func(userID int64, repo *Repository) (int, error) {
mode := AccessModeNone
if !repo.IsPrivate {
mode = AccessModeRead
}
if userID == 0 {
return mode, nil
}
if userID == repo.OwnerID {
return 4, nil
}
a := &Access{UserID: userID, RepoID: repo.ID}
if has, err := x.Get(a); !has || err != nil {
return mode, err
}
return a.Mode, nil
}
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
repoCache := make(map[int64]*Repository)
err := x.BufferSize(setting.IterateBufferSize).Iterate(new(Watch),
func(idx int, bean interface{}) error {
watch := bean.(*Watch)
repo := repoCache[watch.RepoID]
if repo == nil {
repo = &Repository{
ID: watch.RepoID,
}
if _, err := x.Get(repo); err != nil {
return err
}
repoCache[watch.RepoID] = repo
}
// Remove watches from now unaccessible repositories
mode, err := accessLevel(watch.UserID, repo)
if err != nil {
return err
}
has := AccessModeRead <= mode
if has {
return nil
}
if _, err = sess.Delete(&Watch{0, watch.UserID, repo.ID}); err != nil {
return err
}
_, err = sess.Exec("UPDATE `repository` SET num_watches = num_watches - 1 WHERE id = ?", repo.ID)
return err
})
if err != nil {
return err
}
repoCache = make(map[int64]*Repository)
err = x.BufferSize(setting.IterateBufferSize).
Distinct("issue_watch.user_id", "issue.repo_id").
Join("INNER", "issue", "issue_watch.issue_id = issue.id").
Where("issue_watch.is_watching = ?", true).
Iterate(new(IssueWatch),
func(idx int, bean interface{}) error {
watch := bean.(*IssueWatch)
repo := repoCache[watch.RepoID]
if repo == nil {
repo = &Repository{
ID: watch.RepoID,
}
if _, err := x.Get(repo); err != nil {
return err
}
repoCache[watch.RepoID] = repo
}
// Remove issue watches from now unaccssible repositories
mode, err := accessLevel(watch.UserID, repo)
if err != nil {
return err
}
has := AccessModeRead <= mode
if has {
return nil
}
iw := &IssueWatch{
IsWatching: false,
}
_, err = sess.
Join("INNER", "issue", "`issue`.id = `issue_watch`.issue_id AND `issue`.repo_id = ?", watch.RepoID).
Cols("is_watching", "updated_unix").
Where("`issue_watch`.user_id = ?", watch.UserID).
Update(iw)
return err
})
if err != nil {
return err
}
return sess.Commit()
}

213
models/migrations/v68.go Normal file
View File

@ -0,0 +1,213 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"fmt"
"regexp"
"strings"
"code.gitea.io/gitea/modules/log"
"github.com/go-xorm/xorm"
)
var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`)
func validateTopic(topic string) bool {
return len(topic) <= 35 && topicPattern.MatchString(topic)
}
func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) {
log.Info("This migration could take up to minutes, please be patient.")
type Topic struct {
ID int64
Name string `xorm:"UNIQUE"`
RepoCount int
CreatedUnix int64 `xorm:"INDEX created"`
UpdatedUnix int64 `xorm:"INDEX updated"`
}
type RepoTopic struct {
RepoID int64 `xorm:"UNIQUE(s)"`
TopicID int64 `xorm:"UNIQUE(s)"`
}
type Repository struct {
ID int64 `xorm:"pk autoincr"`
Topics []string `xorm:"TEXT JSON"`
}
if err := x.Sync2(new(Topic)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
if err := x.Sync2(new(RepoTopic)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
sess := x.NewSession()
defer sess.Close()
const batchSize = 100
touchedRepo := make(map[int64]struct{})
delTopicIDs := make([]int64, 0, batchSize)
log.Info("Validating existed topics...")
if err := sess.Begin(); err != nil {
return err
}
for start := 0; ; start += batchSize {
topics := make([]*Topic, 0, batchSize)
if err := x.Cols("id", "name").Asc("id").Limit(batchSize, start).Find(&topics); err != nil {
return err
}
if len(topics) == 0 {
break
}
for _, topic := range topics {
if validateTopic(topic.Name) {
continue
}
log.Info("Incorrect topic: id = %v, name = %q", topic.ID, topic.Name)
topic.Name = strings.Replace(strings.TrimSpace(strings.ToLower(topic.Name)), " ", "-", -1)
ids := make([]int64, 0, 30)
if err := sess.Table("repo_topic").Cols("repo_id").
Where("topic_id = ?", topic.ID).Find(&ids); err != nil {
return err
}
log.Info("Touched repo ids: %v", ids)
for _, id := range ids {
touchedRepo[id] = struct{}{}
}
if validateTopic(topic.Name) {
unifiedTopic := Topic{Name: topic.Name}
exists, err := sess.Cols("id", "name").Get(&unifiedTopic)
log.Info("Exists topic with the name %q? %v, id = %v", topic.Name, exists, unifiedTopic.ID)
if err != nil {
return err
}
if exists {
log.Info("Updating repo_topic rows with topic_id = %v to topic_id = %v", topic.ID, unifiedTopic.ID)
if _, err := sess.Where("topic_id = ? AND repo_id NOT IN "+
"(SELECT rt1.repo_id FROM repo_topic rt1 INNER JOIN repo_topic rt2 "+
"ON rt1.repo_id = rt2.repo_id WHERE rt1.topic_id = ? AND rt2.topic_id = ?)",
topic.ID, topic.ID, unifiedTopic.ID).Update(&RepoTopic{TopicID: unifiedTopic.ID}); err != nil {
return err
}
log.Info("Updating topic `repo_count` field")
if _, err := sess.Exec(
"UPDATE topic SET repo_count = (SELECT COUNT(*) FROM repo_topic WHERE topic_id = ? GROUP BY topic_id) WHERE id = ?",
unifiedTopic.ID, unifiedTopic.ID); err != nil {
return err
}
} else {
log.Info("Updating topic: id = %v, name = %q", topic.ID, topic.Name)
if _, err := sess.Table("topic").ID(topic.ID).
Update(&Topic{Name: topic.Name}); err != nil {
return err
}
continue
}
}
delTopicIDs = append(delTopicIDs, topic.ID)
}
}
if err := sess.Commit(); err != nil {
return err
}
sess.Init()
log.Info("Deleting incorrect topics...")
if err := sess.Begin(); err != nil {
return err
}
log.Info("Deleting 'repo_topic' rows for topics with ids = %v", delTopicIDs)
if _, err := sess.In("topic_id", delTopicIDs).Delete(&RepoTopic{}); err != nil {
return err
}
log.Info("Deleting topics with id = %v", delTopicIDs)
if _, err := sess.In("id", delTopicIDs).Delete(&Topic{}); err != nil {
return err
}
if err := sess.Commit(); err != nil {
return err
}
delRepoTopics := make([]*RepoTopic, 0, batchSize)
log.Info("Checking the number of topics in the repositories...")
for start := 0; ; start += batchSize {
repoTopics := make([]*RepoTopic, 0, batchSize)
if err := x.Cols("repo_id").Asc("repo_id").Limit(batchSize, start).
GroupBy("repo_id").Having("COUNT(*) > 25").Find(&repoTopics); err != nil {
return err
}
if len(repoTopics) == 0 {
break
}
log.Info("Number of repositories with more than 25 topics: %v", len(repoTopics))
for _, repoTopic := range repoTopics {
touchedRepo[repoTopic.RepoID] = struct{}{}
tmpRepoTopics := make([]*RepoTopic, 0, 30)
if err := x.Where("repo_id = ?", repoTopic.RepoID).Find(&tmpRepoTopics); err != nil {
return err
}
log.Info("Repository with id = %v has %v topics", repoTopic.RepoID, len(tmpRepoTopics))
for i := len(tmpRepoTopics) - 1; i > 24; i-- {
delRepoTopics = append(delRepoTopics, tmpRepoTopics[i])
}
}
}
sess.Init()
log.Info("Deleting superfluous topics for repositories (more than 25 topics)...")
if err := sess.Begin(); err != nil {
return err
}
for _, repoTopic := range delRepoTopics {
log.Info("Deleting 'repo_topic' rows for 'repository' with id = %v. Topic id = %v",
repoTopic.RepoID, repoTopic.TopicID)
if _, err := sess.Where("repo_id = ? AND topic_id = ?", repoTopic.RepoID,
repoTopic.TopicID).Delete(&RepoTopic{}); err != nil {
return err
}
if _, err := sess.Exec(
"UPDATE topic SET repo_count = (SELECT repo_count FROM topic WHERE id = ?) - 1 WHERE id = ?",
repoTopic.TopicID, repoTopic.TopicID); err != nil {
return err
}
}
log.Info("Updating repositories 'topics' fields...")
for repoID := range touchedRepo {
topicNames := make([]string, 0, 30)
if err := sess.Table("topic").Cols("name").
Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id").
Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil {
return err
}
log.Info("Updating 'topics' field for repository with id = %v", repoID)
if _, err := sess.ID(repoID).Cols("topics").
Update(&Repository{Topics: topicNames}); err != nil {
return err
}
}
if err := sess.Commit(); err != nil {
return err
}
return nil
}

80
models/migrations/v69.go Normal file
View File

@ -0,0 +1,80 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"fmt"
"github.com/go-xorm/xorm"
)
func moveTeamUnitsToTeamUnitTable(x *xorm.Engine) error {
// Team see models/team.go
type Team struct {
ID int64
OrgID int64
UnitTypes []int `xorm:"json"`
}
// TeamUnit see models/org_team.go
type TeamUnit struct {
ID int64 `xorm:"pk autoincr"`
OrgID int64 `xorm:"INDEX"`
TeamID int64 `xorm:"UNIQUE(s)"`
Type int `xorm:"UNIQUE(s)"`
}
if err := x.Sync2(new(TeamUnit)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
// Update team unit types
const batchSize = 100
for start := 0; ; start += batchSize {
teams := make([]*Team, 0, batchSize)
if err := x.Limit(batchSize, start).Find(&teams); err != nil {
return err
}
if len(teams) == 0 {
break
}
for _, team := range teams {
var unitTypes []int
if len(team.UnitTypes) == 0 {
unitTypes = allUnitTypes
} else {
unitTypes = team.UnitTypes
}
// insert units for team
var units = make([]TeamUnit, 0, len(unitTypes))
for _, tp := range unitTypes {
units = append(units, TeamUnit{
OrgID: team.OrgID,
TeamID: team.ID,
Type: tp,
})
}
if _, err := sess.Insert(&units); err != nil {
return fmt.Errorf("Insert team units: %v", err)
}
}
}
if err := dropTableColumns(sess, "team", "unit_types"); err != nil {
return err
}
return sess.Commit()
}

View File

@ -1,4 +1,5 @@
// Copyright 2014 The Gogs Authors. All rights reserved.
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
@ -121,6 +122,7 @@ func init() {
new(Reaction),
new(IssueAssignees),
new(U2FRegistration),
new(TeamUnit),
)
gonicNames := []string{"SSL", "UID"}
@ -184,6 +186,18 @@ func parsePostgreSQLHostPort(info string) (string, string) {
return host, port
}
func getPostgreSQLConnectionString(DBHost, DBUser, DBPasswd, DBName, DBParam, DBSSLMode string) (connStr string) {
host, port := parsePostgreSQLHostPort(DBHost)
if host[0] == '/' { // looks like a unix socket
connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s",
url.PathEscape(DBUser), url.PathEscape(DBPasswd), port, DBName, DBParam, DBSSLMode, host)
} else {
connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s",
url.PathEscape(DBUser), url.PathEscape(DBPasswd), host, port, DBName, DBParam, DBSSLMode)
}
return
}
func parseMSSQLHostPort(info string) (string, string) {
host, port := "127.0.0.1", "1433"
if strings.Contains(info, ":") {
@ -214,14 +228,7 @@ func getEngine() (*xorm.Engine, error) {
DbCfg.User, DbCfg.Passwd, DbCfg.Host, DbCfg.Name, Param)
}
case "postgres":
host, port := parsePostgreSQLHostPort(DbCfg.Host)
if host[0] == '/' { // looks like a unix socket
connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s",
url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), port, DbCfg.Name, Param, DbCfg.SSLMode, host)
} else {
connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s",
url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), host, port, DbCfg.Name, Param, DbCfg.SSLMode)
}
connStr = getPostgreSQLConnectionString(DbCfg.Host, DbCfg.User, DbCfg.Passwd, DbCfg.Name, Param, DbCfg.SSLMode)
case "mssql":
host, port := parseMSSQLHostPort(DbCfg.Host)
connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, DbCfg.Name, DbCfg.User, DbCfg.Passwd)

View File

@ -1,4 +1,5 @@
// Copyright 2016 The Gogs Authors. All rights reserved.
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
@ -53,3 +54,42 @@ func Test_parsePostgreSQLHostPort(t *testing.T) {
assert.Equal(t, test.Port, port)
}
}
func Test_getPostgreSQLConnectionString(t *testing.T) {
tests := []struct {
Host string
Port string
User string
Passwd string
Name string
Param string
SSLMode string
Output string
}{
{
Host: "/tmp/pg.sock",
Port: "4321",
User: "testuser",
Passwd: "space space !#$%^^%^```-=?=",
Name: "gitea",
Param: "",
SSLMode: "false",
Output: "postgres://testuser:space%20space%20%21%23$%25%5E%5E%25%5E%60%60%60-=%3F=@:5432/giteasslmode=false&host=/tmp/pg.sock",
},
{
Host: "localhost",
Port: "1234",
User: "pgsqlusername",
Passwd: "I love Gitea!",
Name: "gitea",
Param: "",
SSLMode: "true",
Output: "postgres://pgsqlusername:I%20love%20Gitea%21@localhost:5432/giteasslmode=true",
},
}
for _, test := range tests {
connStr := getPostgreSQLConnectionString(test.Host, test.User, test.Passwd, test.Name, test.Param, test.SSLMode)
assert.Equal(t, test.Output, connStr)
}
}

View File

@ -119,7 +119,17 @@ func createOrUpdateIssueNotifications(e Engine, issue *Issue, notificationAuthor
}
}
issue.loadRepo(e)
for _, watch := range watches {
issue.Repo.Units = nil
if issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypePullRequests) {
continue
}
if !issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypeIssues) {
continue
}
if err := notifyUser(watch.UserID); err != nil {
return err
}

View File

@ -154,12 +154,26 @@ func CreateOrganization(org, owner *User) (err error) {
Name: ownerTeamName,
Authorize: AccessModeOwner,
NumMembers: 1,
UnitTypes: allRepUnitTypes,
}
if _, err = sess.Insert(t); err != nil {
return fmt.Errorf("insert owner team: %v", err)
}
// insert units for team
var units = make([]TeamUnit, 0, len(allRepUnitTypes))
for _, tp := range allRepUnitTypes {
units = append(units, TeamUnit{
OrgID: org.ID,
TeamID: t.ID,
Type: tp,
})
}
if _, err = sess.Insert(&units); err != nil {
sess.Rollback()
return err
}
if _, err = sess.Insert(&TeamUser{
UID: owner.ID,
OrgID: org.ID,
@ -238,6 +252,7 @@ func deleteOrg(e *xorm.Session, u *User) error {
&Team{OrgID: u.ID},
&OrgUser{OrgID: u.ID},
&TeamUser{OrgID: u.ID},
&TeamUnit{OrgID: u.ID},
); err != nil {
return fmt.Errorf("deleteBeans: %v", err)
}

View File

@ -1,3 +1,4 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// 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.
@ -10,7 +11,6 @@ import (
"strings"
"code.gitea.io/gitea/modules/log"
"github.com/go-xorm/xorm"
)
@ -28,15 +28,16 @@ type Team struct {
Members []*User `xorm:"-"`
NumRepos int
NumMembers int
UnitTypes []UnitType `xorm:"json"`
Units []*TeamUnit `xorm:"-"`
}
// GetUnitTypes returns unit types the team owned, empty means all the unit types
func (t *Team) GetUnitTypes() []UnitType {
if len(t.UnitTypes) == 0 {
return allRepUnitTypes
func (t *Team) getUnits(e Engine) (err error) {
if t.Units != nil {
return nil
}
return t.UnitTypes
t.Units, err = getUnitsByTeamID(e, t.ID)
return err
}
// HasWriteAccess returns true if team has at least write level access mode.
@ -178,6 +179,11 @@ func (t *Team) removeRepository(e Engine, repo *Repository, recalculate bool) (e
if err = watchRepo(e, teamUser.UID, repo.ID, false); err != nil {
return err
}
// Remove all IssueWatches a user has subscribed to in the repositories
if err := removeIssueWatchersByRepoID(e, teamUser.UID, repo.ID); err != nil {
return err
}
}
return nil
@ -209,11 +215,12 @@ func (t *Team) RemoveRepository(repoID int64) error {
// UnitEnabled returns if the team has the given unit type enabled
func (t *Team) UnitEnabled(tp UnitType) bool {
if len(t.UnitTypes) == 0 {
return true
if err := t.getUnits(x); err != nil {
log.Warn("Error loading repository (ID: %d) units: %s", t.ID, err.Error())
}
for _, u := range t.UnitTypes {
if u == tp {
for _, unit := range t.Units {
if unit.Type == tp {
return true
}
}
@ -270,6 +277,17 @@ func NewTeam(t *Team) (err error) {
return err
}
// insert units for team
if len(t.Units) > 0 {
for _, unit := range t.Units {
unit.TeamID = t.ID
}
if _, err = sess.Insert(&t.Units); err != nil {
sess.Rollback()
return err
}
}
// Update organization number of teams.
if _, err = sess.Exec("UPDATE `user` SET num_teams=num_teams+1 WHERE id = ?", t.OrgID); err != nil {
sess.Rollback()
@ -374,11 +392,34 @@ func DeleteTeam(t *Team) error {
return err
}
if err := t.getMembers(sess); err != nil {
return err
}
// Delete all accesses.
for _, repo := range t.Repos {
if err := repo.recalculateTeamAccesses(sess, t.ID); err != nil {
return err
}
// Remove watches from all users and now unaccessible repos
for _, user := range t.Members {
has, err := hasAccess(sess, user.ID, repo, AccessModeRead)
if err != nil {
return err
} else if has {
continue
}
if err = watchRepo(sess, user.ID, repo.ID, false); err != nil {
return err
}
// Remove all IssueWatches a user has subscribed to in the repositories
if err = removeIssueWatchersByRepoID(sess, user.ID, repo.ID); err != nil {
return err
}
}
}
// Delete team-repo
@ -396,6 +437,13 @@ func DeleteTeam(t *Team) error {
return err
}
// Delete team-unit.
if _, err := sess.
Where("team_id=?", t.ID).
Delete(new(TeamUnit)); err != nil {
return err
}
// Delete team.
if _, err := sess.ID(t.ID).Delete(new(Team)); err != nil {
return err
@ -518,6 +566,10 @@ func AddTeamMember(team *Team, userID int64) error {
if err := repo.recalculateTeamAccesses(sess, 0); err != nil {
return err
}
if err = watchRepo(sess, userID, repo.ID, true); err != nil {
return err
}
}
return sess.Commit()
@ -558,6 +610,23 @@ func removeTeamMember(e *xorm.Session, team *Team, userID int64) error {
if err := repo.recalculateTeamAccesses(e, 0); err != nil {
return err
}
// Remove watches from now unaccessible
has, err := hasAccess(e, userID, repo, AccessModeRead)
if err != nil {
return err
} else if has {
continue
}
if err = watchRepo(e, userID, repo.ID, false); err != nil {
return err
}
// Remove all IssueWatches a user has subscribed to in the repositories
if err := removeIssueWatchersByRepoID(e, userID, repo.ID); err != nil {
return err
}
}
// Check if the user is a member of any team in the organization.
@ -646,3 +715,47 @@ func GetTeamsWithAccessToRepo(orgID, repoID int64, mode AccessMode) ([]*Team, er
And("team_repo.repo_id = ?", repoID).
Find(&teams)
}
// ___________ ____ ___ .__ __
// \__ ___/___ _____ _____ | | \____ |__|/ |_
// | |_/ __ \\__ \ / \| | / \| \ __\
// | |\ ___/ / __ \| Y Y \ | / | \ || |
// |____| \___ >____ /__|_| /______/|___| /__||__|
// \/ \/ \/ \/
// TeamUnit describes all units of a repository
type TeamUnit struct {
ID int64 `xorm:"pk autoincr"`
OrgID int64 `xorm:"INDEX"`
TeamID int64 `xorm:"UNIQUE(s)"`
Type UnitType `xorm:"UNIQUE(s)"`
}
// Unit returns Unit
func (t *TeamUnit) Unit() Unit {
return Units[t.Type]
}
func getUnitsByTeamID(e Engine, teamID int64) (units []*TeamUnit, err error) {
return units, e.Where("team_id = ?", teamID).Find(&units)
}
// UpdateTeamUnits updates a teams's units
func UpdateTeamUnits(team *Team, units []TeamUnit) (err error) {
sess := x.NewSession()
defer sess.Close()
if err = sess.Begin(); err != nil {
return err
}
if _, err = sess.Where("team_id = ?", team.ID).Delete(new(TeamUnit)); err != nil {
return err
}
if _, err = sess.Insert(units); err != nil {
sess.Rollback()
return err
}
return sess.Commit()
}

View File

@ -489,8 +489,8 @@ func TestAccessibleReposEnv_CountRepos(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, expectedCount, count)
}
testSuccess(2, 2)
testSuccess(4, 1)
testSuccess(2, 3)
testSuccess(4, 2)
}
func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
@ -503,8 +503,8 @@ func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, expectedRepoIDs, repoIDs)
}
testSuccess(2, 1, 100, []int64{3, 5})
testSuccess(4, 0, 100, []int64{3})
testSuccess(2, 1, 100, []int64{3, 5, 32})
testSuccess(4, 0, 100, []int64{3, 32})
}
func TestAccessibleReposEnv_Repos(t *testing.T) {
@ -522,8 +522,8 @@ func TestAccessibleReposEnv_Repos(t *testing.T) {
}
assert.Equal(t, expectedRepos, repos)
}
testSuccess(2, []int64{3, 5})
testSuccess(4, []int64{3})
testSuccess(2, []int64{3, 5, 32})
testSuccess(4, []int64{3, 32})
}
func TestAccessibleReposEnv_MirrorRepos(t *testing.T) {

View File

@ -448,6 +448,11 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
}
}
rel.Repo = repo
if err = rel.LoadAttributes(); err != nil {
return fmt.Errorf("LoadAttributes: %v", err)
}
mode, _ := accessLevel(x, u.ID, rel.Repo)
if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseDeleted,

View File

@ -365,22 +365,14 @@ func (repo *Repository) getUnitsByUserID(e Engine, userID int64, isAdmin bool) (
return err
}
var allTypes = make(map[UnitType]struct{}, len(allRepUnitTypes))
for _, team := range teams {
// Administrators can not be limited
if team.Authorize >= AccessModeAdmin {
return nil
}
for _, unitType := range team.UnitTypes {
allTypes[unitType] = struct{}{}
}
}
// unique
var newRepoUnits = make([]*RepoUnit, 0, len(repo.Units))
for _, u := range repo.Units {
if _, ok := allTypes[u.Type]; ok {
newRepoUnits = append(newRepoUnits, u)
for _, team := range teams {
if team.UnitEnabled(u.Type) {
newRepoUnits = append(newRepoUnits, u)
break
}
}
}
@ -789,7 +781,7 @@ var (
// DescriptionHTML does special handles to description and return HTML string.
func (repo *Repository) DescriptionHTML() template.HTML {
sanitize := func(s string) string {
return fmt.Sprintf(`<a href="%[1]s" target="_blank" rel="noopener">%[1]s</a>`, s)
return fmt.Sprintf(`<a href="%[1]s" target="_blank" rel="noopener noreferrer">%[1]s</a>`, s)
}
return template.HTML(descPattern.ReplaceAllStringFunc(markup.Sanitize(repo.Description), sanitize))
}
@ -1848,6 +1840,12 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
if _, err = sess.In("issue_id", issueIDs).Delete(&IssueUser{}); err != nil {
return err
}
if _, err = sess.In("issue_id", issueIDs).Delete(&Reaction{}); err != nil {
return err
}
if _, err = sess.In("issue_id", issueIDs).Delete(&IssueWatch{}); err != nil {
return err
}
attachments := make([]*Attachment, 0, 5)
if err = sess.

View File

@ -172,5 +172,14 @@ func (repo *Repository) DeleteCollaboration(uid int64) (err error) {
return err
}
if err = watchRepo(sess, uid, repo.ID, false); err != nil {
return err
}
// Remove all IssueWatches a user has subscribed to in the repository
if err := removeIssueWatchersByRepoID(sess, uid, repo.ID); err != nil {
return err
}
return sess.Commit()
}

View File

@ -147,10 +147,10 @@ func TestSearchRepositoryByName(t *testing.T) {
count: 14},
{name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, AllPublic: true},
count: 15},
count: 16},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 19},
count: 20},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName",
opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 13},
@ -159,7 +159,7 @@ func TestSearchRepositoryByName(t *testing.T) {
count: 11},
{name: "AllPublic/PublicRepositoriesOfOrganization",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true, Collaborate: util.OptionalBoolFalse},
count: 15},
count: 16},
}
for _, testCase := range testCases {

View File

@ -109,6 +109,23 @@ func notifyWatchers(e Engine, act *Action) error {
act.ID = 0
act.UserID = watches[i].UserID
act.Repo.Units = nil
switch act.OpType {
case ActionCommitRepo, ActionPushTag, ActionDeleteTag, ActionDeleteBranch:
if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeCode) {
continue
}
case ActionCreateIssue, ActionCommentIssue, ActionCloseIssue, ActionReopenIssue:
if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeIssues) {
continue
}
case ActionCreatePullRequest, ActionMergePullRequest, ActionClosePullRequest, ActionReopenPullRequest:
if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypePullRequests) {
continue
}
}
if _, err = e.InsertOne(act); err != nil {
return fmt.Errorf("insert new action: %v", err)
}

View File

@ -6,6 +6,7 @@ package models
import (
"fmt"
"regexp"
"strings"
"code.gitea.io/gitea/modules/util"
@ -20,10 +21,12 @@ func init() {
)
}
var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`)
// Topic represents a topic of repositories
type Topic struct {
ID int64
Name string `xorm:"unique"`
Name string `xorm:"UNIQUE"`
RepoCount int
CreatedUnix util.TimeStamp `xorm:"INDEX created"`
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"`
@ -31,8 +34,8 @@ type Topic struct {
// RepoTopic represents associated repositories and topics
type RepoTopic struct {
RepoID int64 `xorm:"unique(s)"`
TopicID int64 `xorm:"unique(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
TopicID int64 `xorm:"UNIQUE(s)"`
}
// ErrTopicNotExist represents an error that a topic is not exist
@ -51,6 +54,11 @@ func (err ErrTopicNotExist) Error() string {
return fmt.Sprintf("topic is not exist [name: %s]", err.Name)
}
// ValidateTopic checks topics by length and match pattern rules
func ValidateTopic(topic string) bool {
return len(topic) <= 35 && topicPattern.MatchString(topic)
}
// GetTopicByName retrieves topic by name
func GetTopicByName(name string) (*Topic, error) {
var topic Topic
@ -182,6 +190,13 @@ func SaveTopics(repoID int64, topicNames ...string) error {
}
}
topicNames = make([]string, 0, 25)
if err := sess.Table("topic").Cols("name").
Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id").
Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil {
return err
}
if _, err := sess.ID(repoID).Cols("topics").Update(&Repository{
Topics: topicNames,
}); err != nil {

View File

@ -55,3 +55,16 @@ func TestAddTopic(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 2, len(topics))
}
func TestTopicValidator(t *testing.T) {
assert.True(t, ValidateTopic("12345"))
assert.True(t, ValidateTopic("2-test"))
assert.True(t, ValidateTopic("test-3"))
assert.True(t, ValidateTopic("first"))
assert.True(t, ValidateTopic("second-test-topic"))
assert.True(t, ValidateTopic("third-project-topic-with-max-length"))
assert.False(t, ValidateTopic("$fourth-test,topic"))
assert.False(t, ValidateTopic("-fifth-test-topic"))
assert.False(t, ValidateTopic("sixth-go-project-topic-with-excess-length"))
}

View File

@ -433,6 +433,17 @@ func (u *User) IsPasswordSet() bool {
// UploadAvatar saves custom avatar for user.
// FIXME: split uploads to different subdirs in case we have massive users.
func (u *User) UploadAvatar(data []byte) error {
imgCfg, _, err := image.DecodeConfig(bytes.NewReader(data))
if err != nil {
return fmt.Errorf("DecodeConfig: %v", err)
}
if imgCfg.Width > setting.AvatarMaxWidth {
return fmt.Errorf("Image width is to large: %d > %d", imgCfg.Width, setting.AvatarMaxWidth)
}
if imgCfg.Height > setting.AvatarMaxHeight {
return fmt.Errorf("Image height is to large: %d > %d", imgCfg.Height, setting.AvatarMaxHeight)
}
img, _, err := image.Decode(bytes.NewReader(data))
if err != nil {
return fmt.Errorf("Decode: %v", err)
@ -546,28 +557,46 @@ func (u *User) GetRepositories(page, pageSize int) (err error) {
return err
}
// GetRepositoryIDs returns repositories IDs where user owned
func (u *User) GetRepositoryIDs() ([]int64, error) {
// GetRepositoryIDs returns repositories IDs where user owned and has unittypes
func (u *User) GetRepositoryIDs(units ...UnitType) ([]int64, error) {
var ids []int64
return ids, x.Table("repository").Cols("id").Where("owner_id = ?", u.ID).Find(&ids)
sess := x.Table("repository").Cols("repository.id")
if len(units) > 0 {
sess = sess.Join("INNER", "repo_unit", "repository.id = repo_unit.repo_id")
sess = sess.In("repo_unit.type", units)
}
return ids, sess.Where("owner_id = ?", u.ID).Find(&ids)
}
// GetOrgRepositoryIDs returns repositories IDs where user's team owned
func (u *User) GetOrgRepositoryIDs() ([]int64, error) {
// GetOrgRepositoryIDs returns repositories IDs where user's team owned and has unittypes
func (u *User) GetOrgRepositoryIDs(units ...UnitType) ([]int64, error) {
var ids []int64
return ids, x.Table("repository").
sess := x.Table("repository").
Cols("repository.id").
Join("INNER", "team_user", "repository.owner_id = team_user.org_id AND team_user.uid = ?", u.ID).
Join("INNER", "team_user", "repository.owner_id = team_user.org_id").
Join("INNER", "team_repo", "repository.is_private != ? OR (team_user.team_id = team_repo.team_id AND repository.id = team_repo.repo_id)", true)
if len(units) > 0 {
sess = sess.Join("INNER", "team_unit", "team_unit.team_id = team_user.team_id")
sess = sess.In("team_unit.type", units)
}
return ids, sess.
Where("team_user.uid = ?", u.ID).
GroupBy("repository.id").Find(&ids)
}
// GetAccessRepoIDs returns all repositories IDs where user's or user is a team member organizations
func (u *User) GetAccessRepoIDs() ([]int64, error) {
ids, err := u.GetRepositoryIDs()
func (u *User) GetAccessRepoIDs(units ...UnitType) ([]int64, error) {
ids, err := u.GetRepositoryIDs(units...)
if err != nil {
return nil, err
}
ids2, err := u.GetOrgRepositoryIDs()
ids2, err := u.GetOrgRepositoryIDs(units...)
if err != nil {
return nil, err
}

View File

@ -159,3 +159,25 @@ func BenchmarkHashPassword(b *testing.B) {
u.HashPassword(pass)
}
}
func TestGetOrgRepositoryIDs(t *testing.T) {
assert.NoError(t, PrepareTestDatabase())
user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user4 := AssertExistsAndLoadBean(t, &User{ID: 4}).(*User)
user5 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
accessibleRepos, err := user2.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 2's team has access to private repos 3, 5, repo 32 is a public repo of the organization
assert.Equal(t, []int64{3, 5, 32}, accessibleRepos)
accessibleRepos, err = user4.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 4's team has access to private repo 3, repo 32 is a public repo of the organization
assert.Equal(t, []int64{3, 32}, accessibleRepos)
accessibleRepos, err = user5.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 5's team has no access to any repo
assert.Len(t, accessibleRepos, 0)
}

View File

@ -163,7 +163,7 @@ func createProvider(providerName, providerType, clientID, clientSecret, openIDCo
profileURL = customURLMapping.ProfileURL
}
}
provider = gitlab.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL)
provider = gitlab.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL, "read_user")
case "gplus":
provider = gplus.New(clientID, clientSecret, callbackURL, "email")
case "openidConnect":

View File

@ -371,7 +371,7 @@ func (f *MergePullRequestForm) Validate(ctx *macaron.Context, errs binding.Error
// NewReleaseForm form for creating release
type NewReleaseForm struct {
TagName string `binding:"Required"`
TagName string `binding:"Required;GitRefName"`
Target string `form:"tag_target" binding:"Required"`
Title string `binding:"Required"`
Content string

View File

@ -37,12 +37,6 @@ func Toggle(options *ToggleOptions) macaron.Handler {
return
}
// Check non-logged users landing page.
if !ctx.IsSigned && ctx.Req.RequestURI == "/" && setting.LandingPageURL != setting.LandingPageHome {
ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL))
return
}
// Redirect to dashboard if user tries to visit any non-login page.
if options.SignOutRequired && ctx.IsSigned && ctx.Req.RequestURI != "/" {
ctx.Redirect(setting.AppSubURL + "/")

View File

@ -469,6 +469,9 @@ func shortLinkProcessorFull(ctx *postProcessCtx, node *html.Node, noLink bool) {
} else {
link = strings.Replace(link, " ", "-", -1)
}
if !strings.Contains(link, "/") {
link = url.PathEscape(link)
}
}
urlPrefix := ctx.urlPrefix
if image {

View File

@ -82,12 +82,18 @@ func TestRender_ShortLinks(t *testing.T) {
rawtree := util.URLJoin(AppSubURL, "raw", "master")
url := util.URLJoin(tree, "Link")
otherURL := util.URLJoin(tree, "Other-Link")
encodedURL := util.URLJoin(tree, "Link%3F")
imgurl := util.URLJoin(rawtree, "Link.jpg")
otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg")
encodedImgurl := util.URLJoin(rawtree, "Link+%23.jpg")
notencodedImgurl := util.URLJoin(rawtree, "some", "path", "Link+#.jpg")
urlWiki := util.URLJoin(AppSubURL, "wiki", "Link")
otherURLWiki := util.URLJoin(AppSubURL, "wiki", "Other-Link")
encodedURLWiki := util.URLJoin(AppSubURL, "wiki", "Link%3F")
imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg")
otherImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+Other.jpg")
encodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+%23.jpg")
notencodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "some", "path", "Link+#.jpg")
favicon := "http://google.com/favicon.ico"
test(
@ -134,4 +140,24 @@ func TestRender_ShortLinks(t *testing.T) {
"[[Link]] [[Other Link]]",
`<p><a href="`+url+`" rel="nofollow">Link</a> <a href="`+otherURL+`" rel="nofollow">Other Link</a></p>`,
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a></p>`)
test(
"[[Link?]]",
`<p><a href="`+encodedURL+`" rel="nofollow">Link?</a></p>`,
`<p><a href="`+encodedURLWiki+`" rel="nofollow">Link?</a></p>`)
test(
"[[Link]] [[Other Link]] [[Link?]]",
`<p><a href="`+url+`" rel="nofollow">Link</a> <a href="`+otherURL+`" rel="nofollow">Other Link</a> <a href="`+encodedURL+`" rel="nofollow">Link?</a></p>`,
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a> <a href="`+encodedURLWiki+`" rel="nofollow">Link?</a></p>`)
test(
"[[Link #.jpg]]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`"/></a></p>`)
test(
"[[Name|Link #.jpg|alt=\"AltName\"|title='Title']]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`" title="Title" alt="AltName"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`" title="Title" alt="AltName"/></a></p>`)
test(
"[[some/path/Link #.jpg]]",
`<p><a href="`+notencodedImgurl+`" rel="nofollow"><img src="`+notencodedImgurl+`"/></a></p>`,
`<p><a href="`+notencodedImgurlWiki+`" rel="nofollow"><img src="`+notencodedImgurlWiki+`"/></a></p>`)
}

View File

@ -341,6 +341,8 @@ var (
// Picture settings
AvatarUploadPath string
AvatarMaxWidth int
AvatarMaxHeight int
GravatarSource string
GravatarSourceURL *url.URL
DisableGravatar bool
@ -829,7 +831,6 @@ func NewContext() {
LFS.ContentPath = filepath.Join(AppWorkPath, LFS.ContentPath)
}
sec = Cfg.Section("LFS")
LFS.HTTPAuthExpiry = sec.Key("LFS_HTTP_AUTH_EXPIRY").MustDuration(20 * time.Minute)
if LFS.StartServer {
@ -1025,6 +1026,8 @@ func NewContext() {
if !filepath.IsAbs(AvatarUploadPath) {
AvatarUploadPath = path.Join(AppWorkPath, AvatarUploadPath)
}
AvatarMaxWidth = sec.Key("AVATAR_MAX_WIDTH").MustInt(4096)
AvatarMaxHeight = sec.Key("AVATAR_MAX_HEIGHT").MustInt(3072)
switch source := sec.Key("GRAVATAR_SOURCE").MustString("gravatar"); source {
case "duoshuo":
GravatarSource = "http://gravatar.duoshuo.com/avatar/"

View File

@ -323,7 +323,7 @@ func RenderCommitBody(msg, urlPrefix string, metas map[string]string) template.H
// IsMultilineCommitMessage checks to see if a commit message contains multiple lines.
func IsMultilineCommitMessage(msg string) bool {
return strings.Count(strings.TrimSpace(msg), "\n") > 1
return strings.Count(strings.TrimSpace(msg), "\n") >= 1
}
// Actioner describes an action

View File

@ -10,6 +10,7 @@ import (
"strings"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
// OptionalBool a boolean that can be "null"
@ -72,12 +73,24 @@ func URLJoin(base string, elems ...string) string {
return ""
}
joinedURL := baseURL.ResolveReference(argURL).String()
if !baseURL.IsAbs() {
return joinedURL[1:] // Removing leading '/'
if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") {
return joinedURL[1:] // Removing leading '/' if needed
}
return joinedURL
}
// IsExternalURL checks if rawURL points to an external URL like http://example.com
func IsExternalURL(rawURL string) bool {
parsed, err := url.Parse(rawURL)
if err != nil {
return true
}
if len(parsed.Host) != 0 && strings.Replace(parsed.Host, "www.", "", 1) != strings.Replace(setting.Domain, "www.", "", 1) {
return true
}
return false
}
// Min min of two ints
func Min(a, b int) int {
if a > b {

View File

@ -7,6 +7,8 @@ package util
import (
"testing"
"code.gitea.io/gitea/modules/setting"
"github.com/stretchr/testify/assert"
)
@ -32,7 +34,46 @@ func TestURLJoin(t *testing.T) {
"a/", "b/c/", "/../d/"),
newTest("https://try.gitea.io/a/b/c#d",
"https://try.gitea.io", "a/b", "c#d"),
newTest("/a/b/d",
"/a/", "b/c/", "/../d/"),
newTest("/a/b/c",
"/a", "b/c/"),
newTest("/a/b/c#hash",
"/a", "b/c#hash"),
} {
assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...))
}
}
func TestIsExternalURL(t *testing.T) {
setting.Domain = "try.gitea.io"
type test struct {
Expected bool
RawURL string
}
newTest := func(expected bool, rawURL string) test {
return test{Expected: expected, RawURL: rawURL}
}
for _, test := range []test{
newTest(false,
"https://try.gitea.io"),
newTest(true,
"https://example.com/"),
newTest(true,
"//example.com"),
newTest(true,
"http://example.com"),
newTest(false,
"a/"),
newTest(false,
"https://try.gitea.io/test?param=false"),
newTest(false,
"test?param=false"),
newTest(false,
"//try.gitea.io/test?param=false"),
newTest(false,
"/hey/hey/hey#3244"),
} {
assert.Equal(t, test.Expected, IsExternalURL(test.RawURL))
}
}

View File

@ -19,7 +19,7 @@ const (
)
var (
// GitRefNamePattern is regular expression wirh unallowed characters in git reference name
// GitRefNamePattern is regular expression with unallowed characters in git reference name
GitRefNamePattern = regexp.MustCompile("[^\\d\\w-_\\./]")
)

View File

@ -27,6 +27,7 @@ Enrico Testori hypertesto AT gmail DOT com
Ezequiel Gonzalez Rial <gonrial AT gmail DOT com>
Gabriel Dugny <gabriel DOT dugny AT gmail DOT com>
Gregor Santner <gdev AT live DOT de>
Guilhem Marion <gmarion AT netc DOT fr>
Halil Kaya <halil AT halilkaya DOT net>
Hamid Feizabadi <hamidfzm AT gmail DOT com>
Hilton Wichwski Silva <hilton AT hiltonws DOT com DOT br>

View File

@ -11,6 +11,7 @@ version=Версия
page=Страница
template=Шаблон
language=Език
notifications=Известия
signed_in_as=Вписан като
username=Потребител
@ -28,6 +29,9 @@ manage_org=Управление на организации
account_settings=Настройки на профила
settings=Настройки
all=Всичко
sources=Източници
mirrors=Огледала
activities=Активности
pull_requests=Заявки за сливане
@ -69,7 +73,9 @@ issues.in_your_repos=Във Вашите хранилища
[explore]
repos=Хранилища
users=Потребители
organizations=Организации
search=Търсене
code=Код
[auth]
register_helper_msg=Вече имате профил? Впишете се сега!
@ -79,12 +85,14 @@ has_unconfirmed_mail=Здравейте %s, имате непотвърден а
resend_mail=Щракнете тук, за да се изпрати ново писмо за потвърждение
reset_password=Нулиране на паролата
reset_password_helper=Щракнете тук, за да нулирате паролата си
password_too_short=Размерът на паролата не може да бъде по-малък от %d знака.
openid_connect_submit=Свързване
[mail]
activate_account=Моля активирайте Вашия профил
activate_email=Провери адрес на ел. поща
reset_password=Нулиране на паролата
register_success=Успешна регистрация
register_notify=Добре дошли в Gitea
[modal]
yes=Да
@ -118,6 +126,7 @@ url_error=` не е валиден URL адрес.`
include_error=` трябва да съдържа текст '%s'.`
unknown_error=Неизвестна грешка:
user_not_exist=Потребителят не съществува.
auth_failed=Неуспешно удостоверяване: %v
@ -137,9 +146,11 @@ unfollow=Не следвай
[settings]
profile=Профил
password=Парола
security=Сигурност
avatar=Аватар
social=Социални профили
delete=Изтрий профил
twofa=Двуфакторно удостоверяване
uid=UID
public_profile=Публичен профил
@ -170,6 +181,8 @@ key_content=Съдържание
add_on=Добавен на
last_used=Последно използван на
no_activity=Няма скорошна дейност
show_openid=Показване в профила
hide_openid=Скриване от профила
manage_social=Управление на свързани профили в социалните мрежи
@ -240,6 +253,7 @@ file_view_raw=Виж директен файл
file_permalink=Постоянна връзка
editor.preview_changes=Преглед на промени
editor.name_your_file=Име на файла ви…
editor.or=или
editor.commit_changes=Промени в ревизия
editor.add_tmpl=Добави '%s/<filename>'
@ -248,6 +262,7 @@ editor.update=Модифицирай '%s'
editor.delete=Изтрий '%s'
editor.commit_directly_to_this_branch=Запази ревизия директно в клон <strong class="branch-name">%s</strong>.
editor.create_new_branch=Създай <strong>нов клон</strong> от тази ревизия и изпрати заявки за сливане.
editor.new_branch_name_desc=Име на новия клон…
editor.cancel=Отказ
editor.branch_already_exists=Клон '%s' вече съществува в това хранилище.
editor.no_changes_to_show=Няма промени.
@ -256,6 +271,7 @@ editor.unable_to_upload_files=Невъзможно качване на файл
editor.upload_files_to_dir=Качи файлове в '%s'
commits.commits=Ревизии
commits.find=Търсене
commits.author=Автор
commits.message=Съобщение
commits.date=Дата
@ -278,6 +294,7 @@ issues.create_label=Създай етикет
issues.label_templates.title=Зареждане на предварително зададен набор от етикети
issues.label_templates.helper=Изберете набор етикети
issues.label_templates.fail_to_load_file=Неуспешно зареждане на шаблон с етикети '%s': %v
issues.deleted_milestone=`(изтрито)`
issues.open_tab=%d отворени
issues.close_tab=%d затворени
issues.filter_label=Етикет
@ -295,6 +312,11 @@ issues.filter_sort.recentupdate=Последно променени
issues.filter_sort.leastupdate=Отдавна променени
issues.filter_sort.mostcomment=Най-много коментирани
issues.filter_sort.leastcomment=Най-малко коментирани
issues.action_open=Отваряне
issues.action_close=Затваряне
issues.action_label=Етикет
issues.action_milestone=Етап
issues.action_milestone_no_select=Няма етап
issues.opened_by=отворен %[1]s от <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=отворен %[1]s от %[2]s
issues.previous=Предишна
@ -324,9 +346,17 @@ issues.label_count=%d етикети
issues.label_open_issues=%d отворени задачи
issues.label_edit=Редакция
issues.label_delete=Изтрий
issues.label.filter_sort.alphabetically=По азбучен ред
issues.label.filter_sort.by_size=Големина
issues.num_participants=%d участника
issues.attachment.open_tab=`Щракнете за да прегледате "%s" в нов раздел`
issues.attachment.download=`Щракнете за да изтеглите "%s"`
issues.start_tracking_short=Начало
issues.stop_tracking=Спиране
issues.add_time_cancel=Отказ
issues.add_time_hours=Часа
issues.add_time_minutes=Минути
issues.cancel_tracking=Отказ
pulls.new=Нова заявка за сливане
pulls.filter_branch=Филтър по клон
@ -368,7 +398,19 @@ wiki.page_already_exists=Страница със същото име вече с
wiki.pages=Страници
wiki.last_updated=Последна модификация на %s
activity.period.filter_label=Период:
activity.period.daily=1 ден
activity.period.halfweekly=3 дни
activity.period.weekly=1 седмица
activity.period.monthly=1 месец
activity.title.user_1=%d потребител
activity.title.user_n=%d потребителя
activity.closed_issue_label=Затворено
activity.new_issue_label=Отворено
activity.unresolved_conv_label=Отваряне
activity.published_release_label=Публикувано
search=Търсене
settings=Настройки
settings.collaboration.write=За писане
@ -390,6 +432,7 @@ settings.transfer=Прехвърли притежание
settings.delete=Изтрий това хранилище
settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
settings.transfer_owner=Нов притежател
settings.search_user_placeholder=Търсене на потребител…
settings.add_webhook=Добави уеб-кука
settings.webhook.test_delivery=Тестово изпращане
settings.webhook.request=Заявка
@ -403,6 +446,8 @@ settings.update_githook=Запази куката
settings.secret=Тайна
settings.slack_username=Потребителско име
settings.slack_icon_url=URL адрес на икона
settings.discord_username=Потребителско име
settings.discord_icon_url=URL адрес на икона
settings.slack_color=Цвят
settings.event_create=Създаване
settings.event_pull_request=Заявка за сливане
@ -417,6 +462,11 @@ settings.deploy_keys=Ключове за внедряване
settings.add_deploy_key=Добави ключ за внедряване
settings.title=Заглавие
settings.deploy_key_content=Съдържание
settings.branches=Клонове
settings.protected_branch=Защита на клона
settings.add_protected_branch=Включване на защита
settings.delete_protected_branch=Изключване на защита
settings.choose_branch=Изберете клон…
diff.browse_source=Преглед на файлове
diff.parent=родител
@ -425,6 +475,7 @@ diff.show_diff_stats=Покажи статистика за разликите
diff.show_split_view=Разделен изглед
diff.show_unified_view=Обединен изглед
diff.stats_desc=променени са <strong>%d файла</strong>, в които са <strong>добавени %d</strong> реда и са <strong>изтрити %d</strong> реда
diff.bin=Двоични данни
diff.view_file=Целия файл
diff.file_suppressed=Файловите разлики са ограничени, защото са твърде много
diff.too_many_files=Някои файлове не бяха показани, защото твърде много файлове са промени
@ -443,11 +494,17 @@ release.title=Заглавие
release.content=Съдържание
release.write=Редактор
release.preview=Преглед
release.loading=Зарежда се…
release.cancel=Отказ
release.publish=Публикувай версия
release.save_draft=Запис на чернова
release.downloads=Изтегляния
branch.search=Търсене на клонове
branch.delete_head=Изтриване
branch.delete_html=Изтриване на клон
branch.create_from=от '%s'
branch.deleted_by=Изтрито от %s
[org]
@ -459,6 +516,8 @@ people=Участници
teams=Екипи
lower_members=участници
lower_repositories=хранилища
create_new_team=Нов отбор
create_team=Създаване на отбор
org_desc=Описание
team_name=Име на екипа
team_desc=Описание
@ -510,7 +569,6 @@ total=Общо: %d
dashboard.operation_name=Име на операцията
dashboard.operation_switch=Превключи
dashboard.operation_run=Изпълни
dashboard.delete_inactivate_accounts=Изтрий всички неактивни профили
dashboard.server_uptime=Операционно време
dashboard.current_goroutine=Текущи Goroutines
dashboard.current_memory_usage=Текущо използвана памет
@ -547,6 +605,7 @@ users.edit=Редакция
users.auth_source=Начин на удостоверяване
users.local=Локално
orgs.org_manage_panel=Управление на организацията
orgs.name=Име
orgs.teams=Екипи
orgs.members=Участници
@ -557,6 +616,7 @@ repos.private=Частно
repos.watches=Наблюдавания
repos.stars=Харесвания
repos.issues=Задачи
repos.size=Големина
auths.name=Име
auths.type=Тип
@ -581,12 +641,15 @@ auths.allowed_domains=Разрешени домейни
auths.enable_tls=Включи TLS криптиране
auths.skip_tls_verify=Пропусни проверка на TLS сертификат
auths.pam_service_name=Име на PAM услуга
auths.oauth2_profileURL=URL адрес на профила
auths.oauth2_emailURL=Имейл адрес
auths.enable_auto_register=Включи автоматична регистрация
auths.tips=Съвети
config.server_config=Сървърни настройки
config.disable_router_log=Изключи журнал на маршрутизатора
config.run_mode=Режим на изпълнение
config.git_version=Версия на Git
config.repo_root_path=Основен път към хранилища
config.static_file_root_path=Път към статични файлове
config.script_type=Тип на скрипта
@ -606,9 +669,7 @@ config.db_config=Настройки на базата данни
config.db_type=Тип
config.db_host=Сървър
config.db_name=Име
config.db_ssl_mode_helper=(само за postgres)
config.db_path=Път
config.db_path_helper=(за "sqlite3" и "tidb")
config.service_config=Настройка на услугата
config.show_registration_button=Покажи бутон за регистрация
@ -703,6 +764,7 @@ push_tag=предаде маркер <a href="%s/src/%s">%[2]s</a> към <a hre
ago=преди %s
from_now=след %s
now=сега
future=в бъдеще
1s=1 секунда
1m=1 минута
1h=1 час
@ -724,6 +786,12 @@ raw_minutes=минути
remove_file=Премахни файл
[notification]
notifications=Известия
unread=Непрочетенo
read=За четене
mark_as_read=Бележа като прочетено
mark_as_unread=Бележа като непрочетено
mark_all_as_read=Бележа всичко като прочетено
[gpg]

View File

@ -79,7 +79,6 @@ has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (<b>%s</
resend_mail=Klikněte zde pro odeslání aktivačního e-mailu
reset_password=Obnova vašeho hesla
reset_password_helper=Klikněte zde pro obnovu vašeho hesla
password_too_short=Délka hesla musí být minimálně %d znaků.
[mail]
activate_account=Prosíme, aktivujte si váš účet
@ -509,7 +508,6 @@ total=Celkem: %d
dashboard.operation_name=Název operace
dashboard.operation_switch=Přepnout
dashboard.operation_run=Spustit
dashboard.delete_inactivate_accounts=Smazat všechny neaktivní účty
dashboard.server_uptime=Doba provozu serveru
dashboard.current_goroutine=Aktuální Goroutines
dashboard.current_memory_usage=Aktuální využití paměti
@ -603,9 +601,7 @@ config.db_config=Nastavení databáze
config.db_type=Typ
config.db_host=Server
config.db_name=Název
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.show_registration_button=Ukázat tlačítko registrace

View File

@ -75,7 +75,6 @@ cancel=Abbrechen
[install]
install=Installation
title=Erstkonfiguration
docker_helper=Wenn du Gitea in einem Docker-Container nutzt, lies bitte die <a target="_blank" rel="noopener" href="%s">Dokumentation</a>, bevor du irgendwelche Einstellungen veränderst.
requite_db_desc=Gitea benötigt MySQL, PostgreSQL, MSSQL, SQLite3 oder TiDB.
db_title=Datenbankeinstellungen
db_type=Datenbanktyp
@ -83,12 +82,12 @@ host=Host
user=Benutzername
password=Passwort
db_name=Datenbankname
db_helper=Hinweis für MySQL-Benutzer: Bitte verwende das InnoDB Speichersubsystem und den Zeichensatz "utf8_general_ci".
db_helper=Hinweis für MySQL-Benutzer: Bitte verwende das InnoDB-Speichersubsystem und den Zeichensatz „utf8_general_ci“.
ssl_mode=SSL
path=Pfad
sqlite_helper=Der Dateipfad zur SQLite3- oder TiDB-Datenbank. <br>Bitte verwende einen absoluten Pfad, wenn Gitea als Service gestartet wird.
err_empty_db_path=Der SQLite3 oder TiDB Datenbankpfad darf nicht leer sein.
err_invalid_tidb_name=Der TiDB Datenbankname darf nicht die Zeichen "." und "-" enthalten.
err_empty_db_path=Der SQLite3- oder TiDB-Datenbankpfad darf nicht leer sein.
err_invalid_tidb_name=Der TiDB-Datenbankname darf nicht die Zeichen „.“ und „-“ enthalten.
no_admin_and_disable_registration=Du kannst Selbst-Registrierungen nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein.
@ -97,17 +96,17 @@ app_name=Seitentitel
app_name_helper=Du kannst hier den Namen deines Unternehmens eingeben.
repo_path=Repository-Verzeichnis
repo_path_helper=Remote-Git-Repositories werden in diesem Verzeichnis gespeichert.
lfs_path=Git LFS-Wurzelpfad
lfs_path_helper=In diesem Verzeichnis werden die Dateien von Git LFS abgespeichert. Leer lassen um LFS zu deaktivieren.
lfs_path=Git-LFS-Wurzelpfad
lfs_path_helper=In diesem Verzeichnis werden die Dateien von Git LFS abgespeichert. Leer lassen, um LFS zu deaktivieren.
run_user=Ausführen als
run_user_helper=Gebe den Betriebssystem-Benutzernamen ein, unter welchem Gitea laufen soll. Beachte, dass dieser Nutzer Zugriff auf den Repository-Ordner haben muss.
domain=SSH Server-Domain
run_user_helper=Gib den Betriebssystem-Benutzernamen ein, unter welchem Gitea laufen soll. Beachte, dass dieser Nutzer Zugriff auf den Repository-Ordner haben muss.
domain=SSH-Server-Domain
domain_helper=Domain oder Host-Adresse für die SSH-URL.
ssh_port=SSH Server Port
ssh_port_helper=Der Port deines SSH-Servers. Leer lassen um SSH zu deaktivieren.
http_port=Gitea HTTP-Listen-Port
http_port_helper=Port unter dem der Gitea Web Server laufen soll.
app_url=Gitea Basis-URL
ssh_port=SSH-Server-Port
ssh_port_helper=Der Port deines SSH-Servers. Leer lassen, um SSH zu deaktivieren.
http_port=Gitea-HTTP-Listen-Port
http_port_helper=Port, unter dem der Gitea-Webserver laufen soll.
app_url=Gitea-Basis-URL
app_url_helper=Adresse für HTTP(S)-Klon-URLs und E-Mail-Benachrichtigungen.
log_root_path=Logdateipfad
log_root_path_helper=Log-Dateien werden in diesem Verzeichnis gespeichert.
@ -116,9 +115,9 @@ optional_title=Optionale Einstellungen
email_title=E-Mail-Einstellungen
smtp_host=SMTP-Server
smtp_from=E-Mail senden als
smtp_from_helper=E-Mail-Adresse, die von Gitea genutzt werden soll. Bitte gib die E-Mail-Adresse im '"Name" <email@example.com>'-Format ein.
mailer_user=SMTP Benutzername
mailer_password=SMTP Passwort
smtp_from_helper=E-Mail-Adresse, die von Gitea genutzt werden soll. Bitte gib die E-Mail-Adresse im Format „"Name" <email@example.com>“ ein.
mailer_user=SMTP-Benutzername
mailer_password=SMTP-Passwort
register_confirm=E-Mail-Bestätigung benötigt zum Registrieren
mail_notify=E-Mail-Benachrichtigungen aktivieren
server_service_title=Sonstige Server- und Drittserviceeinstellungen
@ -131,9 +130,9 @@ federated_avatar_lookup_popup=Föderierte Profilbilder via Libravatar aktivieren
disable_registration=Registrierung deaktivieren
disable_registration_popup=Registrierung neuer Benutzer deaktivieren. Nur Administratoren werden neue Benutzerkonten anlegen können.
allow_only_external_registration_popup=Registrierung nur über externe Services aktiveren.
openid_signin=OpenID Anmeldung aktivieren
openid_signin=OpenID-Anmeldung aktivieren
openid_signin_popup=Benutzeranmeldung via OpenID aktivieren.
openid_signup=OpenID Selbstregistrierung aktivieren
openid_signup=OpenID-Selbstregistrierung aktivieren
openid_signup_popup=OpenID-basierte Selbstregistrierung aktivieren.
enable_captcha=CAPTCHA aktivieren
enable_captcha_popup=Captcha-Eingabe bei der Registrierung erforderlich.
@ -146,11 +145,11 @@ admin_password=Passwort
confirm_password=Passwort bestätigen
admin_email=E-Mail-Adresse
install_btn_confirm=Gitea installieren
test_git_failed=Fehler beim Test des 'git' Kommandos: %v
sqlite3_not_available=Diese Gitea-Version unterstützt SQLite3 nicht. Bitte lade die offizielle binäre Version von %s herunter (nicht die 'gobuild'-Version).
test_git_failed=Fehler beim Test des „git“-Befehls: %v
sqlite3_not_available=Diese Gitea-Version unterstützt SQLite3 nicht. Bitte lade die offizielle binäre Version von %s herunter (nicht die „gobuild“-Version).
invalid_db_setting=Datenbankeinstellungen sind ungültig: %v
invalid_repo_path=Repository-Verzeichnis ist ungültig: %v
run_user_not_match=Der "Ausführen als" Benutzer ist nicht der aktuelle Benutzer: %s -> %s
run_user_not_match=Der „Ausführen als“-Benutzername ist nicht der aktuelle Benutzername: %s -> %s
save_config_failed=Fehler beim Speichern der Konfiguration: %v
invalid_admin_setting=Administrator-Konto Einstellungen sind ungültig: %v
install_success=Willkommen! Danke, dass du Gitea gewählt hast. Viel Spaß!
@ -162,7 +161,7 @@ default_allow_create_organization_popup=Neuen Nutzern das Erstellen von Organisa
default_enable_timetracking=Zeiterfassung standardmäßig aktivieren
default_enable_timetracking_popup=Zeiterfassung standardmäßig für neue Repositories aktivieren.
no_reply_address=Versteckte E-Mail-Domain
no_reply_address_helper=Domain-Namen für Benutzer mit einer versteckten Emailadresse. Zum Beispiel wird der Benutzername "Joe" in Git als "joe@noreply.example.org" protokolliert, wenn die versteckte E-Mail-Domäne "noreply.example.org" festgelegt ist.
no_reply_address_helper=Domain-Name für Benutzer mit einer versteckten Emailadresse. Zum Beispiel wird der Benutzername „Joe“ in Git als „joe@noreply.example.org“ protokolliert, wenn die versteckte E-Mail-Domain „noreply.example.org“ festgelegt ist.
[home]
uname_holder=E-Mail-Adresse oder Benutzername
@ -188,7 +187,7 @@ repo_no_results=Keine passenden Repositories gefunden.
user_no_results=Keine passenden Benutzer gefunden.
org_no_results=Keine passenden Organisatioen gefunden.
code_no_results=Es konnte kein passender Code für deinen Suchbegriff gefunden werden.
code_search_results=Suchergebnisse für '%s'
code_search_results=Suchergebnisse für „%s“
[auth]
create_new_account=Konto anlegen
@ -213,7 +212,7 @@ send_reset_mail=E-Mail zum Passwort-zurücksetzen erneut verschicken
reset_password=Passwort zurücksetzen
invalid_code=Dein Bestätigungs-Code ist ungültig oder abgelaufen.
reset_password_helper=Passwort zurückzusetzen
password_too_short=Das Passwort muss mindenstens %d Zeichen lang sein.
password_too_short=Das Passwort muss mindestens %d Zeichen lang sein.
non_local_account=Benutzer, die nicht von Gitea verwaltet werden können ihre Passwörter nicht über das Web Interface ändern.
verify=Verifizieren
scratch_code=Einmalpasswort
@ -225,9 +224,9 @@ login_userpass=Anmelden
login_openid=OpenID
openid_connect_submit=Verbinden
openid_connect_title=Mit bestehendem Konto verbinden
openid_connect_desc=Die gewählte OpenID URI ist unbekannt. Ordne sie hier einem neuen Account zu.
openid_connect_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu.
openid_register_title=Neues Konto einrichten
openid_register_desc=Die gewählte OpenID URI ist unbekannt. Ordne sie hier einem neuen Account zu.
openid_register_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu.
openid_signin_desc=Gib deine OpenID-URI ein. Zum Beispiel: https://anne.me, bob.openid.org.cn oder gnusocial.net/carry.
disable_forgot_password_mail=Das Zurücksetzen von Passwörtern wurde deaktiviert. Bitte wende dich an den Administrator.
@ -254,25 +253,25 @@ HttpsUrl=HTTPS-URL
PayloadUrl=Payload-URL
TeamName=Teamname
AuthName=Name der Autorisierung
AdminEmail=Administrator E-Mail
AdminEmail=Administrator-E-Mail
NewBranchName=Neuer Branch Name
CommitSummary=Commit Zusammenfassung
CommitMessage=Commit Nachricht
CommitChoice=Commit Auswahl
NewBranchName=Neuer Branchname
CommitSummary=Commit-Zusammenfassung
CommitMessage=Commit-Nachricht
CommitChoice=Commit-Auswahl
TreeName=Dateipfad
Content=Inhalt
require_error=` darf nicht leer sein.`
alpha_dash_error=` sollte nur Buchstaben, Zahlen, Bindestriche ('-') und Unterstriche ('_') enthalten`
alpha_dash_dot_error=` sollte nur Buchstaben, Zahlen, Bindestriche ('-'), Unterstriche ('_') und Punkte ('.') enthalten`
alpha_dash_error=` sollte nur Buchstaben, Zahlen, Bindestriche („-“) und Unterstriche („_“) enthalten.`
alpha_dash_dot_error=` sollte nur Buchstaben, Zahlen, Bindestriche („-“), Unterstriche („_“) und Punkte („.“) enthalten.`
git_ref_name_error=` muss ein wohlgeformter Git-Referenzname sein.`
size_error=` muss die Größe %s haben.`
min_size_error=` muss mindestens %s Zeichen enthalten.`
max_size_error=` darf höchstens %s Zeichen enthalten.`
email_error=` ist keine gültige E-Mail-Adresse.`
url_error=` ist keine gültige URL.`
include_error=` muss den Text '%s' enthalten.`
include_error=` muss den Text „%s“ enthalten.`
unknown_error=Unbekannter Fehler:
captcha_incorrect=Der eingegebene CAPTCHA-Code ist falsch.
password_not_match=Die Passwörter stimmen nicht überein.
@ -283,13 +282,13 @@ org_name_been_taken=Der Organisationsname ist bereits vergeben.
team_name_been_taken=Der Teamname ist bereits vergeben.
team_no_units_error=Das Team muss auf mindestens einen Bereich Zugriff haben.
email_been_used=Die E-Mail-Adresse wird bereits verwendet.
openid_been_used=Die OpenID-Adresse "%s" wird bereits verwendet.
openid_been_used=Die OpenID-Adresse „%s“ wird bereits verwendet.
username_password_incorrect=Benutzername oder Passwort ist falsch.
enterred_invalid_repo_name=Der eingegebenen Repository-Name ist falsch.
enterred_invalid_owner_name=Der Name des neuen Besitzers ist invalid.
enterred_invalid_owner_name=Der Name des neuen Besitzers ist ungültig.
enterred_invalid_password=Das eingegebene Passwort ist falsch.
user_not_exist=Dieser Benutzer ist nicht vorhanden.
last_org_owner=Du kannst den letzten Benutzer nicht aus dem "Besitzer"-Team entferenen. Es muss mindestens ein Besitzer in einer Organisation geben.
last_org_owner=Du kannst den letzten Benutzer nicht aus dem „Besitzer“-Team entfernen. Es muss mindestens einen Besitzer in einer Organisation geben.
cannot_add_org_to_team=Eine Organisation kann nicht als Teammitglied hinzugefügt werden.
invalid_ssh_key=Dein SSH-Key kann nicht überprüft werden: %s
@ -314,8 +313,8 @@ following=Folge ich
follow=Folgen
unfollow=Nicht mehr folgen
form.name_reserved=Der Benutzername '%s' ist reserviert.
form.name_pattern_not_allowed='%s' ist nicht erlaubt für Benutzernamen.
form.name_reserved=Der Benutzername „%s“ ist reserviert.
form.name_pattern_not_allowed=Das Muster „%s“ ist nicht in einem Benutzernamen erlaubt.
[settings]
profile=Profil
@ -323,7 +322,7 @@ account=Account
password=Passwort
security=Sicherheit
avatar=Profilbild
ssh_gpg_keys=SSH / GPG Schlüssel
ssh_gpg_keys=SSH- / GPG-Schlüssel
social=Soziale Konten
applications=Anwendungen
orgs=Organisationen verwalten
@ -349,7 +348,7 @@ continue=Weiter
cancel=Abbrechen
language=Sprache
lookup_avatar_by_mail=Avatar anhand der E-Mail-Addresse suchen
lookup_avatar_by_mail=Profilbild anhand der E-Mail-Addresse suchen
federated_avatar_lookup=Suche nach föderierten Profilbildern
enable_custom_avatar=Benutzerdefiniertes Profilbild benutzen
choose_new_avatar=Neues Profilbild auswählen
@ -364,7 +363,7 @@ new_password=Neues Passwort
retype_new_password=Neues Passwort erneut eingeben
password_incorrect=Das aktuelle Passwort ist falsch.
change_password_success=Dein Passwort wurde aktualisiert. Bitte verwende dieses beim nächsten Einloggen.
password_change_disabled=Benutzer, die nicht von Gitea verwaltet werden, können ihr Passwort im Web Interface nicht ändern.
password_change_disabled=Benutzer, die nicht von Gitea verwaltet werden, können ihr Passwort im Web-Interface nicht ändern.
emails=E-Mail-Adressen
manage_emails=E-Mail-Adressen verwalten
@ -383,7 +382,7 @@ add_new_email=Neue E-Mail-Adresse hinzufügen
add_new_openid=Neue OpenID-URI hinzufügen
add_email=E-Mail-Adresse hinzufügen
add_openid=OpenID-URI hinzufügen
add_email_confirmation_sent=Eine Bestätigungs-E-Mail wurde an '%s' gesendet. Bitte überprüfe dein Postfach innerhalb der nächsten %s, um die E-Mail-Adresse zu bestätigen.
add_email_confirmation_sent=Eine Bestätigungs-E-Mail wurde an „%s“ gesendet. Bitte überprüfe dein Postfach innerhalb der nächsten %s, um die E-Mail-Adresse zu bestätigen.
add_email_success=Die neue E-Mail-Addresse wurde hinzugefügt.
add_openid_success=Die neue OpenID-Adresse wurde hinzugefügt.
keep_email_private=E-Mail-Adresse verbergen
@ -394,21 +393,21 @@ manage_ssh_keys=SSH-Schlüssel verwalten
manage_gpg_keys=GPG-Schlüssel verwalten
add_key=Schlüssel hinzufügen
ssh_desc=Diese öffentlichen SSH-Keys sind mit deinem Account verbunden. Der dazugehörigen privaten SSH-Keys geben dir vollen Zugriff auf deine Repositories.
gpg_desc=Diese öffentlichen GPG-Keys sind mit deinem Account verbunden. Halte die dazugehörigen privaten SSH-Keys geheim, da diese deine Commits signieren.
ssh_helper=<strong>Brauchst du Hilfe?</strong> Hier ist Githubs Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder <a href="%s">Lösen einfacher SSH-Probleme</a>.
gpg_desc=Diese öffentlichen GPG-Keys sind mit deinem Account verbunden. Halte die dazugehörigen privaten GPG-Keys geheim, da diese deine Commits signieren.
ssh_helper=<strong>Brauchst du Hilfe?</strong> Hier ist GitHubs Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder zum <a href="%s">Lösen einfacher SSH-Probleme</a>.
gpg_helper=<strong>Brauchst du Hilfe?</strong> Hier ist GitHubs Anleitung <a href="%s">über GPG</a>.
add_new_key=SSH-Schlüssel hinzufügen
add_new_gpg_key=GPG-Schlüssel hinzufügen
ssh_key_been_used=Dieser SSH-Key wurde bereits zu deinem Account hinzugefügt.
ssh_key_name_used=Ein gleichnamiger SSH-Key existiert bereits in deinem Account.
gpg_key_id_used=Ein öffentlicher GPG-Schlüssel mit der gleichen ID existiert bereits.
gpg_no_key_email_found=Dieser GPG Schlüssel kann mit keiner E-Mail-Adresse deines Accounts verwendet werden.
gpg_no_key_email_found=Dieser GPG-Schlüssel kann mit keiner E-Mail-Adresse deines Kontos verwendet werden.
subkeys=Unterschlüssel
key_id=Schlüssel-ID
key_name=Schlüsselname
key_content=Inhalt
add_key_success=Der SSH-Schlüssel "%s" wurde hinzugefügt.
add_gpg_key_success=Der GPG-Key "%s" wurde hinzugefügt.
add_key_success=Der SSH-Schlüssel „%s“ wurde hinzugefügt.
add_gpg_key_success=Der GPG-Key „%s“ wurde hinzugefügt.
delete_key=Entfernen
ssh_key_deletion=SSH-Schlüssel entfernen
gpg_key_deletion=GPG-Schlüssel entfernen
@ -463,7 +462,7 @@ then_enter_passcode=Und gebe dann die angezeigte PIN der Anwendung ein:
passcode_invalid=Die PIN ist falsch. Probiere es erneut.
twofa_enrolled=Die Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Bewahre dein Einmalpasswort (%s) an einem sicheren Ort auf, da es nicht wieder angezeigt werden wird.
u2f_desc=Hardware-Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den <a href="https://fidoalliance.org/">FIDO U2F</a>-Standard unterstützen.
u2f_desc=Hardware-Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den Standard <a href="https://fidoalliance.org/">FIDO U2F</a> unterstützen.
u2f_require_twofa=Du musst die Zwei-Faktor-Authentifizierung aktivieren, um Hardware-Sicherheitsschlüssel nutzen zu können.
u2f_register_key=Sicherheitsschlüssel hinzufügen
u2f_nickname=Nickname
@ -482,7 +481,7 @@ orgs_none=Du bist kein Mitglied in einer Organisation.
repos_none=Du besitzt keine Repositories
delete_account=Konto löschen
delete_prompt=Wenn du fortfährst wird dein Account permanent gelöscht. Dies <strong>KANN NICHT</strong> rückgängig gemacht werden.
delete_prompt=Wenn du fortfährst, wird dein Account permanent gelöscht. Dies <strong>KANN NICHT</strong> rückgängig gemacht werden.
confirm_delete_account=Löschen bestätigen
delete_account_title=Benutzerkonto löschen
delete_account_desc=Bist du sicher, dass du diesen Account dauerhaft löschen möchtest?
@ -495,7 +494,6 @@ visibility=Sichtbarkeit
visiblity_helper=privates Repository
visiblity_helper_forced=Auf dieser Gitea-Instanz können nur private Repositories angelegt werden.
visiblity_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus)
clone_helper=Brauchst du Hilfe beim Klonen? Öffne die <a target="_blank" rel="noopener" href="%s">Hilfe</a>.
fork_repo=Repository forken
fork_from=Fork von
fork_visiblity_helper=Die Sichtbarkeit einer geforkten Repository kann nicht geändert werden.
@ -511,10 +509,10 @@ create_repo=Repository erstellen
default_branch=Standardbranch
mirror_prune=Entfernen
mirror_prune_desc=Entferne veraltete remote-tracking Referenzen
mirror_interval=Spiegelintervall (gültige Zeiteinheiten sind 'h', 'm', 's')
mirror_interval=Spiegelintervall (gültige Zeiteinheiten sind „h“, „m“, „s“)
mirror_interval_invalid=Das Spiegel-Intervall ist ungültig.
mirror_address=Klonen via URL
mirror_address_desc=Bitte gebe alle benötigten Zugangsdaten in der URL an.
mirror_address_desc=Bitte gib alle benötigten Zugangsdaten in der URL an.
mirror_last_synced=Zuletzt synchronisiert
watchers=Beobachter
stargazers=Favorisiert von
@ -523,7 +521,7 @@ pick_reaction=Wähle eine Reaktion
reactions_more=und %d weitere
form.reach_limit_of_creation=Du hast bereits dein Limit von %d Repositories erreicht.
form.name_reserved=Der Repository-Name '%s' ist reserviert.
form.name_reserved=Der Repository-Name „%s“ ist reserviert.
form.name_pattern_not_allowed='%s' ist nicht erlaubt für Repository-Namen.
need_auth=Authentifizierung zum Klonen benötigt
@ -531,7 +529,7 @@ migrate_type=Migrationstyp
migrate_type_helper=Dieses Repository wird ein <span class="text blue">Mirror</span> sein
migrate_repo=Repository migrieren
migrate.clone_address=Migrations- / Klon-URL
migrate.clone_address_desc=Die HTTP(s) oder Klon-URL eines bereits existierenden Repositories
migrate.clone_address_desc=Die HTTP(S)- oder „git clone“-URL eines bereits existierenden Repositorys
migrate.clone_local_path=oder ein lokaler Serverpfad
migrate.permission_denied=Du hast keine Berechtigung zum Importieren lokaler Repositories.
migrate.invalid_local_path=Der lokale Pfad ist ungültig, existiert nicht oder ist kein Ordner.
@ -588,7 +586,7 @@ editor.edit_file=Datei bearbeiten
editor.preview_changes=Vorschau der Änderungen
editor.cannot_edit_non_text_files=Binärdateien können nicht im Webinterface bearbeitet werden.
editor.edit_this_file=Datei bearbeiten
editor.must_be_on_a_branch=Du musst dich in einer Branch befinden, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen.
editor.must_be_on_a_branch=Du musst dich in einem Branch befinden, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen.
editor.fork_before_edit=Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen.
editor.delete_this_file=Datei löschen
editor.must_have_write_access=Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen.
@ -598,31 +596,30 @@ editor.filename_help=Füge einen Ordner hinzu, indem du seinen Namen und anschli
editor.or=oder
editor.cancel_lower=Abbrechen
editor.commit_changes=Änderungen committen
editor.add_tmpl='%s/<filename>' hinzufügen
editor.add='%s' hinzufügen
editor.update='%s' ändern
editor.delete='%s' löschen
editor.add_tmpl=„%s/<filename>“ hinzufügen
editor.add=„%s“ hinzufügen
editor.update=„%s“ ändern
editor.delete=„%s“ löschen
editor.commit_message_desc=Eine ausführlichere (optionale) Beschreibung hinzufügen…
editor.commit_directly_to_this_branch=Direkt in die <strong class="branch-name">%s</strong>-Branch einchecken.
editor.create_new_branch=Einen <strong>neue Branch</strong> für diesen Commit erstellen und einen Pull Request starten.
editor.commit_directly_to_this_branch=Direkt in den Branch „<strong class="branch-name">%s</strong> einchecken.
editor.create_new_branch=Einen <strong>neuen Branch</strong> für diesen Commit erstellen und einen Pull Request starten.
editor.new_branch_name_desc=Neuer Branchname…
editor.cancel=Abbrechen
editor.filename_cannot_be_empty=Der Dateiname darf nicht leer sein.
editor.branch_already_exists=Branch '%s' existiert bereits in diesem Repository.
editor.directory_is_a_file=Der Verzeichnisname '%s' wird bereits als Dateiname in diesem Repository verwendet.
editor.branch_already_exists=Branch „%s“ existiert bereits in diesem Repository.
editor.directory_is_a_file=Der Verzeichnisname „%s“ wird bereits als Dateiname in diesem Repository verwendet.
editor.file_is_a_symlink='%s' ist ein symolischer Link. Symbolische Links können mit dem Web Editor nicht bearbeitet werden.
editor.filename_is_a_directory=Der Dateiname '%s' wird bereits als Verzeichnisname in diesem Repository verwendet.
editor.file_editing_no_longer_exists=Die bearbeitete Datei '%s' existiert nicht mehr in diesem Repository.
editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. <a target="_blank" rel="noopener" href="%s">Hier klicken</a> um die Änderungen anzusehen, oder <strong>Änderungen erneut comitten</strong> um sie zu überschreiben.
editor.file_already_exists=Eine Datei mit dem Namen '%s' ist bereits in diesem Repository vorhanden.
editor.filename_is_a_directory=Der Dateiname „%s“ wird bereits als Verzeichnisname in diesem Repository verwendet.
editor.file_editing_no_longer_exists=Die bearbeitete Datei „%s“ existiert nicht mehr in diesem Repository.
editor.file_already_exists=Eine Datei mit dem Namen „%s“ ist bereits in diesem Repository vorhanden.
editor.no_changes_to_show=Keine Änderungen vorhanden.
editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei '%s'. Fehler: %v
editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei „%s“. Fehler: %v
editor.add_subdir=Verzeichnis erstellen…
editor.unable_to_upload_files=Fehler beim Hochladen der Dateien nach '%s'. Fehler: %v
editor.upload_files_to_dir=Dateien hochladen nach '%s'
editor.cannot_commit_to_protected_branch=Commit in den geschützten Branch '%s' ist nicht möglich.
editor.unable_to_upload_files=Fehler beim Hochladen der Dateien nach „%s“. Fehler: %v
editor.upload_files_to_dir=Dateien hochladen nach „%s“
editor.cannot_commit_to_protected_branch=Commit in den geschützten Branch „%s“ ist nicht möglich.
commits.desc=Durchsuche die Quellcode Änderungshistorie.
commits.desc=Durchsuche die Quellcode-Änderungshistorie.
commits.commits=Commits
commits.search=Commits durchsuchen…
commits.find=Suchen
@ -633,16 +630,16 @@ commits.date=Datum
commits.older=Älter
commits.newer=Neuer
commits.signed_by=Signiert von
commits.gpg_key_id=GPG Schlüssel-ID
commits.gpg_key_id=GPG-Schlüssel-ID
ext_issues=Externe Issues
ext_issues.desc=Link zu externem Issuetracker.
issues.desc=Verwalte Bug-Reports, Aufgaben und Meilensteine.
issues.new=Neuer Issue
issues.new=Neues Issue
issues.new.labels=Label
issues.new.no_label=Kein Label
issues.new.clear_labels=Labels entfernen
issues.new.clear_labels=Label entfernen
issues.new.milestone=Meilenstein
issues.new.no_milestone=Kein Meilenstein
issues.new.clear_milestone=Meilenstein entfernen
@ -658,10 +655,10 @@ issues.new_label_placeholder=Labelname
issues.new_label_desc_placeholder=Beschreibung
issues.create_label=Label erstellen
issues.label_templates.title=Lade vordefinierte Label
issues.label_templates.info=Es existieren noch keine Labels. Erstelle ein neues Label ("Neues Label") oder verwende das Standard Label-Set:
issues.label_templates.helper=Wähle ein Label
issues.label_templates.info=Es existieren noch keine Label. Erstelle ein neues Label („Neues Label“) oder verwende das Standard-Label-Set:
issues.label_templates.helper=Wähle ein Label-Set
issues.label_templates.use=Label-Set verwenden
issues.label_templates.fail_to_load_file=Fehler beim Laden der Label Template Datei '%s': %v
issues.label_templates.fail_to_load_file=Fehler beim Laden der Label-Vorlagendatei „%s“: %v
issues.add_label_at=hat das <div class="ui label"style="color: %s\; background-color: %s">%s</div>-Label %s hinzugefügt
issues.remove_label_at=hat das <div class="ui label"style="color: %s\; background-color: %s">%s</div>-Label %s entfernt
issues.add_milestone_at=`hat diesen Issue %[2]s zum <b>%[1]s</b> Meilenstein hinzugefügt`
@ -676,7 +673,7 @@ issues.delete_branch_at=`löschte die Branch <b>%s</b> %s`
issues.open_tab=%d offen
issues.close_tab=%d geschlossen
issues.filter_label=Label
issues.filter_label_no_select=Alle Labels
issues.filter_label_no_select=Alle Label
issues.filter_milestone=Meilenstein
issues.filter_milestone_no_select=Alle Meilensteine
issues.filter_assignee=Zuständig
@ -693,6 +690,8 @@ issues.filter_sort.recentupdate=Kürzlich aktualisiert
issues.filter_sort.leastupdate=Am Längsten nicht aktualisiert
issues.filter_sort.mostcomment=Am meisten kommentiert
issues.filter_sort.leastcomment=Am wenigsten kommentiert
issues.filter_sort.moststars=Meiste Favoriten
issues.filter_sort.feweststars=Wenigste Favoriten
issues.filter_sort.mostforks=Meiste Forks
issues.filter_sort.fewestforks=Wenigste Forks
issues.action_open=Öffnen
@ -743,8 +742,8 @@ issues.label.filter_sort.reverse_alphabetically=Umgekehrt alphabetisch
issues.label.filter_sort.by_size=Kleinste zuerst
issues.label.filter_sort.reverse_by_size=Größte zuerst
issues.num_participants=%d Beteiligte
issues.attachment.open_tab=`Klicken um "%s" in einem neuen Tab zu öffnen`
issues.attachment.download=`Klicken um "%s" herunterzuladen`
issues.attachment.open_tab=`Klicken, um „%s“ in einem neuen Tab zu öffnen`
issues.attachment.download=`Klicken, um „%s“ herunterzuladen`
issues.subscribe=Abonnieren
issues.unsubscribe=Abbestellen
issues.tracker=Zeiterfassung
@ -766,10 +765,10 @@ issues.cancel_tracking_history=hat die Zeiterfassung %s abgebrochen
issues.time_spent_total=Zeitaufwand insgesamt
issues.time_spent_from_all_authors=`Aufgewendete Zeit: %s`
issues.due_date=Fällig am
issues.invalid_due_date_format=Das Fälligkeitsdatum muss das Format 'JJJJ-MM-TT' haben.
issues.invalid_due_date_format=Das Fälligkeitsdatum muss das Format „JJJJ-MM-TT“ haben.
issues.error_modifying_due_date=Fehler beim Ändern des Fälligkeitsdatums.
issues.error_removing_due_date=Fehler beim Entfernen des Fälligkeitsdatums.
issues.due_date_form=jjjj-mm-tt
issues.due_date_form=JJJJ-MM-TT
issues.due_date_form_add=Fälligkeitsdatum hinzufügen
issues.due_date_form_update=Fälligkeitsdatum ändern
issues.due_date_form_remove=Fälligkeitsdatum löschen
@ -785,7 +784,7 @@ pulls.new=Neuer Pull-Request
pulls.compare_changes=Neuer Pull-Request
pulls.compare_changes_desc=Wähle die Ziel- und Quellbranch aus.
pulls.compare_base=Ziel
pulls.compare_compare=pull von
pulls.compare_compare=pullen von
pulls.filter_branch=Branch filtern
pulls.no_results=Keine Ergebnisse verfügbar.
pulls.nothing_to_compare=Diese Branches sind identisch. Es muss kein Pull-Request erstellt werden.
@ -825,13 +824,13 @@ milestones.title=Titel
milestones.desc=Beschreibung
milestones.due_date=Fälligkeitsdatum (optional)
milestones.clear=Feld leeren
milestones.invalid_due_date_format=Das Fälligkeitsdatum muss das Format 'JJJJ-MM-TT' haben.
milestones.create_success=Der Meilenstein '%s' wurde erstellt.
milestones.invalid_due_date_format=Das Fälligkeitsdatum muss das Format „JJJJ-MM-TT“ haben.
milestones.create_success=Der Meilenstein „%s“ wurde erstellt.
milestones.edit=Meilenstein bearbeiten
milestones.edit_subheader=Benutze Meilensteine, um Issues zu organisieren und den Fortschritt darzustellen.
milestones.cancel=Abbrechen
milestones.modify=Meilenstein bearbeiten
milestones.edit_success=Die Änderungen am Meilenstein "%s" wurden gespeichert.
milestones.edit_success=Die Änderungen am Meilenstein „%s“ wurden gespeichert.
milestones.deletion=Meilenstein löschen
milestones.deletion_desc=Das Löschen des Meilensteins entfernt ihn von allen Issues. Fortfahren?
milestones.deletion_success=Der Meilenstein wurde gelöscht.
@ -847,7 +846,7 @@ ext_wiki.desc=Verweis auf externes Wiki.
wiki=Wiki
wiki.welcome=Willkommen im Wiki.
wiki.welcome_desc=Im Wiki kannst Dokumentation schreiben und mit Mitarbeitern teilen.
wiki.welcome_desc=Im Wiki kannst du Dokumentation schreiben und sie mit Mitarbeitern teilen.
wiki.desc=Schreibe und teile Dokumentation mit Mitarbeitern.
wiki.create_first_page=Erstelle die erste Seite
wiki.page=Seite
@ -859,9 +858,9 @@ wiki.last_commit_info=%s hat diese Seite bearbeitet %s
wiki.edit_page_button=Bearbeiten
wiki.new_page_button=Neue Seite
wiki.delete_page_button=Seite löschen
wiki.delete_page_notice_1=Das Löschen der Wiki-Seite '%s' kann nicht Rückgängig gemacht werden. Fortfahren?
wiki.delete_page_notice_1=Das Löschen der Wiki-Seite „%s“ kann nicht rückgängig gemacht werden. Fortfahren?
wiki.page_already_exists=Eine Wiki-Seite mit dem gleichen Namen existiert bereits.
wiki.reserved_page=Der Wiki-Seitenname "%s" ist reserviert.
wiki.reserved_page=Der Wiki-Seitenname „%s“ ist reserviert.
wiki.pages=Seiten
wiki.last_updated=Zuletzt aktualisiert %s
@ -909,10 +908,10 @@ activity.published_release_label=Veröffentlicht
search=Suchen
search.search_repo=Repository durchsuchen
search.results=Suchergebnisse für "%s" in <a href="%s"> %s</a>
search.results=Suchergebnisse für „%s“ in <a href="%s"> %s</a>
settings=Einstellungen
settings.desc=In den Einstellungen kannst du die Einstellungen des Repository anpassen
settings.desc=In den Einstellungen kannst du die Einstellungen des Repositorys anpassen
settings.options=Repository
settings.collaboration=Mitarbeiter
settings.collaboration.admin=Administrator
@ -922,29 +921,29 @@ settings.collaboration.undefined=Nicht definiert
settings.hooks=Webhooks
settings.githooks=Git-Hooks
settings.basic_settings=Grundeinstellungen
settings.mirror_settings=Mirror Einstellungen
settings.sync_mirror=Jetzt Synchronisieren
settings.mirror_settings=Mirror-Einstellungen
settings.sync_mirror=Jetzt synchronisieren
settings.mirror_sync_in_progress=Mirror-Synchronisierung wird zurzeit ausgeführt. Komm in ein paar Minuten zurück.
settings.site=Webseite
settings.update_settings=Einstellungen speichern
settings.advanced_settings=Erweiterte Einstellungen
settings.wiki_desc=Repository Wiki aktivieren
settings.wiki_desc=Repository-Wiki aktivieren
settings.use_internal_wiki=Eingebautes Wiki verwenden
settings.use_external_wiki=Externes Wiki verwenden
settings.external_wiki_url=Externe Wiki URL
settings.external_wiki_url=Externe Wiki-URL
settings.external_wiki_url_error=Die externe Wiki-URL ist ungültig.
settings.external_wiki_url_desc=Besucher werden auf die externe Wiki-URL weitergeleitet wenn sie auf das Wiki-Tab klicken.
settings.issues_desc=Repository Issue-Tracker aktivieren
settings.external_wiki_url_desc=Besucher werden auf die externe Wiki-URL weitergeleitet, wenn sie auf das Wiki-Tab klicken.
settings.issues_desc=Repository-Issue-Tracker aktivieren
settings.use_internal_issue_tracker=Integrierten Issue-Tracker verwenden
settings.use_external_issue_tracker=Externen Issue-Tracker verwenden
settings.external_tracker_url=URL eines externen Issue Trackers
settings.external_tracker_url=URL eines externen Issue-Trackers
settings.external_tracker_url_error=Die URL des externen Issue-Trackers ist ungültig.
settings.external_tracker_url_desc=Besucher werden auf die externe Issue-Tracker-URL weitergeleitet wenn sie auf das Issues-Tab klicken.
settings.external_tracker_url_desc=Besucher werden auf die externe Issue-Tracker-URL weitergeleitet, wenn sie auf das Issues-Tab klicken.
settings.tracker_url_format=URL-Format des externen Issue-Systems
settings.tracker_issue_style=Namenskonvention des externen Issue-Trackers
settings.tracker_issue_style.numeric=Numerisch
settings.tracker_issue_style.alphanumeric=Alphanumerisch
settings.tracker_url_format_desc=Du kannst die Platzhalter <code>{user}</code>, <code>{repo}</code>, <code>{index}</code> für den Benutzernamen, den Namen des Repositories und die Issue-Nummer verwenden.
settings.tracker_url_format_desc=Du kannst die Platzhalter <code>{user}</code>, <code>{repo}</code>, <code>{index}</code> für den Benutzernamen, den Namen des Repositorys und die Issue-Nummer verwenden.
settings.enable_timetracker=Zeiterfassung aktivieren
settings.allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen
settings.pulls_desc=Repository-Pull-Requests aktivieren
@ -962,22 +961,22 @@ settings.convert_notices_1=Dieser Vorgang wandelt das Mirror-Repository in ein n
settings.convert_confirm=Repository umwandeln
settings.convert_succeed=Das Mirror-Repository wurde erfolgreich in ein normales Repository umgewandelt.
settings.transfer=Besitz übertragen
settings.transfer_desc=Übertrage dieses Repository auf einen anderen Benutzer oder eine Organisation in der Du Admin-Rechte hast.
settings.transfer_notices_1=- Du wirst keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist.
settings.transfer_notices_2=- Du wirst weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
settings.transfer_desc=Übertrage dieses Repository auf einen anderen Benutzer oder eine Organisation, in der du Admin-Rechte hast.
settings.transfer_notices_1= Du wirst keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist.
settings.transfer_notices_2= Du wirst weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
settings.transfer_form_title=Gib den Repository-Namen zur Bestätigung ein:
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 sei vorsichtig.
settings.wiki_delete_notices_1=- Dies löscht und deaktiviert das Wiki für %s.
settings.wiki_delete_notices_1= Dies löscht und deaktiviert das Wiki für %s.
settings.confirm_wiki_delete=Wiki-Daten löschen
settings.wiki_deletion_success=Repository Wiki-Daten wurden gelöscht.
settings.wiki_deletion_success=Repository-Wiki-Daten wurden gelöscht.
settings.delete=Dieses Repository löschen
settings.delete_desc=Wenn dieses Repository gelöscht wurde, gibt es keinen Weg zurück. Bitte sei vorsichtig.
settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
settings.delete_notices_2=- Die Operation wird das <strong>%s</strong>-Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen.
settings.delete_notices_fork_1=- Nach dem Löschen werden alle Forks unabhängig.
settings.delete_notices_1= Diese Operation <strong>KANN NICHT</strong> rückgängig gemacht werden.
settings.delete_notices_2= Die Operation wird das <strong>%s</strong>-Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen.
settings.delete_notices_fork_1= Forks dieses Repositorys werden nach dem Löschen unabhängig.
settings.deletion_success=Das Repository wurde gelöscht.
settings.update_settings_success=Repository Einstellungen wurden aktualisiert.
settings.update_settings_success=Repository-Einstellungen wurden aktualisiert.
settings.transfer_owner=Neuer Besitzer
settings.make_transfer=Transfer durchführen
settings.transfer_succeed=Das Repository wurde transferiert.
@ -992,7 +991,6 @@ settings.search_user_placeholder=Benutzer suchen…
settings.org_not_allowed_to_be_collaborator=Organisationen können nicht als Mitarbeiter hinzugefügt werden.
settings.user_is_org_member=Der Benutzer ist ein Organisationsmitglied und kann nicht als Mitarbeiter hinzugefügt werden.
settings.add_webhook=Webhook hinzufügen
settings.hooks_desc=Webhooks senden bei bestimmten Gitea-Events automatisch HTTP POST-Requets an einen Server. Lies mehr in unserer <a target="_blank" rel="noopener" href="%s">Anleitung zu Webhooks (Englisch)</a>.
settings.webhook_deletion=Webhook löschen
settings.webhook_deletion_desc=Das Entfernen eines Webhooks löscht seine Einstellungen und Zustellungsverlauf. Fortfahren?
settings.webhook_deletion_success=Webhook wurde entfernt.
@ -1009,7 +1007,6 @@ settings.githook_edit_desc=Wenn ein Hook nicht aktiv ist, wird der Standardinhal
settings.githook_name=Hook-Name
settings.githook_content=Hook-Inhalt
settings.update_githook=Hook aktualisieren
settings.add_webhook_desc=Gitea sendet einen <code>POST</code>-Request mit festgelegtem Content-Type an die Ziel-URL. Mehr Informationen findest du in der <a target="_blank" rel="noopener" href="%s">Anleitung zu Webhooks (Englisch)</a>.
settings.payload_url=Ziel-URL
settings.content_type=POST-Content-Type
settings.secret=Secret
@ -1047,7 +1044,7 @@ settings.update_webhook=Webhook aktualisieren
settings.update_hook_success=Webhook wurde aktualisiert.
settings.delete_webhook=Webhook entfernen
settings.recent_deliveries=Letzte Zustellungen
settings.hook_type=Hook Typ
settings.hook_type=Hook-Typ
settings.add_slack_hook_desc=<a href="%s">Slack</a>-Integration zu deinem Repository hinzufügen.
settings.slack_token=Token
settings.slack_domain=Domain
@ -1064,18 +1061,18 @@ settings.title=Titel
settings.deploy_key_content=Inhalt
settings.key_been_used=Ein Deploy-Key mit identischem Inhalt wird bereits verwendet.
settings.key_name_used=Ein Deploy-Key mit diesem Namen existiert bereits.
settings.add_key_success=Der Deploy-Key '%s' wurde erfolgreich hinzugefügt.
settings.add_key_success=Der Deploy-Key „%s“ wurde erfolgreich hinzugefügt.
settings.deploy_key_deletion=Deploy-Key löschen
settings.deploy_key_deletion_desc=Nach dem Löschen wird dieser Deploy-Key keinen Zugriff mehr auf dieses Repository haben. Fortfahren?
settings.deploy_key_deletion_success=Der Deploy-Key wurde entfernt.
settings.branches=Branches
settings.protected_branch=Branch-Protection
settings.protected_branch=Branch-Schutz
settings.protected_branch_can_push=Push erlauben?
settings.protected_branch_can_push_yes=Du kannst pushen
settings.protected_branch_can_push_no=Du kannst nicht pushen
settings.branch_protection=Branch-Schutz" für Branch '<b>%s</b>'
settings.branch_protection=Branch-Schutz für Branch „<b>%s</b>“
settings.protect_this_branch=Brach-Schutz aktivieren
settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere Git force push auf diese Branch.
settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere das „force pushing” von Git auf diesen Branch.
settings.protect_whitelist_committers=Push-Whitelist aktivieren
settings.protect_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Push-Beschränkungen zu umgehen.
settings.protect_whitelist_users=Nutzer, die pushen dürfen:
@ -1083,17 +1080,17 @@ settings.protect_whitelist_search_users=Benutzer suchen…
settings.protect_whitelist_teams=Teams, die pushen dürfen:
settings.protect_whitelist_search_teams=Suche nach Teams…
settings.protect_merge_whitelist_committers=Merge-Whitelist aktivieren
settings.protect_merge_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Pull-Requests in diese Branch zu mergen.
settings.protect_merge_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Pull-Requests in diesen Branch zu mergen.
settings.protect_merge_whitelist_users=Nutzer, die mergen dürfen:
settings.protect_merge_whitelist_teams=Teams, die mergen dürfen:
settings.add_protected_branch=Schutz aktivieren
settings.delete_protected_branch=Schutz deaktivieren
settings.update_protect_branch_success=Branch-protection für die Branch '%s' wurde geändert.
settings.remove_protected_branch_success=Branch-protection für die Branch '%s' wurde deaktiviert.
settings.protected_branch_deletion=Brach-Schutz deaktivieren
settings.protected_branch_deletion_desc=Wenn du die Branch-Protection deaktivierst, können alle Nutzer mit Schreibrechten auf die Branch pushen. Fortfahren?
settings.default_branch_desc=Wähle eine Standardbranch für Pull-Requests und Code-Commits:
settings.choose_branch=Wähle eine Branch…
settings.update_protect_branch_success=Branch-Schutz für den Branch „%s“ wurde geändert.
settings.remove_protected_branch_success=Branch-Schutz für den Branch „%s“ wurde deaktiviert.
settings.protected_branch_deletion=Branch-Schutz deaktivieren
settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren?
settings.default_branch_desc=Wähle einen Standardbranch für Pull-Requests und Code-Commits:
settings.choose_branch=Wähle einen Branch
settings.no_protected_branch=Es gibt keine geschützten Branches.
diff.browse_source=Quellcode durchsuchen
@ -1129,7 +1126,7 @@ release.write=Schreiben
release.preview=Vorschau
release.loading=Laden…
release.prerelease_desc=Als Pre-Release kennzeichnen
release.prerelease_helper=Dieses Release als "ungeeignet für den produktiven Einsatz" markieren.
release.prerelease_helper=Dieses Release als „ungeeignet für den produktiven Einsatz“ markieren.
release.cancel=Abbrechen
release.publish=Release veröffentlichen
release.save_draft=Entwurf speichern
@ -1144,27 +1141,29 @@ release.downloads=Downloads
branch.name=Branchname
branch.search=Branches durchsuchen
branch.already_exists=Eine Branch mit dem Namen '%s' existiert bereits.
branch.already_exists=Ein Branch mit dem Namen „%s“ existiert bereits.
branch.delete_head=Löschen
branch.delete=Branch '%s' löschen
branch.delete=Branch „%s“ löschen
branch.delete_html=Branch löschen
branch.delete_desc=Das Löschen einer Branch ist permanent. Es <strong>KANN NICHT</strong> Rückgängig gemacht werden. Fortfahren?
branch.deletion_success=Branch '%s' wurde gelöscht.
branch.deletion_failed=Branch '%s' konnte nicht gelöscht werden.
branch.delete_branch_has_new_commits=Die Branch '%s' kann nicht gelöscht weden, da seit dem letzten Merge neue Commits hinzugefügt wurden.
branch.delete_desc=Das Löschen eines Branches ist permanent. Es <strong>KANN NICHT</strong> rückgängig gemacht werden. Fortfahren?
branch.deletion_success=Branch „%s“ wurde gelöscht.
branch.deletion_failed=Branch „%s“ konnte nicht gelöscht werden.
branch.delete_branch_has_new_commits=Der Branch „%s“ kann nicht gelöscht weden, da seit dem letzten Merge neue Commits hinzugefügt wurden.
branch.create_branch=Erstelle Branch <strong>%s</strong>
branch.create_from=von '%s'
branch.create_success=Branch '%s' wurde erstellt.
branch.branch_already_exists=Branch '%s' existiert bereits in diesem Repository.
branch.branch_name_conflict=Der Branch-Name '%s' steht in Konflikt mit der bestehendem Branch '%s'.
branch.tag_collision=Branch '%s' kann nicht erstellt werden, da in diesem Repository bereits ein Tag mit dem selben Namen existiert.
branch.create_from=von „%s“
branch.create_success=Branch „%s“ wurde erstellt.
branch.branch_already_exists=Branch „%s“ existiert bereits in diesem Repository.
branch.branch_name_conflict=Der Branch-Name „%s“ steht in Konflikt mit dem bestehenden Branch „%s“.
branch.tag_collision=Branch „%s“ kann nicht erstellt werden, da in diesem Repository bereits ein Tag mit dem selben Namen existiert.
branch.deleted_by=Von %s gelöscht
branch.restore_success=Branch '%s' wurde wiederhergestellt.
branch.restore_failed=Wiederherstellung der Branch '%s' fehlgeschlagen.
branch.protected_deletion_failed=Branch '%s' ist geschützt und kann nicht gelöscht werden.
branch.restore_success=Branch „%s“ wurde wiederhergestellt.
branch.restore_failed=Wiederherstellung des Branches „%s“ fehlgeschlagen.
branch.protected_deletion_failed=Branch „%s“ ist geschützt und kann nicht gelöscht werden.
topic.manage_topics=Themen verwalten
topic.done=Fertig
topic.count_prompt=Du kannst nicht mehr als 25 Themen auswählen
topic.format_prompt=Themen müssen mit einem Buchstaben oder einer Zahl beginnen. Sie können Bindestriche (-) enthalten und dürfen nicht länger als 35 Zeichen sein
[org]
org_name_holder=Name der Organisation
@ -1186,9 +1185,9 @@ team_desc_helper=Beschreibe den Zweck oder die Rolle des Teams.
team_permission_desc=Berechtigungen
team_unit_desc=Zugriff auf Repositorybereiche erlauben
form.name_reserved=Der Organisationsname '%s' ist reserviert.
form.name_pattern_not_allowed=Das Muster '%s' ist in Organisationsnamen nicht erlaubt.
form.create_org_not_allowed=Du bist nicht berechtigt eine Organisation zu erstellen.
form.name_reserved=Der Organisationsname „%s“ ist reserviert.
form.name_pattern_not_allowed=Das Muster „%s“ ist in Organisationsnamen nicht erlaubt.
form.create_org_not_allowed=Du bist nicht berechtigt, eine Organisation zu erstellen.
settings=Einstellungen
settings.options=Organisation
@ -1202,7 +1201,7 @@ settings.update_avatar_success=Der Organisationsavatar wurde aktualisiert.
settings.delete=Organisation löschen
settings.delete_account=Diese Organisation löschen
settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies <strong>KANN NICHT</strong> rückgängig gemacht werden!
settings.confirm_delete_account=Löschen
settings.confirm_delete_account=Löschen bestätigen
settings.delete_org_title=Organisation löschen
settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht. Fortfahren?
settings.hooks_desc=Webhooks hinzufügen, die für <strong>alle</strong> Repositories dieser Organisation ausgelöst werden.
@ -1227,7 +1226,7 @@ teams.read_access_helper=Mitglieder können Teamrepositories ansehen und klonen.
teams.write_access=Schreibzugriff
teams.write_access_helper=Mitglieder können Teamrepositories ansehen und auf sie pushen.
teams.admin_access=Administratorzugang
teams.admin_access_helper=Mitglieder können auf Team Repositories "pushen", von ihnen "pullen" und Mitarbeiter hinzufügen.
teams.admin_access_helper=Mitglieder können auf Team-Repositorys pushen, von ihnen pullen und Mitarbeiter hinzufügen.
teams.no_desc=Dieses Team hat keine Beschreibung
teams.settings=Einstellungen
teams.owners_permission_desc=Besitzer haben vollen Zugriff auf <strong>alle Repositories</strong> und <strong>Admin-Rechte</strong> für diese Organisation.
@ -1236,7 +1235,7 @@ teams.update_settings=Einstellungen aktualisieren
teams.delete_team=Team löschen
teams.add_team_member=Teammitglied hinzufügen
teams.delete_team_title=Team löschen
teams.delete_team_desc=Das Löschen eines Teams wiederruft den Repository-Zugriff für seine Mitglieder. Fortfahren?
teams.delete_team_desc=Das Löschen eines Teams widerruft den Repository-Zugriff für seine Mitglieder. Fortfahren?
teams.delete_team_success=Das Team wurde gelöscht.
teams.read_permission_desc=Dieses Team hat <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
teams.write_permission_desc=Dieses Team hat <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und darauf pushen.
@ -1263,24 +1262,22 @@ total=Gesamt: %d
dashboard.statistic=Übersicht
dashboard.operations=Wartungsoperationen
dashboard.system_status=System-Status
dashboard.statistic_info=Gitea's Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositories, <b>%d</b> Beobachtungen, <b>%d</b> Favoriten, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> Konten sozialer Netzwerke, <b>%d</b> Gefolgte, <b>%d</b> Mirrors, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Meilensteine, <b>%d</b> Label, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
dashboard.statistic_info=Giteas Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositorys, <b>%d</b> Beobachtungen, <b>%d</b> Favoriten, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> Konten sozialer Netzwerke, <b>%d</b> Gefolgte, <b>%d</b> Mirrors, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Meilensteine, <b>%d</b> Label, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
dashboard.operation_name=Name der Operation
dashboard.operation_switch=Wechseln
dashboard.operation_run=Ausführen
dashboard.clean_unbind_oauth=Nicht verbundene OAuth-Verbindungen löschen
dashboard.clean_unbind_oauth_success=Alle unverbundene OAuth-Verbindungen wurden gelöscht.
dashboard.delete_inactivate_accounts=Deaktivierte Konten löschen
dashboard.delete_inactivate_accounts_success=Alle deaktivierten Konten wurden erfolgreich gelöscht.
dashboard.delete_repo_archives=Alle Repository-Archive löschen
dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegangenen Git-Dateien löschen
dashboard.delete_missing_repos_success=Alle Repository-Datensätze mit verlorenen Git-Dateien wurden gelöscht.
dashboard.git_gc_repos=Garbage Collection auf Repositories ausführen
dashboard.git_gc_repos_success=Alle Repositories haben Garbage Collection beendet.
dashboard.resync_all_sshkeys='.ssh/authorized_keys'-Datei mit Gitea SSH-Keys neu schreiben. (Wenn Du den eingebauten SSH Server nutzt, musst du das nicht ausführen.)
dashboard.git_gc_repos=Garbage-Collection auf Repositories ausführen
dashboard.git_gc_repos_success=Alle Repositories haben Garbage-Collection beendet.
dashboard.resync_all_sshkeys=„.ssh/authorized_keys“-Datei mit Gitea-SSH-Keys neu schreiben. (Wenn Du den eingebauten SSH-Server nutzt, musst du das nicht ausführen.)
dashboard.resync_all_sshkeys_success=Alle von Gitea verwalteten öffentlichen Schlüssel wurden neu geschrieben.
dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositories.
dashboard.resync_all_hooks_success=Alle pre-receive, update und post-receive Repository-Hooks wurden synchronisiert.
dashboard.resync_all_hooks=Synchronisiere „pre-receive“-, „update“- und „post-receive“-Hooks für alle Repositories erneut.
dashboard.resync_all_hooks_success=Alle „pre-receive“-, „update“- und „post-receive“-Repository-Hooks wurden erneut synchronisiert.
dashboard.reinit_missing_repos=Alle Git-Repositories mit Einträgen neu einlesen
dashboard.reinit_missing_repos_success=Alle verlorenen Git-Repositories mit existierenden Einträgen wurden erfolgreich aktualisiert.
dashboard.sync_external_users=Externe Benutzerdaten synchronisieren
@ -1303,11 +1300,11 @@ dashboard.heap_memory_released=Freigegebener Heap-Memory
dashboard.heap_objects=Heap-Objekte
dashboard.bootstrap_stack_usage=Bootstrap-Stack-Auslastung
dashboard.stack_memory_obtained=Erhaltener Stack-Memory
dashboard.mspan_structures_usage=MSpan-Structures Auslastung
dashboard.mspan_structures_obtained=MSpan-Structures erhalten
dashboard.mcache_structures_usage=MCache-Structures Auslastung
dashboard.mspan_structures_usage=MSpan-Structures-Auslastung
dashboard.mspan_structures_obtained=Erhaltene MSpan-Structures
dashboard.mcache_structures_usage=MCache-Structures-Auslastung
dashboard.mcache_structures_obtained=Erhaltene MCache-Structures
dashboard.profiling_bucket_hash_table_obtained=Analysesatz Hashtabellen erhalten
dashboard.profiling_bucket_hash_table_obtained=Erhaltene Analysesatz-Hashtabellen
dashboard.gc_metadata_obtained=Erhaltene GC-Metadata
dashboard.other_system_allocation_obtained=Andere erhaltene System-Allokationen
dashboard.next_gc_recycle=Nächster GC-Zyklus
@ -1327,20 +1324,20 @@ users.created=Registriert am
users.last_login=Letzte Anmeldung
users.never_login=Hat sich noch nie eingeloggt
users.send_register_notify=Benutzer-Registrierungsbenachrichtigung senden
users.new_success=Der Account '%s' wurde erstellt.
users.new_success=Der Account „%s“ wurde erstellt.
users.edit=Bearbeiten
users.auth_source=Authentifizierungsquelle
users.local=Lokal
users.auth_login_name=Anmeldename zur Authentifizierung
users.password_helper=Passwort leerlassen, um es nicht zu verändern.
users.update_profile_success=Der Account '%s' wurde aktualisiert.
users.update_profile_success=Der Account „%s“ wurde aktualisiert.
users.edit_account=Benutzerkonto bearbeiten
users.max_repo_creation=Maximale Anzahl Repositories
users.max_repo_creation_desc=(Gib -1 ein, um das globale Standardlimit zu verwenden.)
users.is_activated=Account ist aktiviert
users.prohibit_login=Anmelden deaktivieren
users.is_admin=Ist Administrator
users.allow_git_hook=Darf "Git Hooks" erstellen
users.allow_git_hook=Darf „Git Hooks“ erstellen
users.allow_import_local=Darf lokale Repositories importieren
users.allow_create_organization=Darf Organisationen erstellen
users.update_profile=Benutzerkonto aktualisieren
@ -1380,32 +1377,33 @@ auths.host=Host
auths.port=Port
auths.bind_dn=DN binden
auths.bind_password=Passwort binden
auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze wenn möglich einen Account mit nur Lesezugriff.
auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze, wenn möglich, einen Account, der nur über Lesezugriff verfügt.
auths.user_base=Basis für Benutzersuche
auths.user_dn=Benutzer DN
auths.attribute_username=Benutzername Attribut
auths.user_dn=Benutzer-DN
auths.attribute_username=Benutzernamens-Attribut
auths.attribute_username_placeholder=Leerlassen, um den in Gitea eingegebenen Benutzernamen zu verwenden.
auths.attribute_name=Vornamensattribut
auths.attribute_surname=Nachnamensattribut
auths.attribute_mail=E-Mail Attribut
auths.attribute_mail=E-Mail-Attribut
auths.attribute_ssh_public_key=Öffentlicher-SSH-Schlüssel-Attribut
auths.attributes_in_bind=Hole Attribute im Bind-Kontext
auths.use_paged_search=Seitensuche verwenden
auths.search_page_size=Seitengröße
auths.filter=Benutzerfilter
auths.admin_filter=Admin Filter
auths.ms_ad_sa=MS AD Suchattribute
auths.admin_filter=Admin-Filter
auths.ms_ad_sa=MS-AD-Suchattribute
auths.smtp_auth=SMTP-Authentifizierungstyp
auths.smtphost=SMTP-Host
auths.smtpport=SMTP-Port
auths.allowed_domains=Erlaubte Domains
auths.allowed_domains_helper=Leerlassen, um alle Domains zuzulassen. Trenne mehrere Domänen mit einem Komma (',').
auths.allowed_domains_helper=Leerlassen, um alle Domains zuzulassen. Trenne mehrere Domänen mit einem Komma („,“).
auths.enable_tls=TLS-Verschlüsselung aktivieren
auths.skip_tls_verify=TLS Verifikation überspringen
auths.pam_service_name=PAM Dienstname
auths.oauth2_provider=OAuth2 Anbieter
auths.skip_tls_verify=TLS-Verifikation überspringen
auths.pam_service_name=PAM-Dienstname
auths.oauth2_provider=OAuth2-Anbieter
auths.oauth2_clientID=Client-ID (Schlüssel)
auths.oauth2_clientSecret=Client-Secret
auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery URL
auths.openIdConnectAutoDiscoveryURL=OpenID-Connect-Auto-Discovery-URL
auths.oauth2_use_custom_url=Benutzerdefinierte URLs anstelle von Standard-URLs verwenden
auths.oauth2_tokenURL=Token-URL
auths.oauth2_authURL=Authorisierungs-URL
@ -1413,48 +1411,48 @@ auths.oauth2_profileURL=Profil-URL
auths.oauth2_emailURL=E-Mail-URL
auths.enable_auto_register=Automatische Registrierung aktivieren
auths.tips=Tipps
auths.tips.oauth2.general=OAuth2 Authentifizierung
auths.tips.oauth2.general.tip=Beim Registrieren einer neuen OAuth2 Authentifizierung sollte die Callback/Weiterleitungs-URL <host>/user/oauth2/<Authentication Name>/callback sein.
auths.tip.oauth2_provider=OAuth2 Anbieter
auths.tip.bitbucket=Registriere einen neuen OAuth-Consumer unter https://bitbucket.org/account/user/<dein-benutzername>/oauth-consumers/new und füge die Berechtigung "Account"-"Read" hinzu.
auths.tips.oauth2.general=OAuth2-Authentifizierung
auths.tips.oauth2.general.tip=Beim Registrieren einer neuen OAuth2-Authentifizierung sollte die Callback-/Weiterleitungs-URL „<host>/user/oauth2/<Authentication Name>/callback sein.
auths.tip.oauth2_provider=OAuth2-Anbieter
auths.tip.bitbucket=Registriere einen neuen OAuth-Consumer unter https://bitbucket.org/account/user/<dein-benutzername>/oauth-consumers/new und füge die Berechtigung „Account“ „Read“ hinzu.
auths.tip.dropbox=Erstelle eine neue App auf https://www.dropbox.com/developers/apps.
auths.tip.facebook=Erstelle eine neue Anwendung auf https://developers.facebook.com/apps und füge das Produkt "Facebook Login" hinzu.
auths.tip.github=Erstelle unter https://github.com/settings/applications/new eine neue OAuth Anwendung.
auths.tip.facebook=Erstelle eine neue Anwendung auf https://developers.facebook.com/apps und füge das Produkt „Facebook Login“ hinzu.
auths.tip.github=Erstelle unter https://github.com/settings/applications/new eine neue OAuth-Anwendung.
auths.tip.gitlab=Erstelle unter https://gitlab.com/profile/applications eine neue Anwendung.
auths.tip.google_plus=Du erhältst die OAuth2 Client Zugangsdaten in der Google API Console unter https://console.developers.google.com/
auths.tip.openid_connect=Benutze die OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) als Endpunkt.
auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option “Allow this application to be used to Sign in with Twitter” aktiviert ist
auths.tip.google_plus=Du erhältst die OAuth2-Client-Zugangsdaten in der Google-API-Konsole unter https://console.developers.google.com/
auths.tip.openid_connect=Benutze die OpenID-Connect-Discovery-URL (<server>/.well-known/openid-configuration), um die Endpunkte zu spezifizieren
auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option „Allow this application to be used to Sign in with Twitter“ aktiviert ist
auths.edit=Authentifikationsquelle bearbeiten
auths.activated=Diese Authentifikationsquelle ist aktiviert
auths.new_success=Die Authentifizierung "%s" wurde hinzugefügt.
auths.new_success=Die Authentifizierung „%s“ wurde hinzugefügt.
auths.update_success=Diese Authentifizierungsquelle wurde aktualisiert.
auths.update=Authentifizierungsquelle aktualisieren
auths.delete=Authentifikationsquelle löschen
auths.delete_auth_title=Authentifizierungsquelle löschen
auths.delete_auth_desc=Das Löschen einer Authentifizierungsquelle verhindert, dass Benutzer sich darüber anmelden können. Fortfahren?
auths.still_in_used=Diese Authentifizierungsquelle wird noch verwendet. Bearbeite oder lösche zuerst alle Benutzer, die diese Authentifizierungsquelle benutzen.
auths.deletion_success=Die Authentifizierungsquelle '%s' wurde gelöscht.
auths.login_source_exist=Die Authentifizierungsquelle '%s' existiert bereits.
auths.deletion_success=Die Authentifizierungsquelle „%s“ wurde gelöscht.
auths.login_source_exist=Die Authentifizierungsquelle „%s“ existiert bereits.
config.server_config=Serverkonfiguration
config.app_name=Seitentitel
config.app_ver=Gitea Version
config.app_url=Gitea Basis-URL
config.app_ver=Gitea-Version
config.app_url=Gitea-Basis-URL
config.custom_conf=Konfigurations-Datei-Pfad
config.domain=SSH Server-Domain
config.domain=SSH-Server-Domain
config.offline_mode=Lokaler Modus
config.disable_router_log=Router-Log deaktivieren
config.run_user=Ausführen als
config.run_mode=Laufzeit-Modus
config.git_version=Git Version
config.repo_root_path=Repository-Verzeichnis
config.git_version=Git-Version
config.repo_root_path=Repository-Wurzelpfad
config.lfs_root_path=LFS-Wurzelpfad
config.static_file_root_path=Verzeichnis für statische Dateien
config.log_file_root_path=Logdateipfad
config.script_type=Skript-Typ
config.reverse_auth_user=Nutzer bei Reverse-Authentifizierung
config.ssh_config=SSH Konfiguration
config.ssh_config=SSH-Konfiguration
config.ssh_enabled=Aktiviert
config.ssh_start_builtin_server=Eingebauten Server verwenden
config.ssh_domain=Server-Domain
@ -1462,9 +1460,9 @@ config.ssh_port=Port
config.ssh_listen_port=Listen-Port
config.ssh_root_path=Wurzelverzeichnis
config.ssh_key_test_path=Schlüssel-Test-Pfad
config.ssh_keygen_path=Keygen ('ssh-keygen') Pfad
config.ssh_keygen_path=Keygen-Pfad („ssh-keygen“)
config.ssh_minimum_key_size_check=Prüfung der Mindestschlüssellänge
config.ssh_minimum_key_sizes=Minimale Schlüssellängen
config.ssh_minimum_key_sizes=Mindestschlüssellängen
config.db_config=Datenbankkonfiguration
config.db_type=Typ
@ -1472,25 +1470,23 @@ config.db_host=Host
config.db_name=Name
config.db_user=Benutzername
config.db_ssl_mode=SSL
config.db_ssl_mode_helper=(nur für "postgres")
config.db_path=Verzeichnis
config.db_path_helper=(für "sqlite3" und "tidb")
config.service_config=Service-Konfiguration
config.register_email_confirm=E-Mail-Bestätigung benötigt zum Registrieren
config.disable_register=Selbstegistrierung deaktivieren
config.allow_only_external_registration=Registrierung nur über externe Services aktiveren
config.enable_openid_signup=OpenID Selbstregistrierung aktivieren
config.enable_openid_signin=OpenID Anmeldung aktivieren
config.enable_openid_signup=OpenID-Selbstregistrierung aktivieren
config.enable_openid_signin=OpenID-Anmeldung aktivieren
config.show_registration_button=Schaltfläche zum Registrieren anzeigen
config.require_sign_in_view=Seiten nur für angemeldete Benutzer zugänglich
config.mail_notify=E-Mail-Benachrichtigungen aktivieren
config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren
config.enable_captcha=CAPTCHA aktivieren
config.active_code_lives=Aktivierungscode Lebensdauer
config.active_code_lives=Aktivierungscode-Lebensdauer
config.reset_password_code_lives=Ablaufdatum des Passworts zurücksetzen
config.default_keep_email_private=E-Mail-Adressen standardmäßig verbergen
config.default_allow_create_organization=Erstellen von Organisationen standarmäßig erlauben
config.default_allow_create_organization=Erstellen von Organisationen standardmäßig erlauben
config.enable_timetracking=Zeiterfassung aktivieren
config.default_enable_timetracking=Zeiterfassung standardmäßig aktivieren
config.default_allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen
@ -1499,11 +1495,11 @@ config.no_reply_address=Versteckte E-Mail-Domain
config.webhook_config=Webhook-Konfiguration
config.queue_length=Warteschlangenlänge
config.deliver_timeout=Zeitlimit für Zustellung
config.skip_tls_verify=TLS Verifikation überspringen
config.skip_tls_verify=TLS-Verifikation überspringen
config.mailer_config=SMTP Mailer Konfiguration
config.mailer_config=SMTP-Mailer-Konfiguration
config.mailer_enabled=Aktiviert
config.mailer_disable_helo=HELO Deaktivieren
config.mailer_disable_helo=HELO deaktivieren
config.mailer_name=Name
config.mailer_host=Host
config.mailer_user=Benutzer
@ -1511,8 +1507,8 @@ config.mailer_use_sendmail=Sendmail benutzen
config.mailer_sendmail_path=Sendmail-Pfad
config.mailer_sendmail_args=Zusätzliche Argumente für Sendmail
config.send_test_mail=Test-E-Mail senden
config.test_mail_failed=Das Senden der Test-E-Mail an '%s' ist fehlgeschlagen: %v
config.test_mail_sent=Eine Test-E-Mail wurde an '%s' gesendet.
config.test_mail_failed=Das Senden der Test-E-Mail an „%s“ ist fehlgeschlagen: %v
config.test_mail_sent=Eine Test-E-Mail wurde an „%s“ gesendet.
config.oauth_config=OAuth-Konfiguration
config.oauth_enabled=Aktiviert
@ -1532,16 +1528,16 @@ config.session_life_time=Session-Lebensdauer
config.https_only=Nur HTTPS
config.cookie_life_time=Cookie-Lebensdauer
config.picture_config=Avatar-Konfiguration
config.picture_config=Bild-und-Profilbild-Konfiguration
config.picture_service=Bilderservice
config.disable_gravatar=Gravatar deaktivieren
config.enable_federated_avatar=Föderierte Profilbilder einschalten
config.git_config=Git Konfiguration
config.git_disable_diff_highlight=Diff Syntaxhervorhebung ausschalten
config.git_max_diff_lines=Max Diff Zeilen (in einer Datei)
config.git_max_diff_line_characters=Max Diff Zeichen (in einer Zeile)
config.git_max_diff_files=Max Diff Dateien (Anzeige)
config.git_config=Git-Konfiguration
config.git_disable_diff_highlight=Diff-Syntaxhervorhebung ausschalten
config.git_max_diff_lines=Max. Diff-Zeilen (in einer Datei)
config.git_max_diff_line_characters=Max. Diff-Zeichen (in einer Zeile)
config.git_max_diff_files=Max. Diff-Dateien (Angezeigte)
config.git_gc_args=GC-Argumente
config.git_migrate_timeout=Zeitlimit für Migration
config.git_mirror_timeout=Zeitlimit für Mirror-Aktualisierung
@ -1581,13 +1577,13 @@ notices.delete_success=Diese Systemmeldung wurde gelöscht.
create_repo=hat das Repository <a href="%s">%s</a> erstellt
rename_repo=hat das Repository von <code>%[1]s</code> zu <a href="%[2]s">%[3]s</a> umbenannt
commit_repo=hat auf <a href="%[1]s/src/%[2]s">%[3]s</a> in <a href="%[1]s">%[4]s</a> gepusht
create_issue=`hat den Issue <a href="%s/issues/%s">%s#%[2]s</a> geöffnet`
close_issue=`hat den Issue <a href="%s/issues/%s">%s#%[2]s</a> geschlossen`
reopen_issue=`hat den Issue <a href="%s/issues/%s">%s#%[2]s</a> wieder geöffnet`
create_issue=`hat das Issue <a href="%s/issues/%s">%s#%[2]s</a> geöffnet`
close_issue=`hat das Issue <a href="%s/issues/%s">%s#%[2]s</a> geschlossen`
reopen_issue=`hat das Issue <a href="%s/issues/%s">%s#%[2]s</a> erneut geöffnet`
create_pull_request=`hat den Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> erstellt`
close_pull_request=`hat den Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> geschlossen`
reopen_pull_request=`hat den Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> wieder geöffnet`
comment_issue=`hat den Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
comment_issue=`hat das Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
merge_pull_request=`hat den Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> zusammengeführt`
transfer_repo=hat Repository <code>%s</code> transferiert an <a href="%s">%s</a>
push_tag=hat Tag <a href="%s/src/%s">%[2]s</a> auf <a href="%[1]s">%[3]s</a> gepusht
@ -1637,12 +1633,12 @@ mark_all_as_read=Alle als gelesen markieren
[gpg]
error.extract_sign=Die Signatur konnte nicht extrahiert werden
error.generate_hash=Es konnte kein Hash vom Commit generiert werden
error.no_committer_account=Es ist kein Benutzerkonto mit dieser Commiter-Email verbunden
error.no_committer_account=Es ist kein Account mit der E-Mail-Adresse des Committers verbunden
error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
error.not_signed_commit=Kein signierter Commit
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos
[units]
error.no_unit_allowed_repo=Du hast keine Berechtigung auf einen Bereich dieses Repositories zuzugreifen.
error.unit_not_allowed=Du hast keine Berechtigung auf diesen Repository-Bereich zuzugreifen.
error.no_unit_allowed_repo=Du hast keine Berechtigung, um auf irgendeinen Bereich dieses Repositories zuzugreifen.
error.unit_not_allowed=Du hast keine Berechtigung, um auf diesen Repository-Bereich zuzugreifen.

View File

@ -75,7 +75,7 @@ cancel = Cancel
[install]
install = Installation
title = Initial Configuration
docker_helper = If you run Gitea inside Docker, please read the <a target="_blank" rel="noopener" href="%s">documentation</a> before changing any settings.
docker_helper = If you run Gitea inside Docker, please read the <a target="_blank" rel="noopener noreferrer" href="%s">documentation</a> before changing any settings.
requite_db_desc = Gitea requires MySQL, PostgreSQL, MSSQL, SQLite3 or TiDB.
db_title = Database Settings
db_type = Database Type
@ -213,7 +213,7 @@ send_reset_mail = Click here to resend your password reset email
reset_password = Reset Your Password
invalid_code = Your confirmation code is invalid or has expired.
reset_password_helper = Click here to reset your password
password_too_short = Password length cannot be less then %d.
password_too_short = Password length cannot be less than %d characters.
non_local_account = Non-local users can not update their password through the Gitea web interface.
verify = Verify
scratch_code = Scratch code
@ -495,7 +495,7 @@ visibility = Visibility
visibility_helper = Make Repository Private
visibility_helper_forced = Your site administrator forces new repositories to be private.
visibility_fork_helper = (Changing this will affect all forks.)
clone_helper = Need help cloning? Visit <a target="_blank" rel="noopener" href="%s">Help</a>.
clone_helper = Need help cloning? Visit <a target="_blank" rel="noopener noreferrer" href="%s">Help</a>.
fork_repo = Fork Repository
fork_from = Fork From
fork_visibility_helper = The visibility of a forked repository cannot be changed.
@ -613,7 +613,7 @@ editor.directory_is_a_file = Directory name '%s' is already used as a filename i
editor.file_is_a_symlink = '%s' is a symbolic link. Symbolic links cannot be edited in the web editor
editor.filename_is_a_directory = Filename '%s' is already used as a directory name in this repository.
editor.file_editing_no_longer_exists = The file being edited, '%s', no longer exists in this repository.
editor.file_changed_while_editing = The file contents have changed since you started editing. <a target="_blank" rel="noopener" href="%s">Click here</a> to see them or <strong>Commit Changes again</strong> to overwrite them.
editor.file_changed_while_editing = The file contents have changed since you started editing. <a target="_blank" rel="noopener noreferrer" href="%s">Click here</a> to see them or <strong>Commit Changes again</strong> to overwrite them.
editor.file_already_exists = A file named '%s' already exists in this repository.
editor.no_changes_to_show = There are no changes to show.
editor.fail_to_update_file = Failed to update/create file '%s' with error: %v
@ -994,7 +994,7 @@ settings.search_user_placeholder = Search user…
settings.org_not_allowed_to_be_collaborator = Organizations cannot be added as a collaborator.
settings.user_is_org_member = The user is an organization member who cannot be added as a collaborator.
settings.add_webhook = Add Webhook
settings.hooks_desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Read more in the <a target="_blank" rel="noopener" href="%s">webhooks guide</a>.
settings.hooks_desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Read more in the <a target="_blank" rel="noopener noreferrer" href="%s">webhooks guide</a>.
settings.webhook_deletion = Remove Webhook
settings.webhook_deletion_desc = Removing a webhook deletes its settings and delivery history. Continue?
settings.webhook_deletion_success = The webhook has been removed.
@ -1011,7 +1011,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 = Gitea will send <code>POST</code> requests with a specified content type to the target URL. Read more in the <a target="_blank" rel="noopener" href="%s">webhooks guide</a>.
settings.add_webhook_desc = Gitea will send <code>POST</code> requests with a specified content type to the target URL. Read more in the <a target="_blank" rel="noopener noreferrer" href="%s">webhooks guide</a>.
settings.payload_url = Target URL
settings.content_type = POST Content Type
settings.secret = Secret
@ -1167,6 +1167,8 @@ branch.protected_deletion_failed = Branch '%s' is protected. It cannot be delete
topic.manage_topics = Manage Topics
topic.done = Done
topic.count_prompt = You can't select more than 25 topics
topic.format_prompt = Topics must start with a letter or number, can include hyphens(-) and must be no more than 35 characters long
[org]
org_name_holder = Organization Name
@ -1271,8 +1273,8 @@ dashboard.operation_switch = Switch
dashboard.operation_run = Run
dashboard.clean_unbind_oauth = Clean unbound OAuth connections
dashboard.clean_unbind_oauth_success = All unbound OAuth connections have been deleted.
dashboard.delete_inactivate_accounts = Delete all inactive accounts
dashboard.delete_inactivate_accounts_success = All inactive accounts have been deleted.
dashboard.delete_inactivate_accounts = Delete all not activated accounts
dashboard.delete_inactivate_accounts_success = All not activated accounts have been deleted.
dashboard.delete_repo_archives = Delete all repository archives
dashboard.delete_repo_archives_success = All repository archives have been deleted.
dashboard.delete_missing_repos = Delete all repositories missing their Git files
@ -1475,9 +1477,7 @@ config.db_host = Host
config.db_name = Name
config.db_user = Username
config.db_ssl_mode = SSL
config.db_ssl_mode_helper = (for "postgres" only)
config.db_path = Path
config.db_path_helper = (for "sqlite3" and "tidb")
config.service_config = Service Configuration
config.register_email_confirm = Require Email Confirmation to Register

View File

@ -1,11 +1,15 @@
app_desc=Un servicio de Git auto alojado y sin complicaciones
home=Inicio
dashboard=Panel de control
explore=Explorar
help=Ayuda
sign_in=Iniciar sesión
sign_in_with=Iniciar sesión con
sign_out=Cerrar sesión
sign_up=Registro
link_account=Vincular Cuenta
link_account_signin_or_signup=Inicia sesión con credenciales existentes para vincular tu cuenta a esta cuenta. O registra una nueva.
register=Registro
website=Página web
version=Versión
@ -13,12 +17,27 @@ page=Página
template=Plantilla
language=Idioma
notifications=Notificaciones
create_new=Crear…
user_profile_and_more=Perfil y ajustes…
signed_in_as=Identificado como
enable_javascript=Este sitio web funciona mejor con JavaScript.
username=Nombre de usuario
email=Correo electrónico
password=Contraseña
re_type=Vuelva a escribir la contraseña
captcha=CAPTCHA
twofa=Autenticación de dos factores
passcode=Contraseña
u2f_insert_key=Inserte su clave de seguridad
u2f_use_twofa=Use un código de dos factores de su celular
u2f_error=No podemos leer su llave de seguridad!
u2f_unsupported_browser=Su navegador no soporta llaves U2F. Por favor utilicé otro navegador.
u2f_error_1=Un error desconocido ha ocurrido. Por favor vuelva a intentarlo.
u2f_error_2=Por favor asegúrese de que está utilizando una conexión cifrada (https://) y que esta visitando la dirección URL correcta.
u2f_error_3=El servidor no pudo procesar su petición.
u2f_reload=Recargar
repository=Repositorio
organization=Organización
@ -31,6 +50,9 @@ new_org=Nueva organización
manage_org=Administrar organizaciones
account_settings=Configuraciones de la cuenta
settings=Configuraciones
your_profile=Perfil
your_starred=Destacado
your_settings=Configuración
all=Todos
sources=Fuentes
@ -46,29 +68,63 @@ cancel=Cancelar
[install]
install=Instalación
title=Configuración inicial
requite_db_desc=Gitea requiere una base de datos MySQL, PostgreSQL, MSSQL, SQLite3 o TiDB.
db_title=Configuración de base de datos
db_type=Tipo de base de datos
host=Servidor
user=Nombre de usuario
password=Contraseña
db_name=Nombre de la base de datos
db_helper=Nota para usuarios de la base de datos MySQL: por favor use el motor InnoDB y el esquema de caracteres 'utf8_general_ci'.
ssl_mode=SSL
path=Ruta
general_title=Configuración general
app_name=Título del Sitio
app_name_helper=Puedes colocar aquí el nombre de tu empresa.
repo_path=Ruta del repositorio de Raiz (Root)
run_user=Ejecutar como usuario
domain=Dominio del servidor SSH
log_root_path=Ruta del registro
optional_title=Configuración opcional
email_title=Configuración de Correo
smtp_host=Servidor SMTP
mailer_user=Nombre de usuario SMTP
mailer_password=Contraseña SMTP
offline_mode=Habilitar autenticación Local
disable_gravatar=Desactivar Gravatar
federated_avatar_lookup_popup=Habilitar búsqueda de avatares federador para usar el servicio federado de código abierto basado en libravatar.
enable_captcha=Activar CAPTCHA
enable_captcha_popup=Requerir CAPTCHA para auto-registro de usuario.
require_sign_in_view=Debes iniciar sesión para ver las páginas
admin_password=Contraseña
confirm_password=Confirmar Contraseña
admin_email=Correo electrónico
install_btn_confirm=Instalar Gitea
test_git_failed=Fallo al probar el comando 'git': %v
invalid_db_setting=La configuración de la base de datos no es válida: %v
invalid_repo_path=La ruta de la raíz del repositorio no es válida: %v
run_user_not_match=El nombre de usuario 'ejecutar como' no es el nombre actual de usuario: %s -> %s
save_config_failed=Error al guardar la configuración: %v
invalid_admin_setting=La configuración de la cuenta de administración no es válida: %v
install_success=¡Bienvenido! Gracias por elegir Gitea. ¡Diviértete y cuidate!
invalid_log_root_path=La ruta para los registros no es válida: %v
default_keep_email_private=Ocultar direcciones de correo electrónico por defecto
default_keep_email_private_popup=Ocultar direcciones de correo electrónico de nuevas cuentas de usuario por defecto.
default_allow_create_organization=Permitir la creación de organizaciones por defecto
default_allow_create_organization_popup=Permitir crear organizaciones a las nuevas cuentas de usuario de forma predeterminada.
default_enable_timetracking=Activar el seguimiento de tiempo por defecto
default_enable_timetracking_popup=Activar el seguimiento de tiempo para nuevos repositorios por defecto.
no_reply_address=Dominio de correos electrónicos ocultos
[home]
uname_holder=Nombre de usuario o correo electrónico
password_holder=Contraseña
switch_dashboard_context=Cambiar el contexto del Dashboard
my_repos=Repositorios
show_more_repos=Mostrar más repositorios…
collaborative_repos=Repositorios colaborativos
my_orgs=Mis organizaciones
my_mirrors=Mis réplicas
@ -81,29 +137,46 @@ repos=Repositorios
users=Usuarios
organizations=Organizaciones
search=Buscar
code=Código
repo_no_results=No se ha encontrado ningún repositorio coincidente.
user_no_results=No se ha encontrado ningún usuario coincidente.
org_no_results=No se ha encontrado ninguna organización coincidente.
code_no_results=No se ha encontrado código de fuente que coincida con su término de búsqueda.
code_search_results=Resultados de búsqueda para '%s'
[auth]
create_new_account=Registrar una cuenta
register_helper_msg=¿Ya tienes una cuenta? ¡Inicia sesión!
social_register_helper_msg=¿Ya tienes una cuenta? ¡Enlázala!
disable_register_prompt=Registro deshabilitado. Por favor, póngase en contacto con el administrador del sitio.
disable_register_mail=Correo electrónico de confirmación de registro deshabilitado.
remember_me=Recuérdame
forgot_password_title=He olvidado mi contraseña
forgot_password=¿Has olvidado tu contraseña?
sign_up_now=¿Necesitas una cuenta? Regístrate ahora.
confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a <b>%s</b>. Comprueba tu bandeja de entrada en las siguientes %s para completar el registro.
reset_password_mail_sent_prompt=Un correo de confirmación se ha enviado a <b>%s</b>. Comprueba tu bandeja de entrada en las siguientes %s para completar el reinicio de contraseña.
active_your_account=Activa tu cuenta
prohibit_login=Ingreso prohibido
prohibit_login_desc=Su cuenta tiene prohibido ingresar al sistema. Por favor contacte con el administrador del sistema.
resent_limit_prompt=Ya ha solicitado recientemente un correo de activación. Por favor, espere 3 minutos y vuelva a intentarlo.
has_unconfirmed_mail=Hola %s, tu correo electrónico (<b>%s</b>) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón.
resend_mail=Haz click aquí para reenviar tu correo electrónico de activación
email_not_associate=Esta dirección de correo electrónico no esta asociada a ninguna cuenta.
send_reset_mail=Haz clic aquí para reenviar tu email de restauración de contraseña
reset_password=Restablecer su contraseña
invalid_code=Su código de confirmación no es válido o ha caducado.
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 %d.
non_local_account=Los usuarios no locales no pueden actualizar su contraseña a través de la interfaz web de Gitea.
verify=Verificar
twofa_scratch_used=Ya has utilizado el código. Has sido redirigido a la página de configuración de dos factores poder remover la inscripción del dispositivo o generar un nuevo código.
twofa_scratch_token_incorrect=El código cero es incorrecto.
login_userpass=Iniciar sesión
login_openid=OpenID
openid_connect_submit=Conectar
openid_connect_title=Accede con una cuenta existente
openid_register_title=Crear una nueva cuenta
disable_forgot_password_mail=El restablecimiento de contraseña está desactivado. Por favor, contacte con el administrador del sitio.
[mail]
activate_account=Por favor, active su cuenta
@ -115,12 +188,14 @@ register_notify=¡Bienvenido a Gitea
[modal]
yes=
no=No
modify=Actualizar
[form]
UserName=Nombre de usuario
RepoName=Nombre del repositorio
Email=Dirección de correo electrónico
Password=Contraseña
Retype=Vuelva a escribir la contraseña
SSHTitle=Nombre de la Clave de SSH
HttpsUrl=URL HTTPS
PayloadUrl=URL de carga
@ -136,6 +211,7 @@ TreeName=Ruta del archivo
Content=Contenido
require_error=` no puede estar vacío.`
alpha_dash_error=` solo debe contener caracteres alfanuméricos, guiones medios ('-') y guiones bajos ('_').`
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.`
@ -143,7 +219,10 @@ email_error=` no es una dirección de correo válida.`
url_error=` no es una URL válida.`
include_error=` debe contener la subcadena '%s'.`
unknown_error=Error desconocido:
captcha_incorrect=El código CAPTCHA no es correcto.
password_not_match=Las contraseñas no coinciden.
username_been_taken=El nombre de usuario ya está en uso.
user_not_exist=Este usuario no existe.
auth_failed=Autenticación fallo: %v
@ -249,6 +328,7 @@ fork_from=Crear un Fork desde
repo_desc=Descripción
repo_lang=Idioma
license=Licencia
auto_init=Inicializar el repositorio (añade .gitignore, licencia y README)
create_repo=Crear repositorio
default_branch=Rama por defecto
mirror_prune=Purgar
@ -344,8 +424,8 @@ issues.label_templates.helper=Seleccionar un conjunto de etiquetas
issues.label_templates.fail_to_load_file=Error al cargar el archivo de plantilla de etiqueta '%s': %v
issues.add_label_at=añadida la etiqueta <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
issues.remove_label_at=eliminada la etiqueta <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
issues.add_milestone_at=`agregado esto al <b>%s</b> hito %s '
issues.change_milestone_at=` modificó el hito de <b>%s</b> to <b>%s</b> %s`
issues.add_milestone_at=`ha añadido esto al hito <b>%s</b> %s '
issues.change_milestone_at=`modificó el hito de <b>%s</b> a <b>%s</b> %s`
issues.remove_milestone_at=`eliminado esto del <b>%s</b> hito %s '
issues.deleted_milestone=`(eliminado)`
issues.self_assign_at=`auto asignado este %s`
@ -412,6 +492,8 @@ issues.attachment.open_tab='Haga clic para ver "%s" en una pestaña nueva'
issues.attachment.download=`Haga clic para descargar "%s"`
issues.subscribe=Suscribir
issues.unsubscribe=Desuscribirse
issues.start_tracking_short=Iniciar
issues.start_tracking_history=`ha empezado a trabajar %s`
issues.tracking_already_started='Ya has comenzado el tiempo de seguimiento en este <a href="%s">tema</a>!'
issues.add_time_hours=Horas
issues.add_time_minutes=Minutos
@ -462,6 +544,8 @@ wiki.page_already_exists=Ya existe una página con el mismo nombre.
wiki.pages=Páginas
wiki.last_updated=Última actualización %s
activity=Actividad
activity.period.filter_label=Periodo:
activity.period.daily=1 día
activity.period.halfweekly=3 días
activity.period.weekly=1 semana
@ -504,6 +588,7 @@ settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con e
settings.transfer=Transferir la propiedad
settings.delete=Eliminar este repositorio
settings.delete_notices_1=- Esta operación <strong>NO PUEDE</strong> revertirse.
settings.delete_notices_fork_1=Los forks de este repositorio serán independientes después de eliminarlo.
settings.transfer_owner=Nuevo Propietario
settings.add_webhook=Añadir Webhook
settings.webhook.test_delivery=Test de entrega
@ -532,6 +617,7 @@ settings.deploy_keys=Claves de Despliegue
settings.add_deploy_key=Añadir Clave de Despliegue
settings.title=Título
settings.deploy_key_content=Contenido
settings.protect_merge_whitelist_committers_desc=Permitir a los usuarios o equipos de la lista a fusionar peticiones pull dentro de esta rama.
settings.add_protected_branch=Activar protección
settings.delete_protected_branch=Desactivar protección
@ -575,6 +661,7 @@ branch.create_from=desde '%s'
branch.branch_already_exists=La rama '%s' ya existe en este repositorio.
branch.deleted_by=Eliminada por %s
topic.done=Hecho
[org]
org_name_holder=Nombre de la organización
@ -614,6 +701,7 @@ teams.join=Unirse
teams.leave=Abandonar
teams.read_access=Acceso de Lectura
teams.write_access=Acceso de Escritura
teams.admin_access_helper=Los miembros pueden hacer pull y push a los repositorios del equipo y añadir colaboradores a ellos.
teams.no_desc=Este equipo no tiene descripción
teams.settings=Configuración
teams.members=Miembros del equipo
@ -639,8 +727,7 @@ dashboard.operation_name=Nombre de la operación
dashboard.operation_switch=Interruptor
dashboard.operation_run=Ejecutar
dashboard.clean_unbind_oauth_success=Se han eliminado las conexiones de OAuth no vinculadas.
dashboard.delete_inactivate_accounts=Eliminar todas las cuentas inactivas
dashboard.delete_inactivate_accounts_success=Todas las cuentas inactivas han sido eliminadas.
dashboard.resync_all_sshkeys=Actualizar el archivo '.ssh/authorized_keys' con las claves SSH de Gitea (no es necesario para el servidor SSH incorporado).
dashboard.reinit_missing_repos=Reiniciar todos los repositorios Git faltantes de los que existen registros
dashboard.reinit_missing_repos_success=Todos los repositorios Git faltantes para los que existen registros se han reinicializado.
dashboard.server_uptime=Tiempo de actividad del servidor
@ -741,9 +828,7 @@ config.ssh_minimum_key_sizes=Tamaños de clave mínimos
config.db_config=Configuración de la Base de Datos
config.db_type=Tipo
config.db_name=Nombre
config.db_ssl_mode_helper=(sólo para "postgres")
config.db_path=Ruta
config.db_path_helper=(para "sqlite3" y "tidb")
config.service_config=Configuración del servicio
config.show_registration_button=Mostrar Botón de Registro
@ -862,6 +947,7 @@ file_too_big=El tamaño del archivo ({{filesize}} MB) excede el tamaño máximo
remove_file=Eliminar archivo
[notification]
notifications=Notificaciones
unread=Sin leer
read=Leídas
mark_as_read=Marcar como leído

View File

@ -1,10 +1,15 @@
app_desc=Ongelmaton, itsehostattu Git-palvelu
home=Etusivu
dashboard=Kojelauta
explore=Tutki
help=Apua
sign_in=Kirjaudu sisään
sign_in_with=Kirjaudu sisään tunnuksilla
sign_out=Kirjaudu ulos
sign_up=Rekisteröidy
link_account=Yhdistä tili
link_account_signin_or_signup=Kirjaudu sisään olemassaolevilla tunnuksilla yhdistääksesi tilisi käyttäjätunnukseen. Tai rekisteröi uusi käyttäjätunnus.
register=Rekisteröidy
website=Nettisivut
version=Versio
@ -12,10 +17,18 @@ page=Sivu
template=Malli
language=Kieli
notifications=Ilmoitukset
create_new=Luo…
user_profile_and_more=Profiili ja asetukset…
signed_in_as=Kirjautuneena käyttäjänä
enable_javascript=Tämä sivusto toimii paremmin JavaScriptillä.
username=Käyttäjätunnus
email=Sähköpostiosoite
password=Salasana
re_type=Kirjoita salasana uudelleen
captcha=CAPTCHA
twofa=Kaksivaiheinen todennus
twofa_scratch=Kaksivaiheinen kertakäyttöinen koodi
passcode=Tunnuskoodi
@ -25,11 +38,21 @@ mirror=Peili
new_repo=Uusi repo
new_migrate=Uusi migraatio
new_mirror=Uusi peilaus
new_fork=Uusi repositorio
new_org=Uusi organisaatio
manage_org=Ylläpidä organisaatioita
admin_panel=Sivuston ylläpito
account_settings=Tilin asetukset
settings=Asetukset
your_profile=Profiili
your_starred=Tähdelliset
your_settings=Asetukset
all=Kaikki
sources=Lähteet
mirrors=Peilit
collaborative=Yhteistyössä
forks=Haarat
activities=Toimet
pull_requests=Pull requestit
@ -39,19 +62,59 @@ cancel=Peruuta
[install]
install=Asennus
title=Alkuperäiset asetukset
requite_db_desc=Gitea tarvitsee toimiakseen MySQL-, PostgreSQL-, MSSQL-, SQLite3 tai TiDB-tietokannan.
db_title=Tietokanta asetukset
db_type=Tietokanta tyyppi
host=Isäntä
user=Käyttäjätunnus
password=Salasana
db_name=Tietokannan nimi
db_helper=Huomio MySQL-käyttäjille: käytäthän InnoDB-kantamoottoria ja 'utf8_general_ci'-merkistöä.
ssl_mode=SSL
path=Polku
sqlite_helper=Tiedostopolku SQLite3- tai TiDB-tietokantaan.<br>Kirjoita absoluuttinen polku, jos ajat Giteaa palveluna.
err_empty_db_path=SQLite3- tai TiDB-tietokantapolku ei voi olla tyhjä.
err_invalid_tidb_name=TiDB-tietokannan nimi ei voi sisältää '.'- tai '-'-merkkejä.
no_admin_and_disable_registration=Et voi kytkeä rekisteröintiä pois luomatta sitä ennen ylläpitotiliä.
err_empty_admin_password=Ylläpitäjän salasana ei voi olla tyhjä.
general_title=Yleiset asetukset
app_name=Sivuston otsikko
repo_path=Repon juuren polku
repo_path_helper=Muualla olevat git-repositoriot tullaan tallentamaan tähän kansioon.
lfs_path=Git LFS -juuripolku
lfs_path_helper=Git LFS:n ylläpitämät tiedostot tullaan tallentamaan tähän hakemistoon. Jätä tyhjäksi kytkeäksesi toiminnon pois.
run_user=Aja käyttäjänä
run_user_helper=Anna käyttäjätunnus, jona Giteaa ajetaan. Käyttäjällä on oltava oikeudet repositorioiden juuripolkuun.
domain=SSH-palvelimen osoite (hostname)
domain_helper=Domain tai osoite SSH-klooniosoitteille.
ssh_port=SSH-palvelimen portti
ssh_port_helper=Porttinumero, jossa SSH-palvelimesi kuuntelee. Jätä tyhjäksi kytkeäksesi pois.
http_port=Gitean HTTP-kuunteluportti
http_port_helper=Portti, jossa Gitean web-palvelin kuuntelee.
app_url=Gitean juuriosoite
app_url_helper=Juuriosoite HTTP(S)-klooniosoitteille ja sähköpostimuistutuksille.
log_root_path=Lokin polku
log_root_path_helper=Lokitiedostot kirjoitetaan tähän kansioon.
optional_title=Valinnaiset asetukset
email_title=Sähköpostiasetukset
smtp_host=SMTP isäntä
smtp_from=Lähetä sähköpostit osoitteella
smtp_from_helper=Sähköpostiosoite, jota Gitea käyttää. Kirjoita osoite ”nimi” <email@example.com> -muodossa.
mailer_user=SMTP-käyttäjätunnus
mailer_password=SMTP-salasana
register_confirm=Vaadi sähköpostin vahvistaminen rekisteröintiin
mail_notify=Ota käyttöön sähköpostiilmoitukset
server_service_title=Palvelin ja kolmansien osapuolten palveluiden asetukset
offline_mode=Ota käyttöön lokaali tila
offline_mode_popup=Poista kolmannen osapuolen sisällöstä jakeluverkot ja tarjoa kaikki resurssit paikallisesti.
disable_gravatar=Poista Gravatar käytöstä
disable_gravatar_popup=Poista Gravatar ja kolmannen osapuolen avaratir käytöstä. Oletus-avatar näytetään, ellei käyttäjä ole ladannut omaansa.
federated_avatar_lookup=Käytä ulkopuolisia profiilikuvia
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
disable_registration=Poista rekisteröinti käytöstä
enable_captcha_popup=Pakollinen captcha käyttäjän itse rekisteröityessä.
admin_password=Salasana
confirm_password=Varmista salasana
@ -73,33 +136,69 @@ repos=Repot
users=Käyttäjät
organizations=Organisaatiot
search=Hae
code_no_results=Hakuehtoasi vastaavaa lähdekoodia ei löytynyt.
code_search_results=Hakutulokset: '%s '
[auth]
create_new_account=Rekisteröi tili
register_helper_msg=On jo tili? Kirjaudu sisään nyt!
social_register_helper_msg=Onko sinulla jo tili? Linkitä se nyt!
disable_register_prompt=Rekisteröinti on estetty. Ota yhteys ylläpitäjääsi.
disable_register_mail=Sähköpostivahvistus rekisteröinnille on estetty.
remember_me=Muista minut
forgot_password_title=Unohtuiko salasana
forgot_password=Unohtuiko salasana?
sign_up_now=Tarvitsetko tilin? Rekisteröidy nyt.
confirmation_mail_sent_prompt=Uusi varmistussähköposti on lähetetty osoitteeseen <b>%s</b>, ole hyvä ja tarkista saapuneet seuraavan %s tunnin sisällä saadaksesi rekisteröintiprosessin valmiiksi.
reset_password_mail_sent_prompt=Varmistussähköposti on lähetetty osoitteeseen <b>%s</b>, ole hyvä ja tarkista saapuneet seuraavan %s tunnin sisällä saadaksesi salasananvaihdon valmiiksi.
active_your_account=Aktivoi tilisi
prohibit_login=Kirjautuminen estetty
prohibit_login_desc=Käyttäjätilisi kirjautuminen on estetty. Ota yhteys sivuston ylläpitäjään.
resent_limit_prompt=Olet jo tilannut aktivointisähköpostin hetki sitten. Ole hyvä ja odota 3 minuuttia ja yritä sitten uudelleen.
has_unconfirmed_mail=Hei %s, sinulla on varmistamaton sähköposti osoite (<b>%s</b>). Jos et ole saanut varmistus sähköpostia tai tarvitset uudelleenlähetyksen, ole hyvä ja klikkaa allaolevaa painiketta.
resend_mail=Klikkaa tästä uudelleenlähettääksesi aktivointi sähköpostisi
email_not_associate=Tätä sähköpostiosoitetta ei ole liitetty mihinkään tiliin.
send_reset_mail=Klikkaa tästä (uudelleen) lähettääksesi salasanan nollaussähköpostin
reset_password=Nollaa salasanasi
invalid_code=Vahvistusavain on virheellinen tai vanhentunut.
reset_password_helper=Klikkaa tästä nollataksesi salasanasi
password_too_short=Salasanan pituus ei voi olla vähemmän kuin %d merkkiä.
non_local_account=Ei-lokaalit käyttäjät eivät voi päivittää salasanojaan Gitean web-käyttöliittymän kautta.
verify=Vahvista
scratch_code=Kertakäyttökoodi
use_scratch_code=Käytä kertakäyttökoodia
twofa_scratch_used=Olet käyttänyt kertakäyttökoodisi. Sinut on uudelleenohjattu kaksivaiheisen kirjautumisen asetussivulle, jotta voit kytkeä sen pois tai luoda uuden kertakäyttökoodin.
twofa_passcode_incorrect=Salasanasi on väärä. Jos olet hukannut laitteesi, käytäthän kertakäyttökoodia sisäänkirjautumiseen.
twofa_scratch_token_incorrect=Kertakäyttökoodisi on virheellinen.
login_userpass=Kirjaudu sisään
login_openid=OpenID
openid_connect_submit=Connect
openid_connect_title=Yhdistä olemassaolevaan tiliin
openid_connect_desc=Valittu OpenID-osoite on tuntematon. Liitä se uuteen tiliin täällä.
openid_register_title=Luo uusi tili
openid_register_desc=Valittu OpenID-osoite on tuntematon. Liitä se uuteen tiliin täällä.
openid_signin_desc=Anna OpenID-osoitteesi. Esimerkiksi: https://anne.me, bob.openid.org.cn tai gnusocial.net/carry.
disable_forgot_password_mail=Salasanan nollaus on estetty. Ota yhteys ylläpitäjääsi.
[mail]
activate_account=Ole hyvä ja aktivoi tilisi
activate_email=Vahvista sähköpostiosoitteesi
reset_password=Tyhjennä salasana
register_success=Rekisteröinti onnistui
register_notify=Tervetuloa Giteaan
[modal]
yes=Kyllä
no=Ei
modify=Päivitys
[form]
UserName=Käyttäjätunnus
RepoName=Repon nimi
Email=Sähköposti osoite
Password=Salasana
Retype=Kirjoita salasana uudelleen
SSHTitle=SSH avain nimi
HttpsUrl=HTTPS-osoite
TeamName=Tiimin nimi
AuthName=Luvan nimi
AdminEmail=Ylläpito sähköposti
@ -489,7 +588,6 @@ total=Yhteensä: %d
dashboard.operation_name=Toiminnon nimi
dashboard.operation_switch=Vaihda
dashboard.operation_run=Suorita
dashboard.delete_inactivate_accounts=Poista kaikki passiiviset tunnukset
dashboard.server_uptime=Palvelimen Uptime
dashboard.current_goroutine=Nykyiset Goroutinet
dashboard.current_memory_usage=Nykyinen muistinkäyttö
@ -585,9 +683,7 @@ config.db_config=Tietokannan asetukset
config.db_type=Tyyppi
config.db_host=Isäntä
config.db_name=Nimi
config.db_ssl_mode_helper=(vain "postgres")
config.db_path=Polku
config.db_path_helper=("sqlite3" ja "tidb")
config.service_config=Palvelu asetukset
config.show_registration_button=Näytä rekisteröidy painike

File diff suppressed because it is too large Load Diff

View File

@ -101,7 +101,6 @@ email_not_associate=Az email cím nincsen hozzárendelve egyetlen fiókhoz sem.
send_reset_mail=Kattints ide hogy újraküldd a jelszó visszaállító emailt
reset_password=Jelszó visszaállítása
reset_password_helper=Kattintson ide, hogy visszaállítsa a jelszavát
password_too_short=A jelszó nem lehet rövidebb, mint %d karakter.
verify=Ellenőrzés
scratch_code=Kaparós kód
use_scratch_code=Kaparós kód használata
@ -709,8 +708,6 @@ dashboard.operation_switch=Váltás
dashboard.operation_run=Futtatás
dashboard.clean_unbind_oauth=Megszüntetett OAuth kapcsolatok törlése
dashboard.clean_unbind_oauth_success=Az összes megszüntetett OAuth kapcsolat törölve.
dashboard.delete_inactivate_accounts=Minden inaktív fiók törlése
dashboard.delete_inactivate_accounts_success=Minden inaktív fiók törölve.
dashboard.reinit_missing_repos=Az összes Git tároló újra-inicializálása amihez léteznek bejegyzések
dashboard.reinit_missing_repos_success=Az összes Git tároló amihez létezett bejegyzés újra lett iniciaizálva.
dashboard.sync_external_users=Külső felhasználói adatok szinkronizálása
@ -835,9 +832,7 @@ config.db_config=Adatbázis Konfiguráció
config.db_type=Típus
config.db_host=Kiszolgáló
config.db_name=Név
config.db_ssl_mode_helper=(csak "postgres"-nek)
config.db_path=Elérési út
config.db_path_helper=("sqlite3" és "tidb"-nek)
config.service_config=Szolgáltatás konfiguráció
config.show_registration_button=Regisztráció gomb megjelenítése

View File

@ -1,11 +1,15 @@
app_desc=Sebuah layanan Git hosting pribadi yang mudah
home=Beranda
dashboard=Dasbor
explore=Jelajahi
help=Bantuan
sign_in=Masuk
sign_in_with=Masuk Dengan
sign_out=Keluar
sign_up=Daftar
link_account=Tautan Akun
link_account_signin_or_signup=Masuk dengan kredensial yang ada untuk menautkan akun anda yang ada ke akun ini atau daftar akun yang baru.
register=Daftar
website=Situs Web
version=Versi
@ -13,12 +17,32 @@ page=Halaman
template=Contoh
language=Bahasa
notifications=Notifikasi
create_new=Buat…
user_profile_and_more=Profil dan Pengaturan…
signed_in_as=Masuk sebagai
enable_javascript=Situs web ini bekerja lebih baik dengan JavaScript.
username=Nama Pengguna
email=Alamat Email
password=Kata Sandi
re_type=Ketik Ulang Kata Sandi
captcha=CAPTCHA
twofa=Otentikasi Dua Faktor
twofa_scratch=Kode Awal Dua Faktor
passcode=Kode Akses
u2f_insert_key=Masukkan kunci keamanan anda
u2f_sign_in=Tekan tombol pada kunci keamanan anda. Jika anda tidak menemukan tombol, masukkan kembali.
u2f_press_button=Silahkan tekan tombol pada kunci keamanan anda…
u2f_use_twofa=Menggunakan kode dua faktor dari telepon anda
u2f_error=Kami tidak bisa membaca kunci keamanan anda!
u2f_unsupported_browser=Browser anda tidak mendukung kunci U2F. Silakan mencoba browser lain.
u2f_error_1=Terdapat kesalahan yang tidak diketahui. Mohon coba lagi.
u2f_error_2=Pastikan bahwa anda menggunakan koneksi terenkripsi (https://) dan mengunjungi URL yang benar.
u2f_error_3=Server tidak bisa melanjutkan permintaan anda.
u2f_error_4=Kunci tidak layak untuk permintaan ini. Jika Anda mencoba untuk mendaftarkanya, pastikan bahwa kunci sudah tidak terdaftar.
u2f_error_5=Timeout tercapai sebelum kunci anda bisa terbaca. Silahkan muat ulang untuk mencoba kembali.
u2f_reload=Muat Ulang
repository=Repositori
organization=Organisasi
@ -29,8 +53,12 @@ new_mirror=Duplikat Baru
new_fork=Fork Repositori Baru
new_org=Organisasi Baru
manage_org=Mengelola Organisasi
admin_panel=Administrasi Situs
account_settings=Pengaturan Akun
settings=Pengaturan
your_profile=Profil
your_starred=Dibintangi
your_settings=Pengaturan
all=Semua
sources=Sumber
@ -46,34 +74,85 @@ cancel=Batal
[install]
install=Pemasangan
title=Konfigurasi Awal
requite_db_desc=Gitea memerlukan MySQL, PostgreSQL, MSSQL, SQLite3 atau TiDB.
db_title=Pengaturan Basis Data
db_type=Tipe Basis Data
host=Host
user=Nama Pengguna
password=Kata Sandi
db_name=Nama Basis Data
db_helper=Catatan untuk pengguna MySQL: Gunakan mesin penyimpanan InnoDB dan karakter set 'utf8_general_ci'.
ssl_mode=SSL
path=Jalur
sqlite_helper=Path berkas untuk basis data SQLite3 atau TiDB.<br>Masukkan path absolut jika anda menjalankan Gitea sebagai layanan.
err_empty_db_path=Path basis data SQLite3 atau TiDB tidak boleh kosong.
err_invalid_tidb_name=Nama basis data TiDB tidak boleh berisi karakter '.' dan '-'.
no_admin_and_disable_registration=Anda tidak dapat menonaktifkan pendaftaran tanpa membuat akun admin.
err_empty_admin_password=Sandi administrator tidak boleh kosong.
general_title=Pengaturan Umum
app_name=Judul Situs
app_name_helper=Anda dapat memasukkan nama perusahaan anda di sini.
repo_path=Path Root Repositori
repo_path_helper=Repositori Git remote akan disimpan ke direktori ini.
lfs_path=Path Akar Git LFS
lfs_path_helper=Berkas yang tersimpan dengan Git LFS akan disimpan ke direktori ini. Biarkan kosong untuk menonaktifkan LFS.
run_user=Jalankan Sebagai Nama Pengguna
run_user_helper=Masukkan nama pengguna sistem operasi yang menjalankan Gitea. Perhatikan bahwa pengguna ini harus memiliki akses ke path akar dari repositori.
domain=SSH Server Domain
domain_helper=Alamat domain atau host untuk URL klon SSH.
ssh_port=Port Server SSH
ssh_port_helper=Nomor port server SSH anda. Biarkan kosong untuk menonaktifkan.
http_port=Port HTTP Gitea
http_port_helper=Nomor port web server dimana Gitea akan berjalan.
app_url=URL Dasar Gitea
app_url_helper=Alamat dasar untuk klon URL HTTP(S) dan pemberitahuan lewat surel.
log_root_path=Path Log
log_root_path_helper=Berkas log akan ditulis ke direktori ini.
optional_title=Pengaturan Opsional
email_title=Pengaturan Surel
smtp_host=Host SMTP
smtp_from=Kirim Surel sebagai
smtp_from_helper=Alamat surel Gitea akan digunakan. Masukkan alamat surel atau gunakan fomat "Nama" <email@example.com>.
mailer_user=Nama Pengguna SMTP
mailer_password=Sandi SMTP
register_confirm=Memerlukan Konfirmasi Surel Untuk Mendaftar
mail_notify=Aktifkan Pemberitahuan Surel
server_service_title=Server dan Pengaturan Layanan Pihak Ketiga
offline_mode=Aktifkan Mode Lokal
offline_mode_popup=Non-aktifkan jaringan pengiriman konten dari pihak ketiga dan layani semua sumber daya secara lokal.
disable_gravatar=Non-aktifkan Gravatar
federated_avatar_lookup_popup=Mengaktifkan pencarian avatar federasi menggunakan Libravatar.
openid_signin=Aktifkan Login OpenID
openid_signup=Aktifkan Pendaftaran OpenID
openid_signup_popup=Aktifkan pendaftaran berdasarkan OpenID.
enable_captcha=Aktifkan CAPTCHA
enable_captcha_popup=Membutukan CAPTCHA untuk pendaftaran.
require_sign_in_view=Anda Harus Login untuk Melihat Halaman
admin_title=Pengaturan Akun Admin
admin_name=Nama Pengguna Admin
admin_password=Kata sandi
confirm_password=Konfirmasi Kata Sandi
admin_email=Alamat Surel
install_btn_confirm=Memasang Gitea
test_git_failed=Tidak dapat menguji perintah 'git': %v
sqlite3_not_available=Gitea versi ini tidak mendukung SQLite3, Silahkan untuh versi biner resmi dari %s (bukan versi 'gobuild').
invalid_db_setting=Pengaturan basis data tidak valid: %v
save_config_failed=Gagal menyimpan konfigurasi: %v
[home]
uname_holder=Nama Pengguna atau Alamat Surel
password_holder=Kata Sandi
switch_dashboard_context=Alihkan Dasbor Konteks
my_repos=Repositori
show_more_repos=Tampilkan repositori lainnya…
collaborative_repos=Repositori Kolaboratif
my_orgs=Organisasi Saya
my_mirrors=Duplikat Saya
view_home=Lihat %s
search_repos=Cari repositori…
issues.in_your_repos=Dalam repositori anda
@ -82,9 +161,16 @@ repos=Repositori
users=Pengguna
organizations=Organisasi
search=Cari
code=Kode
repo_no_results=Tidak ditemukan repositori yang cocok.
org_no_results=Tidak ada organisasi yang cocok ditemukan.
code_no_results=Tidak ada kode sumber yang cocok dengan istilah yang anda cari.
code_search_results=Hasil pencarian untuk '%s'
[auth]
create_new_account=Daftar Akun
register_helper_msg=Sudah memiliki akun? Masuk sekarang!
social_register_helper_msg=Sudah memiliki akun? Hubungkan sekarang!
remember_me=Ingat Saya
forgot_password_title=Lupa Kata Sandi
forgot_password=Lupa kata sandi?
@ -97,7 +183,6 @@ email_not_associate=Alamat surel tidak terhubung dengan akun apapun.
send_reset_mail=Klik di sini untuk mengirim ulang surel pengaturan ulang kata sandi
reset_password=Atur Ulang Kata Sandi Anda
reset_password_helper=Klik di sini untuk mengatur ulang kata sandi anda
password_too_short=Panjang kata sandi tidak boleh kurang dari %d.
verify=Verifikasi
scratch_code=Kode coretan
use_scratch_code=Gunakan kode coretan
@ -307,14 +392,17 @@ file_permalink=Permalink
stored_lfs=Tersimpan dengan GIT LFS
editor.preview_changes=Tinjau Perubahan
editor.name_your_file=Nama berkas…
editor.or=atau
editor.commit_changes=Perubahan komitmen
editor.add_tmpl=Tambah '%s/<filename>'
editor.add=Menambah '%s'
editor.update=Memperbarui '%s'
editor.delete=Menghapus '%s'
editor.commit_message_desc=Tambahkan deskripsi opsional yang panjang…
editor.commit_directly_to_this_branch=Komitmen langsung ke <strong class="branch-name">%s</strong> cabang.
editor.create_new_branch=Membuat <strong>new branch</strong> untuk tarik komit ini mulai permintaan.
editor.new_branch_name_desc=Nama branch baru…
editor.cancel=Membatalkan
editor.branch_already_exists=Cabang '%s' sudah ada di repositori ini.
editor.no_changes_to_show=Tidak ada perubahan untuk ditampilkan.
@ -407,6 +495,7 @@ issues.edit=Sunting
issues.cancel=Batal
issues.save=Simpan
issues.label_title=Nama label
issues.label_description=Keterangan label
issues.label_color=Warna label
issues.label_count=%d label
issues.label_open_issues=%d masalah terbuka
@ -548,6 +637,7 @@ settings.transfer=Transfer Kepemilikan
settings.delete=Menghapus Repositori Ini
settings.delete_notices_1=- Operasi ini <strong>TIDAK BISA</strong> dibatalkan.
settings.transfer_owner=Pemilik Baru
settings.search_user_placeholder=Cari pengguna…
settings.add_webhook=Tambahkan Webhook
settings.webhook.test_delivery=Percobaan Pengiriman
settings.webhook.request=Permintaan
@ -585,6 +675,7 @@ settings.protected_branch_can_push_yes=Anda dapat mendorong
settings.protected_branch_can_push_no=Anda tidak dapat mendorong
settings.add_protected_branch=Aktifkan perlindungan
settings.delete_protected_branch=Nonaktifkan perlindungan
settings.choose_branch=Pilih branch…
diff.browse_source=Telusuri Sumber
diff.parent=orang tua
@ -613,6 +704,7 @@ release.title=Judul
release.content=Konten
release.write=Menulis
release.preview=Pratinjau
release.loading=Memuat…
release.cancel=Membatalkan
release.publish=Mempublikasikan Rilis
release.save_draft=Simpan Draft
@ -637,6 +729,8 @@ people=Orang
teams=Tim
lower_members=anggota
lower_repositories=repositori
create_new_team=Tim Baru
create_team=Buat Tim Baru
org_desc=Deskripsi
team_name=Nama tim
team_desc=Deskripsi
@ -673,6 +767,7 @@ teams.update_settings=Memperbarui pengaturan
teams.add_team_member=Tambahkan Anggota Tim
teams.delete_team_success=Tim sudah di hapus.
teams.repositories=Tim repositori
teams.search_repo_placeholder=Cari repositori…
teams.add_team_repository=Tambahkan Tim Repositori
teams.remove_repo=Menghapus
teams.add_nonexistent_repo=Repositori yang ingin Anda tambahkan tidak ada; Silahkan buat terlebih dahulu.
@ -693,11 +788,10 @@ dashboard.operation_switch=Beralih
dashboard.operation_run=Lari
dashboard.clean_unbind_oauth=Bersihkan koneksi OAuth yang tidak terikat
dashboard.clean_unbind_oauth_success=Semua koneksi OAuth yang tidak terikat telah dihapus.
dashboard.delete_inactivate_accounts=Hapus semua akun yang tidak aktif
dashboard.delete_inactivate_accounts_success=Semua akun yang tidak aktif telah dihapus.
dashboard.reinit_missing_repos=Menginstal kembali semua repositori Git yang hilang dimana ada catatan
dashboard.reinit_missing_repos_success=Semua repositori Git yang hilang yang catatannya dan telah diinisialisasi ulang.
dashboard.sync_external_users=Sinkronkan data pengguna eksternal
dashboard.git_fsck=Lakukan pemeriksaan kesehatan pada semua repositori
dashboard.server_uptime=Waktu tambahan server
dashboard.current_goroutine=Goroutin saat ini
dashboard.current_memory_usage=Penggunaan memori saat ini
@ -710,6 +804,8 @@ dashboard.heap_memory_idle=Tumpukan memori yang menganggur
dashboard.heap_memory_in_use=Tumpukan memori yang digunakan
dashboard.heap_memory_released=Tumpukan memori dirilis
dashboard.heap_objects=Benda tumpukan
dashboard.bootstrap_stack_usage=Penggunaan bootstrap Stack
dashboard.stack_memory_obtained=Memori Stack Didapat
dashboard.mspan_structures_usage=Penggunaan struktur MSpan
dashboard.mspan_structures_obtained=Struktur MSpan didapatkan
dashboard.mcache_structures_usage=Penggunaan struktur MCache
@ -726,6 +822,7 @@ dashboard.gc_times=Waktu GC
users.activated=Diaktifkan
users.admin=Pengelola
users.repos=Repo
users.created=Dibuat
users.edit=Edit
users.auth_source=Sumber Otentikasi
@ -796,20 +893,26 @@ config.disable_router_log=Menonaktifkan router log
config.run_mode=Jalankan mode
config.git_version=Versi Git
config.repo_root_path=Jalur akar repositori
config.lfs_root_path=Path Root LFS
config.static_file_root_path=Jalur akar berkas statis
config.script_type=Jenis skrip
config.reverse_auth_user=Mengembalikan pengguna otentikasi
config.ssh_config=Konfigurasi SSH
config.ssh_enabled=Aktif
config.ssh_port=Port
config.ssh_listen_port=Listen Port
config.ssh_root_path=Path Induk
config.ssh_key_test_path=Path Key Test
config.ssh_keygen_path=Path Keygen ('ssh-keygen')
config.ssh_minimum_key_size_check=Periksa ukuran kunci minimum
config.ssh_minimum_key_sizes=Ukuran kunci minimum
config.db_config=Konfigurasi basis data
config.db_type=Tipe
config.db_host=Host
config.db_name=Nama
config.db_ssl_mode_helper=(untuk "postgres" saja)
config.db_path=Jalur
config.db_path_helper=(untuk "sqlite3 dan "tidb")
config.service_config=Konfigurasi layanan
config.show_registration_button=Tampilkan tombol mendaftar

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,11 @@
app_desc=痛みのない、自己ホスト型の Git サービス
home=ホーム
dashboard=ダッシュボード
explore=エクスプローラ
help=ヘルプ
sign_in=サインイン
sign_in_with=サインインします。
sign_out=サインアウト
link_account=連携アカウント
register=登録
@ -101,7 +103,6 @@ email_not_associate=このEメールアドレスは、どのアカウントに
send_reset_mail=パスワードリセットメールを再送するにはここをクリックしてください
reset_password=パスワードリセット
reset_password_helper=パスワードをリセットするにはここをクリック
password_too_short=%d文字未満のパスワードは設定できません。
verify=確認
scratch_code=スクラッチコード
use_scratch_code=スクラッチコードを使う
@ -707,8 +708,6 @@ dashboard.operation_switch=スイッチ
dashboard.operation_run=実行
dashboard.clean_unbind_oauth=関連付けられていないOAuth接続を削除
dashboard.clean_unbind_oauth_success=すべての関連付けられていないOAuth接続は削除されました。
dashboard.delete_inactivate_accounts=非アクティブのアカウントをすべて削除
dashboard.delete_inactivate_accounts_success=すべての非アクティブなアカウントは削除されました。
dashboard.reinit_missing_repos=レコードが存在するが見当たらないすべてのGitリポジトリを再初期化する
dashboard.reinit_missing_repos_success=レコードが存在するが見当たらないすべてのGitリポジトリが再初期化されました。
dashboard.sync_external_users=外部ユーザーデータの同期
@ -833,9 +832,7 @@ config.db_config=データベースの構成
config.db_type=タイプ
config.db_host=ホスト
config.db_name=名前
config.db_ssl_mode_helper=(「postgres」のみ
config.db_path=パス
config.db_path_helper=("sqlite3"および"tidb"のみ)
config.service_config=サービスの構成
config.show_registration_button=登録ボタンを表示します。

View File

@ -97,7 +97,6 @@ email_not_associate=이 이메일 주소로 등록된 계정이 없습니다.
send_reset_mail=여기를 눌러 비밀번호 초기화 메일을 재전송
reset_password=비밀번호 초기화
reset_password_helper=이곳을 눌러 비밀번호를 재설정
password_too_short=비밀번호의 길이는 %d글자 미만일 수 없습니다.
verify=확인
scratch_code=스크래치 코드
use_scratch_code=스크래치 코드 사용
@ -592,7 +591,6 @@ total=총: %d
dashboard.operation_name=작업 명
dashboard.operation_switch=스위치
dashboard.operation_run=실행
dashboard.delete_inactivate_accounts=활성화되지 않은 모든 계정을 삭제합니다.
dashboard.server_uptime=서버를 켠 시간
dashboard.current_goroutine=현재 Go루틴
dashboard.current_memory_usage=현재 메모리 사용율
@ -687,9 +685,7 @@ config.db_config=데이터베이스 설정
config.db_type=유형
config.db_host=호스트
config.db_name=이름
config.db_ssl_mode_helper=("postgres" 전용)
config.db_path=경로
config.db_path_helper=("sqlite3" 및 "tidb"만)
config.service_config=서비스 설정
config.show_registration_button=등록 버튼을 표시

View File

@ -75,7 +75,6 @@ active_your_account=Aktyvinkite savo paskyrą
resend_mail=Spauskite čia norėdami persiųsti aktyvacijos laišką
reset_password=Atstatyti slaptažodį
reset_password_helper=Paspauskite čia norėdami pakeisti savo slaptažodį
password_too_short=Slaptažodis negali būti trumpesnis nei %d simbolių.
verify=Patikrinti
[mail]

File diff suppressed because it is too large Load Diff

View File

@ -61,11 +61,17 @@ smtp_host=SMTP-vert
admin_password=Passord
[home]
password_holder=Passord
[explore]
users=Brukere
[auth]
register_helper_msg=Har du allerede en konto? Logg inn nå!
remember_me=Husk meg
forgot_password_title=Glemt passord
forgot_password=Glemt passord?
[mail]

View File

@ -1,11 +1,15 @@
app_desc=Een eenvoudige, self-hosted Git service
home=Beginscherm
dashboard=Overzicht
explore=Verkennen
help=Help
sign_in=Inloggen
sign_in_with=Inloggen met
sign_out=Uitloggen
sign_up=Registreren
link_account=Account Koppelen
link_account_signin_or_signup=Login met een bestaande gebruikersnaam/wachtwoord om een bestaand account te koppelen aan dit account, of maak een nieuw account aan.
register=Registreren
website=Website
version=Versie
@ -14,12 +18,29 @@ template=Sjabloon
language=Taal
notifications=Meldingen
create_new=Maken…
user_profile_and_more=Profiel en instellingen…
signed_in_as=Aangemeld als
enable_javascript=Deze website werkt beter met JavaScript.
username=Gebruikersnaam
email=E-mail adres
password=Wachtwoord
re_type=Typ uw wachtwoord opnieuw in
captcha=CAPTCHA
twofa=Twee factor authenticatie
twofa_scratch=Eenmalige twee factor authenticatie code
passcode=PIN
u2f_insert_key=Uw beveiligingssleutel invoegen
u2f_sign_in=Druk op de knop op uw beveiligingssleutel. Als u een knop niet kunt vinden, deze opnieuw invoegen.
u2f_press_button=Druk op de knop op uw beveiligingssleutel…
u2f_use_twofa=Gebruik een twee-factor code van uw telefoon
u2f_error=Wij kunnen niet uw beveiligingssleutel lezen!
u2f_unsupported_browser=Uw browser geen ondersteund U2F keys. Probeer een andere browser.
u2f_error_1=Er is een onbekende fout opgetreden. Probeer het opnieuw.
u2f_error_2=Zorg voor een versleutelde verbinding (https://) en een bezoek aan de juiste URL.
u2f_error_3=De server kan uw aanvraag niet verhandelen.
u2f_reload=Herladen
repository=Repository
organization=Organisatie
@ -32,6 +53,8 @@ new_org=Nieuwe organisatie
manage_org=Beheer organisaties
account_settings=Accountinstellingen
settings=Instellingen
your_profile=Profiel
your_settings=Instellingen
all=Alles
sources=Bronnen
@ -47,21 +70,35 @@ cancel=Annuleren
[install]
install=Installatie
title=Initiële configuratie
requite_db_desc=Gitea vereist MySQL, PostgreSQL, MSSQL, SQLite3 of TiDB.
db_title=Database-instellingen
db_type=Database-type
host=Server
user=Gebruikersnaam
password=Wachtwoord
db_name=Database naam
ssl_mode=SSL
path=Pad
err_empty_db_path=Het SQLite3 of TiDB database pad mag niet leeg zijn.
err_empty_admin_password=Het administrator-wachtwoord mag niet leeg zijn.
general_title=Algemene Instellingen
repo_path=Repositories basis map
lfs_path=Git LFS root pad
app_url=Gitea base URL
log_root_path=Log-pad
optional_title=Optionele instellingen
email_title=E-mail instellingen
smtp_host=SMTP host
smtp_from=E-mails versturen als
mailer_user=SMTP gebruikersnaam
mailer_password=SMTP wachtwoord
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
openid_signin=OpenID-inloggen inschakelen
enable_captcha_popup=Vereis captcha validatie voor zelf-registratie van gebruiker.
admin_name=Admin gebruikersnaam
admin_password=Wachtwoord
confirm_password=Verifieer wachtwoord
install_btn_confirm=Installeer Gitea
@ -95,13 +132,14 @@ forgot_password=Wachtwoord vergeten?
confirmation_mail_sent_prompt=Een nieuwe bevestigingsmail is gestuurd naar <b>%s</b>. De mail moet binnen %s worden bevestigd om je registratie te voltooien.
reset_password_mail_sent_prompt=Een bevestigingsmail is gestuurd naar <b>%s</b>. De mail moet binnen %s worden bevestigd om wachtwoord reset proces te voltooien.
active_your_account=Activeer uw account
prohibit_login=Inloggen niet toegestaan
prohibit_login_desc=Je mag met dit account niet inloggen, neem contact op met de beheerder van de site.
has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (<b>%s</b>). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop.
resend_mail=Klik hier om uw activatie mail nog een keer te verzenden
email_not_associate=Dit emailadres is niet gekoppeld aan een account.
send_reset_mail=Klik hier om de wachtwoord reset mail (nogmaals) te versturen
reset_password=Reset uw wachtwoord
reset_password_helper=Klik hier om uw wachtwoord opnieuw in te stellen.
password_too_short=De lengte van uw wachtwoord moet minimaal %d karakters zijn.
verify=Verifiëren
scratch_code=Eenmalige code
use_scratch_code=Gebruik een eenmalige code
@ -151,6 +189,8 @@ url_error=is niet een valide URL.
include_error=` moet substring '%s' bevatten.`
unknown_error=Onbekende fout:
username_been_taken=Deze naam is al in gebruik.
username_password_incorrect=Gebruikersnaam of wachtwoord is onjuist.
user_not_exist=De gebruiker bestaat niet.
auth_failed=Verificatie mislukt: %v
@ -187,6 +227,7 @@ website=Website
location=Locatie
update_profile=Profiel bijwerken
update_profile_success=Je profiel is bijgewerkt.
change_username=Je gebruikersnaam is gewijzigd.
continue=Doorgaan
cancel=Annuleren
@ -679,8 +720,6 @@ total=Totaal: %d
dashboard.operation_name=Bewerking naam
dashboard.operation_switch=Omschakelen
dashboard.operation_run=Uitvoeren
dashboard.delete_inactivate_accounts=Verwijder alle inactieve accounts
dashboard.delete_inactivate_accounts_success=Alle inactieve accounts zijn verwijderd.
dashboard.sync_external_users=Externe gebruikersgegevens synchroniseren
dashboard.server_uptime=Uptime server
dashboard.current_goroutine=Huidige Goroutines
@ -710,6 +749,7 @@ dashboard.total_gc_pause=Totaal GC verwerkingstijd
dashboard.last_gc_pause=Laatste GC verwerkingstijd
dashboard.gc_times=GC verwerkingen
users.name=Gebruikersnaam
users.activated=Geactiveerd
users.admin=Beheerder
users.repos=Repos
@ -784,9 +824,8 @@ config.db_config=Databaseconfiguratie
config.db_type=Type
config.db_host=Host
config.db_name=Naam
config.db_ssl_mode_helper=(alleen voor "postgres")
config.db_user=Gebruikersnaam
config.db_path=Pad
config.db_path_helper=(voor "sqlite3" en "tidb")
config.service_config=Serviceconfiguratie
config.show_registration_button=Registeren knop weergeven

View File

@ -1,10 +1,13 @@
app_desc=Bezbolesna usługa Git na własnym serwerze
home=Strona główna
dashboard=Pulpit
explore=Odkrywaj
help=Pomoc
sign_in=Zaloguj się
sign_in_with=Zaloguj się za pomocą
sign_out=Wyloguj
sign_up=Zarejestruj
link_account=Powiąż konto
register=Zarejestruj się
website=Strona
@ -13,12 +16,21 @@ page=Strona
template=Szablon
language=Język
notifications=Powiadomienia
create_new=Utwórz…
user_profile_and_more=Profil i ustawienia…
signed_in_as=Zalogowany jako
enable_javascript=Strona działa najlepiej z włączonym JavaScript.
username=Nazwa użytkownika
email=Adres e-mail
password=Hasło
re_type=Wpisz ponownie hasło
captcha=CAPTCHA
twofa=Autoryzacja dwuskładnikowa
twofa_scratch=Kod jednorazowy weryfikacji dwuetapowej
passcode=Kod dostępu
u2f_reload=Odśwież
repository=Repozytorium
organization=Organizacja
@ -29,8 +41,12 @@ new_mirror=Nowa kopia lustrzana
new_fork=Nowy fork repozytorium
new_org=Nowa organizacja
manage_org=Zarządzaj organizacjami
admin_panel=Administracja stron
account_settings=Ustawienia konta
settings=Ustawienia
your_profile=Profil
your_starred=Z gwiazdką
your_settings=Ustawienia
all=Wszystko
sources=Źródła
@ -46,34 +62,61 @@ cancel=Anuluj
[install]
install=Instalacja
title=Wstępna konfiguracja
db_title=Ustawienia bazy danych
db_type=Typ bazy danych
host=Serwer
user=Nazwa użytkownika
password=Hasło
db_name=Nazwa bazy danych
ssl_mode=SSL
path=Ścieżka
err_empty_db_path=Ścieżka do bazy danych SQLite3 lub TiDB nie może być pusta.
err_empty_admin_password=Hasło administratora nie może być puste.
general_title=Ustawienia ogólne
app_name=Tytuł witryny
app_name_helper=Wprowadź nazwę firmy.
repo_path=Katalog repozytoriów
lfs_path=Ścieżka główna Git LFS
run_user=Uruchom jako nazwa użytkownika
domain=Domena serwera SSH
ssh_port=Port serwera SSH
app_url=Podstawowy adres URL Gitea
log_root_path=Ścieżka dla logów
optional_title=Ustawienia opcjonalne
email_title=Ustawienia e-mail
smtp_host=Serwer SMTP
smtp_from=Wyślij e-mail jako
mailer_user=Nazwa użytkownika SMTP
mailer_password=Hasło SMTP
register_confirm=Wymagają potwierdzenia e-mail przy rejestracji
mail_notify=Włącz powiadomienia e-mail
disable_gravatar=Wyłącz Gravatar
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
disable_registration=Wyłącz rejestrację dwuskładnikową
openid_signin=Włącz logowanie za pomocą OpenID
enable_captcha=Włącz CAPTCHA
enable_captcha_popup=Wymagaj walidacji CAPTCHA przy samodzielnej rejestracji użytkownika.
admin_password=Hasło
confirm_password=Potwierdź hasło
admin_email=Adres e-mail
install_btn_confirm=Zainstaluj Gitea
test_git_failed=Nie udało się przetestować polecenia „git”: %v
save_config_failed=Nie udało się zapisać konfiguracji: %v
[home]
uname_holder=Nazwa użytkownika lub adres email
password_holder=Hasło
switch_dashboard_context=Przełącz kontekst pulpitu
my_repos=Repozytoria
show_more_repos=Pokaż więcej repozytoriów…
collaborative_repos=Wspólne repozytoria
my_orgs=Moje organizacje
my_mirrors=Moje kopie lustrzane
view_home=Zobacz %s
search_repos=Znajdź repozytorium…
issues.in_your_repos=W Twoich repozytoriach
@ -82,12 +125,20 @@ repos=Repozytoria
users=Użytkownicy
organizations=Organizacje
search=Wyszukiwanie
code=Kod
repo_no_results=Nie znaleziono pasujących repozytoriów.
user_no_results=Nie znaleziono pasującego użytkowników.
org_no_results=Nie znaleziono pasujących organizacji.
code_search_results=Wyniki wyszukiwania dla '%s'
[auth]
create_new_account=Zarejestruj konto
register_helper_msg=Masz już konto? Zaloguj się teraz!
social_register_helper_msg=Masz już konto? Powiąż je teraz!
remember_me=Zapamiętaj mnie
forgot_password_title=Zapomniałem hasła
forgot_password=Zapomniałeś hasła?
sign_up_now=Potrzebujesz konta? Zarejestruj się teraz.
confirmation_mail_sent_prompt=Nowy email aktywacyjny został wysłany na adres <b>%s</b>. Sprawdź swoją skrzynkę odbiorczą w ciągu %s aby zakończyć proces rejestracji.
reset_password_mail_sent_prompt=Email potwierdzający został wysłany na adres <b>%s</b>. Sprawdź swoją skrzynkę odbiorczą w ciągu %s aby zakończyć proces resetowania hasła.
active_your_account=Aktywuj swoje konto
@ -97,12 +148,12 @@ email_not_associate=Adres e-mail nie jest powiązany z żadnym kontem.
send_reset_mail=Kliknij tutaj, aby ponownie wysłać e-mail resetowania hasła
reset_password=Resetowanie hasła
reset_password_helper=Kliknij tutaj, aby zresetować hasło
password_too_short=Długość hasła nie może być mniejsza niż %d znaków.
verify=Potwierdź
scratch_code=Kod jednorazowy
use_scratch_code=Użyj kodu jednorazowego
twofa_scratch_used=Użyłeś/aś swojego kodu jednorazowego. Przekierowano Cię do strony z ustawieniami autoryzacji dwuetapowej, gdzie możesz usunąć swoje urządzenie lub wygenerować nowy kod jednorazowy.
twofa_scratch_token_incorrect=Twój kod jednorazowy jest niepoprawny.
login_userpass=Zaloguj się
login_openid=OpenID
openid_connect_submit=Połącz
openid_connect_title=Połącz z istniejącym kontem
@ -118,12 +169,14 @@ register_notify=Witamy w Gitea
[modal]
yes=Tak
no=Nie
modify=Aktualizuj
[form]
UserName=Nazwa użytkownika
RepoName=Nazwa repozytorium
Email=Adres e-mail
Password=Hasło
Retype=Wpisz ponownie hasło
SSHTitle=Nazwa klucza SSH
HttpsUrl=HTTPS URL
PayloadUrl=URL do wywołania
@ -146,7 +199,13 @@ email_error=` nie jest poprawnym adresem e-mail.`
url_error=` nie jest poprawnym adresem URL.`
include_error=`musi zawierać tekst '%s'.`
unknown_error=Nieznany błąd:
captcha_incorrect=Kod CAPTCHA jest nieprawidłowy.
password_not_match=Hasła nie są identyczne.
username_been_taken=Ta nazwa użytkownika jest już zajęta.
repo_name_been_taken=Nazwa repozytorium jest już zajęta.
org_name_been_taken=Nazwa organizacji jest już zajęta.
team_name_been_taken=Nazwa zespołu jest już zajęta.
user_not_exist=Użytkownik nie istnieje.
auth_failed=Uwierzytelnienie się nie powiodło: %v
@ -155,6 +214,7 @@ auth_failed=Uwierzytelnienie się nie powiodło: %v
target_branch_not_exist=Gałąź docelowa nie istnieje.
[user]
change_avatar=Zmień swój awatar…
join_on=Dołączył
repositories=Repozytoria
activity=Publiczna aktywność
@ -167,15 +227,21 @@ form.name_reserved=Nazwa użytkownika '%s' jest zarezerwowana.
[settings]
profile=Profil
account=Konto
password=Hasło
security=Bezpieczeństwo
avatar=Awatar
ssh_gpg_keys=Klucze SSH / GPG
social=Konta społecznościowe
applications=Aplikacje
orgs=Zarządzaj organizacjami
repos=Repozytoria
delete=Usuń konto
twofa=Autoryzacja dwuetapowa
account_link=Powiązane Konta
organization=Organizacje
uid=UID
u2f=Klucze bezpieczeństwa
public_profile=Profil publiczny
full_name=Imię i nazwisko
@ -183,20 +249,33 @@ website=Strona
location=Lokalizacja
update_profile=Zaktualizuj profil
update_profile_success=Twój profil został zaktualizowany.
change_username=Twój nick został zmieniony.
continue=Kontynuuj
cancel=Anuluj
language=Język
federated_avatar_lookup=Wyszukiwanie zewnętrznych awatarów
enable_custom_avatar=Włącz niestandardowe awatary
choose_new_avatar=Wybierz nowy avatar
update_avatar=Aktualizuj awatar
delete_current_avatar=Usuń obecny Avatar
uploaded_avatar_not_a_image=Załadowany plik nie jest obrazem.
update_avatar_success=Twój awatar został zmieniony.
change_password=Aktualizuj hasło
old_password=Aktualne hasło
new_password=Nowe hasło
retype_new_password=Powtórz nowe hasło
password_incorrect=Bieżące hasło nie jest prawidłowe.
emails=Adresy e-mail
manage_emails=Zarządzaj adresami e-mail
email_desc=Twój podstawowy adres e-mail będzie używany do powiadomień i innych działań.
primary=Podstawowy
delete_email=Usuń
email_deletion=Usuń adres email
add_new_email=Dodaj nowy e-mail
add_email=Dodaj adres e-mail
add_openid=Dodaj OpenID URI
manage_ssh_keys=Zarządzaj kluczami SSH
@ -210,6 +289,11 @@ subkeys=Podklucze
key_id=ID klucza
key_name=Nazwa klucza
key_content=Treść
delete_key=Usuń
ssh_key_deletion=Usuń klucz SSH
gpg_key_deletion=Usuń klucz GPG
ssh_key_deletion_success=Klucz SSH został usunięty.
gpg_key_deletion_success=Klucz GPG został usunięty.
add_on=Dodano
valid_until=Ważne do
valid_forever=Ważne bezterminowo
@ -221,8 +305,10 @@ key_state_desc=Ten klucz był użyty w ciągu ostatnich 7 dni
token_state_desc=Ten token był użyty w ciągu ostatnich 7 dni
show_openid=Pokaż w profilu
hide_openid=Ukryj w profilu
ssh_disabled=SSH jest wyłączony
manage_social=Zarządzaj powiązanymi kontami społecznościowymi
unbind=Rozłącz
generate_new_token=Wygeneruj nowy token
token_name=Nazwa tokena
@ -231,6 +317,7 @@ delete_token=Usuń
twofa_is_enrolled=Twoje konto ma obecnie <strong>włączoną</strong> autoryzację dwuetapową.
twofa_not_enrolled=Twoje konto obecnie nie ma włączonej autoryzacji dwuetapowej.
twofa_disable=Wyłącz weryfikację dwuetapową
twofa_disabled=Dwuetapowa autoryzacja została wyłączona.
scan_this_image=Zeskanuj ten obraz za pomocą swojej aplikacji uwierzytelniającej:
or_enter_secret=Lub wprowadź sekret: %s
@ -242,6 +329,7 @@ repos_none=Nie posiadasz żadnych repozytoriów
delete_account=Usuń swoje konto
confirm_delete_account=Potwierdź usunięcie
delete_account_title=Usuń swoje konto
[repo]
owner=Właściciel
@ -251,7 +339,10 @@ fork_repo=Sforkowane
fork_from=Forkuj z
repo_desc=Opis
repo_lang=Język
repo_gitignore_helper=Wybierz szablony pliku .gitignore.
license=Licencja
license_helper=Wybierz plik licencji.
readme=README
create_repo=Utwórz repozytorium
default_branch=Domyślna gałąź
mirror_prune=Wyczyść
@ -273,12 +364,14 @@ migrate.failed=Migracja nie powiodła się: %v
mirror_from=kopia lustrzana
forked_from=sklonowany z
copy_link=Kopiuj
copy_link_success=Link został skopiowany
copied=Skopiowano
unwatch=Przestań obserwować
watch=Obserwuj
unstar=Usuń gwiazdkę
star=Gwiazdka
fork=Forkuj
download_archive=Pobierz repozytorium
no_desc=Brak opisu
quick_guide=Skrócona instrukcja
@ -306,30 +399,45 @@ file_view_raw=Zobacz czysty
file_permalink=Bezpośredni odnośnik
stored_lfs=Przechowane za pomocą Git LFS
editor.new_file=Nowy plik
editor.upload_file=Wyślik plik
editor.edit_file=Edytuj plik
editor.preview_changes=Podgląd zmian
editor.edit_this_file=Edytuj plik
editor.delete_this_file=Usuń plik
editor.file_delete_success=Plik %s został usunięty.
editor.name_your_file=Nazwij plik…
editor.or=lub
editor.cancel_lower=Anuluj
editor.commit_changes=Zatwierdź zmiany
editor.add_tmpl=Dodaj '%s/<filename>'
editor.add=Dodaj '%s'
editor.update=Zaktualizuj '%s'
editor.delete=Usuń '%s'
editor.commit_message_desc=Dodaj dodatkowy rozszerzony opis…
editor.commit_directly_to_this_branch=Zmieniaj bezpośrednio gałąź <strong class="branch-name">%s</strong>.
editor.create_new_branch=Stwórz <strong>nową gałąź</strong> dla tego commita i rozpocznij pull request.
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.no_changes_to_show=Brak zmian do pokazania.
editor.fail_to_update_file=Tworzenie/aktualizacja pliku '%s' nie powiodła się z błędem: %v
editor.add_subdir=Dodaj katalog…
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.commits=Commity
commits.search=Przeszukaj commity…
commits.find=Szukaj
commits.search_all=Wszystkie gałęzie
commits.author=Autor
commits.message=Wiadomość
commits.date=Data
commits.older=Starsze
commits.newer=Nowsze
commits.signed_by=Podpisane przez
commits.gpg_key_id=ID klucza GPG
issues.new=Nowy problem
@ -344,6 +452,8 @@ issues.new.closed_milestone=Zamknięte kamienie milowe
issues.no_ref=Nie określono gałęzi/etykiety
issues.create=Utwórz problem
issues.new_label=Nowa etykieta
issues.new_label_placeholder=Nazwa etykiety
issues.new_label_desc_placeholder=Opis
issues.create_label=Utwórz etykietę
issues.label_templates.title=Załaduj wstępnie przygotowany zestaw etykiet
issues.label_templates.helper=Wybierz zestaw etykiet
@ -362,6 +472,7 @@ issues.delete_branch_at=`usunął gałąź <b>%s</b> %s`
issues.open_tab=Otwarte %d
issues.close_tab=Zamknięte %d
issues.filter_label=Etykieta
issues.filter_label_no_select=Wszystkie etykiety
issues.filter_milestone=Kamień milowy
issues.filter_assignee=Przypisany
issues.filter_type=Typ
@ -412,6 +523,8 @@ issues.label_count=Etykiety %d
issues.label_open_issues=Otwarte problemy %d
issues.label_edit=Edytuj
issues.label_delete=Usuń
issues.label_modify=Edytuj etykietę
issues.label_deletion=Usuń etykietę
issues.label.filter_sort.alphabetically=Alfabetycznie
issues.label.filter_sort.reverse_alphabetically=Alfabetycznie odwrotnie
issues.label.filter_sort.by_size=Rozmiar
@ -421,17 +534,20 @@ issues.attachment.open_tab=`Kliknij, aby zobaczyć „%s” w nowej karcie`
issues.attachment.download=`Kliknij, aby pobrać „%s”`
issues.subscribe=Subskrybuj
issues.unsubscribe=Anuluj subskrypcję
issues.tracker=Śledzenie czasu
issues.start_tracking_short=Rozpocznij
issues.start_tracking_history=`rozpoczął pracę nad %s`
issues.tracking_already_started=`Już śledzisz czas pracy nad tą <a href="%s">sprawą</a>!`
issues.stop_tracking=Zatrzymaj
issues.stop_tracking_history=`zakończył pracę nad %s`
issues.add_time_short=Dodaj czas
issues.add_time_cancel=Anuluj
issues.add_time_history=`dodano spędzony czas %s`
issues.add_time_hours=Godziny
issues.add_time_minutes=Minuty
issues.cancel_tracking=Anuluj
issues.cancel_tracking_history=`anulowanie śledzenie czasu %s`
issues.due_date_form=yyyy-mm-dd
pulls.new=Nowy pull request
pulls.filter_branch=Filtruj branch
@ -472,6 +588,7 @@ milestones.filter_sort.least_issues=Najmniej problemów
wiki=Wiki
wiki.page=Strona
wiki.filter_page=Filtruj stronę
wiki.new_page=Strona
wiki.default_commit_message=Opisz tę zmianę (opcjonalne).
wiki.save_page=Zapisz stronę
wiki.last_commit_info=%s edytuje tę stronę %s
@ -527,6 +644,7 @@ search.results=Wyniki wyszukiwania dla "%s" w <a href="%s">%s</a>
settings=Ustawienia
settings.desc=Ustawienia to miejsce, w którym możesz zmieniać parametry repozytorium
settings.options=Repozytorium
settings.collaboration.write=Zapis
settings.collaboration.read=Odczyt
settings.collaboration.undefined=Niezdefiniowany
@ -534,6 +652,8 @@ settings.hooks=Webhooki
settings.githooks=Hooki Git
settings.basic_settings=Ustawienia podstawowe
settings.mirror_settings=Kopia lustrzana ustawień
settings.sync_mirror=Synchronizuj teraz
settings.site=Strona
settings.update_settings=Aktualizuj ustawienia
settings.advanced_settings=Ustawienia zaawansowane
settings.external_wiki_url=Adres URL zewnętrznego Wiki
@ -547,11 +667,15 @@ settings.transfer=Przeniesienie własności
settings.delete=Usuń to repozytorium
settings.delete_notices_1=- Ta operacja <strong>NIE MOŻE</strong> zostać cofnięta.
settings.transfer_owner=Nowy właściciel
settings.confirm_delete=Usuń repozytorium
settings.delete_collaborator=Usuń
settings.search_user_placeholder=Szukaj użytkownika…
settings.add_webhook=Dodaj webhooka
settings.webhook.test_delivery=Testuj dostawę
settings.webhook.request=Żądanie
settings.webhook.response=Odpowiedź
settings.webhook.headers=Nagłówki
settings.webhook.payload=Zawartość
settings.webhook.body=Treść
settings.githook_edit_desc=Jeśli hook jest nieaktywny, zaprezentowana zostanie przykładowa treść. Pozostawienie pustej wartości wyłączy ten hook.
settings.githook_name=Nazwa hooka
@ -584,6 +708,7 @@ settings.protected_branch_can_push_yes=Możesz wysyłać
settings.protected_branch_can_push_no=Nie możesz wysyłać
settings.add_protected_branch=Włącz ochronę
settings.delete_protected_branch=Wyłącz ochronę
settings.choose_branch=Wybierz gałąź…
diff.browse_source=Przeglądaj źródła
diff.parent=rodzic
@ -612,6 +737,7 @@ release.title=Tytuł
release.content=Treść
release.write=Napisz
release.preview=Podgląd
release.loading=Ładowanie…
release.cancel=Anuluj
release.publish=Publikuj wersję
release.save_draft=Zapisz szkic
@ -626,6 +752,7 @@ branch.create_from=z '%s'
branch.branch_already_exists=Gałąź '%s' już istnieje w tym repozytorium.
branch.deleted_by=Usunięta przez %s
topic.done=Gotowe
[org]
org_name_holder=Nazwa organizacji
@ -636,12 +763,16 @@ people=Ludzie
teams=Zespoły
lower_members=członkowie
lower_repositories=repozytoria
create_new_team=Nowy zespół
create_team=Utwórz zespół
org_desc=Opis
team_name=Nazwa zespołu
team_desc=Opis
team_permission_desc=Uprawnienie
settings=Ustawienia
settings.options=Organizacja
settings.full_name=Imię i nazwisko
settings.website=Strona
settings.location=Lokalizacja
@ -650,9 +781,12 @@ settings.update_setting_success=Ustawienia organizacji zostały zaktualizowane.
settings.delete=Usuń organizację
settings.delete_account=Usuń tą organizację
settings.confirm_delete_account=Potwierdź usunięcie
settings.delete_org_title=Usuń organizację
settings.hooks_desc=Dodaj webhooki, uruchamiane dla <strong>wszystkich repozytoriów</strong> w tej organizacji.
members.membership_visibility=Widoczność członkostwa:
members.public=Widoczny
members.private=Ukryty
members.member_role=Rola:
members.owner=Właściciel
members.member=Członek
@ -669,15 +803,19 @@ teams.no_desc=Ten zespół nie ma opisu
teams.settings=Ustawienia
teams.members=Członkowie zespołu
teams.update_settings=Aktualizuj ustawienia
teams.delete_team=Usuń zespół
teams.add_team_member=Dodaj członka zespołu
teams.delete_team_title=Usuń zespół
teams.delete_team_success=Zespół został usunięty.
teams.repositories=Repozytoria zespołu
teams.search_repo_placeholder=Szukaj repozytorium…
teams.add_team_repository=Dodaj repozytorium zespołu
teams.remove_repo=Usuń
teams.add_nonexistent_repo=Repozytorium, które próbujesz dodać, nie istnieje. Proszę je najpierw utworzyć.
[admin]
dashboard=Pulpit
users=Konta użytkownika
organizations=Organizacje
repositories=Repozytoria
config=Konfiguracja
@ -687,13 +825,13 @@ first_page=Pierwsza
last_page=Ostatnia
total=Ogółem: %d
dashboard.statistic=Podsumowanie
dashboard.system_status=Status strony
dashboard.operation_name=Nazwa operacji
dashboard.operation_switch=Przełącz
dashboard.operation_run=Uruchom
dashboard.clean_unbind_oauth=Usuń wychodzące połączenia OAuth
dashboard.clean_unbind_oauth_success=Wszystkie połączenia wychodzące OAuth zostały usunięte.
dashboard.delete_inactivate_accounts=Usuń wszystkie nieaktywne konta
dashboard.delete_inactivate_accounts_success=Wszystkie nieaktywne konta zostały usunięte.
dashboard.reinit_missing_repos=Ponownie zainicjalizuj wszystkie brakujące repozytoria Git, dla których istnieją rekordy
dashboard.reinit_missing_repos_success=Wszystkie brakujące repozytoria Git, dla których istnieją rekordy, zostały zainicjalizowane.
dashboard.sync_external_users=Synchronizuj zewnętrzne dane użytkownika
@ -725,6 +863,7 @@ dashboard.total_gc_pause=Sumaryczny czas wstrzymania przez GC
dashboard.last_gc_pause=Ostatnie wstrzymanie przez GC
dashboard.gc_times=Ilość wywołań GC
users.name=Nazwa użytkownika
users.activated=Aktywowany
users.admin=Administrator
users.repos=Repozytoria
@ -732,11 +871,14 @@ users.created=Utworzony
users.edit=Edytuj
users.auth_source=Źródło uwierzytelniania
users.local=Lokalny
users.update_profile=Zaktualizuj konto użytkownika
users.delete_account=Usuń konto użytkownika
orgs.org_manage_panel=Zarządzanie organizacją
orgs.name=Nazwa
orgs.teams=Zespoły
orgs.members=Członkowie
orgs.new_orga=Nowa organizacja
repos.repo_manage_panel=Zarządzanie repozytoriami
repos.owner=Właściciel
@ -761,6 +903,7 @@ auths.bind_dn=DN powiązania
auths.bind_password=Hasło Bind
auths.user_base=Baza wyszukiwania
auths.user_dn=DN użytkownika
auths.search_page_size=Rozmiar strony
auths.filter=Filtr użytkownika
auths.admin_filter=Filtr administratora
auths.ms_ad_sa=Atrybuty wyszukiwania MS AD
@ -792,6 +935,8 @@ auths.new_success=Uwierzytelnienie '%s' zostało dodane.
auths.delete_auth_title=Usuń źródło uwierzytelniania
config.server_config=Konfiguracja serwera
config.app_name=Tytuł strony
config.app_ver=Wersja Gitea
config.custom_conf=Ścieżka do pliku konfiguracyjnego
config.disable_router_log=Wyłącz dziennik routera
config.run_mode=Tryb uruchamienia
@ -799,11 +944,13 @@ config.git_version=Wersja Git
config.repo_root_path=Ścieżka główna repozytoriów
config.lfs_root_path=Ścieżka główna katalogu LFS
config.static_file_root_path=Ścieżka główna plików statycznych
config.log_file_root_path=Ścieżka dla logów
config.script_type=Typ skryptu
config.reverse_auth_user=Użytkownik odwrotnego proxy
config.ssh_config=Konfiguracja SSH
config.ssh_enabled=Włączone
config.ssh_domain=Domena serwera
config.ssh_port=Port
config.ssh_listen_port=Port nasłuchiwania
config.ssh_root_path=Ścieżka do katalogu głównego
@ -816,13 +963,13 @@ config.db_config=Konfiguracja bazy danych
config.db_type=Typ
config.db_host=Serwer
config.db_name=Nazwa
config.db_ssl_mode_helper=(tylko dla „postgres”)
config.db_ssl_mode=SSL
config.db_path=Ścieżka
config.db_path_helper=(dla „sqlite3” i „tidb”)
config.service_config=Konfiguracja usługi
config.show_registration_button=Pokazuj przycisk rejestracji
config.disable_key_size_check=Wyłącz sprawdzanie minimalnego rozmiaru klucza
config.enable_captcha=Włącz CAPTCHA
config.active_code_lives=Ważność kodów aktywacyjnych
config.reset_password_code_lives=Czas wygaśnięcia kodu resetowania hasła

View File

@ -75,7 +75,6 @@ cancel=Cancelar
[install]
install=Instalação
title=Configuração inicial
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia a <a target="_blank" rel="noopener" href="%s">documentação</a> cuidadosamente antes de alterar qualquer coisa nesta página.
requite_db_desc=Gitea requer MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB.
db_title=Configurações de banco de dados
db_type=Tipo de banco de dados
@ -213,7 +212,7 @@ send_reset_mail=Clique aqui para re-enviar seu e-mail de redefinição de senha
reset_password=Redefinir sua senha
invalid_code=Seu código de confirmação é inválido ou expirou.
reset_password_helper=Clique aqui para redefinir sua senha
password_too_short=O comprimento da senha não pode ser menor que %d.
password_too_short=A senha deve ter %d ou mais caracteres.
non_local_account=Usuários não-locais não podem atualizar sua senha através da interface web do Gitea.
verify=Verificar
scratch_code=Código de backup
@ -495,7 +494,6 @@ visibility=Visibilidade
visiblity_helper=Tornar este repositório privado
visiblity_helper_forced=O administrador do site força novos repositórios a serem privados.
visiblity_fork_helper=(Esta alteração irá afetar todos os forks.)
clone_helper=Precisa de ajuda com o clone? Visite a <a target="_blank" rel="noopener" href="%s">Ajuda</a>.
fork_repo=Fork do repositório
fork_from=Fork de
fork_visiblity_helper=A visibilidade do fork de um repositório não pode ser alterada.
@ -613,7 +611,6 @@ editor.directory_is_a_file=O nome do diretório '%s' já é usado como um nome d
editor.file_is_a_symlink='%s' é um link simbólico. Links simbólicos não podem ser editados no editor da web
editor.filename_is_a_directory=O nome do arquivo '%s' já é usado como um nome de diretório neste repositório.
editor.file_editing_no_longer_exists=O arquivo que está sendo editado, '%s', não existe mais neste repositório.
editor.file_changed_while_editing=O conteúdo do arquivo mudou desde que você começou a editar. <a target="_blank" rel="noopener" href="%s">Clique aqui</a> para ver o que foi editado ou <strong>clique em Commit novamemente</strong> para sobreescrever essas mudanças.
editor.file_already_exists=Um arquivo com nome '%s' já existe neste repositório.
editor.no_changes_to_show=Nenhuma alteração a mostrar.
editor.fail_to_update_file=Houve erro ao criar ou atualizar arquivo '%s': %v
@ -994,7 +991,6 @@ settings.search_user_placeholder=Pesquisar usuário...
settings.org_not_allowed_to_be_collaborator=Organizações não podem ser adicionadas como um colaborador.
settings.user_is_org_member=O usuário é um membro da organização e não pode ser adicionado como um colaborador.
settings.add_webhook=Adicionar webhook
settings.hooks_desc=Webhooks automaticamente fazem requisições de HTTP POST para um servidor quando acionados determinados eventos de Gitea. Leia mais no <a target="_blank" rel="noopener" href="%s">guia de webhooks</a>.
settings.webhook_deletion=Remover webhook
settings.webhook_deletion_desc=A exclusão de um webhook exclui suas configurações e o histórico de entrega. Continuar?
settings.webhook_deletion_success=O webhook foi removido.
@ -1011,7 +1007,6 @@ settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo
settings.githook_name=Nome do Hook
settings.githook_content=Conteúdo do Hook
settings.update_githook=Atualizar Hook
settings.add_webhook_desc=Gitea enviará requisições <code>POST</code> com um tipo de conteúdo especificado para a URL de destino. Leia mais no <a target="_blank" rel="noopener" href="%s">guia de webhooks</a>.
settings.payload_url=URL de destino
settings.content_type=Tipo de conteúdo POST
settings.secret=Senha
@ -1167,6 +1162,8 @@ branch.protected_deletion_failed=A branch '%s' está protegida. Ela não pode se
topic.manage_topics=Gerenciar Tópicos
topic.done=Feito
topic.count_prompt=Você não pode selecionar mais de 25 tópicos
topic.format_prompt=Tópicos devem começar com uma letra ou um número, podem incluir hífens (-) e não devem ter mais de 35 caracteres
[org]
org_name_holder=Nome da organização
@ -1271,8 +1268,6 @@ dashboard.operation_switch=Trocar
dashboard.operation_run=Executar
dashboard.clean_unbind_oauth=Limpar conexões OAuth não vinculadas
dashboard.clean_unbind_oauth_success=Todas as conexões de OAuth não vinculadas foram excluídas.
dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
dashboard.delete_inactivate_accounts_success=Todas as contas inativas foram excluídas.
dashboard.delete_repo_archives=Excluir todos os arquivos do repositório
dashboard.delete_repo_archives_success=Todos os arquivos do repositório foram excluídos.
dashboard.delete_missing_repos=Excluir todos os repositórios que não possuem seus arquivos Git
@ -1475,9 +1470,7 @@ config.db_host=Servidor
config.db_name=Nome
config.db_user=Nome de usuário
config.db_ssl_mode=SSL
config.db_ssl_mode_helper=(apenas para "postgres")
config.db_path=Caminho
config.db_path_helper=(para "sqlite3" e "tidb")
config.service_config=Configuração do serviço
config.register_email_confirm=Exigir confirmação de e-mail para se cadastrar

File diff suppressed because it is too large Load Diff

View File

@ -79,7 +79,6 @@ has_unconfirmed_mail=Здраво, %s! Имате непотврђену адр
resend_mail=Кликните овде да поново пошаљете писмо
reset_password=Ресет лозинке
reset_password_helper=Кликните овде да ресетујете вашу лозинку
password_too_short=Лозинка неможе бити краћа од %d карактера.
[mail]
activate_account=Молимо вас активирајте ваш налог
@ -507,7 +506,6 @@ total=Укупно: %d
dashboard.operation_name=Име операције
dashboard.operation_switch=Пребаци
dashboard.operation_run=Покрени
dashboard.delete_inactivate_accounts=Уклони све неактивне налоге
dashboard.server_uptime=Време непрекидног рада сервера
dashboard.current_goroutine=Тренутнe Goroutine
dashboard.current_memory_usage=Тренутна употреба меморије
@ -601,9 +599,7 @@ config.db_config=Конфигурација базе података
config.db_type=Тип
config.db_host=Хост
config.db_name=Име
config.db_ssl_mode_helper=(само за postgres)
config.db_path=Пут
config.db_path_helper=(за "sqlite3" и "tidb")
config.service_config=Подешавања сервиса
config.show_registration_button=Прикажи дугме за регистрацију

View File

@ -1,11 +1,15 @@
app_desc=En smidig, självhostad Git-tjänst
home=Startsida
dashboard=Instrumentpanel
explore=Utforska
help=Hjälp
sign_in=Logga in
sign_in_with=Logga in med
sign_out=Logga ut
sign_up=Registrera
link_account=Länka konto
link_account_signin_or_signup=Logga in med befintliga inloggningsuppgifter för att länka samman det kontot till detta kontot. Eller registrera ett nytt.
register=Registrera dig
website=Webbplats
version=Version
@ -13,12 +17,32 @@ page=Sida
template=Mall
language=Språk
notifications=Notiser
create_new=Skapa…
user_profile_and_more=Profil och Inställningar…
signed_in_as=Inloggad som
enable_javascript=Denna sida fungerar bättre med Javascript igång.
username=Användarnamn
email=E-postadress
password=Lösenord
re_type=Upprepa lösenordet
captcha=CAPTCHA
twofa=Tvåfaktorsautentisering
twofa_scratch=Tvåfaktorsskrapkod
passcode=Kod
u2f_insert_key=Sätt i din säkerhetsnyckel
u2f_sign_in=Tryck på knappen på din säkerhetsnyckel. Om du inte kan hitta en knapp, dra ur och sätt i nyckeln igen.
u2f_press_button=Vänligen tryck på knappen på din säkerhetsnyckel…
u2f_use_twofa=Använd en tvåfaktorskod från din telefon
u2f_error=Vi kan inte läsa din säkerhetsnyckel!
u2f_unsupported_browser=Din webbläsare stödjer inte U2F-nycklar. Vänligen prova en annan webbläsare.
u2f_error_1=Ett okänt fel uppstod. Vänligen försök igen.
u2f_error_2=Kontrollera att du använder en krypterad anslutning (https://) och besöker korrekt länk.
u2f_error_3=Servern kunde inte hantera din förfrågan.
u2f_error_4=Den givna nyckeln är inte behörig för denna förfrågan. Om du försöker registrera den, se till att den inte redan är registrerad.
u2f_error_5=Timeout uppnådd innan nyckeln kunde bli läst. Vänligen ladda om sidan och för att försök igen.
u2f_reload=Ladda om
repository=Utvecklingskatalog
organization=Organisation
@ -29,8 +53,12 @@ new_mirror=Ny Spegling
new_fork=Ny förgrening av utvecklingskatalog
new_org=Ny organisation
manage_org=Hantera organisationer
admin_panel=Sidadministration
account_settings=Kontoinställningar
settings=inställningar
your_profile=Profil
your_starred=Stjärnmärkt
your_settings=Inställningar
all=Alla
sources=Källor
@ -46,14 +74,36 @@ cancel=Avbryt
[install]
install=Installation
title=Ursprunglig konfiguration
requite_db_desc=Gitea behöver MySQL, PostgreSQL, MSSQL, SQLite3 eller TiDB.
db_title=Databasinställningar
db_type=Databastyp
host=Server
user=Användarnamn
password=Lösenord
db_name=Databasens namn
db_helper=Notis för MySQL-användare: Använd InnoDB-lagringsmotorn och teckenuppsättning 'utf8_general_ci'.
ssl_mode=SSL
path=Filväg
sqlite_helper=Sökväg för SQLite3 eller TiDB databasen.<br>Ange en absolut sökväg om du kör Gitea som en systemtjänst.
err_empty_db_path=Sökvägen till SQLite3- eller TiDB-databasen kan inte vara tom.
err_invalid_tidb_name=TiDB-databases namn får inte innehålla '.'- eller '-'-tecken.
no_admin_and_disable_registration=Du kan inte inaktivera självregistrering utan att skapa ett administratörskonto.
err_empty_admin_password=Administratörslösenordet kan inte vara tomt.
general_title=Allmänna inställningar
app_name=Sajtens namn
app_name_helper=Du kan ange ditt företagsnamn här.
repo_path=Rotsökväg för utvecklingskatalog
repo_path_helper=Fjärrutvecklingskataloger kommer att sparas i denna katalog.
lfs_path=LFS Rotsökväg
lfs_path_helper=Filer hanterade av Git LFS kommer att sparas i denna mapp. Lämna tom för att avaktivera.
run_user=Kör som användarnamn
run_user_helper=Ange operativsystemets användarnamn som Gitea ska köras under. Denna användare måste ha tillgång till utvecklingskatalogens rotsökväg.
domain=SSH-Serverdomän
domain_helper=Domän- eller hostadress för SSH-kloningslänkar.
ssh_port=SSH-serverport
ssh_port_helper=Portnumret som din SSH-server lyssnar på. Lämna tom för att inaktivera.
log_root_path=Loggsökväg
optional_title=Övriga inställningar
@ -65,15 +115,32 @@ admin_password=Lösenord
confirm_password=Bekräfta lösenord
install_btn_confirm=Installera Gitea
test_git_failed=Misslyckades att testa 'git' kommando: %v
invalid_repo_path=Utvecklingskatalogens rotsökväg är ogiltig: %v
run_user_not_match=Systemtjänstanvändaren är inte den nuvarande användaren: %s -> %s
save_config_failed=Misslyckades att spara konfigurationen: %v
invalid_admin_setting=Inställning för administartörskontot är ogiltig: %v
install_success=Välkommen! Tack för att du valt Gitea. Ha det så roligt, väl mött!
invalid_log_root_path=Sökvägen för loggar är ogiltig: %v
default_keep_email_private=Dölj mailadresser som standard
default_keep_email_private_popup=Dölj mailadresser för nya användarkonton som standard.
default_allow_create_organization=Tillåt skapandet utav organisationer som standard
default_allow_create_organization_popup=Tillåt nya användarkonton att skapa organisationer som standard.
default_enable_timetracking=Aktivera tidredovisning som Standard
default_enable_timetracking_popup=Aktivera tidsredovisning för nya utvecklingskataloger som standard.
no_reply_address=Dold mejldomän
no_reply_address_helper=Domännamn för användare med en dold mailadress. Exempelvis kommer användarnamnet 'joe' att loggas i Git som 'joe@noreply.example.org' om dold maildomän är satt till 'noreply.example.org'.
[home]
uname_holder=Användarnamn eller Mejladress
password_holder=Lösenord
switch_dashboard_context=Växla Visad Instrumentpanel
my_repos=Utvecklingskataloger
show_more_repos=Visa flera utvecklingskataloger…
collaborative_repos=Kollaborativa Utvecklingskataloger
my_orgs=Mina organisationer
my_mirrors=Mina speglar
view_home=Visa %s
search_repos=Hitta en utvecklingskatalog…
issues.in_your_repos=I dina utvecklingskataloger
@ -82,9 +149,19 @@ repos=Utvecklingskataloger
users=Användare
organizations=Organisationer
search=Sök
code=Kod
repo_no_results=Inga matchande utvecklingskataloger hittades.
user_no_results=Inga matchande användare hittades.
org_no_results=Inga matchande organisationer hittades.
code_no_results=Ingen källkod hittades som matchar din sökterm.
code_search_results=Söktresultat för '%s'
[auth]
create_new_account=Registrera Konto
register_helper_msg=Har du redan ett konto? Logga in nu!
social_register_helper_msg=Har du redan ett konto? Länka det nu!
disable_register_prompt=Registrering inaktiverad. Vänligen kontakta din sidadministratör.
disable_register_mail=Bekräftelsemejl vid registrering är inaktiverad.
remember_me=Kom ihåg mig
forgot_password_title=Glömt lösenord
forgot_password=Glömt lösenord?
@ -97,12 +174,12 @@ email_not_associate=Denna e-postadress är inte knutet till något konto.
send_reset_mail=Klicka här för att skicka e-post med lösenordsåterställning igen
reset_password=Återställ ditt lösenord
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 %d tecken.
verify=Verifiera
scratch_code=Skrapkod
use_scratch_code=Använd en skrapkod
twofa_scratch_used=Du har använt din skrapkod. Du har blivit omdirigerad till tvåfaktorsinställningarna så att du kan ta bort din aktiverade enhet eller generera en ny skrapkod.
twofa_scratch_token_incorrect=Din skrapkod är ogiltlig.
login_userpass=Logga in
login_openid=OpenID
openid_connect_submit=Anslut
openid_connect_title=Anslut ett existerande konto
@ -147,6 +224,7 @@ url_error=Den givna URL-adressen är inte valid
include_error=` måste innehålla texten '%s'.`
unknown_error=Okänt fel:
repo_name_been_taken=Namnet för utvecklingskatalogen är upptaget.
user_not_exist=Användaren finns inte.
auth_failed=Autentisering misslyckades: %v
@ -155,26 +233,34 @@ auth_failed=Autentisering misslyckades: %v
target_branch_not_exist=Målgrenen finns inte.
[user]
change_avatar=Byt din avatar…
join_on=Gick med
repositories=Utvecklingskataloger
activity=Offentlig Aktivitet
followers=Följare
starred=Stjärnmärkta Utvecklingskataloger
following=Följer
follow=Följ
unfollow=Sluta följa
form.name_reserved=Användarnamnet '%s' är reserverat.
form.name_pattern_not_allowed=Mönstret '%s' är otillåtet i ett användarnamn.
[settings]
profile=Profil
account=Konto
password=Lösenord
security=Säkerhet
avatar=Visningsbild
ssh_gpg_keys=SSH / GPG-nycklar
social=Sociala konton
applications=Applikationer
orgs=Hantera Organisationer
repos=Utvecklingskataloger
delete=Radera konto
twofa=Tvåfaktorsautentisering
account_link=Länkade Konton
organization=Organisationer
uid=AnvändarID
public_profile=Offentlig profil
@ -341,13 +427,18 @@ issues.new.no_milestone=Ingen Milsten
issues.new.clear_milestone=Rensa milstenar
issues.new.open_milestone=Öppna Milstenar
issues.new.closed_milestone=Stängda Milstenar
issues.new.no_assignees=Ingen tilldelad
issues.no_ref=Ingen branch/Tag specificerad
issues.create=Skapa Ärende
issues.new_label=Ny etikett
issues.new_label_placeholder=Etikettsnamn
issues.new_label_desc_placeholder=Beskrivning
issues.create_label=Skapa Etikett
issues.label_templates.title=Ladda en fördefinierad uppsättning etiketter
issues.label_templates.helper=Markera en uppsättning etiketter
issues.label_templates.fail_to_load_file=Laddning av etikettmallen '%s' misslyckades: %v
issues.add_label_at=lade till etiketten <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
issues.remove_label_at=tog bort etiketten <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
issues.add_milestone_at=`lade till denna till milstolpe <b>%s</b> %s`
issues.change_milestone_at='modifierade milstolpen från <b>%s</b> till <b>%s</b> %s'
issues.remove_milestone_at='tog bort denna från milstolpen <b>%s</b> %s'
@ -374,6 +465,10 @@ issues.filter_sort.recentupdate=Nyligen uppdaterade
issues.filter_sort.leastupdate=Äldst uppdaterad
issues.filter_sort.mostcomment=Mest kommenterade
issues.filter_sort.leastcomment=Minst kommenterade
issues.filter_sort.moststars=Flest stjärnor
issues.filter_sort.feweststars=Minst stjärnor
issues.filter_sort.mostforks=Flest forks
issues.filter_sort.fewestforks=Minst forks
issues.action_open=Öppna
issues.action_close=Stäng
issues.action_label=Etikett
@ -392,7 +487,9 @@ issues.commented_at=`kommenterad <a href="#%s">%s</a>`
issues.delete_comment_confirm=Är du säker på att du vill ta bort den här kommentaren?
issues.no_content=Det finns inget innehåll än.
issues.close_issue=Stäng
issues.close_comment_issue=Kommentera och stäng
issues.reopen_issue=Återöppna
issues.reopen_comment_issue=Kommentera och återöppna
issues.create_comment=Kommentera
issues.closed_at=`stängde <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`återöppnade <a if="%[1]s" href="#%[1]s">%[2]s</a>`
@ -405,11 +502,16 @@ issues.edit=Redigera
issues.cancel=Avbryt
issues.save=Spara
issues.label_title=Etikettsnamn
issues.label_description=Etikettbeskrivning
issues.label_color=Etikettsfärg
issues.label_count=%d etiketter
issues.label_open_issues=%d öppna ärenden
issues.label_edit=Redigera
issues.label_delete=Radera
issues.label_modify=Redigera etikett
issues.label_deletion=Ta bort etikett
issues.label_deletion_desc=Bottagning av en etikett tar bort den från alla ärenden. Fortsätta?
issues.label_deletion_success=Etiketten har tagits bort.
issues.label.filter_sort.alphabetically=Alfabetiskt A-Ö
issues.label.filter_sort.reverse_alphabetically=Alfabetiskt Ö-A
issues.label.filter_sort.by_size=Storlek
@ -419,10 +521,21 @@ issues.attachment.open_tab=`Klicka för att se "%s" i en ny flik`
issues.attachment.download=`Klicka för att hämta "%s"`
issues.subscribe=Prenumerera
issues.unsubscribe=Avsluta prenumerationen
issues.tracker=Tidsredovisning
issues.start_tracking_short=Starta
issues.start_tracking=Starta tidsredovisning
issues.start_tracking_history=`började arbeta %s`
issues.tracking_already_started=`Du har redan påbörjat tidredovisning på detta <a href="%s"> ärende</a>!`
issues.stop_tracking=Stoppa
issues.stop_tracking_history=`slutade arbeta %s`
issues.add_time=Lägg till tid manuellt
issues.add_time_short=Lägg till tid
issues.add_time_cancel=Avbryt
issues.add_time_history=`la till tillbringad tid %s`
issues.add_time_hours=Timmar
issues.add_time_minutes=Minuter
issues.cancel_tracking=Avfärda
issues.cancel_tracking_history=”avbröt tidredovisning %s'
pulls.new=Ny Pull-Förfrågan
pulls.filter_branch=Filtrera gren
@ -432,9 +545,12 @@ pulls.title_desc=vill sammanfoga %[1]d incheckningar från <code>s[2]s</code> in
pulls.merged_title_desc=sammanfogade %[1]d incheckningar från <code>%[2]s</code> in i <code>%[3]s</code> %[4]s
pulls.tab_conversation=Konversation
pulls.tab_commits=Incheckningar
pulls.reopen_to_merge=Vänligen återöppna denna Pull-förfrågan igen för att utföra sammanfogningen.
pulls.merged=Sammanfogat
pulls.can_auto_merge_desc=Denna pull-förfrågan kan sammanfogas automatiskt.
pulls.merge_pull_request=Sammanfoga Pull-förfrågan
pulls.rebase_merge_pull_request=Rebase och sammanfogning
pulls.squash_merge_pull_request=Squasha och sammanfogning
milestones.new=Ny milstolpe
milestones.open_tab=%d Öppna
@ -471,14 +587,27 @@ wiki.page_already_exists=Wiki-sida med samma namn finns redan.
wiki.pages=Sidor
wiki.last_updated=Senast uppdaterad %s
activity=Aktiviteter
activity.period.filter_label=Period:
activity.period.daily=1 dag
activity.period.halfweekly=3 dagar
activity.period.weekly=1 vecka
activity.period.monthly=1 månad
activity.overview=Översikt
activity.active_prs_count_1=<strong>%d</strong> Aktiv Pull begäran
activity.active_prs_count_n=<strong>%d</strong> Aktiva Pull begärelser
activity.merged_prs_count_1=Sammanfogad Pull-förfrågan
activity.merged_prs_count_n=Sammanfogade Pull-förfrågningar
activity.opened_prs_count_1=Föreslagen Pull begäran
activity.opened_prs_count_n=Föreslagna Pull-begärelser
activity.title.user_1=%d användare
activity.title.user_n=%d användare
activity.title.prs_1=%d Pull-begäran
activity.title.prs_n=%d Pull begärelser
activity.title.prs_merged_by=%s sammanfogad av %s
activity.title.prs_opened_by=%s föreslås av %s
activity.merged_prs_label=Sammanfogad
activity.opened_prs_label=Föreslagen
activity.active_issues_count_1=<strong>%d</strong> Aktivt ärende
activity.active_issues_count_n=<strong>%d</strong> Aktiva ärenden
activity.closed_issues_count_1=Stängt ärende
@ -489,9 +618,20 @@ activity.title.issues_closed_by=%s stängd av %s
activity.title.issues_created_by=%s skapad av %s
activity.closed_issue_label=Stängd
activity.new_issues_count_1=Nytt ärende
activity.new_issues_count_n=Nya ärenden
activity.new_issue_label=Öppnad
activity.unresolved_conv_label=Öppna
activity.title.releases_1=%d release
activity.title.releases_n=%d releaser
activity.title.releases_published_by=%s publicerad av %s
activity.published_release_label=Publicerad
search=Sök
search.search_repo=Sök utvecklingskatalog
search.results=Sökresultat för ”%s” i <a href="%s"> %s</a>
settings=Inställningar
settings.desc=Inställningarna är där du kan hantera inställningar för utvecklingskatalogen
settings.collaboration.write=Skriva
settings.collaboration.read=Läsa
settings.collaboration.undefined=Odefinierad
@ -542,10 +682,18 @@ settings.deploy_keys=Driftsättningsnycklar
settings.add_deploy_key=Lägg till driftsättningsnyckel
settings.title=Titel
settings.deploy_key_content=Innehåll
settings.branches=Brancher
settings.protected_branch=Branchskydd
settings.protected_branch_can_push=Tillåt push?
settings.protected_branch_can_push_yes=Du kan pusha
settings.protected_branch_can_push_no=Du kan inte pusha
settings.add_protected_branch=Aktivera skydd
settings.delete_protected_branch=Inaktivera skydd
diff.browse_source=Bläddra i källkod
diff.parent=förälder
diff.commit=incheckning
diff.data_not_available=Diff Content ej tillgänglig
diff.show_diff_stats=Visa Diff Statistik
diff.show_split_view=Delad Vy
diff.show_unified_view=Unifierad Vy
@ -572,8 +720,16 @@ release.preview=Förhandsgranska
release.cancel=Avbryt
release.publish=Publicera Släpp
release.save_draft=Spara Utkast
release.deletion_success=Releasen har blivit raderad.
release.downloads=Nedladdningar
branch.search=Sök brancher
branch.delete_head=Radera
branch.delete_html=Radera branch
branch.create_branch=Skapa branchen <strong>%s</strong>
branch.create_from=från '%s'
branch.branch_already_exists=Branch '%s' existerar redan i denna utvecklingskatalog.
branch.deleted_by=Raderad av %s
[org]
@ -599,6 +755,7 @@ settings.update_setting_success=Organisationsinställningarna har uppdaterats.
settings.delete=Tag bort organisation
settings.delete_account=Tag bort denna organisation
settings.confirm_delete_account=Bekräfta borttagning
settings.hooks_desc=Lägg till webbhook som triggas för <strong>alla utvecklingskataloger</strong> under denna organisationen.
members.membership_visibility=Synlighet för medlemskap:
members.member_role=Medlemsroll:
@ -618,6 +775,7 @@ teams.settings=Inställningar
teams.members=Teammedlemmar
teams.update_settings=Uppdatera inställningar
teams.add_team_member=Lägg till teammedlem
teams.delete_team_success=Teamet har blivit borttaget.
teams.repositories=Teamförråd
teams.add_team_repository=Lägg till teamförråd
teams.remove_repo=Ta bort
@ -637,7 +795,11 @@ total=Totalt: %d
dashboard.operation_name=Operationsnamn
dashboard.operation_switch=Byt till
dashboard.operation_run=Kör
dashboard.delete_inactivate_accounts=Ta bort alla inaktiva konton
dashboard.clean_unbind_oauth=Rena obundna OAuth anslutningar
dashboard.clean_unbind_oauth_success=Alla obundna OAuth anslutningar har raderats.
dashboard.reinit_missing_repos=Återinitialisera alla saknade utvecklingskataloger som vi känner till
dashboard.reinit_missing_repos_success=Alla utvecklingskataloger som det saknades filer från har blivit återinitaliserade.
dashboard.sync_external_users=Synkronisera extern användardata
dashboard.server_uptime=Serverns upptid
dashboard.current_goroutine=Aktuella Goroutiner
dashboard.current_memory_usage=Nuvarande Minnesanvändning
@ -656,6 +818,7 @@ dashboard.mspan_structures_usage=MSpan strukturanvändning
dashboard.mspan_structures_obtained=MSpan strukturer som erhållits
dashboard.mcache_structures_usage=MCache strukturanvändning
dashboard.mcache_structures_obtained=MCache-strukturer som erhållits
dashboard.profiling_bucket_hash_table_obtained=Profilering av Bucket Hash Table erhållen
dashboard.gc_metadata_obtained=Metainformation om Skräpsamlaren Ihopsamlad
dashboard.other_system_allocation_obtained=Övriga Systemallokeringar
dashboard.next_gc_recycle=Nästa Skräpsamlarrunda
@ -678,6 +841,7 @@ orgs.name=Namn
orgs.teams=Team
orgs.members=Medlemmar
repos.repo_manage_panel=Utvecklingskatalogshantering
repos.owner=Ägare
repos.name=Namn
repos.private=Privat
@ -695,11 +859,14 @@ auths.auth_name=Autentiseringsnamn
auths.security_protocol=Säkerhetsprotokoll
auths.domain=Domän
auths.host=Värd
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_password=Bind Lösenord
auths.user_base=Användarsökbas
auths.user_dn=Användarnas DN
auths.filter=Användarfilter
auths.admin_filter=Administratörsfilter
auths.ms_ad_sa=MS AD sökattribut
auths.smtp_auth=SMTP Autentiseringstyp
auths.smtphost=SMTP-server
auths.smtpport=SMTP-port
@ -707,26 +874,41 @@ auths.allowed_domains=Tillåtna Domäner
auths.enable_tls=Aktivera TLS-kryptering
auths.skip_tls_verify=Skippa verifikation av TLS
auths.pam_service_name=PAM Tjänstnamn
auths.oauth2_provider=OAuth2 leverantör
auths.oauth2_clientID=Klient ID (Nyckel)
auths.oauth2_clientSecret=Klienthemlighet
auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery länk
auths.oauth2_tokenURL=Tokenlänk
auths.oauth2_authURL=Auktoriseringslänk
auths.oauth2_profileURL=Profil-URL
auths.oauth2_emailURL=E-post URL
auths.enable_auto_register=Aktivera Automatisk Registrering
auths.tips=Tips
auths.tips.oauth2.general=OAuth2 Autensiering
auths.tips.oauth2.general.tip=När man registrerar en ny OAuth2-autentisering, så skall callback/redirect-länken vara: <host>/user/oauth2/<Authentication Name>/callback
auths.tip.oauth2_provider=OAuth2 leverantör
auths.tip.dropbox=Skapa en ny applikation på https://www.dropbox.com/developers/apps
auths.tip.facebook=Registrera en ny appliaktion på https://developers.facebook.com/apps och lägg till produkten ”Facebook-inloggning”
auths.tip.github=Registrera en ny OAuth applikation på https://github.com/settings/applications/new
auths.tip.gitlab=Registrera en ny applikation på https://gitlab.com/profile/applications
auths.tip.openid_connect=Använd OpenID Connect Discovery länken (<server>/.well-known/openid-configuration) för att ange slutpunkterna
auths.new_success=Autentisering '%s' har lagts till.
auths.delete_auth_title=Tag bort denna autentisering
config.server_config=Server-konfiguration
config.custom_conf=Konfigurationsfil
config.disable_router_log=Avaktivera Router Loggning
config.run_mode=Exekveringsläge
config.git_version=Git version
config.repo_root_path=Rotsökväg för utvecklingskatalog
config.lfs_root_path=LFS Rotsökväg
config.static_file_root_path=Rotsökväg för Statiska Filer
config.script_type=Script-typ
config.reverse_auth_user=Motsatt autentiserings användare
config.ssh_config=SSH-konfiguration
config.ssh_enabled=Aktiverad
config.ssh_port=Port
config.ssh_listen_port=Lyssningsport
config.ssh_root_path=Rotsökväg
config.ssh_key_test_path=Testsökväg för nyckel
@ -738,24 +920,26 @@ config.db_config=Databaskonfiguration
config.db_type=Typ
config.db_host=Värd
config.db_name=Namn
config.db_ssl_mode_helper=(endast för "postgres")
config.db_path=Sökväg
config.db_path_helper=(för "sqlite3" och "tidb")
config.service_config=Tjänstkonfiguration
config.show_registration_button=Visa registreringsknapp
config.disable_key_size_check=Avaktivera kontroll av minsta tillåtna nyckelstorlek
config.active_code_lives=Aktivera livstid för koder
config.reset_password_code_lives=Återställ giltighetstid för passerkod
config.webhook_config=Webbkrokskonfiguration
config.queue_length=Kölängd
config.deliver_timeout=Tidsfrist för leverans
config.skip_tls_verify=Skippa TLS verifiering
config.mailer_enabled=Aktiverad
config.mailer_disable_helo=Avaktivera HELO
config.mailer_name=Namn
config.mailer_host=Server
config.mailer_user=Användare
config.mailer_use_sendmail=Använd Sendmail
config.mailer_sendmail_path=Sendmail sökväg
config.oauth_config=OAuth-konfiguration
config.oauth_enabled=Aktiverad
@ -780,6 +964,7 @@ config.disable_gravatar=Inaktivera Gravatar
config.enable_federated_avatar=Aktivera Förenad Uppslaging av Profilbilder
config.git_config=Git-konfiguration
config.git_disable_diff_highlight=Inaktivera Diff Syntax Highlight
config.git_max_diff_lines=Max Diff-rader (per fil)
config.git_max_diff_line_characters=Max Diff-tecken (per rad)
config.git_max_diff_files=Max Diff-filer (att visa)
@ -814,6 +999,8 @@ notices.delete_all=Ta Bort Alla Notiser
notices.type=Typ
notices.type_1=Utvecklingskatalog
notices.desc=Beskrivning
notices.op=Op.
notices.delete_success=Systemnotifikationer har blivit raderade.
[action]
create_repo=skapade utvecklingskatalog <a href="%s"> %s</a>
@ -829,11 +1016,15 @@ comment_issue=`kommenterade på ärende <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`sammanslog pull-request <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=överförde utvecklingskalatogen <code>%s</code> till <a href="%s">%s</a>
push_tag=laddade upp taggen <a href="%s/src/%s">%[2]s</a> till <a href="%[1]s">%[3]s</a>
delete_tag=tog bort taggen %[2]s från <a href="%[1]s">%[3]s</a>
delete_branch=tog bort branchen %[2]s from <a href="%[1]s">%[3]s</a>
compare_commits=Jämför %d commits
[tool]
ago=%s sedan
from_now=%s från och med nu
now=nu
future=framtiden
1s=1 sekund
1m=1 minut
1h=1 timme
@ -852,17 +1043,23 @@ raw_seconds=sekunder
raw_minutes=minuter
[dropzone]
file_too_big=Filstorleken ({{filesize}} MB) överskrider maxstorleken ({{maxFilesize}} MB).
remove_file=Ta bort fil
[notification]
notifications=Notiser
unread=Olästa
read=Lästa
pin=Pinna notifiering
mark_as_read=Markera som läst
mark_as_unread=Markera som oläst
mark_all_as_read=Markera alla som lästa
[gpg]
error.extract_sign=Det gick inte att extrahera signatur
error.generate_hash=Misslyckades att generera hashsumma av commiten
error.no_gpg_keys_found=Ingen känd nyckel hittad för denna signaturen i databasen
error.not_signed_commit=Inte en signerad commit
[units]

View File

@ -97,7 +97,6 @@ email_not_associate=Bu e-posta adresi hiçbir hesap ile ilişkilendirilmemiştir
send_reset_mail=Parola sıfırlama e-postasını (yeniden) göndermek için buraya tıklayın
reset_password=Parolanızı Sıfırlayın
reset_password_helper=Parolanızı sıfırlamak için buraya tıklayın
password_too_short=Parola uzunluğu %d karakterden az olamaz.
verify=Doğrula
scratch_code=Çizgi kodu
use_scratch_code=Bir çizgi kodu kullanınız
@ -689,8 +688,6 @@ dashboard.operation_switch=Geç
dashboard.operation_run=Çalıştır
dashboard.clean_unbind_oauth=Bağsız OAuth bağlantılarını temizle
dashboard.clean_unbind_oauth_success=Tüm bağsız OAuth bağlantıları silindi.
dashboard.delete_inactivate_accounts=Etkin olmayan tüm hesapları sil
dashboard.delete_inactivate_accounts_success=Tüm aktif olmayan hesaplar silindi.
dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depolarını yeniden başlat
dashboard.reinit_missing_repos_success=Kayıtları bulunanlar için tüm eksik Git depoları yeniden başlatıldı.
dashboard.sync_external_users=Harici kullanıcı verisini senkronize et
@ -802,9 +799,7 @@ config.db_config=Veritabanı Yapılandırması
config.db_type=Türü
config.db_host=Sunucu
config.db_name=İsim
config.db_ssl_mode_helper=(sadece "postgres" için)
config.db_path=Yol
config.db_path_helper=("sqlite3" ve "tidb" için)
config.service_config=Servis Yapılandırması
config.show_registration_button=Kaydolma Tuşunu Göster

File diff suppressed because it is too large Load Diff

View File

@ -75,7 +75,6 @@ cancel=取消
[install]
install=安装页面
title=初始配置
docker_helper=如果您正在使用 Docker 容器运行 Gitea请务必先仔细阅读 <a target="_blank" rel="noopener" href="%s">官方文档</a> 后再对本页面进行填写。
requite_db_desc=Gitea 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=数据库设置
db_type=数据库类型
@ -213,7 +212,7 @@ send_reset_mail=单击此处(重新)发送您的密码重置邮件
reset_password=重置密码
invalid_code=此确认密钥无效或已过期。
reset_password_helper=单击此处重置密码
password_too_short=密码长度不能少于 %d 位
password_too_short=密码长度不能少于 %d 位
non_local_account=非本地帐户不能通过 Gitea 的 web 界面更改密码。
verify=验证
scratch_code=验证口令
@ -495,7 +494,6 @@ visibility=可见性
visiblity_helper=将仓库设为私有
visiblity_helper_forced=站点管理员强制要求新仓库为私有。
visiblity_fork_helper=(修改该值将会影响到所有派生仓库)
clone_helper=不知道如何克隆?查看<a target="_blank" rel="noopener" href="%s">帮助</a> 。
fork_repo=派生仓库
fork_from=派生自
fork_visiblity_helper=无法更改派生仓库的可见性。
@ -613,7 +611,6 @@ editor.directory_is_a_file='%s' 已经作为文件名在此仓库中存在。
editor.file_is_a_symlink='%s' 是一个符号链接,无法在线编辑。
editor.filename_is_a_directory='%s' 已经作为目录名在此仓库中存在。
editor.file_editing_no_longer_exists=正在编辑的文件 '%s' 已不存在。
editor.file_changed_while_editing=文件内容在您进行编辑时已经发生变动。<a target="_blank" rel="noopener" href="%s">单击此处</a> 查看变动的具体内容,或者 <strong>再次提交</strong> 覆盖已发生的变动。
editor.file_already_exists=此仓库已经存在名为 '%s' 的文件。
editor.no_changes_to_show=没有可以显示的变更。
editor.fail_to_update_file=更新/创建文件 '%s' 时发生错误:%v
@ -994,7 +991,6 @@ settings.search_user_placeholder=搜索用户...
settings.org_not_allowed_to_be_collaborator=组织不允许被添加为仓库协作者!
settings.user_is_org_member=被操作的用户是组织,因此无法添加为协作者!
settings.add_webhook=添加 Web 钩子
settings.hooks_desc=当Gitea事件发生时Web钩子自动发出HTTP POST请求。在 <a target="_blank" rel="noopener" href="%s"> 指南</a> 中阅读更多内容。
settings.webhook_deletion=删除 Web 钩子
settings.webhook_deletion_desc=删除 web钩子 将删除其设置和历史记录。继续?
settings.webhook_deletion_success=Web 钩子删除成功!
@ -1011,7 +1007,6 @@ settings.githook_edit_desc=如果钩子未启动,则会显示样例文件中
settings.githook_name=钩子名称
settings.githook_content=钩子文本
settings.update_githook=更新钩子设置
settings.add_webhook_desc=Gitea 将向目标 URL 发送具有指定内容类型的 <code>POST</code> 请求。在 <a target="_blank" rel="noopener" href="%s">webhooks 指南</a> 中阅读更多内容。
settings.payload_url=目标 URL
settings.content_type=POST Content Type
settings.secret=密钥文本
@ -1167,6 +1162,8 @@ branch.protected_deletion_failed=分支 '%s' 已被保护,不可删除。
topic.manage_topics=管理主题
topic.done=保存
topic.count_prompt=您最多选择25个主题
topic.format_prompt=主题必须以字母或数字开头,可以包含连字符 (-)并且长度不得超过35个字符
[org]
org_name_holder=组织名称
@ -1271,8 +1268,6 @@ dashboard.operation_switch=开关
dashboard.operation_run=执行
dashboard.clean_unbind_oauth=清理未绑定的 OAuth 连接
dashboard.clean_unbind_oauth_success=所有未绑定的 OAuth 连接已被删除。
dashboard.delete_inactivate_accounts=删除所有未激活帐户
dashboard.delete_inactivate_accounts_success=所有未激活帐号清除成功!
dashboard.delete_repo_archives=删除所有仓库存档
dashboard.delete_repo_archives_success=所有仓库存档清除成功!
dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库
@ -1475,9 +1470,7 @@ config.db_host=主机
config.db_name=数据库名称
config.db_user=用户名
config.db_ssl_mode=SSL
config.db_ssl_mode_helper=(仅限 "postgres" 使用)
config.db_path=数据库路径
config.db_path_helper=(用于 "sqlite3" 和 "tidb"
config.service_config=服务配置
config.register_email_confirm=需要电子邮件确认注册

View File

@ -94,7 +94,6 @@ email_not_associate=此電子郵件地址未與任何帳戶連結
send_reset_mail=點選此處重發您的密碼重製郵件
reset_password=重置密碼
reset_password_helper=單擊此處重置密碼
password_too_short=密碼長度不能少於 %d 位!
verify=驗證
scratch_code=備用碼
use_scratch_code=使用備用碼
@ -614,8 +613,6 @@ dashboard.operation_switch=開關
dashboard.operation_run=執行
dashboard.clean_unbind_oauth=清理未綁定OAuth的連結
dashboard.clean_unbind_oauth_success=所有未綁定 OAuth 的連結已刪除。
dashboard.delete_inactivate_accounts=刪除所有未啟用帳戶
dashboard.delete_inactivate_accounts_success=成功清除所有未啟用帳號!
dashboard.reinit_missing_repos=重新初始化所有遺失具已存在記錄的Git 儲存庫
dashboard.reinit_missing_repos_success=所有遺失具已存在記錄的Git 儲存庫已重新初始化。
dashboard.sync_external_users=同步外部使用者資料
@ -737,9 +734,7 @@ config.db_config=資料庫設定
config.db_type=資料庫類型
config.db_host=主機地址
config.db_name=資料庫名稱
config.db_ssl_mode_helper=(僅限 "postgres" 使用)
config.db_path=資料庫路徑
config.db_path_helper=(用於 "sqlite3" 和 "tidb"
config.service_config=服務設定
config.show_registration_button=顯示註冊按鈕

File diff suppressed because it is too large Load Diff

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