Merge branch 'master' of https://github.com/go-gitea/gitea
This commit is contained in:
commit
b1504caee8
15
.drone.yml
15
.drone.yml
|
@ -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
|
||||
|
|
75
CHANGELOG.md
75
CHANGELOG.md
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
4
Gopkg.lock
generated
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
7
Makefile
7
Makefile
|
@ -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 \
|
||||
|
|
23
README.md
23
README.md
|
@ -12,13 +12,6 @@
|
|||
[](https://www.codetriage.com/go-gitea/gitea)
|
||||
[](https://opencollective.com/gitea)
|
||||
|
||||
| | | |
|
||||
|:---:|:---:|:---:|
|
||||
||||
|
||||
||||
|
||||
||||
|
||||
||||
|
||||
|
||||
## 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!
|
||||
|
||||
| | | |
|
||||
|:---:|:---:|:---:|
|
||||
||||
|
||||
||||
|
||||
||||
|
||||
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
46
contrib/init/sunos/gitea.xml
Normal file
46
contrib/init/sunos/gitea.xml
Normal 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>
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
###
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
75
docs/content/doc/advanced/api-usage.en-us.md
Normal file
75
docs/content/doc/advanced/api-usage.en-us.md
Normal 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":"..."}]
|
||||
```
|
|
@ -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 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
60
docs/content/doc/usage/backup-and-restore.zh-cn.md
Normal file
60
docs/content/doc/usage/backup-and-restore.zh-cn.md
Normal 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
|
||||
```
|
|
@ -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`
|
||||
|
|
46
docs/content/doc/usage/https-support.md
Normal file
46
docs/content/doc/usage/https-support.md
Normal 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]`.
|
|
@ -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
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]'
|
|
@ -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
|
||||
|
|
209
models/fixtures/team_unit.yml
Normal file
209
models/fixtures/team_unit.yml
Normal 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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
158
models/migrations/v67.go
Normal 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
213
models/migrations/v68.go
Normal 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
80
models/migrations/v69.go
Normal 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()
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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"))
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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":
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 + "/")
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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>`)
|
||||
}
|
||||
|
|
|
@ -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/"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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-_\\./]")
|
||||
)
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=Sí
|
||||
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
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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=登録ボタンを表示します。
|
||||
|
|
|
@ -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=등록 버튼을 표시
|
||||
|
|
|
@ -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
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
@ -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=Прикажи дугме за регистрацију
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
@ -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=需要电子邮件确认注册
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue
Block a user